From 42dc1d36235292786322d28340a81c6cb3fd46c0 Mon Sep 17 00:00:00 2001 From: hurter Date: Wed, 31 Aug 2011 16:25:05 +0000 Subject: --- Data/AircraftPosition.cs | 73 + Data/AircraftsList.cs | 120 + Data/AppDatabase.cs | 79 + Data/Beacon.cs | 140 + Data/BeaconsXML.cs | 104 + Data/Config.cs | 51 + Data/Data.csproj | 82 + Data/Horloge.cs | 49 + Data/IAircraftView.cs | 12 + Data/MathCautra.cs | 53 + Data/MathTools.cs | 19 + Data/Program.cs | 73 + Data/Properties/AssemblyInfo.cs | 36 + Data/Route.cs | 117 + Data/RoutesXML.cs | 73 + Data/Sector.cs | 215 ++ Data/SectorsXML.cs | 294 ++ Data/app.config | 3 + Data/balises.xml | 1949 ++++++++++++++ Data/bin/Debug/Data.exe | Bin 0 -> 23040 bytes Data/bin/Debug/Data.exe.config | 3 + Data/bin/Debug/Data.pdb | Bin 0 -> 71168 bytes Data/bin/Debug/Data.vshost.exe | Bin 0 -> 11600 bytes Data/bin/Debug/Data.vshost.exe.manifest | 11 + Data/bin/Debug/Ivy.dll | Bin 0 -> 65536 bytes Data/bin/Debug/IvyBus.IvyControl.dll | Bin 0 -> 13312 bytes Data/bin/Debug/balises.xml | 1949 ++++++++++++++ Data/bin/Debug/routes.xml | 39 + Data/bin/Debug/sectors.xml | 2824 ++++++++++++++++++++ .../obj/x86/Debug/Data.csproj.FileListAbsolute.txt | 34 + Data/obj/x86/Debug/Data.exe | Bin 0 -> 23040 bytes Data/obj/x86/Debug/Data.pdb | Bin 0 -> 71168 bytes .../DesignTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 5938 bytes Data/obj/x86/Debug/ResolveAssemblyReference.cache | Bin 0 -> 7754 bytes .../x86/Release/Data.csproj.FileListAbsolute.txt | 1 + .../DesignTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 5866 bytes Data/obj/x86/Release/build.force | 0 Data/routes.xml | 39 + Data/sectors.xml | 2824 ++++++++++++++++++++ 39 files changed, 11266 insertions(+) create mode 100644 Data/AircraftPosition.cs create mode 100644 Data/AircraftsList.cs create mode 100644 Data/AppDatabase.cs create mode 100644 Data/Beacon.cs create mode 100644 Data/BeaconsXML.cs create mode 100644 Data/Config.cs create mode 100644 Data/Data.csproj create mode 100644 Data/Horloge.cs create mode 100644 Data/IAircraftView.cs create mode 100644 Data/MathCautra.cs create mode 100644 Data/MathTools.cs create mode 100644 Data/Program.cs create mode 100644 Data/Properties/AssemblyInfo.cs create mode 100644 Data/Route.cs create mode 100644 Data/RoutesXML.cs create mode 100644 Data/Sector.cs create mode 100644 Data/SectorsXML.cs create mode 100644 Data/app.config create mode 100644 Data/balises.xml create mode 100644 Data/bin/Debug/Data.exe create mode 100644 Data/bin/Debug/Data.exe.config create mode 100644 Data/bin/Debug/Data.pdb create mode 100644 Data/bin/Debug/Data.vshost.exe create mode 100644 Data/bin/Debug/Data.vshost.exe.manifest create mode 100644 Data/bin/Debug/Ivy.dll create mode 100644 Data/bin/Debug/IvyBus.IvyControl.dll create mode 100644 Data/bin/Debug/balises.xml create mode 100644 Data/bin/Debug/routes.xml create mode 100644 Data/bin/Debug/sectors.xml create mode 100644 Data/obj/x86/Debug/Data.csproj.FileListAbsolute.txt create mode 100644 Data/obj/x86/Debug/Data.exe create mode 100644 Data/obj/x86/Debug/Data.pdb create mode 100644 Data/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 Data/obj/x86/Debug/ResolveAssemblyReference.cache create mode 100644 Data/obj/x86/Release/Data.csproj.FileListAbsolute.txt create mode 100644 Data/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 Data/obj/x86/Release/build.force create mode 100644 Data/routes.xml create mode 100644 Data/sectors.xml (limited to 'Data') diff --git a/Data/AircraftPosition.cs b/Data/AircraftPosition.cs new file mode 100644 index 0000000..a80ada2 --- /dev/null +++ b/Data/AircraftPosition.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Data +{ + public class AircraftPosition + { + #region Attributes + + public string Flight; + public string CallSign; + + /// + /// SSR Code + /// + public string Ssr; + + public string Sector; + public string Layers; + + public double X; + public double Y; + + + public double GroundSpeed; + public int Heading; + public double Vx; + public double Vy; + + /// + /// Flight level + /// + public int AFL; + + /// + /// fts/min + /// + public int Rate; + + /// + /// O : Stable + /// 1 : climb + /// -1 : Descent + /// -2 : unknown + /// + public int Tendency; + + /// + /// HH:MM:SS + /// + public int Time_Of_Plot; + + /// + /// The minimum séparation with another aircraft + /// existe if the vertical separation is below 1000ft + /// + public double MinSeparation; + + /// + /// the closest aircraft + /// + public string MinSeparationCallSign; + + /// + /// The speed alteration given with Erasmus -100% -> +100% + /// + public double ErasmusDeltaGroundSpeed; + + #endregion + } +} diff --git a/Data/AircraftsList.cs b/Data/AircraftsList.cs new file mode 100644 index 0000000..78ccbc2 --- /dev/null +++ b/Data/AircraftsList.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using IvyBus; +using System.Timers; + +namespace Data +{ + public class AircraftsList + { + private Dictionary> listOfAircrafts; + private IvyBus.IvyControl TheIvyBus; + private List aircraftViews; + private Timer t_endWaitingForUpdate; + + #region Constructeur + public AircraftsList(IvyBus.IvyControl TheIvyBus) + { + this.TheIvyBus = TheIvyBus; + listOfAircrafts = new Dictionary>(); + aircraftViews = new List(); + + t_endWaitingForUpdate = new Timer(); + t_endWaitingForUpdate.Elapsed += new ElapsedEventHandler(HandleEndWaitingEvent); + t_endWaitingForUpdate.Interval = 4000; + t_endWaitingForUpdate.Start(); + + TheIvyBus.BindMsg(@"^TrackMovedEvent Flight=([0-9]+) CallSign=([a-zA-Z0-9_-]+) Ssr=([0-9]*)[ ]+Sector=(.*) Layers=(.*) X=(.+) Y=(.+) Vx=(.+) Vy=(.+) Afl=([0-9]+) Rate=(-?[0-9]+) Heading=([-\.0-9]+) GroundSpeed=([0-9]+) Tendency=(-?[0-9]) Time=([0-9]+:[0-9]+:[0-9]+)", + UpdateFlight, null); + } + #endregion + + #region listGestion + private void AddAircraftPosition(AircraftPosition pos) + { + if (!listOfAircrafts.ContainsKey(pos.CallSign)) + { + //New radar Track + listOfAircrafts[pos.CallSign] = new List(); + } + //Test if no more than CometLength Item + if (listOfAircrafts[pos.CallSign].Count > Config.aircraftCometLength) + listOfAircrafts[pos.CallSign].RemoveAt(0); + + listOfAircrafts[pos.CallSign].Add(pos); + } + + public Dictionary> getAircraftList() + { + return listOfAircrafts; + } + #endregion + + #region MVCAircraftViews + public void addAircraftView(IAircraftView view) + { + aircraftViews.Add(view); + } + + public void removeAircraftView(IAircraftView view) + { + aircraftViews.Remove(view); + } + + private void notifyAircraftViews() + { + foreach (IAircraftView view in aircraftViews) + { + view.updateView(listOfAircrafts); + } + } + + #endregion + + #region IvyGestion + private void UpdateFlight(object sender, IvyMessageEventArgs e) + { + //Create new aircraft and store it + AircraftPosition pos = new AircraftPosition(); + + pos.Flight = e[0]; + pos.CallSign = e[1]; + pos.Ssr = e[2]; + pos.Sector = e[3]; + pos.Layers = e[4]; + pos.X = double.Parse(e[5], TheIvyBus.Culture); + pos.Y = double.Parse(e[6], TheIvyBus.Culture); + pos.Vx = double.Parse(e[7], TheIvyBus.Culture); + pos.Vy = double.Parse(e[8], TheIvyBus.Culture); + pos.AFL = int.Parse(e[9], TheIvyBus.Culture); + pos.Rate = int.Parse(e[10], TheIvyBus.Culture); + pos.Heading = int.Parse(e[11], TheIvyBus.Culture); + pos.GroundSpeed = double.Parse(e[12], TheIvyBus.Culture); + pos.Tendency = int.Parse(e[13], TheIvyBus.Culture); + //Parse the time + string sTime = e[14]; + string[] time = sTime.Split(':'); + + pos.Time_Of_Plot = Convert.ToInt32(time[2]) + + Convert.ToInt32(time[1]) * 60 + + Convert.ToInt32(time[0]) * 3600; + + AddAircraftPosition(pos); + notifyAircraftViews(); + t_endWaitingForUpdate.Stop(); + t_endWaitingForUpdate.Start(); + } + #endregion + + #region TimerGestion + public void HandleEndWaitingEvent(object source, ElapsedEventArgs e) + { + Console.WriteLine("Vue forcée"); + TheIvyBus.SendMsg("GetRadarRefresh"); + t_endWaitingForUpdate.Start(); + } + #endregion + } +} diff --git a/Data/AppDatabase.cs b/Data/AppDatabase.cs new file mode 100644 index 0000000..f3897b2 --- /dev/null +++ b/Data/AppDatabase.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using IvyBus; + +namespace Data +{ + public class AppDatabase + { + private AircraftsList listOfAircrafts; + private Beacon[] listOfBeacons; + private Route[] listOfRoutes; + private Sector[] listOfSectors; + private Horloge horloge; + + #region Constructor + + public AppDatabase(IvyControl IvyBus) + { + this.listOfAircrafts = new AircraftsList(IvyBus); + this.listOfBeacons = Beacon.LoadBeaconsFile(@Config.beaconsXmlFilePath); + this.listOfRoutes = Route.LoadRoutesFile(@Config.routesXmlFilePath, this); + this.listOfSectors = Sector.LoadSectorsFile(@Config.sectorsXmlFilePath); + + this.horloge = new Horloge(IvyBus); + } + #endregion + + #region Getter + public Sector[] getSectors() + { + return listOfSectors; + } + + public Route[] getRoutes() + { + return listOfRoutes; + } + + public Beacon[] getBeacons() + { + return listOfBeacons; + } + + public int getHour() + { + return horloge.getHour(); + } + + public int getMinute() + { + return horloge.getMinute(); + } + + public int getSecond() + { + return horloge.getSecond(); + } + + public Dictionary> getAircraftList() + { + return listOfAircrafts.getAircraftList(); + } + #endregion + + #region AddViewFuntions + public void addAircraftView(IAircraftView view) + { + listOfAircrafts.addAircraftView(view); + } + + public void removeAircraftView(IAircraftView view) + { + listOfAircrafts.removeAircraftView(view); + } + #endregion + } +} diff --git a/Data/Beacon.cs b/Data/Beacon.cs new file mode 100644 index 0000000..fe9314a --- /dev/null +++ b/Data/Beacon.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Drawing; +using System.Xml.Serialization; +using System.IO; + +namespace Data +{ + public class Beacon + { + #region Attributes + + public static float Ratio = Config.coordinatesRatio; + + private string _code; + private string _type; + private double _lat; + private double _lon; + private bool _isSelected = false; + + #endregion + + #region Constructor + + public Beacon(pointsPoint beacon) + { + this._code = beacon.code; + this._type = beacon.type; + this._lat = beacon.lat; + this._lon = beacon.lon; + } + + #endregion + + #region Methods + + public void Draw(Graphics g) + { + //Pen drawBeaconsPen = new Pen(Config.drawBeaconCodeColor, 0.1f); + SolidBrush drawBeaconBrush = new SolidBrush(Config.drawBeaconColor); + SolidBrush drawBeaconCodeBrush = new SolidBrush(Config.drawBeaconCodeColor); + Font beaconsCodesFont = Config.unselectedBeaconsCodesFont; + + if (this._isSelected) + { + //drawBeaconsPen = new Pen(Config.drawSelectedBeaconCodeColor, 0.1f); + drawBeaconBrush = new SolidBrush(Config.drawSelectedBeaconColor); + drawBeaconCodeBrush = new SolidBrush(Config.drawSelectedBeaconCodeColor); + beaconsCodesFont = Config.selectedBeaconsCodesFont; + } + + PointF locationPointF = this.toPointF(); + if (this.Type != "unpublished") + { + //g.DrawEllipse(drawBeaconsPen, (float)PanAndZoomX(locationPointF.X / Ratio), (float)PanAndZoomY(locationPointF.Y / Ratio), Config.beaconsCirclesSize, Config.beaconsCirclesSize); + g.FillEllipse(drawBeaconBrush, (float)PanAndZoomX(locationPointF.X / Ratio), (float)PanAndZoomY(locationPointF.Y / Ratio), Config.beaconsCirclesSize, Config.beaconsCirclesSize); + g.DrawString(this.Code, beaconsCodesFont, drawBeaconCodeBrush, new PointF((float)PanAndZoomX(locationPointF.X / Ratio) + 5, (float)PanAndZoomY(locationPointF.Y / Ratio) + 5)); + } + } + + public PointF toPointF() + { + return MathCautra.ToCautra4(this._lat, this._lon); + } + + #endregion + + #region Getters and Setters + + public string Code + { + get { return _code; } + set { _code = value; } + } + + public string Type + { + get { return _type; } + set { _type = value; } + } + + public double Lat + { + get { return _lat; } + set { _lat = value; } + } + + public double Lon + { + get { return _lon; } + set { _lon = value; } + } + + public bool isBeaconSelected + { + get { return _isSelected; } + set { _isSelected = value; } + } + + #endregion + + #region Delegate Pan And Zoom + + public delegate double PanAndZoom(double input); + + [NonSerialized] + static public PanAndZoom PanAndZoomX; + [NonSerialized] + static public PanAndZoom PanAndZoomY; + + #endregion + + #region createList + + public static Beacon[] LoadBeaconsFile(string fileName) + { + XmlSerializer serializer = new XmlSerializer(typeof(points)); + TextReader reader = new StreamReader(fileName); + + Beacon[] Beacons = null; + if (reader != null) + { + points beaconsXml = (points)serializer.Deserialize(reader); + reader.Close(); + Beacons = new Beacon[beaconsXml.Items.Length]; + int indexSec = 0; + foreach (pointsPoint s in beaconsXml.Items) + { + Beacons[indexSec++] = new Beacon(s); + //Console.WriteLine("Balise : " + s.code + " --> lat : " + s.lat + " & lon : " + s.lon); + } + //Console.WriteLine("Beacons : " + beaconsXml.Items.Length); + } + return Beacons; + } + #endregion + } +} diff --git a/Data/BeaconsXML.cs b/Data/BeaconsXML.cs new file mode 100644 index 0000000..c08afe3 --- /dev/null +++ b/Data/BeaconsXML.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Serialization; + +namespace Data +{ + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] + public partial class points + { + private pointsPoint[] itemsField; + + /// + [System.Xml.Serialization.XmlElementAttribute("point", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] + public pointsPoint[] Items + { + get + { + return this.itemsField; + } + set + { + this.itemsField = value; + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + public partial class pointsPoint + { + + private string codeField; + private string typeField; + private double lattitudeField; + private double longitudeField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string code + { + get + { + return this.codeField; + } + set + { + this.codeField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string type + { + get + { + return this.typeField; + } + set + { + this.typeField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double lat + { + get + { + return this.lattitudeField; + } + set + { + this.lattitudeField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double lon + { + get + { + return this.longitudeField; + } + set + { + this.longitudeField = value; + } + } + } +} diff --git a/Data/Config.cs b/Data/Config.cs new file mode 100644 index 0000000..1aa97ba --- /dev/null +++ b/Data/Config.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Drawing; + +namespace Data +{ + class Config + { + #region Route + + public static float coordinatesRatio = 8f; + + public static string sectorsXmlFilePath = "sectors.xml"; + public static string beaconsXmlFilePath = "balises.xml"; + public static string routesXmlFilePath = "routes.xml"; + + public static Pen drawRoutesPen = new Pen(Color.FromArgb(60, Color.White), 1.0f); + + #endregion + + #region Beacon + + public static Font unselectedBeaconsCodesFont = new Font("Arial", 8, FontStyle.Regular); + public static Color drawBeaconColor = Color.FromArgb(100, Color.Black); + public static Color drawBeaconCodeColor = Color.FromArgb(80, Color.Black); + public static Color drawSelectedBeaconColor = Color.FromArgb(100, Color.White); + public static Color drawSelectedBeaconCodeColor = Color.FromArgb(80, Color.White); + public static Font selectedBeaconsCodesFont = new Font("Arial", 8, FontStyle.Bold); + + public static int beaconsCirclesSize = 5; + #endregion + + #region Sector + public static int sectorHighFloorValue = 195; + public static Color sectorLinesColor = Color.FromArgb(40, Color.Black); + //public static Color sectorSelectedFillColor = Color.FromArgb(250, Color.DarkSlateGray); + public static Color sectorSelectedFillColor = Color.FromArgb(250, ColorTranslator.FromHtml("#616360")); + //public static Color sectorFillColor = Color.FromArgb(0, Color.DarkSlateGray); + public static Color sectorFillColor = Color.FromArgb(200, ColorTranslator.FromHtml("#7a797c")); + public static Color sectorNameColor = Color.FromArgb(255, Color.Black); + public static Font sectorNameFont = new Font("Arial", 8); + #endregion + + #region Aircraft + static public int aircraftCometLength = 5; + #endregion + + } +} diff --git a/Data/Data.csproj b/Data/Data.csproj new file mode 100644 index 0000000..4133730 --- /dev/null +++ b/Data/Data.csproj @@ -0,0 +1,82 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {2C32E701-5024-4F4B-AB35-1D5DD0049A8E} + Exe + Properties + Data + Data + v4.0 + + + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\lib\Ivy.dll + + + ..\lib\IvyBus.IvyControl.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Data/Horloge.cs b/Data/Horloge.cs new file mode 100644 index 0000000..c4e6bea --- /dev/null +++ b/Data/Horloge.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using IvyBus; + +namespace Data +{ + public class Horloge + { + private IvyBus.IvyControl TheIvyBus; + private int hour, minute, second; + + public Horloge(IvyBus.IvyControl TheIvyBus) + { + this.TheIvyBus = TheIvyBus; + hour = 0; + minute = 0; + second = 0; + TheIvyBus.ivy.BindMsg(@"^ClockEvent Time=([0-9]+):([0-9]+):([0-9]+) Rate=.* Bs=.*", + UpdateClock, null); + } + + public int getHour() + { + return this.hour; + } + + public int getMinute() + { + return this.minute; + } + + public int getSecond() + { + return this.second; + } + private void UpdateClock(object sender, IvyMessageEventArgs e) + { + int new_hour = Int32.Parse(e[0]); + int new_minute = Int32.Parse(e[1]); + int new_second = Int32.Parse(e[2]); + + hour = new_hour; + minute = new_minute; + second = new_second; + } + } +} diff --git a/Data/IAircraftView.cs b/Data/IAircraftView.cs new file mode 100644 index 0000000..0a85a0e --- /dev/null +++ b/Data/IAircraftView.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Data +{ + public interface IAircraftView + { + void updateView(Dictionary> listOfAircrafts); + } +} diff --git a/Data/MathCautra.cs b/Data/MathCautra.cs new file mode 100644 index 0000000..f0cb10a --- /dev/null +++ b/Data/MathCautra.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Drawing; + +namespace Data +{ + public class MathCautra + { + /// CRadarGeo message handlers + static double PI = 3.1415926535; + + /* conversion degres_radian */ + static double degres_radian = PI / 180.0; + + /* translation coordonees Cautra 3 Cautra 4 */ + //static int translationC3 = 4096; + + /* Transformation LAMBERT */ + static double sin_lt = Math.Sin(47.0 * degres_radian); + /* sinus de la latitude de tangeance */ + static double inv_sin_lt = 1.0 / sin_lt; + + /* rayon LAMBERT a l'equateur */ + static double re = 6327.721; + /* rayon LAMBERT au 47 N */ + static double rt = 3201.39922; + + /// + /// Convertion de coordonnees lat,long en 1/8 nm Cautra4 + /// + /// + /// + /// + public static PointF ToCautra4(double latitude, double longitude) + { + double a0; /* Angle de convergence */ + double r0; /* rayon LAMBERT */ + double sin_a0, cos_a0; + double xx; + + a0 = longitude * sin_lt * degres_radian; + xx = Math.Tan(PI / 4 - (latitude * degres_radian) / 2.0); + r0 = re * Math.Pow(xx, sin_lt); + sin_a0 = Math.Sin(a0); + cos_a0 = Math.Cos(a0); + return new PointF( + (float)(8.0 * r0 * sin_a0), + (float)(8.0 * (rt - (r0 * cos_a0)))); + } + } +} diff --git a/Data/MathTools.cs b/Data/MathTools.cs new file mode 100644 index 0000000..adbe90a --- /dev/null +++ b/Data/MathTools.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Data +{ + public class MathTools + { + + static public float GenericScaleF(float input, float i1, float o1, float i2, float o2) + { + if (i2 == i1) return ((o2 + o1) / 2.0f); + float a = (o2 - o1) / (i2 - i1); + float b = o1 - a * i1; + return (a * input + b); + } + } +} diff --git a/Data/Program.cs b/Data/Program.cs new file mode 100644 index 0000000..0b7b3cc --- /dev/null +++ b/Data/Program.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using IvyBus; + +namespace Data +{ + class Program + { + + private const string ivy_domain = "127.255.255.255:2010"; + + static void Main(string[] args) + { + IvyControl TheIvyBus = new IvyControl(); + // + // TheIvyBus + // + TheIvyBus.AppName = "AppDatabase"; + TheIvyBus.Culture = new System.Globalization.CultureInfo("en-US"); + TheIvyBus.ivy.Start(ivy_domain); + //TheIvyDomain.DomainChanged += new EventHandler(TheIvyDomain_DomainChanged); + AppDatabase database = new AppDatabase(TheIvyBus); + + database.addAircraftView(new ConsoleAircraftView(database)); + + + + /** Console.WriteLine("Affichage de la liste des beacons : "); + Beacon[] beacons = database.getBeacons(); + foreach (Beacon b in beacons) + { + Console.WriteLine(b.Code + " : " + b.Lat + " " + b.Lon); + } + + Console.WriteLine("\n\nAffichage des secteurs : "); + Sector[] sectors = database.getSectors(); + foreach (Sector s in sectors) + { + Console.WriteLine(s.Name); + } + + Console.WriteLine("\n\nAffichage des Routes : "); + Route[] routes = database.getRoutes(); + foreach (Route r in routes) + { + Console.WriteLine(r.B1 + " -> " + r.B2); + } + * */ + } + } + + class ConsoleAircraftView : IAircraftView + { + private int count; + private AppDatabase app; + public ConsoleAircraftView(AppDatabase app) + { + count = 0; + this.app = app; + } + public void updateView(Dictionary> listOfAircrafts) + { + count++; + Console.WriteLine("Vue updatee pour la " + count + "ème fois"); + if ((count % 100) == 0) + { + Console.WriteLine("Hour : " + app.getHour() + ":" + app.getMinute() + ":" + app.getSecond()); + } + } + } +} diff --git a/Data/Properties/AssemblyInfo.cs b/Data/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e9dfbe5 --- /dev/null +++ b/Data/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Les informations générales relatives à un assembly dépendent de +// l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations +// associées à un assembly. +[assembly: AssemblyTitle("Data")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Data")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly +// aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de +// COM, affectez la valeur true à l'attribut ComVisible sur ce type. +[assembly: ComVisible(false)] + +// Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM +[assembly: Guid("131f0135-f2f2-4ccf-ab69-befbb024187a")] + +// Les informations de version pour un assembly se composent des quatre valeurs suivantes : +// +// Version principale +// Version secondaire +// Numéro de build +// Révision +// +// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut +// en utilisant '*', comme indiqué ci-dessous : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Data/Route.cs b/Data/Route.cs new file mode 100644 index 0000000..6a8cbf6 --- /dev/null +++ b/Data/Route.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Drawing; +using System.Xml.Serialization; +using System.IO; + +namespace Data +{ + public class Route + { + #region Attributes + + public static float Ratio = Config.coordinatesRatio; + + private string _b1; + private string _b2; + + private AppDatabase app; + + #endregion + + #region Constructor + + public Route(routesRoute route, AppDatabase app1) + { + this._b1 = route.b1; + this._b2 = route.b2; + this.app = app1; + } + + #endregion + + #region Methods + + public void Draw(Graphics g) + { + Beacon startBeacon = getCorrespondingBeacon(this.B1); + Beacon endBeacon = getCorrespondingBeacon(this.B2); + + if ((startBeacon != null) && (endBeacon != null)) + { + PointF locationPointB1 = startBeacon.toPointF(); + PointF locationPointB2 = endBeacon.toPointF(); + g.DrawLine(Config.drawRoutesPen, (float)PanAndZoomX(locationPointB1.X / Ratio), (float)PanAndZoomY(locationPointB1.Y / Ratio), (float)PanAndZoomX(locationPointB2.X / Ratio), (float)PanAndZoomY(locationPointB2.Y / Ratio)); + } + } + + public Beacon getCorrespondingBeacon(string bCode) + { + Beacon correspondingBeacon = null; + foreach (Beacon b in app.getBeacons()) + { + if (b.Code == bCode) + { + correspondingBeacon = b; + break; + } + } + return correspondingBeacon; + } + + #endregion + + #region Getters and Setters + + public string B1 + { + get { return _b1; } + set { _b1 = value; } + } + + public string B2 + { + get { return _b2; } + set { _b2 = value; } + } + + #endregion + + #region Delegate Pan And Zoom + + public delegate double PanAndZoom(double input); + + [NonSerialized] + static public PanAndZoom PanAndZoomX; + [NonSerialized] + static public PanAndZoom PanAndZoomY; + + #endregion + + #region createList + public static Route[] LoadRoutesFile(string fileName, AppDatabase app) + { + XmlSerializer serializer = new XmlSerializer(typeof(routes)); + TextReader reader = new StreamReader(fileName); + + Route[] Routes = null; + if (reader != null) + { + routes routesXml = (routes)serializer.Deserialize(reader); + reader.Close(); + Routes = new Route[routesXml.Items.Length]; + int indexSec = 0; + foreach (routesRoute r in routesXml.Items) + { + Routes[indexSec++] = new Route(r, app); + //Console.WriteLine("Route : " + r.b1 + " / " + r.b2); + } + //Console.WriteLine("Routes : " + routesXml.Items.Length); + } + return Routes; + } + #endregion + } +} diff --git a/Data/RoutesXML.cs b/Data/RoutesXML.cs new file mode 100644 index 0000000..2ec7ea5 --- /dev/null +++ b/Data/RoutesXML.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Data +{ + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] + public partial class routes + { + private routesRoute[] itemsField; + + /// + [System.Xml.Serialization.XmlElementAttribute("route", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] + public routesRoute[] Items + { + get + { + return this.itemsField; + } + set + { + this.itemsField = value; + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + public partial class routesRoute + { + + private string _b1; + private string _b2; + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string b1 + { + get + { + return this._b1; + } + set + { + this._b1 = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string b2 + { + get + { + return this._b2; + } + set + { + this._b2 = value; + } + } + } +} diff --git a/Data/Sector.cs b/Data/Sector.cs new file mode 100644 index 0000000..82c3825 --- /dev/null +++ b/Data/Sector.cs @@ -0,0 +1,215 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Drawing; +using System.Xml.Serialization; +using System.IO; + +namespace Data +{ + public class Sector + { + #region Attributes and structure + + public static float Ratio = Config.coordinatesRatio; + + private bool _isSelected = false; + private string _Name; + public Slice[] Slices; + + public struct Slice + { + public int Floor; + public int Ceiling; + public PointF[] Points; + } + + #endregion + + #region Constructor + + public Sector(sectorsSector raw) + { + _Name = raw.name; + Slices = new Slice[raw.slice.Length]; + this._isSelected = false; + int indexSlice = 0; + foreach (sectorsSectorSlice s in raw.slice) + { + Slices[indexSlice].Floor = s.floor; + Slices[indexSlice].Ceiling = s.ceiling; + + Slices[indexSlice].Points = new PointF[s.vertex.Length]; + int indexVextex = 0; + foreach (sectorsSectorSliceVertex v in s.vertex) + { + Slices[indexSlice].Points[indexVextex] = MathCautra.ToCautra4(v.lat, v.lon); + indexVextex++; + } + indexSlice++; + } + } + + #endregion + + #region Methods + + static public bool PointInPolygon(PointF p, Sector sect) + { + PointF p1, p2; + + bool inside = false; + + foreach (Slice slice in sect.Slices) + { + PointF[] poly = slice.Points; + + if (poly.Length < 3) + { + return inside; + } + + PointF oldPoint = new PointF( + + poly[poly.Length - 1].X, poly[poly.Length - 1].Y); + + for (int i = 0; i < poly.Length; i++) + { + PointF newPoint = new PointF(poly[i].X, poly[i].Y); + + if (newPoint.X > oldPoint.X) + { + p1 = oldPoint; + p2 = newPoint; + } + else + { + p1 = newPoint; + p2 = oldPoint; + } + + if ((newPoint.X < p.X) == (p.X <= oldPoint.X) && ((long)p.Y - (long)p1.Y) * (long)(p2.X - p1.X) + < ((long)p2.Y - (long)p1.Y) * (long)(p.X - p1.X)) + { + inside = !inside; + } + oldPoint = newPoint; + } + if (inside == true) break; + } + return inside; + } + + public override string ToString() + { + return _Name; + } + + public void Draw(Graphics g, Boolean drawSectorsNames) + { + Pen drawLinesPen = new Pen(Config.sectorLinesColor, 0.5f); + + SolidBrush fillPolygonBrush = null; + if (this.isSectorSelected) + { + fillPolygonBrush = new SolidBrush(Config.sectorSelectedFillColor); + } + else + { + fillPolygonBrush = new SolidBrush(Config.sectorFillColor); + } + + //PointF p1, p2; + PointF pCurr = new PointF(0, 0), pSuiv = new PointF(0, 0), pTransf = new PointF(0, 0); + PointF[] tabPoints; + + int sliceCeiling; + + foreach (Slice s in Slices) + { + sliceCeiling = s.Ceiling; + if (sliceCeiling > Config.sectorHighFloorValue) + { + if (drawSectorsNames) + { + PointF sectorNamePos = s.Points[0]; + SolidBrush sectorNameBrush = new SolidBrush(Config.sectorNameColor); + g.DrawString(this.Name, Config.sectorNameFont, sectorNameBrush, new PointF((float)PanAndZoomX(sectorNamePos.X / Ratio), (float)PanAndZoomY(sectorNamePos.Y / Ratio))); + } + + tabPoints = new PointF[s.Points.Length-1 ]; + for (int i = 0; i < (s.Points.Length-1 ); i++) + { + //p1 = s.Points[i] ; + //p2 = s.Points[i + 1]; + //g.DrawLine(p, (float)PanAndZoomX(p1.X / Ratio), (float)PanAndZoomY(p1.Y / Ratio), (float)PanAndZoomX(p2.X / Ratio), (float)PanAndZoomY(p2.Y / Ratio)); + + pCurr = s.Points[i]; + pSuiv = s.Points[i + 1]; + g.DrawLine(drawLinesPen, (float)PanAndZoomX(pCurr.X / Ratio), (float)PanAndZoomY(pCurr.Y / Ratio), (float)PanAndZoomX(pSuiv.X / Ratio), (float)PanAndZoomY(pSuiv.Y / Ratio)); + pTransf = new PointF((float)PanAndZoomX(pCurr.X / Ratio), (float)PanAndZoomY(pCurr.Y / Ratio)); + tabPoints[i] = pTransf; + } + //pSuiv = s.Points[0]; + //g.DrawLine(drawLinesPen, (float)PanAndZoomX(pCurr.X / Ratio), (float)PanAndZoomY(pCurr.Y / Ratio), (float)PanAndZoomX(pSuiv.X / Ratio), (float)PanAndZoomY(pSuiv.Y / Ratio)); + + g.FillPolygon(fillPolygonBrush, tabPoints, System.Drawing.Drawing2D.FillMode.Alternate); + } + } + } + + #endregion + + #region Getters and Setters + + public bool isSectorSelected + { + get { return _isSelected; } + set { _isSelected = value; } + } + + public string Name + { + get { return _Name; } + set { _Name = value; } + } + + #endregion + + #region Delegate Pan And Zoom + + public delegate double PanAndZoom(double input); + + [NonSerialized] + static public PanAndZoom PanAndZoomX; + [NonSerialized] + static public PanAndZoom PanAndZoomY; + + #endregion + + #region createList + public static Sector[] LoadSectorsFile(string fileName) + { + XmlSerializer serializer = new XmlSerializer(typeof(sectors)); + TextReader reader = new StreamReader(fileName); + + Sector[] Sectors = null; + if (reader != null) + { + sectors sectorsXml = (sectors)serializer.Deserialize(reader); + reader.Close(); + + //Sectors = sectorsXml.GetPointList(); + Sectors = new Sector[sectorsXml.Items.Length]; + int indexSec = 0; + foreach (sectorsSector s in sectorsXml.Items) + { + Sectors[indexSec++] = new Sector(s); + } + } + return Sectors; + } + #endregion + } +} diff --git a/Data/SectorsXML.cs b/Data/SectorsXML.cs new file mode 100644 index 0000000..e32e95c --- /dev/null +++ b/Data/SectorsXML.cs @@ -0,0 +1,294 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Serialization; + +namespace Data +{ + //------------------------------------------------------------------------------ + // + // Ce code a été généré par un outil. + // Version du runtime :2.0.50727.312 + // + // Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si + // le code est régénéré. + // + //------------------------------------------------------------------------------ + // + // This source code was auto-generated by xsd, Version=2.0.50727.42. + // + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] + public partial class sectors + { + private sectorsSector[] itemsField; + + /// + [System.Xml.Serialization.XmlElementAttribute("sector", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] + public sectorsSector[] Items + { + get + { + return this.itemsField; + } + set + { + this.itemsField = value; + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + public partial class sectorsSector + { + + private sectorsSectorSlice[] sliceField; + + private string nameField; + + private string accField; + + private int floorField; + + private int ceilingField; + + /// + [System.Xml.Serialization.XmlElementAttribute("slice", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] + public sectorsSectorSlice[] slice + { + get + { + return this.sliceField; + } + set + { + this.sliceField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string name + { + get + { + return this.nameField; + } + set + { + this.nameField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string acc + { + get + { + return this.accField; + } + set + { + this.accField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int floor + { + get + { + return this.floorField; + } + set + { + this.floorField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int ceiling + { + get + { + return this.ceilingField; + } + set + { + this.ceilingField = value; + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + public partial class sectorsSectorSlice + { + + private sectorsSectorSliceCentre[] centreField; + + private sectorsSectorSliceVertex[] vertexField; + + private int floorField; + + private int ceilingField; + + /// + [System.Xml.Serialization.XmlElementAttribute("centre", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] + public sectorsSectorSliceCentre[] centre + { + get + { + return this.centreField; + } + set + { + this.centreField = value; + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("vertex", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] + public sectorsSectorSliceVertex[] vertex + { + get + { + return this.vertexField; + } + set + { + this.vertexField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int floor + { + get + { + return this.floorField; + } + set + { + this.floorField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int ceiling + { + get + { + return this.ceilingField; + } + set + { + this.ceilingField = value; + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + public partial class sectorsSectorSliceCentre + { + + private double latField; + + private double lonField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double lat + { + get + { + return this.latField; + } + set + { + this.latField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double lon + { + get + { + return this.lonField; + } + set + { + this.lonField = value; + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + public partial class sectorsSectorSliceVertex + { + + private double latField; + + private double lonField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double lat + { + get + { + return this.latField; + } + set + { + this.latField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double lon + { + get + { + return this.lonField; + } + set + { + this.lonField = value; + } + } + } +} diff --git a/Data/app.config b/Data/app.config new file mode 100644 index 0000000..cb2586b --- /dev/null +++ b/Data/app.config @@ -0,0 +1,3 @@ + + + diff --git a/Data/balises.xml b/Data/balises.xml new file mode 100644 index 0000000..daf6324 --- /dev/null +++ b/Data/balises.xml @@ -0,0 +1,1949 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Data/bin/Debug/Data.exe b/Data/bin/Debug/Data.exe new file mode 100644 index 0000000..9f0369d Binary files /dev/null and b/Data/bin/Debug/Data.exe differ diff --git a/Data/bin/Debug/Data.exe.config b/Data/bin/Debug/Data.exe.config new file mode 100644 index 0000000..cb2586b --- /dev/null +++ b/Data/bin/Debug/Data.exe.config @@ -0,0 +1,3 @@ + + + diff --git a/Data/bin/Debug/Data.pdb b/Data/bin/Debug/Data.pdb new file mode 100644 index 0000000..baa3186 Binary files /dev/null and b/Data/bin/Debug/Data.pdb differ diff --git a/Data/bin/Debug/Data.vshost.exe b/Data/bin/Debug/Data.vshost.exe new file mode 100644 index 0000000..bb84a51 Binary files /dev/null and b/Data/bin/Debug/Data.vshost.exe differ diff --git a/Data/bin/Debug/Data.vshost.exe.manifest b/Data/bin/Debug/Data.vshost.exe.manifest new file mode 100644 index 0000000..f96b1d6 --- /dev/null +++ b/Data/bin/Debug/Data.vshost.exe.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Data/bin/Debug/Ivy.dll b/Data/bin/Debug/Ivy.dll new file mode 100644 index 0000000..e98260d Binary files /dev/null and b/Data/bin/Debug/Ivy.dll differ diff --git a/Data/bin/Debug/IvyBus.IvyControl.dll b/Data/bin/Debug/IvyBus.IvyControl.dll new file mode 100644 index 0000000..1cb27aa Binary files /dev/null and b/Data/bin/Debug/IvyBus.IvyControl.dll differ diff --git a/Data/bin/Debug/balises.xml b/Data/bin/Debug/balises.xml new file mode 100644 index 0000000..daf6324 --- /dev/null +++ b/Data/bin/Debug/balises.xml @@ -0,0 +1,1949 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Data/bin/Debug/routes.xml b/Data/bin/Debug/routes.xml new file mode 100644 index 0000000..43c8a5d --- /dev/null +++ b/Data/bin/Debug/routes.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Data/bin/Debug/sectors.xml b/Data/bin/Debug/sectors.xml new file mode 100644 index 0000000..49ccab9 --- /dev/null +++ b/Data/bin/Debug/sectors.xml @@ -0,0 +1,2824 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Data/obj/x86/Debug/Data.csproj.FileListAbsolute.txt b/Data/obj/x86/Debug/Data.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..52111c9 --- /dev/null +++ b/Data/obj/x86/Debug/Data.csproj.FileListAbsolute.txt @@ -0,0 +1,34 @@ +C:\Users\Utilisateur\Desktop\Programmation projet\ProtoFinal\ProtoAnotoFinal\Data\bin\Debug\Data.exe +C:\Users\Utilisateur\Desktop\Programmation projet\ProtoFinal\ProtoAnotoFinal\Data\bin\Debug\Data.pdb +C:\Users\Utilisateur\Desktop\Programmation projet\ProtoFinal\ProtoAnotoFinal\Data\obj\x86\Debug\ResolveAssemblyReference.cache +C:\Users\Utilisateur\Desktop\Programmation projet\ProtoFinal\ProtoAnotoFinal\Data\obj\x86\Debug\Data.exe +C:\Users\Utilisateur\Desktop\Programmation projet\ProtoFinal\ProtoAnotoFinal\Data\obj\x86\Debug\Data.pdb +C:\Users\Utilisateur\Desktop\ProtoAnotoFinal\Data\bin\Debug\Data.exe +C:\Users\Utilisateur\Desktop\ProtoAnotoFinal\Data\bin\Debug\Data.pdb +C:\Users\Utilisateur\Desktop\ProtoAnotoFinal\Data\obj\x86\Debug\ResolveAssemblyReference.cache +C:\Users\Utilisateur\Desktop\ProtoAnotoFinal\Data\obj\x86\Debug\Data.exe +C:\Users\Utilisateur\Desktop\ProtoAnotoFinal\Data\obj\x86\Debug\Data.pdb +C:\Users\Utilisateur\Desktop\V1.3\ProtoAnotoFinal\Data\bin\Debug\Data.exe +C:\Users\Utilisateur\Desktop\V1.3\ProtoAnotoFinal\Data\bin\Debug\Data.pdb +C:\Users\Utilisateur\Desktop\V1.3\ProtoAnotoFinal\Data\obj\x86\Debug\ResolveAssemblyReference.cache +C:\Users\Utilisateur\Desktop\V1.3\ProtoAnotoFinal\Data\obj\x86\Debug\Data.exe +C:\Users\Utilisateur\Desktop\V1.3\ProtoAnotoFinal\Data\obj\x86\Debug\Data.pdb +C:\Users\Utilisateur\Desktop\V1.5\ProtoAnotoFinal\Data\obj\x86\Debug\ResolveAssemblyReference.cache +C:\Users\Utilisateur\Desktop\V1.5\ProtoAnotoFinal\Data\obj\x86\Debug\Data.exe +C:\Users\Utilisateur\Desktop\V1.5\ProtoAnotoFinal\Data\obj\x86\Debug\Data.pdb +C:\Users\Utilisateur\Desktop\V1.5\ProtoAnotoFinal\Data\bin\Debug\Data.exe +C:\Users\Utilisateur\Desktop\V1.5\ProtoAnotoFinal\Data\bin\Debug\Data.pdb +C:\Users\Utilisateur\Desktop\V1.5\ProtoAnotoFinal\Data\bin\Debug\Ivy.dll +C:\Users\Utilisateur\Desktop\V1.5\ProtoAnotoFinal\Data\bin\Debug\IvyBus.IvyControl.dll +E:\SaveData\Projects\Anoto\Data\bin\Debug\Data.exe +E:\SaveData\Projects\Anoto\Data\bin\Debug\Data.pdb +E:\SaveData\Projects\Anoto\Data\obj\x86\Debug\ResolveAssemblyReference.cache +E:\SaveData\Projects\Anoto\Data\obj\x86\Debug\Data.exe +E:\SaveData\Projects\Anoto\Data\obj\x86\Debug\Data.pdb +C:\Anoto\Anoto\Data\bin\Debug\Data.exe +C:\Anoto\Anoto\Data\bin\Debug\Data.pdb +C:\Anoto\Anoto\Data\obj\x86\Debug\ResolveAssemblyReference.cache +C:\Anoto\Anoto\Data\obj\x86\Debug\Data.exe +C:\Anoto\Anoto\Data\obj\x86\Debug\Data.pdb +E:\SaveData\Projects\Anoto\Data\bin\Debug\Data.exe.config +C:\Anoto\Anoto\Data\bin\Debug\Data.exe.config diff --git a/Data/obj/x86/Debug/Data.exe b/Data/obj/x86/Debug/Data.exe new file mode 100644 index 0000000..9f0369d Binary files /dev/null and b/Data/obj/x86/Debug/Data.exe differ diff --git a/Data/obj/x86/Debug/Data.pdb b/Data/obj/x86/Debug/Data.pdb new file mode 100644 index 0000000..baa3186 Binary files /dev/null and b/Data/obj/x86/Debug/Data.pdb differ diff --git a/Data/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Data/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000..967145b Binary files /dev/null and b/Data/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/Data/obj/x86/Debug/ResolveAssemblyReference.cache b/Data/obj/x86/Debug/ResolveAssemblyReference.cache new file mode 100644 index 0000000..e6d5afa Binary files /dev/null and b/Data/obj/x86/Debug/ResolveAssemblyReference.cache differ diff --git a/Data/obj/x86/Release/Data.csproj.FileListAbsolute.txt b/Data/obj/x86/Release/Data.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..ec0a76c --- /dev/null +++ b/Data/obj/x86/Release/Data.csproj.FileListAbsolute.txt @@ -0,0 +1 @@ +C:\Anoto\Anoto\Data\obj\x86\Release\ResolveAssemblyReference.cache diff --git a/Data/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/Data/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000..5f972b8 Binary files /dev/null and b/Data/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/Data/obj/x86/Release/build.force b/Data/obj/x86/Release/build.force new file mode 100644 index 0000000..e69de29 diff --git a/Data/routes.xml b/Data/routes.xml new file mode 100644 index 0000000..43c8a5d --- /dev/null +++ b/Data/routes.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Data/sectors.xml b/Data/sectors.xml new file mode 100644 index 0000000..49ccab9 --- /dev/null +++ b/Data/sectors.xml @@ -0,0 +1,2824 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.1