Sandkassa: Difference between revisions

From Maria GDK Wiki
Jump to navigation Jump to search
No edit summary
m (Mats maser.)
 
(9 intermediate revisions by one other user not shown)
Line 1: Line 1:
Her skal Mari leke.
Her skal Mari leke. Hvis hun gidder....


{{Note|This is an error! Or maybe a warning!|error}}
Da leker JEG her. For det '''gidder''' jeg.


{{Note|'''Tip:''' Here is a good tip!|reminder}}
Intern link: [[#Preparing for creation of Maria layers]]


{{Note|Remember to always do the thing}}
Intern link skjult med tekst: [[#Preparing for creation of Maria layers|Teksten]]


Gigantisk haug med kode:
Gigantisk haug med kode:


<source lang="csharp">
This section describes how to create a basic map application, with fixed map type - displaying tracks from a track service.  
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: simpledrawobject.proto
#pragma warning disable 1591, 0612, 3021
#region Designer generated code


using pb = global::Google.Protobuf;
This example is made to run with '''''Maria GDK Version 2.0''''', with '''''.NETFramework version 4.5.''''' Sample code for this example is found in the '''''MariaBasicMapClient''''' project of the '''''SampleProjects''''' solution.
using pbc = global::Google.Protobuf.Collections;
using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace TPG.DrawObjects.Serialize.Protoc {


  /// <summary>Holder for reflection information generated from simpledrawobject.proto</summary>
<syntaxhighlight lang="python">
  public static partial class SimpledrawobjectReflection {
def lag_mat(ingredienser):
  komfyr.stek()
</syntaxhighlight>


    #region Descriptor
== Noen bilder ==
    /// <summary>File descriptor for simpledrawobject.proto</summary>
[[File:Datasource tags.png|none|thumb]]
    public static pbr::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbr::FileDescriptor descriptor;


    static SimpledrawobjectReflection() {
== Creating the Map Client Window ==
      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


  }
Create a '''''WPF Window''''' (main application window or sub window) - ''MariaWpfWindow'' - to be used for your map client.<br> For building Maria GDK clients in Windows forms applications, see [[Windows forms client|Maria Windows-Forms Client]].
  #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]
=== Including MariaUserControl ===
    public GeoPointProto() {
      OnConstruction();
    }


    partial void OnConstruction();
* For this part you will need '''''TPG.Maria.MariaUserControl''''' NuGet package as a minimum. See [[Development requirements#Loading Maria GDK Packages|Loading Maria GDK, NuGet Packages]]


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
Add the MariaUserControl to the xaml of your window, name of your choice, optionally including properties for the integrated map controls.
    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]
<source lang="xml"><Window x:Class="BasicMapClient.MariaWpfWindow"
    public GeoPointProto Clone() {
. . .
      return new GeoPointProto(this);
xmlns:MariaUserControl= "clr-namespace:TPG.Maria.MariaUserControl; assembly=TPG.Maria.MariaUserControl"
    }
Title="MariaWpfWindow" Height="550" Width="525" >
<Grid>
<MariaUserControl:MariaUserControl Name="MariaCtrl"
                                    IsMiniMapVisible="True"
                                    IsPanNavigationVisible="True"
                                    IsScaleBarVisible="True"
                                    IsRulerVisible="True"
                                    />
  </Grid>
</Window></source>


    /// <summary>Field number for the "field_indexes" field.</summary>
=== Main view model ===
    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>
Create a class (''MariaWindowViewModel'') for communication with the Maria component.
    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>
In the constructor of your window (''MariaWpfWindow'') Set the data context of your client window to be this class.
    public const int LongitudeFieldNumber = 3;
    private double longitude_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double Longitude {
      get { return longitude_; }
      set {
        longitude_ = value;
      }
    }
 
    /// <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>
    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 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]
    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;
          }
          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> {
    private static readonly pb::MessageParser<GeoShiftedIntPointProto> _parser = new pb::MessageParser<GeoShiftedIntPointProto>(() => new GeoShiftedIntPointProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<GeoShiftedIntPointProto> Parser { get { return _parser; } }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[1]; }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
<source lang="csharp">public MariaWpfWindow()
    pbr::MessageDescriptor pb::IMessage.Descriptor {
{
      get { return Descriptor; }
  InitializeComponent();
    }
  DataContext = new MariaWindowViewModel();
}</source>
=== Handle the WindowClosing event ===


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
In the window holding your ''MariaUserControl'' (''MariaWpfWindow''), implement an event handler for the ''WindowClosing'' event, disposing the ''MariaUserControl'' object and the ''MapLayerManager'' object used by the map layers.
    public GeoShiftedIntPointProto() {
      OnConstruction();
    }


    partial void OnConstruction();
In the XAML :


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
<source lang="xml"><Window x:Class="BasicMapClient.MariaWpfWindow"
    public GeoShiftedIntPointProto(GeoShiftedIntPointProto other) : this() {
. . .  
      fieldIndexes_ = other.fieldIndexes_.Clone();
Title="MariaWpfWindow" Height="550" Width="525" Closing="WindowClosing">
      invalidIndexes_ = other.invalidIndexes_.Clone();
  <Grid>
      longitude_ = other.longitude_;
       <MariaUserControl:MariaUserControl
      latitude_ = other.latitude_;
       . . .</source>
       text_ = other.text_;
In the code behind:
       altitude_ = other.altitude_;
      pointInformation_ = other.pointInformation_.Clone();
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
<source lang="csharp">private void WindowClosing(object sender, System.ComponentModel.CancelEventArgs e)
    public GeoShiftedIntPointProto Clone() {
{
      return new GeoShiftedIntPointProto(this);
  MariaCtrl.Dispose();
    }
  ((IDisposable)DataContext).Dispose();
}</source>
=== Preparing for creation of Maria layers ===


    /// <summary>Field number for the "field_indexes" field.</summary>
In the main view model class, ''MariaWindowViewModel'', create an auto property to hold a list of Maria layers, ''Layers'', and add a constructor, initializing the propery.
    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>
<source lang="csharp">public ObservableCollection<IMariaLayer>Layers { get; set; }
    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>
internal MariaWindowViewModel()
    public const int LongitudeFieldNumber = 3;
{
    private int longitude_;
     Layers = new ObservableCollection<IMariaLayer>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
}</source>
    public int Longitude {
Then, bind the Layers property of the MariaUserControl to this list.
      get { return longitude_; }
      set {
        longitude_ = value;
      }
    }


    /// <summary>Field number for the "latitude" field.</summary>
<source lang="xml"><MariaUserControl:MariaUserControl Name="MariaCtrl"
    public const int LatitudeFieldNumber = 4;
                                  Layers="{Binding Layers}"
    private int latitude_;
                                  IsMiniMapVisible="True"
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                                  IsPanNavigationVisible="True"
    public int Latitude {
                                  IsScaleBarVisible="True"
      get { return latitude_; }
                                  IsRulerVisible="True"
      set {
                                  /></source>
        latitude_ = value;
<div class="alert alert-success" role="alert">
      }
    }


    /// <summary>Field number for the "Text" field.</summary>
<i class="fa fa-arrow-circle-right"></i><b> Run:</b><br> Building and running your application, the window area should now show an empty area including navigation controls according to your specifications!
    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>
</div>
    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]
=== Layer interaction in general ===
    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]
For each of the desired layers (will be described in detail for each layer type):
    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]
* Create an instance of the corresponding GDK layer class
    public override string ToString() {
* Add the created layer to the ''MariaWindowViewModel'' Layers property.
      return pb::JsonFormatter.ToDiagnosticString(this);
* Create a separate view model class for each layer (may be skipped, if few layers)
    }
* Add event handler(s) for the ''LayerInitialized'' event(s).


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
The layers are accessed programmatically from your application through the different GDK layer interfaces.
    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]
'''Note:'''
    public void MergeFrom(GeoShiftedIntPointProto other) {
* Rendering of the layers will be in the same order as they are in the Layers property.
      if (other == null) {
* No access should be performed against the layer until the <b>LayerInitialized</b> event has been called.
        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]
== Service configuration ==
    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;
          }
        }
      }
    }


  }
To enable the service related layers to receive information from their services, they need to establish connections! One way of doing this is by specification in the application configuration (app.config).


  public sealed partial class PointInformation : pb::IMessage<PointInformation> {
Here is a service connection configuration example with connection info for some of the Maria GDK services,within the '''''system.serviceModel''''' tag. <br> For further details on how to administrate Maria GDK services, refer to the system documentation.<br>
    private static readonly pb::MessageParser<PointInformation> _parser = new pb::MessageParser<PointInformation>(() => new PointInformation());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<PointInformation> Parser { get { return _parser; } }


     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
<source lang="xml">  <system.serviceModel>
    public static pbr::MessageDescriptor Descriptor {
     <bindings>
       get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[2]; }
      <basicHttpBinding>
    }
        <binding name="myHttpBinding"
                maxBufferSize="2147483647"
                maxReceivedMessageSize="2147483647"
                closeTimeout="00:10:00" openTimeout="00:10:00"
                receiveTimeout="00:10:00" sendTimeout="00:10:00">
          <readerQuotas maxArrayLength="2147483647" />
        </binding>
       </basicHttpBinding>
    </bindings>
   
    <client>
      <!-- Catalog service -->
      <endpoint name="MapCatalogService"
                address="http://localhost:9008/catalog"
                contract="TPG.GeoFramework.MapServiceInterfaces.IMapCatalogService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding"/>


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      <!-- Template service -->
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      <endpoint name="TemplateService"
      get { return Descriptor; }
                address="http://localhost:9008/maptemplates"
    }
                contract="TPG.GeoFramework.MapTemplateServiceContracts.IMapTemplateService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding"/>


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      <!-- Track service -->
    public PointInformation() {
      <endpoint name="TrackService"
      OnConstruction();
                address="http://localhost:9008/tracks"
    }
                contract="TPG.GeoFramework.TrackServiceInterfaces.IMariaTrackService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding"/>


    partial void OnConstruction();
      <!-- Enhanced Elevation service -->
      <endpoint name="EnahncedElevationService"
                address="http://localhost:9008/enhancedElevation"
                contract="TPG.EnhancedElevationServiceClient.IEnhancedElevationService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding"/>


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      <!-- Location service -->
    public PointInformation(PointInformation other) : this() {
      <endpoint name="LocationService"
      info_ = other.info_.Clone();
                address="http://localhost:9008/location/geoloc"
    }
                contract="TPG.GeoFramework.LocationServiceInterfaces.ILocationService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding"
                behaviorConfiguration="myEndpointBehavior"/>


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      <!-- Draw object service -->
    public PointInformation Clone() {
      <endpoint name="DrawObjectService"
      return new PointInformation(this);
                address="http://localhost:9008/drawobjects"
    }
                contract="TPG.GeoFramework.DrawObjectServiceInterfaces.IDrawObjectService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding"/>


    /// <summary>Field number for the "info" field.</summary>
      <!-- Geo Fencing Service -->
    public const int InfoFieldNumber = 1;
      <endpoint name="GeoFencingService/DataManager"
    private static readonly pbc::MapField<string, string>.Codec _map_info_codec
                address="http://localhost:9008/GeoFencingService/DataManager"
        = new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForString(18), 10);
                contract="TPG.GeoFramework.GeoFencingServiceInterfaces.IDataManagerService"
    private readonly pbc::MapField<string, string> info_ = new pbc::MapField<string, string>();
                binding="basicHttpBinding"
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                bindingConfiguration="myHttpBinding" />
    public pbc::MapField<string, string> Info {
      get { return info_; }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      <endpoint name="GeoFencingService/FenceRule"
    public override bool Equals(object other) {
                address="http://localhost:9008/GeoFencingService/FenceRule"
      return Equals(other as PointInformation);
                contract="TPG.GeoFramework.GeoFencingServiceInterfaces.IGeoFencingRuleService"
    }
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding" />


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      <endpoint name="GeoFencingService/NotificationHandling"
    public bool Equals(PointInformation other) {
                address="http://localhost:9008/GeoFencingService/NotificationHandling"
      if (ReferenceEquals(other, null)) {
                contract="TPG.GeoFramework.GeoFencingServiceInterfaces.INotificationHandlingService"
        return false;
                binding="basicHttpBinding"
      }
                bindingConfiguration="myHttpBinding" />
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!Info.Equals(other.Info)) return false;
      return true;
    }


     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     </client>
     public override int GetHashCode() {
     <behaviors>
       int hash = 1;
       <endpointBehaviors>
      hash ^= Info.GetHashCode();
        <behavior name="myEndpointBehavior">
       return hash;
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
     }
        </behavior>
       </endpointBehaviors>
     </behaviors>
    <extensions></extensions>
  </system.serviceModel></source>


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
== Creating a Map Layer with Map Service Connection ==
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
The map layer is accessed programmatically through the map layer interface, [http://maria.support2.teleplan.no/MariaGDKDoc/html/C8909007.htm '''''IMariaMapLayer'''''], and the extended map layer interface [http://maria.support2.teleplan.no/MariaGDKDoc/html/BA316F90.htm '''''IMariaExtendedMapLayer'''''] .
    public void WriteTo(pb::CodedOutputStream output) {
      info_.WriteTo(output, _map_info_codec);
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
* For this part you will need to include '''''TPG.Maria.MapLayer''''' NuGet package.
    public int CalculateSize() {
      int size = 0;
      size += info_.CalculateSize(_map_info_codec);
      return size;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
Create a view model class (''MapViewModel'') to handle intaractions toward the map layer, and add the following variables and properties:
    public void MergeFrom(PointInformation other) {
      if (other == null) {
        return;
      }
      info_.Add(other.info_);
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
<source lang="csharp">private readonly IMariaMapLayer _mapLayer;
    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 IMariaMapLayer MiniMapLayer { get; set; }
public GeoPos CenterPosition { get; set; }
public double Scale { get; set; }</source>
Create the MapViewModel constructor, initializing map and minimap event handling:


  public sealed partial class GeoDoublePointsProto : pb::IMessage<GeoDoublePointsProto> {
<source lang="csharp">public MapViewModel(IMariaMapLayer mapLayer, IMariaMapLayer miniMapLayer)
     private static readonly pb::MessageParser<GeoDoublePointsProto> _parser = new pb::MessageParser<GeoDoublePointsProto>(() => new GeoDoublePointsProto());
{
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     _mapLayer = mapLayer;
    public static pb::MessageParser<GeoDoublePointsProto> Parser { get { return _parser; } }
    _mapLayer.LayerInitialized += OnMapLayerInitialized;
   
    MiniMapLayer = miniMapLayer;
     MiniMapLayer.LayerInitialized += OnMiniMapLayerInitialized;
}</source>
Add the ''LayerInitialized'' event handlers for the map and mini map:


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
<source lang="csharp">private void OnMapLayerInitialized()
    public static pbr::MessageDescriptor Descriptor {
{
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[3]; }
    Scale = 50000;
     }
     CenterPosition = new GeoPos(60, 10);


     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     _mapLayer.ActiveMapTemplate = PreferredMapTemplate();
     pbr::MessageDescriptor pb::IMessage.Descriptor {
}
      get { return Descriptor; }
private void OnMiniMapLayerInitialized()
    }
{
     MiniMapLayer.ActiveMapTemplate = PreferredMapTemplate();
}


     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
private MapTemplate PreferredMapTemplate()
     public GeoDoublePointsProto() {
{
      OnConstruction();
     var preferred = "WorldMap";
     foreach (var template in _mapLayer.ActiveMapTemplates)
    {
        if (template.Name == preferred)
            return template;
     }
     }
    return _mapLayer.ActiveMapTemplates.Any() ? _mapLayer.ActiveMapTemplates.Last() : null;
}</source>
Verify that your ''app.config'' file contains endpoint definitions for the '''''MapCatalogService''''' and the '''''TemplateService''''', as described in the [[Basic_map_client#Service_configuration|Service Configuration]] section.


    partial void OnConstruction();
Then, include the MapViewModel in the main view model (''MariaWindowViewModel'').


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
Declarations:
    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]
<source lang="csharp">public MapViewModel MapViewModel { get; set; }
    public GeoDoublePointsProto Clone() {
      return new GeoDoublePointsProto(this);
    }


    /// <summary>Field number for the "longitude" field.</summary>
private IMariaMapLayer _mapLayer;
    public const int LongitudeFieldNumber = 1;
private MapLayer _miniMapLayer;</source>
    private static readonly pb::FieldCodec<double> _repeated_longitude_codec
and in the constructor
        = 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>
<source lang="csharp">. . .
    public const int LatitudeFieldNumber = 2;
    private static readonly pb::FieldCodec<double> _repeated_latitude_codec
        = pb::FieldCodec.ForDouble(18);
    private readonly pbc::RepeatedField<double> latitude_ = new pbc::RepeatedField<double>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<double> Latitude {
      get { return latitude_; }
    }


    /// <summary>Field number for the "Text" field.</summary>
// Service connection specified by app.config
    public const int TextFieldNumber = 3;
IMariaMapLayerManager mapLayerManager = new MariaMapLayerManager();
    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>
_mapLayer = new MapLayer(mapCatalogServiceClient, mapTemplateServiceClient);
    public const int AltitudeFieldNumber = 4;
_miniMapLayer = new MapLayer(mapCatalogServiceClient, mapTemplateServiceClient);
    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>
MapViewModel = new MapViewModel(_mapLayer, _miniMapLayer);
    public const int InformationFieldNumber = 5;
Layers.Add(_mapLayer);</source>
    private static readonly pb::FieldCodec<global::TPG.DrawObjects.Serialize.Protoc.PointInformation> _repeated_information_codec
Update MariaUserControl binding
        = 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]
<source lang="xml"><MariaUserControl:MariaUserControl Name="MariaCtrl"
     public override bool Equals(object other) {
                                  Layers="{Binding Layers}"
      return Equals(other as GeoDoublePointsProto);
                                  IsMiniMapVisible="True"
    }
                                  IsPanNavigationVisible="True"
                                  IsScaleBarVisible="True"
                                  IsRulerVisible="True"
                                  CenterScale="{Binding MapViewModel.Scale}"
                                  CenterPosition="{Binding MapViewModel.CenterPosition}"
                                  MiniMapLayer="{Binding MapViewModel.MiniMapLayer}"      
                                  />
                                                                      </source>
<div class="alert alert-success" role="alert">


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
<i class="fa fa-arrow-circle-right"></i><b> Run:</b><br> Running your application, the window area should now include map information and mini map - and you should be able to navigate the map!
    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]
</div>
    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]
== Creating Track Layer with Track Service Connection ==
    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]
Key information:
    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;
          }
        }
      }
    }


  }
* The track layer is accessed programmatically through the track layer interface [http://maria.support2.teleplan.no/MariaGDKDoc/html/B2FB03E9.htm '''''IMariaTrackLayer'''''] and the extended track layer interface [http://maria.support2.teleplan.no/MariaGDKDoc/html/AA8CECEC.htm '''''IMariaExtendedTrackLayer'''''].
* For this part you will need to add the '''''TPG.Maria.TrackLayer''''' NuGet package.


  public sealed partial class GeoShiftedIntPointsProto : pb::IMessage<GeoShiftedIntPointsProto> {
Create a view model class (''TrackViewModel'') for the track layer:
    private static readonly pb::MessageParser<GeoShiftedIntPointsProto> _parser = new pb::MessageParser<GeoShiftedIntPointsProto>(() => new GeoShiftedIntPointsProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<GeoShiftedIntPointsProto> Parser { get { return _parser; } }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
<source lang="csharp">public class TrackViewModel
    public static pbr::MessageDescriptor Descriptor {
{  
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[4]; }
}</source>
    }
Add the following local variable


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
<source lang="csharp">private readonly IMariaTrackLayer _trackLayer;</source>
    pbr::MessageDescriptor pb::IMessage.Descriptor {
Add the TrackViewModel constructor
      get { return Descriptor; }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
<source lang="csharp">public TrackViewModel(IMariaTrackLayer trackLayer)
    public GeoShiftedIntPointsProto() {
{
      OnConstruction();
    _trackLayer = trackLayer;
     }
     _trackLayer.LayerInitialized += OnTrackLayerInitialized;
}</source>
Implement the OnInitialized event handler (''OnTrackLayerInitialized'') For the TrackList value, use a track list available in your Track Service.


     partial void OnConstruction();
<source lang="csharp">private void OnTrackLayerInitialized()
     _trackLayer.TrackLists = new ObservableCollection<string> { "ais.test" };
    _trackLayer.TrackServices = new ObservableCollection<IMariaService>
          {
              new MariaService("TrackService")
          };


     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     if (_trackLayer.TrackServices.Count > 0)
     public GeoShiftedIntPointsProto(GeoShiftedIntPointsProto other) : this() {
     {
      longitude_ = other.longitude_.Clone();
        _trackLayer.ActiveTrackService = _trackLayer.TrackServices[0];
      latitude_ = other.latitude_.Clone();
        _trackLayer.ActiveTrackList = _trackLayer.TrackLists[0];
      text_ = other.text_.Clone();
      altitude_ = other.altitude_.Clone();
      information_ = other.information_.Clone();
     }
     }
}</source>
Make sure that your ''app.config'' file contains endpoint definitions for the '''''TrackService''''', as described in the [[Basic_map_client#Service_configuration|Service Configuration]] section.


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
Then, include the TrackViewModel in the main view model (''MariaWindowViewModel'').
    public GeoShiftedIntPointsProto Clone() {
      return new GeoShiftedIntPointsProto(this);
    }


    /// <summary>Field number for the "longitude" field.</summary>
Declarations:
    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>
<source lang="csharp">private readonly IMariaTrackLayer _trackLayer;
    public const int LatitudeFieldNumber = 2;
public TrackViewModel TrackViewModel { get; set; }</source>
    private static readonly pb::FieldCodec<int> _repeated_latitude_codec
and in the constructor
        = 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>
<source lang="csharp">_trackLayer = new TPG.Maria.TrackLayer.TrackLayer();
    public const int TextFieldNumber = 3;
TrackViewModel = new TrackViewModel(_trackLayer);
    private static readonly pb::FieldCodec<string> _repeated_text_codec
Layers.Add(_trackLayer);</source>
        = 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>
'''Run:'''
    public const int InformationFieldNumber = 5;
In addition to map information and mini map, the application should now include tracks from the specified track list of a Track Service, and you should be able to select tracks!
    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]
<source lang="csharp">
    public int CalculateSize() {
// ZipOutputStream.cs
      int size = 0;
//
      size += longitude_.CalculateSize(_repeated_longitude_codec);
// ------------------------------------------------------------------
      size += latitude_.CalculateSize(_repeated_latitude_codec);
//
      size += text_.CalculateSize(_repeated_text_codec);
// Copyright (c) 2009 Dino Chiesa.
      size += altitude_.CalculateSize(_repeated_altitude_codec);
// All rights reserved.
      size += information_.CalculateSize(_repeated_information_codec);
//
      return size;
// This code module is part of DotNetZip, a zipfile class library.
    }
//
 
// ------------------------------------------------------------------
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
//
    public void MergeFrom(GeoShiftedIntPointsProto other) {
// This code is licensed under the Microsoft Public License.
      if (other == null) {
// See the file License.txt for the license details.
        return;
// More info on: http://dotnetzip.codeplex.com
      }
//
      longitude_.Add(other.longitude_);
// ------------------------------------------------------------------
      latitude_.Add(other.latitude_);
//
      text_.Add(other.text_);
// last saved (in emacs):
      altitude_.Add(other.altitude_);
// Time-stamp: <2011-July-28 06:34:30>
      information_.Add(other.information_);
//
    }
// ------------------------------------------------------------------
 
//
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
// This module defines the ZipOutputStream class, which is a stream metaphor for
    public void MergeFrom(pb::CodedInputStream input) {
// generating zip files.  This class does not depend on Ionic.Zip.ZipFile, but rather
      uint tag;
// stands alongside it as an alternative "container" for ZipEntry. It replicates a
      while ((tag = input.ReadTag()) != 0) {
// subset of the properties, including these:
        switch(tag) {
//
          default:
//  - Comment
            input.SkipLastField();
//  - Encryption
            break;
//  - Password
          case 10:
//  - CodecBufferSize
          case 8: {
//  - CompressionLevel
            longitude_.AddEntriesFrom(input, _repeated_longitude_codec);
//  - CompressionMethod
            break;
//  - EnableZip64 (UseZip64WhenSaving)
          }
//  - IgnoreCase (!CaseSensitiveRetrieval)
          case 18:
//
          case 16: {
// It adds these novel methods:
            latitude_.AddEntriesFrom(input, _repeated_latitude_codec);
//
            break;
//  - PutNextEntry
          }
//
          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> {
    private static readonly pb::MessageParser<DataFieldsProto> _parser = new pb::MessageParser<DataFieldsProto>(() => new DataFieldsProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<DataFieldsProto> Parser { get { return _parser; } }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[5]; }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
using System;
    pbr::MessageDescriptor pb::IMessage.Descriptor {
using System.Threading;
      get { return Descriptor; }
using System.Collections.Generic;
    }
using System.IO;
using Ionic.Zip;


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
namespace Ionic.Zip
    public DataFieldsProto() {
{
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [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>
     /// <summary>
     ///field_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>();
    /// <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>
        /// <summary>
    public const int NameFieldNumber = 3;
        ///  Create a ZipOutputStream that writes to a filesystem file.
    private string name_ = "";
        /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
    public string Name {
        /// <remarks>
      get { return name_; }
        ///  The <see cref="ZipFile"/> class is generally easier to use when creating
      set {
        ///  zip files. The ZipOutputStream offers a different metaphor for creating a
         name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
        ///  zip file, based on the <see cref="System.IO.Stream"/> class.
      }
        /// </remarks>
     }
        ///
 
        /// <param name="fileName">
    /// <summary>Field number for the "HierarchyCode" field.</summary>
        ///  The name of the zip file to create.
     public const int HierarchyCodeFieldNumber = 4;
        /// </param>
     private string hierarchyCode_ = "";
        ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <example>
    public string HierarchyCode {
        ///
      get { return hierarchyCode_; }
        ///  This example shows how to create a zip file, using the
      set {
        ///  ZipOutputStream class.
         hierarchyCode_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
        ///
      }
        /// <code lang="C#">
    }
        /// private void Zipup()
 
        /// {
    /// <summary>Field number for the "DrawDepth" field.</summary>
        ///    if (filesToZip.Count == 0)
    public const int DrawDepthFieldNumber = 5;
        ///    {
    private int drawDepth_;
         ///        System.Console.WriteLine("Nothing to do.");
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///        return;
    public int DrawDepth {
        ///     }
      get { return drawDepth_; }
        ///
      set {
        ///    using (var output= new ZipOutputStream(outputFileName))
         drawDepth_ = value;
        ///     {
      }
        ///        output.Password = "VerySecret!";
     }
        ///        output.Encryption = EncryptionAlgorithm.WinZipAes256;
 
        ///
    /// <summary>Field number for the "RotationAngle" field.</summary>
        ///        foreach (string inputFileName in filesToZip)
     public const int RotationAngleFieldNumber = 6;
        ///        {
     private float rotationAngle_;
         ///            System.Console.WriteLine("file: {0}", inputFileName);
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
     public float RotationAngle {
        ///            output.PutNextEntry(inputFileName);
      get { return rotationAngle_; }
        ///            using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read,
      set {
        ///                                         FileShare.Read | FileShare.Write ))
        rotationAngle_ = value;
        ///             {
      }
        ///                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 "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>
        /// <summary>
    public const int AlphaFactorFieldNumber = 8;
        ///   Create a ZipOutputStream.
    private float alphaFactor_;
         /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
    public float AlphaFactor {
         /// <remarks>
      get { return alphaFactor_; }
        ///  See the documentation for the <see
      set {
         ///   cref="ZipOutputStream(Stream)">ZipOutputStream(Stream)</see>
         alphaFactor_ = value;
        ///  constructor for an example.
      }
         /// </remarks>
    }
        ///
 
         /// <param name="stream">
    /// <summary>Field number for the "MovementIndicatorColor" field.</summary>
        ///  The stream to wrap. It must be writable.
    public const int MovementIndicatorColorFieldNumber = 9;
         /// </param>
    private uint movementIndicatorColor_;
        ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         /// <param name="leaveOpen">
    public uint MovementIndicatorColor {
         ///   true if the application would like the stream
      get { return movementIndicatorColor_; }
         ///   to remain open after the <c>ZipOutputStream</c> has been closed.
      set {
         /// </param>
         movementIndicatorColor_ = value;
         public ZipOutputStream(Stream stream, bool leaveOpen)
      }
         {
    }
            _Init(stream, leaveOpen, null);
 
    /// <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]
    public TacticalFieldsProto(TacticalFieldsProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      minefieldOpacity_ = other.minefieldOpacity_;
      symbolIndicator_ = other.symbolIndicator_;
      additionalInformation_ = other.additionalInformation_.Clone();
      uniqueDesignation_ = other.uniqueDesignation_.Clone();
      dateTimeGroup_ = other.dateTimeGroup_.Clone();
      offsetLocationDisplacementX_ = other.offsetLocationDisplacementX_;
      offsetLocationDisplacementY_ = other.offsetLocationDisplacementY_;
      quantity_ = other.quantity_;
      nuclearWeaponType_ = other.nuclearWeaponType_;
      directionOfMovement_ = other.directionOfMovement_;
      altitudeDepth_ = other.altitudeDepth_;
      distance_ = other.distance_;
      azimuth_ = other.azimuth_;
      tacticalEnums_ = other.tacticalEnums_;
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public TacticalFieldsProto Clone() {
      return new TacticalFieldsProto(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 "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>
         private void _Init(Stream stream, bool leaveOpen, string name)
    public const int UniqueDesignationFieldNumber = 6;
         {
    private static readonly pb::FieldCodec<string> _repeated_uniqueDesignation_codec
            // workitem 9307
         = pb::FieldCodec.ForString(50);
            _outputStream = stream.CanRead ? stream : new CountingStream(stream);
    private readonly pbc::RepeatedField<string> uniqueDesignation_ = new pbc::RepeatedField<string>();
            CompressionLevel = Ionic.Zlib.CompressionLevel.Default;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            CompressionMethod = Ionic.Zip.CompressionMethod.Deflate;
    public pbc::RepeatedField<string> UniqueDesignation {
             _encryption = EncryptionAlgorithm.None;
      get { return uniqueDesignation_; }
             _entriesWritten = new Dictionary<String, ZipEntry>(StringComparer.Ordinal);
    }
             _zip64 = Zip64Option.Never;
 
             _leaveUnderlyingStreamOpen = leaveOpen;
    /// <summary>Field number for the "DateTimeGroup" field.</summary>
             Strategy = Ionic.Zlib.CompressionStrategy.Default;
    public const int DateTimeGroupFieldNumber = 7;
             _name = name ?? "(stream)";
    private static readonly pb::FieldCodec<string> _repeated_dateTimeGroup_codec
#if !NETCF
        = pb::FieldCodec.ForString(58);
             ParallelDeflateThreshold = -1L;
    private readonly pbc::RepeatedField<string> dateTimeGroup_ = new pbc::RepeatedField<string>();
#endif
    [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]
         /// <summary>Provides a string representation of the instance.</summary>
    pbr::MessageDescriptor pb::IMessage.Descriptor {
         /// <remarks>
      get { return Descriptor; }
         ///   <para>
    }
         ///    This can be useful for debugging purposes.
 
         ///   </para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         /// </remarks>
    public GenericFieldsProto() {
         /// <returns>a string representation of the instance.</returns>
      OnConstruction();
         public override String ToString()
    }
         {
 
            return String.Format ("ZipOutputStream::{0}(leaveOpen({1})))", _name, _leaveUnderlyingStreamOpen);
    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>
    public const int MinFontSizeFieldNumber = 31;
    private uint minFontSize_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint MinFontSize {
      get { return minFontSize_; }
      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());
        ///  Sets the password to be used on the <c>ZipOutputStream</c> instance.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// </summary>
    public static pb::MessageParser<VerticalDistanceDataProto> 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[8]; }
                {
    }
                    _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 VerticalDistanceDataProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VerticalDistanceDataProto(VerticalDistanceDataProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      unitType_ = other.unitType_;
      dimensions_ = other.dimensions_;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VerticalDistanceDataProto Clone() {
      return new VerticalDistanceDataProto(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 "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]
    public SurfaceVolumeProto() {
      OnConstruction();
    }
    partial void OnConstruction();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SurfaceVolumeProto(SurfaceVolumeProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      LowerVerticalDistance = other.lowerVerticalDistance_ != null ? other.LowerVerticalDistance.Clone() : null;
      UpperVerticalDistance = other.upperVerticalDistance_ != null ? other.UpperVerticalDistance.Clone() : null;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SurfaceVolumeProto Clone() {
      return new SurfaceVolumeProto(this);
    }


    /// <summary>Field number for the "field_indexes" field.</summary>
        /// <summary>
    public const int FieldIndexesFieldNumber = 1;
        ///  The Encryption to use for entries added to the <c>ZipOutputStream</c>.
    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);
        ///
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
        /// <remarks>
    /// <summary>
        /// <para>
    ///Key is field index#, Value is version info
        ///   The specified Encryption is applied to the entries subsequently
    /// </summary>
         ///  written to the <c>ZipOutputStream</c> instance.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// </para>
    public pbc::MapField<uint, string> FieldIndexes {
        ///
      get { return fieldIndexes_; }
        /// <para>
    }
        ///   If you set this to something other than
 
        ///  EncryptionAlgorithm.None, you will also need to set the
    /// <summary>Field number for the "invalid_indexes" field.</summary>
         ///   <see cref="Password"/> to a non-null, non-empty value in
    public const int InvalidIndexesFieldNumber = 2;
         ///  order to actually get encryption on the entry.
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
         /// </para>
         = pb::FieldCodec.ForUInt32(18);
         ///
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
         /// </remarks>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///
    public pbc::RepeatedField<uint> InvalidIndexes {
         /// <seealso cref="Password">ZipOutputStream.Password</seealso>
      get { return invalidIndexes_; }
         /// <seealso cref="Ionic.Zip.ZipEntry.Encryption">ZipEntry.Encryption</seealso>
    }
         public EncryptionAlgorithm Encryption
 
         {
    /// <summary>Field number for the "LowerVerticalDistance" field.</summary>
             get
    public const int LowerVerticalDistanceFieldNumber = 3;
             {
    private global::TPG.DrawObjects.Serialize.Protoc.VerticalDistanceDataProto lowerVerticalDistance_;
                return _encryption;
    [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.");
                }
                if (value == EncryptionAlgorithm.Unsupported)
                {
                    _exceptionPending = true;
                    throw new InvalidOperationException("You may not set Encryption to that value.");
                }
                _encryption = 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());
        ///  Size of the work buffer to use for the ZLIB codec during compression.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// </summary>
    public static pb::MessageParser<OrbitAreaProto> Parser { get { return _parser; } }
        ///
 
        /// <remarks>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  Setting this may affect performance.  For larger files, setting this to a
    public static pbr::MessageDescriptor Descriptor {
        ///  larger size may improve performance, but I'm not sure.  Sorry, I don't
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[10]; }
        ///  currently have good recommendations on how to set it. You can test it if
    }
        ///  you like.
        /// </remarks>
        public int CodecBufferSize
        {
            get;
            set;
        }


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


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public OrbitAreaProto() {
        ///  The compression strategy to use for all entries.
      OnConstruction();
        /// </summary>
    }
        ///
 
        /// <remarks>
    partial void OnConstruction();
         ///  Set the Strategy used by the ZLIB-compatible compressor, when compressing
 
        ///  data for the entries in the zip archive. Different compression strategies
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///   work better on different sorts of data. The strategy parameter can affect
    public OrbitAreaProto(OrbitAreaProto other) : this() {
        ///   the compression ratio and the speed of compression but not the correctness
      fieldIndexes_ = other.fieldIndexes_.Clone();
        ///   of the compresssion. For more information see <see
      invalidIndexes_ = other.invalidIndexes_.Clone();
        ///   cref="Ionic.Zlib.CompressionStrategy "/>.
      FirstPoint = other.firstPoint_ != null ? other.FirstPoint.Clone() : null;
        /// </remarks>
      SecondPoint = other.secondPoint_ != null ? other.SecondPoint.Clone() : null;
         public Ionic.Zlib.CompressionStrategy Strategy
      width_ = other.width_;
        {
      orbitAreaAligmentCode_ = other.orbitAreaAligmentCode_;
            get;
    }
            set;
 
        }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OrbitAreaProto Clone() {
      return new OrbitAreaProto(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 "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 type of timestamp attached to the ZipEntry.
    private global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto secondPoint_;
         /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///
    public global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto SecondPoint {
         /// <remarks>
      get { return secondPoint_; }
         ///  Set this in order to specify the kind of timestamp that should be emitted
      set {
         ///  into the zip file for each entry.
         secondPoint_ = value;
         /// </remarks>
      }
         public ZipEntryTimestamp Timestamp
    }
         {
 
             get
    /// <summary>Field number for the "Width" field.</summary>
             {
    public const int WidthFieldNumber = 5;
                return _timestamp;
    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 OrbitAreaProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(OrbitAreaProto 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(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]
    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.GeoPointProto();
             }
             }
             input.ReadMessage(firstPoint_);
             set
             break;
             {
          }
                if (_disposed)
          case 34: {
                {
            if (secondPoint_ == null) {
                    _exceptionPending = true;
              secondPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
                    throw new System.InvalidOperationException("The stream has been closed.");
                }
                _timestamp = value;
             }
             }
            input.ReadMessage(secondPoint_);
            break;
          }
          case 45: {
            Width = input.ReadFloat();
            break;
          }
          case 48: {
            OrbitAreaAligmentCode = input.ReadUInt32();
            break;
          }
         }
         }
      }
    }


  }


   public sealed partial class OrbitAreaShiftedIntProto : pb::IMessage<OrbitAreaShiftedIntProto> {
        /// <summary>
    private static readonly pb::MessageParser<OrbitAreaShiftedIntProto> _parser = new pb::MessageParser<OrbitAreaShiftedIntProto>(() => new OrbitAreaShiftedIntProto());
        ///  Sets the compression level to be used for entries subsequently added to
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///   the zip archive.
    public static pb::MessageParser<OrbitAreaShiftedIntProto> Parser { get { return _parser; } }
        /// </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;
        }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public static pbr::MessageDescriptor Descriptor {
        ///  The compression method used on each entry added to the ZipOutputStream.
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[11]; }
        /// </summary>
    }
        public Ionic.Zip.CompressionMethod CompressionMethod
        {
            get;
            set;
        }


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


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public OrbitAreaShiftedIntProto() {
        ///  A comment attached to the zip archive.
      OnConstruction();
        /// </summary>
    }
        ///
 
        /// <remarks>
    partial void OnConstruction();
        ///
 
        /// <para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  The application sets this property to specify a comment to be embedded
    public OrbitAreaShiftedIntProto(OrbitAreaShiftedIntProto other) : this() {
        ///  into the generated zip archive.
      fieldIndexes_ = other.fieldIndexes_.Clone();
        /// </para>
      invalidIndexes_ = other.invalidIndexes_.Clone();
        ///
      FirstPoint = other.firstPoint_ != null ? other.FirstPoint.Clone() : null;
        /// <para>
      SecondPoint = other.secondPoint_ != null ? other.SecondPoint.Clone() : null;
        ///  According to <see
      width_ = other.width_;
        ///  href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">PKWARE's
      orbitAreaAligmentCode_ = other.orbitAreaAligmentCode_;
        ///  zip specification</see>, the comment is not encrypted, even if there is a
    }
        ///  password set on the zip file.
 
        /// </para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
    public OrbitAreaShiftedIntProto Clone() {
        /// <para>
      return new OrbitAreaShiftedIntProto(this);
        ///  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
    /// <summary>Field number for the "field_indexes" field.</summary>
        ///  practice.  On the other hand, there are situations where you want a
    public const int FieldIndexesFieldNumber = 1;
        ///  Comment to be encoded with something else, for example using code page
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        ///   950 "Big-5 Chinese". To fill that need, DotNetZip will encode the
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
        ///   comment following the same procedure it follows for encoding
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
        ///  filenames: (a) if <see cref="AlternateEncodingUsage"/> is
    /// <summary>
         ///  <c>Never</c>, it uses the default encoding (IBM437). (b) if <see
    ///Key is field index#, Value is version info
        ///  cref="AlternateEncodingUsage"/> is <c>Always</c>, it always uses the
    /// </summary>
        ///  alternate encoding (<see cref="AlternateEncoding"/>). (c) if <see
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///   cref="AlternateEncodingUsage"/> is <c>AsNecessary</c>, it uses the
    public pbc::MapField<uint, string> FieldIndexes {
        ///   alternate encoding only if the default encoding is not sufficient for
      get { return fieldIndexes_; }
        ///   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 "invalid_indexes" field.</summary>
        /// </para>
    public const int InvalidIndexesFieldNumber = 2;
        ///
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        /// </remarks>
        = pb::FieldCodec.ForUInt32(18);
        public string Comment
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
        {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            get { return _comment; }
    public pbc::RepeatedField<uint> InvalidIndexes {
            set
      get { return invalidIndexes_; }
            {
    }
                if (_disposed)
 
                {
    /// <summary>Field number for the "FirstPoint" field.</summary>
                    _exceptionPending = true;
    public const int FirstPointFieldNumber = 3;
                    throw new System.InvalidOperationException("The stream has been closed.");
    private global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto firstPoint_;
                }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                _comment = value;
    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]
         /// <summary>
    public override bool Equals(object other) {
         ///  Specify whether to use ZIP64 extensions when saving a zip archive.
      return Equals(other as OrbitAreaShiftedIntProto);
         /// </summary>
    }
         ///
 
         /// <remarks>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         /// <para>
    public bool Equals(OrbitAreaShiftedIntProto other) {
         ///  The default value for the property is <see
      if (ReferenceEquals(other, null)) {
         ///  cref="Zip64Option.Never"/>. <see cref="Zip64Option.AsNecessary"/> is
         return false;
         ///  safest, in the sense that you will not get an Exception if a
      }
         ///  pre-ZIP64 limit is exceeded.
      if (ReferenceEquals(other, this)) {
         /// </para>
         return true;
         ///
      }
         /// <para>
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
         ///  You must set this property before calling <c>Write()</c>.
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
         /// </para>
      if (!object.Equals(FirstPoint, other.FirstPoint)) return false;
         ///
      if (!object.Equals(SecondPoint, other.SecondPoint)) return false;
         /// </remarks>
      if (Width != other.Width) return false;
         public Zip64Option EnableZip64
      if (OrbitAreaAligmentCode != other.OrbitAreaAligmentCode) return false;
         {
      return true;
             get
    }
             {
 
                return _zip64;
    [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;
             {
          }
                if (_disposed)
          case 34: {
                {
            if (secondPoint_ == null) {
                    _exceptionPending = true;
              secondPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
                    throw new System.InvalidOperationException("The stream has been closed.");
                }
                _zip64 = value;
             }
             }
            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());
        ///   Indicates whether ZIP64 extensions were used when saving the zip archive.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// </summary>
    public static pb::MessageParser<FanAreaProto> 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[12]; }
    }


    [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 FanAreaProto() {
          {
      OnConstruction();
              _DontIgnoreCase = !value;
    }
          }


    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]
        /// <summary>
    public FanAreaProto Clone() {
        ///  Indicates whether to encode entry filenames and entry comments using
      return new FanAreaProto(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 "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>
        /// <summary>
    public const int MaximumRangeFieldNumber = 4;
        ///  The text encoding to use when emitting entries into the zip archive, for
    private float maximumRange_;
        ///  those entries whose filenames or comments cannot be encoded with the
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  default (IBM437) encoding.
    public float MaximumRange {
        /// </summary>
      get { return maximumRange_; }
        ///
      set {
        /// <remarks>
         maximumRange_ = 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 "OrientationAngle" field.</summary>
        ///  or libraries do not follow the specification, and instead encode
    public const int OrientationAngleFieldNumber = 5;
         ///  characters using the system default code page.  For example, WinRAR when
    private float orientationAngle_;
        ///  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 OrientationAngle {
        ///  it occurs anyway.
      get { return orientationAngle_; }
        /// </para>
      set {
        ///
         orientationAngle_ = 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 "SectorSizeAngle" field.</summary>
        ///   cref="ZipEntry.Comment"/> for each <c>ZipEntry</c> in the zip file, for
    public const int SectorSizeAngleFieldNumber = 6;
        ///  values that cannot be encoded with the default codepage for zip files,
    private float sectorSizeAngle_;
        ///  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 float SectorSizeAngle {
        ///  result. It is possible, therefore, to have a given entry with a
      get { return sectorSizeAngle_; }
         ///   <c>Comment</c> encoded in IBM437 and a <c>FileName</c> encoded with the
      set {
        ///  specified "provisional" codepage.
         sectorSizeAngle_ = value;
        /// </para>
      }
        ///
    }
        /// <para>
 
        ///  Be aware that a zip file created after you've explicitly set the
    /// <summary>Field number for the "VertexPoint" field.</summary>
         ///  <c>ProvisionalAlternateEncoding</c> property to a value other than
    public const int VertexPointFieldNumber = 7;
        ///  IBM437 may not be compliant to the PKWare specification, and may not be
    private global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto vertexPoint_;
        ///  readable by compliant archivers. On the other hand, many (most?)
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  archivers are non-compliant and can read zip files created in arbitrary
    public global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto VertexPoint {
        ///  code pages.  The trick is to use or specify the proper codepage when
      get { return vertexPoint_; }
        ///  reading the zip.
      set {
        /// </para>
         vertexPoint_ = value;
        ///
      }
         /// <para>
    }
        ///  When creating a zip archive using this library, it is possible to change
 
         ///  the value of <c>ProvisionalAlternateEncoding</c> between each entry you
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  add, and between adding entries and the call to <c>Close()</c>. Don't do
    public override bool Equals(object other) {
        ///  this. It will likely result in a zipfile that is not readable. For best
      return Equals(other as FanAreaProto);
        ///  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
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  recommendation, described later.
    public bool Equals(FanAreaProto other) {
        /// </para>
      if (ReferenceEquals(other, null)) {
        ///
         return false;
        /// <para>
      }
        ///  When using an arbitrary, non-UTF8 code page for encoding, there is no
      if (ReferenceEquals(other, this)) {
        ///  standard way for the creator application - whether DotNetZip, WinZip,
         return true;
        ///  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
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
        ///  are not able to inspect the zip file and determine the codepage that was
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
        ///  used for the entries contained within it. It is left to the application
      if (MinimumRange != other.MinimumRange) return false;
        ///  or user to determine the necessary codepage when reading zip files encoded
      if (MaximumRange != other.MaximumRange) return false;
        ///  this way. If you use an incorrect codepage when reading a zipfile, you
      if (OrientationAngle != other.OrientationAngle) return false;
        ///  will get entries with filenames that are incorrect, and the incorrect
      if (SectorSizeAngle != other.SectorSizeAngle) return false;
        ///  filenames may even contain characters that are not legal for use within
      if (!object.Equals(VertexPoint, other.VertexPoint)) return false;
        ///  filenames in Windows. Extracting entries with illegal characters in the
      return true;
        ///  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 int GetHashCode() {
        /// <para>
      int hash = 1;
        ///  One possible approach for specifying the code page for a given zip file is
      hash ^= FieldIndexes.GetHashCode();
         ///  to describe the code page in a human-readable form in the Zip comment. For
      hash ^= invalidIndexes_.GetHashCode();
         ///  example, the comment may read "Entries in this archive are encoded in the
      if (MinimumRange != 0F) hash ^= MinimumRange.GetHashCode();
         ///  Big5 code page". For maximum interoperability, the zip comment in this
      if (MaximumRange != 0F) hash ^= MaximumRange.GetHashCode();
         ///  case should be encoded in the default, IBM437 code page. In this case,
      if (OrientationAngle != 0F) hash ^= OrientationAngle.GetHashCode();
         ///  the zip comment is encoded using a different page than the filenames. To
      if (SectorSizeAngle != 0F) hash ^= SectorSizeAngle.GetHashCode();
         ///  do this, Specify <c>ProvisionalAlternateEncoding</c> to your desired
      if (vertexPoint_ != null) hash ^= VertexPoint.GetHashCode();
        ///  region-specific code page, once before adding any entries, and then set
      return hash;
        ///  the <see cref="Comment"/> property and reset
    }
         ///  <c>ProvisionalAlternateEncoding</c> to IBM437 before calling <c>Close()</c>.
 
         /// </para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// </remarks>
    public override string ToString() {
         [Obsolete("use AlternateEncoding and AlternateEncodingUsage instead.")]
      return pb::JsonFormatter.ToDiagnosticString(this);
        public System.Text.Encoding ProvisionalAlternateEncoding
    }
         {
 
            get
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            {
    public void WriteTo(pb::CodedOutputStream output) {
                if (_alternateEncodingUsage == ZipOption.AsNecessary)
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
                    return _alternateEncoding;
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
                return null;
      if (MinimumRange != 0F) {
            }
         output.WriteRawTag(29);
            set
         output.WriteFloat(MinimumRange);
            {
      }
                _alternateEncoding = value;
      if (MaximumRange != 0F) {
                _alternateEncodingUsage = ZipOption.AsNecessary;
         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]
        /// <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;
             }
          }
             set
          case 29: {
             {
            MinimumRange = input.ReadFloat();
                _alternateEncoding = value;
            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;
          }
         }
         }
      }
    }


  }
        /// <summary>
 
         ///   A flag that tells if and when this instance should apply
  public sealed partial class FanAreaAsShiftedIntProto : pb::IMessage<FanAreaAsShiftedIntProto> {
         ///   AlternateEncoding to encode the filenames and comments associated to
    private static readonly pb::MessageParser<FanAreaAsShiftedIntProto> _parser = new pb::MessageParser<FanAreaAsShiftedIntProto>(() => new FanAreaAsShiftedIntProto());
         ///   of ZipEntry objects contained within this instance.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         /// </summary>
    public static pb::MessageParser<FanAreaAsShiftedIntProto> Parser { get { return _parser; } }
         public ZipOption AlternateEncodingUsage
 
         {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            get
    public static pbr::MessageDescriptor Descriptor {
            {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[13]; }
                return _alternateEncodingUsage;
    }
            }
 
            set
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            {
    pbr::MessageDescriptor pb::IMessage.Descriptor {
                _alternateEncodingUsage = value;
      get { return Descriptor; }
            }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public FanAreaAsShiftedIntProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public FanAreaAsShiftedIntProto(FanAreaAsShiftedIntProto 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 FanAreaAsShiftedIntProto Clone() {
      return new FanAreaAsShiftedIntProto(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.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]
        /// <summary>
    public void MergeFrom(pb::CodedInputStream input) {
         /// The default text encoding used in zip archives. It is numeric 437, also
      uint tag;
        /// known as IBM437.
      while ((tag = input.ReadTag()) != 0) {
        /// </summary>
         switch(tag) {
        /// <seealso cref="Ionic.Zip.ZipFile.ProvisionalAlternateEncoding"/>
          default:
        public static System.Text.Encoding DefaultEncoding
            input.SkipLastField();
        {
            break;
             get
          case 10: {
             {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
                return System.Text.Encoding.GetEncoding("IBM437");
            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> {
#if !NETCF
    private static readonly pb::MessageParser<CorridorAreaProto> _parser = new pb::MessageParser<CorridorAreaProto>(() => new CorridorAreaProto());
        /// <summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  The size threshold for an entry, above which a parallel deflate is used.
    public static pb::MessageParser<CorridorAreaProto> 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[14]; }
        ///  <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 CorridorAreaProto() {
        ///     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 CorridorAreaProto(CorridorAreaProto 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
      width_ = other.width_;
        ///     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.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  </para>
    public CorridorAreaProto Clone() {
        ///
      return new CorridorAreaProto(this);
        ///  <para>
    }
        ///     Parallel deflate tends to not be as effective as single-threaded deflate
 
        ///     because the original data stream is split into multiple independent
    /// <summary>Field number for the "field_indexes" field.</summary>
         ///     buffers, each of which is compressed in parallel. But because they are
     public const int FieldIndexesFieldNumber = 1;
        ///     treated independently, there is no opportunity to share compression
     private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        ///     dictionaries, and additional framing bytes must be added to the output
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
        ///     stream. For that reason, a deflated stream may be slightly larger when
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
        ///     compressed using parallel deflate, as compared to a traditional
    /// <summary>
         ///    single-threaded deflate. For files of about 512k, the increase over the
     ///Key is field index#, Value is version info
         ///    normal deflate is as much as 5% of the total compressed size. For larger
    /// </summary>
        ///     files, the difference can be as small as 0.1%.
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  </para>
    public pbc::MapField<uint, string> FieldIndexes {
        ///
      get { return fieldIndexes_; }
        ///  <para>
    }
        ///     Multi-threaded compression does not give as much an advantage when using
 
        ///     Encryption. This is primarily because encryption tends to slow down
    /// <summary>Field number for the "invalid_indexes" field.</summary>
        ///     the entire pipeline. Also, multi-threaded compression gives less of an
     public const int InvalidIndexesFieldNumber = 2;
        ///     advantage when using lower compression levels, for example <see
     private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        ///     cref="Ionic.Zlib.CompressionLevel.BestSpeed"/>. You may have to perform
         = pb::FieldCodec.ForUInt32(18);
         ///    some tests to determine the best approach for your situation.
     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 for this property is -1, which means parallel
     }
        ///     compression will not be performed unless you set it to zero.
 
        ///  </para>
    /// <summary>Field number for the "Width" field.</summary>
        ///
    public const int WidthFieldNumber = 3;
         /// </remarks>
    private float width_;
        public long ParallelDeflateThreshold
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        {
     public float Width {
            set
      get { return width_; }
            {
      set {
                if ((value != 0) && (value != -1) && (value < 64 * 1024))
         width_ = value;
                    throw new ArgumentOutOfRangeException("value must be greater than 64k, or 0, or -1");
      }
                _ParallelDeflateThreshold = value;
     }
            }
 
             get
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
             {
     public override bool Equals(object other) {
                return _ParallelDeflateThreshold;
      return Equals(other as CorridorAreaProto);
             }
     }
 
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(CorridorAreaProto 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 (Width != other.Width) return false;
      return true;
     }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      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;
          }
         }
         }
      }
    }
  }
  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]
    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]
        /// <summary>
    public override string ToString() {
        ///  The maximum number of buffer pairs to use when performing
      return pb::JsonFormatter.ToDiagnosticString(this);
        ///  parallel compression.
    }
        /// </summary>
 
        ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <remarks>
    public void WriteTo(pb::CodedOutputStream output) {
        /// <para>
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
        ///  This property sets an upper limit on the number of memory
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
        ///  buffer pairs to create when performing parallel
      if (centrePoint_ != null) {
        ///  compression. The implementation of the parallel
         output.WriteRawTag(26);
        ///  compression stream allocates multiple buffers to
         output.WriteMessage(CentrePoint);
         ///  facilitate parallel compression. As each buffer fills up,
      }
         ///  the stream uses <see
      if (firstConjugateDiameterPoint_ != null) {
        ///  cref="System.Threading.ThreadPool.QueueUserWorkItem(WaitCallback)">
        output.WriteRawTag(34);
         ///  ThreadPool.QueueUserWorkItem()</see> to compress those
         output.WriteMessage(FirstConjugateDiameterPoint);
         ///  buffers in a background threadpool thread. After a buffer
      }
         ///  is compressed, it is re-ordered and written to the output
      if (secondConjugateDiameterPoint_ != null) {
        ///  stream.
         output.WriteRawTag(42);
        /// </para>
         output.WriteMessage(SecondConjugateDiameterPoint);
        ///
      }
        /// <para>
    }
        ///  A higher number of buffer pairs enables a higher degree of
 
        ///  parallelism, which tends to increase the speed of compression on
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///  multi-cpu computers. On the other hand, a higher number of buffer
    public int CalculateSize() {
        ///  pairs also implies a larger memory consumption, more active worker
      int size = 0;
         ///  threads, and a higher cpu utilization for any compression. This
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
        ///  property enables the application to limit its memory consumption and
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
         ///  CPU utilization behavior depending on requirements.
      if (centrePoint_ != null) {
        /// </para>
         size += 1 + pb::CodedOutputStream.ComputeMessageSize(CentrePoint);
        ///
      }
        /// <para>
      if (firstConjugateDiameterPoint_ != null) {
        ///  For each compression "task" that occurs in parallel, there are 2
         size += 1 + pb::CodedOutputStream.ComputeMessageSize(FirstConjugateDiameterPoint);
        ///  buffers allocated: one for input and one for output. This property
      }
        ///  sets a limit for the number of pairs. The total amount of storage
      if (secondConjugateDiameterPoint_ != null) {
        ///  space allocated for buffering will then be (N*S*2), where N is the
         size += 1 + pb::CodedOutputStream.ComputeMessageSize(SecondConjugateDiameterPoint);
        ///  number of buffer pairs, S is the size of each buffer (<see
      }
        ///  cref="CodecBufferSize"/>).  By default, DotNetZip allocates 4 buffer
      return size;
         ///  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
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  memory in total, or 4mb, in blocks of 128kb. If you then set this
    public void MergeFrom(EllipseProto other) {
        ///  property to 8, then the number will be 8 * 2 * 128kb of buffer
      if (other == null) {
         ///  memory, or 2mb.
         return;
         /// </para>
      }
         ///
      fieldIndexes_.Add(other.fieldIndexes_);
        /// <para>
      invalidIndexes_.Add(other.invalidIndexes_);
        ///  CPU utilization will also go up with additional buffers, because a
      if (other.centrePoint_ != null) {
         ///  larger number of buffer pairs allows a larger number of background
         if (centrePoint_ == null) {
        ///  threads to compress in parallel. If you find that parallel
          centrePoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
         ///  compression is consuming too much memory or CPU, you can adjust this
         }
         ///  value downward.
         CentrePoint.MergeFrom(other.CentrePoint);
        /// </para>
      }
        ///
      if (other.firstConjugateDiameterPoint_ != null) {
         /// <para>
         if (firstConjugateDiameterPoint_ == null) {
        ///  The default value is 16. Different values may deliver better or
          firstConjugateDiameterPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
         ///  worse results, depending on your priorities and the dynamic
         }
         ///  performance characteristics of your storage and compute resources.
         FirstConjugateDiameterPoint.MergeFrom(other.FirstConjugateDiameterPoint);
        /// </para>
      }
        ///
      if (other.secondConjugateDiameterPoint_ != null) {
        /// <para>
         if (secondConjugateDiameterPoint_ == null) {
        ///  This property is not the number of buffer pairs to use; it is an
          secondConjugateDiameterPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
        ///  upper limit. An illustration: Suppose you have an application that
         }
         ///  uses the default value of this property (which is 16), and it runs
         SecondConjugateDiameterPoint.MergeFrom(other.SecondConjugateDiameterPoint);
        ///  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>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
    public void MergeFrom(pb::CodedInputStream input) {
        /// <para>
      uint tag;
        ///  The application can set this value at any time, but it is
      while ((tag = input.ReadTag()) != 0) {
        ///  effective only if set before calling
         switch(tag) {
        ///  <c>ZipOutputStream.Write()</c> for the first time.
          default:
        /// </para>
            input.SkipLastField();
        /// </remarks>
            break;
        ///
          case 10: {
        /// <seealso cref="ParallelDeflateThreshold"/>
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
        ///
            break;
        public int ParallelDeflateMaxBufferPairs
          }
        {
          case 18:
             get
          case 16: {
             {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
                return _maxBufferPairs;
            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_);
             set
             break;
             {
          }
                if (value < 4)
          case 42: {
                    throw new ArgumentOutOfRangeException("ParallelDeflateMaxBufferPairs",
            if (secondConjugateDiameterPoint_ == null) {
                                                "Value must be 4 or greater.");
              secondConjugateDiameterPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
                _maxBufferPairs = value;
             }
             }
            input.ReadMessage(secondConjugateDiameterPoint_);
            break;
          }
         }
         }
      }
#endif
    }


  }


  public sealed partial class EllipseAsShiftedIntProto : pb::IMessage<EllipseAsShiftedIntProto> {
        private void InsureUniqueEntry(ZipEntry ze1)
    private static readonly pb::MessageParser<EllipseAsShiftedIntProto> _parser = new pb::MessageParser<EllipseAsShiftedIntProto>(() => new EllipseAsShiftedIntProto());
        {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            if (_entriesWritten.ContainsKey(ze1.FileName))
    public static pb::MessageParser<EllipseAsShiftedIntProto> Parser { get { return _parser; } }
            {
                _exceptionPending = true;
                throw new ArgumentException(String.Format("The entry '{0}' already exists in the zip archive.", ze1.FileName));
            }
        }


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


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         internal Stream OutputStream
    pbr::MessageDescriptor pb::IMessage.Descriptor {
         {
      get { return Descriptor; }
            get
    }
            {
 
                return _outputStream;
    [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>
    public const int LongitudeFieldNumber = 3;
    private double longitude_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double Longitude {
      get { return longitude_; }
      set {
        longitude_ = value;
      }
    }


    /// <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;
      }
    }


     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
     public override bool Equals(object other) {
        ///  Specify the name of the next entry that will be written to the zip file.
      return Equals(other as PointProto);
        /// </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");


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            if (_disposed)
    public bool Equals(PointProto other) {
            {
      if (ReferenceEquals(other, null)) {
                _exceptionPending = true;
        return false;
                throw new System.InvalidOperationException("The stream has been closed.");
      }
            }
      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 != 0D) hash ^= Longitude.GetHashCode();
      if (Latitude != 0D) hash ^= Latitude.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            _FinishCurrentEntry();
    public void WriteTo(pb::CodedOutputStream output) {
            _currentEntry = ZipEntry.CreateForZipOutputStream(entryName);
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
            _currentEntry._container = new ZipContainer(this);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
            _currentEntry._BitField |= 0x0008;  // workitem 8932
      if (Longitude != 0D) {
            _currentEntry.SetEntryTimes(DateTime.Now, DateTime.Now, DateTime.Now);
        output.WriteRawTag(25);
            _currentEntry.CompressionLevel = this.CompressionLevel;
        output.WriteDouble(Longitude);
            _currentEntry.CompressionMethod = this.CompressionMethod;
      }
            _currentEntry.Password = _password; // workitem 13909
      if (Latitude != 0D) {
            _currentEntry.Encryption = this.Encryption;
        output.WriteRawTag(33);
            // workitem 12634
        output.WriteDouble(Latitude);
            _currentEntry.AlternateEncoding = this.AlternateEncoding;
      }
            _currentEntry.AlternateEncodingUsage = this.AlternateEncodingUsage;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            if (entryName.EndsWith("/")) _currentEntry.MarkAsDirectory();
    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]
            _currentEntry.EmitTimesInWindowsFormatWhenSaving = ((_timestamp & ZipEntryTimestamp.Windows) != 0);
    public void MergeFrom(PointProto other) {
            _currentEntry.EmitTimesInUnixFormatWhenSaving = ((_timestamp & ZipEntryTimestamp.Unix) != 0);
      if (other == null) {
            InsureUniqueEntry(_currentEntry);
        return;
            _needToWriteEntryHeader = true;
      }
      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]
             return _currentEntry;
    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,
    /// <summary>Field number for the "field_indexes" field.</summary>
                                              out _outputCounter,
    public const int FieldIndexesFieldNumber = 1;
                                              out _encryptor,
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
                                              out _deflater,
        = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
                                              out _entryOutputStream);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
            }
    /// <summary>
            _needToWriteEntryHeader = false;
    ///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;
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        private void _FinishCurrentEntry()
    public override bool Equals(object other) {
        {
      return Equals(other as PointShiftedIntProto);
            if (_currentEntry != null)
    }
            {
                if (_needToWriteEntryHeader)
                    _InitiateCurrentEntry(true); // an empty entry - no writes


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                _currentEntry.FinishOutputStream(_outputStream, _outputCounter, _encryptor, _deflater, _entryOutputStream);
    public bool Equals(PointShiftedIntProto other) {
                _currentEntry.PostProcessOutput(_outputStream);
      if (ReferenceEquals(other, null)) {
                // workitem 12964
        return false;
                if (_currentEntry.OutputUsedZip64!=null)
      }
                    _anyEntriesUsedZip64 |= _currentEntry.OutputUsedZip64.Value;
      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]
                // reset all the streams
    public override int GetHashCode() {
                _outputCounter = null; _encryptor = _deflater = null; _entryOutputStream = null;
      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]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[19]; }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public RangeRingsProto() {
      OnConstruction();
    }
    partial void OnConstruction();


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public RangeRingsProto(RangeRingsProto other) : this() {
      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>
        /// <summary>
    public const int FieldIndexesFieldNumber = 1;
        /// Dispose the stream
    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);
        ///
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
        /// <remarks>
    /// <summary>
         /// <para>
    ///Key is field index#, Value is version info
        ///  This method writes the Zip Central directory, then closes the stream. The
    /// </summary>
        ///  application must call Dispose() (or Close) in order to produce a valid zip file.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// </para>
    public pbc::MapField<uint, string> FieldIndexes {
        ///
      get { return fieldIndexes_; }
        /// <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;


    /// <summary>Field number for the "invalid_indexes" field.</summary>
            if (disposing) // not called from finalizer
    public const int InvalidIndexesFieldNumber = 2;
            {
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
                // handle pending exceptions
        = pb::FieldCodec.ForUInt32(18);
                if (!_exceptionPending)
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
                {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                    _FinishCurrentEntry();
    public pbc::RepeatedField<uint> InvalidIndexes {
                    _directoryNeededZip64 = ZipOutput.WriteCentralDirectoryStructure(_outputStream,
      get { return invalidIndexes_; }
                                                                                    _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;
                    }


    /// <summary>Field number for the "VertexPoint" field.</summary>
                    if (!_leaveUnderlyingStreamOpen)
    public const int VertexPointFieldNumber = 3;
                    {
    private global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto vertexPoint_;
#if NETCF
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                    wrappedStream.Close();
    public global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto VertexPoint {
#else
      get { return vertexPoint_; }
                        wrappedStream.Dispose();
      set {
#endif
        vertexPoint_ = value;
                    }
      }
                    _outputStream = null;
    }
                }
 
    /// <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]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[20]; }
    }


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


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


    partial void OnConstruction();
        /// <summary>
        /// Always returns true.
        /// </summary>
        public override bool CanWrite { get { return true; } }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public RangeRingsShiftedIntProto(RangeRingsShiftedIntProto other) : this() {
        /// Always returns a NotSupportedException.
      fieldIndexes_ = other.fieldIndexes_.Clone();
        /// </summary>
      invalidIndexes_ = other.invalidIndexes_.Clone();
        public override long Length { get { throw new NotSupportedException(); } }
      VertexPoint = other.vertexPoint_ != null ? other.VertexPoint.Clone() : null;
      rangeBetweenRings_ = other.rangeBetweenRings_;
      maximumRange_ = other.maximumRange_;
      numberOfRadials_ = other.numberOfRadials_;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public RangeRingsShiftedIntProto Clone() {
        /// Setting this property always returns a NotSupportedException. Getting it
      return new RangeRingsShiftedIntProto(this);
        /// returns the value of the Position on the underlying stream.
    }
        /// </summary>
        public override long Position
        {
            get { return _outputStream.Position; }
            set { throw new NotSupportedException(); }
        }


    /// <summary>Field number for the "field_indexes" field.</summary>
        /// <summary>
    public const int FieldIndexesFieldNumber = 1;
         /// This is a no-op.
    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);
        public override void Flush() { }
    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;
        /// This method always throws a NotSupportedException.
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        /// </summary>
         = pb::FieldCodec.ForUInt32(18);
        /// <param name="buffer">ignored</param>
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
        /// <param name="offset">ignored</param>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         /// <param name="count">ignored</param>
    public pbc::RepeatedField<uint> InvalidIndexes {
        /// <returns>nothing</returns>
      get { return invalidIndexes_; }
        public override int Read(byte[] buffer, int offset, int count)
    }
        {
            throw new NotSupportedException("Read");
        }


    /// <summary>Field number for the "VertexPoint" field.</summary>
        /// <summary>
    public const int VertexPointFieldNumber = 3;
        /// This method always throws a NotSupportedException.
    private global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto vertexPoint_;
        /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         /// <param name="offset">ignored</param>
    public global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto VertexPoint {
         /// <param name="origin">ignored</param>
      get { return vertexPoint_; }
         /// <returns>nothing</returns>
      set {
         public override long Seek(long offset, SeekOrigin origin)
         vertexPoint_ = value;
         {
      }
            throw new NotSupportedException("Seek");
    }
 
    /// <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]
    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(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();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolPolyAreaProto(VolPolyAreaProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      SurfaceVolume = other.surfaceVolume_ != null ? other.SurfaceVolume.Clone() : null;
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolPolyAreaProto Clone() {
      return new VolPolyAreaProto(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>
        private EncryptionAlgorithm _encryption;
    public const int InvalidIndexesFieldNumber = 2;
        private ZipEntryTimestamp _timestamp;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        internal String _password;
         = pb::FieldCodec.ForUInt32(18);
        private String _comment;
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
        private Stream _outputStream;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        private ZipEntry _currentEntry;
    public pbc::RepeatedField<uint> InvalidIndexes {
        internal Zip64Option _zip64;
      get { return invalidIndexes_; }
        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


    /// <summary>Field number for the "SurfaceVolume" field.</summary>
        private bool _leaveUnderlyingStreamOpen;
    public const int SurfaceVolumeFieldNumber = 3;
        private bool _disposed;
    private global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto surfaceVolume_;
        private bool _exceptionPending; // **see note below
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        private bool _anyEntriesUsedZip64, _directoryNeededZip64;
    public global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto SurfaceVolume {
        private CountingStream _outputCounter;
      get { return surfaceVolume_; }
        private Stream _encryptor;
      set {
        private Stream _deflater;
         surfaceVolume_ = value;
        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 override bool Equals(object other) {
      return Equals(other as VolPolyAreaProto);
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        // When ZipOutputStream is employed within a using clause, which
    public bool Equals(VolPolyAreaProto other) {
        // is the typical scenario, and an exception is thrown within
      if (ReferenceEquals(other, null)) {
        // the scope of the using, Close()/Dispose() is invoked
         return false;
         // implicitly before processing the initial exception.  In that
      }
        // case, _exceptionPending is true, and we don't want to try to
      if (ReferenceEquals(other, this)) {
         // write anything in the Close/Dispose logic. Doing so can
         return true;
        // cause additional exceptions that mask the original one. So,
      }
        // the _exceptionPending flag is used to track that, and to
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
        // allow the original exception to be propagated to the
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
        // application without extra "noise."
      if (!object.Equals(SurfaceVolume, other.SurfaceVolume)) 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();
      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);
      }
    }


     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     internal class ZipContainer
     public int CalculateSize() {
     {
      int size = 0;
        private ZipFile _zf;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
        private ZipOutputStream _zos;
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
         private ZipInputStream _zis;
      if (surfaceVolume_ != null) {
         size += 1 + pb::CodedOutputStream.ComputeMessageSize(SurfaceVolume);
      }
      return size;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public ZipContainer(Object o)
    public void MergeFrom(VolPolyAreaProto other) {
        {
      if (other == null) {
            _zf = (o as ZipFile);
        return;
            _zos = (o as ZipOutputStream);
      }
            _zis = (o as ZipInputStream);
      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> {
    private static readonly pb::MessageParser<VolOrbitAreaProto> _parser = new pb::MessageParser<VolOrbitAreaProto>(() => new VolOrbitAreaProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    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]
         public ZipOutputStream ZipOutputStream
    pbr::MessageDescriptor pb::IMessage.Descriptor {
         {
      get { return Descriptor; }
            get { return _zos; }
    }
 
    [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_);
             set
             break;
             {
          }
                if (_zf != null) _zf.ParallelDeflater = value;
          case 34: {
                else if (_zos != null) _zos.ParallelDeflater = value;
            if (ellipse_ == null) {
              ellipse_ = new global::TPG.DrawObjects.Serialize.Protoc.EllipseProto();
             }
             }
            input.ReadMessage(ellipse_);
            break;
          }
          case 42: {
            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>

Latest revision as of 15:37, 4 August 2022

Her skal Mari leke. Hvis hun gidder....

Da leker JEG her. For det gidder jeg.

Intern link: #Preparing for creation of Maria layers

Intern link skjult med tekst: Teksten

Gigantisk haug med kode:

This section describes how to create a basic map application, with fixed map type - displaying tracks from a track service.

This example is made to run with Maria GDK Version 2.0, with .NETFramework version 4.5. Sample code for this example is found in the MariaBasicMapClient project of the SampleProjects solution.

def lag_mat(ingredienser):
   komfyr.stek()

Noen bilder

Creating the Map Client Window

Create a WPF Window (main application window or sub window) - MariaWpfWindow - to be used for your map client.
For building Maria GDK clients in Windows forms applications, see Maria Windows-Forms Client.


Including MariaUserControl

Add the MariaUserControl to the xaml of your window, name of your choice, optionally including properties for the integrated map controls.

<Window x:Class="BasicMapClient.MariaWpfWindow"
 . . . 
 xmlns:MariaUserControl= "clr-namespace:TPG.Maria.MariaUserControl; assembly=TPG.Maria.MariaUserControl"
 Title="MariaWpfWindow" Height="550" Width="525" >
 <Grid>
 <MariaUserControl:MariaUserControl Name="MariaCtrl"
                                    IsMiniMapVisible="True"
                                    IsPanNavigationVisible="True"
                                    IsScaleBarVisible="True"
                                    IsRulerVisible="True"
                                    />
  </Grid>
</Window>

Main view model

Create a class (MariaWindowViewModel) for communication with the Maria component.

In the constructor of your window (MariaWpfWindow) Set the data context of your client window to be this class.

public MariaWpfWindow()
{
  InitializeComponent();
  DataContext = new MariaWindowViewModel();
}

Handle the WindowClosing event

In the window holding your MariaUserControl (MariaWpfWindow), implement an event handler for the WindowClosing event, disposing the MariaUserControl object and the MapLayerManager object used by the map layers.

In the XAML :

<Window x:Class="BasicMapClient.MariaWpfWindow"
 . . . 
 Title="MariaWpfWindow" Height="550" Width="525" Closing="WindowClosing">
   <Grid>
      <MariaUserControl:MariaUserControl
      . . .

In the code behind:

private void WindowClosing(object sender, System.ComponentModel.CancelEventArgs e)
{
  MariaCtrl.Dispose();
  ((IDisposable)DataContext).Dispose();
}

Preparing for creation of Maria layers

In the main view model class, MariaWindowViewModel, create an auto property to hold a list of Maria layers, Layers, and add a constructor, initializing the propery.

public ObservableCollection<IMariaLayer>Layers { get; set; }

internal MariaWindowViewModel()
{
    Layers = new ObservableCollection<IMariaLayer>();
}

Then, bind the Layers property of the MariaUserControl to this list.

<MariaUserControl:MariaUserControl Name="MariaCtrl"
                                   Layers="{Binding Layers}"
                                   IsMiniMapVisible="True"
                                   IsPanNavigationVisible="True"
                                   IsScaleBarVisible="True"
                                   IsRulerVisible="True"
                                   />


Layer interaction in general

For each of the desired layers (will be described in detail for each layer type):

  • Create an instance of the corresponding GDK layer class
  • Add the created layer to the MariaWindowViewModel Layers property.
  • Create a separate view model class for each layer (may be skipped, if few layers)
  • Add event handler(s) for the LayerInitialized event(s).

The layers are accessed programmatically from your application through the different GDK layer interfaces.


Note:

  • Rendering of the layers will be in the same order as they are in the Layers property.
  • No access should be performed against the layer until the LayerInitialized event has been called.

Service configuration

To enable the service related layers to receive information from their services, they need to establish connections! One way of doing this is by specification in the application configuration (app.config).

Here is a service connection configuration example with connection info for some of the Maria GDK services,within the system.serviceModel tag.
For further details on how to administrate Maria GDK services, refer to the system documentation.

  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="myHttpBinding" 
                 maxBufferSize="2147483647" 
                 maxReceivedMessageSize="2147483647" 
                 closeTimeout="00:10:00" openTimeout="00:10:00" 
                 receiveTimeout="00:10:00" sendTimeout="00:10:00">
          <readerQuotas maxArrayLength="2147483647" />
        </binding>
      </basicHttpBinding>
    </bindings>
    
    <client>
      <!-- Catalog service -->
      <endpoint name="MapCatalogService"
                address="http://localhost:9008/catalog"
                contract="TPG.GeoFramework.MapServiceInterfaces.IMapCatalogService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding"/>

      <!-- Template service -->
      <endpoint name="TemplateService"
                address="http://localhost:9008/maptemplates"
                contract="TPG.GeoFramework.MapTemplateServiceContracts.IMapTemplateService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding"/>

      <!-- Track service -->
      <endpoint name="TrackService"
                address="http://localhost:9008/tracks"
                contract="TPG.GeoFramework.TrackServiceInterfaces.IMariaTrackService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding"/>

      <!-- Enhanced Elevation service -->
      <endpoint name="EnahncedElevationService"
                address="http://localhost:9008/enhancedElevation"
                contract="TPG.EnhancedElevationServiceClient.IEnhancedElevationService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding"/>

      <!-- Location service -->
      <endpoint name="LocationService"
                address="http://localhost:9008/location/geoloc"
                contract="TPG.GeoFramework.LocationServiceInterfaces.ILocationService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding"
                behaviorConfiguration="myEndpointBehavior"/>

      <!-- Draw object service -->
      <endpoint name="DrawObjectService"
                address="http://localhost:9008/drawobjects"
                contract="TPG.GeoFramework.DrawObjectServiceInterfaces.IDrawObjectService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding"/>

      <!-- Geo Fencing Service -->
      <endpoint name="GeoFencingService/DataManager"
                address="http://localhost:9008/GeoFencingService/DataManager"
                contract="TPG.GeoFramework.GeoFencingServiceInterfaces.IDataManagerService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding" />

      <endpoint name="GeoFencingService/FenceRule"
                address="http://localhost:9008/GeoFencingService/FenceRule"
                contract="TPG.GeoFramework.GeoFencingServiceInterfaces.IGeoFencingRuleService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding" />

      <endpoint name="GeoFencingService/NotificationHandling"
                address="http://localhost:9008/GeoFencingService/NotificationHandling"
                contract="TPG.GeoFramework.GeoFencingServiceInterfaces.INotificationHandlingService"
                binding="basicHttpBinding"
                bindingConfiguration="myHttpBinding" />

    </client>
    <behaviors>
      <endpointBehaviors>
        <behavior name="myEndpointBehavior">
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <extensions></extensions>
  </system.serviceModel>

Creating a Map Layer with Map Service Connection

The map layer is accessed programmatically through the map layer interface, IMariaMapLayer, and the extended map layer interface IMariaExtendedMapLayer .

  • For this part you will need to include TPG.Maria.MapLayer NuGet package.

Create a view model class (MapViewModel) to handle intaractions toward the map layer, and add the following variables and properties:

private readonly IMariaMapLayer _mapLayer;

public IMariaMapLayer MiniMapLayer { get; set; }
public GeoPos CenterPosition { get; set; }
public double Scale { get; set; }

Create the MapViewModel constructor, initializing map and minimap event handling:

public MapViewModel(IMariaMapLayer mapLayer, IMariaMapLayer miniMapLayer)
{
    _mapLayer = mapLayer;
    _mapLayer.LayerInitialized += OnMapLayerInitialized;
    
    MiniMapLayer = miniMapLayer;
    MiniMapLayer.LayerInitialized += OnMiniMapLayerInitialized;
}

Add the LayerInitialized event handlers for the map and mini map:

private void OnMapLayerInitialized()
{
    Scale = 50000;
    CenterPosition = new GeoPos(60, 10);

    _mapLayer.ActiveMapTemplate = PreferredMapTemplate();
}
private void OnMiniMapLayerInitialized()
{
    MiniMapLayer.ActiveMapTemplate = PreferredMapTemplate();
}

private MapTemplate PreferredMapTemplate()
{
    var preferred = "WorldMap";
    foreach (var template in _mapLayer.ActiveMapTemplates)
    {
        if (template.Name == preferred)
            return template;
    }
    return _mapLayer.ActiveMapTemplates.Any() ? _mapLayer.ActiveMapTemplates.Last() : null;
}

Verify that your app.config file contains endpoint definitions for the MapCatalogService and the TemplateService, as described in the Service Configuration section.

Then, include the MapViewModel in the main view model (MariaWindowViewModel).

Declarations:

public MapViewModel MapViewModel { get; set; }

private IMariaMapLayer _mapLayer;
private MapLayer _miniMapLayer;

and in the constructor

. . .

// Service connection specified by app.config
IMariaMapLayerManager mapLayerManager = new MariaMapLayerManager();

_mapLayer = new MapLayer(mapCatalogServiceClient, mapTemplateServiceClient);
_miniMapLayer = new MapLayer(mapCatalogServiceClient, mapTemplateServiceClient);

MapViewModel = new MapViewModel(_mapLayer, _miniMapLayer);
Layers.Add(_mapLayer);

Update MariaUserControl binding

<MariaUserControl:MariaUserControl Name="MariaCtrl"
                                   Layers="{Binding Layers}"
                                   IsMiniMapVisible="True"
                                   IsPanNavigationVisible="True" 
                                   IsScaleBarVisible="True" 
                                   IsRulerVisible="True" 
                                   CenterScale="{Binding MapViewModel.Scale}" 
                                   CenterPosition="{Binding MapViewModel.CenterPosition}" 
                                   MiniMapLayer="{Binding MapViewModel.MiniMapLayer}"     
                                   />


Creating Track Layer with Track Service Connection

Key information:

  • The track layer is accessed programmatically through the track layer interface IMariaTrackLayer and the extended track layer interface IMariaExtendedTrackLayer.
  • For this part you will need to add the TPG.Maria.TrackLayer NuGet package.

Create a view model class (TrackViewModel) for the track layer:

public class TrackViewModel 
{    
}

Add the following local variable

private readonly IMariaTrackLayer _trackLayer;

Add the TrackViewModel constructor

public TrackViewModel(IMariaTrackLayer trackLayer)
{
    _trackLayer = trackLayer;
    _trackLayer.LayerInitialized += OnTrackLayerInitialized;
}

Implement the OnInitialized event handler (OnTrackLayerInitialized) For the TrackList value, use a track list available in your Track Service.

private void OnTrackLayerInitialized()
{  
    _trackLayer.TrackLists = new ObservableCollection<string> { "ais.test" };
    _trackLayer.TrackServices = new ObservableCollection<IMariaService> 
          {
              new MariaService("TrackService")
          };

    if (_trackLayer.TrackServices.Count > 0)
    {
        _trackLayer.ActiveTrackService = _trackLayer.TrackServices[0];
        _trackLayer.ActiveTrackList = _trackLayer.TrackLists[0];
    }
}

Make sure that your app.config file contains endpoint definitions for the TrackService, as described in the Service Configuration section.

Then, include the TrackViewModel in the main view model (MariaWindowViewModel).

Declarations:

private readonly IMariaTrackLayer _trackLayer;
public TrackViewModel TrackViewModel { get; set; }

and in the constructor

_trackLayer = new TPG.Maria.TrackLayer.TrackLayer();
TrackViewModel = new TrackViewModel(_trackLayer);
Layers.Add(_trackLayer);


Run: In addition to map information and mini map, the application should now include tracks from the specified track list of a Track Service, and you should be able to select tracks!




// 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;
            }
        }
    }

}