From 962f8d5252b3f5ec4d19e0cd2a430934bd55cc6d Mon Sep 17 00:00:00 2001 From: Dan Liew Date: Sun, 28 Jun 2015 01:44:30 +0100 Subject: Normalise line endings using a .gitattributes file. Unfortunately this required that this commit globally modify most files. If you want to use git blame to see the real author of a line use the ``-w`` flag so that whitespace changes are ignored. --- Source/ModelViewer/BCTProvider.cs | 294 +- Source/ModelViewer/BaseProvider.cs | 272 +- Source/ModelViewer/DafnyProvider.cs | 776 ++-- Source/ModelViewer/DataModel.cs | 594 +-- Source/ModelViewer/Main.Designer.cs | 998 ++--- Source/ModelViewer/Main.cs | 1740 ++++---- Source/ModelViewer/Main.resx | 4382 ++++++++++---------- Source/ModelViewer/ModelViewer.csproj | 422 +- Source/ModelViewer/Namer.cs | 1160 +++--- Source/ModelViewer/Properties/AssemblyInfo.cs | 50 +- .../ModelViewer/Properties/Resources.Designer.cs | 126 +- Source/ModelViewer/Properties/Resources.resx | 232 +- Source/ModelViewer/Properties/Settings.Designer.cs | 52 +- Source/ModelViewer/Properties/Settings.settings | 14 +- Source/ModelViewer/SourceView.Designer.cs | 124 +- Source/ModelViewer/SourceView.cs | 104 +- Source/ModelViewer/SourceView.resx | 238 +- Source/ModelViewer/TreeSkeleton.cs | 410 +- Source/ModelViewer/VccProvider.cs | 3052 +++++++------- 19 files changed, 7520 insertions(+), 7520 deletions(-) (limited to 'Source/ModelViewer') diff --git a/Source/ModelViewer/BCTProvider.cs b/Source/ModelViewer/BCTProvider.cs index 6b48c396..3126084f 100644 --- a/Source/ModelViewer/BCTProvider.cs +++ b/Source/ModelViewer/BCTProvider.cs @@ -1,147 +1,147 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Microsoft.Boogie.ModelViewer.BCT { - public class Provider : ILanguageProvider { - public static Provider Instance = new Provider(); - private Provider() { } - - public bool IsMyModel(Model m) { - return m.TryGetFunc("$Alloc") != null; - } - - public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) { - var dm = new BCTModel(m, opts); - foreach (var s in m.States) { - var sn = new StateNode(dm.states.Count, dm, s); - dm.states.Add(sn); - } - dm.FinishStates(); - return dm; - } - } - - class BCTModel : LanguageModel { - public readonly Model.Func f_heap_select; - public readonly Dictionary ArrayLengths = new Dictionary(); - Dictionary typeName = new Dictionary(); - public List states = new List(); - - public BCTModel(Model m, ViewOptions opts) - : base(m, opts) { - f_heap_select = m.MkFunc("[3]", 3); - - foreach (Model.Func fn in m.Functions) { - - } - } - - internal void FinishStates() { - GenerateSourceLocations(states); - } - - public override IEnumerable States { - get { return states; } - } - - public string GetUserVariableName(string name) { - if (name == "$this") - return "this"; - if (name.Contains("$")) - return null; - if (name == "isControlChecked" || name == "isControlEnabled") - return null; - return name; - } - - public Model.Element Image(Model.Element elt, Model.Func f) { - var r = f.AppWithResult(elt); - if (r != null) - return r.Args[0]; - return null; - } - - public IEnumerable GetExpansion(StateNode state, Model.Element elt) { - List result = new List(); - return result; - } - } - - class StateNode : NamedState { - internal readonly BCTModel dm; - internal readonly List vars = new List(); - internal readonly int index; - - public StateNode(int i, BCTModel parent, Model.CapturedState s) - : base(s, parent) { - dm = parent; - state = s; - index = i; - - SetupVars(); - } - - void SetupVars() { - var names = Util.Empty(); - - if (dm.states.Count > 0) { - var prev = dm.states.Last(); - names = prev.vars.Map(v => v.realName); - } - - names = names.Concat(state.Variables).Distinct(); - - var curVars = state.Variables.ToDictionary(x => x); - foreach (var v in names) { - if (dm.GetUserVariableName(v) != null) { - var val = state.TryGet(v); - var vn = new VariableNode(this, v, val); - vn.updatedHere = dm.states.Count > 0 && curVars.ContainsKey(v); - if (curVars.ContainsKey(v)) - dm.RegisterLocalValue(vn.Name, val); - vars.Add(vn); - } - } - - dm.Flush(Nodes); - } - - public override IEnumerable Nodes { - get { - return vars; - } - } - } - - class ElementNode : DisplayNode { - protected StateNode stateNode; - protected Model.Element elt; - protected BCTModel vm { get { return stateNode.dm; } } - - public ElementNode(StateNode st, EdgeName name, Model.Element elt) - : base(st.dm, name, elt) { - this.stateNode = st; - this.elt = elt; - } - - public ElementNode(StateNode st, string name, Model.Element elt) - : this(st, new EdgeName(name), elt) { } - - protected override void ComputeChildren() { - children.AddRange(vm.GetExpansion(stateNode, elt)); - } - } - - class VariableNode : ElementNode { - public bool updatedHere; - public string realName; - - public VariableNode(StateNode par, string realName, Model.Element elt) - : base(par, realName, elt) { - this.realName = realName; - name = new EdgeName(vm.GetUserVariableName(realName)); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.Boogie.ModelViewer.BCT { + public class Provider : ILanguageProvider { + public static Provider Instance = new Provider(); + private Provider() { } + + public bool IsMyModel(Model m) { + return m.TryGetFunc("$Alloc") != null; + } + + public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) { + var dm = new BCTModel(m, opts); + foreach (var s in m.States) { + var sn = new StateNode(dm.states.Count, dm, s); + dm.states.Add(sn); + } + dm.FinishStates(); + return dm; + } + } + + class BCTModel : LanguageModel { + public readonly Model.Func f_heap_select; + public readonly Dictionary ArrayLengths = new Dictionary(); + Dictionary typeName = new Dictionary(); + public List states = new List(); + + public BCTModel(Model m, ViewOptions opts) + : base(m, opts) { + f_heap_select = m.MkFunc("[3]", 3); + + foreach (Model.Func fn in m.Functions) { + + } + } + + internal void FinishStates() { + GenerateSourceLocations(states); + } + + public override IEnumerable States { + get { return states; } + } + + public string GetUserVariableName(string name) { + if (name == "$this") + return "this"; + if (name.Contains("$")) + return null; + if (name == "isControlChecked" || name == "isControlEnabled") + return null; + return name; + } + + public Model.Element Image(Model.Element elt, Model.Func f) { + var r = f.AppWithResult(elt); + if (r != null) + return r.Args[0]; + return null; + } + + public IEnumerable GetExpansion(StateNode state, Model.Element elt) { + List result = new List(); + return result; + } + } + + class StateNode : NamedState { + internal readonly BCTModel dm; + internal readonly List vars = new List(); + internal readonly int index; + + public StateNode(int i, BCTModel parent, Model.CapturedState s) + : base(s, parent) { + dm = parent; + state = s; + index = i; + + SetupVars(); + } + + void SetupVars() { + var names = Util.Empty(); + + if (dm.states.Count > 0) { + var prev = dm.states.Last(); + names = prev.vars.Map(v => v.realName); + } + + names = names.Concat(state.Variables).Distinct(); + + var curVars = state.Variables.ToDictionary(x => x); + foreach (var v in names) { + if (dm.GetUserVariableName(v) != null) { + var val = state.TryGet(v); + var vn = new VariableNode(this, v, val); + vn.updatedHere = dm.states.Count > 0 && curVars.ContainsKey(v); + if (curVars.ContainsKey(v)) + dm.RegisterLocalValue(vn.Name, val); + vars.Add(vn); + } + } + + dm.Flush(Nodes); + } + + public override IEnumerable Nodes { + get { + return vars; + } + } + } + + class ElementNode : DisplayNode { + protected StateNode stateNode; + protected Model.Element elt; + protected BCTModel vm { get { return stateNode.dm; } } + + public ElementNode(StateNode st, EdgeName name, Model.Element elt) + : base(st.dm, name, elt) { + this.stateNode = st; + this.elt = elt; + } + + public ElementNode(StateNode st, string name, Model.Element elt) + : this(st, new EdgeName(name), elt) { } + + protected override void ComputeChildren() { + children.AddRange(vm.GetExpansion(stateNode, elt)); + } + } + + class VariableNode : ElementNode { + public bool updatedHere; + public string realName; + + public VariableNode(StateNode par, string realName, Model.Element elt) + : base(par, realName, elt) { + this.realName = realName; + name = new EdgeName(vm.GetUserVariableName(realName)); + } + } +} diff --git a/Source/ModelViewer/BaseProvider.cs b/Source/ModelViewer/BaseProvider.cs index 1e9e9cf9..8797fe1f 100644 --- a/Source/ModelViewer/BaseProvider.cs +++ b/Source/ModelViewer/BaseProvider.cs @@ -1,136 +1,136 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Microsoft.Boogie.ModelViewer.Base -{ - public class Provider : ILanguageProvider - { - public static Provider Instance = new Provider(); - private Provider() { } - - public bool IsMyModel(Model m) - { - return true; - } - - public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) - { - return new GenericModel(m, opts); - } - } - - public class GenericModel : LanguageModel - { - List states = new List(); - - public GenericModel(Model m, ViewOptions opts) - : base(m, opts) - { - foreach (var s in m.States) - states.Add(new BaseState(this, s) { Name = s.Name }); - foreach (var s in states) - this.Flush(s.nodes); - } - - public override IEnumerable States - { - get { return states; } - } - } - - public class BaseState : IState - { - internal GenericModel m; - Model.CapturedState st; - - internal List nodes = new List(); - internal Dictionary niceName = new Dictionary(); - - public BaseState(GenericModel m, Model.CapturedState st) - { - this.st = st; - this.m = m; - - foreach (var v in st.AllVariables) { - var e = st.TryGet(v); - m.RegisterLocalValue(v, e); - nodes.Add(new ElementNode(this, v, e)); - - niceName[e] = v; - foreach (var r in e.References) { - if (r.Args.Length == 1 && r.Args[0] == e) { - if (!niceName.ContainsKey(e)) - niceName[e] = r.Func.Name + "(" + v + ")"; - } - } - } - - nodes.Add(new ContainerNode("[Functions]", f => f.Arity == 0 ? null : Function(f), m.model.Functions)); - nodes.Add(new ContainerNode("[Constants]", f => f.Arity != 0 ? null : new AppNode(this, f.Apps.First()), m.model.Functions)); - } - - public virtual SourceViewState ShowSource() - { - return null; - } - - IDisplayNode Function(Model.Func f) - { - return new ContainerNode(f.Name, a => new AppNode(this, a), f.Apps); - } - - public virtual string Name { get; set; } - - public virtual IEnumerable Nodes - { - get { return nodes; } - } - } - - public class ElementNode : DisplayNode - { - BaseState st; - - public ElementNode(BaseState st, string name, Model.Element elt) : base(st.m, name, elt) { this.st = st; } - - protected override void ComputeChildren() - { - children.Add(new ContainerNode(" == ", e => new AppNode(st, e), Element.References.Where(t => t.Result == Element))); - foreach (var e in Element.References) { - if (e.Args.Contains(Element)) - children.Add(new AppNode(st, e, x => x == Element ? "*" : st.niceName.GetWithDefault(x, null))); - } - } - } - - public class AppNode : ElementNode - { - protected Model.FuncTuple tupl; - - public AppNode(BaseState m, Model.FuncTuple t) : this(m, t, _ => null) { } - - public AppNode(BaseState m, Model.FuncTuple t, Func nameElement) - : base(m, t.Func.Name, t.Result) - { - tupl = t; - var sb = new StringBuilder(); - sb.Append(t.Func.Name); - if (t.Args.Length > 0) { - sb.Append("("); - for (int i = 0; i < t.Args.Length; ++i) { - var n = nameElement(t.Args[i]); - if (n == null) - sb.AppendFormat("%{0}, ", i); - else - sb.AppendFormat("{0}, ", n); - } - sb.Length -= 2; - sb.Append(")"); - } - name = new EdgeName(m.m, sb.ToString(), t.Args); - } - } - -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.Boogie.ModelViewer.Base +{ + public class Provider : ILanguageProvider + { + public static Provider Instance = new Provider(); + private Provider() { } + + public bool IsMyModel(Model m) + { + return true; + } + + public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) + { + return new GenericModel(m, opts); + } + } + + public class GenericModel : LanguageModel + { + List states = new List(); + + public GenericModel(Model m, ViewOptions opts) + : base(m, opts) + { + foreach (var s in m.States) + states.Add(new BaseState(this, s) { Name = s.Name }); + foreach (var s in states) + this.Flush(s.nodes); + } + + public override IEnumerable States + { + get { return states; } + } + } + + public class BaseState : IState + { + internal GenericModel m; + Model.CapturedState st; + + internal List nodes = new List(); + internal Dictionary niceName = new Dictionary(); + + public BaseState(GenericModel m, Model.CapturedState st) + { + this.st = st; + this.m = m; + + foreach (var v in st.AllVariables) { + var e = st.TryGet(v); + m.RegisterLocalValue(v, e); + nodes.Add(new ElementNode(this, v, e)); + + niceName[e] = v; + foreach (var r in e.References) { + if (r.Args.Length == 1 && r.Args[0] == e) { + if (!niceName.ContainsKey(e)) + niceName[e] = r.Func.Name + "(" + v + ")"; + } + } + } + + nodes.Add(new ContainerNode("[Functions]", f => f.Arity == 0 ? null : Function(f), m.model.Functions)); + nodes.Add(new ContainerNode("[Constants]", f => f.Arity != 0 ? null : new AppNode(this, f.Apps.First()), m.model.Functions)); + } + + public virtual SourceViewState ShowSource() + { + return null; + } + + IDisplayNode Function(Model.Func f) + { + return new ContainerNode(f.Name, a => new AppNode(this, a), f.Apps); + } + + public virtual string Name { get; set; } + + public virtual IEnumerable Nodes + { + get { return nodes; } + } + } + + public class ElementNode : DisplayNode + { + BaseState st; + + public ElementNode(BaseState st, string name, Model.Element elt) : base(st.m, name, elt) { this.st = st; } + + protected override void ComputeChildren() + { + children.Add(new ContainerNode(" == ", e => new AppNode(st, e), Element.References.Where(t => t.Result == Element))); + foreach (var e in Element.References) { + if (e.Args.Contains(Element)) + children.Add(new AppNode(st, e, x => x == Element ? "*" : st.niceName.GetWithDefault(x, null))); + } + } + } + + public class AppNode : ElementNode + { + protected Model.FuncTuple tupl; + + public AppNode(BaseState m, Model.FuncTuple t) : this(m, t, _ => null) { } + + public AppNode(BaseState m, Model.FuncTuple t, Func nameElement) + : base(m, t.Func.Name, t.Result) + { + tupl = t; + var sb = new StringBuilder(); + sb.Append(t.Func.Name); + if (t.Args.Length > 0) { + sb.Append("("); + for (int i = 0; i < t.Args.Length; ++i) { + var n = nameElement(t.Args[i]); + if (n == null) + sb.AppendFormat("%{0}, ", i); + else + sb.AppendFormat("{0}, ", n); + } + sb.Length -= 2; + sb.Append(")"); + } + name = new EdgeName(m.m, sb.ToString(), t.Args); + } + } + +} diff --git a/Source/ModelViewer/DafnyProvider.cs b/Source/ModelViewer/DafnyProvider.cs index 602df7aa..45c7dada 100644 --- a/Source/ModelViewer/DafnyProvider.cs +++ b/Source/ModelViewer/DafnyProvider.cs @@ -1,388 +1,388 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Diagnostics.Contracts; - -namespace Microsoft.Boogie.ModelViewer.Dafny -{ - public class Provider : ILanguageProvider - { - public static Provider Instance = new Provider(); - private Provider() { } - - public bool IsMyModel(Model m) - { - return m.TryGetFunc("$$Language$Dafny") != null; - } - - public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) - { - var dm = new DafnyModel(m, opts); - foreach (var s in m.States) { - var sn = new StateNode(dm.states.Count, dm, s); - dm.states.Add(sn); - } - dm.FinishStates(); - return dm; - } - } - - public class DafnyModel : LanguageModel - { - public readonly Model.Func f_heap_select, f_set_select, f_seq_length, f_seq_index, f_box, f_dim, f_index_field, f_multi_index_field, f_dtype, f_null; - public readonly Dictionary ArrayLengths = new Dictionary(); - public readonly Dictionary DatatypeValues = new Dictionary(); - Dictionary typeName = new Dictionary(); - public List states = new List(); - - public DafnyModel(Model m, ViewOptions opts) - : base(m, opts) - { - f_heap_select = m.MkFunc("[3]", 3); - f_set_select = m.MkFunc("[2]", 2); - f_seq_length = m.MkFunc("Seq#Length", 1); - f_seq_index = m.MkFunc("Seq#Index", 2); - f_box = m.MkFunc("$Box", 1); - f_dim = m.MkFunc("FDim", 1); - f_index_field = m.MkFunc("IndexField", 1); - f_multi_index_field = m.MkFunc("MultiIndexField", 2); - f_dtype = m.MkFunc("dtype", 1); - f_null = m.MkFunc("null", 0); - - // collect the array dimensions from the various array.Length functions, and - // collect all known datatype values - foreach (var fn in m.Functions) { - if (Regex.IsMatch(fn.Name, "^_System.array[0-9]*.Length[0-9]*$")) { - int j = fn.Name.IndexOf('.', 13); - int dims = j == 13 ? 1 : int.Parse(fn.Name.Substring(13, j - 13)); - int idx = j == 13 ? 0 : int.Parse(fn.Name.Substring(j + 7)); - foreach (var tpl in fn.Apps) { - var elt = tpl.Args[0]; - var len = tpl.Result; - Model.Element[] ar; - if (!ArrayLengths.TryGetValue(elt, out ar)) { - ar = new Model.Element[dims]; - ArrayLengths.Add(elt, ar); - } - Contract.Assert(ar[idx] == null); - ar[idx] = len; - } - } else if (fn.Name.StartsWith("#") && fn.Name.IndexOf('.') != -1 && fn.Name[1] != '#') { - foreach (var tpl in fn.Apps) { - var elt = tpl.Result; - DatatypeValues.Add(elt, tpl); - } - } - } - } - - internal void FinishStates() - { - GenerateSourceLocations(states); - } - - public override IEnumerable States - { - get { return states; } - } - - public string GetUserVariableName(string name) - { - if (name.StartsWith("$")) // this covers $Heap and $_Frame and $nw... - return null; - if (name.Contains("##")) // a temporary variable of the translation - return null; -#if SOMETIME_AGAIN - var hash = name.IndexOf('#'); - if (0 < hash) - return name.Substring(0, hash); -#endif - return name; - } - - public Model.Element Image(Model.Element elt, Model.Func f) - { - var r = f.AppWithResult(elt); - if (r != null) - return r.Args[0]; - return null; - } - - protected override string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff) - { - Model.FuncTuple fnTuple; - suff = NameSeqSuffix.WhenNonZero; - if (DatatypeValues.TryGetValue(elt, out fnTuple)) { - // elt is s a datatype value, make its name be the name of the datatype constructor - string nm = fnTuple.Func.Name; - if (fnTuple.Func.Arity == 0) - return nm; - else - return nm + "(...)"; - } - var seqLen = f_seq_length.AppWithArg(0, elt); - if (seqLen != null) { - // elt is a sequence - return string.Format("[Length {0}]", seqLen.Result.AsInt()); - } - - if (elt == f_null.GetConstant()) - return "null"; - - var tp = f_dtype.TryEval(elt); - if (tp != null) { - foreach (var app in tp.References) { - if (app.Args.Length == 0 && app.Func.Name.StartsWith("class.")) { - suff = NameSeqSuffix.Always; - return app.Func.Name.Substring(6); - } - } - } - - return base.CanonicalBaseName(elt, out suff); - } - - public IEnumerable GetExpansion(StateNode state, Model.Element elt) - { - List result = new List(); - - if (elt.Kind != Model.ElementKind.Uninterpreted) - return result; - - // Perhaps elt is a known datatype value - Model.FuncTuple fnTuple; - if (DatatypeValues.TryGetValue(elt, out fnTuple)) { - // elt is a datatype value - int i = 0; - foreach (var arg in fnTuple.Args) { - var edgname = new EdgeName(this, i.ToString()); - result.Add(new FieldNode(state, edgname, arg)); - i++; - } - return result; - } - - // Perhaps elt is a sequence - var seqLen = f_seq_length.AppWithArg(0, elt); - if (seqLen != null) { - // elt is a sequence - foreach (var tpl in f_seq_index.AppsWithArg(0, elt)) { - var edgname = new EdgeName(this, "[%0]", tpl.Args[1]); - result.Add(new FieldNode(state, edgname, Unbox(tpl.Result))); - } - return result; - } - - // Perhaps elt is a set - foreach (var tpl in f_set_select.AppsWithArg(0, elt)) { - var setElement = tpl.Args[1]; - var containment = tpl.Result; - var edgname = new EdgeName(this, "[%0]", Unbox(setElement)); - result.Add(new FieldNode(state, edgname, containment)); - } - if (result.Count != 0) - return result; // elt is a set - - // It seems elt is an object or array - Model.Element[] lengths; - if (ArrayLengths.TryGetValue(elt, out lengths)) { - int i = 0; - foreach (var len in lengths) { - var name = lengths.Length == 1 ? "Length" : "Length" + i; - var edgname = new EdgeName(this, name); - result.Add(new FieldNode(state, edgname, len)); - i++; - } - } - var heap = state.State.TryGet("$Heap"); - if (heap != null) { - foreach (var tpl in f_heap_select.AppsWithArgs(0, heap, 1, elt)) { - var field = new FieldName(tpl.Args[2], this); - if (field.NameFormat != "alloc") { - var edgname = new EdgeName(this, field.NameFormat, field.NameArgs); - result.Add(new FieldNode(state, edgname, Unbox(tpl.Result))); - } - } - } - return result; - } - - class FieldName - { - public readonly Model.Element Field; - public readonly int Dims; - public readonly string NameFormat; - public readonly Model.Element[] NameArgs; - - public FieldName(Model.Element elt, DafnyModel dm) { - Field = elt; - NameArgs = new Model.Element[Dims]; - var tpl = dm.f_dim.AppWithArg(0, elt); - if (tpl != null) { - Dims = tpl.Result.AsInt(); - NameArgs = new Model.Element[Dims]; - for (int i = Dims; 0 <= --i; ) { - if (i == 0) { - tpl = dm.f_index_field.AppWithResult(elt); - NameArgs[i] = tpl.Args[0]; - } else { - tpl = dm.f_multi_index_field.AppWithResult(elt); - NameArgs[i] = tpl.Args[1]; - elt = tpl.Args[0]; - } - } - } - // now for the name - if (Dims == 0) { - NameFormat = Field.ToString(); - foreach (var n in Field.Names) { - NameFormat = n.Func.Name; - int dot = NameFormat.LastIndexOf('.'); - if (0 <= dot) - NameFormat = NameFormat.Substring(dot + 1); - break; - } - } else { - NameFormat = "["; - string sep = ""; - for (int i = 0; i < Dims; i++) { - NameFormat += sep + "%" + i; - sep = ","; - } - NameFormat += "]"; - } - } - } - - Model.Element Unbox(Model.Element elt) { - var unboxed = f_box.AppWithResult(elt); - if (unboxed != null) - return unboxed.Args[0]; - else - return elt; - } - } - - public class StateNode : NamedState - { - internal readonly DafnyModel dm; - public readonly List Vars = new List(); - internal readonly List skolems; - internal readonly int index; - - public StateNode(int i, DafnyModel parent, Model.CapturedState s) - : base(s, parent) - { - dm = parent; - state = s; - index = i; - - skolems = new List(SkolemVars()); - SetupVars(); - } - - void SetupVars() - { - var names = Util.Empty(); - - if (dm.states.Count > 0) { - var prev = dm.states.Last(); - names = prev.Vars.Map(v => v.realName); - } - - names = names.Concat(state.Variables).Distinct(); - - var curVars = state.Variables.ToDictionary(x => x); - foreach (var v in names) { - if (dm.GetUserVariableName(v) != null) { - var val = state.TryGet(v); - var shortName = Regex.Replace(v, @"#\d+$", ""); - var vn = new VariableNode(this, v, val, names.Any(n => n != v && Regex.Replace(n, @"#\d+$", "") == shortName) ? v : shortName); - vn.updatedHere = dm.states.Count > 0 && curVars.ContainsKey(v); - if (curVars.ContainsKey(v)) - dm.RegisterLocalValue(vn.Name, val); - Vars.Add(vn); - } - } - - dm.Flush(Nodes); - } - - IEnumerable SkolemVars() { - foreach (var f in dm.model.Functions) { - if (f.Arity != 0) continue; - int n = f.Name.IndexOf('!'); - if (n == -1) continue; - string name = f.Name.Substring(0, n); - if (!name.Contains('#')) continue; - yield return new VariableNode(this, name, f.GetConstant(), name); - } - } - - public override IEnumerable Nodes - { - get { - return Vars.Concat(skolems); - } - } - } - - public class ElementNode : DisplayNode - { - protected StateNode stateNode; - protected Model.Element elt; - protected DafnyModel vm { get { return stateNode.dm; } } - - public ElementNode(StateNode st, EdgeName name, Model.Element elt) - : base(st.dm, name, elt) - { - this.stateNode = st; - this.elt = elt; - } - - public ElementNode(StateNode st, string name, Model.Element elt) - : this(st, new EdgeName(name), elt) { } - - protected override void ComputeChildren() - { - children.AddRange(vm.GetExpansion(stateNode, elt)); - } - } - - class FieldNode : ElementNode - { - public FieldNode(StateNode par, EdgeName realName, Model.Element elt) - : base(par, realName, elt) - { - /* - var idx = realName.LastIndexOf('.'); - if (idx > 0) - name = realName.Substring(idx + 1); - */ - } - } - - class MapletNode : ElementNode - { - public MapletNode(StateNode par, EdgeName realName, Model.Element elt) - : base(par, realName, elt) - { - } - } - - public class VariableNode : ElementNode - { - public bool updatedHere; - public string realName; - - public VariableNode(StateNode par, string realName, Model.Element elt, string shortName) - : base(par, realName, elt) - { - this.realName = realName; - name = new EdgeName(vm.GetUserVariableName(realName)); - ShortName = shortName; - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Diagnostics.Contracts; + +namespace Microsoft.Boogie.ModelViewer.Dafny +{ + public class Provider : ILanguageProvider + { + public static Provider Instance = new Provider(); + private Provider() { } + + public bool IsMyModel(Model m) + { + return m.TryGetFunc("$$Language$Dafny") != null; + } + + public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) + { + var dm = new DafnyModel(m, opts); + foreach (var s in m.States) { + var sn = new StateNode(dm.states.Count, dm, s); + dm.states.Add(sn); + } + dm.FinishStates(); + return dm; + } + } + + public class DafnyModel : LanguageModel + { + public readonly Model.Func f_heap_select, f_set_select, f_seq_length, f_seq_index, f_box, f_dim, f_index_field, f_multi_index_field, f_dtype, f_null; + public readonly Dictionary ArrayLengths = new Dictionary(); + public readonly Dictionary DatatypeValues = new Dictionary(); + Dictionary typeName = new Dictionary(); + public List states = new List(); + + public DafnyModel(Model m, ViewOptions opts) + : base(m, opts) + { + f_heap_select = m.MkFunc("[3]", 3); + f_set_select = m.MkFunc("[2]", 2); + f_seq_length = m.MkFunc("Seq#Length", 1); + f_seq_index = m.MkFunc("Seq#Index", 2); + f_box = m.MkFunc("$Box", 1); + f_dim = m.MkFunc("FDim", 1); + f_index_field = m.MkFunc("IndexField", 1); + f_multi_index_field = m.MkFunc("MultiIndexField", 2); + f_dtype = m.MkFunc("dtype", 1); + f_null = m.MkFunc("null", 0); + + // collect the array dimensions from the various array.Length functions, and + // collect all known datatype values + foreach (var fn in m.Functions) { + if (Regex.IsMatch(fn.Name, "^_System.array[0-9]*.Length[0-9]*$")) { + int j = fn.Name.IndexOf('.', 13); + int dims = j == 13 ? 1 : int.Parse(fn.Name.Substring(13, j - 13)); + int idx = j == 13 ? 0 : int.Parse(fn.Name.Substring(j + 7)); + foreach (var tpl in fn.Apps) { + var elt = tpl.Args[0]; + var len = tpl.Result; + Model.Element[] ar; + if (!ArrayLengths.TryGetValue(elt, out ar)) { + ar = new Model.Element[dims]; + ArrayLengths.Add(elt, ar); + } + Contract.Assert(ar[idx] == null); + ar[idx] = len; + } + } else if (fn.Name.StartsWith("#") && fn.Name.IndexOf('.') != -1 && fn.Name[1] != '#') { + foreach (var tpl in fn.Apps) { + var elt = tpl.Result; + DatatypeValues.Add(elt, tpl); + } + } + } + } + + internal void FinishStates() + { + GenerateSourceLocations(states); + } + + public override IEnumerable States + { + get { return states; } + } + + public string GetUserVariableName(string name) + { + if (name.StartsWith("$")) // this covers $Heap and $_Frame and $nw... + return null; + if (name.Contains("##")) // a temporary variable of the translation + return null; +#if SOMETIME_AGAIN + var hash = name.IndexOf('#'); + if (0 < hash) + return name.Substring(0, hash); +#endif + return name; + } + + public Model.Element Image(Model.Element elt, Model.Func f) + { + var r = f.AppWithResult(elt); + if (r != null) + return r.Args[0]; + return null; + } + + protected override string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff) + { + Model.FuncTuple fnTuple; + suff = NameSeqSuffix.WhenNonZero; + if (DatatypeValues.TryGetValue(elt, out fnTuple)) { + // elt is s a datatype value, make its name be the name of the datatype constructor + string nm = fnTuple.Func.Name; + if (fnTuple.Func.Arity == 0) + return nm; + else + return nm + "(...)"; + } + var seqLen = f_seq_length.AppWithArg(0, elt); + if (seqLen != null) { + // elt is a sequence + return string.Format("[Length {0}]", seqLen.Result.AsInt()); + } + + if (elt == f_null.GetConstant()) + return "null"; + + var tp = f_dtype.TryEval(elt); + if (tp != null) { + foreach (var app in tp.References) { + if (app.Args.Length == 0 && app.Func.Name.StartsWith("class.")) { + suff = NameSeqSuffix.Always; + return app.Func.Name.Substring(6); + } + } + } + + return base.CanonicalBaseName(elt, out suff); + } + + public IEnumerable GetExpansion(StateNode state, Model.Element elt) + { + List result = new List(); + + if (elt.Kind != Model.ElementKind.Uninterpreted) + return result; + + // Perhaps elt is a known datatype value + Model.FuncTuple fnTuple; + if (DatatypeValues.TryGetValue(elt, out fnTuple)) { + // elt is a datatype value + int i = 0; + foreach (var arg in fnTuple.Args) { + var edgname = new EdgeName(this, i.ToString()); + result.Add(new FieldNode(state, edgname, arg)); + i++; + } + return result; + } + + // Perhaps elt is a sequence + var seqLen = f_seq_length.AppWithArg(0, elt); + if (seqLen != null) { + // elt is a sequence + foreach (var tpl in f_seq_index.AppsWithArg(0, elt)) { + var edgname = new EdgeName(this, "[%0]", tpl.Args[1]); + result.Add(new FieldNode(state, edgname, Unbox(tpl.Result))); + } + return result; + } + + // Perhaps elt is a set + foreach (var tpl in f_set_select.AppsWithArg(0, elt)) { + var setElement = tpl.Args[1]; + var containment = tpl.Result; + var edgname = new EdgeName(this, "[%0]", Unbox(setElement)); + result.Add(new FieldNode(state, edgname, containment)); + } + if (result.Count != 0) + return result; // elt is a set + + // It seems elt is an object or array + Model.Element[] lengths; + if (ArrayLengths.TryGetValue(elt, out lengths)) { + int i = 0; + foreach (var len in lengths) { + var name = lengths.Length == 1 ? "Length" : "Length" + i; + var edgname = new EdgeName(this, name); + result.Add(new FieldNode(state, edgname, len)); + i++; + } + } + var heap = state.State.TryGet("$Heap"); + if (heap != null) { + foreach (var tpl in f_heap_select.AppsWithArgs(0, heap, 1, elt)) { + var field = new FieldName(tpl.Args[2], this); + if (field.NameFormat != "alloc") { + var edgname = new EdgeName(this, field.NameFormat, field.NameArgs); + result.Add(new FieldNode(state, edgname, Unbox(tpl.Result))); + } + } + } + return result; + } + + class FieldName + { + public readonly Model.Element Field; + public readonly int Dims; + public readonly string NameFormat; + public readonly Model.Element[] NameArgs; + + public FieldName(Model.Element elt, DafnyModel dm) { + Field = elt; + NameArgs = new Model.Element[Dims]; + var tpl = dm.f_dim.AppWithArg(0, elt); + if (tpl != null) { + Dims = tpl.Result.AsInt(); + NameArgs = new Model.Element[Dims]; + for (int i = Dims; 0 <= --i; ) { + if (i == 0) { + tpl = dm.f_index_field.AppWithResult(elt); + NameArgs[i] = tpl.Args[0]; + } else { + tpl = dm.f_multi_index_field.AppWithResult(elt); + NameArgs[i] = tpl.Args[1]; + elt = tpl.Args[0]; + } + } + } + // now for the name + if (Dims == 0) { + NameFormat = Field.ToString(); + foreach (var n in Field.Names) { + NameFormat = n.Func.Name; + int dot = NameFormat.LastIndexOf('.'); + if (0 <= dot) + NameFormat = NameFormat.Substring(dot + 1); + break; + } + } else { + NameFormat = "["; + string sep = ""; + for (int i = 0; i < Dims; i++) { + NameFormat += sep + "%" + i; + sep = ","; + } + NameFormat += "]"; + } + } + } + + Model.Element Unbox(Model.Element elt) { + var unboxed = f_box.AppWithResult(elt); + if (unboxed != null) + return unboxed.Args[0]; + else + return elt; + } + } + + public class StateNode : NamedState + { + internal readonly DafnyModel dm; + public readonly List Vars = new List(); + internal readonly List skolems; + internal readonly int index; + + public StateNode(int i, DafnyModel parent, Model.CapturedState s) + : base(s, parent) + { + dm = parent; + state = s; + index = i; + + skolems = new List(SkolemVars()); + SetupVars(); + } + + void SetupVars() + { + var names = Util.Empty(); + + if (dm.states.Count > 0) { + var prev = dm.states.Last(); + names = prev.Vars.Map(v => v.realName); + } + + names = names.Concat(state.Variables).Distinct(); + + var curVars = state.Variables.ToDictionary(x => x); + foreach (var v in names) { + if (dm.GetUserVariableName(v) != null) { + var val = state.TryGet(v); + var shortName = Regex.Replace(v, @"#\d+$", ""); + var vn = new VariableNode(this, v, val, names.Any(n => n != v && Regex.Replace(n, @"#\d+$", "") == shortName) ? v : shortName); + vn.updatedHere = dm.states.Count > 0 && curVars.ContainsKey(v); + if (curVars.ContainsKey(v)) + dm.RegisterLocalValue(vn.Name, val); + Vars.Add(vn); + } + } + + dm.Flush(Nodes); + } + + IEnumerable SkolemVars() { + foreach (var f in dm.model.Functions) { + if (f.Arity != 0) continue; + int n = f.Name.IndexOf('!'); + if (n == -1) continue; + string name = f.Name.Substring(0, n); + if (!name.Contains('#')) continue; + yield return new VariableNode(this, name, f.GetConstant(), name); + } + } + + public override IEnumerable Nodes + { + get { + return Vars.Concat(skolems); + } + } + } + + public class ElementNode : DisplayNode + { + protected StateNode stateNode; + protected Model.Element elt; + protected DafnyModel vm { get { return stateNode.dm; } } + + public ElementNode(StateNode st, EdgeName name, Model.Element elt) + : base(st.dm, name, elt) + { + this.stateNode = st; + this.elt = elt; + } + + public ElementNode(StateNode st, string name, Model.Element elt) + : this(st, new EdgeName(name), elt) { } + + protected override void ComputeChildren() + { + children.AddRange(vm.GetExpansion(stateNode, elt)); + } + } + + class FieldNode : ElementNode + { + public FieldNode(StateNode par, EdgeName realName, Model.Element elt) + : base(par, realName, elt) + { + /* + var idx = realName.LastIndexOf('.'); + if (idx > 0) + name = realName.Substring(idx + 1); + */ + } + } + + class MapletNode : ElementNode + { + public MapletNode(StateNode par, EdgeName realName, Model.Element elt) + : base(par, realName, elt) + { + } + } + + public class VariableNode : ElementNode + { + public bool updatedHere; + public string realName; + + public VariableNode(StateNode par, string realName, Model.Element elt, string shortName) + : base(par, realName, elt) + { + this.realName = realName; + name = new EdgeName(vm.GetUserVariableName(realName)); + ShortName = shortName; + } + } +} diff --git a/Source/ModelViewer/DataModel.cs b/Source/ModelViewer/DataModel.cs index 0b54e689..3820a6ab 100644 --- a/Source/ModelViewer/DataModel.cs +++ b/Source/ModelViewer/DataModel.cs @@ -1,297 +1,297 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Microsoft.Boogie.ModelViewer -{ - public class ViewOptions - { - // 0 - Normal - // 1 - Expert - // 2 - Everything - // 3 - Include the kitchen sink - public int ViewLevel = 1; - public bool DebugMode; - } - - // sync with Main.categoryBrushes! - public enum NodeCategory - { - Local, - PhysField, - SpecField, - MethodologyProperty, - UserFunction, - Maplet - } - - public interface ILanguageProvider - { - bool IsMyModel(Model m); - ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts); - } - - public interface ILanguageSpecificModel - { - string CanonicalName(Model.Element elt); - - Model.Element FindElement(string canonicalName); - - string PathName(IEnumerable path); - - IEnumerable States { get; } - - // This function is given IDisplayNode possibly from different states. - IEnumerable SortFields(IEnumerable fields); - } - - public class SourceViewState - { - public string Header; - public string RichTextContent; - public int Location; - } - - public interface IState - { - string Name { get; } - SourceViewState ShowSource(); - IEnumerable Nodes { get; } - } - - public interface IDisplayNode - { - /// - /// Used for indexing the state tree. - /// - string Name { get; } - - string ShortName { get; } - - NodeCategory Category { get; } - string Value { get; } - string ToolTip { get; } - - int ViewLevel { get; } - - /// - /// Used to determine aliasing. Can be null. - /// - Model.Element Element { get; } - - IEnumerable References { get; } - - IEnumerable Children { get; } - - object ViewSync { get; set; } - } - - - public class TopState : IState - { - protected IDisplayNode[] children; - protected string name; - - public TopState(string name, IEnumerable nodes) - { - this.name = name; - children = nodes.ToArray(); - } - - public string Name - { - get { return name; } - } - - public IEnumerable Nodes - { - get { return children; } - } - - - public SourceViewState ShowSource() - { - return null; - } - - } - - public abstract class DisplayNode : IDisplayNode - { - protected EdgeName name; - protected Model.Element element; - protected ILanguageSpecificModel langModel; - protected List children; - - public DisplayNode(ILanguageSpecificModel model, string n, Model.Element elt) - : this(model, new EdgeName(n), elt) {} - - public DisplayNode(ILanguageSpecificModel model, EdgeName n, Model.Element elt) - { - langModel = model; - name = n; - element = elt; - } - - public virtual string ToolTip - { - get { return null; } - } - - public virtual int ViewLevel { get; set; } - public virtual NodeCategory Category { get; set; } - - public virtual IEnumerable Children - { - get - { - if (children == null) { - children = new List(); - ComputeChildren(); - } - return children; - } - } - - protected virtual void ComputeChildren() - { - } - - public object ViewSync { get; set; } - - public virtual string Name - { - get { return name.ToString(); } - } - - private string shortName; - - public virtual string ShortName - { - get - { - if (shortName != null) - { - return shortName; - } - else - { - return name.ToString(); - } - } - set - { - shortName = value; - } - } - - public virtual Model.Element Element - { - get { return element; } - } - - public virtual string Value - { - get - { - if (element == null) - return ""; - return langModel.CanonicalName(element); - } - } - - public virtual IEnumerable References - { - get - { - foreach (var r in name.Dependencies) - yield return r; - if (element != null) - yield return element; - } - } - } - - public class ContainerNode : DisplayNode - { - protected Func convert; - protected IEnumerable data; - - public ContainerNode(EdgeName name, Func convert, IEnumerable data) : base(null, name, null) - { - this.convert = convert; - this.data = data; - } - - public ContainerNode(string name, Func convert, IEnumerable data) - : this(new EdgeName(name), convert, data) - { - } - - protected override void ComputeChildren() - { - foreach (var f in data) { - var res = convert(f); - if (res != null) - children.Add(res); - } - } - } - - - public static class Util - { - public static void Assert(bool cond) - { - if (!cond) throw new System.Exception("assertion violation"); - } - - public static string Concat(this IEnumerable strs, string sep) - { - var res = new StringBuilder(); - foreach (var e in strs) - res.Append(e).Append(sep); - if (res.Length > 0) - res.Length -= sep.Length; - return res.ToString(); - } - - public static IEnumerable Empty() { yield break; } - - public static IEnumerable Singleton(T e) { yield return e; } - - public static IEnumerable Concat1(this IEnumerable s, T e) { return s.Concat(Singleton(e)); } - - public static IEnumerable Map(this IEnumerable inp, Func conv) - { - foreach (var s in inp) yield return conv(s); - } - - public static void Iter(this IEnumerable inp, Action fn) - { - foreach (var s in inp) fn(s); - } - - public static void AddRange(this HashSet st, IEnumerable elts) - { - foreach (var e in elts) st.Add(e); - } - - public static T OrElse(T a, T b) - where T : class - { - if (a != null) return a; - return b; - } - - public static S GetWithDefault(this Dictionary dict, T key, S defl) - { - S r; - if (dict.TryGetValue(key, out r)) - return r; - return defl; - } - } - -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.Boogie.ModelViewer +{ + public class ViewOptions + { + // 0 - Normal + // 1 - Expert + // 2 - Everything + // 3 - Include the kitchen sink + public int ViewLevel = 1; + public bool DebugMode; + } + + // sync with Main.categoryBrushes! + public enum NodeCategory + { + Local, + PhysField, + SpecField, + MethodologyProperty, + UserFunction, + Maplet + } + + public interface ILanguageProvider + { + bool IsMyModel(Model m); + ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts); + } + + public interface ILanguageSpecificModel + { + string CanonicalName(Model.Element elt); + + Model.Element FindElement(string canonicalName); + + string PathName(IEnumerable path); + + IEnumerable States { get; } + + // This function is given IDisplayNode possibly from different states. + IEnumerable SortFields(IEnumerable fields); + } + + public class SourceViewState + { + public string Header; + public string RichTextContent; + public int Location; + } + + public interface IState + { + string Name { get; } + SourceViewState ShowSource(); + IEnumerable Nodes { get; } + } + + public interface IDisplayNode + { + /// + /// Used for indexing the state tree. + /// + string Name { get; } + + string ShortName { get; } + + NodeCategory Category { get; } + string Value { get; } + string ToolTip { get; } + + int ViewLevel { get; } + + /// + /// Used to determine aliasing. Can be null. + /// + Model.Element Element { get; } + + IEnumerable References { get; } + + IEnumerable Children { get; } + + object ViewSync { get; set; } + } + + + public class TopState : IState + { + protected IDisplayNode[] children; + protected string name; + + public TopState(string name, IEnumerable nodes) + { + this.name = name; + children = nodes.ToArray(); + } + + public string Name + { + get { return name; } + } + + public IEnumerable Nodes + { + get { return children; } + } + + + public SourceViewState ShowSource() + { + return null; + } + + } + + public abstract class DisplayNode : IDisplayNode + { + protected EdgeName name; + protected Model.Element element; + protected ILanguageSpecificModel langModel; + protected List children; + + public DisplayNode(ILanguageSpecificModel model, string n, Model.Element elt) + : this(model, new EdgeName(n), elt) {} + + public DisplayNode(ILanguageSpecificModel model, EdgeName n, Model.Element elt) + { + langModel = model; + name = n; + element = elt; + } + + public virtual string ToolTip + { + get { return null; } + } + + public virtual int ViewLevel { get; set; } + public virtual NodeCategory Category { get; set; } + + public virtual IEnumerable Children + { + get + { + if (children == null) { + children = new List(); + ComputeChildren(); + } + return children; + } + } + + protected virtual void ComputeChildren() + { + } + + public object ViewSync { get; set; } + + public virtual string Name + { + get { return name.ToString(); } + } + + private string shortName; + + public virtual string ShortName + { + get + { + if (shortName != null) + { + return shortName; + } + else + { + return name.ToString(); + } + } + set + { + shortName = value; + } + } + + public virtual Model.Element Element + { + get { return element; } + } + + public virtual string Value + { + get + { + if (element == null) + return ""; + return langModel.CanonicalName(element); + } + } + + public virtual IEnumerable References + { + get + { + foreach (var r in name.Dependencies) + yield return r; + if (element != null) + yield return element; + } + } + } + + public class ContainerNode : DisplayNode + { + protected Func convert; + protected IEnumerable data; + + public ContainerNode(EdgeName name, Func convert, IEnumerable data) : base(null, name, null) + { + this.convert = convert; + this.data = data; + } + + public ContainerNode(string name, Func convert, IEnumerable data) + : this(new EdgeName(name), convert, data) + { + } + + protected override void ComputeChildren() + { + foreach (var f in data) { + var res = convert(f); + if (res != null) + children.Add(res); + } + } + } + + + public static class Util + { + public static void Assert(bool cond) + { + if (!cond) throw new System.Exception("assertion violation"); + } + + public static string Concat(this IEnumerable strs, string sep) + { + var res = new StringBuilder(); + foreach (var e in strs) + res.Append(e).Append(sep); + if (res.Length > 0) + res.Length -= sep.Length; + return res.ToString(); + } + + public static IEnumerable Empty() { yield break; } + + public static IEnumerable Singleton(T e) { yield return e; } + + public static IEnumerable Concat1(this IEnumerable s, T e) { return s.Concat(Singleton(e)); } + + public static IEnumerable Map(this IEnumerable inp, Func conv) + { + foreach (var s in inp) yield return conv(s); + } + + public static void Iter(this IEnumerable inp, Action fn) + { + foreach (var s in inp) fn(s); + } + + public static void AddRange(this HashSet st, IEnumerable elts) + { + foreach (var e in elts) st.Add(e); + } + + public static T OrElse(T a, T b) + where T : class + { + if (a != null) return a; + return b; + } + + public static S GetWithDefault(this Dictionary dict, T key, S defl) + { + S r; + if (dict.TryGetValue(key, out r)) + return r; + return defl; + } + } + +} diff --git a/Source/ModelViewer/Main.Designer.cs b/Source/ModelViewer/Main.Designer.cs index a58e7354..be15f3c6 100644 --- a/Source/ModelViewer/Main.Designer.cs +++ b/Source/ModelViewer/Main.Designer.cs @@ -1,499 +1,499 @@ -namespace Microsoft.Boogie.ModelViewer -{ - partial class Main - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); - this.currentStateView = new System.Windows.Forms.ListView(); - this.name = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.value = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.prevValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.stateViewMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.dummyItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.splitContainer2 = new System.Windows.Forms.SplitContainer(); - this.matchesList = new System.Windows.Forms.ListView(); - this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.label1 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.stateList = new System.Windows.Forms.ListView(); - this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.showSourceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.menuStrip1 = new System.Windows.Forms.MenuStrip(); - this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openModelMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.reloadModelFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.normalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.expertToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.everythingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.includeTheKitchenSinkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); - this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.largeFontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.modelsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openModelFileDialog = new System.Windows.Forms.OpenFileDialog(); - this.stateViewMenu.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); - this.splitContainer1.Panel1.SuspendLayout(); - this.splitContainer1.Panel2.SuspendLayout(); - this.splitContainer1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); - this.splitContainer2.Panel1.SuspendLayout(); - this.splitContainer2.Panel2.SuspendLayout(); - this.splitContainer2.SuspendLayout(); - this.contextMenuStrip1.SuspendLayout(); - this.menuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // currentStateView - // - this.currentStateView.BackColor = System.Drawing.SystemColors.Window; - this.currentStateView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.name, - this.value, - this.prevValue}); - this.currentStateView.ContextMenuStrip = this.stateViewMenu; - this.currentStateView.Dock = System.Windows.Forms.DockStyle.Fill; - this.currentStateView.FullRowSelect = true; - this.currentStateView.GridLines = true; - this.currentStateView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; - this.currentStateView.Location = new System.Drawing.Point(0, 0); - this.currentStateView.MultiSelect = false; - this.currentStateView.Name = "currentStateView"; - this.currentStateView.OwnerDraw = true; - this.currentStateView.ShowItemToolTips = true; - this.currentStateView.Size = new System.Drawing.Size(596, 344); - this.currentStateView.TabIndex = 0; - this.currentStateView.UseCompatibleStateImageBehavior = false; - this.currentStateView.View = System.Windows.Forms.View.Details; - this.currentStateView.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.listView1_ColumnWidthChanged); - this.currentStateView.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader); - this.currentStateView.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem); - this.currentStateView.SelectedIndexChanged += new System.EventHandler(this.currentStateView_SelectedIndexChanged); - this.currentStateView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.currentStateView_KeyDown); - this.currentStateView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp); - this.currentStateView.Resize += new System.EventHandler(this.listView1_Resize); - // - // name - // - this.name.Text = "Name"; - this.name.Width = 298; - // - // value - // - this.value.Text = "Value"; - this.value.Width = 126; - // - // prevValue - // - this.prevValue.Text = "Previous"; - this.prevValue.Width = 100; - // - // stateViewMenu - // - this.stateViewMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.dummyItemToolStripMenuItem}); - this.stateViewMenu.Name = "stateViewMenu"; - this.stateViewMenu.Size = new System.Drawing.Size(145, 26); - this.stateViewMenu.Opening += new System.ComponentModel.CancelEventHandler(this.stateViewMenu_Opening); - // - // dummyItemToolStripMenuItem - // - this.dummyItemToolStripMenuItem.Name = "dummyItemToolStripMenuItem"; - this.dummyItemToolStripMenuItem.Size = new System.Drawing.Size(144, 22); - this.dummyItemToolStripMenuItem.Text = "Dummy item"; - // - // splitContainer1 - // - this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer1.Location = new System.Drawing.Point(0, 24); - this.splitContainer1.Name = "splitContainer1"; - // - // splitContainer1.Panel1 - // - this.splitContainer1.Panel1.Controls.Add(this.splitContainer2); - // - // splitContainer1.Panel2 - // - this.splitContainer1.Panel2.Controls.Add(this.stateList); - this.splitContainer1.Size = new System.Drawing.Size(915, 449); - this.splitContainer1.SplitterDistance = 596; - this.splitContainer1.TabIndex = 1; - // - // splitContainer2 - // - this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer2.Location = new System.Drawing.Point(0, 0); - this.splitContainer2.Name = "splitContainer2"; - this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // splitContainer2.Panel1 - // - this.splitContainer2.Panel1.Controls.Add(this.currentStateView); - // - // splitContainer2.Panel2 - // - this.splitContainer2.Panel2.Controls.Add(this.matchesList); - this.splitContainer2.Panel2.Controls.Add(this.linkLabel1); - this.splitContainer2.Panel2.Controls.Add(this.label1); - this.splitContainer2.Panel2.Controls.Add(this.textBox1); - this.splitContainer2.Size = new System.Drawing.Size(596, 449); - this.splitContainer2.SplitterDistance = 344; - this.splitContainer2.TabIndex = 1; - // - // matchesList - // - this.matchesList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.matchesList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader4, - this.columnHeader5}); - this.matchesList.FullRowSelect = true; - this.matchesList.GridLines = true; - this.matchesList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; - this.matchesList.Location = new System.Drawing.Point(0, 29); - this.matchesList.MultiSelect = false; - this.matchesList.Name = "matchesList"; - this.matchesList.OwnerDraw = true; - this.matchesList.ShowItemToolTips = true; - this.matchesList.Size = new System.Drawing.Size(596, 72); - this.matchesList.TabIndex = 4; - this.matchesList.UseCompatibleStateImageBehavior = false; - this.matchesList.View = System.Windows.Forms.View.Details; - this.matchesList.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.listView1_ColumnWidthChanged); - this.matchesList.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader); - this.matchesList.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem); - this.matchesList.DoubleClick += new System.EventHandler(this.matchesList_DoubleClick); - this.matchesList.Resize += new System.EventHandler(this.matchesList_Resize); - // - // columnHeader4 - // - this.columnHeader4.Text = "Name"; - this.columnHeader4.Width = 300; - // - // columnHeader5 - // - this.columnHeader5.Text = "Value"; - this.columnHeader5.Width = 250; - // - // linkLabel1 - // - this.linkLabel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.linkLabel1.AutoSize = true; - this.linkLabel1.Location = new System.Drawing.Point(536, 5); - this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Size = new System.Drawing.Size(57, 13); - this.linkLabel1.TabIndex = 3; - this.linkLabel1.TabStop = true; - this.linkLabel1.Text = "Show All..."; - this.linkLabel1.VisitedLinkColor = System.Drawing.Color.Blue; - this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(3, 5); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(44, 13); - this.label1.TabIndex = 2; - this.label1.Text = "Search:"; - // - // textBox1 - // - this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox1.Location = new System.Drawing.Point(53, 3); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(477, 20); - this.textBox1.TabIndex = 1; - this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); - // - // stateList - // - this.stateList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader3, - this.columnHeader1, - this.columnHeader2}); - this.stateList.ContextMenuStrip = this.contextMenuStrip1; - this.stateList.Dock = System.Windows.Forms.DockStyle.Fill; - this.stateList.FullRowSelect = true; - this.stateList.GridLines = true; - this.stateList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; - this.stateList.Location = new System.Drawing.Point(0, 0); - this.stateList.MultiSelect = false; - this.stateList.Name = "stateList"; - this.stateList.ShowItemToolTips = true; - this.stateList.Size = new System.Drawing.Size(315, 449); - this.stateList.TabIndex = 0; - this.stateList.UseCompatibleStateImageBehavior = false; - this.stateList.View = System.Windows.Forms.View.Details; - this.stateList.SelectedIndexChanged += new System.EventHandler(this.stateList_SelectedIndexChanged); - this.stateList.DoubleClick += new System.EventHandler(this.stateList_DoubleClick); - // - // columnHeader3 - // - this.columnHeader3.Text = "#"; - this.columnHeader3.Width = 22; - // - // columnHeader1 - // - this.columnHeader1.Text = "State"; - this.columnHeader1.Width = 169; - // - // columnHeader2 - // - this.columnHeader2.Text = "Value"; - this.columnHeader2.Width = 116; - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.showSourceToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(142, 26); - // - // showSourceToolStripMenuItem - // - this.showSourceToolStripMenuItem.Name = "showSourceToolStripMenuItem"; - this.showSourceToolStripMenuItem.Size = new System.Drawing.Size(141, 22); - this.showSourceToolStripMenuItem.Text = "Show source"; - this.showSourceToolStripMenuItem.Click += new System.EventHandler(this.showSourceToolStripMenuItem_Click); - // - // menuStrip1 - // - this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.fileToolStripMenuItem, - this.viewToolStripMenuItem, - this.modelsToolStripMenuItem}); - this.menuStrip1.Location = new System.Drawing.Point(0, 0); - this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Size = new System.Drawing.Size(915, 24); - this.menuStrip1.TabIndex = 1; - this.menuStrip1.Text = "menuStrip1"; - // - // fileToolStripMenuItem - // - this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.openModelMenuItem, - this.toolStripSeparator1, - this.reloadModelFileToolStripMenuItem, - this.exitToolStripMenuItem}); - this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - this.fileToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4))); - this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); - this.fileToolStripMenuItem.Text = "&File"; - // - // openModelMenuItem - // - this.openModelMenuItem.Name = "openModelMenuItem"; - this.openModelMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); - this.openModelMenuItem.Size = new System.Drawing.Size(211, 22); - this.openModelMenuItem.Text = "&Open model file..."; - this.openModelMenuItem.Click += new System.EventHandler(this.openModelMenuItem_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(208, 6); - // - // reloadModelFileToolStripMenuItem - // - this.reloadModelFileToolStripMenuItem.Name = "reloadModelFileToolStripMenuItem"; - this.reloadModelFileToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F5; - this.reloadModelFileToolStripMenuItem.Size = new System.Drawing.Size(211, 22); - this.reloadModelFileToolStripMenuItem.Text = "&Reload model file"; - this.reloadModelFileToolStripMenuItem.Click += new System.EventHandler(this.reloadModelFileToolStripMenuItem_Click); - // - // exitToolStripMenuItem - // - this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4))); - this.exitToolStripMenuItem.Size = new System.Drawing.Size(211, 22); - this.exitToolStripMenuItem.Text = "&Exit"; - this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); - // - // viewToolStripMenuItem - // - this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.normalToolStripMenuItem, - this.expertToolStripMenuItem, - this.everythingToolStripMenuItem, - this.includeTheKitchenSinkToolStripMenuItem, - this.toolStripMenuItem1, - this.debugToolStripMenuItem, - this.largeFontToolStripMenuItem}); - this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; - this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20); - this.viewToolStripMenuItem.Text = "&View"; - // - // normalToolStripMenuItem - // - this.normalToolStripMenuItem.Name = "normalToolStripMenuItem"; - this.normalToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); - this.normalToolStripMenuItem.Size = new System.Drawing.Size(240, 22); - this.normalToolStripMenuItem.Text = "&Normal"; - this.normalToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click); - // - // expertToolStripMenuItem - // - this.expertToolStripMenuItem.Checked = true; - this.expertToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; - this.expertToolStripMenuItem.Name = "expertToolStripMenuItem"; - this.expertToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); - this.expertToolStripMenuItem.Size = new System.Drawing.Size(240, 22); - this.expertToolStripMenuItem.Text = "E&xpert"; - this.expertToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click); - // - // everythingToolStripMenuItem - // - this.everythingToolStripMenuItem.Name = "everythingToolStripMenuItem"; - this.everythingToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E))); - this.everythingToolStripMenuItem.Size = new System.Drawing.Size(240, 22); - this.everythingToolStripMenuItem.Text = "&Everything"; - this.everythingToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click); - // - // includeTheKitchenSinkToolStripMenuItem - // - this.includeTheKitchenSinkToolStripMenuItem.Name = "includeTheKitchenSinkToolStripMenuItem"; - this.includeTheKitchenSinkToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.K))); - this.includeTheKitchenSinkToolStripMenuItem.Size = new System.Drawing.Size(240, 22); - this.includeTheKitchenSinkToolStripMenuItem.Text = "&Include the kitchen sink"; - this.includeTheKitchenSinkToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click); - // - // toolStripMenuItem1 - // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(237, 6); - // - // debugToolStripMenuItem - // - this.debugToolStripMenuItem.Name = "debugToolStripMenuItem"; - this.debugToolStripMenuItem.Size = new System.Drawing.Size(240, 22); - this.debugToolStripMenuItem.Text = "Debug"; - this.debugToolStripMenuItem.Click += new System.EventHandler(this.debugToolStripMenuItem_Click); - // - // largeFontToolStripMenuItem - // - this.largeFontToolStripMenuItem.Name = "largeFontToolStripMenuItem"; - this.largeFontToolStripMenuItem.Size = new System.Drawing.Size(240, 22); - this.largeFontToolStripMenuItem.Text = "Large font"; - this.largeFontToolStripMenuItem.Click += new System.EventHandler(this.largeFontToolStripMenuItem_Click); - // - // modelsToolStripMenuItem - // - this.modelsToolStripMenuItem.Name = "modelsToolStripMenuItem"; - this.modelsToolStripMenuItem.Size = new System.Drawing.Size(58, 20); - this.modelsToolStripMenuItem.Text = "&Models"; - // - // openModelFileDialog - // - this.openModelFileDialog.Filter = "Model files (*.model)|*.model|All files (*.*)|*.*"; - this.openModelFileDialog.Title = "Open model file"; - // - // Main - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(915, 473); - this.Controls.Add(this.splitContainer1); - this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "Main"; - this.Text = "Boogie Verification Debugger"; - this.Load += new System.EventHandler(this.Main_Load); - this.stateViewMenu.ResumeLayout(false); - this.splitContainer1.Panel1.ResumeLayout(false); - this.splitContainer1.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); - this.splitContainer1.ResumeLayout(false); - this.splitContainer2.Panel1.ResumeLayout(false); - this.splitContainer2.Panel2.ResumeLayout(false); - this.splitContainer2.Panel2.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); - this.splitContainer2.ResumeLayout(false); - this.contextMenuStrip1.ResumeLayout(false); - this.menuStrip1.ResumeLayout(false); - this.menuStrip1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.ListView currentStateView; - private System.Windows.Forms.ColumnHeader name; - private System.Windows.Forms.ColumnHeader value; - private System.Windows.Forms.SplitContainer splitContainer1; - private System.Windows.Forms.ListView stateList; - private System.Windows.Forms.ColumnHeader columnHeader1; - private System.Windows.Forms.ColumnHeader columnHeader2; - private System.Windows.Forms.ColumnHeader columnHeader3; - private System.Windows.Forms.ColumnHeader prevValue; - private System.Windows.Forms.SplitContainer splitContainer2; - private System.Windows.Forms.ListView matchesList; - private System.Windows.Forms.ColumnHeader columnHeader4; - private System.Windows.Forms.ColumnHeader columnHeader5; - private System.Windows.Forms.LinkLabel linkLabel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.ContextMenuStrip stateViewMenu; - private System.Windows.Forms.ToolStripMenuItem dummyItemToolStripMenuItem; - private System.Windows.Forms.MenuStrip menuStrip1; - private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem normalToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem expertToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem everythingToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem modelsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem includeTheKitchenSinkToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem reloadModelFileToolStripMenuItem; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem showSourceToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem openModelMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.OpenFileDialog openModelFileDialog; - private System.Windows.Forms.ToolStripMenuItem largeFontToolStripMenuItem; - - - } -} - +namespace Microsoft.Boogie.ModelViewer +{ + partial class Main + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); + this.currentStateView = new System.Windows.Forms.ListView(); + this.name = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.value = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.prevValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.stateViewMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.dummyItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.matchesList = new System.Windows.Forms.ListView(); + this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.stateList = new System.Windows.Forms.ListView(); + this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.showSourceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openModelMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.reloadModelFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.normalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.expertToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.everythingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.includeTheKitchenSinkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.largeFontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.modelsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openModelFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.stateViewMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // currentStateView + // + this.currentStateView.BackColor = System.Drawing.SystemColors.Window; + this.currentStateView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.name, + this.value, + this.prevValue}); + this.currentStateView.ContextMenuStrip = this.stateViewMenu; + this.currentStateView.Dock = System.Windows.Forms.DockStyle.Fill; + this.currentStateView.FullRowSelect = true; + this.currentStateView.GridLines = true; + this.currentStateView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.currentStateView.Location = new System.Drawing.Point(0, 0); + this.currentStateView.MultiSelect = false; + this.currentStateView.Name = "currentStateView"; + this.currentStateView.OwnerDraw = true; + this.currentStateView.ShowItemToolTips = true; + this.currentStateView.Size = new System.Drawing.Size(596, 344); + this.currentStateView.TabIndex = 0; + this.currentStateView.UseCompatibleStateImageBehavior = false; + this.currentStateView.View = System.Windows.Forms.View.Details; + this.currentStateView.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.listView1_ColumnWidthChanged); + this.currentStateView.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader); + this.currentStateView.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem); + this.currentStateView.SelectedIndexChanged += new System.EventHandler(this.currentStateView_SelectedIndexChanged); + this.currentStateView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.currentStateView_KeyDown); + this.currentStateView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp); + this.currentStateView.Resize += new System.EventHandler(this.listView1_Resize); + // + // name + // + this.name.Text = "Name"; + this.name.Width = 298; + // + // value + // + this.value.Text = "Value"; + this.value.Width = 126; + // + // prevValue + // + this.prevValue.Text = "Previous"; + this.prevValue.Width = 100; + // + // stateViewMenu + // + this.stateViewMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.dummyItemToolStripMenuItem}); + this.stateViewMenu.Name = "stateViewMenu"; + this.stateViewMenu.Size = new System.Drawing.Size(145, 26); + this.stateViewMenu.Opening += new System.ComponentModel.CancelEventHandler(this.stateViewMenu_Opening); + // + // dummyItemToolStripMenuItem + // + this.dummyItemToolStripMenuItem.Name = "dummyItemToolStripMenuItem"; + this.dummyItemToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.dummyItemToolStripMenuItem.Text = "Dummy item"; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 24); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.stateList); + this.splitContainer1.Size = new System.Drawing.Size(915, 449); + this.splitContainer1.SplitterDistance = 596; + this.splitContainer1.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.currentStateView); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.matchesList); + this.splitContainer2.Panel2.Controls.Add(this.linkLabel1); + this.splitContainer2.Panel2.Controls.Add(this.label1); + this.splitContainer2.Panel2.Controls.Add(this.textBox1); + this.splitContainer2.Size = new System.Drawing.Size(596, 449); + this.splitContainer2.SplitterDistance = 344; + this.splitContainer2.TabIndex = 1; + // + // matchesList + // + this.matchesList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.matchesList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader4, + this.columnHeader5}); + this.matchesList.FullRowSelect = true; + this.matchesList.GridLines = true; + this.matchesList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + this.matchesList.Location = new System.Drawing.Point(0, 29); + this.matchesList.MultiSelect = false; + this.matchesList.Name = "matchesList"; + this.matchesList.OwnerDraw = true; + this.matchesList.ShowItemToolTips = true; + this.matchesList.Size = new System.Drawing.Size(596, 72); + this.matchesList.TabIndex = 4; + this.matchesList.UseCompatibleStateImageBehavior = false; + this.matchesList.View = System.Windows.Forms.View.Details; + this.matchesList.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.listView1_ColumnWidthChanged); + this.matchesList.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader); + this.matchesList.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem); + this.matchesList.DoubleClick += new System.EventHandler(this.matchesList_DoubleClick); + this.matchesList.Resize += new System.EventHandler(this.matchesList_Resize); + // + // columnHeader4 + // + this.columnHeader4.Text = "Name"; + this.columnHeader4.Width = 300; + // + // columnHeader5 + // + this.columnHeader5.Text = "Value"; + this.columnHeader5.Width = 250; + // + // linkLabel1 + // + this.linkLabel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(536, 5); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(57, 13); + this.linkLabel1.TabIndex = 3; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "Show All..."; + this.linkLabel1.VisitedLinkColor = System.Drawing.Color.Blue; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 5); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(44, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Search:"; + // + // textBox1 + // + this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox1.Location = new System.Drawing.Point(53, 3); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(477, 20); + this.textBox1.TabIndex = 1; + this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); + // + // stateList + // + this.stateList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader3, + this.columnHeader1, + this.columnHeader2}); + this.stateList.ContextMenuStrip = this.contextMenuStrip1; + this.stateList.Dock = System.Windows.Forms.DockStyle.Fill; + this.stateList.FullRowSelect = true; + this.stateList.GridLines = true; + this.stateList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.stateList.Location = new System.Drawing.Point(0, 0); + this.stateList.MultiSelect = false; + this.stateList.Name = "stateList"; + this.stateList.ShowItemToolTips = true; + this.stateList.Size = new System.Drawing.Size(315, 449); + this.stateList.TabIndex = 0; + this.stateList.UseCompatibleStateImageBehavior = false; + this.stateList.View = System.Windows.Forms.View.Details; + this.stateList.SelectedIndexChanged += new System.EventHandler(this.stateList_SelectedIndexChanged); + this.stateList.DoubleClick += new System.EventHandler(this.stateList_DoubleClick); + // + // columnHeader3 + // + this.columnHeader3.Text = "#"; + this.columnHeader3.Width = 22; + // + // columnHeader1 + // + this.columnHeader1.Text = "State"; + this.columnHeader1.Width = 169; + // + // columnHeader2 + // + this.columnHeader2.Text = "Value"; + this.columnHeader2.Width = 116; + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.showSourceToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(142, 26); + // + // showSourceToolStripMenuItem + // + this.showSourceToolStripMenuItem.Name = "showSourceToolStripMenuItem"; + this.showSourceToolStripMenuItem.Size = new System.Drawing.Size(141, 22); + this.showSourceToolStripMenuItem.Text = "Show source"; + this.showSourceToolStripMenuItem.Click += new System.EventHandler(this.showSourceToolStripMenuItem_Click); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.viewToolStripMenuItem, + this.modelsToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(915, 24); + this.menuStrip1.TabIndex = 1; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.openModelMenuItem, + this.toolStripSeparator1, + this.reloadModelFileToolStripMenuItem, + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4))); + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // openModelMenuItem + // + this.openModelMenuItem.Name = "openModelMenuItem"; + this.openModelMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); + this.openModelMenuItem.Size = new System.Drawing.Size(211, 22); + this.openModelMenuItem.Text = "&Open model file..."; + this.openModelMenuItem.Click += new System.EventHandler(this.openModelMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(208, 6); + // + // reloadModelFileToolStripMenuItem + // + this.reloadModelFileToolStripMenuItem.Name = "reloadModelFileToolStripMenuItem"; + this.reloadModelFileToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F5; + this.reloadModelFileToolStripMenuItem.Size = new System.Drawing.Size(211, 22); + this.reloadModelFileToolStripMenuItem.Text = "&Reload model file"; + this.reloadModelFileToolStripMenuItem.Click += new System.EventHandler(this.reloadModelFileToolStripMenuItem_Click); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4))); + this.exitToolStripMenuItem.Size = new System.Drawing.Size(211, 22); + this.exitToolStripMenuItem.Text = "&Exit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); + // + // viewToolStripMenuItem + // + this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.normalToolStripMenuItem, + this.expertToolStripMenuItem, + this.everythingToolStripMenuItem, + this.includeTheKitchenSinkToolStripMenuItem, + this.toolStripMenuItem1, + this.debugToolStripMenuItem, + this.largeFontToolStripMenuItem}); + this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; + this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.viewToolStripMenuItem.Text = "&View"; + // + // normalToolStripMenuItem + // + this.normalToolStripMenuItem.Name = "normalToolStripMenuItem"; + this.normalToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); + this.normalToolStripMenuItem.Size = new System.Drawing.Size(240, 22); + this.normalToolStripMenuItem.Text = "&Normal"; + this.normalToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click); + // + // expertToolStripMenuItem + // + this.expertToolStripMenuItem.Checked = true; + this.expertToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.expertToolStripMenuItem.Name = "expertToolStripMenuItem"; + this.expertToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); + this.expertToolStripMenuItem.Size = new System.Drawing.Size(240, 22); + this.expertToolStripMenuItem.Text = "E&xpert"; + this.expertToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click); + // + // everythingToolStripMenuItem + // + this.everythingToolStripMenuItem.Name = "everythingToolStripMenuItem"; + this.everythingToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E))); + this.everythingToolStripMenuItem.Size = new System.Drawing.Size(240, 22); + this.everythingToolStripMenuItem.Text = "&Everything"; + this.everythingToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click); + // + // includeTheKitchenSinkToolStripMenuItem + // + this.includeTheKitchenSinkToolStripMenuItem.Name = "includeTheKitchenSinkToolStripMenuItem"; + this.includeTheKitchenSinkToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.K))); + this.includeTheKitchenSinkToolStripMenuItem.Size = new System.Drawing.Size(240, 22); + this.includeTheKitchenSinkToolStripMenuItem.Text = "&Include the kitchen sink"; + this.includeTheKitchenSinkToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(237, 6); + // + // debugToolStripMenuItem + // + this.debugToolStripMenuItem.Name = "debugToolStripMenuItem"; + this.debugToolStripMenuItem.Size = new System.Drawing.Size(240, 22); + this.debugToolStripMenuItem.Text = "Debug"; + this.debugToolStripMenuItem.Click += new System.EventHandler(this.debugToolStripMenuItem_Click); + // + // largeFontToolStripMenuItem + // + this.largeFontToolStripMenuItem.Name = "largeFontToolStripMenuItem"; + this.largeFontToolStripMenuItem.Size = new System.Drawing.Size(240, 22); + this.largeFontToolStripMenuItem.Text = "Large font"; + this.largeFontToolStripMenuItem.Click += new System.EventHandler(this.largeFontToolStripMenuItem_Click); + // + // modelsToolStripMenuItem + // + this.modelsToolStripMenuItem.Name = "modelsToolStripMenuItem"; + this.modelsToolStripMenuItem.Size = new System.Drawing.Size(58, 20); + this.modelsToolStripMenuItem.Text = "&Models"; + // + // openModelFileDialog + // + this.openModelFileDialog.Filter = "Model files (*.model)|*.model|All files (*.*)|*.*"; + this.openModelFileDialog.Title = "Open model file"; + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(915, 473); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Main"; + this.Text = "Boogie Verification Debugger"; + this.Load += new System.EventHandler(this.Main_Load); + this.stateViewMenu.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.contextMenuStrip1.ResumeLayout(false); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView currentStateView; + private System.Windows.Forms.ColumnHeader name; + private System.Windows.Forms.ColumnHeader value; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.ListView stateList; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ColumnHeader columnHeader3; + private System.Windows.Forms.ColumnHeader prevValue; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.ListView matchesList; + private System.Windows.Forms.ColumnHeader columnHeader4; + private System.Windows.Forms.ColumnHeader columnHeader5; + private System.Windows.Forms.LinkLabel linkLabel1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.ContextMenuStrip stateViewMenu; + private System.Windows.Forms.ToolStripMenuItem dummyItemToolStripMenuItem; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem normalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem expertToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem everythingToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem modelsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem includeTheKitchenSinkToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem reloadModelFileToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem showSourceToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openModelMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.OpenFileDialog openModelFileDialog; + private System.Windows.Forms.ToolStripMenuItem largeFontToolStripMenuItem; + + + } +} + diff --git a/Source/ModelViewer/Main.cs b/Source/ModelViewer/Main.cs index 5fed89da..4697e454 100644 --- a/Source/ModelViewer/Main.cs +++ b/Source/ModelViewer/Main.cs @@ -1,870 +1,870 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -using System.IO; -using Microsoft.Boogie; -using System.Diagnostics.Contracts; - -namespace Microsoft.Boogie.ModelViewer -{ - public partial class Main : Form - { - SkeletonItem unfoldingRoot; - SkeletonItem[] allItems; - public int CurrentState, PreviousState = -1; - IState[] states; - internal ILanguageProvider langProvider; - public ILanguageSpecificModel LangModel; - ToolStripMenuItem[] viewItems; - Model currentModel; - Model[] allModels; - int modelId; - string lastModelFileName; - internal ViewOptions viewOpts = new ViewOptions(); - Font smallFont, largeFont; - int lineHeight; - - // TODO this should be dynamically loaded - IEnumerable Providers() - { - yield return BCT.Provider.Instance; - yield return Vcc.Provider.Instance; - yield return Dafny.Provider.Instance; - yield return Base.Provider.Instance; - } - - public Main(string[] args, bool runAsHostedWindow = false) - { - InitializeComponent(); - - smallFont = stateList.Font; - - if (runAsHostedWindow) { - this.fileToolStripMenuItem.Enabled = false; - this.fileToolStripMenuItem.Visible = false; - } - - viewItems = new ToolStripMenuItem[] { - normalToolStripMenuItem, - expertToolStripMenuItem, - everythingToolStripMenuItem, - includeTheKitchenSinkToolStripMenuItem - }; - - var debugBreak = false; - string filename = null; - - for (int i = 1; i < args.Length; i++) { - var arg = args[i]; - if (arg == "/break" || arg == "-break") - debugBreak = true; - else - filename = arg; - } - - if (debugBreak) { - System.Diagnostics.Debugger.Launch(); - } - - if (filename != null) { - var idx = filename.IndexOf(':'); - if (idx > 0) { - modelId = int.Parse(filename.Substring(idx + 1)); - filename = filename.Substring(0, idx); - } - } - - this.ReadModels(filename, this.modelId); - } - - private void SetWindowTitle(string fileName) - { - if (fileName == null) { - this.Text = "Boogie Verification Debugger"; - } else { - this.Text = Path.GetFileName(fileName) + " - Boogie Verification Debugger"; - } - } - - public void ReadModel(string model, int setModelIdTo = 0) - { - Contract.Requires(model != null); - - using (var rd = new StringReader(model)) - { - allModels = Model.ParseModels(rd).ToArray(); - } - - AddAndLoadModel(setModelIdTo); - } - - public void ReadModels(string modelFileName, int setModelIdTo) - { - this.lastModelFileName = modelFileName; - this.langProvider = Base.Provider.Instance; - - if (!string.IsNullOrWhiteSpace(modelFileName) && File.Exists(modelFileName)) { - using (var rd = File.OpenText(modelFileName)) { - allModels = Model.ParseModels(rd).ToArray(); - } - - AddAndLoadModel(setModelIdTo); - } else { - currentModel = new Model(); - } - - this.SetWindowTitle(modelFileName); - } - - private void AddAndLoadModel(int setModelIdTo) - { - modelId = setModelIdTo; - - if (modelId >= allModels.Length) - modelId = 0; - - currentModel = allModels[modelId]; - AddModelMenu(); - - foreach (var p in Providers()) - { - if (p.IsMyModel(currentModel)) - { - this.langProvider = p; - break; - } - } - - LoadModel(modelId); - } - - private void LoadModel(int idx) - { - var i = 0; - - //var stateIdx = stateList.SelectedIndices.Count == 0 ? 0 : stateList.SelectedIndices[0]; - - modelId = idx; - foreach (ToolStripMenuItem it in modelsToolStripMenuItem.DropDownItems) { - it.Checked = i++ == idx; - } - currentModel = allModels[idx]; - BuildModel(); - - /* - if (stateList.Items.Count <= stateIdx) - stateIdx = 0; - stateList.Items[stateIdx].Selected = true; - */ - } - - private void AddModelMenu() - { - modelsToolStripMenuItem.DropDownItems.Clear(); - var idx = 0; - foreach (var m in allModels) { - var currIdx = idx++; // this local needs to be in this block - var menuItem = modelsToolStripMenuItem.DropDownItems.Add(string.Format("Model #&{0}", currIdx), null, (s, a) => LoadModel(currIdx)) as ToolStripMenuItem; - if (currIdx <= 9) { - menuItem.ShortcutKeys = Keys.Control | (Keys)(currIdx + Keys.D0); - } - } - } - - private void BuildModel() - { - stateList.Items.Clear(); - - var items = new List(); - LangModel = langProvider.GetLanguageSpecificModel(currentModel, viewOpts); - states = LangModel.States.ToArray(); - var oldRoot = unfoldingRoot; - SkeletonItem selectedSkel = null; - if (oldRoot != null && SelectedNode() != null) { - selectedSkel = SelectedNode().skel; - } - unfoldingRoot = new SkeletonItem(this, states.Length); - allItems = unfoldingRoot.PopulateRoot(states); - - var idx = 0; - foreach (var i in states) { - var it = new ListViewItem(new string[] { idx.ToString(), i.Name, "" }); - it.Tag = i; - items.Add(it); - idx++; - } - stateList.Items.AddRange(items.ToArray()); - unfoldingRoot.Expanded = true; - - if (oldRoot == null) { - SetState(0); - stateList.Items[0].Selected = true; - SetColumnSizes(); - } else { - var mapping = new Dictionary(); - unfoldingRoot.SyncWith(mapping, oldRoot); - SkeletonItem newIt = null; - while (selectedSkel != null) { - if (mapping.TryGetValue(selectedSkel, out newIt)) break; - selectedSkel = selectedSkel.parent; - } - if (CurrentState >= stateList.Items.Count) - CurrentState = 0; - if (PreviousState >= stateList.Items.Count) - PreviousState = -1; - if (newIt != null) GotoNode(newIt); - SyncStateListValues(); - UpdateMatches(true); - } - } - - private void SetColumnSizes() - { - currentStateView.Columns[0].Width = currentStateView.Width - currentStateView.Columns[1].Width - currentStateView.Columns[2].Width - 25; - stateList.Columns[1].Width = stateList.Width - stateList.Columns[0].Width - stateList.Columns[2].Width - 25; - } - - public void SetState(int id, bool updateView = false) - { - if (updateView) - { - stateList.SelectedIndices.Clear(); - stateList.SelectedIndices.Add(id); - } - if (CurrentState != id) { - PreviousState = CurrentState; - CurrentState = id; - } - UpdateMatches(true); - } - - public void HideStateList() - { - stateList.Hide(); - splitContainer1.Panel2.Hide(); - splitContainer1.Panel2Collapsed = true; - splitContainer1.SplitterDistance = splitContainer1.Width; - } - - public void HideMenuStrip() - { - menuStrip1.Hide(); - } - - internal void Activate(TreeNode treeNode) - { - throw new NotImplementedException(); - } - - private void listBox1_SelectedIndexChanged(object sender, EventArgs e) - { - - } - - static Color Col(int c) - { - return Color.FromArgb(c >> 16, (c >> 8) & 0xff, c & 0xff); - } - - static StringFormat center = new StringFormat() { Alignment = StringAlignment.Center }; - static Pen plusPen = new Pen(Col(0xaaaaaa)); - static Brush grayedOut = new SolidBrush(Col(0xaaaaaa)); - static Brush nonPrimary = new SolidBrush(Col(0xeeeeee)); - static Brush matchBg = new SolidBrush(Col(0xFFFA6F)); - - static SolidBrush currentStateBrush = new SolidBrush(Color.Red); - static SolidBrush regularStateBrush = new SolidBrush(Color.Black); - static SolidBrush previousStateBrush = new SolidBrush(Color.Blue); - - static SolidBrush[] categoryBrushes = new SolidBrush[] { - new SolidBrush(Color.Black), // Local - new SolidBrush(Color.Black), // PhysField - new SolidBrush(Color.Green), // SpecField - new SolidBrush(Color.Peru), // MethodologyProperty - new SolidBrush(Color.Green), // UserFunction - new SolidBrush(Color.Black), // Maplet - }; - - private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) - { - var item = (DisplayItem)e.Item; - var skel = item.skel; - var rect = e.Bounds; - var listView = (ListView)sender; - lineHeight = rect.Height; - rect.Y += 1; - rect.Height -= 2; - - var textBrush = Brushes.Black; - if (listView.SelectedIndices.Count > 0 && listView.SelectedIndices[0] == e.ItemIndex) { - e.Graphics.FillRectangle(Brushes.Aquamarine, rect); - textBrush = Brushes.White; - } else { - var bg = Brushes.White; - if (item.active && !skel.isPrimary[CurrentState]) - bg = nonPrimary; - if (item.skel.isMatch) - bg = matchBg; - e.Graphics.FillRectangle(bg, rect); - } - - var off = lineHeight * item.skel.level; - if (item.IsMatchListItem) - off = 0; - - { - var plusRect = rect; - plusRect.Width = lineHeight; - plusRect.X += off; - var plusBorder = plusRect; - plusBorder.Height = lineHeight / 2; - plusBorder.Width = lineHeight / 2; - plusBorder.X += lineHeight / 4; - plusBorder.Y += lineHeight / 4; - e.Graphics.DrawRectangle(plusPen, plusBorder); - if (skel.Expandable) { - float midX = plusBorder.X + plusBorder.Width / 2; - float midY = plusBorder.Y + plusBorder.Height / 2; - e.Graphics.DrawLine(plusPen, plusBorder.X + 2, midY, plusBorder.Right - 2, midY); - if (!item.skel.expanded) - e.Graphics.DrawLine(plusPen, midX, plusBorder.Y + 2, midX, plusBorder.Bottom - 2); - } - } - - off += lineHeight + 3; - var nameRect = rect; - var font = listView.Font; - - textBrush = categoryBrushes[(int)item.dispNode.Category]; - - if (!item.active) - textBrush = grayedOut; - - nameRect.Width = listView.Columns[0].Width - 1 - off; - nameRect.X += off; - var width = DrawString(e.Graphics, item.SubItems[0].Text, font, textBrush, nameRect); - - textBrush = item.active ? Brushes.Black : grayedOut; - nameRect.X += width + 4; - nameRect.Width = listView.Columns[0].Width + listView.Columns[1].Width - nameRect.X; - width = DrawString(e.Graphics, item.SubItems[1].Text, font, textBrush, nameRect); - - nameRect.X += width + 4; - nameRect.Width = listView.Width - nameRect.X; - var t = item.SubItems[2].Text; - width = DrawString(e.Graphics, t, font, t == item.SubItems[1].Text ? grayedOut : Brushes.Black, nameRect); - } - - private int DrawString(Graphics g, string s, Font font, Brush textBrush, Rectangle minRect) - { - var sz = g.MeasureString(s, font).Width; - if (sz > minRect.Width - 2) { - minRect.Width = (int)(sz + 20); - } - g.DrawString(s, font, textBrush, minRect); - return minRect.Width; - } - - private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) - { - e.DrawBackground(); - var brush = regularStateBrush; - if (e.Header.Index == 1) - brush = currentStateBrush; - else if (e.Header.Index == 2) - brush = previousStateBrush; - - Rectangle r = e.Bounds; - r.X += 5; - r.Y += 4; - DrawString(e.Graphics, e.Header.Text, e.Header.ListView.Font, brush, r); - } - - private void listView1_MouseUp(object sender, MouseEventArgs e) - { - var clickedItem = (DisplayItem)currentStateView.GetItemAt(5, e.Y); - if (clickedItem != null) { - clickedItem.Selected = true; - clickedItem.Focused = true; - - var skel = clickedItem.skel; - int plusLoc = skel.level * lineHeight; - if (skel.Expandable && e.X >= plusLoc && e.X <= plusLoc + lineHeight) { - skel.Expanded = !skel.Expanded; - SyncCurrentStateView(); - } - } - } - - private void SyncCurrentStateView() - { - SyncListView(unfoldingRoot.RecChildren, currentStateView, (x, y) => { }); - } - - private void SyncListView(IEnumerable items, ListView listView, Action cb) - { - var ch = items.ToArray(); - var missing = ch.Length - listView.Items.Count; - listView.BeginUpdate(); - if (missing < 0) { - missing = -missing; - while (missing-- > 0) { - listView.Items.RemoveAt(listView.Items.Count - 1); - } - } else { - while (missing-- > 0) { - listView.Items.Add(new DisplayItem()); - } - } - for (int i = 0; i < ch.Length; ++i) { - var di = (DisplayItem)listView.Items[i]; - cb(di, ch[i]); - di.Set(ch[i], CurrentState, PreviousState); - } - listView.EndUpdate(); - listView.Invalidate(); - } - - private void listView1_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e) - { - currentStateView.Invalidate(); - } - - private void listView1_Resize(object sender, EventArgs e) - { - SetColumnSizes(); - currentStateView.Invalidate(); - } - - private void stateList_SelectedIndexChanged(object sender, EventArgs e) - { - if (stateList.SelectedItems.Count == 0) return; - var sel = stateList.SelectedItems[0].Index; - - if (PreviousState >= 0) - stateList.Items[PreviousState].ForeColor = regularStateBrush.Color; - - SetState(sel); - } - - DisplayItem SelectedNode() - { - if (currentStateView.SelectedItems.Count == 0) return null; - return (DisplayItem)currentStateView.SelectedItems[0]; - } - - private void currentStateView_SelectedIndexChanged(object sender, EventArgs e) - { - SyncStateListValues(); - } - - private void SyncStateListValues() - { - var sel = SelectedNode(); - if (sel == null) return; - - stateList.BeginUpdate(); - for (int i = 0; i < sel.skel.displayNodes.Length; ++i) { - var dn = sel.skel.displayNodes[i]; - stateList.Items[i].SubItems[2].Text = dn == null ? "" : dn.Value; - } - stateList.EndUpdate(); - } - - private void ExpandParents(SkeletonItem item) - { - item = item.parent; - while (item != null) { - item.Expanded = true; - item = item.parent; - } - } - - private void textBox1_TextChanged(object sender, EventArgs e) - { - UpdateMatches(false); - } - - private void UpdateMatches(bool force) - { - var bad = false; - Model.Element eltEq = null; - var eltRef = new List(); - var words = new List(); - - foreach (var w in textBox1.Text.Split(' ')) { - if (w == "") continue; - if (w.StartsWith("eq:")) { - if (eltEq != null) bad = true; - else { - eltEq = LangModel.FindElement(w.Substring(3)); - if (eltEq == null) bad = true; - } - } else if (w.StartsWith("use:")) { - var e = LangModel.FindElement(w.Substring(4)); - if (e == null) bad = true; - else eltRef.Add(e); - } else { - words.Add(w.ToLower()); - } - } - - textBox1.ForeColor = bad ? Color.Red : Color.Black; - - var wordsA = words.ToArray(); - var refsA = eltRef.ToArray(); - - if (eltEq == null && wordsA.Length == 0 && refsA.Length == 0) - bad = true; - - var changed = true; // force; - var matches = new List(); - - foreach (var s in allItems) { - var newMatch = false; - if (s.isPrimary[CurrentState] && !bad) { - newMatch = s.MatchesWords(wordsA, refsA, eltEq, CurrentState); - } - if (newMatch) - matches.Add(s); - if (s.isMatch != newMatch) { - changed = true; - s.isMatch = newMatch; - } - } - - if (PreviousState >= 0) - stateList.Items[PreviousState].ForeColor = previousStateBrush.Color; - stateList.Items[CurrentState].ForeColor = currentStateBrush.Color; - - if (changed) { - SyncListView(matches, matchesList, (di, _) => { di.IsMatchListItem = true; }); - SyncCurrentStateView(); - } - } - - private void matchesList_Resize(object sender, EventArgs e) - { - matchesList.Invalidate(); - } - - private void matchesList_DoubleClick(object sender, EventArgs e) - { - if (matchesList.SelectedItems.Count == 0) return; - var sel = (DisplayItem)matchesList.SelectedItems[0]; - GotoNode(sel.skel); - } - - private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - foreach (DisplayItem it in matchesList.Items) { - ExpandParents(it.skel); - } - SyncCurrentStateView(); - } - - private void SetSearch(string text) - { - textBox1.Text = text; - } - - private void GotoNode(SkeletonItem skel) - { - ExpandParents(skel); - SyncCurrentStateView(); - foreach (DisplayItem it in currentStateView.Items) { - if (it.skel == skel) { - it.Selected = true; - currentStateView.EnsureVisible(it.Index); - break; - } - } - } - - private IEnumerable NamesFor(Model.Element elt) - { - var words = new string[0]; - var elts = new Model.Element[0]; - - foreach (var s in allItems) { - if (s.isPrimary[CurrentState] && s.MatchesWords(words, elts, elt, CurrentState)) { - yield return s; - } - } - } - - private void AddMenuItems(IEnumerable skels, ToolStripItemCollection items, string pref, int max) - { - var skelsM = skels.Take(max).ToArray(); - - foreach (var s in skelsM) { - var tmp = s; - items.Add(pref + s.LongName(CurrentState), null, (x, _) => GotoNode(tmp)); - } - - if (skelsM.Length == max) - items.Add(new ToolStripMenuItem("...") { Enabled = false }); - } - - private void stateViewMenu_Opening(object sender, CancelEventArgs e) - { - IDisplayNode sel = null; - SkeletonItem skel = null; - if (SelectedNode() != null) { - sel = SelectedNode().dispNode; - skel = SelectedNode().skel; - } - - var items = stateViewMenu.Items; - items.Clear(); - - if (sel == null) { - items.Add(new ToolStripMenuItem("Unavailable") { Enabled = false }); - return; - } - - foreach (var x in sel.References.Where(q => q != sel.Element)) { - var t = new ToolStripMenuItem(LangModel.CanonicalName(x)); - items.Add(t); - AddMenuItems(NamesFor(x), t.DropDownItems, "= ", 20); - } - - if (sel.Element != null) { - var selName = LangModel.CanonicalName(sel.Element); - items.Add("Find uses...", null, (s, _) => SetSearch("use:" + selName)); - - var aliases = NamesFor(sel.Element).Where(s => s != skel).ToArray(); - if (aliases.Length > 0) { - items.Add("Aliases...", null, (s, _) => SetSearch("eq:" + selName)); - AddMenuItems(aliases, items, " = ", 10); - } - } - } - - private void normalToolStripMenuItem_Click(object sender, EventArgs e) - { - int viewLev = -1; - for (int i = 0; i < viewItems.Length; ++i) { - if (viewItems[i] == sender) { - viewLev = i; - viewItems[i].Checked = true; - } else { - viewItems[i].Checked = false; - } - } - if (viewLev != -1 && viewLev != viewOpts.ViewLevel) { - viewOpts.ViewLevel = viewLev; - BuildModel(); - } - } - - private void debugToolStripMenuItem_Click(object sender, EventArgs e) - { - debugToolStripMenuItem.Checked = !debugToolStripMenuItem.Checked; - viewOpts.DebugMode = debugToolStripMenuItem.Checked; - BuildModel(); - } - - private void exitToolStripMenuItem_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void reloadModelFileToolStripMenuItem_Click(object sender, EventArgs e) - { - ReadModels(this.lastModelFileName, this.modelId); - } - - private SourceView sourceView; - private void ShowSource() - { - if (stateList.SelectedItems.Count == 0) return; - var li = stateList.SelectedItems[0] as ListViewItem; - if (li != null) { - var r = ((IState)li.Tag).ShowSource(); - if (r != null) { - if (sourceView == null) { - sourceView = new SourceView(); - } - sourceView.largeFont = largeFontToolStripMenuItem.Checked; - sourceView.SetSourceLocation(r); - sourceView.BringToFront(); - } - } - } - - private void showSourceToolStripMenuItem_Click(object sender, EventArgs e) - { - ShowSource(); - } - - private void stateList_DoubleClick(object sender, EventArgs e) - { - ShowSource(); - } - - private void openModelMenuItem_Click(object sender, EventArgs e) - { - if (this.openModelFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { - this.ReadModels(this.openModelFileDialog.FileName, 0); - } - } - - private void largeFontToolStripMenuItem_Click(object sender, EventArgs e) - { - largeFontToolStripMenuItem.Checked = !largeFontToolStripMenuItem.Checked; - - if (largeFont == null) { - largeFont = new Font(smallFont.FontFamily, smallFont.Size * 2, smallFont.Unit); - } - - SetFont(largeFontToolStripMenuItem.Checked ? largeFont : smallFont); - //textBox1.Font = font; - //linkLabel1.Font = font; - //label1.Font = font; - } - - public void SetFont(System.Drawing.Font font) - { - stateList.Font = font; - currentStateView.Font = font; - matchesList.Font = font; - } - - private void Main_Load(object sender, EventArgs e) - { - - } - - private void currentStateView_KeyDown(object sender, KeyEventArgs e) - { - var node = SelectedNode(); - if (node == null) return; - - if (e.KeyCode == Keys.Right && !node.skel.Expanded && node.skel.Expandable) { - node.skel.Expanded = true; - SyncCurrentStateView(); - return; - } - - if (e.KeyCode == Keys.Left) { - if (node.skel.Expanded) { - node.skel.Expanded = false; - SyncCurrentStateView(); - return; - } else { - var par = node.skel.parent; - if (par != null && par.parent != null) { - // par.Expanded = false; - foreach (DisplayItem it in currentStateView.Items) { - it.Selected = it.skel == par; - it.Focused = it.skel == par; - if (it.Selected) { - it.EnsureVisible(); - } - } - SyncCurrentStateView(); - } - } - } - } - } - - internal class DisplayItem : ListViewItem - { - internal SkeletonItem skel; - internal int stateId; - internal bool active; - internal IDisplayNode dispNode; - - public bool IsMatchListItem { get; set; } - - internal void Set(SkeletonItem s, int id, int prevId) - { - if (skel == s && stateId == id) - return; - skel = s; - stateId = id; - - dispNode = skel.displayNodes[stateId]; - active = dispNode != null; - - var closeStateId = stateId; - - if (dispNode == null) { - while (closeStateId < skel.displayNodes.Length && skel.displayNodes[closeStateId] == null) - closeStateId++; - if (closeStateId >= skel.displayNodes.Length) { - closeStateId = stateId; - while (closeStateId >= 0 && skel.displayNodes[closeStateId] == null) - closeStateId--; - } - dispNode = skel.displayNodes[closeStateId]; - } - - var fullName = skel.LongName(closeStateId); - var tooltip = dispNode.ToolTip; - if (tooltip == null) - tooltip = ""; - if(tooltip.Length > 0 && tooltip[tooltip.Length - 1] != '\n') - tooltip += "\n"; - tooltip += "Full name: " + fullName; - if (tooltip != null) { - this.ToolTipText = tooltip; - } - - var name = dispNode.Name; - if (name != dispNode.ShortName) - { - name = dispNode.ShortName; - } - - if (IsMatchListItem) { - Util.Assert(active); - name = fullName; - } - - this.SubItems[0].Text = name; - this.SubItems[1].Text = active ? dispNode.Value : ""; - - var prev = ""; - - if (!IsMatchListItem && prevId >= 0 && skel.displayNodes[prevId] != null) { - prev = skel.displayNodes[prevId].Value; - } - - this.SubItems[2].Text = prev; - } - - internal DisplayItem() - : base(new string[] { "", "", "" }) - { - } - - /* - static internal string AliasesAsString(IDisplayNode dn) - { - if (dn == null) return ""; - - var sb = new StringBuilder(); - var canon = dn.CanonicalValue; - foreach (var n in dn.Aliases) { - if (n == canon) - continue; - sb.Append(n).Append(", "); - if (sb.Length > 300) - break; - } - if (sb.Length > 2) sb.Length -= 2; - return sb.ToString(); - } - */ - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +using System.IO; +using Microsoft.Boogie; +using System.Diagnostics.Contracts; + +namespace Microsoft.Boogie.ModelViewer +{ + public partial class Main : Form + { + SkeletonItem unfoldingRoot; + SkeletonItem[] allItems; + public int CurrentState, PreviousState = -1; + IState[] states; + internal ILanguageProvider langProvider; + public ILanguageSpecificModel LangModel; + ToolStripMenuItem[] viewItems; + Model currentModel; + Model[] allModels; + int modelId; + string lastModelFileName; + internal ViewOptions viewOpts = new ViewOptions(); + Font smallFont, largeFont; + int lineHeight; + + // TODO this should be dynamically loaded + IEnumerable Providers() + { + yield return BCT.Provider.Instance; + yield return Vcc.Provider.Instance; + yield return Dafny.Provider.Instance; + yield return Base.Provider.Instance; + } + + public Main(string[] args, bool runAsHostedWindow = false) + { + InitializeComponent(); + + smallFont = stateList.Font; + + if (runAsHostedWindow) { + this.fileToolStripMenuItem.Enabled = false; + this.fileToolStripMenuItem.Visible = false; + } + + viewItems = new ToolStripMenuItem[] { + normalToolStripMenuItem, + expertToolStripMenuItem, + everythingToolStripMenuItem, + includeTheKitchenSinkToolStripMenuItem + }; + + var debugBreak = false; + string filename = null; + + for (int i = 1; i < args.Length; i++) { + var arg = args[i]; + if (arg == "/break" || arg == "-break") + debugBreak = true; + else + filename = arg; + } + + if (debugBreak) { + System.Diagnostics.Debugger.Launch(); + } + + if (filename != null) { + var idx = filename.IndexOf(':'); + if (idx > 0) { + modelId = int.Parse(filename.Substring(idx + 1)); + filename = filename.Substring(0, idx); + } + } + + this.ReadModels(filename, this.modelId); + } + + private void SetWindowTitle(string fileName) + { + if (fileName == null) { + this.Text = "Boogie Verification Debugger"; + } else { + this.Text = Path.GetFileName(fileName) + " - Boogie Verification Debugger"; + } + } + + public void ReadModel(string model, int setModelIdTo = 0) + { + Contract.Requires(model != null); + + using (var rd = new StringReader(model)) + { + allModels = Model.ParseModels(rd).ToArray(); + } + + AddAndLoadModel(setModelIdTo); + } + + public void ReadModels(string modelFileName, int setModelIdTo) + { + this.lastModelFileName = modelFileName; + this.langProvider = Base.Provider.Instance; + + if (!string.IsNullOrWhiteSpace(modelFileName) && File.Exists(modelFileName)) { + using (var rd = File.OpenText(modelFileName)) { + allModels = Model.ParseModels(rd).ToArray(); + } + + AddAndLoadModel(setModelIdTo); + } else { + currentModel = new Model(); + } + + this.SetWindowTitle(modelFileName); + } + + private void AddAndLoadModel(int setModelIdTo) + { + modelId = setModelIdTo; + + if (modelId >= allModels.Length) + modelId = 0; + + currentModel = allModels[modelId]; + AddModelMenu(); + + foreach (var p in Providers()) + { + if (p.IsMyModel(currentModel)) + { + this.langProvider = p; + break; + } + } + + LoadModel(modelId); + } + + private void LoadModel(int idx) + { + var i = 0; + + //var stateIdx = stateList.SelectedIndices.Count == 0 ? 0 : stateList.SelectedIndices[0]; + + modelId = idx; + foreach (ToolStripMenuItem it in modelsToolStripMenuItem.DropDownItems) { + it.Checked = i++ == idx; + } + currentModel = allModels[idx]; + BuildModel(); + + /* + if (stateList.Items.Count <= stateIdx) + stateIdx = 0; + stateList.Items[stateIdx].Selected = true; + */ + } + + private void AddModelMenu() + { + modelsToolStripMenuItem.DropDownItems.Clear(); + var idx = 0; + foreach (var m in allModels) { + var currIdx = idx++; // this local needs to be in this block + var menuItem = modelsToolStripMenuItem.DropDownItems.Add(string.Format("Model #&{0}", currIdx), null, (s, a) => LoadModel(currIdx)) as ToolStripMenuItem; + if (currIdx <= 9) { + menuItem.ShortcutKeys = Keys.Control | (Keys)(currIdx + Keys.D0); + } + } + } + + private void BuildModel() + { + stateList.Items.Clear(); + + var items = new List(); + LangModel = langProvider.GetLanguageSpecificModel(currentModel, viewOpts); + states = LangModel.States.ToArray(); + var oldRoot = unfoldingRoot; + SkeletonItem selectedSkel = null; + if (oldRoot != null && SelectedNode() != null) { + selectedSkel = SelectedNode().skel; + } + unfoldingRoot = new SkeletonItem(this, states.Length); + allItems = unfoldingRoot.PopulateRoot(states); + + var idx = 0; + foreach (var i in states) { + var it = new ListViewItem(new string[] { idx.ToString(), i.Name, "" }); + it.Tag = i; + items.Add(it); + idx++; + } + stateList.Items.AddRange(items.ToArray()); + unfoldingRoot.Expanded = true; + + if (oldRoot == null) { + SetState(0); + stateList.Items[0].Selected = true; + SetColumnSizes(); + } else { + var mapping = new Dictionary(); + unfoldingRoot.SyncWith(mapping, oldRoot); + SkeletonItem newIt = null; + while (selectedSkel != null) { + if (mapping.TryGetValue(selectedSkel, out newIt)) break; + selectedSkel = selectedSkel.parent; + } + if (CurrentState >= stateList.Items.Count) + CurrentState = 0; + if (PreviousState >= stateList.Items.Count) + PreviousState = -1; + if (newIt != null) GotoNode(newIt); + SyncStateListValues(); + UpdateMatches(true); + } + } + + private void SetColumnSizes() + { + currentStateView.Columns[0].Width = currentStateView.Width - currentStateView.Columns[1].Width - currentStateView.Columns[2].Width - 25; + stateList.Columns[1].Width = stateList.Width - stateList.Columns[0].Width - stateList.Columns[2].Width - 25; + } + + public void SetState(int id, bool updateView = false) + { + if (updateView) + { + stateList.SelectedIndices.Clear(); + stateList.SelectedIndices.Add(id); + } + if (CurrentState != id) { + PreviousState = CurrentState; + CurrentState = id; + } + UpdateMatches(true); + } + + public void HideStateList() + { + stateList.Hide(); + splitContainer1.Panel2.Hide(); + splitContainer1.Panel2Collapsed = true; + splitContainer1.SplitterDistance = splitContainer1.Width; + } + + public void HideMenuStrip() + { + menuStrip1.Hide(); + } + + internal void Activate(TreeNode treeNode) + { + throw new NotImplementedException(); + } + + private void listBox1_SelectedIndexChanged(object sender, EventArgs e) + { + + } + + static Color Col(int c) + { + return Color.FromArgb(c >> 16, (c >> 8) & 0xff, c & 0xff); + } + + static StringFormat center = new StringFormat() { Alignment = StringAlignment.Center }; + static Pen plusPen = new Pen(Col(0xaaaaaa)); + static Brush grayedOut = new SolidBrush(Col(0xaaaaaa)); + static Brush nonPrimary = new SolidBrush(Col(0xeeeeee)); + static Brush matchBg = new SolidBrush(Col(0xFFFA6F)); + + static SolidBrush currentStateBrush = new SolidBrush(Color.Red); + static SolidBrush regularStateBrush = new SolidBrush(Color.Black); + static SolidBrush previousStateBrush = new SolidBrush(Color.Blue); + + static SolidBrush[] categoryBrushes = new SolidBrush[] { + new SolidBrush(Color.Black), // Local + new SolidBrush(Color.Black), // PhysField + new SolidBrush(Color.Green), // SpecField + new SolidBrush(Color.Peru), // MethodologyProperty + new SolidBrush(Color.Green), // UserFunction + new SolidBrush(Color.Black), // Maplet + }; + + private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) + { + var item = (DisplayItem)e.Item; + var skel = item.skel; + var rect = e.Bounds; + var listView = (ListView)sender; + lineHeight = rect.Height; + rect.Y += 1; + rect.Height -= 2; + + var textBrush = Brushes.Black; + if (listView.SelectedIndices.Count > 0 && listView.SelectedIndices[0] == e.ItemIndex) { + e.Graphics.FillRectangle(Brushes.Aquamarine, rect); + textBrush = Brushes.White; + } else { + var bg = Brushes.White; + if (item.active && !skel.isPrimary[CurrentState]) + bg = nonPrimary; + if (item.skel.isMatch) + bg = matchBg; + e.Graphics.FillRectangle(bg, rect); + } + + var off = lineHeight * item.skel.level; + if (item.IsMatchListItem) + off = 0; + + { + var plusRect = rect; + plusRect.Width = lineHeight; + plusRect.X += off; + var plusBorder = plusRect; + plusBorder.Height = lineHeight / 2; + plusBorder.Width = lineHeight / 2; + plusBorder.X += lineHeight / 4; + plusBorder.Y += lineHeight / 4; + e.Graphics.DrawRectangle(plusPen, plusBorder); + if (skel.Expandable) { + float midX = plusBorder.X + plusBorder.Width / 2; + float midY = plusBorder.Y + plusBorder.Height / 2; + e.Graphics.DrawLine(plusPen, plusBorder.X + 2, midY, plusBorder.Right - 2, midY); + if (!item.skel.expanded) + e.Graphics.DrawLine(plusPen, midX, plusBorder.Y + 2, midX, plusBorder.Bottom - 2); + } + } + + off += lineHeight + 3; + var nameRect = rect; + var font = listView.Font; + + textBrush = categoryBrushes[(int)item.dispNode.Category]; + + if (!item.active) + textBrush = grayedOut; + + nameRect.Width = listView.Columns[0].Width - 1 - off; + nameRect.X += off; + var width = DrawString(e.Graphics, item.SubItems[0].Text, font, textBrush, nameRect); + + textBrush = item.active ? Brushes.Black : grayedOut; + nameRect.X += width + 4; + nameRect.Width = listView.Columns[0].Width + listView.Columns[1].Width - nameRect.X; + width = DrawString(e.Graphics, item.SubItems[1].Text, font, textBrush, nameRect); + + nameRect.X += width + 4; + nameRect.Width = listView.Width - nameRect.X; + var t = item.SubItems[2].Text; + width = DrawString(e.Graphics, t, font, t == item.SubItems[1].Text ? grayedOut : Brushes.Black, nameRect); + } + + private int DrawString(Graphics g, string s, Font font, Brush textBrush, Rectangle minRect) + { + var sz = g.MeasureString(s, font).Width; + if (sz > minRect.Width - 2) { + minRect.Width = (int)(sz + 20); + } + g.DrawString(s, font, textBrush, minRect); + return minRect.Width; + } + + private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + e.DrawBackground(); + var brush = regularStateBrush; + if (e.Header.Index == 1) + brush = currentStateBrush; + else if (e.Header.Index == 2) + brush = previousStateBrush; + + Rectangle r = e.Bounds; + r.X += 5; + r.Y += 4; + DrawString(e.Graphics, e.Header.Text, e.Header.ListView.Font, brush, r); + } + + private void listView1_MouseUp(object sender, MouseEventArgs e) + { + var clickedItem = (DisplayItem)currentStateView.GetItemAt(5, e.Y); + if (clickedItem != null) { + clickedItem.Selected = true; + clickedItem.Focused = true; + + var skel = clickedItem.skel; + int plusLoc = skel.level * lineHeight; + if (skel.Expandable && e.X >= plusLoc && e.X <= plusLoc + lineHeight) { + skel.Expanded = !skel.Expanded; + SyncCurrentStateView(); + } + } + } + + private void SyncCurrentStateView() + { + SyncListView(unfoldingRoot.RecChildren, currentStateView, (x, y) => { }); + } + + private void SyncListView(IEnumerable items, ListView listView, Action cb) + { + var ch = items.ToArray(); + var missing = ch.Length - listView.Items.Count; + listView.BeginUpdate(); + if (missing < 0) { + missing = -missing; + while (missing-- > 0) { + listView.Items.RemoveAt(listView.Items.Count - 1); + } + } else { + while (missing-- > 0) { + listView.Items.Add(new DisplayItem()); + } + } + for (int i = 0; i < ch.Length; ++i) { + var di = (DisplayItem)listView.Items[i]; + cb(di, ch[i]); + di.Set(ch[i], CurrentState, PreviousState); + } + listView.EndUpdate(); + listView.Invalidate(); + } + + private void listView1_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e) + { + currentStateView.Invalidate(); + } + + private void listView1_Resize(object sender, EventArgs e) + { + SetColumnSizes(); + currentStateView.Invalidate(); + } + + private void stateList_SelectedIndexChanged(object sender, EventArgs e) + { + if (stateList.SelectedItems.Count == 0) return; + var sel = stateList.SelectedItems[0].Index; + + if (PreviousState >= 0) + stateList.Items[PreviousState].ForeColor = regularStateBrush.Color; + + SetState(sel); + } + + DisplayItem SelectedNode() + { + if (currentStateView.SelectedItems.Count == 0) return null; + return (DisplayItem)currentStateView.SelectedItems[0]; + } + + private void currentStateView_SelectedIndexChanged(object sender, EventArgs e) + { + SyncStateListValues(); + } + + private void SyncStateListValues() + { + var sel = SelectedNode(); + if (sel == null) return; + + stateList.BeginUpdate(); + for (int i = 0; i < sel.skel.displayNodes.Length; ++i) { + var dn = sel.skel.displayNodes[i]; + stateList.Items[i].SubItems[2].Text = dn == null ? "" : dn.Value; + } + stateList.EndUpdate(); + } + + private void ExpandParents(SkeletonItem item) + { + item = item.parent; + while (item != null) { + item.Expanded = true; + item = item.parent; + } + } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + UpdateMatches(false); + } + + private void UpdateMatches(bool force) + { + var bad = false; + Model.Element eltEq = null; + var eltRef = new List(); + var words = new List(); + + foreach (var w in textBox1.Text.Split(' ')) { + if (w == "") continue; + if (w.StartsWith("eq:")) { + if (eltEq != null) bad = true; + else { + eltEq = LangModel.FindElement(w.Substring(3)); + if (eltEq == null) bad = true; + } + } else if (w.StartsWith("use:")) { + var e = LangModel.FindElement(w.Substring(4)); + if (e == null) bad = true; + else eltRef.Add(e); + } else { + words.Add(w.ToLower()); + } + } + + textBox1.ForeColor = bad ? Color.Red : Color.Black; + + var wordsA = words.ToArray(); + var refsA = eltRef.ToArray(); + + if (eltEq == null && wordsA.Length == 0 && refsA.Length == 0) + bad = true; + + var changed = true; // force; + var matches = new List(); + + foreach (var s in allItems) { + var newMatch = false; + if (s.isPrimary[CurrentState] && !bad) { + newMatch = s.MatchesWords(wordsA, refsA, eltEq, CurrentState); + } + if (newMatch) + matches.Add(s); + if (s.isMatch != newMatch) { + changed = true; + s.isMatch = newMatch; + } + } + + if (PreviousState >= 0) + stateList.Items[PreviousState].ForeColor = previousStateBrush.Color; + stateList.Items[CurrentState].ForeColor = currentStateBrush.Color; + + if (changed) { + SyncListView(matches, matchesList, (di, _) => { di.IsMatchListItem = true; }); + SyncCurrentStateView(); + } + } + + private void matchesList_Resize(object sender, EventArgs e) + { + matchesList.Invalidate(); + } + + private void matchesList_DoubleClick(object sender, EventArgs e) + { + if (matchesList.SelectedItems.Count == 0) return; + var sel = (DisplayItem)matchesList.SelectedItems[0]; + GotoNode(sel.skel); + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + foreach (DisplayItem it in matchesList.Items) { + ExpandParents(it.skel); + } + SyncCurrentStateView(); + } + + private void SetSearch(string text) + { + textBox1.Text = text; + } + + private void GotoNode(SkeletonItem skel) + { + ExpandParents(skel); + SyncCurrentStateView(); + foreach (DisplayItem it in currentStateView.Items) { + if (it.skel == skel) { + it.Selected = true; + currentStateView.EnsureVisible(it.Index); + break; + } + } + } + + private IEnumerable NamesFor(Model.Element elt) + { + var words = new string[0]; + var elts = new Model.Element[0]; + + foreach (var s in allItems) { + if (s.isPrimary[CurrentState] && s.MatchesWords(words, elts, elt, CurrentState)) { + yield return s; + } + } + } + + private void AddMenuItems(IEnumerable skels, ToolStripItemCollection items, string pref, int max) + { + var skelsM = skels.Take(max).ToArray(); + + foreach (var s in skelsM) { + var tmp = s; + items.Add(pref + s.LongName(CurrentState), null, (x, _) => GotoNode(tmp)); + } + + if (skelsM.Length == max) + items.Add(new ToolStripMenuItem("...") { Enabled = false }); + } + + private void stateViewMenu_Opening(object sender, CancelEventArgs e) + { + IDisplayNode sel = null; + SkeletonItem skel = null; + if (SelectedNode() != null) { + sel = SelectedNode().dispNode; + skel = SelectedNode().skel; + } + + var items = stateViewMenu.Items; + items.Clear(); + + if (sel == null) { + items.Add(new ToolStripMenuItem("Unavailable") { Enabled = false }); + return; + } + + foreach (var x in sel.References.Where(q => q != sel.Element)) { + var t = new ToolStripMenuItem(LangModel.CanonicalName(x)); + items.Add(t); + AddMenuItems(NamesFor(x), t.DropDownItems, "= ", 20); + } + + if (sel.Element != null) { + var selName = LangModel.CanonicalName(sel.Element); + items.Add("Find uses...", null, (s, _) => SetSearch("use:" + selName)); + + var aliases = NamesFor(sel.Element).Where(s => s != skel).ToArray(); + if (aliases.Length > 0) { + items.Add("Aliases...", null, (s, _) => SetSearch("eq:" + selName)); + AddMenuItems(aliases, items, " = ", 10); + } + } + } + + private void normalToolStripMenuItem_Click(object sender, EventArgs e) + { + int viewLev = -1; + for (int i = 0; i < viewItems.Length; ++i) { + if (viewItems[i] == sender) { + viewLev = i; + viewItems[i].Checked = true; + } else { + viewItems[i].Checked = false; + } + } + if (viewLev != -1 && viewLev != viewOpts.ViewLevel) { + viewOpts.ViewLevel = viewLev; + BuildModel(); + } + } + + private void debugToolStripMenuItem_Click(object sender, EventArgs e) + { + debugToolStripMenuItem.Checked = !debugToolStripMenuItem.Checked; + viewOpts.DebugMode = debugToolStripMenuItem.Checked; + BuildModel(); + } + + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void reloadModelFileToolStripMenuItem_Click(object sender, EventArgs e) + { + ReadModels(this.lastModelFileName, this.modelId); + } + + private SourceView sourceView; + private void ShowSource() + { + if (stateList.SelectedItems.Count == 0) return; + var li = stateList.SelectedItems[0] as ListViewItem; + if (li != null) { + var r = ((IState)li.Tag).ShowSource(); + if (r != null) { + if (sourceView == null) { + sourceView = new SourceView(); + } + sourceView.largeFont = largeFontToolStripMenuItem.Checked; + sourceView.SetSourceLocation(r); + sourceView.BringToFront(); + } + } + } + + private void showSourceToolStripMenuItem_Click(object sender, EventArgs e) + { + ShowSource(); + } + + private void stateList_DoubleClick(object sender, EventArgs e) + { + ShowSource(); + } + + private void openModelMenuItem_Click(object sender, EventArgs e) + { + if (this.openModelFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { + this.ReadModels(this.openModelFileDialog.FileName, 0); + } + } + + private void largeFontToolStripMenuItem_Click(object sender, EventArgs e) + { + largeFontToolStripMenuItem.Checked = !largeFontToolStripMenuItem.Checked; + + if (largeFont == null) { + largeFont = new Font(smallFont.FontFamily, smallFont.Size * 2, smallFont.Unit); + } + + SetFont(largeFontToolStripMenuItem.Checked ? largeFont : smallFont); + //textBox1.Font = font; + //linkLabel1.Font = font; + //label1.Font = font; + } + + public void SetFont(System.Drawing.Font font) + { + stateList.Font = font; + currentStateView.Font = font; + matchesList.Font = font; + } + + private void Main_Load(object sender, EventArgs e) + { + + } + + private void currentStateView_KeyDown(object sender, KeyEventArgs e) + { + var node = SelectedNode(); + if (node == null) return; + + if (e.KeyCode == Keys.Right && !node.skel.Expanded && node.skel.Expandable) { + node.skel.Expanded = true; + SyncCurrentStateView(); + return; + } + + if (e.KeyCode == Keys.Left) { + if (node.skel.Expanded) { + node.skel.Expanded = false; + SyncCurrentStateView(); + return; + } else { + var par = node.skel.parent; + if (par != null && par.parent != null) { + // par.Expanded = false; + foreach (DisplayItem it in currentStateView.Items) { + it.Selected = it.skel == par; + it.Focused = it.skel == par; + if (it.Selected) { + it.EnsureVisible(); + } + } + SyncCurrentStateView(); + } + } + } + } + } + + internal class DisplayItem : ListViewItem + { + internal SkeletonItem skel; + internal int stateId; + internal bool active; + internal IDisplayNode dispNode; + + public bool IsMatchListItem { get; set; } + + internal void Set(SkeletonItem s, int id, int prevId) + { + if (skel == s && stateId == id) + return; + skel = s; + stateId = id; + + dispNode = skel.displayNodes[stateId]; + active = dispNode != null; + + var closeStateId = stateId; + + if (dispNode == null) { + while (closeStateId < skel.displayNodes.Length && skel.displayNodes[closeStateId] == null) + closeStateId++; + if (closeStateId >= skel.displayNodes.Length) { + closeStateId = stateId; + while (closeStateId >= 0 && skel.displayNodes[closeStateId] == null) + closeStateId--; + } + dispNode = skel.displayNodes[closeStateId]; + } + + var fullName = skel.LongName(closeStateId); + var tooltip = dispNode.ToolTip; + if (tooltip == null) + tooltip = ""; + if(tooltip.Length > 0 && tooltip[tooltip.Length - 1] != '\n') + tooltip += "\n"; + tooltip += "Full name: " + fullName; + if (tooltip != null) { + this.ToolTipText = tooltip; + } + + var name = dispNode.Name; + if (name != dispNode.ShortName) + { + name = dispNode.ShortName; + } + + if (IsMatchListItem) { + Util.Assert(active); + name = fullName; + } + + this.SubItems[0].Text = name; + this.SubItems[1].Text = active ? dispNode.Value : ""; + + var prev = ""; + + if (!IsMatchListItem && prevId >= 0 && skel.displayNodes[prevId] != null) { + prev = skel.displayNodes[prevId].Value; + } + + this.SubItems[2].Text = prev; + } + + internal DisplayItem() + : base(new string[] { "", "", "" }) + { + } + + /* + static internal string AliasesAsString(IDisplayNode dn) + { + if (dn == null) return ""; + + var sb = new StringBuilder(); + var canon = dn.CanonicalValue; + foreach (var n in dn.Aliases) { + if (n == canon) + continue; + sb.Append(n).Append(", "); + if (sb.Length > 300) + break; + } + if (sb.Length > 2) sb.Length -= 2; + return sb.ToString(); + } + */ + } +} diff --git a/Source/ModelViewer/Main.resx b/Source/ModelViewer/Main.resx index 657b80c4..764a9fd9 100644 --- a/Source/ModelViewer/Main.resx +++ b/Source/ModelViewer/Main.resx @@ -1,2192 +1,2192 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - 267, 17 - - - 152, 17 - - - 422, 17 - - - - - AAABAAoAICAQAAEABADoAgAApgAAABAQEAABAAQAKAEAAI4DAAAwMAAAAQAIAKgOAAC2BAAAICAAAAEA - CACoCAAAXhMAABAQAAABAAgAaAUAAAYcAAAAAAAAAQAgABx9AABuIQAAgIAAAAEAIAAoCAEAip4AADAw - AAABACAAqCUAALKmAQAgIAAAAQAgAKgQAABazAEAEBAAAAEAIABoBAAAAt0BACgAAAAgAAAAQAAAAAEA - BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDA - wAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAB3AAAAAAAAAAAAAAAAAAB6KiAAAAAAAAAA - AAAAAAAHKqKnAAAAAAAAAAAAAAAAeioqKllwAAAAAAAAAAAHcqKqKiopGQAAAAdwAAAAACqioqKqI5mQ - AAB1AAAAAAoqKqJyoqIVlQAAkAAAAACqKiohEaKiOZmZmQAAAAAAOiqiB5EyqiEZcAAAAAAAAAcAAAWR - kqKjmZAAAAkAAAAFcAABkZE6KlmQAACQAAAAAJcACZGVGioplwAJcAAAAAAJlxWZGZGioZmZlwAAAAAA - AAAJkZGVOqKQAAAAAAAAAAAAAZWZGZIqMAAAcAAAAAB3AAmZkZkZKqAACQAAAAAACXAHWZWZWZKnAJcA - AAAAAACXB5mZmZmTKhFwAAAAAAAACZlxmVmZk3ogAAAAAAAAAAAACZmZkVAHpwAAAAAAAAAAAAeZmZmQ - AKoAAAAAAAAAAAAHl3mJcAACcAAAAAAAAAAAAAAAcAAAAKAAAAAAAAAAAAAJAHAAAAByAAAAAAAAAAAA - dwAJAAAACnAAAAAAAAAAAJAAA3AAAACgAAAAAAAAAAdwAACQAAAABwAAAAAAAAB5AAAACQAAAAcAAAAA - AABxkAAAAAeTcAAAcAAAAAAAAAAAAAAAB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/z////wf///4D///8AH//4AA/n/AAHz/gAA9/wAAA/8CAB//vgAfv54AH3/OAA5/4AAA//4AH//+A - B9/zgAe/+YADP/yAAH/+AAH//+AY///gHP//4B5///9/f//7fz//87+f//ef3//n3+//z+/v/x/h9/// - +f///////////ygAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAHAAAA - AAAAB6IgAAAAAAAiqiOQAHAAAqozKhl5AAADd3EyOQAAAABweZKhcAAAAAdRmaKXAAAAAAkZGnAAAAAI - CVmTKHAAAAAJmZdzAAAAAACZkAYAAAAAAAAAADAAAAAAcIAAAAAAAAcABwAAAAAAcAAAdwAAAAAAAAAA - AAD7////4f///8B3//+AD///gD///9Af///gD///+B///+gH///4D////G/////3///9f///+7////fP - ////////KAAAADAAAABgAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZjkACGk/AAR1 - OQAJIm8ABjlkAAgvdgAJOX0ABFtIAAVBVgAKWlMABVBYAAR4QQAGYVwABnJWADN5XQAJSXwACFt3AFJn - XwBFX3UATVt2AAGQHQABnxgAAK0NAAC9BQAAtwoABrQLAA22DQAAvgkAALgMAAC8DQAKugoACr0KAA29 - DQABphIAAasaAB6oHgABtRMAE7QTABSwFAATuhMAGrYaABm9GQACiCQAA4AtAAKdIwADmy4ABIo4ACyf - LAA3jTcAOJk4AAKnJQAgpCAAKaEpACa1JgArsCsAKbspADGtMQA4rDgAPao9ADezNwA7ujsAAMICAADG - AAAAwQQABcEFAAXFBQAKwgoAFcAVAAWGSQBGlUYAUZNRAFiTWABKpkoATKdMAE25TQBXpFcAU7tTAFu1 - WwBmk2YAapRqAGqeagB5mHkAVKFkAG6nbgBsu2wACBuAAAoAkwAKCZYAChSSAAsYlgAaEJ8ACCSAAAsm - nAAoO4gAODKVAAwHowALAKYACwCpAAwBqAAMBqgADACtAAsOqQAXDaMADACwAAwAtAAMDLEADQC5AA0A - vQARBbcAFAm1AA0XuwAfFLkAHBC9ACUdpAALM6EANC2hADcvpQA3L64APzilAD84qAAuJbYALyS9ADQq - vAAmObYAOjKyAEI7sABFPbYAC0SeADxJowA2RawALkG/ADRGuwBHQo4ARUCWAEtGkgBNSZMASUSZAFNO - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP/8H////wAA//AP////AAD/4A////8AAP/AB////wAA/4AAP/9/ - AAD7AAAf/P8AAPwAAA/4/wAA+AAAB/H/AADwAAAD8/8AAOAAAAAH/wAAwAAAAA//AADgAAAB//8AAOAc - AAH/nwAA8/wAAP8/AAD5+AAA/n8AAPj4AAD8/wAA/PgAAPj/AAD+AAAAAf8AAP8AAAAD/wAA//gAAP// - AAD/+AAA/n8AAP38AAD8/wAA/nwAAPn/AAD+PAAAc/8AAP8cAABj/wAA/4AAAAf/AAD/wAAAD/8AAP// - AAYf/wAA//+ADw//AAD//4APj/8AAP//gA/H/wAA//+Kz8f/AAD///9/4/8AAP//93/z/wAA///nP/n/ - AAD//+ef+P8AAP//z5/8/wAA///Pz/5/AAD//5/H/38AAP//H+P/vwAA//4/8f+fAAD/8H/4H98AAP/4 - //wf7wAA/////z//AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN1NAAZH3oACSZ/AAg9eAArMXwALTx9AARrQgAFd0kABmFVAAZI - YAAHTG0ACF9uAC5UZQABmRsABrkGAAC/BAAAswsAAbcPAAC6CAAAvwkACbwJAAOlFwABrREAAa4VAAGj - GwAdqR0AFr8WABm0GQActhwAApAmAAKeJwA1njUAAqogABaqJwAjpyMAJaYlACWzJQAjvCMANa01ADi8 - OAAAwwIAAMYAAADBBQAEwgQAAMgAAASKQwBEm0QAU5lTAE6/TgBUqVQAappqAHufewBesWQAZqJmAGin - aABpvmkAdaB1AHquegAKH5cACiaKAAo1lgA1LpgADACuAAwKrwAMF60ADQCxAA0AtgANALoADQW4AA0A - vAAiGqMAKB+pAA0jvwAvJ6QANCyjAC09qwA3MKEANSy+ACE1vQALR5oAPkqgADVFsgBUUJsAU12fAF9k - lABlYZ8AaWacAGxpmwByd5oAU0yvAEpDsgBJQbQAUku9AFNMvwBJVrEAUl+3AGFppQBua6AAcm+mAGhw - pgB2dKAAdXKkAHZ0pQB5d6EAf32jAHt4pQBkbrQAc269AHZysgB7d7YAfHm0AA0AwQAOAMYADgDKAA4A - zQAOBswAEAPBABcJzgAYC8kAHRDNAA8A0QAPANUADwzTAA8A2AAPAN0AFAfRABAA1gATBdQAEADaABMF - 2gAQAN0AAh7ZAB8S3AAmG8MAIhbPACYayQAmGs8AKR3JACAT1QAjFtQAJBjSACYZ2QAoHNsAByLPABUs - wwARKs8ABSHVAAgk1gAxJ8IANizCADAlzAAnPMIAPTTAACwh0wAzKdIANivRABAA4QAUBeMAEADlABoM - 4QAQAOkAFATpABEA7QAXCOgAEQDwAEE2zgBUTMYATl7JAFxWxQBaaMUAaGLDAHx3wgCAfbMAg3/EAHGB - hgB7gKMAf4a5AFAAFwBwACEAkAArALAANgDPAEAA8ABJAP8RWgD/MXAA/1GGAP9xnAD/kbIA/7HIAP/R - 3wD///8AAAAAAC8AIABQADYAcABMAJAAYgCwAHgAzwCOAPAApAD/EbMA/zG+AP9RxwD/cdEA/5HcAP+x - 5QD/0fAA////AAAAAAAsAC8ASwBQAGkAcACHAJAApQCwAMQAzwDhAPAA8BH/APIx/wD0Uf8A9nH/APeR - /wD5sf8A+9H/AP///wAAAAAAGwAvAC0AUAA/AHAAUgCQAGMAsAB2AM8AiADwAJkR/wCmMf8AtFH/AMJx - /wDPkf8A3LH/AOvR/wD///8AAAAAAAgALwAOAFAAFQBwABsAkAAhALAAJgDPACwA8AA+Ef8AWDH/AHFR - /wCMcf8AppH/AL+x/wDa0f8A////AAAAAAAAAAAAAAA2OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA6Ki0tJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMi0tLS0tMwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAACctLS0tLS0VBUpTAAAAAAAAAAAAAAAAAAAAAAAAZ68dLS0tLS0tLS0BcHl2AAAAAAAAAGVeAAAA - AAAAAAAAEy0tLS0tLC0tLSoDeXyCAAAAAABojgAAAAAAAAAAACwtLS0qKhoGGC0tLQ5Gep2IAAAAAKAA - AAAAAAAAAAAqKioqLS0ZAj88Ky0tLQp6g59+pKOkAAAAAAAAAAAAACIqKioqJQA+Q0ILLS0tEUCDn5kA - AAAAAAAAAAAAAAAAAFUAAAAAAEhEQ0MILS0tB3yfogAAAAAAAJYAAAAAAAAAXFYAAAAAdXVGRkUfLS0p - O5+lAAAAAACLAAAAAAAAAAAAhmkAAABycXB1cEESLS0efKNqAAAAiqwAAAAAAAAAAAAAd01LR3NycXFx - cz0qLS0Eo56loqKnAAAAAAAAAAAAAAAAAAAAenlzc3NzeQwtLRd0AAAAAAAAAAAAAAAAAAAAAAAAAACA - f3l5eXp6fC4tLQkAAAAAAFoAAAAAAAAAAABdZgAAAE6BfH9/f4GDeyEtEAAAAACJAAAAAAAAAAAAAACa - YwAAbZ2Dg4ODg52fSRQtIAAAjK4AAAAAAAAAAAAAAACFYgBXn52dnZ2dn6OjUCoqDYerAAAAAAAAAAAA - AAAAAACbj5yXoZ+fn5+ho6WmNS0WAAAAAAAAAAAAAAAAAAAAAAAAAACVcJ+jo59GeAAAKC0zAAAAAAAA - AAAAAAAAAAAAAAAAAFhxgaWlekZbAAAAGxUAAAAAAAAAAAAAAAAAAAAAAAAAb4NuqamtjWwAAAAAKi8A - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAXwAAAAAA - AAAxJAAAAAAAAAAAAAAAAAAAAAAAALBrAAAATwAAAAAAAAAmNAAAAAAAAAAAAAAAAAAAAAAAkQAAAACY - YQAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAFRgAAAAAACTAAAAAAAAAAAwAAAAAAAAAAAAAAAAAABZkgAA - AAAAAACTAAAAAAAAADgAAAAAAAAAAAAAAABfkJQAAAAAAAAAALGETFEAAAAAADcAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAACqqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/z////wf///4D///8AH//4AA/n/AAHz/gAA9/wAAA/8CA - B//vgAfv54AH3/OAA5/4AAA//4AH//+AB9/zgAe/+YADP/yAAH/+AAH//+AY///gHP//4B5///9/f//7 - fz//87+f//ef3//n3+//z+/v/x/h9///+f///////////ygAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAABHw/AAZYXQAGY1sAEUJxAAC8BgANug0AAq0cAByvHAANiiwAAp4iAASN - OQAjoS0AJbglADeoNwAAxgAAAMgAAADACAA4wjgAPZNSAEasRgBYtlgAX7hfAEWJZQBgl3cAZMdlAGzE - bAALK54ADQC2AA0BvgAMErIADCWzAC8lvQAzKbgACkqUAFhTpwBXUa0AVE2/AEdVswBSYL8AamasAHp+ - oQB2dakAcnmsAH57rgBnYbsAcHizAHt4swAOAMAADQ3AAA4AygAPANUADwDdABAC0QAVB9oAEADeACke - xQA2K80ANivVABAA4AAQAOUAEQDpAFZOxwBQR80AfHTkAIB9rwCCfc4AeoG1AHiBvAB2gckAAM9AAADw - SgAR/1sAMf9xAFH/hwBx/50Akf+yALH/yQDR/98A////AAAAAAACLwAABFAAAAZwAAAIkAAACrAAAAvP - AAAO8AAAIP8SAD3/MQBb/1EAef9xAJj/kQC1/7EA1P/RAP///wAAAAAAFC8AACJQAAAwcAAAPZAAAEyw - AABZzwAAZ/AAAHj/EQCK/zEAnP9RAK7/cQDA/5EA0v+xAOT/0QD///8AAAAAACYvAABAUAAAWnAAAHSQ - AACOsAAAqc8AAMLwAADR/xEA2P8xAN7/UQDj/3EA6f+RAO//sQD2/9EA////AAAAAAAvJgAAUEEAAHBb - AACQdAAAsI4AAM+pAADwwwAA/9IRAP/YMQD/3VEA/+RxAP/qkQD/8LEA//bRAP///wAAAAAALxQAAFAi - AABwMAAAkD4AALBNAADPWwAA8GkAAP95EQD/ijEA/51RAP+vcQD/wZEA/9KxAP/l0QD///8AAAAAAC8D - AABQBAAAcAYAAJAJAACwCgAAzwwAAPAOAAD/IBIA/z4xAP9cUQD/enEA/5eRAP+2sQD/1NEA////AAAA - AAAvAA4AUAAXAHAAIQCQACsAsAA2AM8AQADwAEkA/xFaAP8xcAD/UYYA/3GcAP+RsgD/scgA/9HfAP// - /wAAAAAALwAgAFAANgBwAEwAkABiALAAeADPAI4A8ACkAP8RswD/Mb4A/1HHAP9x0QD/kdwA/7HlAP/R - 8AD///8AAAAAACwALwBLAFAAaQBwAIcAkAClALAAxADPAOEA8ADwEf8A8jH/APRR/wD2cf8A95H/APmx - /wD70f8A////AAAAAAAbAC8ALQBQAD8AcABSAJAAYwCwAHYAzwCIAPAAmRH/AKYx/wC0Uf8AwnH/AM+R - /wDcsf8A69H/AP///wAAAAAACAAvAA4AUAAVAHAAGwCQACEAsAAmAM8ALADwAD4R/wBYMf8AcVH/AIxx - /wCmkf8Av7H/ANrR/wD///8AAAAAAAAOAAAAAAAAAAAAAAAAABYPEAgAAAAAAAAAAAAAAAwPDw8QAjUA - AABBAAAAAA0PDwkEDwUeNiMkAAAAAAAXFRoqHAMQATsAAAAAAAAAACwAKDAdCw8bJQAAAAAAAAAALSEy - MjEHCjlAAAAAAAAAAAAAMzMzHxEYAAAAAAAAAAAvADs3NzwiBilCAAAAAAAAAAA+ND00PxkTAAAAAAAA - AAAAADg6IAAAEgAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAALgBEAAAAAAAAAAAAAAAAKwAAACYAAAAA - AAAAAAAARQAAAAAAJ0MAAAAAAAAAAAAAAAAAAAAAAAAAAPv/AADh/wAAwHcAAIAPAACAPwAA0B8AAOAP - AAD4HwAA6AcAAPgPAAD8bwAA//cAAP1/AAD7vwAA988AAP//AACJUE5HDQoaCgAAAA1JSERSAAABAAAA - AQAIBgAAAFxyqGYAAHzjSURBVHja7F0HgBPV1v4mfbPZvuwCIkXFhr377A1siGJBUECaIgpYAQEFUWkq - IlhApAkWREFQsfvs79fnsyv6LA87vWxJT+Y/ZyY3mWTTN9nNLjl6SXaSzNy5c8936j1XQp7ylKfdlqTm - 7kCe8pSn5qM8AOQpT7sx5QEgT3najSkPAHnK025MeQDIU552Y8oDQJ7y1LJJwmEw4id4UQdZc1xO7sd5 - ylOeWipJ6AIbzkAZluBPggDB9DLyAJCnPLVqklAEE8YR+z+MD/AXnHTMH2h5AMhTnlo1GaDHZPTGj9iK - pfgYKsMz83sRAoGElAeAPOWp5ZEO5+EIXIL+uJ5goF5hdh81NzUP8hpAnvLUaomdfu0wE49jIibhE/wK - VeIz87MZIDSAJE+WpzzlqaWQhGJYyOZfiN/wCybg0cBxlvp2qADAmkBS0l89YZ7ylKeWQnpMJ6X/MAwn - 5f9SbFGYniV+faCxFpC09GfKA0Ce8tQySEcsfwZGY4Wi/C/B21CZnUGghpoDKhgkLf2Z8gCQpzzlPkk4 - FXuRxf8KNmEzBpMWYFdUfVb5d1GrpeZCitJfPXGe8pSnXCYJbWDDQ1iGPdEDYzAIH+BnqAzPzL8Tqvqf - ku0fOnme8pTbJEW8j2yC5IiGKK8tjSRifQPuxV1k999CjP8cxmEusTqr+qz2b4cKAq507zEPAHnKNZI0 - r9x0gaY/x4IOexhx3IkmHLK/BfsagAr6QiE1Hem+Oz3A5u0+/L3Ojh93+fDRaw58t8UfDItpk2NaCiDo - MAC9MZwsfhcp/UPp3c/YBlXib4UKAEL6N2qw85Sn5iYt4ysMb5FgOdWCrv1s6He0Bb0MErpIKcxZv4xa - ux8fv2LHywtr8dzPXmyWVWYRtnIuA4EO3XEgbsc60gE64Ak8iHl4hXrMdj+DwGao0l8k/qRFeQBoSJES - SDLRwyjSoYBmZQE4FKMOuI/+cezyw+FpmH+dyxMr10iMt5D0hrY6lFxuwxm9bRjUTo+TJAmmxl6k3o9v - R21Gv3fd+C9Ub3laNnOTjUkXVOMRrEQZTsQGfEuyfzJZ++zs20FtI1QQYM9/yo6/8AvliamB9Kkkhj/A - gE6nWXFUZwOOP8KM/Sw6dKYvKJORZo7bLePXjx34kiTL68vq8K8/fcrDEepm4Gt5ikMCZBlUDUUSrCTt - zxhShJvLDTgaGZ6fP3uwrt8mDNrmVyRnSjnzTTomZbDgAczE/rieeunGDHr/Ij6FavdvggoAtUgj7Nfw - Yrs3aZ1JerIpDWRY7tG7EGedYcVF7Q04lj4okhKMkixDrpfx+Zo6LF1MquavPmxBHgjikda+Z+Y3nkAA - e2MpxhxqRm+Jl7pkgUhl29V3E875zI2voTrOGs1AGScd3fto9MdlpPCz5vMxPsA4PEqynpmf1f6/oEr/ - tMJ+kbQ7A4B2EhqMgHlUMS66shgTC3XYKxVbUxABgX+bD5/M2IlJrznwgUMOZmYlvTijlZNW01IYv1iC - bUQxLu9bhFutOnTI9oS8ewcuWVKLf0JNoEk5cy7LpEMfHEcA8CK9K0cdaSq3kvz/HD9BZfo/oWoAdVDB - q9G0uwMAMz+r9OajTOi6qAqrLRL2UD5sxMh4Zex4xY7779iOR+vk4MPa3f0DWlufJbxxXz3a31aGcScU - oJ9OgrkpOjFhO/quqFMAgFVosYY+F0hCB7L7l+J1FOJgmiUyVuMl3IfnqIcc62fJzwDAnn8GrozMo90Z - AHgikuBXJl7hxFIMGlCEe8SHjQEAJtIG3B86sHTcNkzcJIfZnMrHzX3zTUxh2hY18ykWHDSlDPeRmXUM - jbWuKTpBwGy/cjP6ferCf6Am0LATLe0QWkbHp5rsfjXZ52LlyEb8jeuI/f+kV9Xm/x2q9Ldnss+7MwCw - CqowP7Wie8sxo1chLhEfNhYAmAgEfN+4sGbcdoz6r1eJ2+6OIKB19BmJ+y1DbTjnmlJMt5HMy8Q4J0tf - u/DvAZsxulZWpCk7bBsVQ88g6XEvbsaJmEojpace+fAInsKTeIc+Y38SMz/3mUGrUWG/SNqdAYAlEYf1 - iqmV3V+B+3pa0UN8mKmJSU9K/t2N14ZtwaBffMEHuLuAgJb5TTTgBXeWYdDFNkwySArwNhk5/agn9f/u - NXa8ATWJJlcAQIfhOA/9ieH1sClHvsd/cS1BgENx+v0BFQAYCBod9ouk3RkAWP3nAS+lVjmzAndeaMU5 - 4sNMSibm8p9dWH3pJgypQ3AJZy6GoDJJgvkVe58QoHBuJW4+qwC3pKvyk0bFg+bf7kftejf+/t6DHbt8 - cPAgFupg7mKAra0eRXsYUF5Gr/rA/N7ow8YHduKJF+x4CyojsUONwZifRXP6AHQ4EvuQov8aGQCdld66 - SUDcSMbAf/AdVKnPBT/YDOAoQMZzF3ZnAGDnXxG1CmptBtlw4W1luEV8mA3V9J92PHLdVkzwqEieUumm - FkZae99EKlbJA20w5WQLrqJxTXlk/TJkZvp19fjmLQfWf+zCH96GyTzatGGpXAfTPkYUkY3n/tSN7wkl - mPFZ8gvmb24nICf7VGA2VpD9f7pyhO/kdfwLk/AMVHufmZ+l//ZAXzM+V3Z3AGD1nwGgqoMe+z/XFlNp - 4lQqAxNlZGQ1j9THIUKaZbpUQYImsufpOoyasgNP+sPj0K0JBMKYv0xC+exKTP2HBX1TZX4e7x1+1K2u - x6dP1OLjP31BDzg3H2IDgNAweHzFenl2xO4IvNYgFAZsjrHnyj5mzMI0dMNoiHGpRR0G4gGS+8z4v0EF - ABH2y4qpsjsDAJsAQQ2AWvVlheg+vgwDrBKszNw+GX6egP/zYNv3pHJ+5cbWGj8cegn6NmSvHWdBhyNN - 6ETvEyYLCSJbdNuYbbj8FQchvToBRTy3NYBAmKe/UELZgxWYckoBrkxV7Xf54XnPifVzd+Ht7zyKHSxK - Xrk045YMAPBv2NZniV8XeLWjOROBjDQ+16Iv/cfJPlblGPdiPl7CErwJ1e7/H9SwH4NWRh1/WtqdAYAn - qfABMAhU0oEqYupDzrfiGGJ0z79d+PtHDzZu8Coqo3ZFmZjkhk4GVFxhwxGX2HA4rxdI5sJbvfhi5FZc - SarpL1Afbi7npSdLYZKfmX9aOcafY8UQYv6kM/tY6m/2YSfZ7K+tteMzd0haMxM7A00LAEKF1yHkcBQA - wJ+7Ar/hczgCjY81lwmmwwU4FmOwikalbfDoBpL7QwkC6hTJz8zPr1uQZT/F7gwAPFGYYVkLKNM0BgT2 - UHOIUJRbjjbZlIlOzcLtBDP2nlSOc7sYFW0iLnHq8OcurBq2BdfXyGGRgZYKAlqHn5k0qOK7ynFTTyuu - 16WwkIeZn8bl50k7sHq9R1F/hdTmJhhYqwEIUNamdGs1AH9gbD2a34m/m2O8JeyHdrgPz9MsOS541Etz - azyW4z0lP2FDoLEDsAZZ1lJ2ZwDgScJMzioYg0BxoPF7BgZj4HtexAYAc+C7DBi2joTo91fgwsPM6Jzo - 4n4Z7uW1uG3aTiz0htdza2kgoGV+Ew2IbVwZBvWz4Q4ylSzJnoTGw/9CPf5v6k6s2+lXwl88+WsDjaW/ - 1gQQWpOWibUAIOa12CxDC+KRv2u6caqiufIQqf17on8Y572HrzEBz9BdsdRnrZAdf9vQBE7K3RkAxKTl - SWoNNGZkZmhz4LNEGoAAEDYlSqgVtdOj7b0EAsda0DVRB+x+/HXLNvR9w6Egv5BqLQkAwuL8NCiFQ224 - 4IZS3E9/FCd7ErcMz5ydeGVxLd5xharc1ASaVvoLCa4No2oBQNsnoGH6dWTFoKYbJ/aBTMZIdCf5Lynj - pVId3dv1WIzv8S1U1X8D1My/jOX7x+/Y7ktCWrCkV9YDBJopcCy47h/hkkP8VqQRCzOCAYDNh5IOerSf - 1wZX7GdS1xXEIlZ5//Di3cs3YcBmv2LvaRcP5TppJS6PmfUsC06YVYkFBbrEZpCgOj/sd+/AqtX1+Nin - Orx2BprQAITdLhhf6y9pCeMEZYyG4h8YjFfonS3sk2fwAebgRXrqG6ACAEt/HocmiVDszgAg7l8faErC - CkJOJG6x9lsLqrwImQAMAEFfwl4GdHq8CgMJDCriRQjYH7CyDpNu34G5/paVHxBM7+UxOMKEfRdX4flC - Hdone4J6Yv7btuHJdQ58BnXSCwDQMn+kyo8WMDbh47QfCYLHiNHN6BT2yZ+k5o/AImxSipQI6c/mT0bz - /eN3bvemyEIgWvtRkGB8f8TvIs0A1gJYAyiHGlUoP9aM/R+uxIASffy0V6+M7ddsRs/3XPgKubpOveG4 - Ce2poI0OlS+2xcpKAw5N9gQ1ftRP3Ibl61TzhxmfVX9mflb/Wf0VKn80db+lkIS2JCAex3M0I84Jm1k+ - uqd78RJeUPL9NyAU9tuJJnz+uzsApEuRS1tZE1AWFUHVADiZSAGBfjacMKEMF5kShMK+dOHlqzZjaF3u - RwWE6s/Mb6EbLyaQm3KaFVcle4JdPtRN2oGnXrLjE6jML7LzBPOLUF9LlfrqOJlojO7AJJyBsWF2P9MX - xPA34QmS9cz47PhjByBnKmY83z9+J/PUGNJWtRErC9n5xVqAAgL0YeW0clx6UaGy7DXmeHMxkQd2Ysij - tViNUFQgV9aqa+9XqP7sPC28vgiXjirFLF2SsX5m/snE/C/alS2tWeprmb8eITNI2PotjfFV0tN/N+Bi - +m8xzRBr2Gd20vJuwwoagX8jpPpnLd8/HuUBoPGkBQERURCmADvDKst0aPdUNYbvbcAe8fwBZBP/fMZf - OGubGgZjUyDXEoQE8ytmz8kWHDG3EkvJ7q9O5sd2PxwTt2P5Wjv+Dyrjbw80nvha5m+pKr8gHU4hc2gy - nicDoEvYJ3xHb5Cpdyeeoae7ASHHH49DRsp8pUJ5AMgMaX0CDALaDEMFBI4xo9vjbXB1gS5+5Zvn6jD1 - tu24D6ojKJccglq739pOh/ZLq/B4F5NSNzEheWX4pu3As0vrlFRXnuxiSa6Q/E60DuaX0I0s/5nE4BU4 - ucGn28nEuR5LSOn/BiHpn9V8//idzVOmSMsgDAJKnQEEFhtRqxxahDPHlKFXvEF3+bHtqs04m1ewIXcc - gmF2v0VCCZk1Y863YrgUadtGIY50LKjBK/ftwmp/aEWeiPdHMn+umT2pjZOVZP4M+u8ojEDk+gc/Pcel - eBfz8TJCjj/O+2cTqFkWJuUBILMUFhdHyB/AWkAbYpy2i9tg6FEW7BvrBMwsnzjx9JVbMAqhLZ+bWyJq - /Ry23lZ0v7sCD5kkxemZkN4ge/+mbVjqkBVJJ3a0EXvatRbm56duINt+CM7GbETLgvwdW+jTBWTw8N5+ - zPyc7izCfs1y73kAyDyJcKJwCnJ+ADsEGQSqDjPhwCeqcC2ZAjHTZN0yaq/dgovecypOorS2fc4gaUGt - cE89Oi2vxuI9DDg4mR+vd+N/gzbjoa3+4OIWwfzC2986mJ/H6EIch1uxlqCyosGnLP0nYiXexkcISX/O - 9xf1Ipvl+eYBIPOkzY0X/gARGqwiTqq6sQTnDy8hORGDOEPwUxdW9tuM66AySnNlCGpV/wJCgJL7KpQV - fsOSWdu/1Ysdw7ZgztcerEeoEs8OhOL8rYX5JRxOdv99eIUgP3ouxL/xE+l0S+kJstQX+f6sDTVrZeI8 - AGSHovkDhEOwqlSHDqwFHGBCx1gn8MioIS3g0nedSrisucKCwRV+1IrOKcCJD1RikUGKSGeNQg4/HGO2 - Y+ErdqXugajGw8xfg9bG/CYan2fxDKrRKypHueheh+Jx/KhsSLIBoXx/znZs1khPHgCyRwIEIk0Bdgi2 - 6VGAY2dV4iqyo42xTvCFC2sHbsZwuxx0EjWlFhCm+pdKqF5ehfn7m3FCoh9yIZWHd+GFuTVYI6vML1R/ - bSWe1sH8RlL4p+NmGpXpUb/BT2sFqf0PkmkgK2q/cPxltL5/+jeQp2ySNj+ApaZwCFaZJWXp8IDuBTgy - Vm4AMVLdrdsw4EU7WY5NrwWIsGYBda94RBH63VCGaYl2TGIn5ntOfD5qK+bXy0pyi1D9Raxfm9/Q3NGN - xo/RKJyLvngOsTY2+ZsYfTBJ/x0k/5sp3z8e5QEgu6S1oTkqwFpA0BTY34j9FrXBiDYGJWcgKn3sxOrB - m3GdW3UWiUSRbDOOVnuxtdOj05q2eLpcj70T/fA3D/4evAUPbPAq21lpK/DWoXXVQdThJHTFXXhVqegb - jTjffyZewpoG+f6N3tY7U5QHgOxTcL08IhyC1NrcWoKLhhajhy6GU81D6v/wLehLUpVtae1qwWz2Nwha - 9KZkShlG9S3CjYl+6PTDPXYb5r/swAcIt/uF06+1lENXK/rOJcu/AqfF5KL/4BfcguV05+z0a7Z8//g3 - kqemIG2WoMgNUACApGuXZVUY2cmoqQ8XQe858NSILbjZFdICsilBtbn+RfsYsM/adlhjkhTgikms+r9k - x/u3bMPjPjWzjQFA6/RrSbUO4o9PEWlGd2MajsFIxEqE4nz/W/AUPlOWOgvVn8N+ze74C7+ZPDUFRSYI - KZuRIGAK9LfhzPFluMwQYzK5/Nh65Sb0+sKjVI0RG4tkYwIJ6R/s5/xK3HWGFf0S/fBPDzb224xpf/oU - SSdUf5HpJ1b25cSkbxSZ6BndRlZ9D8xusMhHS2vwKan/qzT5/iz9Rb5/zoxDHgCajsIkKzQOwQIJ7VZW - 48b9TBEFIzS0ohYzb9+B+2RVgmRrW2tt/kLRP8w4fGEVVhql+NWOvTK8123BrLfUkGWk6t+6nH7n4liM - w/MEBO1ifmszAd9ILMWvwTJfHPvnsF8ubEUWRnkAaDqK5hAMagG9rDhpegWuiqUF1Pjxv7P/Qs8takad - 2NU2kwyllf7KYqZHK3DnmST9E+15sKIOr03cjqWy6t3Wqv4i0681ML+EI9GeFP/VZMQdHfNbnPE3D2/i - CbyGcMdfVuv7p39TeWpK0joERfEQBQDIPqh+vho3dTNh7xi7EskP7cKNc2qwHKpk1W4ymqm+Bf0UB5qw - 79NVWFWoix2hYNrsw6aef2PytlCqr1D9tfH+nJr0aY2NjUB7Lh7D/mQOxeIavssfyc7nIp9qvr9w/GW9 - vn/6N5anpqZgai1CYUF2CFYdTyr34iqM1sfYRedXN97vuQn9HbLCZMKTnCnmEj4KRfpPL8etFxfGT/nl - Ut43bcOcl+x4D6r0Z9Vfu8inNdj9HOHXYwqx9cmYhXgp0JzxNx7P4kPFFNqAJqzvn/7N5ampSesQFGFB - RQvg9mglhpHafWS0H/LeggM3o8f/ufAFVCbLlEopNBNlu/ROBuy9ohpPVepjVzXm9QpvOvDR6K14xK3a - tyLbTxTzbD3x/gHojuFY2aCib9iAUHuXbP7b8FQg3184/hism7zQR7KUB4DmIaFuKwwHjRZwiBHdniRT - wBKjcMiL9XiEpO4UqFIlUxNLrFvglOWykcW4alQJxsfbz2+TF5sJjKb/5MUPCDn+IlN9WzrzSzgRnTAd - /6Sn1TnuN2sI9K7FIlL8YxX6yMmxyANA81BYnj3CVwu2nVqOKy624aRoP3T48ceJf+LUGjloVzZ2com+ - sO1fUiSh7TPVWLCfCUfE+gF7/adsx6Kn6hVHl1D9o3n9WzJx5kMRluA5VOOsuN/kO+WNvR7GSwgv9NFk - 9f3Tv8k8NReFOd2g2aV4XyP2JxX8Jpsuejnx8dvQd2U93kBmnIHCJ8HXKj3DglMfaoOHjFLsGPe7Dnw6 - civm2mXFvtUu9Gktqr9Eo2HA/bgHh+IWJFr6zPn+AzCfjJ9ohT5yKuzX8Ebz1FykDbspzAdNRGB8KS4d - WBxd8nzgwPJBWzAWqrddONvS7YPQRIrpTcWcCkw6uxCXxfrBNh+2D9uC+75yK0tbeZKLXP/WpPrrcSv6 - 4kJian2cZB8E7nQKVuEVvI/wjL+cyfePR3kAaF7SJgdpU4SruxjQlVTxm8r1SqQgjOr8+PuMv3DKdn9Q - yqTrYRbXV7L+6Jr70jUXVeixZ7Qvs9f/kRqsfHAXnpNDqj9L/8iFPi2ZdOiFw3ET1sKcxC5HXN9/JBkK - nuBSX+H4y5l8/3iUB4DmJW1ykNAC2BdQLamVgy68tgTnR/6IGNE3dhuuesGu2OCNyQwUGoiSmdjPhgvu - LMOMWM6/b9z4YeBmzNzlV+xbBgCt6t8aEn54G6/2eJDs/hIcl5A7OOx3PZaSLsRRGW19/5zK949/w3lq - btLW2tdqAVVt9eiyvAqjIxcKcQjuQyeeIDNgPFT1O10zQGgfJQYCnkcqMe10K86N9kWu6T+CVP8PXEqd - QuH1FzH/1qD6SzTyFjyAR7EvWfRJlDzDCzQWM7Ga7lxIf219/xYxFnkAaH6KTBEWWoACApcX4vTJ5eir - j0gR3urD793/wum1ssKIzISpqt/CCcnXLO9kwH6rqrGwRN9Q7SWNQ15aizX37MRTaKj6O9O4du6Rhcbi - HtyIf2AqktnlaAvZ+EPwOI0Gb+zJGX8bAmOTc/n+8SgPALlBWi0gbKGQTUL7BW0w/CgL9tf+wCvDMWor - rnzDoTifWA1PNdwk1H8lAnGFDT0JaGZEVvxhbeNHD36+fBPuqQl5/UWFn1zbvCQ9YpPncpxJtjwn+xQn - /D7n+8/GK3gWb6Hhxp457/gLv/U85QJpKwlrFwopNQNOs+CoBysxTFtKnGfYEzWYefdOslhVj3OqTieh - /peS6lH1UCXuPiOK+u/ywzVkC6b/n0tZ1x5N9W8Rtm4cknAKuuJOrEEEyMakb0jVvxFPkKXPVY9E2I/H - pkU4/sJvPk+5QmFluKBJESZUqJ5TicFnFuAo7UKh/7rx8QUb0denSuRUkoKExsGOx/IqPfZa1xaLSvXh - VYpZ+i+Jrvqzk6s1qP4S2pHJ9SCepDs/J6lfOEnC306awvvK/oYboAIAO/4YhFscGOYBILdIu1AoLDmo - mxH7L63CaLLRg/nodX5sGbAZF37tVtJxmSmTVT/D1P/uBTj54Uo8Gun9J4D5pe8mTNslK15/7Uq/yE08 - WyKxV8WAubgDh2NCUk4/vtO38DWmkPLvDm7r/XtgXJwtcSzyAJBbFLlQSOsQbHNHGS690oazxAo9vwz3 - mG24fo0dLyK8aGgi4msoqxHpRG0mleGGK2y4SqtdOP1wXLMF93/owqcIT/iJrOzbUkmHIeiNoaTKJyh4 - EiTe2PNGLCO4/QqhsB8vhGqWjT0zQXkAyD2KlSJcVaVD+9XtMI5U9krx5TftWHLtVpJioWy8RBNRm/xT - Xihhj7VtMa+jAQcJAGDVfzGp/jN24pmI+n6Rqn9LBQAdzid7fxzeppFOamtzxfG3BO/iMaxDC8v3j0d5 - AMg9ipYiLCoHVQy04dQJZRgotICfPPj6so24tFbdeDOZcKAwMzjaUNHVgANfaodnSSUwCgBY78ZPgzbj - vq3+oHOrdan+e6AE80lrqsCJSXPABtKCeLVfqL4/Z/y1iHz/+IORp1ykWPUDK4lzS9a0xbiuJuzDXyRV - fdvAzej3mRufI7lwoHA0KpGG4cW48pZSjGWpzwDg8MM+fAtmBVR/rddf7FHYklV/ieDUiNmYhf2IneMs - dw4jL93zVKwh2d8i8/3jD0iecpHibShSeooF+z/WBhN1EvTEuP5J2zH66XqsQigrMJ4fIJj7zxuVLm6D - qScUoLusTmF5QQ1W3bsLK6PU92sNm3roMZos/8sxJ+ZOPpHEd/oZfsb1ZACEF/po9o09M0F5AMhd0q7T - 124oUk4HrQ9UYtA5VnTnL71px7Jrt+J2qCG6eCqp8C8o25SRjdH2kw54zqZDWwaAr9z4dsgW3L/Tr0g3 - nuCtR/VnaX8VTsZQPE8wUJ7071wEelfjcfygrH7UOv7YH+Jt7ttq/LDkKZcpuD8fQg5BboWdDWjzbDWm - lulR9ZMHX/bbhL47/EGPdCw/gPAtsEZRfqwZhzxZjRX8Qa0fNSO3YOYHLsXDLZi/9aj+h6Az7scLZFAd - ktIvV+ETpb5/uOOvReX7xx+YPDUlSZpXRcITZxv2gK5Sp0plFsT1O+HfuiVkW0Y6BFl6FdNB09VFOPPm - UoyiL+7oQwDwjVtZlRbPDyA0CuU8w4twxS1lGMfLfJfU4umpO7ESKtMz87cWr7+EjnS/s7AAHXBxSr/c - TvffH/NoNCI39mxR+f7xBydPTUVBpqdmIH2+YCDMJ5wNU99jYTjeAIlX/Pn9kLf+Ct/nq+Fe/ghcb2+C - XB/4nVgnwKYAS3BLiQ7WZVW4Y38Tjpy6HdctqSMJFyoSEs02Fdl/DABlz1RhxpFm9FjvwVcDNuMuUv2Z - 6blpt/IWzK/0f09IlnLoyugPPV2gnvq6c1fDjT9yBSh4+24TJmEszsAdMbfxikYy/TcL6wgSeWdmwfwt - Mt8//gDlqSlIMD5PQGM36KpnwXr70TBeRh9YZc2XxBfp1fUVPM+Pgn38f+DfjJD0ZlOAAYAdefoeBTh4 - ViVmvGHHyhu2KfkAoia/L0ofhP1fSipF2ccd8DJ1qOC6LRj3vkvJJmSw2YlQToHC/HRh/Ukw7H0tLJcd - Cv2pbaFrT8cMBAA16+H972p4nn0CrnUEVtpS4M3PIHr671r0Rj8sRozyajHpG/ymOP6cSrafcPy1yHz/ - eJQHgOxTUOpTM3WGVPkkbA/uC8P5/sD4C/GKwBcFUlDz/wzfq5ehdvh/IW9HSIKzJsAAYCRG1hMAjDrA - iK6Xb8IVW/xBFTXSD6At/lF8qgUHzW+D50j1f2TaTjwH1Wxge1+7n59EaodpAiz9hsEyzgKpQyyw+hbe - Ndeg/rYv4f8ToV2AgeYDAh1OxQG4i6S4MXyNQ0Jyk4S/BU+T9c+hULHWXxT6aOnrH8IoDwDZJe0qPzP9 - Y1sA63hS+0cQd+gixaTKUJJgftF8r8H9yEDUT7arqieHBlmKs2OQGVp3kBHtHm6DKYM2Y/QvXqUwZbQy - YcKMYACxXVOEvj0LcVafTRhbLysmAzu16hAq78VkWoiCWy+A+QaZsCBy1mvBil7lrfD/uw/qBvwbvl8D - 128ux6GEvVGOOViLCvwj5V+/ii9xDyn/4WW+hOOv1Uh/daDylE0SzK/stnsq9Ic9gSK20608i/xRvhxi - fLUqBTfioB19UdvrVXi/DnyVTQHWAMzE0eYTYdjjhkLdUNllcLX1GkxWSFVG1Vkors2M6KHrOe2QN22h - VlnoOeRtj//lF9y+9z+Cj6U2gwBLfod6SRhHw3zuWBTMZ0XArxjF4X3VBTJpRJ/pYvLX8L5wEequ3gxZ - W7G4KUFAHcZleAj74JqUZ/gOAsDrsJQUf67vz+q/2Nizxeb7x6M8AGSXxMIeJYw3G9Y7esE0mGdRJAAI - dVowlMr8kiLu+f1yuGdfh/qZ9Na7J3RFvWA8+wIYTyFT4qhSSO3oOyZ2zCWzqE0lhaG9pOe7tpGl8X/w - vv8KPC+9CM+XNZDltpBKX0PxmnJI+wox7tf0VevU0IIVHXNOhH3QXLheRih5qKmkptq1sWT1X0j2eypO - PwRu8nG8jUWkA8iK048BQOT7txrHn5byAJBdCm61Ta30UxQ/XwTpAAEAwgSIZCiDhqGMARDYBP9n98Ix - 91KYehwFYw86aamERPv2RqdoP2I4oBnu3w7/hlXwvLwT/trBMI/xQzJo+yp+H+GrCAOr7+B7pztq+tSF - FyxtCubRoT+OwXBi4CjVlBPSzyTp2fEXyvfX1vdvVaq/oDwAZI/C6vzRH5XfoOQjmkVGLQAI0jKTMQAA - RoQAgL7rJxtbshHTFyrHkn90UoLPVOkuK5xaT6+7Aj0z06c+eh9pyMeS/qKvdK6N56D2on/D9x3CNwvJ - 7ngfiHZKqa7iFJN9mNzUx7uwGm/gQ4SSfkS+f6ty/GkpDwDZI23svrwDdB1fhu11b4CptACgGq1SUPVX - JanKTCalqYr9n/Qr0iCUZk6qgkX8zmnJS71hTq2lV9ICSG1R+xPNXImw+4N9FQBAxx3nofbyj+BlZhL1 - A7LJQBIqle27H0VnXJny0HDPPsT3GI+nAoU+tPX9W3y+fzzKA0D2iMdWZN1Vct79ByheRzPJEGkUR6r+ - gplMgffM7Kyi/0athN5zs6QBAPG+76Fzs/TfCS4z7CchqhomkRqAcP4ZILSVkMYiwIree3uidsAH8L6D - +IlJmRlnM11yHG7B2bgzgEGpUQ2p+DdhOb7Bl2iF+f7xKA8A2SNRdSe45dca2OaXQdeZGUq4k7Wef60U - NQUAQDCVE1yXy49yZUWrjsRd7EeX7EPVfs9F51elP+86qmoaOoRrAFrbPxystP1lzUF29kTdENIAePms - qCKUHQAw0OUGogcGEwPrlSzJ1IiRdSX+D7OULMoNgcZlvnagleT7x6M8AGSPBAAEi3uOgWVkDxjP02oA - qvQPOdC0jCQAgDWAjfQLts0rlE1rVQBI5+HF+o0rYPtvo+tspVd1BZIUdOELZ6XIaNLa/OH9ldgHsJM0 - gGGfwseJNGLX4GyE0HT4Bw7A3XieBmS/tM6wkfo3FI/TTXN9f63jr9Xk+8ejPABkj7QagLLd16HQHz0V - 1sl+NY02KP0F42uZyRxgKHPge+tpLrLaX0GnLVWK2CUHAIm+I5yAWgDYAjUzqExjAojvRjNTQn1WX3+E - 99tzUTu8Rs2dF4uKMs1MEval4bgXy1BNyn86xJ7P+/EywQfn+29AqL5/iy/0kSzlASB7JHwAophHNTF7 - +9EwDz4BptN4ZgXzg6EykxkhiW/WMNff4HW+MqEI716lC/gAkn14UhJHQgCwPQAAWxVzQ6d814eIfGYN - WJk1kj/Qf//9cD48E87lUCVpNjQAvpgZMzAVx2J00pV9Imk9WVW81t8TZP5Wme8fj/IAkD0K23gTqhnQ - zgZ0vgUFV+8HfVetyq+V+Op7laF20Dz8kXinhOZ4pWL/q1EAU4omgBTjL6EBuAM+gB0BH8BmasyxJYoW - IIWBVaR5IiQ/v/4G/08Xo3b835A5iUZUFMqsD4AX+UxAP5xDzKt2JXXyUX9G4Qn8h/4Lr+/f6vL941Ee - ALJHIg2Yc+9ZC2AA4CW/7btAd+gNsAxuB53FEsFAWsm/RWF+1SNfoUh/SXlvzVAegBYGRBRANQNkBQC2 - BMKB1qCXP7yvWgDgVwIRx1DUzXgfvo+gVhPmwiLp7FoUj3TE+IfhdlLbdWkk+wh6HV9hEp4JlPkS9f05 - 379F1vdPl/IAkF2KLO/dbm/oDh8M8830vg3b022ptaGZrK7sUVVrZsTfiV9q6LU8oPYL5rcFGE4f49Gl - 6xdgac8zX+QBbA2YAQwGnMlUCR0sGmaPBAI2mL+C1/8+PK8shnuOM7Rhhigqkgmm4so+VXiImN+EA9M+ - Sy3suAqPkbX/PUL5/gxYrTLfPx7lASB7pK3pp5TgPhT6I8fAMo2U9/Y7iblqA8k3cuBL/APWPfXKD1R1 - vzQQ9itRmB8KExoD6n8m8gDEMRbPbkULgAI8OwIOwW2B93pqbakfFUoEQgUBQ+D3HKH4kz4vUjUV3//B - 8/T9cM6sDcXSRTpw48bTQv89Qf/tiUvSnrk82PPxFpbgNSC41l8U+mix9f3TpTwAZIfEuCrLgKkVHwF9 - t9koXGiAvCer2Vxup45e7WoOvuKQlgLqvyUg6YsD9j6rD4UBz7+aadf4CEDkZxwOZ/DhwLcwBXYFmH+H - 0l8Gq1B4UE35VTmGb7AsoKmUqYlK3n/CvWAcHPfUqWp1Y9cDSMr23XfhVpyIKSkv8tHSLwRK12Ix3dxP - CEl/9lW02nz/eJQHgOyQdouvgr0gdVwO2+PV0B3JDM96Zn3A5nYGcvBFWJAZiwGgMNhUhhNMZ0hT+ms7 - Fu1vWUlPVn0BzoAmUBcAgZqAg1DdC1wORgVEX22B7ETRipT+wr0Qrjsmw/GYO7xASTogoCOmPQ/98SS9 - K0r7qXio65zv/zo+wG6U7x+P8gCQedJGzCxku7d5EoUPHAnDeSTpJWcgxu4MSFSWuCENIBRbtwSYnk0D - oW6ny/yJnYBMstIDX0ATcAYYXgBVXeCYO9BXBPrK/SsMML0tAFrCRKBBqL0Xjuumw/mCV/UDpFMujCv7 - HITb8TydfJ9GPZkP8QMm4OlAmS9uu0W+fzzKA0BmSVsByELSu/gRWMeeD9O1dFjvC6j7nsCrG6rdLdJt - RWKQNsNO5NnrUmD+ZJJ/Gv6tAgBzpgABdwCsHEHQUhcN+RDKYGT136pKfOVVOAmNgdChC/LffVFzyWvw - fYHUy4tLZO9X4CFi2iqc2ajZWku3cRNpEF8rOyiJfH8O+4ky6rsl5QEgcyT4k3lYKb01CubLJ6JgKklu - qxB7fg3DqzWz5Aa59mJloC7YQjZ/plT/hsdClQm1/VSBKgRYkWAVmQUozBSdZkD+hu+T81Db53v4NyF5 - fwCrFRbcg5k4WtnGK327n6/0DD7CXKylK2+ACgC7Tb5/PMoDQOZIyxPW7jAc+TgKl9ig49h/g5rZapNj - 6sNSlpg+2vEQ24c+EX3yBQFLvEphYCVME7E6UDgodZqzsV7xGbzLT0DtSITqA8QHASOdaiwGkOX/SMDS - SJ/+IDWfC31sVCofC8ffbpPvH492ZwCIXhgn/XPxnFcKgFRBarsKtvkHQH9iNKaKdpFYF25Mh1I7JseM - LQig0vZH0pgkWi1F2yLO75sFx5CJcPIuO4n2GdShO47HHXiBkKUSjSHO+HsA6/BcWL4/O/5aVX3/dKm1 - AkDk/OPaWToTb4FNbX/ozIdAX1oInZUkm/IdssudZOO6SCzJ/4G37nfIyuTgSjySKq189F6mN35PuMNI - iE7F7qd/imeh4IYrYL6RLytHfBEp/J3oeKKbT3Q80gTQAoAU5XvRj0kNviPF+J0T8tbeqDnnHfjWQwWB - aP4ACcehA6YT01pwUIq33nDgviKmH63U99cW+uAMxd0m3z8etTYA0M45xZwuJYl8AYwHHwPj+efCeEQh - pG6kplYjwPhxyMEbX1DbQWrwTmL6GrKFa/+Cv+YT+LY6aDLTZztpFv+9E/7tr8OzbTtd81QYDpuHwnmk - FgfDVZkAgUwNTLS/tSaAFPc7scBAivl5ODDI+Am+109GzYAdoRV34cWRSlCIpViOtujV6Jt2wI2b8STZ - H58h3PHHaRgtea/DjFFrAoCw2ppkj5p6w3jUrbDcthf0pwOpOZESpdqEbGTVM14P2b0D8pZKSIUl0JVq - v5PseyRxPNUBSXQ8lgmQPPMjqAMkAwJkTHgehnPMGDgWIXzfQXad6jEbt+FwTGn0zfMZX8HndKZngeC2 - 3iLfv9XV90+XWgsAaD3wRiup4jfD3HckCqbokMJW0GEnTAwA3LyBEFltIEuuivAnHcZPxPDJAEIqmX+R - x6Q4GkAyYJAMCIj3O+D/tSdqL/oMPi7CIZhRwkCch+FkradT1iuCdNtgNw7CYt9mrPeqjr8NQNjuyckO - a6um1gAAWuY3EcNb7oK5/zBYpxErpu09jgcAgvl9mkq6nOHXjphfrNKLxuzJMH2mZ2QyzsBoJkDyTJ8c - CEQck1+E67GBqL/DKTzxZ6AbJuEFmMj+zwCdNNPgPGyVfksppNpi6LYUQ/qVtI8vVsH9r/Xw//A7/AwE - 2nqnuyUYtHQACGN+agWDYDpvKqxzjOoKvEacOD4A8KzxBLL5apUVc2ouvPg82mvk+3jH4h1PZlCSOR7L - CZhI5Y//GjpHPCBwQd5xPeqvqYHsOtVmPGz6fEffLXvJ+2diRlZ/K2HQcDM6efToTM9kT6WWgrrikk5f - +yf83zwF1+OL4Fr1p7r7stYfsFsBQUsGANH3IPNfQDb/g7AuLIK0R+NPHiskFpL+6mZ6qvTvqEnXSUbi - N4X0jxyoWMcyqwHEdgpGvt8G/8YaA0ruu95RsOQyF/zp1fUJIx2pZJeONuGozw3oRM+EG69iLFZyFUL9 - 4l2RfoZ33TWou+lj+Hn3H22t1t0GBFo6AIhiugUHQbfXU7AtbA9d6ptCRD15bAAQ0l+smitVnNe6hBK/ - qU2A5NV/9crRnICR6cfJ2PiJTAHxN/tP5lzgxJSbHXCbM3PPB76kx8VTTehMaMLSvwNNkXKE9lHQ3gtn - N2yC/4uhqO3/Dvw/oXk3NG0WaqkAIJ6lsm6mQllwY5t1FPTnZeqeogGAVvqLTTS4lt6eCaR/Y0J/qczE - VJyAqYQBkwGBZPwB2u/x1T7Z34s+99diS0Vm+K1gO9B/mBkH/qmq/h2J+auhLlCKtYRaVkoC+T85H7X9 - NoS2Nt9tQKAlAkDYghtCgKLZKLjpMphvABIXh3QCbnrgW7fAX7cdfmedGotmJNHTRDHQSSWy54303kSm - hIXzCOhvM0kQpfacWj9PcfxJuwIVe4oVH3r8jL/GgUD8uZgoYpGY+dWrxNIAkn2NBwLhoUDgzwo/LiXm - /3o/X2ZmIZ305DkGnPW0UVH7OxPL7xGooJyogAqNr/xf+F7phdphf0DmMGFz7GrcLNTSAEDr9DPTG9sQ - mC6aCut9OnUPvpjEWXxr4f7qdjje/gsyJ4LE2rVWO1eCa1ro5MZq6ApoQjEgWAuAkmNh6DICloP0cTL+ - Uon/J2L01AdLivgbMf8WYUDt8cYzf3R/QL1JxnUT6vF8D3fG7rX6OwlXjjJjrzqV+dkno5Zak8LWJcQi - nh8fwb2gD+rG7wyFCls9CLQkANA6/Zj5rX1gPO0BFM4zIuGOMPJb8H47DPXP16jMzzMvFsprtVWd5lU0 - xedAb2zLUdj7dJj2TsX2byj5G86vxsy46Ha/FPd78ZyAjWP+hqaARyfj4cucmDzKkRGnH5PeBVww0YTj - 3jcEpL9OCckWaaR/MuSH7J4Jx63T4VzqDd/UtNWCQEsBAC3zKwtuToX+4KWwLSNVPWHceD18v1+BusW/ - QeY0UK5zwbk7DADRc9HDmT+YXRhonFtgOxr6fZ9G0WC6vpJrkBoIZJbpEw1a+DEpxueJw4CpgkCkKcD3 - /fqxHlw1vQ72ggzdJA1c5zd03p5TjN72Xp2/PfS+9pD85dDJZJrpzPTMyHwzFCg5Iom3U/dA3jkJ9iEP - w/W6L3y9QqsEgZYEAIL5LQdD2ms5ipaQjZdwschmsukGoW7Bx/DxUlAuUMnqHaN7rHXpsTQAEW4spAMl - s2AdcDnMp6bL+E2dAtxQ/Y8EgvR9AMkcY/phTz8uebAWv7fPYBbuDnisN2K94Xuu6ivtJCm+nR5WPZll - nmLFlwMLaQKFZ8HUZTjMR5eSGZfolPWQfx2J2oEr4f1Ujr1oqVVQSwAAwYAK81dDavsCbAu6Kktt4xOJ - esf1qF+0Fp5PoC7/5CYAQGgATNrF8FKUJnbw4slTtDd0+6xG0d2V0FWKH2tfG76PzfiZiACk6/1X/w7J - 53R8AMkyfw2NXN/7avHRkRksvsNFCpbhF8zDt5CV0l68yo+fsSjwKUoWmOmNeQBMh85A4dmFAYduPNoM - 37fno/by7+D/GbG1xRZPuQ4AgvkVj38FpPJlKLz3GBh6J+o7L9u9A/an58H9BtS6b+zdFQAgSvH5YlxT - iri+KPDJK/xKb4Clz62wjCTm0cXP+ovO+M2RAhzfAaj65hujAcT73CPJGHuTHYsvzZzTT6FfSaMbgX/S - 02XTTrsRiSvwDfHc2Eyz0iQqHIeCk2+G5XQjpISLwzbA994FpAn8kloloxZFuQwAYeE+4ryiR2AdfzZM - 10hJrOxbBNer4+FY6VVLPvPEYABgByCnfmqrW0UzASJfhfQvKQHaPYuiuQfBcAQQnbGTZfxMA0FqiT/R - brZxGkC0z3mAnzjfhbFj7fA0eomPhrx06hn4P7yo1Pj7O9D4OQsPfjBaBPXZcYHlIvqjdAas5wyG+YTE - PgGZt2Vb1wt1Q3+Dn8uHtbrwYK4CgJb5zfQUC++B5frBsNyqQ+K94F6E56MRqF/mCE0KIf2Z+UV12mQf - JPeDpy5PoLITYTj+SdgeE3X+gNQYP1OrAJN5cMnF/8NDdg2PJX6NBQTc94+7eXHFrDrsLMkwz3yJvzAS - qwnKOY2XG1f5YSbV7kIktjPkEDHvq8JbiZUSGlQuga3PuTAenHjVpyx/Ae+TF6N29OZQefNWAwK5CABa - u1t5eNfD3GciCqYbVCaMS2/D+/kQ1C2qVScEMz+r/6wWCts/1QfIaqSyuQe1ihkouPFKWIbGYv70cwAy - N3iJjsXL6lPfJ68JxMv0+6vSj8sfqMP6fTKU7CPITQA+Cs/iC3wNda0/V/kRW3tpnQzBdSIImG9Ql4eX - 0ZvqF1E0+HAYOyW6HD1b33twz++L+gk16c2hnKVcA4CwWD+1gj4wnTgL1oXmJNb1fwjvt/1Rt6AmxPzC - KaSWtU/djhNAxBKktC2kTjRpHm8H/b7JMH5TrwNoHPNH5gEkBoF46j8n+1x7Zz1eOdWT+Vm2jlh/Cp5H - qNAHawAM9NoKv2HOY4Q0AJ5H7Lyt6Aipw5soGd4euoRziwuZLIHrntGwP+APL2TSokEgFwEgGOs/FLr9 - yN5eUgGpa6Iffg7fTwNQ99jfkEXNN54QrBJy6E94/bXrv5PtD/dF2eK7O4wnP47CecQcrFo2YP5MLAaK - dzxWB5P5LL7tr161IdOnBwKc7PNgfyfuu9oJf/rFvKNTHT3LvngYW8g8V5mfQSDaxp5aYRKpBVQGWsWR - BOYrUDSgbaCKUzzyQ7Y/COeYO+FY5m0lIJBLAKBF7IL2kNqtgO2RA6A/JcHvyEbz/W8Y6hf+D36eEOz0 - Y5tfMD+HhLSSP7VdaVTpUUKdq7wX1lv7wNw/mq2fLgjEOtaYQYx3LHkNQLw2BIF4QMCRuXUneTCSpL89 - bnJ2GsRdfBRv4AllY88NSLyxZwONEqopx5mjvFuzAgInw9BtEWx9kgEBL+Sae+EYNQPOVY3Y7ShnKFcA - QOv0K6B5U7oAhRN6wDQ0UfFOkvy/XIP6Rb+ozC8kP08I9vgL5k/nIWnV/7IySB1fRdGCdqSVAI1n/OaO - ACSnAYjX0PF4zM/9/76zDwPvq8NvHbJQco839rwaC0nWc2xeSP9EG3s28ClBNQUECLShVn46DActgO2y - augSFpJxQ95yO+yD5sH1ji/9+ZUTlAsAoGV+E72x3Qhzn9tQcK8OkjHeAhmS/L9cjfrFxPxc820bojN/ - umoa94knDNuOFSdAf+xTKFpEBw2JmL8p6gCmm/yTugaQvFNwa7Efw6bV4/8ymewjyEtMdjuewz/xL4Rq - /LGvRyzsSjRcwagSVBBgRmfbX2gC5T1hPHwuCi+qhC7hBqQ18P88ALVXvAkfOyKFhtniCo3mCgAIFc3a - E4Zj5sG2lP6okAL549Ho3/D+lyT/0t8gsxQQzK9V+xNtPpGIhPef1cKKcbAMHwHLddqTxXP85UIEIHMa - QGIQcOtlZYEPV/bJyqx6H+uVjT3diuTXbuyZbIXfsLwShGsCiikgaUCgAjpbohP+Dt8nF6Ou/3fwcbXh - Fpko1NwAIOx+xUnTDlL16yh6tl0gxz8WALwP77ck+Z/YApntP5Hlx8wvJH9jmZ+JQYnDjqXUubYrYbv/ - MBhOTEXqp1oSLN7xeAOY6HiyGkCiikDRTAEmtvuf7OnGxLF2eA3pDHUCqqFnOgrL8D2+AoIbfERW+E12 - uIRjV93YOMInQB+WnQfDYXNhu6hNEprAenhf6Inaazaqq0xbXKJQcwJA5MMoehrWKWfBdJXoVzQAeAme - T26EfeUOyKz+bUdDh59g/sY8CCEpFO8/iYKOn6LkWQskniQJVf/mcgCKjsf6O54GEKsseDR/gPYY/+rf - B3ox4MFa1CZklzSIL7AMH+JRevRy2O4+bOqls7Gn1tnMGh5Lei0IcCs7HYZunCxUnkAT4DoCr8A16zLU - T0EoxbzF+AOaCwC0jhkFia+D+fw7UDBXj9BGkBEAIK+A+4MxsK+qVzd21Ob3Z5L5Rf94crCKWNEDxn/M - R+GCVFT/XHIApqoBxA/7hb7Dfd5S4sfFj9Xif52yZP7+Ss95JJ6kJ/4t/cXOvw1Qnz8/73Q39ozMERCa - QDlCfoGyf8Cw35Ow9W2TwDHIdQTuhWPQXXCuRQtbQtycABBcXrs/dHutQdGKCkidwr+kAgBBqmcWnOvm - wPmWK+Tpj2R+4fDLhArGk4NDRkrM+EZYrh4FywggNYbPVEmwRAMZ71i6GkD8mL/6badBxtUz6vDOP7xZ - mUkSVw2djrfll/BP+pOXc3PhThH2S+T4S2boooGA0AQUMDgY+s4rYLtiT+grYt0id8IFeWtf1J7/BrzC - KdgiVg82BwCExft5ccYzKLz3JBgvjvblrZB33Qb7c6vh+RThKr9gfrG2P5Ppmaz+s5OonDpb9QqKZu8H - /fHxmD9TPoBEn2fe+x87ChAPBLz05oEhTjw82Jmxyj6RA9DpA53PPUF+7m+3/AHY3FY1AJb+HH9vrMoh - bkULAsIxqDh+EUgb7gRd+2WwXX449B3jrR34Db73z0VNvw2QWUC1CKdgUwNAWDiG3hSNhPniiSiYqUP4 - HvA0av7/wPvLzcT836prspnhBfOL3P7Ghvpi9ZEnhBL+o462/RIlqwogVWbC9s+U5I/scLxjiZlf7Uky - 9fyZeFa/eLobY+6ww5n23kvxyUxPuM8NJvy1Xn71TXiepkPfQVX/hfTPBEUDAWXVIELrBhRzoApS1TwU - 9j4Dxv31MVYRkrbqXwPX3MGwT3GrC4dy3h/QHAAgVH8bIeoBT8O2pBJSZ+2XSM13L4frw2lwvroTMid6 - 7EBI6rO3VVvVJ5WVfcn2MWj/HwF9t+dQ9GyyzJ/uYqB4x2N1MtHxVDWA+GHAUB+/3duLq++rx1/tsjSv - 6Wke8aweF842cd3+Tx+Ba6qsagCc8x8v6ScdigQBfvaRIKBoAnSgcjKsZwyA+ZiCGEVFyGqpuwP2oXPg - Wofwlac5SU0JAGGqPxlbbZahcMYJMF6o/dImyNsnw/HC83B/7lclvWB8fi/W84vc/mzkYov0X374bfrB - dP5dsN4NxFf5Gyf9G+8CbJz6H98HoP395jI/rp1Wj88OS9f/lpiK/5Qw8Boz9tvK+y3glwlwjCZB8A3U - nH/tct9MUTQQYHOAQUAsIOJWShphaR+YDp8Caw/SCoqjmQQb4f+uD2r7/Ac+zlfIaX9AUwFAZBJG0XUw - 956Egvs06/vlj+H9jlT+Vd+rWzUxs4syXsz8wtkXWdAz0wMr0n+VVWO3wnL9cFiuisb86Uv/8C5nzgEo - ZVwD0P7OYZJx92gHnuntTpCgnT5J9FTPmmHEaWvV+v5V0G0bjrqrf4Kfy7qxbZ0NANDedrCMGEJ1BEoR - 0gb4teR46PeaDus5R8DAfoGw0eDQ4NtwL+2LunF2de7mbH5AUwJA0Ot/EPRdn0XhEnq4yio/Gh3X43C9 - MQvON3dAFst3BfOLQp7aMF82wyz88BX7n1qb52CbdhgMp2bGBIjG/uGU6IaSUf2TAYJUowA+Scayi12Y - NtoJbyYr+0TcfLuvSPpfb0Znjx5dlK29dN7BqB9CwoEjAQIAsqlSC01VFBPhaFCwmAjUKIECAmS6lt+O - gtPIJDjWGFghKsgP2TkTjlFT4VyRy8uHmwIAtAk/BTSiZQtQOOk8GAfyhxvg//VuOFa+BM/6QC12ZniW - /kLqC5U/0tOfrYHkh64U/6DW5iMUL2sDXWcgeeZPlvGz7wBMZbPPcA1A+30Oxf77EB+G31uPmkxX9tH2 - i57u5deacMTXBnTW1Pe/H85bH4BzJVQnMM+HbNvUAgS0S4lFmFAAgQICNKltF8PUbRqs57eJWE1YA/9v - l6Ku94fwfo8crS7cVAAgVKrCvjCe8SAKF9Io6FbD/co9cL78O/xis456qMwvHH1C5c+Gsy9WX4MOwDJI - e76H4tUWSAXJqP7JMH6mkoCSX/0npawBRJ6HK/sMeKQOv3bMLt8duFaPS6ealF19uhDvkfQnFJawAq5H - RsB+P1QAYKGQPQdE+FCJuasNEwq/gAACBgXrAdBXz4a11z9gOEA74t/Bu/Z01FxTp2qzOWcKZBsAwhx/ - nSBVvYXitTQKpkmwP7IKnu8D8RweGJbyzPTa2v3a6r1NoT5xf4MJQKfAcPR8FD6qrkpUKbnXxIyfSh5A - ooeU2AGYDAhEDwO69DKunVmP90/Iwgo/DVmIPQb1N2PfLXqF+dn+5409bdTWwP1if9TfjFBhV09WOxM+ - VJEJQ8IkENpASeC9lZCh4GZYThiFgnNNkMzqqMr+x+G8+SY4Fss5uNtQNgFAnFuxpWgEC5agcDz9UTkG - 9sV/QGamZhWLEZEZnaV/HRqq/DKabsD4QSvr/6m16Q3TedNQMJluRUl1SewIlKMca/g+2t+NHeRof8cD - gmQ0AN4F+f7hTjw+MEsr/DSDcfKDBpz5jBG8rx+r/ryxJ2lgpH9L+Bm+/5yBmiFb1fUfbBpmuL54UkMs - 9oYQZcZFqFCAAL9ncNCfDkOHmbD23Q/6fdhBSONYcx5qz/gAXg5l5pQpkG0AECqU6TQY2u0D6ZAF8HBC - hzlwnElIf3vgVevlb2p1SawAZG9vm4EwDRiPgusFe8SW+skxfibXACSb/JM8CIRrALzC7+UzPBh7px2+ - bKzw01AVb+w50oy96lXHn9jY0wpJeSA74f/leNQM+C2UEObMbo+iUqRfQBslEFoAzx0GB105JP1EFHS/ - AuYL6EtFv8H37pGoudSpCrmcyRJsMgBASH0yBY5JgUHgweAHKqS+1k5q6gEKrgCk1uZ+WG86H6ZL02H+ - VJOAEn0mBjSZ44kdf9FSfkNOQO7H+r29GDanHtsqsvsIdPTEe4014ph/8caeKgCw4684IP25R27IO47G - rj4/wc/Cg/NCHEkMVzYo0iQQICC0gaLA3+bA99xnwtB+GqxXkzZw+HI4x46A4zFkZrl6xm4o24MlAMAU - GDRDYAD5xlnKuxGy9bVbdjfHwHD/RASgajlsdx4Fw+nxmD9Ti4HSHeBYfycLApEmABMn+1x3Xz2+6ZZ9 - X9u+r+lw8d0mdPao23rvqTj+dCQtVOkfgCTfsai55BsyBaACQKazAVMhrUkgtAFhEtgCjQUdz3MeVHcV - JPlWWM69HOaeQ1E34DV4GchywiHYFAAgqvwaAu/F0hG+eR9CjK+1i5prUPhhsjrHFWKqXkTRg/tAf6i2 - QyHIluNoBSHKtAmQvPc/MQiEJ/6oAGA3y7jrFjvWnueBnI1FPhqybgUuG2VCt1/0CvOz468tNXb8Gahp - t2cehNpBK+DhXAAGAFajmzu9VmsSCG1AhAuFFqBDSMt1nA3DnoNg3n8o6hfXhtKExeA3201k89zaQdI+ - T8FHws5PReWPN6/jUSwhLGvOESwBRq36LRQvbg9dx3ATIL7Kn82lwFIKf6cKAtwLH71d0teFOddmMdlH - ED3x4xYa0GORER1lXdDxV07NpJH+oneTYb/lXjhXo2lDgYlIO8dFqNuCkLkrTF2h6TrbQfLVQa6rzZGK - wk0BANqmJb7pZBlfew4d/aM7AvqyUuj2KoXU5RToK23Qlag7B6lpmT7ILjqpizcJraf/v4OvZgPkWvq7 - xk+vHJKh0a930fsf4K/ZoUYllBLg1MrpTbs3UfwkTciyaMyfaj2AeMcbM8Da11jH478K+S/j3eO9GD/Z - ntVkH0GVP0i4fLQJ++xUvf7C8VdITSstRA9nwzFtAhyLoAIARwJyAQC0w6l1EAonoQkhjVdou65Ay4lq - wk0RBox1jWT4IVKLMPSA8dhhMA/tBP3JNMJFJMHI5kpaWWVTwyOrzcev9AS8uyA77JB3ctsKueZnAotN - 8PtvREFfskUtaicTq/yZWBGYysDGG+hUQIDdfz929mH0zHr8nuVkHyY9Tf3uU4w44U2Dwvgi468k4PjT - RXFSzoPz4Zthn4PQVm/pJCakoymmcm5h8gogMCCkBQiNl/stQtytGgASnT8ZqR+0sdpDKpsK68TDYbhS - l8QegakSd4Z1shp6t50UE05GIC1DsUXTYf5kTIFkByLWQDZO8odmZa1Vxqh76/GfIzK8h18M6vKeDpfd - ZkJHn+r460AXZcefqjOHgpFatW8xnE9cD/s0hEq/ix2AY91amOZJ3Kg7GrqCdtDbTMpW4VJB+CIe2Ufi - uX4jfDvfJwHgaaihJiuwmMS8FU07qsL31RRp7QmpqRYDpdOv4IKMDtC15Yw8khanZ6vP/ATYtcwAsIOe - C4PBYfTs9IjP3MmYAI0FgWwxPxNv4zXrOiee7OduktlgIuP3shEmHPyjXpH+HPrjjL8iasZgZEJqwMHL - 4HxhOOyTaFLsoL/r9qRjp8PcoRDSHjRJ2tBzars/dFzCq5Q0iRITdKV0rEQXaHo6ZiRBogucUopyt7yK - j01GGoka4tA/auD/cj5czz8B5zs7Gi7rTVZz1WmOid8JcGnOiFdYp3KJwpwqJPmr58H2cBfozsrmRflJ - cHB5F73bQc/DTe1Q6oJ4eqmsBWhMLkCyAxTtvfZvCYmZn5N9XjjXgykTHery3mzPBrrxI5fqce48kxLu - 02b8mcO8/g0B4GW4330N7g/6w3J8V+i7WiG104WSybLZZdIG/V/PgmPcg3C9401+m7l4fth4U6VJKdcA - IIz5Sc8vuRfWSSfBODjbfeUnaqfnsEsxAWTlb5ImwYSFVLSAZBk/laeebOaf9n08EGBav7cPw+bVoa4I - IgqYVSr6ExgwyIy9a9SQ355Bx59Q/WMDwFYSzH/BbyBTQVcSAIymnLwElo4VcE+5DfXzd6jp6slmqmbT - 79BoyiUA0CYOmUl9s10P88AhsEyR1DhrVomfZH0YAMgBAJCSZv5sO/8iByve+3ggwLStxI/rHqzHD/v7 - Qx3L5mygy3SfbMQJrxsCqr/q+CsNqP7aGHE0ANhGJ/iDWkXAWWhpYgBQh0j2PA/X7Otgn+ZULcZMFqJt - Fso1AAhuEXYC9EfNgW2ZSY3JZ520ALAtAACHUHe06bHiNVVfQLz3qQ5QrL+TBQEml0HG5NsdeK27J9wy - zeJsaP+phH6jzOjoV5m/A41tJV2wICLmHw0AmLYHAKA8ABrNAQBMXOhjIZyTJ8Axz5WDq/tSpVwBAKH6 - K8UX9oC0x3zYFnSG/li5icaVAaAuCQ0gGdU/05mA6ar/4jXcBS3jqcvcmDPKGb7IJ4sAoCdxefEIEw79 - TlX9O9K4tg04/gwNpH84CIh7YAD4XQMABc0EAEweyDtuRf3AxXC/jfBaFS2OcgEAxDNX1luzx3Y2Ciaf - BtOgeJuDMpHEdrwFz/c/wb/xb/hqN9Pf7kCCiI1MCZokBpIuEk00UyE1Uh0LiqGzWuk6JEHMxZAs1Iz8 - mYU0D/qhiSDdSEDAuxJLAgCYUmX+5EEgNRMyEeNr30eq/3ylD47z4PYpdtRG7nWTRQDo9rwePe9TM/7Y - 669m/Kl2fGTGn9YRqL2HbQEA4AIhpUrIsPkAgGkT/N/2Q22/T+HjzUpyuvBnPGpuAAiz+6kVkt1/+dWw - zGS7Px4AkFBxjYd91dvw/OCLvTGIFKfp6KJ6uqiB67kR+phoMlrpg0JqtmNh6DgBBUeQhNJFY/70GV9u - 8FmyA6V9XPGkvvbGtfRrBx9uus+O3zpHEVZZAoDCTUDfq83ouink+KtS8v2hGFiRGX+hv8PNgFwDAB6w - n+B79TzUDN6ork/IicU9qVJzA4CIkyp2/6lk98+C7RmjuiIPsQCA47Wz4VyzGK4P5fDKQckAgC7Gq9gN - SFnaeTz0ez+IwnMIHPSpMn8sxk8lByDWg9FCQLJmAFNNoYwJd9vx8XExtvHKBgDQOU++14BTVhkVxmcA - aK/J+NNmyGgfjri7iCiA/Af8UrIA4IPsZyFhh+zmVkO2OzUXaXceJ31Gk8VP772c8MPnYW2RtcYO0Nn2 - gr6CzIzCRBDD1X5WwT1jKOpn+kOl6luUP6A5AUBr91u7QNdpCWwrSDXcJ/SF6ADwEjwfToCdq62KUuFi - 8H0xrqNl9EjmF+/ZBGEAUEo9HQV914dQeBlNVCUCkQzzJ8P4mUoBlhr8G/vVTRD20AgnVvR1x06azgIA - VH8l4dIbzehSr+b6c6sMZPwJ6a99QPEcga/A/dNKuH85Dob2ZL75a+B31tOtETO7yRR07oJcv4NMQAIK - O6nnDnrv5qSeQMo3L/Tw+wPvA42lRXAhGF1Dx3kFJAVMxPzWuSjs0R3G/RKBAG8MOh32/jPUjUBa1Mag - Yuyb67rBWoFtIbV5DIXzu0B/aviXGgLAL/D92g91s+rVTULFFmGimEi6GoDIPRDVXcoOhX7fR1F4NfsK - ojF/fOkfn+nTmRnxpX1DINAm+6zr4cHUiQ744gVTMwwAemKF88YYceTHhqD057BffMdfbABYBtdn16L+ - JYQvI5cjWuTK0ljvIx+Ddj6yNmquhFTyAor6HQR9h0QgQLC67VLU9nwH3q8QXsou56k5AEDr9DPTPyXT - UXBHd5iGRPYnEgBIZasdgvpZ38HHZZbF7sACABKZAEzRtABtfzglhusBlh8AXdcFsI0tiFIROL70j18k - BAmOJXo4sVX9hiDAPfn6QB9ufsCO2kQr/DIJAHSurq/p0OtuEzp6VcnPYb9ojr9kAWABnO/cCPsaqM9Z - WzwmGvPHek0EAKK4h2IK7gVdu3UoGtIO+lIkoG3wf3ERai/9Ej7evThnSn4loqYGgDCnn0FJ9rH0Hwwz - J/uYG345BAA0oqRqOZ54Du5/yqEtwgUAxNt4IRIEYgEA90lsD92GHv7eZJJMtZItmBzzJ2b8bK4AjAQB - vtamSj9uml2P/+2TRIQqgwBg3Qz0HmXCARv0Ssivo+L44wq/uuDSuFQBYC6ca26DnesBOBGqGxkp3bWv - saR/LPVcuweAqPpbfBoMBz4JW/9C6OJug8pmxTfwvNQbtddsbkFOwaYEAPEsxUBbL4XxrLGwzjWrNfii - /EAFAF6yuxDOtY/Atdan7g/HACBKRLMPIFbp8GRyZ7T94ofOfakiO7DD87A9Wgyd4pBMlfmzlQKcKOYv - /uVtvO6cbMd7pye5ajZTAEBP4ejH9ThzMTv+VOZvH4jdh+f7pwYA98Kx6E44WAPQmnyR6n88tV+78Cba - PBGVfRgARLXfMvqg7FqYT74L1gvIdNHHH0LZtxruudej/u56tZ857xRsagAIouzB0B8wF4WLKiB1jf0D - iW1YeS3c790Fx5Mu3ncR4N2CxZpwzsnOVGEF7hsjvwIA1KpfRNG8tqQGpsv86ZoAiSMAsR1+TDzTFw5x - YcnQFMp5ZwgAyn+UcNlIE7rsVBN+9gw4/gqBYF5lOgAwEfaZs+FkR5vw+0QWj40n7RNJfyBU9pslPc8D - xRSkVkGoUDkD1l6DYTkx0RBxpuATcN0xDvbHHC0gU7CpACDM6VdNzEXMP/sAru+RgL4ie/9G1M/bDPk3 - hJhfqP6ZrK7K/RMA0IZa9TOwzdyLgCoR8zcmEzDZwYv3XnuMr/HOyR7cdZcDbnPCU4f/sJGzgSv8nnWn - Ece8xY4/KZDxp4b9jClJ/4YAMAx1tzwN9zsIaX5aDUD7WKIxe+wgTWgItfko7AMQuwLzXKishNR+OZkC - x8MYU2AJckPeOR32EQ/A9aI/xyMDTQEA2sG1EAKU3oWCsefBNByhsG9U+g3+P4n5H/0v/D8gZPeLopCZ - jrtyX1hQKT4AatULYJ14KIzHR59J8Zk/EyZAKuq/oF86+3DTXDu2tUlxSBoLAPT7jh/ocPFtJuzpVRN+ - OgRq/BUog5s+APDZT8Cuq0gYfIqQ9icAIJ2hjTXcwhkstABRIFZpXaHbi0FgfxjaJzoZ7ws4BHVXvg4v - VzIWTsvG9jHj1BQAIKqjMLLahsF08UgUzJJC24JHpa2QtxHzz/8Cvq8RkvzM/Bz718b9MzWgPBYCAPiB - V09GwYhzYOrZUMSEZ/OlawKk0rFof4d7/GlwSvwYd78d67v5U3+yjQQAIxljvYeb0O1HVe0XGX8i7BfN - 65osCHgg1x2DXYN+gv8bhMK/2dgeTKupKtvYQ50Pykax1CqPhH6/pbBduSf05YlOtokA6xLU9v2KBBly - NDKQbQAIc/p1o8FbjMLnCyBVx/tRPWQ7q/3/gu8zqA+cGzO/cPplI/daTQjTAMBAmK+8Fpb+QHLM35wO - QKWyzxgnXu7lSe+pNgYA6LeHPK3H2XOMitQPd/zpGiReRIvJxgOAncRAJ6DmGtIIf0TjagImO+TCISg2 - AxVzQmlnwHDwItiuKIXOmmBY5M/hWXU+akfUh/Y0zCkQyCYAaNHUWkyq/7MoemoP6I6N9yMaIfdE2Bet - g+dfCEl+rcdf2P1MmQYARn1lY1Bq1efDeN4EFIxCYD1ANLW/qUyAeMzPyT4rL3Nj/ihX+tt4NQIAOOzX - /3IzOtlV5t8jWOhDxPylpACg4TH1dz/A+3V31I7aDvkPqPOB50K2qgJrQYAFl9gWXAsCFVfAdOz9KLyY - hFlcTVZWndh3Dkb9bG8OOgWzBQBh9hQ91KKpKBhDdv/IeD+ikfFOg33Zs/C8i4aSnz3+2dxSifvLD1MA - QNWJMBw/A9YpkrIeoKHkT1b6x+potOOpJf+okPTZ4T7cMdOO+qJG3H26AEDy7LQpBhz/qiGo+outvUKO - v3AAEP2PBISGZoL6uzVw//NK1N2GkEBgH1A2y4JrQ8PKIjWEgwCbA+XXwnzSnbCebw6ki8cZWs/NqOu7 - EO7XkGNOwWwBgNbuL7wQxjMnw/qYXlWpohJJfs/DcD6/EK43EC75RbhPLPjJ5sCJnYGUrcGqIXVZgaLH - 6KApHsNnKwqQyPbn8/2xhw+3PWDHnx0bOSRpAkC7TyVccgM7/vRB6c8LdrRbe2kBAAhxV7IA8AScT14H - +2yo86KpdgYKc14jBAJs+wtNoPxmWE67DQVnGxPkCLghb+qF2jM/gvcX5NDy4WwAgDatktMpO5G99BRN - in1jDw7c8+BcQ8z/ul99yELyi5hvrNV+maawvQGpVb+EokfKIFWlyvyNAYFkbH+mugIZ0yc58NGpGTCH - 0wAALvTR6zoTDvpWdfyFMv60FX4bhvQiAQCIDgrid1NhnzkNzmcQmhdNtTeg6JIWBER4UDEF6AvlE2Hp - fgMKTo+XKMTD+1943zgTtQNrIOdMpmCmAUCr+heYlDx/66SzYLwq1rWIs92PEvMvhetNmsZkTYZJfpHm - 21SDpd0dmAGgaiEKJ/HOrkB85s92DkDk4Hl1spLo88xV7szs4ZcGAHRboUePB43o4A85/hpW+G0cAFDH - /D1RO/pdeN+DCgCcA9KUuwNHRgZEeFBJEuJGH1ZMIi1gJCyn6CHFfBqcKbgW7vuuRv10Z44sH84GAATR - 8mwYT7sH1nmmwPr+SKIRcJLkf/EJuN7yhiR/NOZvqk0UGcEZ5YPJQDfAPOwSmC9oahMgltRXzyPjvVO8 - mDElxWSfeJQiANj+AnqPMGGfjaGwXxs6gVUT9ssEADgg7zwdNdd9C9+XCCWBOTN018lSWCIbwkFA0QTo - MVQSCPS4BpYT42kCBNc1t6J+0BK4X0fIH9Bs5cQyCQBhqj9NhvaPo/CxvWGIWtePy3k9COeqZ+F+zxdK - 8hEr/Njmj1zj3xQoyf1nP0UwFNgTxnPGKJGA+OllmYgCxHMAau3+DZ18GDvXju1VGRySVACApuuJ9xrw - j9UNHX+mqAk/6QPAr/D93B011/8NeQPCk4CamiLXC0RqApV0sPI2FJw1gkCAq0zFOtHf8H1OWk2fH0P5 - Ac3mD8gUAGgdJgX0puRWWK7pD/NYrQdd0C5CwSmwP/MmvJ/61YcaTe0XA4MmHBwRChQAUHUAdN0eg212 - ssyfDQeglvnrye4f83A9fjwww0IjBQBgx98FY03oXK9K/z0gtvaKtdQ3fQB4gwTEJagbL4fMQ04Ey0YS - UDKkzWsR5gBHjYLmAFexHg3Lybeg4AxLjOgAVxJaB8/DQ1E32a4Ku2YzBTIJAMLrX3QE9Ac/gsKlNuja - BW44+MU/4N84AfanPoPvO6hMLzL8hLdfrPRqjr3TtaFAxRFIN9XuVRQtMCW9LDh7DkCfJGPWeCfeOD/N - ZJ94lCQAGGjGnj3GiEM/NQTTfcXWXokq/KYDAIvhXDIa9nlQTcTm3hpcGx6MpQlU0Idlw2A+fjKs58TK - E/CQELyRTIFlcHPUS7ucvclvKFODomT7kf5cOQeF04+F4aJQTX31vj6Fd/14Yn5S51j12R5oIs6fjuSP - 5SNLFIKPdz5RF0ABADrQ9lFYJxwAw2HRtAAgNT9A6JisuWjDxxDthtb2dmP+Tc70k33iUZIAsN8aHc6e - YVIcf3tqHH8WxMv1Tw8AqEu+K1E34SV43kQoBMhCojlLcMcCARYaIm24nO6jtDdMh82C9cKSGBmDG8kU - 6EGmwIZmNAUyBQDB3Ol+MPa6DdY5ksYR4leKJ3revQv2NT71IXIT9r5I8onG/KH5wfPLqGzWZ1Su14Fs - 9YNRRVcto0dRBC4b4IYdW2mifEL/OkmT8CnnE36EZKMIojRY0BF4LcyD+8DcK31HYOrPVAsK/PvPj/Dh - 7pl22G0ZeGLRKAkA4Iy/i4ab0PUvvSL5OwQcf4VRHX+NB4CdkLeci9rR38L3LUIRAJ4nzV2DPxYIiGSh - isBrGWnDXRbBdlln6NpEAj0/1xfgvn8Y6qd6mskUaCwAiGemJPxUQeq4EranK6APLpnkvP55cKxdCvf7 - flXNF8zP70VRz1CGXyHNJaMiUCzYi1Srg9GFju1LQ7oXjkRHGuI9SdfoqOSbxOq/h8D1c7yDt7GajMh/ - 0xXExBHhxHgTiB+qcAQqAHA6DCfdDus4aJ5Oco7A0HNMbwWg+tef7fyYMLcemzpkcV4kAACJIPSYhww4 - +WmDkuzD0l8s9TUh0Uq/+AAQPRFIIo3R8+XZqL3REyoCE2sVYHNQNBAQeQLCL8BzqJRrXs5GYc8eMHbT - RYQJvZB3DUPdJSQgP0YzmAKNAYCwmD87/ibBcsMl1BC4g7/h23gPHM+8B+93ssrsqsQvoRu1EBNyhYgu - hJwH05yyEVMbqR1OrQ39bSTtUq8woD7tHjKj/w8f4iE8SFoBWSDKBEqUV8APKGxNQKmSEWibbQzUBxT3 - F5v5k68LmOhB1BMUzZrowL+SreyTLiUAgMrvJPS+jpDXoQs4/tSlvoyUiQt9JAYAcWktACyF88lRsD8K - 1QEo1oPkUsHNSBDQZgwKk4Abb01efDsKThsGy0lWSGHB2//B+z4B3ZUbSeNBE68abCwA6AM3bTsUum5L - UPQ8qYIlrPJ/Ce+3U+FY8X2JfzsNhQnt6HvH0L+VpDnuS/Ongo5aaA4ZFCbTxbxCJobBTYy/FouxkObU - TsKlUHZhNJtL+DOCKcH0xx5zUThxH+gPABJpAeFrBoD0HBFKtw0ylg11Y1V/N+TGwGAyFAcAdDRS3ccZ - cfi/QtK/KuD4S67QR3IAoG3EAZ6BqLvzRXhEajgDAKvJWUbClEl7OzxvxNqBYFkxqGBQSl8o7AXjAffA - 2msP6IN7XvKqwUfhGDcejsfk0KajTWIKpAsA2sQIKxnNJUthe/hg6M+pM8C1qovr88cPdf648yBi9q40 - X5jtC5TBSO16/9/elQBIUR3tb869YGGXFRZYIGA4PEC5ongiHngAiqABVERBEFBUQAFRicYjXKLgrySK - 8UARNd6IUeNFIgbBIwYkRI6oKKAC7u7szt1/VXe/nTezc+5Oz/bg1Pic2WF6prv61VfHq1eVLgCA+j0B - /BNvYBEWYDc4H5u1ibw7S/7VyIzA8quQN2YU8kbEDwRG3yoc+TqZm8E7/N49y48HbnbDm5/EwY3nT/S7 - Q+93ftuKIfOcaB8R+Gtohd9kAOAH0oaDUTl1h7YFWPj/mUoBTpUE54QlIKoKiRWClvrg1wW9YWt3Lwov - 7A17V4vakkBNENp3PirP/hCBbYitnAw78VRJbPZRtf+FcJwxvnX+o+tO9NvWDPK6Nh8RQLBITQnXqDF5 - sOllAfdz2ojb6fEVOLDE8Qg5JVOQyAisiwP0ga3/fBTeapFahSUj/ImSgGLIHP7bPYC7FtTipzYZsnZj - AICDbKWRlzvx691a4K+9Hvhrpgp/slV+UgeAD+Fffy6q5kIz/4X/74F5zP9IkkGAFUhkhWEBAqxYCipg - aT4PhecOh5OThtR8gU3wrR6EqikIFbo13BVoCADI5k6hpTf6njbQvmzzwEC3vZyZFmtGN/TsjLj8b7EF - s3EztoOrDbFpKRgufo2vj29e3dbgFrB0Xo6ieWWwtosn/A3V/jL9UBbEHffWYle3DCq7GADQZ7kNAx9z - qIJfoWf8JRf4azgA8NncipplD8DzLEL+v0gAMisAQOKg2EAkBwdZ8IUVwKCQR9rTfgXyes9CwagSWFuR - 1eebBdeYP2lpwiIgaOgkSBUAxOftZBy3wFWYjLMxjeyAsrjfZDYAYNpDNsBMzCEQ4G4uwr8UqCviAHzT - RD5A2xnIn3QWnAOTFf5UQEBcqtehYNHtbnxkdNAvkqIAQPEuCy4a70RHl7VO+7dKOvBXHwCSBYxaKK5h - qLpuIwJ8b+T1f1NsoU2C5OCgiAuI6kIMAMX63076kNIP9lbkEkwgF7oPuT5bzkDlef9DUAQEDb3mhgCA - hcS9JXnSS3AExqhLwInIjABAZNuL70+eaH/DsQ/77LActOlpySTUBwl+D+5D0P0VgrZazRVofTLsJ96C - wuv4zJIV/mRPX3zHqis9WD3Bm6BcqgEUCQAEg6fPsaPP+/a6Nf82eo0/Z0rCnzoAbIH/3yejakYwtPwn - dgCa0f+PRbKhExkXaK4/a20S6boIEZT5KBo6Cs7xf4FnwQTULEL8hjdpO8nUPl9I938h7kIfTEeyHZpN - CgBM7bZaMHF6PjocUCe3QmZZ0MZ7UGm4oSiV9PwTgtWEzJUHoXjPhKNLMayOWMLfGADYcIIP8xcYlOmX - zAlId7PD+1YMucWBCp8m/O30ZT+exalp/9QAgE6EBMH9CI2VCM//N7P/H4siXQJmHwu9sAYK9ff4c376 - kHs4HN0JCK69CtVT3oWf0+UNjQWkCgBWjMCpZDq/pkJBsmRiAGDq9JkVV8zNQ8f9mobLg1bG2k8/XkOj - kgYJP9mhipqBdDiJQEN3BsZiz+72Qcx7sCZzQb9oJ6HPBgeJ29Crnei+3Spl/FnVwJ89ZeFPDQC8UDzn - omrKJ1r2n1wBSF6tiTdv5X+Lx8xMbjADQoFzsZFIAAG/dujnw8Lu7glr3jjkdZ+L2rXu0IqAIeecGgBw - a7c/4F6cgmtTOs7kAMDUeZMVY3+Xh04/CjNXI+Y+A8DPBMIMAHwH+9P9EhZ6MkCQiAXVRQruWVCLLX2b - ao8LQgBAzz2ftOG05XZ12U8E/lrSSC3w1zAA+BL+zSeiaiakDlAkIR4CHyupUIdV85tZYFij2umc7MfD - VtAe1ub5sBQ5NKEKc2YIOar2I/jz2/D/REhS44NSRRadWwnXrEbPtMikIbFKkKe/Zvbw+TAI8LQTPRAN - 3RiXGgC0JiXwGF4hW/C0lI7LAgBgOvxjKy67gywBHQT4LrHacelWAANAFY1j1E631pSsgFgs4WSfR6/3 - 4K0Lfemp7NNQ0gGAA3/DrnWg8w9aR1+x1beIRrw1/2hZfakDgMJdgNd8iMDGX5EWJKujiO5Ds46wFHeH - rYhAoIWDBheZpc8X0nMzS0RWXYJLrCVJ2kdg/tWb8L62FJ5XdiD4rT+8SKeRM05ml1gqFEOwR4CAVxom - AYBylOAJrEExBqR0XJYAAFOPdVaMuScPFQc0k5fviptOolp3A3hw0csjVTfAknBzUKzLF0HEt4f4sOJG - D3zpquzTUOIVXJpmJ91jR/819rplP97qq1X4tcYV4FR3AkYb7HK9Q3O/VO0naFH7CkRWGEonkbvx9Svw - PDgP7hV7oHCeQSaq9Ua6BMKasUn/FoSme3gYWhQnNZ46SBEsxAocj9+mdFwWAQBTz7dtGLXAiXZVWlsr - tRAHoMcCguod6Uf3LE8HgIa4APz3tiMCWEim/4FU23gZQXQKbTdYcN5sJzrUhkz/UIXf+IKcDgDYSfN8 - F/GXE41K9QpD7CCL3zbmspXAJ/CvGgPXTT9C4eVgsfaeKZdAAIEMAGIa8XkEYBoAYH9lFD2uIxCwpLBJ - J8sAgH/zmDdtGD3fida1VtU+41lRpcYCNCvgcGgmcrTNQYkEn8ePZUEsml+L7UeZY2WLA3+DZzpw5Oe2 - Ou0vMv60Qh/pB4Dwvf8KPiAuM6/L9FTjZghfcjSKGAT+Dv/T4+G68ScovOSYSRAA6m+MDJ1aCAjE34ac - QLLkQAuaGwuwlBzhIUkflW0AAG2h/9g1NlwyPw8t/RraufUYAAMA37E+JBr2CCsgkfbn124n+bqz3Pjg - XL+xMztZopPq9oIVZy52qIG/9nWBP7nCr7EAsIfm+L9I0bHpz6OF3lTUoTPIaDYRCPjfhG/pRLjurA5t - OsrU3nxLxHOUOxT2nPYfTpZYDorRCUdhER5EB/RM6qgsBAARjjnuaZv/5AccB0thcXIHGDqdvGooVrYE - jlZ9VVtM4Y8UfBXKCVleGePFM5O9CDbFen8UKtgHnD/RiS57Qmv+ZXrGnz0KADAl3+cvMQAwfUSOFbtW - h+navxjh5cUzQX4orkWouWEhvKugBd+aAgRikSnyAPjzWtHMX+FY3EuPduie8KhsBQCmIBT7s9hquR8b - rIrqi9kcxAOSXWcv2NpMQ8FxdrXwaXwXQAT9Ng3w47673fAWNNF1RRKBXP+ldpzwjBb446h/Gz3fX2z1 - TcYCSLQEGM9K+IFO4lOStRIp+FeE8OYimSKy8vZeDddFr8LHjWkztiuvqaghvGW9xcqhlGbLEVhMDkEn - UobxvimbAYCJ9+auxCYsx3p6zVpBDdzQR5x3o+C8HrC1FysC8ZKBvm8bxLyHa/BzmUnmE51G6VYLhpP2 - bx+W8RcefDMSAPgkPiKWsqTJwT9eFLFnyPyPZAq5IxvPRNXF30HZg/S3oTcVNYS3fAyDgNZAoy264Q+4 - k/7fN6EH05BfMgMAMPlJ9FfgfTxO8zVYV5ba0R+2rjehYLhVr4EYCwRq8hTc8VANdqa7nHdjLpGuYvAN - Dhy10aZrfy3w1zxC+xoJALsR8H2GgJVMfxtr/5K6pT8Eg6GhkHnOCT2Kl16Sg+6pglJzAMEafu2C4quk - UUv/Rpek8Gufzn7SVHYCFGc5rIVksbXtCltre5zuPYI+hO+R0aieUx2+C/GQA4GGgisfJ/qnl9LjV5iP - 35MdMCDqis2hAABMHpoID+F1PId/6gVH2QrIJytgXDfYO0dbDmSz30fQ8NgNHvxthAHlvBtBnd624txb - HKrWb6/X+Its7SWX6GoMAEQT/gCUwHVwvbMNQTcJZ6sCWAJcQ9IDxUMWgbuaXru01z4SdvcBKO7K8Nz4 - WJ6XTCLpxk5WTf4s5J8whUYiEKAv8z8N963TUfuQGdt6p4saMx1lEChBK3TGdfQ4HeeS7Rge3jpUAIDJ - TTCwEM9gLTbSNGTT0Hk0bN1uQ8HVFn1SCcHX1m8UvHWBD4/f6FV3GZmFeNnv/HFOHL5bE/52er4/m3XR - C300ZBUg/jGkZXdcguqXXCFfW2TAiWU4IeiywEd7L1YcVpya2I2XTyBQtAyFQ4bDeayoxhOL6N7V3oya - Kx6Gdw1M1tY7XdRYfSTcAQ0E8mguTcYEjMRoNU9G0KEEAExVqMZirMSb+FRfoS0kzTK2Lxx6E1GlbpZs - PSqAexfVoqqkia4jBh37kA0nPW6v0/5t9GW/2Pn+6QUA1vITUf3UG/BvhSb48hBl3GVhjxT8aKAAhM8Y - /qnIgp1F5GqU/QXNLj8KtopEKUbkVuyejOqRr8LPtQmaqmGNYZQOg1SAgFZBx4G2uAyjMBZXEcuL1E8c - agDAVEmP27EC/wBPYFtHWDv+HoXTaJYVilm5r3UQixe68XV38/j9TC22WzBssgMdK236mr9FL/SRWmuv - xgDAq/B+NAWup72ajy26QbHwR9P+qQh/JACI6lVyea4Wx8LW5Tk0G18Ka/N4vFKDtwh8OgJVo7ZB+QaH - WFAwXR6pQFpmcjHBQTmG4jxcTS5BC5QekgDAtB8HcCuBwCbs4hWB0XCeMwzOM/mUqwkGHprnxienBEzl - 93Pg75Tb7Dj2XXtYxl/8Cr+WJIQ9+eP2I3jwYlQv/kIrgMkAwIk3ojdEsgIf+RqIPlsEAKiNayCV674A - jn7LUTQmXiNP7UsV5VMEXrkU1VP2aunCmWpXbzilc2oKEGDTn1dyDsNvcBJuwRy1FHhDv9HMAMB0AAcx - HY/gS3zfApaWc1FwZVuLpf0LV3rx0pU+48t5p0gV71kx+DYHKryhjL8SfdktVr5/ojTgVACAG2M+APfz - d9FA/Yawso8tzKZIXz+a7w9E983Fz4qW9aKFl9rDj/6hbCbyz7wJBeckzsJRAu/B99CVcN1WGV5DMqtB - IN26STBcbRIKZvTh6IW7MQ8d0aNB32Z2AGDaix8xBQ9jN6p6w9ZjwIn20Svu8Dg8RU107jHISaI2eJoD - 3f4TWvYr0wN/DsQ22RsLALLFsBn+/w5H1d2VvAIYKvcl92lgihfcS5RwGUlyIQ7RtENt5w2tpXfrpSgc - eSHy+ifiXwCK+zHU3nozPH/0y92sshgEjDJOhdml1dZvQzBwJ27D0WQTpPKb2QIAfI7fYA+ux1OW5iiy - LcFYf2kKFZMyQXSORz1hwynL7WinhJb9QhV+lThr9umJAXDgbzQJ/3oEOMuOC36Ict/sAoiOONG42xgS - Py9Kcola/QIEDiMelD+OoktPgr17oqCgH0rVLagd/zA8axECgXScZ5OQkd6pWH7R6usX0ZybgxsxCOcg - 2Z2E2QIAgr7GPtSSadidrtVkVLzDgvOucaDTfq3IR9u6Cr/azYgEgMYHAcOP4Vp/98H9zAK4X0Co1j+X - ++IYgGz+G0HxXAHu+1BGPOmwCs3GHQl7+0S33g1l9wRUj1wbvjKQA4AoJJjO2rCl6nJOxeW4COMIGhKX - wMg2ADApceDvhLvt6LvWrgp++yitvRoDAMlo/w/g3XQJXPcFNOEXrb5Y+8uNWYwuxCGUEgerRUCwTAxy - 37r+GUWXdZDadsWib+H/+AK4LtmJ4LfI4pWBTEzz8GVCm7pCMASTcQ15YyUJj8wBQOOI+NduvQWD5zhR - 4dESfsqlfH9rXeQ/PgCkXgsw9F27Efh+BKrmfwOFW7KJSr+y6Z8p4RGBarEsyCDAc1CAQKvTYe+5DEUX - t4G1ZaIv+xf8z/0W1dftg8KWTFauDGRqmsvLhJxvUo5+OA2zcC2po4q4R+UAoFHkqATOnO5Aj3/bVOFv - W6/QhxDYWADQuEKgZC7XTkL1A3+DfwNCpj8H/kSp70xvuZVBgC1TDgoyCAh3oPRs2I9ZiqKLWiXOEVD+ - Avcdk1G7JJil6cKZnObCEuCYAKNtxZGdrWNrpmPcrn5BS8wjcgDQcCLe9VhtxcD7HWirhLS/CPyFJ/3E - CgImtwIQLWjoh+JbiNpnl8OzNqA1+RBlvuXkn0wLjAwCopOvAAFhCZQOg6MPgcBIcpPibtwOQqmZg5rR - j8D7DrIwXTjTAFBnBXSCpdcU5P9fTUt0eulaL/51dqB+VdwcADSKinYDQyY60eknTfhFcw9R6CNceGNb - AA0BAF7vXwHPG/eg9nlvSPjZ9OeuzLyO3pTBs8iVAQYB0cpbrA6UjoSj/xIUXViYoPJwJYI7hqHqnC+0 - eEBWBQUz6QLwUFcFiJutZiL/zl6wX1QNxfJDXhBrx/qw7nJ/+IaZHAA0nMgmHXCXHX3X2FSzvx1hLwf+ - ihGe8ZeMC5B84K+Obcor8H44GzUrq4HvEAr6sekvsv6aWlPKKwMyCHBL+Fb6KB0BRz+yBEbkw+KM9UW8 - 8+NzBJ4dgaqpB7WchqyJB2QqCCi0v5qOOQSOoZOQdz+X1+KZwHX399sUrDvbh1dn+uDPl47MAUCD6LDP - LBg61YnygEVf87epGX/1C32kNwZApLwB3wYS/qcOQGGNyD4/a36R8GN4v7sUSF4ZiAoCFh0E7idLIB4I - cGffZXDPuAPux012jQkZkInfqMvEItuq4gEUrSZN1FXkdbLN5NKLbb7Y27v73fn+UjQnVyEHAA07dZp6 - 50xwoNtWDvxZVO1fFjXwlygGkHwGoO69KW/B98l0uB6v5D009YVfLPmZSTvKICB2DIa5AzoI9E0EAlVQ - dl+MqmEbEPgPsqScmNHTXDb9C+hFixnImzkIjmvkD/FsIMgMvkZm4xPw/j3YBS1xNy5AJ1JchypnDKSu - z1kxaLFDDfjFD/wlcgGSBwBO9CHh33QDap5whbr6Rgq/Wf3jSBAQuwblmEDJUDiOvR+FF5LyKoxe90bB - FgRevQDVV+3nwkSh7EazXW/YhRv9/cL0b3YMbL3vQgFNT4RlydfQf0/C89qr8K3Xl1MCaEMgcAsuRV/0 - 1JXWocUZg6iARG/YFU502B/a7NNKLbGt9XGP7ccnBwDRrAcO+P0Vvo0zyed3hZb6hM/PEX+xecbMabNi - rgp3IBIEeJScBfvRS1A4vA1sLaNNEXIFvEvhvukuuB/LhqVBI6e5mC/qeiv9r3QJCh7pDNsp8of2Qtn7 - INzPf4zAF9CSQxg5PerxzckXm4GxOAOD61UZymbOGEWkW3+z0I5+L9nqov6tYY251TdZAIgXA/DQhH8U - nreWwP26X9P4IsVXFn5Z85tSEBC645EFRGQQ4NhASX/Yfn0fgUB32MqjVRWqQvDrMai++EME/g2TuwJG - TXN5mYUZWTwcjguvQt4S1LmLULYh8NVSeFbvQHAXtAnDE0dkiLHplEdHl+EqXIIRGE1/ZW6DTRYCQJuP - LRh8owPt3da6pB8utZ0PS9zGnpqQRwJAYvN/D4I/LUTtyy/D97GiCT9rfSH8bPaz8Jsh4p8sJQKBUn20 - 7AhLu8UoGjoQ9h7WKCDwEXyrR6H6+iqNF2aLe9S7YCO+VwT+mpXD0pHMptXkh3aBxgluxbT+T/C8TL4S - LxGx0IuJwxaAS2caf0czgpHWOBvnYRqmkjpLmKdtas4YRHYSt0EzHTjiM5ta4SdU4y924C++BRAbAGge - Bz+B/6t5qH1xK4Lbod07Ifxif7/Q/KY2gaNQLBAQewdUK4AHoULpbBScNg55J3DTGPlLyBVwE38mPQjP - SwitCpirNBSMmeZy4I81dvNZyJtzKhyT+H1yiqqeI8F/Cb51bm2isMAfREj4eeII34lJ1BYowwCciFn0 - aIOOWckZA6nr81acusSBdgGtxJcI/OXF6Opb/734ACA+T+atayW86/4Mz/sHyH1DyHLjwfdPDvhlm/AL - igQBnoMibVisEKiWAH2g+Ug4e92JgiGlsBbLX0IW0paLUXXRZs3CNWUA1CgAqEuu6ANbv1tR8CT9UfI9 - gjsegOfRzxDYpWioyJPlZ30If5Hfl1siy7UFytAFR2Ee5qIbemUdZwyiwu+Bwdc60eVbYfrLNf6SXceX - AaD+MYqu9e+D+6+bENgWCIE2DxG7YctNLPVlq/ALkkFAzGdVoUEDAVFajJ+LjoOt470oHNED9g7iC/jC - X4HnvkmoudMXShAyFU/SPc3l5ZSCAmLUXSh4sAdsgzfAv/Z+uFcdCEWE+bkSIa0h/MXIfuhyMJEjs6XE - /i4EAtPJIjgjazhjFJFR2WeZDcetsusZf9aIjL/kmnNGAoD8/k4Ev3sU7g/WwPdpTcjMlwffPxZ+GbxN - NdEbQZEZg3JxUQECDAiF7WEpmY/CIYPh6G/VS8T7oVSPRfXQv8K/CeEJQqYgIwCAGaVG/ofAfs545P/h - GXhWkMn/d4924QGEtL8YrDXkopCIwqTwAiMFqMBUXIHhuIT+Jf0rBFkCAKVbLDhnmgMV1ZFbfS1xavwl - tgD4eScC362A54M34P2iJhTVF6AtrDYWfBm8Iwt1Hgokg4AoMMogIKyBEv11IU3OvMnIH3AD8ofn6xuJ - diHw7vGoHO3T+Gaq3IB0TvOwDRatYCmbiby5L8L3+gYEvtXf54sW2t+FkNYQ/lEixtQlFUHUFhhGj+sw - jbC5mWk5YxBZSeROvsWOXuu0fH95q28i7R8DABS6Eb5NZOo/Bc/69fBv94aEvCrKEPEaUc/fsD72JiB5 - fovgoOwStNBf59OHLANhq1iMogkdYe3M/FiM2kn3wLMaJksTNgIA1KBJBSyt6UqdP5LvCFFzUhNy1hQ8 - aSJN/mQZIi8vMtMPw4l6cPCwBlYfNpozRhBx6rD3LL7Bcx2WDkGrtQJWa7ne3CPU2isRACjqiowLinsb - At+8Df+X78P35fdagQtxj1j4qyOG8PXl+3coC78geV+LHBcQdQaL9b/5fYVcMetCFI45G45zSeJ/PAuV - p24mdwomCggaBgDSsOsME9rfow/RCKIhJqO4CaEVgh44BrNxE7qjZ1quy+wA8DPxbjI+bbYDlSz8nWB1 - 9oK9eRdYW3IhiyJYnMR4LnivVuPmBpvE7ABH8Q9AqeRU1S8Q2Pctgvs+h/+bytAuPdZQtagPAMLUr0XI - ahMumym0WYZIxlCe66K6kMgXaKb/zfM+SMz3TIXzN9ej4PoN8L98OVyzvaFYSZPzzSgAEEMIPxNPFJ4w - kR1g0EAmRAYHW5HzezjmkkNwPAbRvzSuIr+ZAYC59TD+g0exGeGBOLXABjHFWkL+J6kiB1kDdu6w6yb5 - /5k0vSvkg/r1Icx3AcwCAGqk52iC/0vR+rFIzD+R71LXekwfTv3fVau3N92SpSia8kd4lq2Edz1M4jIZ - FQOw6xcv4k0C6cSkS2eUuC7dGLxCwNWHr8Z4DMfFdGsSFx7NBGfSTTtxEBPwJulkecMNC2kQoYkpeM8k - N9XgwfyXAYCFWgYA2QpwI2SxiWMSdeT9pZDsEoi4QIE0RHCaeeZuC4syGs5Oy+FZX2OSPoNGAIA8+WJN - wHRPHrn6cAu6HW1I/C/CREyiW9K8Qd9oVgDgdsOz8QY+wBaE19b36J+woT4AaEeGVmGiAYAMAvIQ1lpk - kPaXLvyC5Hkv4gL5+rOwAoTFJYPsIQkAMkPk747Vvjnd1xIeHDyDXIHrMYOcg7ZNypl00npspyt6nqbU - Hmh77hkE2D8PIKSNBAgkYwHIICA/i+CebK3lhD42ySAgYgP8LLZhCBAQ7lZkvkuTnXQmv8voC5WDgxyQ - KUNP9MUczELnFFuTmREAakk4J+Jx/FfV/typlttrsQsQTfuLTVeyCxZEOAjwEBNRds9y2r5hFLlKIGJg - YjZFgu8hBQBmITk4qPUnLEd3/A4zcQxOzGrOPI1/YBleo+myC1AHLymx+e9HaOLJ5f5kigYCYkJGc81y - Qt8wki1g+X5EA+IcABh4XTxEQ0hOH+6k9iEYiCFIpsCI2TizFwcwASvI4OeW2txg43/Qim+w+S8mUCw3 - LFZzzUSNNXPUcKq/iTIEAkymsLDMNs3TTXJwsIRetcGVGItL1dZkceu9m4ozHPibj1fxMt6DpvkZANj8 - F9o/J7zmpGRnUQ4ADL7GUGsyDg6eh7MwDTNQHKe2gJk4s4kE/kasRI0q+DuhaX8O/nE02XR7zHOUPWSm - aW70dYrahFpwsA+Ow624BeUxaguYhTMuEvIbsQqfgFtqs/Dvghb9540lpkgnzVH2klmmeaaulV0CkT7c - Ch1wJG7HLByBvvV4YQbOsGi/gA24Fy+SqLPWZwDg6L+I/OeEP0eNIjNM80xfr9hWrNUW4BIj09Xg4GBY - pPRhM3BmDw5gKh4jb38rQtqfq/CIdf8c5ahRZIZp3hQkQEALDhaRLXA5LsMojKkLDjY1ZwLk2z+It/AU - 3gTqlv14WzUH/kRTzRzlqFHU1NO8KUls5GAQaAk7ynE+hmASpqjlyJuSMyzan5LGn4EnUVsX+PsaWtqv - yPnPUY4aTb9kABDXLzoWF6vVtI7DSZiFmTGDg5mgn8nEvxZPYJu6209E/Tnwx0U4cst+OUob/dIBgEnE - BdTGpeAVgk44Er/DbPRA74xziE3/xViDF/ABNMHfBW3Nn4t0cOAvp/1zlDbKAYBG9QuPtiQLYB7m4HgM - hCVDfOKEn4fI71+J9+gVR/sZAESHXTb9c4G/HKWVcgAQTnJwsJTgoByTcSVG4lJ619nI745PLtLuj+Ad - rMI6aOY++/xC+HOmf44MoRwA1CeRPhzKHDwdg8gnvwZtUJF2a4C1/nbswSKsxefqch8v87Hgi/baLPyi - ik+OcpRWygFAdAoPDnJcoC1+jXG4BKeSS9BCrb3ZON5xL+n9qMZL2IjnsB4H1f39vLmHBZ9BgFttcZmv - nN+fI8MoBwCxSQ4OanEBi5o21AODcRpOxgC0J1hwqEV4kycfmfLfkXC/j814HZ9hl+rrc4CPs/tEa20u - 8cXJPjnNnyNDKQcA8UnOHBS94dTGkGQDlBMYdCUgOAadcTg6kqvQHEUEF/nkQGiNIgP08JAQu1BLHv0B - bMP/8CEZ/DsJAn5SBZ7Ne9EYVTTX5PdEb8Sc8OfIUMoBQHIkkobk/nDFEGWgrTS4JnEB/e0kELDpteCC - 9PDRw02PH0mw/XUFNkW5bbnTjmi0YZqa8Tk69CkHAMmTXPVY1IIvlAb/LQpBiqrIogCEXBJdAIA8RDdd - udR2jnJkOOUAIHWSq8CK/geiCYpcCFLuSyAXhJSr7/5Sm2vkyCSUA4DGUWT9N1EDzobwUlCiBpwQ9lyl - 3RyZgv4fwxUHs6QSBV4AAAAASUVORK5CYIIoAAAAgAAAAAABAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAoAAAATAAAAGgAA - AB4AAAAeAAAAFwAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABQAAABMAAAApAAAAQAAMAFgAEgBoABMAbAAOAGYAAQBYAAAASAAAADMAAAAcAAAACQAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAsAAAAmACMAYABqAKwAowDfAL4A9QDG - AP0AxgD+AL8A+ACkAOUAbAC/ACIAhgAAAFgAAAAzAAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAAQABAAPQCCALgAwwD6AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwwD8AHcAygAL - AHYAAABBAAAAFwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFQApAFgAsADlAMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AKkA6wAXAIMAAABAAAAAEQAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA - ABwAQgB0AL0A8wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AKYA6AAJAHIAAAAxAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAkAGAAkwDDAPoAyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AG8AxQAAAFgAAAAdAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAcALgB/ - ALIAxgD+AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AwQD7ACQAjQAAAD8AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACAAAADwASAD0AmADMAMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AkwDcAAIAZgAA - ACYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABQAJgBUAK0A4gDH - AP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8ARQCnAAAASgAAABMAAAACAAAAAQAAAAIAAAADAAAAAwAA - AAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAUAAAAZADoAbAC7APAAxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCv - AO8ACQB2AAAAOAAAABcAAAAWAAAAGwAAAB4AAAAeAAAAHAAAABgAAAATAAAADQAAAAcAAAADAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAMAAAADQAAAAgAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAABgAAAAYAAAADAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIABXAIgAwgD5AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wBlAMYAAAByAAAATAAAAEEAAABFAAAASQAA - AEkAAABHAAAAQgAAADoAAAAxAAAAJgAAABkAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAQAAAAOAAAAGwAAACAAAAAaAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAgAAAAkAAAAQAAAAEwAAABAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAACgAEACoAdACmAMYA/QDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AL8A+wAbALEAAACIAAAAdAAAAHIAAAx6AQARfQAACXcAAABvAAAAaAAAAF4AAABRAAAAQQAA - AC8AAAAdAAAADgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAFAAAACgAAAA2AAAAMwQAQ08DADYmAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgAADCAAAAAmAAAAJgAA - ABkAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA4ADgA4AJAAxADHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AIoF7wQAQtwIAH/kDACw8w0A - vvkOAML6DgDB+QwAtu8LAJ/fBwB2xAQAPZoAAAZwAAAAWwAAAEUAAAAuAAAAGQAAAAoAAAADAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACQAA - ABkAAAAyAAAASAAABU4IAH6YCwClogAAAQkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAJAwA5TAUAT3wAAAFAAAAANwAAACEAAAAOAAAABAAAAAAAAAAAAAAAAAAA - AAIAAAASACAATQCnANwAxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AxgD/BDlG/wkAi/8MALb/DgDF/w8AyP8PAMr/DwDM/w8Azv8PAND/DgDS/w4A - xPMIAHS+AQAXfAAAAFgAAAA+AAAAIwAAABAAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA0AAAAgAAAAPAAAAFcCACBzDAC40w8A5O4BAB8lAAAAAwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIVCQCJuwcA - ebsAAAxdAAAARAAAACgAAAASAAAABQAAAAEAAAAEAAAAGAA0AGYAuADuAMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8ApQ//Bwdr/wsA - oP8NAMD/DwDH/w8Ayf8PAMv/DwDN/w8A0P8OANL/DwDU/xAA1v8PAND4BwB3vQAADm4AAABKAAAALAAA - ABQAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAPAAAAJQAA - AEMAAABiBABFlg8A2vERAOz/BwB0dQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAoCACNACwCy9goAm+QCACR+AAAATgAAAC4AAAAWAAAADQAB - ACAATwCCAMEA+ADHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8DWDT/CQCD/wwAsf8OAMX/DwDI/w8Ayv8PAM3/DwDP/w4A - 0f8PANP/EADV/xAA1/8QANr/DQC96gMAOI4AAABSAAAAMQAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAEAAAAEgAAACkAAABKAAADbAcAcbYQAOj8EQDt/w0AxcoAAAoSAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA - ABIGAGiUDAC2/wsArPYEAD2YAAAAVQAAADoAAwA7AG4AowDFAPwAxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wC6 - Bf8GFl3/CgCY/w4Avf8PAMf/DwDK/w8AzP8PAM7/DgDR/w8A0/8PANX/EADX/xAA2f8QANv/DwDX+gcA - Z6wAAAFWAAAAMgAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAABIAAAArAAAATgAA - DXUKAJ7READs/xEA7f8QAOn4AwA/QAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAADCQKAKXhDAC2/wwAs/wFAFe2AAgAegCG - AMoAxgD+AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wJ/If8IAHr/DACr/w4AxP8PAMn/DwDL/w8A - zv8OAND/DwDS/w8A1P8QANb/EADY/xAA2/8QAN3/DwDe/ggAhsAAAAJXAAAAMQAAABQAAAAFAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAQAAAARAAAAKwAAAE4BABN6DAC54BEA7P8RAO3/EADs/wkAj4wAAAAIAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAACAAAADAQAQmMMALT9CwCq/wkThP8BnBH2AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMcA/wUwTP8JAI//DQC5/w4AyP8PAMv/DwDN/w4Az/8PANH/DwDU/xAA1v8QANj/EADa/xAA - 3P8QAN7/EADg/wkAicAAAARUAAAALAAAABAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACoAAABOAQAVfA0A - wuYRAO3/EQDt/xEA7f8OAM3SAAANFAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABGAcAc7QIJXT/Aa0Q/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AaER/wcEb/8LAKP/DgDD/w8A - yv8PAM3/DgDP/w8A0f8PANP/EADV/xAA1/8QANn/EADc/xAA3v8QAOD/EADi/wgAgLgAAAFMAAAAJQAA - AAwAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAwAAAA4AAAAoAAAATAEAFXoNAMLmEQDt/xEA7f8RAO3/EADp9gMAPjsAAAAEAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAYAAAAiAEAKjgC6CP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AxwD/A1U3/wkAhv8NALX/DgDI/w8AzP8OAM7/DwDQ/w8A0/8QANX/EADX/xAA - 2f8QANv/EADd/xAA4P8QAOL/EADi/gYAY6AAAABBAAAAHQAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAMAAAAJQAAAEkBABJ2DQC94hEA - 7f8RAO3/EQDt/xEA7P8HAHp0AAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIQBgAJIAwwD7AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AuAb/BxRh/wsA - m/8NAMH/DwDL/w4Azv8PAND/DwDS/w8A1P8QANf/EADZ/xAA2/8QAN3/EADf/xAA4f8RAOP/EADe+QMA - MnkAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAACgAAACAAAABEAAAMcAwAtd0RAO3/EQDt/xEA7f8RAO3/CwCnpgAABQwAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAACgAFACoAfACuAMYA/gDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AxwD/AI0A1wCRAdwAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8CeiT/CAB9/wwAr/8OAMn/DgDO/w8A0P8PANL/DwDU/xAA - 1v8QANj/EADa/xAA3P8QAN//EADh/xAA4/8RAOX/DgDI5wAADlcAAAAnAAAACwAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAbAAAAPQAAA2YKAJ7QEQDs/xEA - 7f8RAO3/EQDt/w4AyMoBABIVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAwADgA2AJEAxADHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCWANkABgN9Bw9y4AGrFv8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDE - Af8FLU//CgCU/w0Av/8OAM3/DwDP/w8A0f8PANT/EADW/xAA2P8QANr/EADc/xAA3v8QAOD/EADi/xEA - 5P8RAOf/CQCLuAAAAEQAAAAkAAAAFgAAABMAAAARAAAADgAAAA0AAAALAAAACQAAAAgAAAAHAAAABgAA - AAcAAAALAAAAGQAAADgAAABeCACBvREA7f8RAO3/EQDt/xEA7f8PANvhAQAnJgAAAAMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAAPABoARQCkANgAxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDI - AP8AnADbAAwAcQUARqoMAKj/CSqB/wC+B/8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wGcE/8IA3T/DACp/w4AyP8PAM//DwDR/w8A - 0/8QANX/EADX/xAA2v8QANz/EADe/xAA4P8QAOL/EQDk/xEA5v8QAOT7AwAzggAAAFAAAABCAAAAPAAA - ADgAAAA1AAAAMgAAAC8AAAAtAAAAKgAAACkAAAAoAAAAKAAAAC4AAAA/AAAAXAUAVqQQAOv+EQDt/xEA - 7f8RAO3/EADm8gMAPj4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEQAnAFQAsADkAMgA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AKMA4gATAHQAAAt2CwCd8gwAqv8MAKj/Bkxk/wDH - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wRNPf8JAIz/DQC7/w4Azv8PANH/DwDT/xAA1f8QANf/EADZ/xAA2/8QAN7/EADg/xAA - 4v8RAOT/EQDm/xEA6P8MALHcAAACfgAAAHQAAABrAAAAZgAAAGMAAABgAAAAXQAAAFoAAABYAAAAVgAA - AFUAAABVAAAAWgAAAGkCAC2RDwDh+BEA7f8RAO3/EQDt/xAA7P0GAGVgAAAABQAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA - ABIAMwBeALwA8ADIAP8AyAD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wCr - AO0AFwCMAAAAfAYAWsENAKz/DQCr/w0Aqv8MAKf/BHhA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/ALUI/wcNaf8LAKL/DgDH/w8A - 0P8PANP/EADV/xAA1/8QANn/EADb/xAA3f8QAN//EADh/xEA4/8RAOb/EQDo/xAA6f4IAH3YCgCQ4QoA - m9oKAJfQCQCLxwcAeb4HAGe1BgBZqwUATaIEAEGdAwA5mgMAM5gDADueBQBYsA4Az+8RAO3/EQDt/xEA - 7f8RAO3/CQCPiAAAAQgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANADoAYwC/APQAyAD/AMgA/wDIAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AsQH0ABsDpgAABJoAABOoCwCk+A0Arv8NAKz/DQCr/w0A - qv8MBqP/Ap0i/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AxwD/A3Aq/wkAhP8MALb/DgDO/w8A0/8QANX/EADX/xAA2f8QANv/EADd/xAA - 3/8QAOH/EQDj/xEA5v8RAOj/EQDq/w8A2P8MALL/DwDW/xAA6f8RAOz/EQDt/xEA7f8RAO3/EQDt/xEA - 7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/wwAvbwAAAYOAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAx - AEgAwAD0AMgA/wDIAP8AyAD/AMgA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/ALMM/wgc - dPkKAJL5CQCE/gkAjv8NALH/DQCv/w0Arf8NAKz/DQCs/w0Aq/8KGJT/AbQQ/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwgL/BSNY/woA - m/8NAMX/DwDS/xAA1f8QANb/EADZ/xAA2v8QAN3/EADf/xAA4f8RAOP/EQDl/xEA5/8RAOr/EQDs/wwA - t/8OAMj/EADk/xEA7P8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA - 7f8PANrfAQAgIgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAJ0AwADIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wC1C/8IJXb/CwCk/woAl/8IAHv/DACq/w0Asv8NALD/DQCv/w0A - rv8NAK3/DQCt/w0ArP8JNnv/AMIE/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8BkBr/CAJ7/wwAsP8OAM7/EADU/xAA1v8QANj/EADa/xAA - 3f8QAN//EADh/xEA4/8RAOX/EQDn/xEA6f8RAOz/DgDU/wwAuv8PANz/EADr/xEA7f8RAO3/EQDt/xEA - 7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/DwDf5gMANTYAAAAEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAIAAAACAAAAAYAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX - AAcAwADgAMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AuQj/Byty/wsA - qP8LAKf/CQCN/wkAh/8MALX/DQCz/w0Asv8NALD/DQCv/w0Arv8NAK7/DQCu/wwArf8GYVb/AMcA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDG - AP8EQkb/CgCT/w0Awv8QANP/EADW/xAA2P8QANr/EADd/xAA3/8QAOH/EADj/xEA5f8RAOf/EQDp/xEA - 6/8QAOz/CQCOzAsAp8YNAMTSDwDk3xAA6u0QAOz4EQDt/xEA7f8RAO3/EQDt/xEA7f8RAOz9EADn5gsA - o5wCAC0lAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAAIAAAAEgAAABgAAAAVAAAADAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgCbALIAyAD/AMgA/wDIAP8AyAD/AMgA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/ALsH/wcub/8LAKn/DACx/wsAof8IAIL/CwCg/w0Atv8NALT/DQCz/w0A - sv8NALH/DQCw/w0Ar/8NAK//DQCv/wwCrP8DijT/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wCtDP8HCXD/CwCq/w8Azv8QANb/EADY/xAA - 2v8QANz/EADe/xAA4P8QAOL/EQDl/xEA5/8RAOn/EQDr/xEA7f8IAHeeAAAAKwAAAgwAAA4IAAARDQAA - DRIBAB4XAwA8IgQAQCsEAEArBAA/JgIAJBcAAAwKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAAABsAAAAqAAAALAAACyQCACUfAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAACwAKgC9AOYAyAD/AMgA/wDIAP8AyAD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDBAPkEMUfJCAB3tggA - f6MHAHOUBQBMlAQARaYNALX+DQC3/w0Atv8NALT/DQCz/w0Asv8NALH/DQCx/w0Asf8NALH/DQCx/wsO - ov8BrRb/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AxwD/AMgA/wNkMv8JAIv/DQC+/w8A1P8QANj/EADa/xAA3P8QAN7/EADg/xAA4v8RAOX/EQDn/xEA - 6f8RAOv/EQDt/w0AxtoAAAA3AAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA - ABAAAAAkAAAAOwAAAEUCAClTDACupwEAEBQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACIAKwGKEMIAwgX/AMgA/wDI - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AwAD0AD0AaAAAABQAAAAEAAAAAgAAABEAAAA3BQBKmA4Auv8OALj/DQC3/w0A - tv8NALT/DQCz/w0As/8NALL/DQCy/w0Asv8NALL/DQCy/wonjf8Avgj/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMAD/wYaYv8LAKL/DgDM/xAA - 2P8QANr/EADc/xAA3v8QAOD/EADi/xEA5P8RAOf/EQDp/xEA6/8RAO3/EADs/AIAKFkAAAAaAAAAAwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAUAAAALAAAAEgAAAJaBgBfjxAA5PEGAFhVAAAABgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAHAQAVKgwZqewGXlrpAJgE2AC8APIAxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/ALgA6wA4AFwAAAAQAAAAAgAA - AAAAAAACAAAAGQAAAEMJAIPKDgC7/w4Auf8OALj/DQC3/w0Atv8NALX/DQC0/w0AtP8NALP/DQCz/w0A - tP8NALT/DQC0/wdHcf8AxgH/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMcA/wDIAP8AyAD/Aogf/wkAgv8NALj/DwDV/xAA2v8QANz/EADe/xAA4P8QAOL/EQDk/xEA - 5v8RAOn/EQDr/xEA7f8RAO//BwBskgAAACQAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAAGQAA - ADQAAABTAAAMbgoAmcIRAO/+DAC1sAAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAPBgBfeA8A - 0/4KAJXNAQsQcwApAGoATgB4AGsAiACMAKQAngDCAL0A3wDGAPgAxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/gCaAMEAIQA8AAAACwAAAAIAAAAAAAAAAAAAAAUAAAAiAAAFUQ0As/IOALz/DgC7/w4A - uf8OALj/DQC3/w0Atv8NALX/DQC1/w0Atf8NALX/DQC1/w0Atf8NALX/DAG0/wVvTv8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AxgD/BThO/wsA - mv8OAMn/DwDZ/xAA3P8QAN7/EADg/xAA4v8RAOT/EQDm/xEA6f8RAOv/EQDt/xEA7/8MAK/GAAAALgAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGAAAAEILAKXfDgDD/w4A - wf8OAMD/DgC//w4Avf8OALz/DgC8/w4Au/8OALr/DgC6/w4Auv8OALr/DgC6/w4Auv8OALv/DgC7/w4A - vP8NALz/B1pl/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wJ/Jf8JAIj/DQC//w8A2/8QAOD/EADi/xEA5P8RAOb/EQDp/xEA6/8RAOz/EQDv/xEA - 8f8KAJGsAAAAIwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAkAAAAdAAAAPgAAAGQIAH+9EQDw/hIA8f8SAPH/EQDw/ggAfXcAAAAGAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAUATGAPANL8DwDT/w8A - 0/8PANH+BwBmrAAAAE4AAAAqAAAAEAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAMAAAAeAAAFSw0Av/gOAMT/DgDD/w4Awf8OAMD/DgC//w4Avv8OAL3/DgC8/w4A - vP8OALv/DgC7/w4Au/8OALv/DgC7/w4AvP8OALz/DgC9/w4Avv8NArv/BIU9/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMYA/wUwVf8LAKH/DgDQ/xAA - 4P8QAOL/EQDk/xEA5v8RAOn/EQDr/xEA7P8RAO//EQDx/w0AvcsAAAAoAAAACAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAGgAAADoAAABhCAB3uBEA - 8P4SAPH/EgDx/xIA8f8NALezAAADDAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAADAAAAEQkAiJ8PANP/DwDT/w8A0/8PANL+BgBbowAAAEoAAAAmAAAADQAA - AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACICACJkDgDG/g4A - xf8OAMT/DgDD/w4Awf8OAMD/DgC//w4Avv8OAL7/DgC9/w4Avf8OALz/DgC8/w4AvP8OAL3/DgC9/w4A - vf8OAL7/DgC//w4AwP8MDLP/Aace/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AaIS/wgCf/8MALn/DwDb/xAA4v8RAOX/EQDn/xEA6f8RAOv/EQDs/xEA - 7/8RAPH/DwDV5AAABC8AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAABQAAABcAAAA2AAAAXQcAa7ARAO/+EgDx/xIA8f8SAPH/EADc3gEAGR0AAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAKHQwA - tdMPANP/DwDT/w8A0/8OAND8BQBKlgAAAEUAAAAhAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAGAAAAJgQAN3gPAMj/DwDH/w4Axf8OAMT/DgDD/w4Awv8OAMH/DgDA/w4A - v/8OAL//DgC+/w4Avv8OAL7/DgC+/w4Avv8OAL7/DgC//w4Av/8OAMD/DgDB/w4Awv8LIp7/ALwK/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/BFRA/woA - mP8OAMz/EADh/xEA5f8RAOf/EQDp/xEA6/8RAO3/EQDv/xEA8f8RAO31AQAQOwAAAAwAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAASAAAAMAAAAFgFAFKhEQDt/BIA - 8f8SAPH/EgDx/xEA6/IDAD48AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAgApOw4AyO0PANP/DwDT/w8A0/8OAMv4AwA4hQAA - AD4AAAAcAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAqBQBQjA8A - yf8PAMj/DwDH/w4Axf8OAMT/DgDD/w4Awv8OAMH/DgDA/w4AwP8OAL//DgC//w4Av/8OAL//DgC//w4A - v/8OAMD/DgDA/w4Awf8OAML/DgDD/w4Aw/8IRH7/AMYB/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8Atwj/CBFw/wwAsf8PANr/EQDl/xEA5/8RAOn/EQDr/xEA - 7f8RAO//EgDx/xIA8/8CACFMAAAAFQAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAIAAAABAAAAAQAA - AAEAAAAEAAAAEAAAACoAAABQBAA8kREA5/gSAPH/EgDx/xIA8f8RAO/7BgBnYQAAAAYAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAALBQBQYQ8A0foPANP/DwDT/w8A0/8NAL7uAQAdcAAAADYAAAAWAAAABgAAAAEAAAAAAAAAAAAA - AAAAAAABAAAAAQAAAAIAAAACAAAADAAAADAGAGCgDwDK/w8Ayf8PAMj/DwDH/w4Axf8OAMT/DgDD/w4A - wv8OAML/DgDB/w4Awf8OAMD/DgDA/w4AwP8OAMD/DgDB/w4Awf8OAMH/DgDC/w4Aw/8OAMT/DgDF/w4A - xf8GbVb/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8Cdiv/CgCP/w4Ax/8QAOP/EQDn/xEA6f8RAOv/EQDt/xEA7/8SAPH/EgDz/wQAO20AAAA0AAAAKAAA - ACYAAAAkAAAAIAAAAB4AAAAcAAAAGgAAABgAAAAYAAAAGAAAAB0AAAAuAAAATQEAHHwPANfvEgDx/xIA - 8f8SAPH/EQDw/gkAioQAAAIIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAEPCAB1ig8A0/8PANP/DwDT/w8A - 0/8MAK/hAAAKXgAAADQAAAAcAAAAEwAAABEAAAARAAAAEwAAABQAAAAWAAAAGgAAABwAAAAnAAAASQgA - dLYPAMz/DwDK/w8Ayf8PAMj/DwDH/w4Axf8OAMX/DgDE/w4Aw/8OAML/DgDC/w4Awv8OAML/DgDC/w4A - wv8OAML/DgDC/w4Aw/8OAMP/DgDE/w4Axf8OAMb/DwDG/w4Fwf8DkzL/AMgA/wDIAP8AyAD/AMgA/wDH - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDCAv8GKV7/DACp/w8A2f8RAOf/EQDp/xEA - 6/8RAO3/EQDv/xIA8f8SAPP/BQBFkAAAAF4AAABVAAAAUwAAAFAAAABMAAAASQAAAEYAAABEAAAAQgAA - AEIAAABCAAAASAAAAFgAAAh0DQC84BIA8f8SAPH/EgDx/xIA8f8MALCpAAAFCwAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAQAAAYVCgCZsw8A0/8PANP/DwDT/w8A0/8JAIXEAAAAXAAAAEYAAAA7AAAAOQAA - ADkAAAA7AAAAPgAAAEAAAABDAAAARwAAAFIAAABuCAB8yg8Azf8PAMz/DwDK/w8Ayf8PAMj/DwDH/w4A - xv8OAMX/DgDF/w4AxP8OAMP/DgDD/w4Aw/8OAMP/DgDD/w4Aw/8OAMP/DgDE/w4AxP8OAMX/DgDG/w8A - x/8PAMj/DwDJ/w0StP8Brxf/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wGWGv8JAob/DQDB/xAA4/8RAOn/EQDr/xEA7f8RAO//EgDx/xIA8/8HAGa4BQBJqAQA - QZ4DADeXAgApjAEAFYAAAAZ6AAAFdgAAA3IAAAFwAAAAbwAAAHAAAAF0AAAHgQsAnNERAPD/EgDx/xIA - 8f8SAPH/DgDQzgEAEBUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAABAhDQC31g8A - 0/8PANP/DwDT/w8A0v8GAFywAAAAcgAAAGkAAABnAAAAaAAAAGoAAABsAAAAbgAAAXIAAAZ3AAALggAA - DJgJAIjeDwDP/w8Azf8PAMz/DwDK/w8Ayf8PAMj/DwDH/w8Ax/8PAMb/DgDF/w4Axf8OAMX/DgDE/w4A - xP8OAMT/DgDF/w4Axf8OAMX/DgDG/w8Axv8PAMf/DwDI/w8AyP8PAMr/DwDK/wstmv8Avwf/AMgA/wDI - AP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wVGSv8LAKH/DwDV/xAA - 6f8RAOz/EQDt/xEA8P8SAPH/EgDz/w8A0v8QAN//EgDw/xIA8f8SAPH/EgDx/xEA7fwQAOT2DwDX7w4A - y+oOAMToDgC+5g4AxukQAOD1EQDw/xIA8f8SAPH/EgDx/xAA5+wCAC4uAAAAAwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgCACs/DwDL8Q8A0/8PANP/DwDT/w4A0P0LAKPgCQCI0gkA - f84JAIfRCQCO1AoAm9sMAKjkDACy7A0Av/INAMH4DACq/QwAuP8PAND/DwDP/w8Azf8PAMz/DwDL/w8A - yv8PAMn/DwDI/w8Ax/8PAMf/DwDG/w8Axv8OAMb/DgDG/w4Axv8OAMb/DwDG/w8Axv8PAMf/DwDH/w8A - yP8PAMn/DwDJ/w8Ayv8PAMz/DwDM/whSdv8AxwD/AMgA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/ALEL/wgKev8NALr/EADj/xEA7P8RAO7/EQDw/xIA8v8SAPP/DwDT/xAA - 3/8SAPD/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA - 8f8RAO/7BgBbVgAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA - AA0GAF5yDwDS/g8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w4A - y/8MAK3/DAC5/w8A0f8PAND/DwDP/w8Azv8PAMz/DwDL/w8Ayv8PAMn/DwDJ/w8AyP8PAMf/DwDH/w8A - x/8PAMf/DwDH/w8Ax/8PAMf/DwDH/w8AyP8PAMj/DwDJ/w8Ayv8PAMr/DwDL/w8Azf8PAM7/DgHM/wV9 - Sv8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/A2g1/woA - mP8OAND/EADq/xEA7v8RAPD/EgDy/xIA9P8PANT/EADg/xIA8P8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA - 8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EQDw/gkAiIIAAAEIAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAhAJAI2eDwDT/w8A0/8PANP/DwDT/w8A - 0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DgDM/wwAr/8NALr/DwDS/w8A0f8PAND/DwDP/w8A - zv8PAM3/DwDM/w8Ay/8PAMr/DwDJ/w8Ayf8PAMj/DwDI/w8AyP8PAMj/DwDI/w8AyP8PAMn/DwDJ/w8A - yf8PAMr/DwDL/w8Ay/8PAM3/DwDO/w8Az/8PAND/DgjF/wKkI/8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwQP/Bx1q/wwAsv8PAOH/EQDu/xEA8P8SAPL/EgD0/wwA - rc4QANrnEgDw/hIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xEA - 7fQIAH9wAAAEBwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABAAABxEKAJCcDwDS/A8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A - 0/8PAM3/DQCy/w0AuP8PANT/DwDS/w8A0f8PAND/DwDP/w8Azv8PAM3/DwDM/w8Ay/8PAMv/DwDK/w8A - yv8PAMr/DwDJ/w8Ayf8PAMn/DwDJ/w8Ayv8PAMr/DwDL/w8Ay/8PAMz/DwDN/w8Azv8PAM//DwDQ/w8A - 0f8PANL/DB6v/wC6DP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8CjCD/CQCP/w4Ayv8QAOr/EQDx/xIA8v8SAPT/BQBLagAAARIBACAQBAA3KgQAREEGAGhSCABvYggA - cnIJAIWCCwCjjgsAp5YMAKeWCwCmkgkAhn8IAG5dAgAgFwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAUAAAAJAAAACgAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAMAAAAEAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYEAD09CQCEigsA - orINALnBDQC6xA0AuL8MALS6CgCVrAkAi5oJAIiLCAB1eQYAV2gEAEJnCAB9sxAA1f8PANT/DwDT/w8A - 0f8PAND/DwDP/w8Az/8PAM7/DwDN/w8Azf8PAMz/DwDL/w8Ay/8PAMv/DwDL/w8Ay/8PAMv/DwDL/w8A - y/8PAMz/DwDN/w8Azf8PAM7/DwDP/w8A0P8PANH/DwDS/w8A0/8PANP/CkCM/wDEA/8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDGAP8FPVP/CwCp/w8A3f8RAPD/EgDz/xIA - 9P8EAERZAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALAAAAFgAAABwAAAAYAAAADQAAAAQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAwAAAAPAAAADAAA - AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAA - AAAAAAAAAAAABAAAACAGAFyMEADW/xAA1f8PANT/DwDT/w8A0v8PANH/DwDQ/w8Az/8PAM7/DwDO/w8A - zf8PAM3/DwDM/w8AzP8PAMz/DwDM/w8AzP8PAMz/DwDN/w8Azf8PAM7/DwDO/w8Az/8PAND/DwDR/w8A - 0v8PANL/DwDU/xAA1f8PANT/B2dk/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wGpEP8ICIH/DQDC/xEA6v8SAPP/EgD1/wMAM0UAAAAJAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAEQAA - ACMAAAAxAAAAMAEAEisDADcoAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAIAAAAJAAAAFgAAACAAAAAhAAAAFgAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGwUATHcQANj/EADW/xAA - 1f8PANT/DwDT/w8A0v8PANH/DwDQ/w8A0P8PAM//DwDP/w8Azv8PAM7/DwDO/w8Azv8PAM7/DwDO/w8A - zv8PAM7/DwDO/w8Az/8PAM//DwDQ/w8A0f8PANL/DwDS/w8A0/8QANT/EADW/w8A1/8PBNH/BI87/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wNgPP8LAJ//DwDZ/xEA - 8f8RAPP6AQAUMwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACAAAACQAAABgAAAAvAAAARAAAAEkEAElrDAC9sgEAERMAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAYXDAC8whAA - 7P8QAOz/EADs/w8A3PQDADqJAAAASAAAACUAAAAOAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAHAAABJg0Au9UQAOD/EADf/xAA3v8QAN3/EADc/xAA2/8QANv/EADa/xAA2v8QANn/EADZ/xAA - 2f8QANj/EADY/xAA2P8QANj/EADY/xAA2P8QANn/EADZ/xAA2f8QANr/EADa/xAA2/8QANz/EADc/xAA - 3f8PAN7/EADf/xAA4P8QAOH/EADi/xEA4/8RAOX/EADl/whhc/8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/AMQA/AAuAJUAAABCAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAcAAAAaAAAAOQAAAF8GAF+qEQDu/BIA9P8SAPT/EgD0/xEA7PIEAEM9AAAABAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYBAB8tDwDa5BAA7P8QAOz/EADs/w8A4PYEAD+MAAAARwAA - ACQAAAAMAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAaCAB9mxAA4f8QAOD/EADf/xAA - 3v8QAN3/EADd/xAA3P8QANv/EADb/xAA2v8QANr/EADa/xAA2v8QANn/EADZ/xAA2f8QANn/EADa/xAA - 2v8QANr/EADa/xAA2/8QANv/EADc/xAA3f8QAN3/EADe/w8A3/8QAOD/EADh/xAA4v8RAOP/EQDk/xEA - 5f8RAOf/EAPi/wWKRf8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AJwA4gAD - AGgAAAAoAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAFwAAADYAAABdBgBbpxEA7/wSAPT/EgD0/xIA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAgAAABIFAEhsDACy+AoAmf8JAIj/CQCK/wkAjv8LAKX/DQDC/w8A3P8QAOr/EQDt/xEA - 7f8RAO3/EQDt/xEA7f8RAO7/EQDu/xEA7v8RAO//EQDv/xAA6/8PANn/DQC7/wsAmP8JAI3/CwCh/wwA - rf8LAKb/CwCl/wwAtOYCACs9AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAIgDA - AOkAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AHcAygAAAFoAAAAeAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFQAAAD0DADKXCgCS/QwA - sP8NAML/DgDK/wwAtP8LAKr/DgDN/w8A5v8RAO7/EQDu/xEA7v8RAO//EQDv/xEA7/8RAO//EQDv/xEA - 8P8RAPD/EADn/w4Ay/8LAKP/CgCY/wwArf8NALr/DgDI/w8A1f8OAMz8AgArcAAAACIAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4ASADHAPsAyAD/AMgA/wDIAP8AyAD/AMgA/wDI - AP8AxAD8ACcAkAAAAD8AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAQAAAAfAAAASwcAasMMAKv/DQC0/w4AwP8OAM7/EADb/w0Ayf8NAL//EADh/xEA - 8P8RAPD/EQDw/xEA8P8RAPD/EQDw/xEA8f8RAPH/EgDx/xIA8f8QAOT/DQDB/wsApf8MAK//DQCx/w0A - uv8OAMb/DwDT/xAA4P8JAI+wAAAAKgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQABAHcAewDHAP4AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AlwDgAAEAZgAAACcAAAAFAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACYCAClvDQC3/g0A - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA - ESAOANLhEADh/xAA4P8QAOH/EADl/xEA6/8PAN/fAQAUGwAAABYAAAAoAQEdPAQLkpYHAGdlBwBscAcA - bHMHAGxwBgBhZwMNnKYAABE5AAAAIwAAABABABslDgDV3hAA5v8QAOb/EADn/xEA7P8QAOzxBABEPAAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAkACcAMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AIgA1gABAGEAAAAiAAAABAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwQAREAPAN7kEQDr/xEA6/8RAO7/DwDm5gQA - Sj4AAAAOAAAAJAAAADcADm2PAAtYawAAAAkAAAAAAAAAAAAAAAQAAAAaABB7mAAMYokAAAA2AAAAGgAA - AAoCACIjDACvpBAA6OgRAO/sDQDIvwQAQzcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAwArwDKAMgA/wDIAP8AyAD/AMgA/wDI - AP8AxgD+ADYAnAAAAEUAAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAABAEAIBkIAHVqCgCMjwgAf20CACYbAAAABwAAABkAAAA5AAMdWgAczuwABCM3AAAABQAA - AAAAAAAAAAAAAQAAABQACERmABzQ8wAEImIAAAAvAAAAEQAAAAQAAAACAgAmCwMALw4AAAcCAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAApACYAwADqAMgA/wDIAP8AyAD/AMgA/wDIAP8ApgDpAAQAbAAAACwAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAAOAAAALAAAAE4AFJXBABrB3AAABBoAAAACAAAAAAAAAAAAAAAAAAAADQABDzcAHdn5ABWk0AAA - BEwAAAAkAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAE0AxwD6AMgA/wDI - AP8AyAD/AMgA/wDIAP8AVwC0AAAAUAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB0AAABEAAg+hgAd2v4AEo6nAAAAEAAA - AAEAAAAAAAAAAAAAAAAAAAAHAAAAJQAXsNAAHdv/AAxhnwAAAD4AAAAZAAAABgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQB5AH4AxwD+AMgA/wDIAP8AyAD/AMgA/wC6APYAEgB+AAAANgAA - AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAARAAAAMwAABV4AGLbiAB7b/wALVm0AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAaAA5xlgAd - 2/8AHNH2AAQkbgAAADAAAAAQAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABQCi - ALUAyAD/AMgA/wDIAP8AyAD/AMgA/wB5AMsAAABbAAAAHwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACIAAABKAAxdpQAd2v8AHdf4AAQfMgAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAABjFXAB3b/gAe3P8AFqjVAAADTQAAACQAAAAKAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAFwC7AN4AyAD/AMgA/wDIAP8AyAD/AMMA/AAs - AJMAAABAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAMAAAAUAAAAOAACEWsAGsfwAB7b/wAZudQAAAAVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA - BiwAGsflAB7c/wAd2/8ADGKgAAAAPQAAABgAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEAAPADGAPUAyAD/AMgA/wDIAP8AyAD/AJgA4AADAGgAAAAoAAAABAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAAACYAAABQAA94uQAe2/8AHtv/ABB8lAAA - AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGwASiKgAHtz/AB7c/wAc0fYABCJrAAAALwAA - ABAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0AbADHAP4AyAD/AMgA/wDI - AP8AxwD/AEcAqQAAAEsAAAAUAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAQAAAAWAAAAPAAEInkAHNP5AB7b/wAd2v4ABztLAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAAAQAAg+XwAd2/4AHtz/AB7c/wAWptQAAANLAAAAIgAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAABgADAJEAoADHAP8AyAD/AMgA/wDIAP8AsgDwAAsAdgAAADEAAAAIAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAAACgAAABUABOQygAe2/8AHtv/ABvJ4gAA - BBYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAQgpABrF4gAe3P8AHtz/AB3b/gAM - WpgAAAA6AAAAFgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAOALAAzQDI - AP8AyAD/AMgA/wDIAP8AawDCAAAAVgAAABsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAQAAAAYAAAAPgAFLIEAHdj8AB7b/wAe2/8AEYSXAAAACwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAwAAABYAD3eVAB7c/wAe3P8AHtz/ABvL8QADGWMAAAAsAAAADgAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAoAMIA7gDIAP8AyAD/AMgA/wDBAPoAHgCIAAAAPAAA - AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADAAAACsAAABWABSc0gAe2/8AHtv/AB3a/gAG - MUAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAEI0AAHdb4AB7c/wAe - 3P8AHtz/ABOWyAAAAUcAAAAgAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAVwBSAMcA/ADIAP8AyAD/AMgA/wCLANcAAABhAAAAIwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAUAAAAbAAAAQgAHOowAHdr+AB7b/wAe2/8AGLfMAAACEQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAUl7IAHtz/AB7c/wAe3P8AHdv+AAlJjAAAADgAAAAWAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAfgCIAMcA/wDIAP8AyAD/AMYA/gA6 - AJ4AAABGAAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADwAAADAAAAJbABet3gAe2/8AHtv/AB7b/wAL - WWoAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAMAAY0TAAd - 2v0AHtz/AB7c/wAe3P8AGsXsAAIRXgAAACwAAAAOAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAARAAgAowC6AMgA/wDIAP8AyAD/AKcA6gAHAG8AAAAtAAAABgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAgAAAAgAAAASAAKTJoAHdr+AB7b/wAe2/8AG8nkAAENGgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAWABSbtAAe3P8AHtz/AB7c/wAe3P8AE5HFAAAASgAA - ACIAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABwAuQDgAMgA/wDI - AP8AyAD/AFsAtgAAAFIAAAAYAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADcAAQpmABm76QAe2/8AHtv/AB7b/wAO - b4AAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAkABSc+AB3X9gAe3P8AHtz/AB7c/wAd2v4ACUqRAAAAPwAAABwAAAAHAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAD8AxQD3AMgA/wDIAP8AugD2ABYAgAAAADcAAAAKAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA - AAwAAAAoAAAAUgAObbQAHdr/AB7b/wAe2/8AHM7oAAIVIAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABIAEIKZAB7c/wAe3P8AHtz/AB7c/wAb - y/IAAx5wAAAANgAAABYAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBx - AHAAyAD/AMgA/wDIAP8AfQDOAAAAXQAAACAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAHQAAAEMABCF+ABzQ+AAe2/8AHtv/AB3a/wAO - bn4AAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABgACEycAGsjiAB7c/wAe3P8AHtz/AB7c/wAXsN4AAQteAAAAMAAAABMAAAAFAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgCZAKYAyAD/AMgA/wDGAP4ALgCWAAAAQgAA - AA8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA - ABUAAAA2AAACYQAVodcAHtv/AB7b/wAe2/8AG8vlAAIPGwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAAJTF8AHdr8AB7c/wAe - 3P8AHtz/AB7c/wATjsYAAAJUAAAALQAAABIAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAABwAEAC0ANIAyAD/AMgA/wCeAOQAAwBpAAAAKQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAALgAAAFUADFuqAB7a/wAe2/8AHtv/AB7b/wAN - Y24AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAADAAACEgASj6EAHtv/AB7c/wAe3P8AHtz/AB3b/wAOa68AAABQAAAALAAA - ABIAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIALgDDAO8AyAD/AMcA/wBP - AK4AAABNAAAAFQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADgAA - ACgAAABNAAUnhgAc0fgAHtv/AB7b/wAe2/8AGbvOAAAEEAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAIPIAAZ - vNQAHtz/AB7c/wAe3P8AHtz/AB3Z/QALWqIAAABQAAAALAAAABMAAAAFAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAF0AWgDHAPwAyAD/ALMA8gAOAHgAAAAyAAAACAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA - AAQAAAAEAAAAAgAAAAEAAAACAAAABAAAABAAAAAnAAAASQABDXQAGLXmAB7b/wAe2/8AHtv/AB3a+gAH - PUQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAUtPAAd1/MAHtz/AB7c/wAe3P8AHtz/AB3Y/AAL - WaIAAABSAAAAMQAAABYAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAIUAkADH - AP8AyAD/AG0AwwAAAFgAAAAcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAATAAAAHAAAACAAAAAbAAAAFgAAABYAAAAeAAAAMAAA - AE4AAAdxABWb1wAd2v8AHtv/AB7b/wAd2v8AEoyWAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAAKAApSYAAd2foAHtz/AB7c/wAe3P8AHtz/AB3Z/AAMW6YAAABZAAAAOQAAAB4AAAAOAAAABAAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAIAKwAxADIAP8AwQD6ACIAigAAADwAAAAMAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFgAA - AC4AAABDAAAASwAAAEYAAABAAAAAQAAAAEgAAABbAAEHdwATkNAAHtv/AB7b/wAe2/8AHtv/ABnA1AAC - EhgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAANAA5wegAd2/0AHtz/AB7c/wAe - 3P8AHtz/AB3a/gAPdLkAAARkAAAARgAAAC0AAAAbAAAADwAAAAoAAAAIAAAACQAAAAwAAAAMAAAACQAA - AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAJgAgAMAA5wDIAP8AjQDWAAEAYgAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAmAAABSwAGMYQABi+OAAEIdgAAAG0AAABsAAAAdAAF - JpIAFqfgAB7b/wAe2/8AHtv/AB7b/wAc1fMABzo+AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAMAAAIPABGBjwAd2/4AHtz/AB7c/wAe3P8AHtz/AB3b/wAUnNUAAhZ6AAAAWAAA - AEQAAAA1AAAALQAAACoAAAAsAAAAMAAAADAAAAAlAAAAFgAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASgBHAMcA+QDHAP4APACcAAAARgAA - ABEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAA - ADEACk6OABzX/AAd2v4AG8jzABWg3QASjdMAFqjiABzV/AAe2/8AHtv/AB7b/wAe2/8AHdr+AA1naQAA - AAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIQABGKmAAd - 2/8AHtz/AB7c/wAe3P8AHtz/AB7c/wAayPIADFutAAAGcgAAAGIAAABaAAAAWAAAAFoAAABeAAAAXAAA - AEsAAAAwAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAACAAEAdwB6AMcA/wCqAOkABgBqAAAALQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALgAWp9AAHdr/AB7b/wAe2/8AHtv/AB7b/wAe - 2/8AHtv/AB7b/wAe2/8AHtv/AB7a/wASjpUAAAEIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAMOABGEjwAd2/4AHtz/AB7c/wAe3P8AHtz/AB7c/wAd - 2/8AGb/tAA93wgAJRaQABjOaAAhAogAMW7IAEH3EAA94tAACFFUAAAAiAAAABgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAYAmgCwAMcA/wBd - AK8AAABPAAAAGAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAgAAAAgABez2AAd2v8AHtv/AB7b/wAe2/8AHtv/AB7b/wAe2/8AHtv/AB7b/wAd2v4AFJqfAAAICgAA - AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAEMAA5ydgAd2PgAHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe - 3P8AHtz/ABarzQAAAyoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiABQAtwDZAL0A9QAZAHMAAAA2AAAACgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABAAE5ekAB3a/wAe2/8AHtv/AB7b/wAe - 2/8AHtv/AB7b/wAe2/8AHdr7ABGEiAAABQkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAlJTQAbzOQAHtz/AB7c/wAe - 3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHdv8AAQiNgAAAAcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3 - ADQAxQD0AIIAwgAAAFIAAAAgAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAABAADHyAAE5OaABzT6wAd2v8AHtv/AB7b/wAe2/8AHdr/ABnBzgAJTUsAAAIEAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAFAAQhJgAWpLAAHtv+AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe - 3P8AHtz/AB7c/wAd2/sABCQqAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAGMAxAD6ADIAewAAADsAAAAOAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAhQRAAlIQgAP - dHMAD3eCAA90cwAIRjsAAAYIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAADCQAK - UlAAGbrFAB3b/gAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/ABaprgAABAoAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAUAAwCQAJsAoADUAAQASwAAACQAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgcABzo0ABB+gwAXr7oAHNPdABzU6AAc - 0tsAGLbAABKJjAALVU0AAQkJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcADACrAMoAUwCEAAAANwAA - ABIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAC4AJwCwANMADwBAAAAAIwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAUQB1 - AJMAAAAoAAAAEgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAHwAfQAmADsAAAAYAAAABgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAEAAHAHYAbAACABMAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAYAD8AKQAAAAYAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAALQAMAAQAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////8AH//////////////////+AAf/////////////////+AA - D//////////////////AAAf/////////////////gAAD/////////////////wAAA/////////////// - //4AAAH////////////////4AAAB////////////////8AAAAP///////////////+AAAAAA///////g - ///////AAAAAAA//////wP///4H/gAAAAAAD/////wD///+A/gAAAAAAAP////4A////gHwAAAAAAAB/ - ///8AP///4A4AAAAAAAAH///+AH////AAAAAAAAAAA////AD////wAAAAAAAAAAH///AA////+AAAAAA - AAAAA///gAf////wAAAAAAAAAAP//4AH////8AAAAAAAAAAB//8AD/////gAAAAAAAAAAP/+AB/////4 - AAAAAAAAAAB//AAf////8AAAAAAAAAAAf/gAP////+AAAAAAAAAAAD/wAH////+AAAAAAAAAAAAAAAD/ - ////AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////wAAAAAAAAAAAAAAAP////8AAAAAAAAAAAA - AAAH////+AAAAAAAAAAAAAAAD/+H//gAAAAAAAAAAAAAAB/+B//4AAAAAAAAAAAAAAA//Af/+AAAAAAA - AAAAAAAA//gH//wAAAAAAAAAAAAD///gB//8AAAAAAAAAAAAA///wA///AAAAEAAAAAAAAP//4AP//4A - AADAAAAAAAAD//8AH///AAADwAAAAAAAAf/+AD///wAPH8AAAAAAAAH//AA///+AB/+AAAAAAAAB//gA - f///wAf/gAAAAAAAAf/wAH///8AD/4AAAAAAAAH/4AD////gAf+AAAAAAAAB/8AB////8AD/gAAAAAAA - Af/AA/////AAf4AAAAAAAAAAAAP////4ADgAAAAAAAAAAAAH/////AAAAAAAAAAAAAAAD/////4AAAAA - AAAAAAAAAB/////+AAAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAH////// - wAAAAAAAAAAAAADw/////+AAAAAAAAAAAAADwP///+DwAAAAAAAAAAH//4D////gPgGAAAAAAAAB//4A - ////4B//gAAAAAAAAf/8AP///+AH/4AAAAAAAAH/+AH////wA//AAAAAAAAB/+AB////8AH/wAAAAAAA - Af/AA/////gA/8AAAAAAAAP/gAf////8AH/AAAAAAAAB/wAH/////AA/wAAAAAAAAf4AD/////4AH+AA - AAAAAAD8AB//////AA/gAAAAAAAA+AA//////wAH4AAAAAAAAHAAP/////+AA+AAAAAAAAAgAH////// - wAHwAAAAAAAAAAD//////+AAAAAAAAAAAAAB///////wAAAAAAAAAAAAA///////+AAAAAAAAAAAAAf/ - //////gAAAAAAAAAAAAP///////8AAAAAAAAAAAAH////////gAAAAAAAAAAAD////////8AAAAAAAAA - AAB/////////gAAAAAAAAAAB/////////8AAAAAAAADAAP///////////4AAAAAA4AD///////////+A - AAAAAeAAf///////////wAAAAAPwAH///////////+AAAAAH+AA////////////gAAAAB/wAP/////// - ////4AAAAAf8AB///////////+AAAAAH/gAP///////////gAAAAB/8AD///////////4AAAAAf/gAf/ - /////////+AAAAAH/4AH///////////wAAAAD//AA///////////8AAYAB//4AH///////////gAGAA/ - //AB////////////4BwD///4AP///////////+AcA///+AD////////////APAH///wAf/////////// - wDwA///+AH///////////4A+AP///wA///////////8AfgB///+AH///////////AH4AP///gB////// - /////gB/AD///8AP//////////4AfwAf///gD//////////8AP8AD///8Af//////////AD/gA////AD - //////////gB/4AH///4A//////////wAf/AA////AH/////////8AP/wAH///4B/////////+AD/+AA - ///+AP/////////AA//wAP///wB/////////wAf/8AB///+Af////////4AP//gAH///wD////////8A - D//8AA///+A///////8AAB///AAH///gH//////+AAAf//4AAf//8B///////gAAP///AAAB//gP//// - //4AAH///4AAAP/8B//////+AAB////AAAD//Af//////gAA////4AAA//4D//////4AAf////AAAP// - A//////+AAP////4AAD//4H//////gAH/////AAA///B//////+AH/////8AAP//wP////////////// - wAH//+B///////////////gP///wf///////////////////+D////////////////////g///////// - ///////////8H////////////////////h////////////////////8f//////////////////////// - ////////////////////////////////////////KAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAACAA0AIAAuAF8ANQBwABEARgAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAUARQBqALUA7ADHAP8AxwD/AMAA+gBhAK4AAQAhAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAEACQBlAJEAxQD8AMcA/wDHAP8AxwD/AMcA/wDHAP8ASQCVAAAACgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAXAIIAswDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8AswDxAA0ARgAAAAUAAAAHAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAIAAAAMAAAABQAAAAAAAAAAAAAAAQAaACkAmgDOAMYA/wDGAP8AxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8AxwD/AG4AyAAACmYBABtsAQATYAAAAT8AAAAbAAAABQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA4AAAcsAQAVGgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAC9QAAALPwAAAAwAAAACACgAQgCuAOUAxgD/AMYA/wDG - AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMMA/gcgbvwOAMP+DgDI/QwAtOsHAGitAAALRwAA - AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAGAIAH2QKAJOrAAATCwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABEdCQCN0gIAH2gAPgBtALwA9ADG - AP8AxgD/AMYA/wDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wGQHf8MAaj/DgDK/w4A - 0P8PANb/DQC/7AMALWwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAfBAA/hg8A - 2PAEAENEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBABDbQVX - T/kAwwD9AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH - AP8FQVb/DgDC/w4Az/8PANT/DwDa/w4A0fUDADJpAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AB0FAEmOEADk+gkAjJQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAABwAQAHYAqADGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AMcA/wC4APUAxwD/AMcA/wDH - AP8AxwD/AMcA/wDHAP8ArQ3/CgmW/w4Azf8PANP/DwDZ/xAA3/8OAMvtAQAVQgAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAFQQAPoIQAOT6DQC/ygAAEgsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAATABwAkADCAMYA/wDGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AK8A7AQY - PbQEeEH/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/BGY5/w0Avv8PANL/DwDY/w8A3v8QAOP/CgCZxAAA - AEAAAAAyAAAAKwAAACYAAAApAgAjbA8A3fYPANTiAgAmHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAABgAHwCgANQAxwD/AMYA/wDGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDG - AP8Aswb5AR8UrQsAme8MB6P/Ap0j/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMED/wgbgP8OAND/DwDX/w8A - 3f8QAOL/EADn/goAmeILAKraCwCc0AoAkMcJAIzHDgDM7RAA5fYEAEA7AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwApADHAP8AxwD/AMYA/wDGAP8AxwD/AMYA/wDG - AP8AxgD/AMYA/wC3C/8IJID/CgCT/wwAsf8MAK7/CxiW/wC4DP8AxwD/AMcA/wDHAP8AxwD/AMcA/wKI - JP8MALb/DwDW/w8A3P8QAOL/EADn/w4A1PsOANHsEADr+RAA7P8QAOz/EADh7QYAXlsAAAABAAAAAAAA - AAAAAAAAAAAAAgAAAAsAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AaQDEAfwAxwD/AMYA/wDG - AP8AxwD/AMYA/wDGAP8AxgD/ALoA8gQoSKgGAGKhCwCf8g0AtP8MALH/DACw/wk5ff8AxAL/AMcA/wDH - AP8AxwD/AMcA/wDGAP8GOWT/DwDR/w8A3P8QAOH/EADn/xAA5PcBABMxAAAKBQMAMgwDAD4PAAARAwAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAFAABAEUASgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAC4ACAARAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/4H/////////AP//// - ////4Af////////AAH//P///4wAAH/w////gAAAP+D////AAAAfwf///8AAAA+B////wAAAB4P///+AA - AAAB////wAAAAAP////AAAAAA4///8AAAAAPD///wAAAAH4P///gEAAAfB///+BwAAB4P///8HAAAAA/ - ///4AAAAAH////wAAAAA/////AAAAAE////xAAAAfD////BwAAB4P///+DAAAHB////4GAAAYP////wI - AAAA/////gAAAAH/////AAAAA/////+AAAAH/////8AAAA///////wACB///////AAcH//////8AB4P/ - /////wAHgf//////gh/B///////CH+D//////8IP8P//////hw/wf/////+HB/g//////weD/D/////+ - D4H+H/////APwP8f////4B/gDw/////gP/APj////+B/+A/H////+P/8D+P/////////4//////////z - /////////////ygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEANgBHAGQAmQBRAIoACwAmAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAGUAhQDGAP0AyAD/AMgA/wCaANwAAwAaAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA0ADQCAAKsAxwD/AMgA/wDIAP8AyAD/AMgA/wBR - AJQAAAAZAAAAGAAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgsBABY8AAAABQAdAB4AmADKAMcA/wDHAP8AyAD/AMgA/wDI - AP8AyAD/ALgA+QcOZtkKAJTYBwBurwEAF0cAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMA - LmIDADo4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUAW4sCICiPAK0A4wDHAP8AxwD/AMcA/wDI - AP8AyAD/AMgA/wDIAP8AyAD/A3U0/w4Awv8PANH/DwDN9gQAQXQAAAAGAAAAAAAAAAAAAAAAAAAAAAAA - AA8FAFGLCwCkswAAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAD0IYQC6CP8AxwD/AMcA/wDH - AP8AxwD/AMgA/wDAAPoAyAD/AMgA/wDIAP8AxQH/CSZ//w4Az/8PANj/DwDa+gMAM1oAAAABAAAAAAAA - AAAAAAAKBQBQiA8A1eYDADAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBWAHAAwwD7AMcA/wDH - AP8AxwD/AMcA/wDHAP8AngDiBxhl1wGuFf8AyAD/AMgA/wDIAP8BmRv/DQC8/w8A1v8QAN//DgDD5QIA - JGkBABxVAQAPSQQAO3sPAODzBQBLOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbQBWAMcA/gDH - AP8AxwD/AMcA/wDHAP8AxwD/AaMb/wcOcOwMAK7/CiaK/wDBBf8AyAD/AMgA/wDHAP8GSGD/DwDU/xAA - 3v8QAOb/DgDQ+BAA6fkRAO3/EADo9wcAbWEAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAABH - ADABohPpAMYA/gDHAP8AxwD/AMcA/wCnANoEFEBwCQCC0Q0AtP8NALH/B0xt/wDHAP8AyAD/AMgA/wCz - C/8MCq//EADd/xAA5f8MALHLAAAECQMANgkBACAFAAAAAAAAAAAAAAADAAAKMwQARlgAAAAAAAAAAAAA - AAAAAAAAAAAAAAUAU2QGDlijAC0ARQCAAFkAgQBhACEAEgAAAA8LAJ7gDQC6/w0At/8NALf/BXdJ/wDI - AP8AyAD/AMcA/wRrQv8PANj/EADl/xAA6PoBABEaAAAAAAAAAAAAAAAAAAAABAIAHVANALbTAwAtGwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAADBAsAm74HAGWeAAAADAAAAAAAAAAAAAAIHw4AwfwOAL//DgC8/w4A - vP8NBbj/Ap4n/wDIAP8AxwD/AMMC/wofl/8QAOX/EQDu/wQAREIAAAAAAAAAAAAAAAIBABtKDwDS7AcA - ZVcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAfGw0AvOQFAEyCAAAAFQAAABUBABxLDgDJ/w4A - xP8OAML/DgDB/w4Awv8MF63/AbcP/wDHAP8AyAD/ApAm/w8A1/8RAO7/BgBWhwAACD8AAAA0AAALSA4A - w+IKAI6IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAA6PQ4Ax/QJAIzPCgCR0woA - meUPAM7/DwDK/w4Ax/8OAMb/DgDH/w8Ayv8KNZb/AMUC/wDIAP8AxwD/CD14/xEA7v8QAOP6EQDw/xEA - 6fsRAOr7DACvswAACQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAADBgBXNwsA - nHAKAJBpBwBldA8A1P8PAND/DwDN/w8Ay/8PAMz/DwDO/w8A0v8IX27/AMgA/wDIAP8BrRH/DgbM/wYA - XlcFAFQSBwBuIggAcyAAAAUCAAAAFwEAFiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwA5QwMA - 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 - rEE= - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 267, 17 + + + 152, 17 + + + 422, 17 + + + + + AAABAAoAICAQAAEABADoAgAApgAAABAQEAABAAQAKAEAAI4DAAAwMAAAAQAIAKgOAAC2BAAAICAAAAEA + CACoCAAAXhMAABAQAAABAAgAaAUAAAYcAAAAAAAAAQAgABx9AABuIQAAgIAAAAEAIAAoCAEAip4AADAw + AAABACAAqCUAALKmAQAgIAAAAQAgAKgQAABazAEAEBAAAAEAIABoBAAAAt0BACgAAAAgAAAAQAAAAAEA + BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDA + wAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAB3AAAAAAAAAAAAAAAAAAB6KiAAAAAAAAAA + AAAAAAAHKqKnAAAAAAAAAAAAAAAAeioqKllwAAAAAAAAAAAHcqKqKiopGQAAAAdwAAAAACqioqKqI5mQ + AAB1AAAAAAoqKqJyoqIVlQAAkAAAAACqKiohEaKiOZmZmQAAAAAAOiqiB5EyqiEZcAAAAAAAAAcAAAWR + kqKjmZAAAAkAAAAFcAABkZE6KlmQAACQAAAAAJcACZGVGioplwAJcAAAAAAJlxWZGZGioZmZlwAAAAAA + AAAJkZGVOqKQAAAAAAAAAAAAAZWZGZIqMAAAcAAAAAB3AAmZkZkZKqAACQAAAAAACXAHWZWZWZKnAJcA + AAAAAACXB5mZmZmTKhFwAAAAAAAACZlxmVmZk3ogAAAAAAAAAAAACZmZkVAHpwAAAAAAAAAAAAeZmZmQ + AKoAAAAAAAAAAAAHl3mJcAACcAAAAAAAAAAAAAAAcAAAAKAAAAAAAAAAAAAJAHAAAAByAAAAAAAAAAAA + dwAJAAAACnAAAAAAAAAAAJAAA3AAAACgAAAAAAAAAAdwAACQAAAABwAAAAAAAAB5AAAACQAAAAcAAAAA + AABxkAAAAAeTcAAAcAAAAAAAAAAAAAAAB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/z////wf///4D///8AH//4AA/n/AAHz/gAA9/wAAA/8CAB//vgAfv54AH3/OAA5/4AAA//4AH//+A + B9/zgAe/+YADP/yAAH/+AAH//+AY///gHP//4B5///9/f//7fz//87+f//ef3//n3+//z+/v/x/h9/// + +f///////////ygAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAHAAAA + AAAAB6IgAAAAAAAiqiOQAHAAAqozKhl5AAADd3EyOQAAAABweZKhcAAAAAdRmaKXAAAAAAkZGnAAAAAI + CVmTKHAAAAAJmZdzAAAAAACZkAYAAAAAAAAAADAAAAAAcIAAAAAAAAcABwAAAAAAcAAAdwAAAAAAAAAA + AAD7////4f///8B3//+AD///gD///9Af///gD///+B///+gH///4D////G/////3///9f///+7////fP + ////////KAAAADAAAABgAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZjkACGk/AAR1 + OQAJIm8ABjlkAAgvdgAJOX0ABFtIAAVBVgAKWlMABVBYAAR4QQAGYVwABnJWADN5XQAJSXwACFt3AFJn + XwBFX3UATVt2AAGQHQABnxgAAK0NAAC9BQAAtwoABrQLAA22DQAAvgkAALgMAAC8DQAKugoACr0KAA29 + DQABphIAAasaAB6oHgABtRMAE7QTABSwFAATuhMAGrYaABm9GQACiCQAA4AtAAKdIwADmy4ABIo4ACyf + LAA3jTcAOJk4AAKnJQAgpCAAKaEpACa1JgArsCsAKbspADGtMQA4rDgAPao9ADezNwA7ujsAAMICAADG + AAAAwQQABcEFAAXFBQAKwgoAFcAVAAWGSQBGlUYAUZNRAFiTWABKpkoATKdMAE25TQBXpFcAU7tTAFu1 + WwBmk2YAapRqAGqeagB5mHkAVKFkAG6nbgBsu2wACBuAAAoAkwAKCZYAChSSAAsYlgAaEJ8ACCSAAAsm + nAAoO4gAODKVAAwHowALAKYACwCpAAwBqAAMBqgADACtAAsOqQAXDaMADACwAAwAtAAMDLEADQC5AA0A + vQARBbcAFAm1AA0XuwAfFLkAHBC9ACUdpAALM6EANC2hADcvpQA3L64APzilAD84qAAuJbYALyS9ADQq + vAAmObYAOjKyAEI7sABFPbYAC0SeADxJowA2RawALkG/ADRGuwBHQo4ARUCWAEtGkgBNSZMASUSZAFNO + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///////8AAP/8H////wAA//AP////AAD/4A////8AAP/AB////wAA/4AAP/9/ + AAD7AAAf/P8AAPwAAA/4/wAA+AAAB/H/AADwAAAD8/8AAOAAAAAH/wAAwAAAAA//AADgAAAB//8AAOAc + AAH/nwAA8/wAAP8/AAD5+AAA/n8AAPj4AAD8/wAA/PgAAPj/AAD+AAAAAf8AAP8AAAAD/wAA//gAAP// + AAD/+AAA/n8AAP38AAD8/wAA/nwAAPn/AAD+PAAAc/8AAP8cAABj/wAA/4AAAAf/AAD/wAAAD/8AAP// + AAYf/wAA//+ADw//AAD//4APj/8AAP//gA/H/wAA//+Kz8f/AAD///9/4/8AAP//93/z/wAA///nP/n/ + AAD//+ef+P8AAP//z5/8/wAA///Pz/5/AAD//5/H/38AAP//H+P/vwAA//4/8f+fAAD/8H/4H98AAP/4 + //wf7wAA/////z//AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN1NAAZH3oACSZ/AAg9eAArMXwALTx9AARrQgAFd0kABmFVAAZI + YAAHTG0ACF9uAC5UZQABmRsABrkGAAC/BAAAswsAAbcPAAC6CAAAvwkACbwJAAOlFwABrREAAa4VAAGj + GwAdqR0AFr8WABm0GQActhwAApAmAAKeJwA1njUAAqogABaqJwAjpyMAJaYlACWzJQAjvCMANa01ADi8 + OAAAwwIAAMYAAADBBQAEwgQAAMgAAASKQwBEm0QAU5lTAE6/TgBUqVQAappqAHufewBesWQAZqJmAGin + aABpvmkAdaB1AHquegAKH5cACiaKAAo1lgA1LpgADACuAAwKrwAMF60ADQCxAA0AtgANALoADQW4AA0A + vAAiGqMAKB+pAA0jvwAvJ6QANCyjAC09qwA3MKEANSy+ACE1vQALR5oAPkqgADVFsgBUUJsAU12fAF9k + lABlYZ8AaWacAGxpmwByd5oAU0yvAEpDsgBJQbQAUku9AFNMvwBJVrEAUl+3AGFppQBua6AAcm+mAGhw + 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 + udR2jnJkOOUAIHWSq8CK/geiCYpcCFLuSyAXhJSr7/5Sm2vkyCSUA4DGUWT9N1EDzobwUlCiBpwQ9lyl + 3RyZgv4fwxUHs6QSBV4AAAAASUVORK5CYIIoAAAAgAAAAAABAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAoAAAATAAAAGgAA + AB4AAAAeAAAAFwAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABQAAABMAAAApAAAAQAAMAFgAEgBoABMAbAAOAGYAAQBYAAAASAAAADMAAAAcAAAACQAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAsAAAAmACMAYABqAKwAowDfAL4A9QDG + AP0AxgD+AL8A+ACkAOUAbAC/ACIAhgAAAFgAAAAzAAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAQABAAPQCCALgAwwD6AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwwD8AHcAygAL + AHYAAABBAAAAFwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFQApAFgAsADlAMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AKkA6wAXAIMAAABAAAAAEQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA + ABwAQgB0AL0A8wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AKYA6AAJAHIAAAAxAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAkAGAAkwDDAPoAyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AG8AxQAAAFgAAAAdAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAcALgB/ + ALIAxgD+AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AwQD7ACQAjQAAAD8AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAADwASAD0AmADMAMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AkwDcAAIAZgAA + ACYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABQAJgBUAK0A4gDH + AP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8ARQCnAAAASgAAABMAAAACAAAAAQAAAAIAAAADAAAAAwAA + AAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAUAAAAZADoAbAC7APAAxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCv + AO8ACQB2AAAAOAAAABcAAAAWAAAAGwAAAB4AAAAeAAAAHAAAABgAAAATAAAADQAAAAcAAAADAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAMAAAADQAAAAgAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAABgAAAAYAAAADAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIABXAIgAwgD5AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wBlAMYAAAByAAAATAAAAEEAAABFAAAASQAA + AEkAAABHAAAAQgAAADoAAAAxAAAAJgAAABkAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAQAAAAOAAAAGwAAACAAAAAaAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAkAAAAQAAAAEwAAABAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAACgAEACoAdACmAMYA/QDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AL8A+wAbALEAAACIAAAAdAAAAHIAAAx6AQARfQAACXcAAABvAAAAaAAAAF4AAABRAAAAQQAA + AC8AAAAdAAAADgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAFAAAACgAAAA2AAAAMwQAQ08DADYmAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgAADCAAAAAmAAAAJgAA + ABkAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA4ADgA4AJAAxADHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AIoF7wQAQtwIAH/kDACw8w0A + vvkOAML6DgDB+QwAtu8LAJ/fBwB2xAQAPZoAAAZwAAAAWwAAAEUAAAAuAAAAGQAAAAoAAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACQAA + ABkAAAAyAAAASAAABU4IAH6YCwClogAAAQkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAJAwA5TAUAT3wAAAFAAAAANwAAACEAAAAOAAAABAAAAAAAAAAAAAAAAAAA + AAIAAAASACAATQCnANwAxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AxgD/BDlG/wkAi/8MALb/DgDF/w8AyP8PAMr/DwDM/w8Azv8PAND/DgDS/w4A + xPMIAHS+AQAXfAAAAFgAAAA+AAAAIwAAABAAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA0AAAAgAAAAPAAAAFcCACBzDAC40w8A5O4BAB8lAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIVCQCJuwcA + ebsAAAxdAAAARAAAACgAAAASAAAABQAAAAEAAAAEAAAAGAA0AGYAuADuAMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8ApQ//Bwdr/wsA + oP8NAMD/DwDH/w8Ayf8PAMv/DwDN/w8A0P8OANL/DwDU/xAA1v8PAND4BwB3vQAADm4AAABKAAAALAAA + ABQAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAPAAAAJQAA + AEMAAABiBABFlg8A2vERAOz/BwB0dQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAoCACNACwCy9goAm+QCACR+AAAATgAAAC4AAAAWAAAADQAB + ACAATwCCAMEA+ADHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8DWDT/CQCD/wwAsf8OAMX/DwDI/w8Ayv8PAM3/DwDP/w4A + 0f8PANP/EADV/xAA1/8QANr/DQC96gMAOI4AAABSAAAAMQAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAEAAAAEgAAACkAAABKAAADbAcAcbYQAOj8EQDt/w0AxcoAAAoSAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + ABIGAGiUDAC2/wsArPYEAD2YAAAAVQAAADoAAwA7AG4AowDFAPwAxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wC6 + Bf8GFl3/CgCY/w4Avf8PAMf/DwDK/w8AzP8PAM7/DgDR/w8A0/8PANX/EADX/xAA2f8QANv/DwDX+gcA + Z6wAAAFWAAAAMgAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAABIAAAArAAAATgAA + DXUKAJ7READs/xEA7f8QAOn4AwA/QAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAADCQKAKXhDAC2/wwAs/wFAFe2AAgAegCG + AMoAxgD+AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wJ/If8IAHr/DACr/w4AxP8PAMn/DwDL/w8A + zv8OAND/DwDS/w8A1P8QANb/EADY/xAA2/8QAN3/DwDe/ggAhsAAAAJXAAAAMQAAABQAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAARAAAAKwAAAE4BABN6DAC54BEA7P8RAO3/EADs/wkAj4wAAAAIAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAADAQAQmMMALT9CwCq/wkThP8BnBH2AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMcA/wUwTP8JAI//DQC5/w4AyP8PAMv/DwDN/w4Az/8PANH/DwDU/xAA1v8QANj/EADa/xAA + 3P8QAN7/EADg/wkAicAAAARUAAAALAAAABAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACoAAABOAQAVfA0A + wuYRAO3/EQDt/xEA7f8OAM3SAAANFAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABGAcAc7QIJXT/Aa0Q/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AaER/wcEb/8LAKP/DgDD/w8A + yv8PAM3/DgDP/w8A0f8PANP/EADV/xAA1/8QANn/EADc/xAA3v8QAOD/EADi/wgAgLgAAAFMAAAAJQAA + AAwAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAA4AAAAoAAAATAEAFXoNAMLmEQDt/xEA7f8RAO3/EADp9gMAPjsAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAYAAAAiAEAKjgC6CP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AxwD/A1U3/wkAhv8NALX/DgDI/w8AzP8OAM7/DwDQ/w8A0/8QANX/EADX/xAA + 2f8QANv/EADd/xAA4P8QAOL/EADi/gYAY6AAAABBAAAAHQAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAMAAAAJQAAAEkBABJ2DQC94hEA + 7f8RAO3/EQDt/xEA7P8HAHp0AAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIQBgAJIAwwD7AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AuAb/BxRh/wsA + m/8NAMH/DwDL/w4Azv8PAND/DwDS/w8A1P8QANf/EADZ/xAA2/8QAN3/EADf/xAA4f8RAOP/EADe+QMA + MnkAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAACgAAACAAAABEAAAMcAwAtd0RAO3/EQDt/xEA7f8RAO3/CwCnpgAABQwAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAACgAFACoAfACuAMYA/gDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AxwD/AI0A1wCRAdwAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8CeiT/CAB9/wwAr/8OAMn/DgDO/w8A0P8PANL/DwDU/xAA + 1v8QANj/EADa/xAA3P8QAN//EADh/xAA4/8RAOX/DgDI5wAADlcAAAAnAAAACwAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAbAAAAPQAAA2YKAJ7QEQDs/xEA + 7f8RAO3/EQDt/w4AyMoBABIVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAwADgA2AJEAxADHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCWANkABgN9Bw9y4AGrFv8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDE + Af8FLU//CgCU/w0Av/8OAM3/DwDP/w8A0f8PANT/EADW/xAA2P8QANr/EADc/xAA3v8QAOD/EADi/xEA + 5P8RAOf/CQCLuAAAAEQAAAAkAAAAFgAAABMAAAARAAAADgAAAA0AAAALAAAACQAAAAgAAAAHAAAABgAA + AAcAAAALAAAAGQAAADgAAABeCACBvREA7f8RAO3/EQDt/xEA7f8PANvhAQAnJgAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAPABoARQCkANgAxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDI + AP8AnADbAAwAcQUARqoMAKj/CSqB/wC+B/8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wGcE/8IA3T/DACp/w4AyP8PAM//DwDR/w8A + 0/8QANX/EADX/xAA2v8QANz/EADe/xAA4P8QAOL/EQDk/xEA5v8QAOT7AwAzggAAAFAAAABCAAAAPAAA + ADgAAAA1AAAAMgAAAC8AAAAtAAAAKgAAACkAAAAoAAAAKAAAAC4AAAA/AAAAXAUAVqQQAOv+EQDt/xEA + 7f8RAO3/EADm8gMAPj4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEQAnAFQAsADkAMgA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AKMA4gATAHQAAAt2CwCd8gwAqv8MAKj/Bkxk/wDH + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wRNPf8JAIz/DQC7/w4Azv8PANH/DwDT/xAA1f8QANf/EADZ/xAA2/8QAN7/EADg/xAA + 4v8RAOT/EQDm/xEA6P8MALHcAAACfgAAAHQAAABrAAAAZgAAAGMAAABgAAAAXQAAAFoAAABYAAAAVgAA + AFUAAABVAAAAWgAAAGkCAC2RDwDh+BEA7f8RAO3/EQDt/xAA7P0GAGVgAAAABQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + ABIAMwBeALwA8ADIAP8AyAD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wCr + AO0AFwCMAAAAfAYAWsENAKz/DQCr/w0Aqv8MAKf/BHhA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/ALUI/wcNaf8LAKL/DgDH/w8A + 0P8PANP/EADV/xAA1/8QANn/EADb/xAA3f8QAN//EADh/xEA4/8RAOb/EQDo/xAA6f4IAH3YCgCQ4QoA + m9oKAJfQCQCLxwcAeb4HAGe1BgBZqwUATaIEAEGdAwA5mgMAM5gDADueBQBYsA4Az+8RAO3/EQDt/xEA + 7f8RAO3/CQCPiAAAAQgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANADoAYwC/APQAyAD/AMgA/wDIAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AsQH0ABsDpgAABJoAABOoCwCk+A0Arv8NAKz/DQCr/w0A + qv8MBqP/Ap0i/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AxwD/A3Aq/wkAhP8MALb/DgDO/w8A0/8QANX/EADX/xAA2f8QANv/EADd/xAA + 3/8QAOH/EQDj/xEA5v8RAOj/EQDq/w8A2P8MALL/DwDW/xAA6f8RAOz/EQDt/xEA7f8RAO3/EQDt/xEA + 7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/wwAvbwAAAYOAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAx + AEgAwAD0AMgA/wDIAP8AyAD/AMgA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/ALMM/wgc + dPkKAJL5CQCE/gkAjv8NALH/DQCv/w0Arf8NAKz/DQCs/w0Aq/8KGJT/AbQQ/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwgL/BSNY/woA + m/8NAMX/DwDS/xAA1f8QANb/EADZ/xAA2v8QAN3/EADf/xAA4f8RAOP/EQDl/xEA5/8RAOr/EQDs/wwA + t/8OAMj/EADk/xEA7P8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA + 7f8PANrfAQAgIgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAJ0AwADIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wC1C/8IJXb/CwCk/woAl/8IAHv/DACq/w0Asv8NALD/DQCv/w0A + rv8NAK3/DQCt/w0ArP8JNnv/AMIE/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8BkBr/CAJ7/wwAsP8OAM7/EADU/xAA1v8QANj/EADa/xAA + 3f8QAN//EADh/xEA4/8RAOX/EQDn/xEA6f8RAOz/DgDU/wwAuv8PANz/EADr/xEA7f8RAO3/EQDt/xEA + 7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/DwDf5gMANTYAAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAIAAAACAAAAAYAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX + AAcAwADgAMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AuQj/Byty/wsA + qP8LAKf/CQCN/wkAh/8MALX/DQCz/w0Asv8NALD/DQCv/w0Arv8NAK7/DQCu/wwArf8GYVb/AMcA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDG + AP8EQkb/CgCT/w0Awv8QANP/EADW/xAA2P8QANr/EADd/xAA3/8QAOH/EADj/xEA5f8RAOf/EQDp/xEA + 6/8QAOz/CQCOzAsAp8YNAMTSDwDk3xAA6u0QAOz4EQDt/xEA7f8RAO3/EQDt/xEA7f8RAOz9EADn5gsA + o5wCAC0lAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAIAAAAEgAAABgAAAAVAAAADAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgCbALIAyAD/AMgA/wDIAP8AyAD/AMgA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/ALsH/wcub/8LAKn/DACx/wsAof8IAIL/CwCg/w0Atv8NALT/DQCz/w0A + sv8NALH/DQCw/w0Ar/8NAK//DQCv/wwCrP8DijT/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wCtDP8HCXD/CwCq/w8Azv8QANb/EADY/xAA + 2v8QANz/EADe/xAA4P8QAOL/EQDl/xEA5/8RAOn/EQDr/xEA7f8IAHeeAAAAKwAAAgwAAA4IAAARDQAA + DRIBAB4XAwA8IgQAQCsEAEArBAA/JgIAJBcAAAwKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAAABsAAAAqAAAALAAACyQCACUfAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAACwAKgC9AOYAyAD/AMgA/wDIAP8AyAD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDBAPkEMUfJCAB3tggA + f6MHAHOUBQBMlAQARaYNALX+DQC3/w0Atv8NALT/DQCz/w0Asv8NALH/DQCx/w0Asf8NALH/DQCx/wsO + ov8BrRb/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AxwD/AMgA/wNkMv8JAIv/DQC+/w8A1P8QANj/EADa/xAA3P8QAN7/EADg/xAA4v8RAOX/EQDn/xEA + 6f8RAOv/EQDt/w0AxtoAAAA3AAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA + ABAAAAAkAAAAOwAAAEUCAClTDACupwEAEBQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACIAKwGKEMIAwgX/AMgA/wDI + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AwAD0AD0AaAAAABQAAAAEAAAAAgAAABEAAAA3BQBKmA4Auv8OALj/DQC3/w0A + tv8NALT/DQCz/w0As/8NALL/DQCy/w0Asv8NALL/DQCy/wonjf8Avgj/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMAD/wYaYv8LAKL/DgDM/xAA + 2P8QANr/EADc/xAA3v8QAOD/EADi/xEA5P8RAOf/EQDp/xEA6/8RAO3/EADs/AIAKFkAAAAaAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAUAAAALAAAAEgAAAJaBgBfjxAA5PEGAFhVAAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAHAQAVKgwZqewGXlrpAJgE2AC8APIAxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/ALgA6wA4AFwAAAAQAAAAAgAA + AAAAAAACAAAAGQAAAEMJAIPKDgC7/w4Auf8OALj/DQC3/w0Atv8NALX/DQC0/w0AtP8NALP/DQCz/w0A + tP8NALT/DQC0/wdHcf8AxgH/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMcA/wDIAP8AyAD/Aogf/wkAgv8NALj/DwDV/xAA2v8QANz/EADe/xAA4P8QAOL/EQDk/xEA + 5v8RAOn/EQDr/xEA7f8RAO//BwBskgAAACQAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAAGQAA + ADQAAABTAAAMbgoAmcIRAO/+DAC1sAAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAPBgBfeA8A + 0/4KAJXNAQsQcwApAGoATgB4AGsAiACMAKQAngDCAL0A3wDGAPgAxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/gCaAMEAIQA8AAAACwAAAAIAAAAAAAAAAAAAAAUAAAAiAAAFUQ0As/IOALz/DgC7/w4A + uf8OALj/DQC3/w0Atv8NALX/DQC1/w0Atf8NALX/DQC1/w0Atf8NALX/DAG0/wVvTv8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AxgD/BThO/wsA + mv8OAMn/DwDZ/xAA3P8QAN7/EADg/xAA4v8RAOT/EQDm/xEA6f8RAOv/EQDt/xEA7/8MAK/GAAAALgAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGAAAAEILAKXfDgDD/w4A + wf8OAMD/DgC//w4Avf8OALz/DgC8/w4Au/8OALr/DgC6/w4Auv8OALr/DgC6/w4Auv8OALv/DgC7/w4A + vP8NALz/B1pl/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wJ/Jf8JAIj/DQC//w8A2/8QAOD/EADi/xEA5P8RAOb/EQDp/xEA6/8RAOz/EQDv/xEA + 8f8KAJGsAAAAIwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAkAAAAdAAAAPgAAAGQIAH+9EQDw/hIA8f8SAPH/EQDw/ggAfXcAAAAGAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAUATGAPANL8DwDT/w8A + 0/8PANH+BwBmrAAAAE4AAAAqAAAAEAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAMAAAAeAAAFSw0Av/gOAMT/DgDD/w4Awf8OAMD/DgC//w4Avv8OAL3/DgC8/w4A + vP8OALv/DgC7/w4Au/8OALv/DgC7/w4AvP8OALz/DgC9/w4Avv8NArv/BIU9/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMYA/wUwVf8LAKH/DgDQ/xAA + 4P8QAOL/EQDk/xEA5v8RAOn/EQDr/xEA7P8RAO//EQDx/w0AvcsAAAAoAAAACAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAGgAAADoAAABhCAB3uBEA + 8P4SAPH/EgDx/xIA8f8NALezAAADDAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAAEQkAiJ8PANP/DwDT/w8A0/8PANL+BgBbowAAAEoAAAAmAAAADQAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACICACJkDgDG/g4A + xf8OAMT/DgDD/w4Awf8OAMD/DgC//w4Avv8OAL7/DgC9/w4Avf8OALz/DgC8/w4AvP8OAL3/DgC9/w4A + vf8OAL7/DgC//w4AwP8MDLP/Aace/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AaIS/wgCf/8MALn/DwDb/xAA4v8RAOX/EQDn/xEA6f8RAOv/EQDs/xEA + 7/8RAPH/DwDV5AAABC8AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABQAAABcAAAA2AAAAXQcAa7ARAO/+EgDx/xIA8f8SAPH/EADc3gEAGR0AAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAKHQwA + tdMPANP/DwDT/w8A0/8OAND8BQBKlgAAAEUAAAAhAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAGAAAAJgQAN3gPAMj/DwDH/w4Axf8OAMT/DgDD/w4Awv8OAMH/DgDA/w4A + v/8OAL//DgC+/w4Avv8OAL7/DgC+/w4Avv8OAL7/DgC//w4Av/8OAMD/DgDB/w4Awv8LIp7/ALwK/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/BFRA/woA + mP8OAMz/EADh/xEA5f8RAOf/EQDp/xEA6/8RAO3/EQDv/xEA8f8RAO31AQAQOwAAAAwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAASAAAAMAAAAFgFAFKhEQDt/BIA + 8f8SAPH/EgDx/xEA6/IDAD48AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAgApOw4AyO0PANP/DwDT/w8A0/8OAMv4AwA4hQAA + AD4AAAAcAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAqBQBQjA8A + yf8PAMj/DwDH/w4Axf8OAMT/DgDD/w4Awv8OAMH/DgDA/w4AwP8OAL//DgC//w4Av/8OAL//DgC//w4A + v/8OAMD/DgDA/w4Awf8OAML/DgDD/w4Aw/8IRH7/AMYB/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8Atwj/CBFw/wwAsf8PANr/EQDl/xEA5/8RAOn/EQDr/xEA + 7f8RAO//EgDx/xIA8/8CACFMAAAAFQAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAIAAAABAAAAAQAA + AAEAAAAEAAAAEAAAACoAAABQBAA8kREA5/gSAPH/EgDx/xIA8f8RAO/7BgBnYQAAAAYAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAALBQBQYQ8A0foPANP/DwDT/w8A0/8NAL7uAQAdcAAAADYAAAAWAAAABgAAAAEAAAAAAAAAAAAA + AAAAAAABAAAAAQAAAAIAAAACAAAADAAAADAGAGCgDwDK/w8Ayf8PAMj/DwDH/w4Axf8OAMT/DgDD/w4A + wv8OAML/DgDB/w4Awf8OAMD/DgDA/w4AwP8OAMD/DgDB/w4Awf8OAMH/DgDC/w4Aw/8OAMT/DgDF/w4A + xf8GbVb/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8Cdiv/CgCP/w4Ax/8QAOP/EQDn/xEA6f8RAOv/EQDt/xEA7/8SAPH/EgDz/wQAO20AAAA0AAAAKAAA + ACYAAAAkAAAAIAAAAB4AAAAcAAAAGgAAABgAAAAYAAAAGAAAAB0AAAAuAAAATQEAHHwPANfvEgDx/xIA + 8f8SAPH/EQDw/gkAioQAAAIIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAEPCAB1ig8A0/8PANP/DwDT/w8A + 0/8MAK/hAAAKXgAAADQAAAAcAAAAEwAAABEAAAARAAAAEwAAABQAAAAWAAAAGgAAABwAAAAnAAAASQgA + dLYPAMz/DwDK/w8Ayf8PAMj/DwDH/w4Axf8OAMX/DgDE/w4Aw/8OAML/DgDC/w4Awv8OAML/DgDC/w4A + wv8OAML/DgDC/w4Aw/8OAMP/DgDE/w4Axf8OAMb/DwDG/w4Fwf8DkzL/AMgA/wDIAP8AyAD/AMgA/wDH + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDCAv8GKV7/DACp/w8A2f8RAOf/EQDp/xEA + 6/8RAO3/EQDv/xIA8f8SAPP/BQBFkAAAAF4AAABVAAAAUwAAAFAAAABMAAAASQAAAEYAAABEAAAAQgAA + AEIAAABCAAAASAAAAFgAAAh0DQC84BIA8f8SAPH/EgDx/xIA8f8MALCpAAAFCwAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAYVCgCZsw8A0/8PANP/DwDT/w8A0/8JAIXEAAAAXAAAAEYAAAA7AAAAOQAA + ADkAAAA7AAAAPgAAAEAAAABDAAAARwAAAFIAAABuCAB8yg8Azf8PAMz/DwDK/w8Ayf8PAMj/DwDH/w4A + xv8OAMX/DgDF/w4AxP8OAMP/DgDD/w4Aw/8OAMP/DgDD/w4Aw/8OAMP/DgDE/w4AxP8OAMX/DgDG/w8A + x/8PAMj/DwDJ/w0StP8Brxf/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wGWGv8JAob/DQDB/xAA4/8RAOn/EQDr/xEA7f8RAO//EgDx/xIA8/8HAGa4BQBJqAQA + QZ4DADeXAgApjAEAFYAAAAZ6AAAFdgAAA3IAAAFwAAAAbwAAAHAAAAF0AAAHgQsAnNERAPD/EgDx/xIA + 8f8SAPH/DgDQzgEAEBUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAABAhDQC31g8A + 0/8PANP/DwDT/w8A0v8GAFywAAAAcgAAAGkAAABnAAAAaAAAAGoAAABsAAAAbgAAAXIAAAZ3AAALggAA + DJgJAIjeDwDP/w8Azf8PAMz/DwDK/w8Ayf8PAMj/DwDH/w8Ax/8PAMb/DgDF/w4Axf8OAMX/DgDE/w4A + xP8OAMT/DgDF/w4Axf8OAMX/DgDG/w8Axv8PAMf/DwDI/w8AyP8PAMr/DwDK/wstmv8Avwf/AMgA/wDI + AP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wVGSv8LAKH/DwDV/xAA + 6f8RAOz/EQDt/xEA8P8SAPH/EgDz/w8A0v8QAN//EgDw/xIA8f8SAPH/EgDx/xEA7fwQAOT2DwDX7w4A + y+oOAMToDgC+5g4AxukQAOD1EQDw/xIA8f8SAPH/EgDx/xAA5+wCAC4uAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgCACs/DwDL8Q8A0/8PANP/DwDT/w4A0P0LAKPgCQCI0gkA + f84JAIfRCQCO1AoAm9sMAKjkDACy7A0Av/INAMH4DACq/QwAuP8PAND/DwDP/w8Azf8PAMz/DwDL/w8A + yv8PAMn/DwDI/w8Ax/8PAMf/DwDG/w8Axv8OAMb/DgDG/w4Axv8OAMb/DwDG/w8Axv8PAMf/DwDH/w8A + yP8PAMn/DwDJ/w8Ayv8PAMz/DwDM/whSdv8AxwD/AMgA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/ALEL/wgKev8NALr/EADj/xEA7P8RAO7/EQDw/xIA8v8SAPP/DwDT/xAA + 3/8SAPD/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA + 8f8RAO/7BgBbVgAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AA0GAF5yDwDS/g8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w4A + y/8MAK3/DAC5/w8A0f8PAND/DwDP/w8Azv8PAMz/DwDL/w8Ayv8PAMn/DwDJ/w8AyP8PAMf/DwDH/w8A + x/8PAMf/DwDH/w8Ax/8PAMf/DwDH/w8AyP8PAMj/DwDJ/w8Ayv8PAMr/DwDL/w8Azf8PAM7/DgHM/wV9 + Sv8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/A2g1/woA + mP8OAND/EADq/xEA7v8RAPD/EgDy/xIA9P8PANT/EADg/xIA8P8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA + 8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EQDw/gkAiIIAAAEIAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAhAJAI2eDwDT/w8A0/8PANP/DwDT/w8A + 0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DgDM/wwAr/8NALr/DwDS/w8A0f8PAND/DwDP/w8A + zv8PAM3/DwDM/w8Ay/8PAMr/DwDJ/w8Ayf8PAMj/DwDI/w8AyP8PAMj/DwDI/w8AyP8PAMn/DwDJ/w8A + yf8PAMr/DwDL/w8Ay/8PAM3/DwDO/w8Az/8PAND/DgjF/wKkI/8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwQP/Bx1q/wwAsv8PAOH/EQDu/xEA8P8SAPL/EgD0/wwA + rc4QANrnEgDw/hIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xEA + 7fQIAH9wAAAEBwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABAAABxEKAJCcDwDS/A8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A + 0/8PAM3/DQCy/w0AuP8PANT/DwDS/w8A0f8PAND/DwDP/w8Azv8PAM3/DwDM/w8Ay/8PAMv/DwDK/w8A + yv8PAMr/DwDJ/w8Ayf8PAMn/DwDJ/w8Ayv8PAMr/DwDL/w8Ay/8PAMz/DwDN/w8Azv8PAM//DwDQ/w8A + 0f8PANL/DB6v/wC6DP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8CjCD/CQCP/w4Ayv8QAOr/EQDx/xIA8v8SAPT/BQBLagAAARIBACAQBAA3KgQAREEGAGhSCABvYggA + cnIJAIWCCwCjjgsAp5YMAKeWCwCmkgkAhn8IAG5dAgAgFwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAUAAAAJAAAACgAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAMAAAAEAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYEAD09CQCEigsA + orINALnBDQC6xA0AuL8MALS6CgCVrAkAi5oJAIiLCAB1eQYAV2gEAEJnCAB9sxAA1f8PANT/DwDT/w8A + 0f8PAND/DwDP/w8Az/8PAM7/DwDN/w8Azf8PAMz/DwDL/w8Ay/8PAMv/DwDL/w8Ay/8PAMv/DwDL/w8A + y/8PAMz/DwDN/w8Azf8PAM7/DwDP/w8A0P8PANH/DwDS/w8A0/8PANP/CkCM/wDEA/8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDGAP8FPVP/CwCp/w8A3f8RAPD/EgDz/xIA + 9P8EAERZAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALAAAAFgAAABwAAAAYAAAADQAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAwAAAAPAAAADAAA + AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAA + AAAAAAAAAAAABAAAACAGAFyMEADW/xAA1f8PANT/DwDT/w8A0v8PANH/DwDQ/w8Az/8PAM7/DwDO/w8A + zf8PAM3/DwDM/w8AzP8PAMz/DwDM/w8AzP8PAMz/DwDN/w8Azf8PAM7/DwDO/w8Az/8PAND/DwDR/w8A + 0v8PANL/DwDU/xAA1f8PANT/B2dk/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wGpEP8ICIH/DQDC/xEA6v8SAPP/EgD1/wMAM0UAAAAJAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAEQAA + ACMAAAAxAAAAMAEAEisDADcoAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAJAAAAFgAAACAAAAAhAAAAFgAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGwUATHcQANj/EADW/xAA + 1f8PANT/DwDT/w8A0v8PANH/DwDQ/w8A0P8PAM//DwDP/w8Azv8PAM7/DwDO/w8Azv8PAM7/DwDO/w8A + zv8PAM7/DwDO/w8Az/8PAM//DwDQ/w8A0f8PANL/DwDS/w8A0/8QANT/EADW/w8A1/8PBNH/BI87/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wNgPP8LAJ//DwDZ/xEA + 8f8RAPP6AQAUMwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAACQAAABgAAAAvAAAARAAAAEkEAElrDAC9sgEAERMAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAYXDAC8whAA + 7P8QAOz/EADs/w8A3PQDADqJAAAASAAAACUAAAAOAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAHAAABJg0Au9UQAOD/EADf/xAA3v8QAN3/EADc/xAA2/8QANv/EADa/xAA2v8QANn/EADZ/xAA + 2f8QANj/EADY/xAA2P8QANj/EADY/xAA2P8QANn/EADZ/xAA2f8QANr/EADa/xAA2/8QANz/EADc/xAA + 3f8PAN7/EADf/xAA4P8QAOH/EADi/xEA4/8RAOX/EADl/whhc/8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMQA/AAuAJUAAABCAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAcAAAAaAAAAOQAAAF8GAF+qEQDu/BIA9P8SAPT/EgD0/xEA7PIEAEM9AAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYBAB8tDwDa5BAA7P8QAOz/EADs/w8A4PYEAD+MAAAARwAA + ACQAAAAMAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAaCAB9mxAA4f8QAOD/EADf/xAA + 3v8QAN3/EADd/xAA3P8QANv/EADb/xAA2v8QANr/EADa/xAA2v8QANn/EADZ/xAA2f8QANn/EADa/xAA + 2v8QANr/EADa/xAA2/8QANv/EADc/xAA3f8QAN3/EADe/w8A3/8QAOD/EADh/xAA4v8RAOP/EQDk/xEA + 5f8RAOf/EAPi/wWKRf8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AJwA4gAD + AGgAAAAoAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAFwAAADYAAABdBgBbpxEA7/wSAPT/EgD0/xIA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAABIFAEhsDACy+AoAmf8JAIj/CQCK/wkAjv8LAKX/DQDC/w8A3P8QAOr/EQDt/xEA + 7f8RAO3/EQDt/xEA7f8RAO7/EQDu/xEA7v8RAO//EQDv/xAA6/8PANn/DQC7/wsAmP8JAI3/CwCh/wwA + rf8LAKb/CwCl/wwAtOYCACs9AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAIgDA + AOkAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AHcAygAAAFoAAAAeAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFQAAAD0DADKXCgCS/QwA + sP8NAML/DgDK/wwAtP8LAKr/DgDN/w8A5v8RAO7/EQDu/xEA7v8RAO//EQDv/xEA7/8RAO//EQDv/xEA + 8P8RAPD/EADn/w4Ay/8LAKP/CgCY/wwArf8NALr/DgDI/w8A1f8OAMz8AgArcAAAACIAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4ASADHAPsAyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AxAD8ACcAkAAAAD8AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAAfAAAASwcAasMMAKv/DQC0/w4AwP8OAM7/EADb/w0Ayf8NAL//EADh/xEA + 8P8RAPD/EQDw/xEA8P8RAPD/EQDw/xEA8f8RAPH/EgDx/xIA8f8QAOT/DQDB/wsApf8MAK//DQCx/w0A + uv8OAMb/DwDT/xAA4P8JAI+wAAAAKgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQABAHcAewDHAP4AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AlwDgAAEAZgAAACcAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACYCAClvDQC3/g0A + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA + ESAOANLhEADh/xAA4P8QAOH/EADl/xEA6/8PAN/fAQAUGwAAABYAAAAoAQEdPAQLkpYHAGdlBwBscAcA + bHMHAGxwBgBhZwMNnKYAABE5AAAAIwAAABABABslDgDV3hAA5v8QAOb/EADn/xEA7P8QAOzxBABEPAAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAkACcAMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AIgA1gABAGEAAAAiAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwQAREAPAN7kEQDr/xEA6/8RAO7/DwDm5gQA + Sj4AAAAOAAAAJAAAADcADm2PAAtYawAAAAkAAAAAAAAAAAAAAAQAAAAaABB7mAAMYokAAAA2AAAAGgAA + AAoCACIjDACvpBAA6OgRAO/sDQDIvwQAQzcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAwArwDKAMgA/wDIAP8AyAD/AMgA/wDI + AP8AxgD+ADYAnAAAAEUAAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABAEAIBkIAHVqCgCMjwgAf20CACYbAAAABwAAABkAAAA5AAMdWgAczuwABCM3AAAABQAA + AAAAAAAAAAAAAQAAABQACERmABzQ8wAEImIAAAAvAAAAEQAAAAQAAAACAgAmCwMALw4AAAcCAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAApACYAwADqAMgA/wDIAP8AyAD/AMgA/wDIAP8ApgDpAAQAbAAAACwAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAOAAAALAAAAE4AFJXBABrB3AAABBoAAAACAAAAAAAAAAAAAAAAAAAADQABDzcAHdn5ABWk0AAA + BEwAAAAkAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAE0AxwD6AMgA/wDI + AP8AyAD/AMgA/wDIAP8AVwC0AAAAUAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB0AAABEAAg+hgAd2v4AEo6nAAAAEAAA + AAEAAAAAAAAAAAAAAAAAAAAHAAAAJQAXsNAAHdv/AAxhnwAAAD4AAAAZAAAABgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQB5AH4AxwD+AMgA/wDIAP8AyAD/AMgA/wC6APYAEgB+AAAANgAA + AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAARAAAAMwAABV4AGLbiAB7b/wALVm0AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAaAA5xlgAd + 2/8AHNH2AAQkbgAAADAAAAAQAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABQCi + ALUAyAD/AMgA/wDIAP8AyAD/AMgA/wB5AMsAAABbAAAAHwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACIAAABKAAxdpQAd2v8AHdf4AAQfMgAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAABjFXAB3b/gAe3P8AFqjVAAADTQAAACQAAAAKAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAFwC7AN4AyAD/AMgA/wDIAP8AyAD/AMMA/AAs + AJMAAABAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAAUAAAAOAACEWsAGsfwAB7b/wAZudQAAAAVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA + BiwAGsflAB7c/wAd2/8ADGKgAAAAPQAAABgAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAEAAPADGAPUAyAD/AMgA/wDIAP8AyAD/AJgA4AADAGgAAAAoAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAAACYAAABQAA94uQAe2/8AHtv/ABB8lAAA + AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGwASiKgAHtz/AB7c/wAc0fYABCJrAAAALwAA + ABAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0AbADHAP4AyAD/AMgA/wDI + AP8AxwD/AEcAqQAAAEsAAAAUAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAQAAAAWAAAAPAAEInkAHNP5AB7b/wAd2v4ABztLAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAQAAg+XwAd2/4AHtz/AB7c/wAWptQAAANLAAAAIgAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAABgADAJEAoADHAP8AyAD/AMgA/wDIAP8AsgDwAAsAdgAAADEAAAAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAAACgAAABUABOQygAe2/8AHtv/ABvJ4gAA + BBYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAQgpABrF4gAe3P8AHtz/AB3b/gAM + WpgAAAA6AAAAFgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAOALAAzQDI + AP8AyAD/AMgA/wDIAP8AawDCAAAAVgAAABsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAQAAAAYAAAAPgAFLIEAHdj8AB7b/wAe2/8AEYSXAAAACwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAABYAD3eVAB7c/wAe3P8AHtz/ABvL8QADGWMAAAAsAAAADgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAoAMIA7gDIAP8AyAD/AMgA/wDBAPoAHgCIAAAAPAAA + AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADAAAACsAAABWABSc0gAe2/8AHtv/AB3a/gAG + MUAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAEI0AAHdb4AB7c/wAe + 3P8AHtz/ABOWyAAAAUcAAAAgAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAVwBSAMcA/ADIAP8AyAD/AMgA/wCLANcAAABhAAAAIwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAUAAAAbAAAAQgAHOowAHdr+AB7b/wAe2/8AGLfMAAACEQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAUl7IAHtz/AB7c/wAe3P8AHdv+AAlJjAAAADgAAAAWAAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAfgCIAMcA/wDIAP8AyAD/AMYA/gA6 + AJ4AAABGAAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADwAAADAAAAJbABet3gAe2/8AHtv/AB7b/wAL + WWoAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAMAAY0TAAd + 2v0AHtz/AB7c/wAe3P8AGsXsAAIRXgAAACwAAAAOAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAARAAgAowC6AMgA/wDIAP8AyAD/AKcA6gAHAG8AAAAtAAAABgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAgAAAAgAAAASAAKTJoAHdr+AB7b/wAe2/8AG8nkAAENGgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAWABSbtAAe3P8AHtz/AB7c/wAe3P8AE5HFAAAASgAA + ACIAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABwAuQDgAMgA/wDI + AP8AyAD/AFsAtgAAAFIAAAAYAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADcAAQpmABm76QAe2/8AHtv/AB7b/wAO + b4AAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAkABSc+AB3X9gAe3P8AHtz/AB7c/wAd2v4ACUqRAAAAPwAAABwAAAAHAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAD8AxQD3AMgA/wDIAP8AugD2ABYAgAAAADcAAAAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAwAAAAoAAAAUgAObbQAHdr/AB7b/wAe2/8AHM7oAAIVIAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABIAEIKZAB7c/wAe3P8AHtz/AB7c/wAb + y/IAAx5wAAAANgAAABYAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBx + AHAAyAD/AMgA/wDIAP8AfQDOAAAAXQAAACAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAHQAAAEMABCF+ABzQ+AAe2/8AHtv/AB3a/wAO + bn4AAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABgACEycAGsjiAB7c/wAe3P8AHtz/AB7c/wAXsN4AAQteAAAAMAAAABMAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgCZAKYAyAD/AMgA/wDGAP4ALgCWAAAAQgAA + AA8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA + ABUAAAA2AAACYQAVodcAHtv/AB7b/wAe2/8AG8vlAAIPGwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAAJTF8AHdr8AB7c/wAe + 3P8AHtz/AB7c/wATjsYAAAJUAAAALQAAABIAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABwAEAC0ANIAyAD/AMgA/wCeAOQAAwBpAAAAKQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAALgAAAFUADFuqAB7a/wAe2/8AHtv/AB7b/wAN + Y24AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAACEgASj6EAHtv/AB7c/wAe3P8AHtz/AB3b/wAOa68AAABQAAAALAAA + ABIAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIALgDDAO8AyAD/AMcA/wBP + AK4AAABNAAAAFQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADgAA + ACgAAABNAAUnhgAc0fgAHtv/AB7b/wAe2/8AGbvOAAAEEAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAIPIAAZ + vNQAHtz/AB7c/wAe3P8AHtz/AB3Z/QALWqIAAABQAAAALAAAABMAAAAFAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAF0AWgDHAPwAyAD/ALMA8gAOAHgAAAAyAAAACAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA + AAQAAAAEAAAAAgAAAAEAAAACAAAABAAAABAAAAAnAAAASQABDXQAGLXmAB7b/wAe2/8AHtv/AB3a+gAH + PUQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAUtPAAd1/MAHtz/AB7c/wAe3P8AHtz/AB3Y/AAL + WaIAAABSAAAAMQAAABYAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAIUAkADH + AP8AyAD/AG0AwwAAAFgAAAAcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAATAAAAHAAAACAAAAAbAAAAFgAAABYAAAAeAAAAMAAA + AE4AAAdxABWb1wAd2v8AHtv/AB7b/wAd2v8AEoyWAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAKAApSYAAd2foAHtz/AB7c/wAe3P8AHtz/AB3Z/AAMW6YAAABZAAAAOQAAAB4AAAAOAAAABAAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAIAKwAxADIAP8AwQD6ACIAigAAADwAAAAMAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFgAA + AC4AAABDAAAASwAAAEYAAABAAAAAQAAAAEgAAABbAAEHdwATkNAAHtv/AB7b/wAe2/8AHtv/ABnA1AAC + EhgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAANAA5wegAd2/0AHtz/AB7c/wAe + 3P8AHtz/AB3a/gAPdLkAAARkAAAARgAAAC0AAAAbAAAADwAAAAoAAAAIAAAACQAAAAwAAAAMAAAACQAA + AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAJgAgAMAA5wDIAP8AjQDWAAEAYgAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAmAAABSwAGMYQABi+OAAEIdgAAAG0AAABsAAAAdAAF + JpIAFqfgAB7b/wAe2/8AHtv/AB7b/wAc1fMABzo+AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAMAAAIPABGBjwAd2/4AHtz/AB7c/wAe3P8AHtz/AB3b/wAUnNUAAhZ6AAAAWAAA + AEQAAAA1AAAALQAAACoAAAAsAAAAMAAAADAAAAAlAAAAFgAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASgBHAMcA+QDHAP4APACcAAAARgAA + ABEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAA + ADEACk6OABzX/AAd2v4AG8jzABWg3QASjdMAFqjiABzV/AAe2/8AHtv/AB7b/wAe2/8AHdr+AA1naQAA + AAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIQABGKmAAd + 2/8AHtz/AB7c/wAe3P8AHtz/AB7c/wAayPIADFutAAAGcgAAAGIAAABaAAAAWAAAAFoAAABeAAAAXAAA + AEsAAAAwAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAACAAEAdwB6AMcA/wCqAOkABgBqAAAALQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALgAWp9AAHdr/AB7b/wAe2/8AHtv/AB7b/wAe + 2/8AHtv/AB7b/wAe2/8AHtv/AB7a/wASjpUAAAEIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAMOABGEjwAd2/4AHtz/AB7c/wAe3P8AHtz/AB7c/wAd + 2/8AGb/tAA93wgAJRaQABjOaAAhAogAMW7IAEH3EAA94tAACFFUAAAAiAAAABgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAYAmgCwAMcA/wBd + AK8AAABPAAAAGAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAgAAAAgABez2AAd2v8AHtv/AB7b/wAe2/8AHtv/AB7b/wAe2/8AHtv/AB7b/wAd2v4AFJqfAAAICgAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAEMAA5ydgAd2PgAHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe + 3P8AHtz/ABarzQAAAyoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiABQAtwDZAL0A9QAZAHMAAAA2AAAACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABAAE5ekAB3a/wAe2/8AHtv/AB7b/wAe + 2/8AHtv/AB7b/wAe2/8AHdr7ABGEiAAABQkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAlJTQAbzOQAHtz/AB7c/wAe + 3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHdv8AAQiNgAAAAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3 + ADQAxQD0AIIAwgAAAFIAAAAgAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABAADHyAAE5OaABzT6wAd2v8AHtv/AB7b/wAe2/8AHdr/ABnBzgAJTUsAAAIEAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAFAAQhJgAWpLAAHtv+AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe + 3P8AHtz/AB7c/wAd2/sABCQqAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAGMAxAD6ADIAewAAADsAAAAOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAhQRAAlIQgAP + dHMAD3eCAA90cwAIRjsAAAYIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAADCQAK + UlAAGbrFAB3b/gAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/ABaprgAABAoAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAUAAwCQAJsAoADUAAQASwAAACQAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgcABzo0ABB+gwAXr7oAHNPdABzU6AAc + 0tsAGLbAABKJjAALVU0AAQkJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcADACrAMoAUwCEAAAANwAA + ABIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAC4AJwCwANMADwBAAAAAIwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAUQB1 + AJMAAAAoAAAAEgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAHwAfQAmADsAAAAYAAAABgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAEAAHAHYAbAACABMAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAYAD8AKQAAAAYAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAALQAMAAQAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////8AH//////////////////+AAf/////////////////+AA + D//////////////////AAAf/////////////////gAAD/////////////////wAAA/////////////// + //4AAAH////////////////4AAAB////////////////8AAAAP///////////////+AAAAAA///////g + ///////AAAAAAA//////wP///4H/gAAAAAAD/////wD///+A/gAAAAAAAP////4A////gHwAAAAAAAB/ + ///8AP///4A4AAAAAAAAH///+AH////AAAAAAAAAAA////AD////wAAAAAAAAAAH///AA////+AAAAAA + AAAAA///gAf////wAAAAAAAAAAP//4AH////8AAAAAAAAAAB//8AD/////gAAAAAAAAAAP/+AB/////4 + AAAAAAAAAAB//AAf////8AAAAAAAAAAAf/gAP////+AAAAAAAAAAAD/wAH////+AAAAAAAAAAAAAAAD/ + ////AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////wAAAAAAAAAAAAAAAP////8AAAAAAAAAAAA + AAAH////+AAAAAAAAAAAAAAAD/+H//gAAAAAAAAAAAAAAB/+B//4AAAAAAAAAAAAAAA//Af/+AAAAAAA + AAAAAAAA//gH//wAAAAAAAAAAAAD///gB//8AAAAAAAAAAAAA///wA///AAAAEAAAAAAAAP//4AP//4A + AADAAAAAAAAD//8AH///AAADwAAAAAAAAf/+AD///wAPH8AAAAAAAAH//AA///+AB/+AAAAAAAAB//gA + f///wAf/gAAAAAAAAf/wAH///8AD/4AAAAAAAAH/4AD////gAf+AAAAAAAAB/8AB////8AD/gAAAAAAA + Af/AA/////AAf4AAAAAAAAAAAAP////4ADgAAAAAAAAAAAAH/////AAAAAAAAAAAAAAAD/////4AAAAA + AAAAAAAAAB/////+AAAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAH////// + wAAAAAAAAAAAAADw/////+AAAAAAAAAAAAADwP///+DwAAAAAAAAAAH//4D////gPgGAAAAAAAAB//4A + ////4B//gAAAAAAAAf/8AP///+AH/4AAAAAAAAH/+AH////wA//AAAAAAAAB/+AB////8AH/wAAAAAAA + Af/AA/////gA/8AAAAAAAAP/gAf////8AH/AAAAAAAAB/wAH/////AA/wAAAAAAAAf4AD/////4AH+AA + AAAAAAD8AB//////AA/gAAAAAAAA+AA//////wAH4AAAAAAAAHAAP/////+AA+AAAAAAAAAgAH////// + wAHwAAAAAAAAAAD//////+AAAAAAAAAAAAAB///////wAAAAAAAAAAAAA///////+AAAAAAAAAAAAAf/ + //////gAAAAAAAAAAAAP///////8AAAAAAAAAAAAH////////gAAAAAAAAAAAD////////8AAAAAAAAA + AAB/////////gAAAAAAAAAAB/////////8AAAAAAAADAAP///////////4AAAAAA4AD///////////+A + AAAAAeAAf///////////wAAAAAPwAH///////////+AAAAAH+AA////////////gAAAAB/wAP/////// + ////4AAAAAf8AB///////////+AAAAAH/gAP///////////gAAAAB/8AD///////////4AAAAAf/gAf/ + /////////+AAAAAH/4AH///////////wAAAAD//AA///////////8AAYAB//4AH///////////gAGAA/ + //AB////////////4BwD///4AP///////////+AcA///+AD////////////APAH///wAf/////////// + wDwA///+AH///////////4A+AP///wA///////////8AfgB///+AH///////////AH4AP///gB////// + /////gB/AD///8AP//////////4AfwAf///gD//////////8AP8AD///8Af//////////AD/gA////AD + //////////gB/4AH///4A//////////wAf/AA////AH/////////8AP/wAH///4B/////////+AD/+AA + ///+AP/////////AA//wAP///wB/////////wAf/8AB///+Af////////4AP//gAH///wD////////8A + D//8AA///+A///////8AAB///AAH///gH//////+AAAf//4AAf//8B///////gAAP///AAAB//gP//// + //4AAH///4AAAP/8B//////+AAB////AAAD//Af//////gAA////4AAA//4D//////4AAf////AAAP// + A//////+AAP////4AAD//4H//////gAH/////AAA///B//////+AH/////8AAP//wP////////////// + wAH//+B///////////////gP///wf///////////////////+D////////////////////g///////// + ///////////8H////////////////////h////////////////////8f//////////////////////// + ////////////////////////////////////////KAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAA0AIAAuAF8ANQBwABEARgAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAUARQBqALUA7ADHAP8AxwD/AMAA+gBhAK4AAQAhAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAEACQBlAJEAxQD8AMcA/wDHAP8AxwD/AMcA/wDHAP8ASQCVAAAACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAXAIIAswDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AswDxAA0ARgAAAAUAAAAHAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAMAAAABQAAAAAAAAAAAAAAAQAaACkAmgDOAMYA/wDGAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AG4AyAAACmYBABtsAQATYAAAAT8AAAAbAAAABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA4AAAcsAQAVGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAC9QAAALPwAAAAwAAAACACgAQgCuAOUAxgD/AMYA/wDG + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMMA/gcgbvwOAMP+DgDI/QwAtOsHAGitAAALRwAA + AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAGAIAH2QKAJOrAAATCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABEdCQCN0gIAH2gAPgBtALwA9ADG + AP8AxgD/AMYA/wDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wGQHf8MAaj/DgDK/w4A + 0P8PANb/DQC/7AMALWwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAfBAA/hg8A + 2PAEAENEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBABDbQVX + T/kAwwD9AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8FQVb/DgDC/w4Az/8PANT/DwDa/w4A0fUDADJpAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AB0FAEmOEADk+gkAjJQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAABwAQAHYAqADGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AMcA/wC4APUAxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8ArQ3/CgmW/w4Azf8PANP/DwDZ/xAA3/8OAMvtAQAVQgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAFQQAPoIQAOT6DQC/ygAAEgsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAATABwAkADCAMYA/wDGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AK8A7AQY + PbQEeEH/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/BGY5/w0Avv8PANL/DwDY/w8A3v8QAOP/CgCZxAAA + AEAAAAAyAAAAKwAAACYAAAApAgAjbA8A3fYPANTiAgAmHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAABgAHwCgANQAxwD/AMYA/wDGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDG + AP8Aswb5AR8UrQsAme8MB6P/Ap0j/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMED/wgbgP8OAND/DwDX/w8A + 3f8QAOL/EADn/goAmeILAKraCwCc0AoAkMcJAIzHDgDM7RAA5fYEAEA7AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwApADHAP8AxwD/AMYA/wDGAP8AxwD/AMYA/wDG + AP8AxgD/AMYA/wC3C/8IJID/CgCT/wwAsf8MAK7/CxiW/wC4DP8AxwD/AMcA/wDHAP8AxwD/AMcA/wKI + JP8MALb/DwDW/w8A3P8QAOL/EADn/w4A1PsOANHsEADr+RAA7P8QAOz/EADh7QYAXlsAAAABAAAAAAAA + AAAAAAAAAAAAAgAAAAsAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AaQDEAfwAxwD/AMYA/wDG + AP8AxwD/AMYA/wDGAP8AxgD/ALoA8gQoSKgGAGKhCwCf8g0AtP8MALH/DACw/wk5ff8AxAL/AMcA/wDH + AP8AxwD/AMcA/wDGAP8GOWT/DwDR/w8A3P8QAOH/EADn/xAA5PcBABMxAAAKBQMAMgwDAD4PAAARAwAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAFAABAEUASgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAC4ACAARAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/4H/////////AP//// + ////4Af////////AAH//P///4wAAH/w////gAAAP+D////AAAAfwf///8AAAA+B////wAAAB4P///+AA + AAAB////wAAAAAP////AAAAAA4///8AAAAAPD///wAAAAH4P///gEAAAfB///+BwAAB4P///8HAAAAA/ + ///4AAAAAH////wAAAAA/////AAAAAE////xAAAAfD////BwAAB4P///+DAAAHB////4GAAAYP////wI + AAAA/////gAAAAH/////AAAAA/////+AAAAH/////8AAAA///////wACB///////AAcH//////8AB4P/ + /////wAHgf//////gh/B///////CH+D//////8IP8P//////hw/wf/////+HB/g//////weD/D/////+ + D4H+H/////APwP8f////4B/gDw/////gP/APj////+B/+A/H////+P/8D+P/////////4//////////z + /////////////ygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEANgBHAGQAmQBRAIoACwAmAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAGUAhQDGAP0AyAD/AMgA/wCaANwAAwAaAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA0ADQCAAKsAxwD/AMgA/wDIAP8AyAD/AMgA/wBR + AJQAAAAZAAAAGAAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgsBABY8AAAABQAdAB4AmADKAMcA/wDHAP8AyAD/AMgA/wDI + AP8AyAD/ALgA+QcOZtkKAJTYBwBurwEAF0cAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMA + LmIDADo4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUAW4sCICiPAK0A4wDHAP8AxwD/AMcA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/A3U0/w4Awv8PANH/DwDN9gQAQXQAAAAGAAAAAAAAAAAAAAAAAAAAAAAA + AA8FAFGLCwCkswAAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAD0IYQC6CP8AxwD/AMcA/wDH + AP8AxwD/AMgA/wDAAPoAyAD/AMgA/wDIAP8AxQH/CSZ//w4Az/8PANj/DwDa+gMAM1oAAAABAAAAAAAA + AAAAAAAKBQBQiA8A1eYDADAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBWAHAAwwD7AMcA/wDH + AP8AxwD/AMcA/wDHAP8AngDiBxhl1wGuFf8AyAD/AMgA/wDIAP8BmRv/DQC8/w8A1v8QAN//DgDD5QIA + JGkBABxVAQAPSQQAO3sPAODzBQBLOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbQBWAMcA/gDH + AP8AxwD/AMcA/wDHAP8AxwD/AaMb/wcOcOwMAK7/CiaK/wDBBf8AyAD/AMgA/wDHAP8GSGD/DwDU/xAA + 3v8QAOb/DgDQ+BAA6fkRAO3/EADo9wcAbWEAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAABH + ADABohPpAMYA/gDHAP8AxwD/AMcA/wCnANoEFEBwCQCC0Q0AtP8NALH/B0xt/wDHAP8AyAD/AMgA/wCz + C/8MCq//EADd/xAA5f8MALHLAAAECQMANgkBACAFAAAAAAAAAAAAAAADAAAKMwQARlgAAAAAAAAAAAAA + AAAAAAAAAAAAAAUAU2QGDlijAC0ARQCAAFkAgQBhACEAEgAAAA8LAJ7gDQC6/w0At/8NALf/BXdJ/wDI + AP8AyAD/AMcA/wRrQv8PANj/EADl/xAA6PoBABEaAAAAAAAAAAAAAAAAAAAABAIAHVANALbTAwAtGwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAADBAsAm74HAGWeAAAADAAAAAAAAAAAAAAIHw4AwfwOAL//DgC8/w4A + vP8NBbj/Ap4n/wDIAP8AxwD/AMMC/wofl/8QAOX/EQDu/wQAREIAAAAAAAAAAAAAAAIBABtKDwDS7AcA + ZVcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAfGw0AvOQFAEyCAAAAFQAAABUBABxLDgDJ/w4A + xP8OAML/DgDB/w4Awv8MF63/AbcP/wDHAP8AyAD/ApAm/w8A1/8RAO7/BgBWhwAACD8AAAA0AAALSA4A + w+IKAI6IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAA6PQ4Ax/QJAIzPCgCR0woA + meUPAM7/DwDK/w4Ax/8OAMb/DgDH/w8Ayv8KNZb/AMUC/wDIAP8AxwD/CD14/xEA7v8QAOP6EQDw/xEA + 6fsRAOr7DACvswAACQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAADBgBXNwsA + nHAKAJBpBwBldA8A1P8PAND/DwDN/w8Ay/8PAMz/DwDO/w8A0v8IX27/AMgA/wDIAP8BrRH/DgbM/wYA + XlcFAFQSBwBuIggAcyAAAAUCAAAAFwEAFiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwA5QwMA + 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 + rEE= + + \ No newline at end of file diff --git a/Source/ModelViewer/ModelViewer.csproj b/Source/ModelViewer/ModelViewer.csproj index 50ca7c1c..b6f47b00 100644 --- a/Source/ModelViewer/ModelViewer.csproj +++ b/Source/ModelViewer/ModelViewer.csproj @@ -1,212 +1,212 @@ - - - - Debug - x86 - 8.0.30703 - 2.0 - {A678C6EB-B329-46A9-BBFC-7585F01ACD7C} - Library - Properties - Microsoft.Boogie.ModelViewer - ModelViewer - v4.0 - Client - 512 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - 0 - - - AnyCPU - true - full - false - ..\..\Binaries\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - ..\..\Binaries\ - TRACE - prompt - 4 - - - true - - - ..\InterimKey.snk - - - bvdicon.ico - - - true - ..\..\Binaries\ - DEBUG;TRACE - full - AnyCPU - ..\..\Binaries\BVD.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules - True - False - True - False - False - False - False - False - False - False - False - False - True - False - False - False - - - - - - - False - Full - Build - 0 - 4 - false - - - - - - true - bin\QED\ - DEBUG;TRACE - full - AnyCPU - prompt - MinimumRecommendedRules.ruleset - - - - - - - - - - - - - - - - - Form - - - Main.cs - - - - - Form - - - SourceView.cs - - - - - Main.cs - Designer - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - SourceView.cs - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - False - Microsoft .NET Framework 4 Client Profile %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - false - - - False - Windows Installer 3.1 - true - - - - - - - - {acef88d5-dadd-46da-bae1-2144d63f4c83} - Model - - - - + + + + Debug + x86 + 8.0.30703 + 2.0 + {A678C6EB-B329-46A9-BBFC-7585F01ACD7C} + Library + Properties + Microsoft.Boogie.ModelViewer + ModelViewer + v4.0 + Client + 512 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + 0 + + + AnyCPU + true + full + false + ..\..\Binaries\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + ..\..\Binaries\ + TRACE + prompt + 4 + + + true + + + ..\InterimKey.snk + + + bvdicon.ico + + + true + ..\..\Binaries\ + DEBUG;TRACE + full + AnyCPU + ..\..\Binaries\BVD.exe.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + True + False + True + False + False + False + False + False + False + False + False + False + True + False + False + False + + + + + + + False + Full + Build + 0 + 4 + false + + + + + + true + bin\QED\ + DEBUG;TRACE + full + AnyCPU + prompt + MinimumRecommendedRules.ruleset + + + + + + + + + + + + + + + + + Form + + + Main.cs + + + + + Form + + + SourceView.cs + + + + + Main.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SourceView.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + False + Microsoft .NET Framework 4 Client Profile %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + False + Windows Installer 3.1 + true + + + + + + + + {acef88d5-dadd-46da-bae1-2144d63f4c83} + Model + + + + \ No newline at end of file diff --git a/Source/ModelViewer/Namer.cs b/Source/ModelViewer/Namer.cs index 0eb2418e..3adf0a11 100644 --- a/Source/ModelViewer/Namer.cs +++ b/Source/ModelViewer/Namer.cs @@ -1,580 +1,580 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Numerics; - -namespace Microsoft.Boogie.ModelViewer -{ - public enum NameSeqSuffix - { - None, - WhenNonZero, - Always - } - - public abstract class LanguageModel : ILanguageSpecificModel - { - protected Dictionary baseNameUse = new Dictionary(); - protected Dictionary canonicalName = new Dictionary(); - protected Dictionary invCanonicalName = new Dictionary(); - protected Dictionary localValue = new Dictionary(); - protected Dictionary sourceLocations = new Dictionary(); - public readonly Model model; - - protected virtual bool UseLocalsForCanonicalNames - { - get { return false; } - } - - public readonly ViewOptions viewOpts; - public LanguageModel(Model model, ViewOptions opts) - { - this.model = model; - viewOpts = opts; - } - - public string AsPow2(Model.Integer elt) - { - var n = BigInteger.Parse(elt.Numeral); - var pow = new BigInteger(4096*4); - var k = 14; - var neg = false; - - if (n < 0) { - n = -n; - neg = true; - } - - while (k < 150) { - var diff = pow / 1000; - if (pow - diff < n && n < pow + diff) { - diff = n - pow; - var res = string.Format("2^{0}{1}{2}", k, diff >= 0 ? "+" : "", diff); - if (neg) res = "-(" + res + ")"; - return res; - } - if (n < pow) break; - k++; - pow *= 2; - } - - return elt.ToString(); - } - - // Elements (other than integers and Booleans) get canonical names of the form - // "'", where is returned by this function, and is given - // starting with 0, and incrementing when there are conflicts between bases. - // - // This function needs to return an appropriate base name for the element. It is given - // the element. - // - // A reasonable strategy is to check if it's a name of the local, and if so return it, - // and otherwise use the type of element (e.g., return "seq" for elements representing - // sequences). It is also possible to return "" in such cases. - // - // The suff output parameter specifies whether the number sequence suffix should be - // always added, only when it's non-zero, or never. - protected virtual string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff) - { - string res; - if (elt is Model.Integer || elt is Model.Boolean) { - suff = NameSeqSuffix.None; - return elt.ToString(); - } - suff = NameSeqSuffix.Always; - if (UseLocalsForCanonicalNames) { - if (localValue.TryGetValue(elt, out res)) - return res; - } - return ""; - } - - public virtual void RegisterLocalValue(string name, Model.Element elt) - { - string curr; - if (localValue.TryGetValue(elt, out curr) && CompareFieldNames(name, curr) >= 0) - return; - localValue[elt] = name; - } - - protected virtual string AppendSuffix(string baseName, int id) - { - return baseName + "'" + id.ToString(); - } - - public virtual string CanonicalName(Model.Element elt) - { - string res; - if (elt == null) return "?"; - if (canonicalName.TryGetValue(elt, out res)) return res; - NameSeqSuffix suff; - var baseName = CanonicalBaseName(elt, out suff); - if (baseName == "") - suff = NameSeqSuffix.Always; - - if (viewOpts.DebugMode && !(elt is Model.Boolean) && !(elt is Model.Number)) { - baseName += string.Format("({0})", elt); - suff = NameSeqSuffix.WhenNonZero; - } - - int cnt; - if (!baseNameUse.TryGetValue(baseName, out cnt)) - cnt = -1; - cnt++; - - if (suff == NameSeqSuffix.Always || (cnt > 0 && suff == NameSeqSuffix.WhenNonZero)) - res = AppendSuffix(baseName, cnt); - else - res = baseName; - - baseNameUse[baseName] = cnt; - canonicalName.Add(elt, res); - invCanonicalName[res.Replace(" ", "")] = elt; - return res; - } - - public virtual Model.Element FindElement(string canonicalName) - { - Model.Element res; - if (invCanonicalName.TryGetValue(canonicalName.Replace(" ", ""), out res)) - return res; - return null; - } - - public virtual string PathName(IEnumerable path) - { - return path.Select(n => n.Name).Concat("."); - } - - public abstract IEnumerable States { get; } - - /// - /// Walks each input tree in BFS order, and force evaluation of Name and Value properties - /// (to get reasonable numbering of canonical values). - /// - public void Flush(IEnumerable roots) - { - var workList = new Queue(); - - Action> addList = (IEnumerable nodes) => - { - var ch = new Dictionary(); - foreach (var x in nodes) { - if (ch.ContainsKey(x.Name)) { - // throw new System.InvalidOperationException("duplicated model entry: " + x.Name); - } - ch[x.Name] = x; - } - foreach (var k in SortFields(nodes)) - workList.Enqueue(ch[k]); - }; - - addList(roots); - - var visited = new HashSet(); - while (workList.Count > 0) { - var n = workList.Dequeue(); - - var dummy1 = n.Name; - var dummy2 = n.Value; - - if (n.Element != null) { - if (visited.Contains(n.Element)) - continue; - visited.Add(n.Element); - } - - addList(n.Children); - } - } - - #region field name sorting - /* - static bool HasSpecialChars(string s) - { - for (int i = 0; i < s.Length; ++i) - switch (s[i]) { - case '[': - case '<': - case '>': - case ']': - case '#': - case '\\': - case '(': - case ')': - return true; - } - return false; - } - */ - - static ulong GetNumber(string s, int beg) - { - ulong res = 0; - while (beg < s.Length) { - var c = s[beg]; - if ('0' <= c && c <= '9') { - res *= 10; - res += (uint)c - (uint)'0'; - } - beg++; - } - return res; - } - - public virtual int CompareFieldNames(string f1, string f2) - { - /* - bool s1 = HasSpecialChars(f1); - bool s2 = HasSpecialChars(f2); - if (s1 && !s2) - return 1; - if (!s1 && s2) - return -1; */ - var len = Math.Min(f1.Length, f2.Length); - var numberPos = -1; - for (int i = 0; i < len; ++i) { - var c1 = f1[i]; - var c2 = f2[i]; - if ('0' <= c1 && c1 <= '9' && '0' <= c2 && c2 <= '9') { - numberPos = i; - break; - } - if (c1 != c2) - break; - } - - if (numberPos >= 0) { - var v1 = GetNumber(f1, numberPos); - var v2 = GetNumber(f2, numberPos); - - if (v1 < v2) return -1; - else if (v1 > v2) return 1; - } - - return string.CompareOrdinal(f1, f2); - } - - public virtual int CompareFields(IDisplayNode n1, IDisplayNode n2) - { - var diff = (int)n1.Category - (int)n2.Category; - if (diff != 0) return diff; - else return CompareFieldNames(n1.Name, n2.Name); - } - - public virtual IEnumerable SortFields(IEnumerable fields_) - { - var fields = new List(fields_); - fields.Sort(CompareFields); - return fields.Select(f => f.Name); - } - #endregion - - #region Displaying source code - class Position : IComparable - { - public int Line, Column, Index; - public int CharPos; - public string Name; - - public int CompareTo(Position other) - { - if (this.Line == other.Line) - return this.Column - other.Column; - return this.Line - other.Line; - } - } - - public class SourceLocation - { - public string Filename; - public string AddInfo; - public int Line; - public int Column; - } - - public SourceViewState GetSourceLocation(string name) - { - SourceViewState res; - sourceLocations.TryGetValue(name, out res); - return res; - } - - // example parsed token: @"c:\users\foo\bar.c(12,10) : random string" - // the ": random string" part is optional - public virtual SourceLocation TryParseSourceLocation(string name) - { - var par = name.LastIndexOf('('); - if (par <= 0) return null; - - var res = new SourceLocation() { Filename = name.Substring(0, par) }; - - var words = name.Substring(par + 1).Split(',', ')', ':').Where(x => x != "").ToArray(); - if (words.Length < 2) return null; - - if (!int.TryParse(words[0], out res.Line) || !int.TryParse(words[1], out res.Column)) return null; - - var colon = name.IndexOf(':', par); - if (colon > 0) - res.AddInfo = name.Substring(colon + 1).Trim(); - else - res.AddInfo = ""; - - return res; - } - - static char[] dirSeps = new char[] { '\\', '/' }; - public virtual string ShortenToken(string tok, int fnLimit, bool addAddInfo) - { - var loc = TryParseSourceLocation(tok); - - if (loc != null) { - var fn = loc.Filename; - var idx = fn.LastIndexOfAny(dirSeps); - if (idx > 0) - fn = fn.Substring(idx + 1); - if (fn.Length > fnLimit) { - fn = fn.Substring(0, fnLimit) + ".."; - } - var addInfo = addAddInfo ? loc.AddInfo : ""; - if (addInfo != "") - addInfo = ":" + addInfo; - return string.Format("{0}({1},{2}){3}", fn, loc.Line, loc.Column, addInfo); - } else { - return tok; - } - } - - protected virtual void RtfAppend(StringBuilder sb, char c, ref int pos) - { - pos++; - switch (c) { - case '\r': pos--; break; - case '\\': sb.Append("\\\\"); break; - case '\n': sb.Append("\\par\n"); break; - case '{': sb.Append("\\{"); break; - case '}': sb.Append("\\}"); break; - default: sb.Append(c); break; - } - } - - protected virtual void RtfAppendStateIdx(StringBuilder sb, string label, ref int pos) - { - label += "."; - pos += label.Length; - sb.Append(@"{\sub\cf5\highlight4 ").Append(label).Append("}"); - } - - protected virtual void RtfAppendLineNo(StringBuilder sb, int num, ref int pos) - { - string n = string.Format("{0:0000}: ", num); - pos += n.Length; - sb.Append(@"{\cf6 ").Append(n).Append("}"); - } - - protected virtual void GenerateSourceLocations(IEnumerable states) - { - sourceLocations = new Dictionary(); - - var files = new Dictionary>(); - var sIdx = -1; - - foreach (var s in states) { - var sn = s.CapturedStateName; - sIdx++; - var loc = TryParseSourceLocation(sn); - if (loc == null) continue; - - List positions; - if (!files.TryGetValue(loc.Filename, out positions)) { - positions = new List(); - files[loc.Filename] = positions; - } - positions.Add(new Position() { Name = sn, Line = loc.Line, Column = loc.Column, Index = sIdx }); - } - - foreach (var kv in files) { - var positions = kv.Value; - positions.Sort(); - - string content = ""; - if (System.IO.File.Exists(kv.Key)) { - try { - content = System.IO.File.ReadAllText(kv.Key); - } catch { - continue; - } - } else { - continue; - } - - var pos = new Position() { Line = 1, Column = 1 }; - var currPosIdx = 0; - var output = new StringBuilder(); - RtfAppendLineNo(output, pos.Line, ref pos.CharPos); - - foreach (var c in content) { - if (c == '\n') { - pos.Column = int.MaxValue; // flush remaining positions in this line - } - - while (currPosIdx < positions.Count && pos.CompareTo(positions[currPosIdx]) >= 0) { - positions[currPosIdx].CharPos = pos.CharPos; - RtfAppendStateIdx(output, positions[currPosIdx].Index.ToString(), ref pos.CharPos); - currPosIdx++; - } - - RtfAppend(output, c, ref pos.CharPos); - - if (c == '\n') { - pos.Line++; - pos.Column = 1; - RtfAppendLineNo(output, pos.Line, ref pos.CharPos); - } else { - pos.Column++; - } - } - - var resStr = output.ToString(); - foreach (var p in positions) { - sourceLocations[p.Name] = new SourceViewState() { Header = p.Name, Location = p.CharPos, RichTextContent = resStr }; - } - } - } - #endregion - } - - public abstract class NamedState : IState - { - protected Model.CapturedState state; - private LanguageModel langModel; // no point making it protected - they will need VccModel, DafnyModel - - public NamedState(Model.CapturedState s, LanguageModel lm) - { - this.state = s; - this.langModel = lm; - } - - public Model.CapturedState State - { - get { return state; } - } - - public virtual string Name - { - get - { - return langModel.ShortenToken(state.Name, 20, true); - } - } - - // by overriding this, one state can masqureade another - public virtual string CapturedStateName - { - get { return State.Name; } - } - - public virtual SourceViewState ShowSource() - { - return langModel.GetSourceLocation(CapturedStateName); - } - - public abstract IEnumerable Nodes { get; } - } - - public class EdgeName - { - ILanguageSpecificModel langModel; - string format; - string cachedName; - Model.Element[] args; - - public EdgeName(ILanguageSpecificModel n, string format, params Model.Element[] args) - { - this.langModel = n; - this.format = format; - this.args = args.ToArray(); - } - - public EdgeName(string name) : this(null, name) - { - Util.Assert(name != null); - } - - public override string ToString() - { - if (cachedName != null) - return cachedName; - cachedName = Format(); - return cachedName; - } - - public override int GetHashCode() - { - int res = format.GetHashCode(); - foreach (var c in args) { - res += c.GetHashCode(); - res *= 13; - } - return res; - } - - public override bool Equals(object obj) - { - EdgeName e = obj as EdgeName; - if (e == null) return false; - if (e == this) return true; - if (e.format != this.format || e.args.Length != this.args.Length) - return false; - for (int i = 0; i < this.args.Length; ++i) - if (this.args[i] != e.args[i]) - return false; - return true; - } - - protected virtual string Format() - { - if (args == null || args.Length == 0) - return format; - - var res = new StringBuilder(format.Length); - for (int i = 0; i < format.Length; ++i) { - var c = format[i]; - - /* - var canonical = false; - if (c == '%' && i < format.Length - 1) { - if (format[i + 1] == 'c') { - ++i; - canonical = true; - } - } - */ - - if (c == '%' && i < format.Length - 1) { - var j = i + 1; - while (j < format.Length && char.IsDigit(format[j])) - j++; - var len = j - i - 1; - if (len > 0) { - var idx = int.Parse(format.Substring(i + 1, len)); - res.Append(langModel.CanonicalName(args[idx])); - i = j - 1; - continue; - } - } - - res.Append(c); - } - - return res.ToString(); - } - - public virtual IEnumerable Dependencies - { - get { return args; } - } - } - -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Numerics; + +namespace Microsoft.Boogie.ModelViewer +{ + public enum NameSeqSuffix + { + None, + WhenNonZero, + Always + } + + public abstract class LanguageModel : ILanguageSpecificModel + { + protected Dictionary baseNameUse = new Dictionary(); + protected Dictionary canonicalName = new Dictionary(); + protected Dictionary invCanonicalName = new Dictionary(); + protected Dictionary localValue = new Dictionary(); + protected Dictionary sourceLocations = new Dictionary(); + public readonly Model model; + + protected virtual bool UseLocalsForCanonicalNames + { + get { return false; } + } + + public readonly ViewOptions viewOpts; + public LanguageModel(Model model, ViewOptions opts) + { + this.model = model; + viewOpts = opts; + } + + public string AsPow2(Model.Integer elt) + { + var n = BigInteger.Parse(elt.Numeral); + var pow = new BigInteger(4096*4); + var k = 14; + var neg = false; + + if (n < 0) { + n = -n; + neg = true; + } + + while (k < 150) { + var diff = pow / 1000; + if (pow - diff < n && n < pow + diff) { + diff = n - pow; + var res = string.Format("2^{0}{1}{2}", k, diff >= 0 ? "+" : "", diff); + if (neg) res = "-(" + res + ")"; + return res; + } + if (n < pow) break; + k++; + pow *= 2; + } + + return elt.ToString(); + } + + // Elements (other than integers and Booleans) get canonical names of the form + // "'", where is returned by this function, and is given + // starting with 0, and incrementing when there are conflicts between bases. + // + // This function needs to return an appropriate base name for the element. It is given + // the element. + // + // A reasonable strategy is to check if it's a name of the local, and if so return it, + // and otherwise use the type of element (e.g., return "seq" for elements representing + // sequences). It is also possible to return "" in such cases. + // + // The suff output parameter specifies whether the number sequence suffix should be + // always added, only when it's non-zero, or never. + protected virtual string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff) + { + string res; + if (elt is Model.Integer || elt is Model.Boolean) { + suff = NameSeqSuffix.None; + return elt.ToString(); + } + suff = NameSeqSuffix.Always; + if (UseLocalsForCanonicalNames) { + if (localValue.TryGetValue(elt, out res)) + return res; + } + return ""; + } + + public virtual void RegisterLocalValue(string name, Model.Element elt) + { + string curr; + if (localValue.TryGetValue(elt, out curr) && CompareFieldNames(name, curr) >= 0) + return; + localValue[elt] = name; + } + + protected virtual string AppendSuffix(string baseName, int id) + { + return baseName + "'" + id.ToString(); + } + + public virtual string CanonicalName(Model.Element elt) + { + string res; + if (elt == null) return "?"; + if (canonicalName.TryGetValue(elt, out res)) return res; + NameSeqSuffix suff; + var baseName = CanonicalBaseName(elt, out suff); + if (baseName == "") + suff = NameSeqSuffix.Always; + + if (viewOpts.DebugMode && !(elt is Model.Boolean) && !(elt is Model.Number)) { + baseName += string.Format("({0})", elt); + suff = NameSeqSuffix.WhenNonZero; + } + + int cnt; + if (!baseNameUse.TryGetValue(baseName, out cnt)) + cnt = -1; + cnt++; + + if (suff == NameSeqSuffix.Always || (cnt > 0 && suff == NameSeqSuffix.WhenNonZero)) + res = AppendSuffix(baseName, cnt); + else + res = baseName; + + baseNameUse[baseName] = cnt; + canonicalName.Add(elt, res); + invCanonicalName[res.Replace(" ", "")] = elt; + return res; + } + + public virtual Model.Element FindElement(string canonicalName) + { + Model.Element res; + if (invCanonicalName.TryGetValue(canonicalName.Replace(" ", ""), out res)) + return res; + return null; + } + + public virtual string PathName(IEnumerable path) + { + return path.Select(n => n.Name).Concat("."); + } + + public abstract IEnumerable States { get; } + + /// + /// Walks each input tree in BFS order, and force evaluation of Name and Value properties + /// (to get reasonable numbering of canonical values). + /// + public void Flush(IEnumerable roots) + { + var workList = new Queue(); + + Action> addList = (IEnumerable nodes) => + { + var ch = new Dictionary(); + foreach (var x in nodes) { + if (ch.ContainsKey(x.Name)) { + // throw new System.InvalidOperationException("duplicated model entry: " + x.Name); + } + ch[x.Name] = x; + } + foreach (var k in SortFields(nodes)) + workList.Enqueue(ch[k]); + }; + + addList(roots); + + var visited = new HashSet(); + while (workList.Count > 0) { + var n = workList.Dequeue(); + + var dummy1 = n.Name; + var dummy2 = n.Value; + + if (n.Element != null) { + if (visited.Contains(n.Element)) + continue; + visited.Add(n.Element); + } + + addList(n.Children); + } + } + + #region field name sorting + /* + static bool HasSpecialChars(string s) + { + for (int i = 0; i < s.Length; ++i) + switch (s[i]) { + case '[': + case '<': + case '>': + case ']': + case '#': + case '\\': + case '(': + case ')': + return true; + } + return false; + } + */ + + static ulong GetNumber(string s, int beg) + { + ulong res = 0; + while (beg < s.Length) { + var c = s[beg]; + if ('0' <= c && c <= '9') { + res *= 10; + res += (uint)c - (uint)'0'; + } + beg++; + } + return res; + } + + public virtual int CompareFieldNames(string f1, string f2) + { + /* + bool s1 = HasSpecialChars(f1); + bool s2 = HasSpecialChars(f2); + if (s1 && !s2) + return 1; + if (!s1 && s2) + return -1; */ + var len = Math.Min(f1.Length, f2.Length); + var numberPos = -1; + for (int i = 0; i < len; ++i) { + var c1 = f1[i]; + var c2 = f2[i]; + if ('0' <= c1 && c1 <= '9' && '0' <= c2 && c2 <= '9') { + numberPos = i; + break; + } + if (c1 != c2) + break; + } + + if (numberPos >= 0) { + var v1 = GetNumber(f1, numberPos); + var v2 = GetNumber(f2, numberPos); + + if (v1 < v2) return -1; + else if (v1 > v2) return 1; + } + + return string.CompareOrdinal(f1, f2); + } + + public virtual int CompareFields(IDisplayNode n1, IDisplayNode n2) + { + var diff = (int)n1.Category - (int)n2.Category; + if (diff != 0) return diff; + else return CompareFieldNames(n1.Name, n2.Name); + } + + public virtual IEnumerable SortFields(IEnumerable fields_) + { + var fields = new List(fields_); + fields.Sort(CompareFields); + return fields.Select(f => f.Name); + } + #endregion + + #region Displaying source code + class Position : IComparable + { + public int Line, Column, Index; + public int CharPos; + public string Name; + + public int CompareTo(Position other) + { + if (this.Line == other.Line) + return this.Column - other.Column; + return this.Line - other.Line; + } + } + + public class SourceLocation + { + public string Filename; + public string AddInfo; + public int Line; + public int Column; + } + + public SourceViewState GetSourceLocation(string name) + { + SourceViewState res; + sourceLocations.TryGetValue(name, out res); + return res; + } + + // example parsed token: @"c:\users\foo\bar.c(12,10) : random string" + // the ": random string" part is optional + public virtual SourceLocation TryParseSourceLocation(string name) + { + var par = name.LastIndexOf('('); + if (par <= 0) return null; + + var res = new SourceLocation() { Filename = name.Substring(0, par) }; + + var words = name.Substring(par + 1).Split(',', ')', ':').Where(x => x != "").ToArray(); + if (words.Length < 2) return null; + + if (!int.TryParse(words[0], out res.Line) || !int.TryParse(words[1], out res.Column)) return null; + + var colon = name.IndexOf(':', par); + if (colon > 0) + res.AddInfo = name.Substring(colon + 1).Trim(); + else + res.AddInfo = ""; + + return res; + } + + static char[] dirSeps = new char[] { '\\', '/' }; + public virtual string ShortenToken(string tok, int fnLimit, bool addAddInfo) + { + var loc = TryParseSourceLocation(tok); + + if (loc != null) { + var fn = loc.Filename; + var idx = fn.LastIndexOfAny(dirSeps); + if (idx > 0) + fn = fn.Substring(idx + 1); + if (fn.Length > fnLimit) { + fn = fn.Substring(0, fnLimit) + ".."; + } + var addInfo = addAddInfo ? loc.AddInfo : ""; + if (addInfo != "") + addInfo = ":" + addInfo; + return string.Format("{0}({1},{2}){3}", fn, loc.Line, loc.Column, addInfo); + } else { + return tok; + } + } + + protected virtual void RtfAppend(StringBuilder sb, char c, ref int pos) + { + pos++; + switch (c) { + case '\r': pos--; break; + case '\\': sb.Append("\\\\"); break; + case '\n': sb.Append("\\par\n"); break; + case '{': sb.Append("\\{"); break; + case '}': sb.Append("\\}"); break; + default: sb.Append(c); break; + } + } + + protected virtual void RtfAppendStateIdx(StringBuilder sb, string label, ref int pos) + { + label += "."; + pos += label.Length; + sb.Append(@"{\sub\cf5\highlight4 ").Append(label).Append("}"); + } + + protected virtual void RtfAppendLineNo(StringBuilder sb, int num, ref int pos) + { + string n = string.Format("{0:0000}: ", num); + pos += n.Length; + sb.Append(@"{\cf6 ").Append(n).Append("}"); + } + + protected virtual void GenerateSourceLocations(IEnumerable states) + { + sourceLocations = new Dictionary(); + + var files = new Dictionary>(); + var sIdx = -1; + + foreach (var s in states) { + var sn = s.CapturedStateName; + sIdx++; + var loc = TryParseSourceLocation(sn); + if (loc == null) continue; + + List positions; + if (!files.TryGetValue(loc.Filename, out positions)) { + positions = new List(); + files[loc.Filename] = positions; + } + positions.Add(new Position() { Name = sn, Line = loc.Line, Column = loc.Column, Index = sIdx }); + } + + foreach (var kv in files) { + var positions = kv.Value; + positions.Sort(); + + string content = ""; + if (System.IO.File.Exists(kv.Key)) { + try { + content = System.IO.File.ReadAllText(kv.Key); + } catch { + continue; + } + } else { + continue; + } + + var pos = new Position() { Line = 1, Column = 1 }; + var currPosIdx = 0; + var output = new StringBuilder(); + RtfAppendLineNo(output, pos.Line, ref pos.CharPos); + + foreach (var c in content) { + if (c == '\n') { + pos.Column = int.MaxValue; // flush remaining positions in this line + } + + while (currPosIdx < positions.Count && pos.CompareTo(positions[currPosIdx]) >= 0) { + positions[currPosIdx].CharPos = pos.CharPos; + RtfAppendStateIdx(output, positions[currPosIdx].Index.ToString(), ref pos.CharPos); + currPosIdx++; + } + + RtfAppend(output, c, ref pos.CharPos); + + if (c == '\n') { + pos.Line++; + pos.Column = 1; + RtfAppendLineNo(output, pos.Line, ref pos.CharPos); + } else { + pos.Column++; + } + } + + var resStr = output.ToString(); + foreach (var p in positions) { + sourceLocations[p.Name] = new SourceViewState() { Header = p.Name, Location = p.CharPos, RichTextContent = resStr }; + } + } + } + #endregion + } + + public abstract class NamedState : IState + { + protected Model.CapturedState state; + private LanguageModel langModel; // no point making it protected - they will need VccModel, DafnyModel + + public NamedState(Model.CapturedState s, LanguageModel lm) + { + this.state = s; + this.langModel = lm; + } + + public Model.CapturedState State + { + get { return state; } + } + + public virtual string Name + { + get + { + return langModel.ShortenToken(state.Name, 20, true); + } + } + + // by overriding this, one state can masqureade another + public virtual string CapturedStateName + { + get { return State.Name; } + } + + public virtual SourceViewState ShowSource() + { + return langModel.GetSourceLocation(CapturedStateName); + } + + public abstract IEnumerable Nodes { get; } + } + + public class EdgeName + { + ILanguageSpecificModel langModel; + string format; + string cachedName; + Model.Element[] args; + + public EdgeName(ILanguageSpecificModel n, string format, params Model.Element[] args) + { + this.langModel = n; + this.format = format; + this.args = args.ToArray(); + } + + public EdgeName(string name) : this(null, name) + { + Util.Assert(name != null); + } + + public override string ToString() + { + if (cachedName != null) + return cachedName; + cachedName = Format(); + return cachedName; + } + + public override int GetHashCode() + { + int res = format.GetHashCode(); + foreach (var c in args) { + res += c.GetHashCode(); + res *= 13; + } + return res; + } + + public override bool Equals(object obj) + { + EdgeName e = obj as EdgeName; + if (e == null) return false; + if (e == this) return true; + if (e.format != this.format || e.args.Length != this.args.Length) + return false; + for (int i = 0; i < this.args.Length; ++i) + if (this.args[i] != e.args[i]) + return false; + return true; + } + + protected virtual string Format() + { + if (args == null || args.Length == 0) + return format; + + var res = new StringBuilder(format.Length); + for (int i = 0; i < format.Length; ++i) { + var c = format[i]; + + /* + var canonical = false; + if (c == '%' && i < format.Length - 1) { + if (format[i + 1] == 'c') { + ++i; + canonical = true; + } + } + */ + + if (c == '%' && i < format.Length - 1) { + var j = i + 1; + while (j < format.Length && char.IsDigit(format[j])) + j++; + var len = j - i - 1; + if (len > 0) { + var idx = int.Parse(format.Substring(i + 1, len)); + res.Append(langModel.CanonicalName(args[idx])); + i = j - 1; + continue; + } + } + + res.Append(c); + } + + return res.ToString(); + } + + public virtual IEnumerable Dependencies + { + get { return args; } + } + } + +} diff --git a/Source/ModelViewer/Properties/AssemblyInfo.cs b/Source/ModelViewer/Properties/AssemblyInfo.cs index 0cb39b63..033d856d 100644 --- a/Source/ModelViewer/Properties/AssemblyInfo.cs +++ b/Source/ModelViewer/Properties/AssemblyInfo.cs @@ -1,25 +1,25 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ModelViewer")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("ModelViewer")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2010-2011")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("fb95289d-cd57-47f2-aafa-d9e39f46555e")] - - +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ModelViewer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("ModelViewer")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2010-2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("fb95289d-cd57-47f2-aafa-d9e39f46555e")] + + diff --git a/Source/ModelViewer/Properties/Resources.Designer.cs b/Source/ModelViewer/Properties/Resources.Designer.cs index 2a56d355..933cc4bf 100644 --- a/Source/ModelViewer/Properties/Resources.Designer.cs +++ b/Source/ModelViewer/Properties/Resources.Designer.cs @@ -1,63 +1,63 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.1 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Microsoft.Boogie.ModelViewer.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.Boogie.ModelViewer.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.Boogie.ModelViewer.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.Boogie.ModelViewer.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Source/ModelViewer/Properties/Resources.resx b/Source/ModelViewer/Properties/Resources.resx index ffecec85..af7dbebb 100644 --- a/Source/ModelViewer/Properties/Resources.resx +++ b/Source/ModelViewer/Properties/Resources.resx @@ -1,117 +1,117 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/Source/ModelViewer/Properties/Settings.Designer.cs b/Source/ModelViewer/Properties/Settings.Designer.cs index d210a94e..4b60c7cc 100644 --- a/Source/ModelViewer/Properties/Settings.Designer.cs +++ b/Source/ModelViewer/Properties/Settings.Designer.cs @@ -1,26 +1,26 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.1 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Microsoft.Boogie.ModelViewer.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.Boogie.ModelViewer.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/Source/ModelViewer/Properties/Settings.settings b/Source/ModelViewer/Properties/Settings.settings index abf36c5d..39645652 100644 --- a/Source/ModelViewer/Properties/Settings.settings +++ b/Source/ModelViewer/Properties/Settings.settings @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/Source/ModelViewer/SourceView.Designer.cs b/Source/ModelViewer/SourceView.Designer.cs index 55ca2e37..30bc5408 100644 --- a/Source/ModelViewer/SourceView.Designer.cs +++ b/Source/ModelViewer/SourceView.Designer.cs @@ -1,63 +1,63 @@ -namespace Microsoft.Boogie.ModelViewer -{ - partial class SourceView - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.richTextBox1 = new System.Windows.Forms.RichTextBox(); - this.SuspendLayout(); - // - // richTextBox1 - // - this.richTextBox1.DetectUrls = false; - this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.richTextBox1.Font = new System.Drawing.Font("Lucida Sans Typewriter", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.richTextBox1.HideSelection = false; - this.richTextBox1.Location = new System.Drawing.Point(0, 0); - this.richTextBox1.Name = "richTextBox1"; - this.richTextBox1.ReadOnly = true; - this.richTextBox1.Size = new System.Drawing.Size(715, 582); - this.richTextBox1.TabIndex = 0; - this.richTextBox1.Text = "#include \n\nint main()\n{\n\\foo\n}"; - this.richTextBox1.WordWrap = false; - // - // SourceView - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(715, 582); - this.Controls.Add(this.richTextBox1); - this.Name = "SourceView"; - this.Text = "SourceView"; - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.RichTextBox richTextBox1; - } +namespace Microsoft.Boogie.ModelViewer +{ + partial class SourceView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.SuspendLayout(); + // + // richTextBox1 + // + this.richTextBox1.DetectUrls = false; + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Font = new System.Drawing.Font("Lucida Sans Typewriter", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.richTextBox1.HideSelection = false; + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.ReadOnly = true; + this.richTextBox1.Size = new System.Drawing.Size(715, 582); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = "#include \n\nint main()\n{\n\\foo\n}"; + this.richTextBox1.WordWrap = false; + // + // SourceView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(715, 582); + this.Controls.Add(this.richTextBox1); + this.Name = "SourceView"; + this.Text = "SourceView"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextBox1; + } } \ No newline at end of file diff --git a/Source/ModelViewer/SourceView.cs b/Source/ModelViewer/SourceView.cs index d520ede5..a40950b6 100644 --- a/Source/ModelViewer/SourceView.cs +++ b/Source/ModelViewer/SourceView.cs @@ -1,52 +1,52 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Microsoft.Boogie.ModelViewer -{ - public partial class SourceView : Form - { - public bool largeFont; - bool prevLarge; - - public SourceView() - { - InitializeComponent(); - //richTextBox1.Font = new Font(richTextBox1.Font.FontFamily, fontSize, richTextBox1.Font.Unit); - richTextBox1.BackColor = Color.White; - } - - string prevRtf; - - string prefix = - @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Lucida Sans Typewriter;}}\r\n" + - @"{\colortbl;\red0\green0\blue0;\red255\green0\blue0;\red0\green255\blue0;\red255\green255\blue0;\red0\green0\blue0;\red160\green160\blue160;}" + - @"\viewkind4\uc1\pard\f0"; - - internal void SetSourceLocation(SourceViewState r) - { - if (r.RichTextContent != prevRtf || prevLarge != largeFont) { - richTextBox1.Rtf = prefix + (largeFont ? "\\fs30 " : "\\fs17 ") + r.RichTextContent + "\r\n}\r\n"; - prevRtf = r.RichTextContent; - prevLarge = largeFont; - } - - richTextBox1.Select(r.Location, 9); - - this.Text = r.Header; - this.Show(); - } - - protected override void OnClosing(CancelEventArgs e) - { - base.OnClosing(e); - e.Cancel = true; - Hide(); - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Microsoft.Boogie.ModelViewer +{ + public partial class SourceView : Form + { + public bool largeFont; + bool prevLarge; + + public SourceView() + { + InitializeComponent(); + //richTextBox1.Font = new Font(richTextBox1.Font.FontFamily, fontSize, richTextBox1.Font.Unit); + richTextBox1.BackColor = Color.White; + } + + string prevRtf; + + string prefix = + @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Lucida Sans Typewriter;}}\r\n" + + @"{\colortbl;\red0\green0\blue0;\red255\green0\blue0;\red0\green255\blue0;\red255\green255\blue0;\red0\green0\blue0;\red160\green160\blue160;}" + + @"\viewkind4\uc1\pard\f0"; + + internal void SetSourceLocation(SourceViewState r) + { + if (r.RichTextContent != prevRtf || prevLarge != largeFont) { + richTextBox1.Rtf = prefix + (largeFont ? "\\fs30 " : "\\fs17 ") + r.RichTextContent + "\r\n}\r\n"; + prevRtf = r.RichTextContent; + prevLarge = largeFont; + } + + richTextBox1.Select(r.Location, 9); + + this.Text = r.Header; + this.Show(); + } + + protected override void OnClosing(CancelEventArgs e) + { + base.OnClosing(e); + e.Cancel = true; + Hide(); + } + } +} diff --git a/Source/ModelViewer/SourceView.resx b/Source/ModelViewer/SourceView.resx index 29dcb1b3..1af7de15 100644 --- a/Source/ModelViewer/SourceView.resx +++ b/Source/ModelViewer/SourceView.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/Source/ModelViewer/TreeSkeleton.cs b/Source/ModelViewer/TreeSkeleton.cs index 543788a8..c3dee44f 100644 --- a/Source/ModelViewer/TreeSkeleton.cs +++ b/Source/ModelViewer/TreeSkeleton.cs @@ -1,205 +1,205 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Microsoft.Boogie.ModelViewer -{ - internal class SkeletonItem - { - readonly string name; - readonly List children = new List(); - internal readonly IDisplayNode[] displayNodes; - internal bool[] isPrimary; - internal readonly SkeletonItem parent; - internal readonly Main main; - internal readonly int level; - internal bool expanded, wasExpanded; - internal bool isMatch; - - public void Iter(Action handler) - { - handler(this); - children.ForEach(u => u.Iter(handler)); - } - - public IEnumerable RecChildren - { - get - { - if (expanded) { - foreach (var c in children) { - yield return c; - foreach (var ch in c.RecChildren) - yield return ch; - } - } - } - } - - public SkeletonItem[] PopulateRoot(IEnumerable states) - { - var i = 0; - foreach (var s in states) { - displayNodes[i++] = new ContainerNode(this.name, x => x, s.Nodes); - } - - return BfsExpand(this); - } - - public SkeletonItem(Main m, int stateCount) - { - name = ""; - main = m; - displayNodes = new IDisplayNode[stateCount]; - isPrimary = new bool[stateCount]; - } - - internal SkeletonItem(string n, SkeletonItem par) - : this(par.main, par.displayNodes.Length) - { - parent = par; - name = n; - level = par.level + 1; - } - - public bool Expandable - { - get { - if (wasExpanded) - return children.Count > 0; - return displayNodes.Any(d => d != null && d.Children.Count() > 0); - } - } - - public bool Expanded - { - get { return expanded; } - set - { - expanded = value; - if (expanded) - ComputeChildren(); - } - } - - static SkeletonItem[] BfsExpand(SkeletonItem skel) - { - for (int i = 0; i < skel.displayNodes.Length; ++i) - BfsExpandCore(skel, i); - - var workItems = new Stack(); - var allNodes = new List(); - workItems.Push(skel); - - while (workItems.Count > 0) { - var s = workItems.Pop(); - if (!s.isPrimary.Any()) - continue; - allNodes.Add(s); - s.children.Iter(workItems.Push); - } - - return allNodes.ToArray(); - } - - static void BfsExpandCore(SkeletonItem skel, int idx) - { - var visited = new HashSet(); - var workItems = new Queue(); - - workItems.Enqueue(skel); - while (workItems.Count > 0) { - var s = workItems.Dequeue(); - if (s.displayNodes[idx] == null) - continue; - var e = s.displayNodes[idx].Element; - s.isPrimary[idx] = true; - if (e != null) { - if (visited.Contains(e)) - continue; - visited.Add(e); - } - s.ComputeChildren(); - s.children.Iter(workItems.Enqueue); - } - } - - private void ComputeChildren() - { - if (wasExpanded) return; - wasExpanded = true; - - var created = new Dictionary(); - var names = new List(); - for (int i = 0; i < displayNodes.Length; ++i) { - var dn = displayNodes[i]; - if (dn == null) continue; - foreach (var child in dn.Children) { - if (child.ViewLevel > main.viewOpts.ViewLevel) - continue; - SkeletonItem skelChild; - var name = child.Name; - if (!created.TryGetValue(name, out skelChild)) { - skelChild = new SkeletonItem(child.Name, this); - created.Add(name, skelChild); - names.Add(child); - } - skelChild.displayNodes[i] = child; - } - } - - foreach (var name in main.LangModel.SortFields(names)) { - children.Add(created[name]); - } - } - - public bool MatchesWords(string[] words, Model.Element[] elts, Model.Element eq, int stateId) - { - var node = displayNodes[stateId]; - if (node == null) - return false; - var s1 = LongName(stateId).ToLower(); - var s2 = node.Value.ToLower(); - - if (eq != null && node.Element != eq) - return false; - - foreach (var w in words) { - if (!s1.Contains(w) && !s2.Contains(w)) - return false; - } - - foreach (var e in elts) { - if (!node.References.Contains(e)) - return false; - } - - return true; - } - - public string LongName(int stateId) - { - var parents = new List(); - for (var curr = this; curr != null; curr = curr.parent) { - if (curr.parent != null) // skip the root - parents.Add(curr.displayNodes[stateId]); - } - parents.Reverse(); - return main.LangModel.PathName(parents); - } - - public void SyncWith(Dictionary mapping, SkeletonItem old) - { - mapping[old] = this; - Expanded = old.Expanded; - var oldCh = old.children.ToDictionary(c => c.name); - foreach (var c in children) { - SkeletonItem oc; - if (oldCh.TryGetValue(c.name, out oc)) - c.SyncWith(mapping, oc); - } - } - } - -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.Boogie.ModelViewer +{ + internal class SkeletonItem + { + readonly string name; + readonly List children = new List(); + internal readonly IDisplayNode[] displayNodes; + internal bool[] isPrimary; + internal readonly SkeletonItem parent; + internal readonly Main main; + internal readonly int level; + internal bool expanded, wasExpanded; + internal bool isMatch; + + public void Iter(Action handler) + { + handler(this); + children.ForEach(u => u.Iter(handler)); + } + + public IEnumerable RecChildren + { + get + { + if (expanded) { + foreach (var c in children) { + yield return c; + foreach (var ch in c.RecChildren) + yield return ch; + } + } + } + } + + public SkeletonItem[] PopulateRoot(IEnumerable states) + { + var i = 0; + foreach (var s in states) { + displayNodes[i++] = new ContainerNode(this.name, x => x, s.Nodes); + } + + return BfsExpand(this); + } + + public SkeletonItem(Main m, int stateCount) + { + name = ""; + main = m; + displayNodes = new IDisplayNode[stateCount]; + isPrimary = new bool[stateCount]; + } + + internal SkeletonItem(string n, SkeletonItem par) + : this(par.main, par.displayNodes.Length) + { + parent = par; + name = n; + level = par.level + 1; + } + + public bool Expandable + { + get { + if (wasExpanded) + return children.Count > 0; + return displayNodes.Any(d => d != null && d.Children.Count() > 0); + } + } + + public bool Expanded + { + get { return expanded; } + set + { + expanded = value; + if (expanded) + ComputeChildren(); + } + } + + static SkeletonItem[] BfsExpand(SkeletonItem skel) + { + for (int i = 0; i < skel.displayNodes.Length; ++i) + BfsExpandCore(skel, i); + + var workItems = new Stack(); + var allNodes = new List(); + workItems.Push(skel); + + while (workItems.Count > 0) { + var s = workItems.Pop(); + if (!s.isPrimary.Any()) + continue; + allNodes.Add(s); + s.children.Iter(workItems.Push); + } + + return allNodes.ToArray(); + } + + static void BfsExpandCore(SkeletonItem skel, int idx) + { + var visited = new HashSet(); + var workItems = new Queue(); + + workItems.Enqueue(skel); + while (workItems.Count > 0) { + var s = workItems.Dequeue(); + if (s.displayNodes[idx] == null) + continue; + var e = s.displayNodes[idx].Element; + s.isPrimary[idx] = true; + if (e != null) { + if (visited.Contains(e)) + continue; + visited.Add(e); + } + s.ComputeChildren(); + s.children.Iter(workItems.Enqueue); + } + } + + private void ComputeChildren() + { + if (wasExpanded) return; + wasExpanded = true; + + var created = new Dictionary(); + var names = new List(); + for (int i = 0; i < displayNodes.Length; ++i) { + var dn = displayNodes[i]; + if (dn == null) continue; + foreach (var child in dn.Children) { + if (child.ViewLevel > main.viewOpts.ViewLevel) + continue; + SkeletonItem skelChild; + var name = child.Name; + if (!created.TryGetValue(name, out skelChild)) { + skelChild = new SkeletonItem(child.Name, this); + created.Add(name, skelChild); + names.Add(child); + } + skelChild.displayNodes[i] = child; + } + } + + foreach (var name in main.LangModel.SortFields(names)) { + children.Add(created[name]); + } + } + + public bool MatchesWords(string[] words, Model.Element[] elts, Model.Element eq, int stateId) + { + var node = displayNodes[stateId]; + if (node == null) + return false; + var s1 = LongName(stateId).ToLower(); + var s2 = node.Value.ToLower(); + + if (eq != null && node.Element != eq) + return false; + + foreach (var w in words) { + if (!s1.Contains(w) && !s2.Contains(w)) + return false; + } + + foreach (var e in elts) { + if (!node.References.Contains(e)) + return false; + } + + return true; + } + + public string LongName(int stateId) + { + var parents = new List(); + for (var curr = this; curr != null; curr = curr.parent) { + if (curr.parent != null) // skip the root + parents.Add(curr.displayNodes[stateId]); + } + parents.Reverse(); + return main.LangModel.PathName(parents); + } + + public void SyncWith(Dictionary mapping, SkeletonItem old) + { + mapping[old] = this; + Expanded = old.Expanded; + var oldCh = old.children.ToDictionary(c => c.name); + foreach (var c in children) { + SkeletonItem oc; + if (oldCh.TryGetValue(c.name, out oc)) + c.SyncWith(mapping, oc); + } + } + } + +} diff --git a/Source/ModelViewer/VccProvider.cs b/Source/ModelViewer/VccProvider.cs index ae062c93..345dfda5 100644 --- a/Source/ModelViewer/VccProvider.cs +++ b/Source/ModelViewer/VccProvider.cs @@ -1,1526 +1,1526 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Microsoft.Boogie.ModelViewer.Vcc -{ - public class Provider : ILanguageProvider - { - public static Provider Instance = new Provider(); - private Provider() { } - - public bool IsMyModel(Model m) - { - return m.TryGetFunc("$is_ghost_field") != null && m.TryGetFunc("$fk_vol_version") != null; - } - - public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) - { - var vm = new VccModel(m, opts); - return vm; - } - } - - enum DataKind - { - Flat, - PhysPtr, - SpecPtr, - Object, - Ptrset, - Map - } - - class VccModel : LanguageModel - { - public readonly Model.Func f_ptr_to, f_phys_ptr_cast, f_spec_ptr_cast, f_mathint, f_local_value_is, f_spec_ptr_to, f_heap, f_select_field, - f_select_value, f_field, f_field_type, f_int_to_ptr, f_ptr_to_int, f_ptr, f_map_t, f_select_ptr, - f_owners, f_closed, f_roots, f_timestamps, f_select_bool, f_select_int, f_is_null, f_good_state, - f_int_to_version, f_int_to_ptrset, f_set_in0, f_is_ghost_field, f_is_phys_field, f_idx, - f_is_sequential_field, f_is_volatile_field, f_type_project_0, f_array, f_active_option, f_int_to_field, - f_blob_type, f_array_emb, f_addr, f_address_root, f_base, f_field_arr_size, f_field_arr_root, f_field_arr_index, - f_dot, f_prim_emb; - public readonly Model.Element tp_object, tp_mathint, tp_bool, tp_state, tp_ptrset, tp_heaptp; - public readonly Model.Element elt_me, elt_null; - Dictionary typeName = new Dictionary(); - Dictionary literalName = new Dictionary(); - Dictionary guessedType = new Dictionary(); - public List states = new List(); - public Dictionary localVariableNames = new Dictionary(); - - Dictionary datatypeLongName = new Dictionary(); - - Dictionary fileNameMapping = new Dictionary(); - - public const string selfMarker = "\\self"; - public const int maxDatatypeNameLength = 5; - - public VccModel(Model m, ViewOptions opts) - : base(m, opts) - { - f_ptr_to = m.MkFunc("$ptr_to", 1); - f_spec_ptr_to = m.MkFunc("$spec_ptr_to", 1); - f_phys_ptr_cast = m.MkFunc("$phys_ptr_cast", 2); - f_spec_ptr_cast = m.MkFunc("$spec_ptr_cast", 2); - f_mathint = m.MkFunc("^^mathint", 0); - f_local_value_is = m.MkFunc("$local_value_is", 5); - f_heap = m.MkFunc("$heap", 1); - f_select_field = m.MkFunc("Select_[$field][$ptr]$int", 2); - f_select_value = m.MkFunc("Select_[$ptr]$int", 2); - f_select_ptr = m.MkFunc("Select_[$ptr]$ptr", 2); - f_select_int = m.MkFunc("Select_[$ptr]$int", 2); - f_select_bool = m.MkFunc("Select_[$ptr]$bool", 2); - f_owners = m.MkFunc("$f_owner", 1); - f_closed = m.MkFunc("$f_closed", 1); - f_roots = m.MkFunc("$roots", 1); - f_timestamps = m.MkFunc("$f_timestamp", 1); - f_active_option = m.MkFunc("$f_active_option", 1); - f_field = m.MkFunc("$field", 1); - f_field_type = m.MkFunc("$field_type", 1); - f_int_to_ptr = m.MkFunc("$int_to_ptr", 1); - f_ptr_to_int = m.MkFunc("$ptr_to_int", 1); - f_ptr = m.MkFunc("$ptr", 2); - f_dot = m.MkFunc("$dot", 2); - f_map_t = m.MkFunc("$map_t", 2); - f_is_null = m.MkFunc("$is_null", 1); - f_good_state = m.MkFunc("$good_state", 1); - f_int_to_version = m.MkFunc("$int_to_version", 1); - f_int_to_ptrset = m.MkFunc("$int_to_ptrset", 1); - f_int_to_field = m.MkFunc("$int_to_field", 1); - f_set_in0 = m.MkFunc("$set_in0", 2); - f_is_ghost_field = m.MkFunc("$is_ghost_field", 1); - f_is_phys_field = m.MkFunc("$is_phys_field", 1); - f_idx = m.MkFunc("$idx", 2); - f_is_sequential_field = m.MkFunc("$is_sequential_field", 1); - f_is_volatile_field = m.MkFunc("$is_volatile_field", 1); - f_type_project_0 = m.MkFunc("$type_project_0", 1); - f_array = m.MkFunc("$array", 2); - f_blob_type = m.MkFunc("$blob_type", 1); - f_array_emb = m.MkFunc("$array_emb", 2); - f_addr = m.MkFunc("$addr", 1); - f_base = m.MkFunc("$base", 1); - f_prim_emb = m.MkFunc("$prim_emb", 1); - f_address_root = m.MkFunc("$address_root", 2); - f_field_arr_index = m.MkFunc("$field_arr_index", 1); - f_field_arr_size = m.MkFunc("$field_arr_size", 1); - f_field_arr_root = m.MkFunc("$field_arr_root", 1); - - tp_bool = m.GetFunc("^^bool").GetConstant(); - tp_mathint = m.GetFunc("^^mathint").GetConstant(); - tp_object = m.GetFunc("^^object").GetConstant(); - tp_state = m.GetFunc("^$#state_t").GetConstant(); - tp_ptrset = m.GetFunc("^$#ptrset").GetConstant(); - - tp_heaptp = m.MkFunc("$heap_type", 0).GetConstant(); - - elt_me = m.GetFunc("$me").GetConstant(); - elt_null = m.GetFunc("$null").GetConstant(); - - literalName[elt_me] = "\\me"; - literalName[elt_null] = "NULL"; - foreach (var tpl in f_phys_ptr_cast.Apps) { - if (tpl.Args[0] == elt_null) - literalName[tpl.Result] = "(" + TypeName(tpl.Args[1]) + "*)NULL"; - } - foreach (var tpl in f_spec_ptr_cast.Apps) { - if (tpl.Args[0] == elt_null) - literalName[tpl.Result] = "(" + TypeName(tpl.Args[1]) + "^)NULL"; - } - foreach (var fn in model.Functions) { - if (fn.Arity == 0 && fn.Name.StartsWith("l#")) - literalName[fn.GetConstant()] = ":" + fn.Name.Substring(2); - } - - DecodeFileNames(); - ComputeLocalVariableNames(); - - foreach (var s in m.States) { - var sn = new StateNode(this, s); - sn.SetupVars(); - states.Add(sn); - } - - var allStates = states.ToArray(); - if (allStates.Length == 1 && allStates[0].vars.Count == 0) { - throw new Exception("This VCC model doesn't contain any variables. Was it saved with the -bvd option?"); - } - states.Clear(); - var i = 0; - while (i < allStates.Length) { - var lastGoodName = allStates[i].State.Name; - - var userVars = new HashSet(allStates[i].State.Variables.Where(localVariableNames.ContainsKey)); - i++; - while (i < allStates.Length) { - foreach (var v in allStates[i].State.Variables) { - if (v == "$s" || userVars.Contains(v)) goto stop; - if (localVariableNames.ContainsKey(v)) - userVars.Add(v); - } - - var curName = TryParseSourceLocation(allStates[i].State.Name); - if (!IsBadName(curName)) - lastGoodName = allStates[i].State.Name; - i++; - } - - stop: - - var lastState = allStates[i - 1]; - lastState.capturedStateName = lastGoodName; - lastState.index = states.Count; - states.Add(lastState); - lastState.SetupVars(); - } - - foreach (var s in states) { - var elt = s.State.TryGet("$s"); - if (elt != null) - literalName[elt] = "\\state'" + s.index; - } - - GenerateSourceLocations(states); - } - - - bool IsBadName(SourceLocation l) - { - return l == null || l.Filename.StartsWith("<"); - } - - private void ComputeLocalVariableNames() - { - var vars = model.States.SelectMany(s => s.Variables).Where(v => v != null).Distinct(); - Func simpleName = s => { string dummy; return GetUserVariableNameCore(s, out dummy); }; - var userVars = vars.Where(s => simpleName(s) != null); - var conflictsName = Conflicts(userVars, simpleName).ToArray(); - Func qName = s => { string kind, n = GetUserVariableNameCore(s, out kind); return n + " (" + kind + ")"; }; - var conflictsKind = Conflicts(conflictsName, qName).ToArray(); - - var conflictsNameH = new HashSet(conflictsName); - var conflictsKindH = new HashSet(conflictsKind); - - foreach (var v in userVars) { - if (conflictsKindH.Contains(v)) continue; - if (conflictsNameH.Contains(v)) - localVariableNames[v] = qName(v); - else - localVariableNames[v] = simpleName(v); - } - - var idx = 0; - foreach (var v in conflictsKind) { - localVariableNames[v] = string.Format("{0} #{1}", qName(v), idx++); - } - } - - static IEnumerable Conflicts(IEnumerable input, Func f) - { - var revMap = new Dictionary(); - var reported = new HashSet(); - - foreach (var k in input) { - if (reported.Contains(k)) continue; - var v = f(k); - A tmp; - if (revMap.TryGetValue(v, out tmp) && !tmp.Equals(k)) { - if (!reported.Contains(tmp)) { - yield return tmp; - reported.Add(tmp); - } - yield return k; - reported.Add(k); - } else { - revMap[v] = k; - } - } - } - - #region Function name scoring - static string[][] prefixes = new string[][] { - new string[] { "F#", "$eq.$map", "Q#", }, - new string[] { "F#lambda", }, - new string[] { "$int_to_", "lambda@", "distinct-aux-f", "Select_","Store_", "$select.", "$store.", }, - }; - - static string[][] totals = new string[][] { - new string[] { - "$current_timestamp", - "$full_stop", "$function_entry", "$ptr_to_i4", - "$ptr_to_i8", "$ptr_to_u4", "$ptr_to_u8", - "$span", "$sizeof", "$in_domain", - "$inv2", - "$is_claimable", - "$set_cardinality", "$set_difference", "$set_union", - "$thread_local", "$unchecked", "$writes_at", - "$array_range", "$arrays_disjoint", - "$byte_ptr_subtraction", - }, - - new string[] { - "$addr", "$dot", "$emb0", "$fetch_from_domain", "$in_range_phys_ptr", - "$in_range_spec_ptr", "$is_sequential_field", "$is_volatile_field", - "$is_ghost_field", "$is_phys_field", "$is_math_type", "$invok_state", - "$is_primitive", - "$spec_ptr_cast", - "$phys_ptr_cast", - "$is_null", - "$in_domain_lab", - "$inv_lab", - "$set_in0", - }, - - new string[] { - "$_pow2", "$as_composite_field", "$as_field_with_type", "$as_in_range_t", - "$as_primitive_field", "$base", "$call_transition", "tickleBool", "Ctor", - "$mv_state", "$field", "$field_arr_root", "$field_kind", "$field_offset", - "$field_parent_type", "$field_type", "$file_name_is", "$good_state", - "$good_state_ext", "$function_arg_type", "$has_field_at0", "$map_domain", - "$map_range", "$map_t", "$ptr_to", "$ptr_to_i1", "$ptr_to_i2", - "$ptr_to_u1", "$ptr_to_u2", "$is_unwrapped", "$is_unwrapped_dynamic", - "$heap", "$closed", "$owner", "$owns", "$modifies", "$post_unwrap", - "$pow2", "$pre_unwrap", "$ptr", "$is", "$in_range_t", "$roots", - "$timestamp", "$type_branch", "$type_code_is", "$type_project_0", - "$typemap", "$set_in_pos", "$updated_owns", "$ver_domain", "$vs_state", - "$set_singleton", - "$f_owner", "$f_closed", "$f_timestamps", - "$local_value_is", - "$field_arr_ctor", - "$idx", - }, - }; - - string[] state_props = new string[] { }; - - Dictionary functionScores = new Dictionary(); - - int FunctionScore(string name) - { - if (functionScores.Count == 0) { - for (int i = 0; i < totals.Length; ++i) - foreach (var s in totals[i]) - functionScores[s] = i; - } - - int res; - if (functionScores.TryGetValue(name, out res)) - return res; - - res = -1; - if (name[0] == '$' && name.EndsWith("_to_int")) - res = 1; - else if (name.EndsWith("#frame")) - res = 2; - else if (name.Contains("#limited#")) - res = 2; - else { - for (int i = 0; i < prefixes.Length; ++i) - foreach (var p in prefixes[i]) - if (name.StartsWith(p)) { - res = i; - //goto stop; - } - //stop: ; - } - - if (res == -1) - res = 1; // default - - functionScores[name] = res; - return res; - } - #endregion - - private void DecodeFileNames() - { - var fis = model.GetFunc("$file_name_is"); - foreach (var f in model.Functions) { - if (f.Arity == 0 && f.Name.StartsWith("#file^")) { - var sb = new StringBuilder(); - var idx = 6; - var name = f.Name; - while (idx < name.Length) { - if (name[idx] == '?') { - var c = (char)Int32.Parse(name.Substring(idx + 1, 2), System.Globalization.NumberStyles.HexNumber); - sb.Append(c); - idx += 3; - } else { - sb.Append(name[idx++]); - } - } - name = sb.ToString(); - - foreach (var app in fis.AppsWithArg(1, f.GetConstant())) - fileNameMapping[app.Args[0].AsInt()] = name; - } - } - } - - private Model.Element DecodeDT(string dt) - { - if (dt.StartsWith("dt")) { - var tpName = dt.Replace("dt", "#distTp"); - var f = model.TryGetFunc(tpName); - if (f != null) { - return f.GetConstant(); - //var res = f_type_project_0.TryEval(ptr); - //if (res != null) - // tp = res; - } - } - return null; - } - - private string DecodeToken(string name, ref Model.Element tp) - { - var idx = name.LastIndexOf("$"); - if (idx < 0) return null; - var words = name.Substring(idx + 1).Split('.', '^', '!', '#', '@'); - if (words.Length > 3) - tp = DecodeDT(words[3]); - return string.Format("{0}({1},{2})", fileNameMapping[int.Parse(words[0])], words[1], words[2]); - } - - public string GetUserVariableName(string name) - { - string res; - localVariableNames.TryGetValue(name, out res); - return res; - } - - - string GetUserVariableNameCore(string name, out string kind) - { - if (name.StartsWith("L#")) { - kind = "local"; - return name.Substring(2); - } - - if (name.StartsWith("P#")) { - kind = "in-param"; - return name.Substring(2); - } - - if (name.StartsWith("OP#")) { - kind = "out-param"; - return name.Substring(3); - } - - if (name.StartsWith("SL#")) { - kind = "spec local"; - return name.Substring(3); - } - - if (name.StartsWith("SP#")) { - kind = "spec in-param"; - return name.Substring(3); - } - - if (name.StartsWith("local.")) { - kind = "param copied to local"; - return name.Substring(6); - } - - if (name.StartsWith("addr.")) { - kind = "stack-allocated struct"; - return name.Substring(5); - } - - if (name == "$result") { - kind = "function return value"; - return "\\result"; - } - - if (name.StartsWith("res__") && viewOpts.ViewLevel >= 1) { - kind = "call result"; - return name; - } - - if (name == "$s" && viewOpts.ViewLevel >= 1) { - kind = "current state"; - return "\\now"; - } - - kind = null; - return null; - } - - - private string LiteralName(Model.Element elt) - { - string r; - - if (literalName.TryGetValue(elt, out r)) - return r; - - r = TryTypeName(elt); - if (r != null) { - literalName[elt] = r; - return r; - } - - var i = elt as Model.Integer; - if (i != null) - return AsPow2(i); - - var bv = elt as Model.BitVector; - if (bv != null) - return bv.Numeral + "bv" + bv.Size.ToString(); - - return null; - } - - public Model.Element LocalType(string localName) - { - string dummy; - var v = GetUserVariableNameCore(localName, out dummy); - if (v == null) v = localName; - var c = model.TryGetFunc("#loc." + v); - if (c != null) { - var localIs = f_local_value_is.AppWithArg(2, c.GetConstant()); - if (localIs != null) - return localIs.Args[4]; - } - foreach (var s in model.States.Reverse()) { - var val = s.TryGet(localName); - var tp = GuessType(val); - if (tp != tp_mathint) - return tp; - } - return tp_mathint; - } - - public Model.Element Image(Model.Element elt, Model.Func f) - { - var r = f.AppWithResult(elt); - if (r != null) - return r.Args[0]; - return null; - } - - string TypeNameCore(Model.Element elt) - { - var deref = Image(elt, f_ptr_to); - if (deref != null) - return TypeName(deref) + "*"; - deref = Image(elt, f_spec_ptr_to); - if (deref != null) - return TypeName(deref) + "^"; - deref = Image(elt, f_blob_type); - if (deref != null) - return "_(blob " + CanonicalName(deref) + ")"; - var mapt = f_map_t.AppWithResult(elt); - if (mapt != null) - return string.Format("{1}[{0}]", TypeName(mapt.Args[0]), TypeName(mapt.Args[1])); - - var arr = f_array.AppWithResult(elt); - if (arr != null) { - return string.Format("{0}[{1}]", TypeName(arr.Args[0]), arr.Args[1].ToString()); - } - - foreach (var app in elt.Names) - if (app.Func.Arity == 0 && app.Func.Name.StartsWith("^")) { - var n = app.Func.Name.Substring(1); - switch (n) { - case "^i1": return "int8_t"; - case "^u1": return "uint8_t"; - case "^i2": return "int16_t"; - case "^u2": return "uint16_t"; - case "^i4": return "int32_t"; - case "^u4": return "uint32_t"; - case "^i8": return "int64_t"; - case "^u8": return "uint64_t"; - case "^bool": return "bool"; - default: - var pref = "_vcc_math_type_"; - if (n.StartsWith(pref)) n = n.Substring(pref.Length); - return n; - } - } - - return null; - } - - public string TypeName(Model.Element elt) - { - var r = TryTypeName(elt); - if (r == null) - return elt.ToString(); - else return r; - } - - public string TryTypeName(Model.Element elt) - { - string res; - if (!typeName.TryGetValue(elt, out res)) { - typeName[elt] = elt.ToString(); // avoid infinite recursion - res = TypeNameCore(elt); - typeName[elt] = res; - } - return res; - } - - public static readonly string[] synthethic_fields = new string[] { "$f_owns", "$f_ref_cnt", "$f_vol_version", "$f_root", "$f_group_root", "$f_active_option" }; - - public string ConstantFieldName(Model.Element elt) - { - string res; - IsConstantField(elt, out res); - return res; - } - - public bool IsConstantField(Model.Element elt) - { - string dummy; - return IsConstantField(elt, out dummy); - } - - public bool IsConstantField(Model.Element elt, out string theName) - { - var bestScore = int.MinValue; - string bestName = null; - - foreach (var t in elt.Names) { - var score = int.MinValue; - string name = null; - if (t.Args.Length == 0) { - name = t.Func.Name; - score = 0; - var dotIdx = name.IndexOf('.'); - if (dotIdx > 0) { - score += 10; - name = name.Substring(dotIdx + 1); - } - if (name.Contains('#')) score -= 1; - } else if (t.Func.Name.StartsWith("$f_") && synthethic_fields.Contains(t.Func.Name)) { - name = string.Format("{0}<{1}>", t.Func.Name.Substring(3).Replace("root", "alloc_root"), TypeName(t.Args[0])); - score = 6; - } else if (t.Func == f_array_emb) { - name = string.Format("[0] (of {0}[{1}])", TypeName(t.Args[0]), t.Args[1].ToString()); - score = 5; - } - if (score > bestScore) { - bestScore = score; - bestName = name; - } - } - - theName = bestName; - return bestScore >= 5; - } - - bool IsSomeState(Model.Element elt) - { - var tp = GuessType(elt); - return tp == tp_state || tp == tp_heaptp; - } - - bool IsThisState(Model.Element st, Model.Element elt) - { - return elt == st || elt == f_heap.TryEval(st); - } - - Model.Element GuessType(Model.Element element) - { - Model.Element res; - if (!guessedType.TryGetValue(element, out res)) { - res = GuessTypeCore(element); - guessedType[element] = res; - } - return res; - } - - Model.Element GuessTypeCore(Model.Element element) - { - if (element is Model.Boolean) - return tp_bool; - - var fld = f_field.TryEval(element); - if (fld != null) { - var tp = f_field_type.TryEval(fld); - if (tp != null) { - var ptp = f_ptr_to.TryEval(tp); - if (ptp != null) - return ptp; - ptp = f_spec_ptr_to.TryEval(tp); - if (ptp != null) - return ptp; - } - return tp_object; - } - - foreach (var tpl in element.References) { - if (element == tpl.Result) { - if (tpl.Func == f_ptr) - return tp_object; - if (tpl.Func == f_heap) - return tp_heaptp; - } - - if (tpl.Args.Length >= 1 && tpl.Args[0] == element) { - if (tpl.Func == f_heap || tpl.Func == f_closed || tpl.Func == f_good_state) - return tp_state; - } - - if (tpl.Func == f_select_bool) - if (tpl.Args[0] == element) - return tp_ptrset; - else if (tpl.Args[1] == element) - return tp_object; - - var fname = tpl.Func.Name; - - if (tpl.Args.Length == 2 && tpl.Args[0] == element && fname.StartsWith("$select.$map_t")) { - var mt = model.TryGetFunc("MT#" + fname); - if (mt != null && mt.Arity == 0) - return mt.GetConstant(); - var t1 = GuessType(tpl.Args[1]); - var t2 = GuessType(tpl.Result); - var t = f_map_t.TryEval(t1, t2); - if (t != null) - return t; - } - - var tpName = DataTypeName(element, tpl); - if (tpName != null) { - var tp = model.TryGetFunc("^$#" + tpName); - if (tp != null) - return tp.GetConstant(); - } - } - - return tp_mathint; - } - - string DataTypeName(Model.Element elt, Model.FuncTuple tpl) - { - var fname = tpl.Func.Name; - if (tpl.Args.Length == 1 && tpl.Args[0] == elt && fname.StartsWith("RF#")) { - var fldName = tpl.Func.Name.Substring(3); - var idx = fldName.LastIndexOf('.'); - if (idx > 0) { - return fldName.Substring(0, idx).Replace("_vcc_math_type_", ""); - } - } - - if (tpl.Args.Length == 1 && tpl.Args[0] == elt && (fname.StartsWith("DSZ#") || fname.StartsWith("RSZ#") || fname.StartsWith("DGH#"))) { - return fname.Substring(4).Replace("_vcc_math_type_", ""); - } - return null; - } - - public DataKind GetKind(Model.Element tp, out Model.FuncTuple tpl) - { - tpl = null; - - if (tp == tp_object) - return DataKind.Object; - else if (tp == tp_ptrset) - return DataKind.Ptrset; - - tpl = f_ptr_to.AppWithResult(tp); - if (tpl != null) return DataKind.PhysPtr; - tpl = f_spec_ptr_to.AppWithResult(tp); - if (tpl != null) return DataKind.SpecPtr; - tpl = f_map_t.AppWithResult(tp); - if (tpl != null) return DataKind.Map; - - return DataKind.Flat; - } - - public DataKind GetKind(Model.Element tp) - { - Model.FuncTuple dummy; - return GetKind(tp, out dummy); - } - - - public Model.Element WrapForUse(Model.Element elt, Model.Element tp) - { - Model.FuncTuple tpl; - var kind = GetKind(tp, out tpl); - - if (kind == DataKind.Flat) { - if (elt.Kind == Model.ElementKind.Integer) { - var tpname = TypeName(tp); - if(tpname.StartsWith("$")) tpname = tpname.Substring(1); - if (tpname.StartsWith("#")) { - foreach (var tupl in elt.References) { - if (tupl.Args.Length == 1 && tupl.Args[0] == elt && tupl.Func.Name.StartsWith("$int_to_") && tupl.Func.Name.EndsWith(tpname)) { - return tupl.Result; - } - } - } - } - return elt; - } - - if (kind == DataKind.Map) { - if (elt.Kind == Model.ElementKind.Integer) { - Model.Element theMap = null; - foreach (var conv in model.Functions) - // really, we should reconstruct the name of this function, but this is painful - if (conv.Arity == 1 && conv.Name.StartsWith("$int_to_map_t")) { - var app = conv.AppWithArg(0, elt); - if (app != null) { - theMap = app.Result; - break; - } - } - if (theMap == null) return elt; - return theMap; - } - return elt; - } else if (kind == DataKind.Ptrset) { - var tmp = f_int_to_ptrset.TryEval(elt); - if (tmp != null) - return tmp; - return elt; - } - - if (kind == DataKind.PhysPtr || kind == DataKind.SpecPtr || kind == DataKind.Object) { - if (elt.Kind == Model.ElementKind.Integer) { - var tmp = f_int_to_ptr.TryEval(elt); - if (tmp != null) - elt = tmp; - } - } - - if (kind == DataKind.Object) - return elt; - - if (kind == DataKind.PhysPtr) - return Util.OrElse(f_phys_ptr_cast.TryEval(elt, tpl.Args[0]), elt); - - if (kind == DataKind.SpecPtr) - return Util.OrElse(f_spec_ptr_cast.TryEval(elt, tpl.Args[0]), elt); - - Util.Assert(false); - return elt; - } - - void AddSpecialField(StateNode state, Model.Element elt, List res, string name, Model.Func select_map) - { - if (elt == null) return; - - var map = state.State.TryGet("$s"); - if (map != null) - map = select_map.TryEval(map); - if (map != null) { - var model = elt.Model; - Model.Element val = f_select_bool.TryEval(map, elt); - Model.Element tp = tp_bool; - if (val == null) { - val = f_select_ptr.TryEval(map, elt); - tp = tp_object; - } - if (val == null) { - val = f_select_int.TryEval(map, elt); - tp = tp_mathint; - } - if (val != null) { - res.Add(new FieldNode(state, new EdgeName(name), val, tp) { Category = NodeCategory.MethodologyProperty }); - } - } - } - - void AddPointerFunction(StateNode state, Model.Element elt, List res, string name, Model.Func fn, Model.Element tp) - { - if (elt == null) return; - - var val = fn.TryEval(elt); - if (val != null) { - res.Add(new FieldNode(state, new EdgeName(name), val, tp) { Category = NodeCategory.MethodologyProperty }); - } - } - - void AddPtrType(StateNode state, Model.Element elt, List res) - { - var f = f_field.TryEval(elt); - if (f == null) return; - - var tp = f_field_type.TryEval(f); - - var seq = ""; - - var is_seq = f_is_sequential_field.TryEval(f) as Model.Boolean; - var is_vol = f_is_volatile_field.TryEval(f) as Model.Boolean; - - if (is_seq != null && is_vol != null && is_seq.Value == is_vol.Value) { - seq = " (volatile/sequential mismatch)"; - } else if ((is_seq != null && is_seq.Value) || (is_vol != null && !is_vol.Value)) { - seq = " (sequential)"; - } else if ((is_seq != null && !is_seq.Value) || (is_vol != null && is_vol.Value)) { - seq = " (volatile)"; - } - - if (tp != null || seq != "") { - res.Add(new FieldNode(state, new EdgeName("\\typeof" + seq), tp, tp_mathint) { Category = NodeCategory.MethodologyProperty }); - } - } - - string SkolemName(Model.Func f, ref Model.Element tp) - { - if (f.Name.IndexOf('!') > 0) { - var tok = DecodeToken(f.Name, ref tp); - if (tok != null) { - var baseName = f.Name.Substring(0, f.Name.LastIndexOf('$')); - if (baseName.StartsWith("Q#")) - baseName = baseName.Substring(2); - return string.Format("{0}@{1}", baseName, ShortenToken(tok, 10, false)); - } - } - return null; - } - - string GlobalName(Model.Func f, ref Model.Element tp) - { - if (f.Name.StartsWith("G#")) { - var idx = f.Name.LastIndexOf("#dt"); - if (idx < 0) return null; - var name = f.Name.Substring(2, idx - 2); - tp = DecodeDT(f.Name.Substring(idx + 1)); - return string.Format("::{0}", name); - } - return null; - } - - - public IEnumerable CommonNodes(StateNode state) - { - var skolems = new List(); - - Model.Element tp = null; - - foreach (var f in model.Functions) { - if (f.Arity != 0) continue; - var s = SkolemName(f, ref tp); - if (s == null) - s = GlobalName(f, ref tp); - if (s != null) { - if (tp == null) - tp = GuessType(f.GetConstant()); - var val = WrapForUse(f.GetConstant(), tp); - skolems.Add(new VariableNode(state, s, val, tp)); - } - } - - return skolems; - } - - private Model.Element GuessPtrTo(Model.Element tp) - { - var p = f_ptr_to.TryEval(tp); - if (p != null) return p; - p = f_spec_ptr_to.TryEval(tp); - if (p != null) return p; - var nm = model.MkFunc("*ptrto_" + TypeName(tp), 0).GetConstant(); - f_ptr_to.AddApp(nm, tp); - return f_ptr_to.TryEval(tp); - } - - private Model.Element PtrTo(Model.Element tp, Model.Func f_ptr_to) - { - var p = f_ptr_to.TryEval(tp); - if (p != null) return p; - var nm = model.MkFunc("*" + f_ptr_to.Name + "_" + TypeName(tp), 0).GetConstant(); - f_ptr_to.AddApp(nm, tp); - return f_ptr_to.TryEval(tp); - } - - private bool IsArrayField(Model.Element ptr) - { - return ptr != null && f_idx.TryEval(ptr, model.TryMkElement("0")) != null; - } - - public IEnumerable GetExpansion(StateNode state, Model.Element elt, Model.Element tp) - { - List result = new List(); - Model.FuncTuple tpl; - - if (elt == null) return result; - - var kind = GetKind(tp, out tpl); - if (kind == DataKind.PhysPtr || kind == DataKind.SpecPtr || kind == DataKind.Object) { - var heap = state.State.TryGet("$s"); - if (heap != null) - heap = f_heap.TryEval(heap); - var addresses = new HashSet(); - - if (heap != null) { - var basePtr = f_base.TryEval(elt); - foreach (var fld in f_select_field.AppsWithArg(0, heap)) { - var val = f_select_value.TryEval(fld.Result, elt); - if (val != null) { - var field = fld.Args[1]; - if (!IsConstantField(field) && viewOpts.ViewLevel <= 2) - continue; - var addr = f_dot.TryEval(elt, field); - if (addr != null) addresses.Add(addr); - var node = ComputeUnionActiveOption(state, elt, val, field); - if (node != null) - result.Add(node); - else - BuildFieldNode(result, state, addr, field, val, addr); - } - } - //result.Sort(CompareFields); - } - - { - foreach (var app in f_idx.AppsWithArg(0, elt)) { - var addr = app.Result; - Model.Element val = null, atp = tp; - - addresses.Add(addr); - - foreach (var papp in f_dot.AppsWithResult(addr)) { - var tmp = f_select_value.OptEval(f_select_field.OptEval(heap, papp.Args[1]), papp.Args[0]); - if (tmp != null) { - val = tmp; - var tt = f_field_type.TryEval(papp.Args[1]); - if (tt != null) atp = tt; - } - } - - if (val != null) - val = WrapForUse(val, atp); - result.Add(new MapletNode(state, new EdgeName(this, "[%0]", app.Args[1]), val, atp) { Category = NodeCategory.Maplet }); - if (addr != null) - result.Add(new MapletNode(state, new EdgeName(this, "&[%0]", app.Args[1]), addr, GuessPtrTo(atp)) { Category = NodeCategory.Maplet }); - } - } - - foreach (var ptr in f_dot.AppsWithArg(0, elt)) { - if (addresses.Contains(ptr.Result)) continue; - var fld = ptr.Args[1]; - var idx = f_field_arr_index.TryEval(fld); - if (idx != null) { - var xtp = f_field_type.TryEval(fld); - result.Add(new MapletNode(state, new EdgeName(this, "&[%0] of %1", idx, f_field_arr_size.TryEval(fld)), ptr.Result, GuessPtrTo(xtp)) { Category = NodeCategory.Maplet }); - } - if (!IsConstantField(ptr.Args[1])) continue; - BuildFieldNode(result, state, ptr.Result, ptr.Args[1], null, ptr.Result); - } - - AddSpecialField(state, elt, result, "\\closed", f_closed); - AddSpecialField(state, elt, result, "\\owner", f_owners); - AddSpecialField(state, elt, result, "\\root", f_roots); - AddSpecialField(state, elt, result, "\\timestamp", f_timestamps); - AddPointerFunction(state, elt, result, "\\embedding", f_prim_emb, tp_object); - AddPointerFunction(state, elt, result, "\\addr", f_addr, tp_mathint); - - if (viewOpts.ViewLevel >= 1) { - AddPtrType(state, elt, result); - AddCasts(state, elt, result); - var sets = new SetsNode(state, elt); - if (!sets.IsEmpty) - result.Add(sets); - } - - } else if (kind == DataKind.Map) { - var elTp = tpl.Args[1]; - foreach (var sel in model.Functions) - if (sel.Arity == 2 && sel.Name.StartsWith("$select.$map_t")) { - foreach (var app in sel.AppsWithArg(0, elt)) { - var val = WrapForUse(app.Result, elTp); - var edgname = new EdgeName(this, "[%0]", app.Args[1]); - result.Add(new MapletNode(state, edgname, val, elTp) { Category = NodeCategory.Maplet }); - } - } - } else if (kind == DataKind.Ptrset) { - foreach (var sel in f_select_bool.AppsWithArg(0, elt)) { - var edgname = new EdgeName(this, "[%0]", sel.Args[1]); - result.Add(new MapletNode(state, edgname, sel.Result, tp_bool) { Category = NodeCategory.Maplet }); - } - } else if (kind == DataKind.Flat) { - foreach (var tupl in elt.References) { - if (tupl.Args.Length == 1 && tupl.Args[0] == elt) { - var fname = tupl.Func.Name; - var idx = fname.LastIndexOf('.'); - if (fname.StartsWith("RF#") && idx > 0) { - fname = fname.Substring(idx + 1); - } else if (fname.StartsWith("DP#p")) { - fname = fname.Substring(4); - idx = fname.IndexOf('#'); - if (idx > 0) - fname = fname.Substring(idx + 1) + "#" + fname.Substring(0, idx); - } else { - fname = null; - } - - if (fname != null) - result.Add(new FieldNode(state, new EdgeName(fname), tupl.Result, GuessType(tupl.Result)) { Category = NodeCategory.SpecField }); - } - } - } - - if (!(elt is Model.Boolean)) { - var curState = state.State.TryGet("$s"); - - foreach (var tupl in elt.References) { - { - var seenSelf = false; - var seenState = false; - var seenThisState = false; - var args = tupl.Args; - for (int i = 0; i < args.Length; ++i) { - if (args[i] == elt) seenSelf = true; - if (IsThisState(curState, args[i])) seenThisState = true; - else if (IsSomeState(args[i])) seenState = true; - } - if (!seenSelf) continue; // not looking for aliases (maybe we should?) - if (seenState && !seenThisState) continue; - } - - var argsFmt = new StringBuilder(); - var name = tupl.Func.Name; - - var score = FunctionScore(name); - if (score >= viewOpts.ViewLevel) - continue; - - var retTp = GuessType(tupl.Result); - var retVal = tupl.Result; - - var cat = NodeCategory.MethodologyProperty; - if (name.StartsWith("F#")) { - name = name.Substring(2); - cat = NodeCategory.UserFunction; - } - - if (name.StartsWith("DF#")) { - name = name.Substring(3); - cat = NodeCategory.UserFunction; - } - - if (name.StartsWith("$eq.$")) - name = "EQ"; - - { - Model.Element sktp = null; - var sk = SkolemName(tupl.Func, ref sktp); - if (sk != null) { - name = sk; - if (sktp != null) - retVal = WrapForUse(tupl.Result, sktp); - cat = NodeCategory.Maplet; - } - } - - { - argsFmt.Append(name).Append("("); - var args = new List(); - foreach (var a in tupl.Args) { - if (IsThisState(curState, a)) - argsFmt.Append("\\now, "); - else if (a == elt) - argsFmt.Append(selfMarker + ", "); - else { - argsFmt.AppendFormat("%{0}, ", args.Count); - args.Add(a); - } - } - argsFmt.Length -= 2; - argsFmt.Append(")"); - var edgeName = new EdgeName(this, argsFmt.ToString(), args.ToArray()); - result.Add(new MapletNode(state, edgeName, retVal, retTp) { ViewLevel = score, Category = cat }); - } - - } - } - - return result; - } - - private FieldNode ComputeUnionActiveOption(StateNode state, Model.Element elt, Model.Element val, Model.Element field) - { - if (f_active_option.AppsWithResult(field).FirstOrDefault() != null) { - var activeOpt = f_dot.OptEval(elt, f_int_to_field.OptEval(val)); - if (activeOpt != null) { - var nm = ConstantFieldName(field); - var fieldNode = new FieldNode(state, new EdgeName(nm), activeOpt, GuessType(activeOpt)) { Category = NodeCategory.MethodologyProperty }; - return fieldNode; - } - } - return null; - } - - private void AddCasts(StateNode state, Model.Element elt, List result) - { - foreach (var app in f_phys_ptr_cast.AppsWithArg(0, elt)) { - if (app.Result != elt) - result.Add(new MapletNode(state, new EdgeName(this, "(" + TypeName(app.Args[1]) + "*)..."), app.Result, PtrTo(app.Args[1], f_ptr_to))); - } - foreach (var app in f_spec_ptr_cast.AppsWithArg(0, elt)) { - if (app.Result != elt) - result.Add(new MapletNode(state, new EdgeName(this, "(" + TypeName(app.Args[1]) + "^)..."), app.Result, PtrTo(app.Args[1], f_spec_ptr_to))); - } - var addr = f_addr.TryEval(elt); - if (addr != null) { - foreach (var app in f_blob_type.Apps) { - var blob = f_address_root.TryEval(addr, app.Result); - if (blob != null) { - result.Add(new MapletNode(state, new EdgeName(this, TypeName(app.Result) + "..."), blob, app.Result)); - } - } - } - } - - private void BuildFieldNode(List result, StateNode state, Model.Element ptr, Model.Element field, Model.Element val, Model.Element addr) - { - var ftp = f_field_type.TryEval(field); - if (val != null) - val = WrapForUse(val, ftp); - - if (IsArrayField(ptr)) { - val = addr; - addr = null; - ftp = GuessPtrTo(ftp); - } - - var nm = ConstantFieldName(field); - var edgname = nm == null ? field.ToString() : nm; - - var cat = NodeCategory.PhysField; - if (f_is_ghost_field.IsTrue(field)) - cat = NodeCategory.SpecField; - if (nm != null && nm.Contains("<")) - cat = NodeCategory.MethodologyProperty; - - var fieldNode = new FieldNode(state, new EdgeName(edgname), val, ftp) { Category = cat}; - result.Add(fieldNode); - - if (addr != null) { - result.Add(new FieldNode(state, new EdgeName("&" + edgname), addr, GuessPtrTo(ftp)) { Category = cat }); - } - } - - public override IEnumerable States - { - get - { - return states; - } - } - - private int DataTypeToString(StringBuilder sb, int level, Model.Element elt) - { - Model.FuncTuple ctor = null; - int len = 1; - string dataTypeType = null; - foreach (var app in elt.References) { - var n = app.Func.Name; - if (app.Result == elt && n.StartsWith("DF#")) { - ctor = app; - } - var tmp = DataTypeName(elt, app); - if (tmp != null) dataTypeType = tmp; - } - - if (dataTypeType != null) { - if (ctor != null) - sb.Append(ctor.Func.Name.Substring(3)); - else - sb.Append(DataTypeShortName(elt, dataTypeType)); - if (ctor != null && ctor.Args.Length > 0) { - if (level <= 0) sb.Append("(...)"); - else { - sb.Append("("); - for (int i = 0; i < ctor.Args.Length; ++i) { - if (i != 0) sb.Append(", "); - len += DataTypeToString(sb, level - 1, ctor.Args[i]); - } - sb.Append(")"); - } - } - } else { - sb.Append(CanonicalName(elt)); - } - return len; - } - - private string DataTypeShortName(Model.Element elt, string tp) - { - var baseName = tp; - - var hd = model.MkFunc("DGH#" + tp, 1).TryEval(elt); - if (hd != null) { - foreach (var nm in hd.References) { - if (nm.Func.Arity == 0 && nm.Func.Name.StartsWith("DH#")) - baseName = nm.Func.Name.Substring(3); - } - } - - return baseName; - } - - private string CanonicalBaseNameCore(string name, Model.Element elt, bool doDatatypes, ref NameSeqSuffix suff) - { - var vm = this; - - if (name.Contains("[") || name.Contains("'")) - name = ""; - - if (name != "") - return name; - - var isNull = false; - foreach (var tpl in elt.References) { - var fn = tpl.Func; - if (fn.Name.StartsWith("$select.$map_t") && fn.Arity == 2 && tpl.Args[0] == elt) - return "map"; - if (fn.Name.StartsWith("$int_to_map_t") && tpl.Result == elt) - return "map"; - - if (fn.Arity >= 1 && tpl.Args[0] == elt) { - if (fn == f_select_bool) - return "ptrset"; - } - - if (tpl.Result == elt) - if (fn == f_int_to_version) - return "version"; - - if (fn == f_is_null && tpl.Result == model.True) - isNull = true; - - var dtpName = DataTypeName(elt, tpl); - if (dtpName != null) { - var sb = new StringBuilder(); - string prev = null; - datatypeLongName[elt] = "*SELF*"; // in case we recurse (but this shouldn't happen) - for (int lev = 0; lev < 10; lev++) { - sb.Length = 0; - var len = DataTypeToString(sb, lev, elt); - if (prev == null || len <= maxDatatypeNameLength) - prev = sb.ToString(); - } - - datatypeLongName[elt] = prev; - suff = NameSeqSuffix.WhenNonZero; - return prev; - } - } - - var fld = vm.f_field.TryEval(elt); - if (fld != null) { - var tp = vm.f_field_type.TryEval(fld); - if (tp != null) { - var n = vm.TryTypeName(tp); - if (n != null) { - if (isNull) - return "(" + n + "*)NULL"; - return n; - } - } - } - - return ""; - } - - protected override string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff) - { - var lit = this.LiteralName(elt); - if (lit != null) { - suff = NameSeqSuffix.None; - return lit; - } - if (datatypeLongName.TryGetValue(elt, out lit)) { - suff = NameSeqSuffix.WhenNonZero; - return lit; - } - - var name = base.CanonicalBaseName(elt, out suff); - name = CanonicalBaseNameCore(name, elt, true, ref suff); - - return name; - } - - public override string PathName(IEnumerable path) - { - var sb = new StringBuilder(); - foreach (var d in path) { - var name = d.Name; - if (name == "") continue; // can that happen? - if (name.Contains("(") && name.Contains(selfMarker)) { - var repl = name.Replace(selfMarker, sb.ToString()); - sb.Length = 0; - sb.Append(repl); - } else { - if (sb.Length > 0 && name[0] != '[') - sb.Append("->"); - sb.Append(d.Name); - } - } - - return sb.ToString(); - } - } - - class StateNode : NamedState - { - internal VccModel vm; - internal List vars; - internal List commons; - internal int index; - internal string capturedStateName; - - public StateNode(VccModel parent, Model.CapturedState s) - : base(s, parent) - { - this.capturedStateName = s.Name; - this.vm = parent; - } - - internal void SetupVars() - { - if (vars != null) return; - vars = new List(); - - var names = Util.Empty(); - - if (vm.states.Count > 0) { - var prev = vm.states.Last(); - names = prev.vars.Map(v => v.realName); - } - - names = names.Concat(state.Variables).Distinct(); - - var curVars = state.Variables.ToDictionary(x => x); - foreach (var v in names) { - var localName = vm.GetUserVariableName(v); - if (localName != null) { - var tp = vm.LocalType(v); - var val = state.TryGet(v); - val = vm.WrapForUse(val, tp); - var vn = new VariableNode(this, v, val, tp) { ShortName = localName }; - vn.updatedHere = vm.states.Count > 0 && curVars.ContainsKey(v); - if (curVars.ContainsKey(v)) - vm.RegisterLocalValue(vn.Name, val); - vars.Add(vn); - } - } - - vm.Flush(vars); - - commons = new List(); - commons.AddRange(vm.CommonNodes(this)); - } - - public override IEnumerable Nodes - { - get { - return vars.Concat(commons); - } - } - - public override string CapturedStateName - { - get - { - return this.capturedStateName; - } - } - } - - class ElementNode : DisplayNode - { - protected StateNode stateNode; - protected Model.Element tp; - protected VccModel vm { get { return stateNode.vm; } } - - public ElementNode(StateNode st, EdgeName name, Model.Element elt, Model.Element tp) - : base(st.vm, name, elt) - { - this.stateNode = st; - this.tp = tp; - } - - protected override void ComputeChildren() - { - children.AddRange(vm.GetExpansion(stateNode, element, tp)); - } - - public override string ToolTip - { - get - { - var sb = new StringBuilder(); - if (tp != null) - sb.AppendFormat("Type: {0}\n", vm.TypeName(tp)); - var i = element as Model.Integer; - if (i != null) { - var n = System.Numerics.BigInteger.Parse(i.Numeral); - sb.AppendFormat("Value: {0} (0x{1:x})\n", n, n); - } else if (element != null) { - sb.AppendFormat("Value: {0}\n", element); - } - return sb.ToString(); - } - } - } - - class SetsNode : ElementNode - { - List refs = new List(); - - public SetsNode(StateNode par, Model.Element elt) - : base(par, new EdgeName("\\in ..."), null, null) - { - children = new List(); - foreach (var app in vm.f_select_bool.AppsWithArg(1, elt)) { - children.Add( - new MapletNode(par, new EdgeName(vm, VccModel.selfMarker + " \\in %0", app.Args[0]), app.Result, vm.tp_bool) { Category = NodeCategory.MethodologyProperty }); - refs.Add(app.Args[0]); - } - Category = NodeCategory.MethodologyProperty; - } - - public override IEnumerable References - { - get - { - return refs; - } - } - - public bool IsEmpty { get { return children.Count == 0; } } - } - - - class FieldNode : ElementNode - { - public FieldNode(StateNode par, EdgeName realName, Model.Element elt, Model.Element tp) - : base(par, realName, elt, tp) - { - } - } - - class MapletNode : ElementNode - { - public MapletNode(StateNode par, EdgeName realName, Model.Element elt, Model.Element tp) - : base(par, realName, elt, tp) - { - } - } - - class VariableNode : ElementNode - { - public bool updatedHere; - public string realName; - - public VariableNode(StateNode par, string realName, Model.Element elt, Model.Element tp) - : base(par, new EdgeName(realName), elt, tp) - { - this.realName = realName; - } - - public override string ShortName - { - set { this.name = new EdgeName(value); } - get { return this.name.ToString(); } - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.Boogie.ModelViewer.Vcc +{ + public class Provider : ILanguageProvider + { + public static Provider Instance = new Provider(); + private Provider() { } + + public bool IsMyModel(Model m) + { + return m.TryGetFunc("$is_ghost_field") != null && m.TryGetFunc("$fk_vol_version") != null; + } + + public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) + { + var vm = new VccModel(m, opts); + return vm; + } + } + + enum DataKind + { + Flat, + PhysPtr, + SpecPtr, + Object, + Ptrset, + Map + } + + class VccModel : LanguageModel + { + public readonly Model.Func f_ptr_to, f_phys_ptr_cast, f_spec_ptr_cast, f_mathint, f_local_value_is, f_spec_ptr_to, f_heap, f_select_field, + f_select_value, f_field, f_field_type, f_int_to_ptr, f_ptr_to_int, f_ptr, f_map_t, f_select_ptr, + f_owners, f_closed, f_roots, f_timestamps, f_select_bool, f_select_int, f_is_null, f_good_state, + f_int_to_version, f_int_to_ptrset, f_set_in0, f_is_ghost_field, f_is_phys_field, f_idx, + f_is_sequential_field, f_is_volatile_field, f_type_project_0, f_array, f_active_option, f_int_to_field, + f_blob_type, f_array_emb, f_addr, f_address_root, f_base, f_field_arr_size, f_field_arr_root, f_field_arr_index, + f_dot, f_prim_emb; + public readonly Model.Element tp_object, tp_mathint, tp_bool, tp_state, tp_ptrset, tp_heaptp; + public readonly Model.Element elt_me, elt_null; + Dictionary typeName = new Dictionary(); + Dictionary literalName = new Dictionary(); + Dictionary guessedType = new Dictionary(); + public List states = new List(); + public Dictionary localVariableNames = new Dictionary(); + + Dictionary datatypeLongName = new Dictionary(); + + Dictionary fileNameMapping = new Dictionary(); + + public const string selfMarker = "\\self"; + public const int maxDatatypeNameLength = 5; + + public VccModel(Model m, ViewOptions opts) + : base(m, opts) + { + f_ptr_to = m.MkFunc("$ptr_to", 1); + f_spec_ptr_to = m.MkFunc("$spec_ptr_to", 1); + f_phys_ptr_cast = m.MkFunc("$phys_ptr_cast", 2); + f_spec_ptr_cast = m.MkFunc("$spec_ptr_cast", 2); + f_mathint = m.MkFunc("^^mathint", 0); + f_local_value_is = m.MkFunc("$local_value_is", 5); + f_heap = m.MkFunc("$heap", 1); + f_select_field = m.MkFunc("Select_[$field][$ptr]$int", 2); + f_select_value = m.MkFunc("Select_[$ptr]$int", 2); + f_select_ptr = m.MkFunc("Select_[$ptr]$ptr", 2); + f_select_int = m.MkFunc("Select_[$ptr]$int", 2); + f_select_bool = m.MkFunc("Select_[$ptr]$bool", 2); + f_owners = m.MkFunc("$f_owner", 1); + f_closed = m.MkFunc("$f_closed", 1); + f_roots = m.MkFunc("$roots", 1); + f_timestamps = m.MkFunc("$f_timestamp", 1); + f_active_option = m.MkFunc("$f_active_option", 1); + f_field = m.MkFunc("$field", 1); + f_field_type = m.MkFunc("$field_type", 1); + f_int_to_ptr = m.MkFunc("$int_to_ptr", 1); + f_ptr_to_int = m.MkFunc("$ptr_to_int", 1); + f_ptr = m.MkFunc("$ptr", 2); + f_dot = m.MkFunc("$dot", 2); + f_map_t = m.MkFunc("$map_t", 2); + f_is_null = m.MkFunc("$is_null", 1); + f_good_state = m.MkFunc("$good_state", 1); + f_int_to_version = m.MkFunc("$int_to_version", 1); + f_int_to_ptrset = m.MkFunc("$int_to_ptrset", 1); + f_int_to_field = m.MkFunc("$int_to_field", 1); + f_set_in0 = m.MkFunc("$set_in0", 2); + f_is_ghost_field = m.MkFunc("$is_ghost_field", 1); + f_is_phys_field = m.MkFunc("$is_phys_field", 1); + f_idx = m.MkFunc("$idx", 2); + f_is_sequential_field = m.MkFunc("$is_sequential_field", 1); + f_is_volatile_field = m.MkFunc("$is_volatile_field", 1); + f_type_project_0 = m.MkFunc("$type_project_0", 1); + f_array = m.MkFunc("$array", 2); + f_blob_type = m.MkFunc("$blob_type", 1); + f_array_emb = m.MkFunc("$array_emb", 2); + f_addr = m.MkFunc("$addr", 1); + f_base = m.MkFunc("$base", 1); + f_prim_emb = m.MkFunc("$prim_emb", 1); + f_address_root = m.MkFunc("$address_root", 2); + f_field_arr_index = m.MkFunc("$field_arr_index", 1); + f_field_arr_size = m.MkFunc("$field_arr_size", 1); + f_field_arr_root = m.MkFunc("$field_arr_root", 1); + + tp_bool = m.GetFunc("^^bool").GetConstant(); + tp_mathint = m.GetFunc("^^mathint").GetConstant(); + tp_object = m.GetFunc("^^object").GetConstant(); + tp_state = m.GetFunc("^$#state_t").GetConstant(); + tp_ptrset = m.GetFunc("^$#ptrset").GetConstant(); + + tp_heaptp = m.MkFunc("$heap_type", 0).GetConstant(); + + elt_me = m.GetFunc("$me").GetConstant(); + elt_null = m.GetFunc("$null").GetConstant(); + + literalName[elt_me] = "\\me"; + literalName[elt_null] = "NULL"; + foreach (var tpl in f_phys_ptr_cast.Apps) { + if (tpl.Args[0] == elt_null) + literalName[tpl.Result] = "(" + TypeName(tpl.Args[1]) + "*)NULL"; + } + foreach (var tpl in f_spec_ptr_cast.Apps) { + if (tpl.Args[0] == elt_null) + literalName[tpl.Result] = "(" + TypeName(tpl.Args[1]) + "^)NULL"; + } + foreach (var fn in model.Functions) { + if (fn.Arity == 0 && fn.Name.StartsWith("l#")) + literalName[fn.GetConstant()] = ":" + fn.Name.Substring(2); + } + + DecodeFileNames(); + ComputeLocalVariableNames(); + + foreach (var s in m.States) { + var sn = new StateNode(this, s); + sn.SetupVars(); + states.Add(sn); + } + + var allStates = states.ToArray(); + if (allStates.Length == 1 && allStates[0].vars.Count == 0) { + throw new Exception("This VCC model doesn't contain any variables. Was it saved with the -bvd option?"); + } + states.Clear(); + var i = 0; + while (i < allStates.Length) { + var lastGoodName = allStates[i].State.Name; + + var userVars = new HashSet(allStates[i].State.Variables.Where(localVariableNames.ContainsKey)); + i++; + while (i < allStates.Length) { + foreach (var v in allStates[i].State.Variables) { + if (v == "$s" || userVars.Contains(v)) goto stop; + if (localVariableNames.ContainsKey(v)) + userVars.Add(v); + } + + var curName = TryParseSourceLocation(allStates[i].State.Name); + if (!IsBadName(curName)) + lastGoodName = allStates[i].State.Name; + i++; + } + + stop: + + var lastState = allStates[i - 1]; + lastState.capturedStateName = lastGoodName; + lastState.index = states.Count; + states.Add(lastState); + lastState.SetupVars(); + } + + foreach (var s in states) { + var elt = s.State.TryGet("$s"); + if (elt != null) + literalName[elt] = "\\state'" + s.index; + } + + GenerateSourceLocations(states); + } + + + bool IsBadName(SourceLocation l) + { + return l == null || l.Filename.StartsWith("<"); + } + + private void ComputeLocalVariableNames() + { + var vars = model.States.SelectMany(s => s.Variables).Where(v => v != null).Distinct(); + Func simpleName = s => { string dummy; return GetUserVariableNameCore(s, out dummy); }; + var userVars = vars.Where(s => simpleName(s) != null); + var conflictsName = Conflicts(userVars, simpleName).ToArray(); + Func qName = s => { string kind, n = GetUserVariableNameCore(s, out kind); return n + " (" + kind + ")"; }; + var conflictsKind = Conflicts(conflictsName, qName).ToArray(); + + var conflictsNameH = new HashSet(conflictsName); + var conflictsKindH = new HashSet(conflictsKind); + + foreach (var v in userVars) { + if (conflictsKindH.Contains(v)) continue; + if (conflictsNameH.Contains(v)) + localVariableNames[v] = qName(v); + else + localVariableNames[v] = simpleName(v); + } + + var idx = 0; + foreach (var v in conflictsKind) { + localVariableNames[v] = string.Format("{0} #{1}", qName(v), idx++); + } + } + + static IEnumerable Conflicts(IEnumerable input, Func f) + { + var revMap = new Dictionary(); + var reported = new HashSet(); + + foreach (var k in input) { + if (reported.Contains(k)) continue; + var v = f(k); + A tmp; + if (revMap.TryGetValue(v, out tmp) && !tmp.Equals(k)) { + if (!reported.Contains(tmp)) { + yield return tmp; + reported.Add(tmp); + } + yield return k; + reported.Add(k); + } else { + revMap[v] = k; + } + } + } + + #region Function name scoring + static string[][] prefixes = new string[][] { + new string[] { "F#", "$eq.$map", "Q#", }, + new string[] { "F#lambda", }, + new string[] { "$int_to_", "lambda@", "distinct-aux-f", "Select_","Store_", "$select.", "$store.", }, + }; + + static string[][] totals = new string[][] { + new string[] { + "$current_timestamp", + "$full_stop", "$function_entry", "$ptr_to_i4", + "$ptr_to_i8", "$ptr_to_u4", "$ptr_to_u8", + "$span", "$sizeof", "$in_domain", + "$inv2", + "$is_claimable", + "$set_cardinality", "$set_difference", "$set_union", + "$thread_local", "$unchecked", "$writes_at", + "$array_range", "$arrays_disjoint", + "$byte_ptr_subtraction", + }, + + new string[] { + "$addr", "$dot", "$emb0", "$fetch_from_domain", "$in_range_phys_ptr", + "$in_range_spec_ptr", "$is_sequential_field", "$is_volatile_field", + "$is_ghost_field", "$is_phys_field", "$is_math_type", "$invok_state", + "$is_primitive", + "$spec_ptr_cast", + "$phys_ptr_cast", + "$is_null", + "$in_domain_lab", + "$inv_lab", + "$set_in0", + }, + + new string[] { + "$_pow2", "$as_composite_field", "$as_field_with_type", "$as_in_range_t", + "$as_primitive_field", "$base", "$call_transition", "tickleBool", "Ctor", + "$mv_state", "$field", "$field_arr_root", "$field_kind", "$field_offset", + "$field_parent_type", "$field_type", "$file_name_is", "$good_state", + "$good_state_ext", "$function_arg_type", "$has_field_at0", "$map_domain", + "$map_range", "$map_t", "$ptr_to", "$ptr_to_i1", "$ptr_to_i2", + "$ptr_to_u1", "$ptr_to_u2", "$is_unwrapped", "$is_unwrapped_dynamic", + "$heap", "$closed", "$owner", "$owns", "$modifies", "$post_unwrap", + "$pow2", "$pre_unwrap", "$ptr", "$is", "$in_range_t", "$roots", + "$timestamp", "$type_branch", "$type_code_is", "$type_project_0", + "$typemap", "$set_in_pos", "$updated_owns", "$ver_domain", "$vs_state", + "$set_singleton", + "$f_owner", "$f_closed", "$f_timestamps", + "$local_value_is", + "$field_arr_ctor", + "$idx", + }, + }; + + string[] state_props = new string[] { }; + + Dictionary functionScores = new Dictionary(); + + int FunctionScore(string name) + { + if (functionScores.Count == 0) { + for (int i = 0; i < totals.Length; ++i) + foreach (var s in totals[i]) + functionScores[s] = i; + } + + int res; + if (functionScores.TryGetValue(name, out res)) + return res; + + res = -1; + if (name[0] == '$' && name.EndsWith("_to_int")) + res = 1; + else if (name.EndsWith("#frame")) + res = 2; + else if (name.Contains("#limited#")) + res = 2; + else { + for (int i = 0; i < prefixes.Length; ++i) + foreach (var p in prefixes[i]) + if (name.StartsWith(p)) { + res = i; + //goto stop; + } + //stop: ; + } + + if (res == -1) + res = 1; // default + + functionScores[name] = res; + return res; + } + #endregion + + private void DecodeFileNames() + { + var fis = model.GetFunc("$file_name_is"); + foreach (var f in model.Functions) { + if (f.Arity == 0 && f.Name.StartsWith("#file^")) { + var sb = new StringBuilder(); + var idx = 6; + var name = f.Name; + while (idx < name.Length) { + if (name[idx] == '?') { + var c = (char)Int32.Parse(name.Substring(idx + 1, 2), System.Globalization.NumberStyles.HexNumber); + sb.Append(c); + idx += 3; + } else { + sb.Append(name[idx++]); + } + } + name = sb.ToString(); + + foreach (var app in fis.AppsWithArg(1, f.GetConstant())) + fileNameMapping[app.Args[0].AsInt()] = name; + } + } + } + + private Model.Element DecodeDT(string dt) + { + if (dt.StartsWith("dt")) { + var tpName = dt.Replace("dt", "#distTp"); + var f = model.TryGetFunc(tpName); + if (f != null) { + return f.GetConstant(); + //var res = f_type_project_0.TryEval(ptr); + //if (res != null) + // tp = res; + } + } + return null; + } + + private string DecodeToken(string name, ref Model.Element tp) + { + var idx = name.LastIndexOf("$"); + if (idx < 0) return null; + var words = name.Substring(idx + 1).Split('.', '^', '!', '#', '@'); + if (words.Length > 3) + tp = DecodeDT(words[3]); + return string.Format("{0}({1},{2})", fileNameMapping[int.Parse(words[0])], words[1], words[2]); + } + + public string GetUserVariableName(string name) + { + string res; + localVariableNames.TryGetValue(name, out res); + return res; + } + + + string GetUserVariableNameCore(string name, out string kind) + { + if (name.StartsWith("L#")) { + kind = "local"; + return name.Substring(2); + } + + if (name.StartsWith("P#")) { + kind = "in-param"; + return name.Substring(2); + } + + if (name.StartsWith("OP#")) { + kind = "out-param"; + return name.Substring(3); + } + + if (name.StartsWith("SL#")) { + kind = "spec local"; + return name.Substring(3); + } + + if (name.StartsWith("SP#")) { + kind = "spec in-param"; + return name.Substring(3); + } + + if (name.StartsWith("local.")) { + kind = "param copied to local"; + return name.Substring(6); + } + + if (name.StartsWith("addr.")) { + kind = "stack-allocated struct"; + return name.Substring(5); + } + + if (name == "$result") { + kind = "function return value"; + return "\\result"; + } + + if (name.StartsWith("res__") && viewOpts.ViewLevel >= 1) { + kind = "call result"; + return name; + } + + if (name == "$s" && viewOpts.ViewLevel >= 1) { + kind = "current state"; + return "\\now"; + } + + kind = null; + return null; + } + + + private string LiteralName(Model.Element elt) + { + string r; + + if (literalName.TryGetValue(elt, out r)) + return r; + + r = TryTypeName(elt); + if (r != null) { + literalName[elt] = r; + return r; + } + + var i = elt as Model.Integer; + if (i != null) + return AsPow2(i); + + var bv = elt as Model.BitVector; + if (bv != null) + return bv.Numeral + "bv" + bv.Size.ToString(); + + return null; + } + + public Model.Element LocalType(string localName) + { + string dummy; + var v = GetUserVariableNameCore(localName, out dummy); + if (v == null) v = localName; + var c = model.TryGetFunc("#loc." + v); + if (c != null) { + var localIs = f_local_value_is.AppWithArg(2, c.GetConstant()); + if (localIs != null) + return localIs.Args[4]; + } + foreach (var s in model.States.Reverse()) { + var val = s.TryGet(localName); + var tp = GuessType(val); + if (tp != tp_mathint) + return tp; + } + return tp_mathint; + } + + public Model.Element Image(Model.Element elt, Model.Func f) + { + var r = f.AppWithResult(elt); + if (r != null) + return r.Args[0]; + return null; + } + + string TypeNameCore(Model.Element elt) + { + var deref = Image(elt, f_ptr_to); + if (deref != null) + return TypeName(deref) + "*"; + deref = Image(elt, f_spec_ptr_to); + if (deref != null) + return TypeName(deref) + "^"; + deref = Image(elt, f_blob_type); + if (deref != null) + return "_(blob " + CanonicalName(deref) + ")"; + var mapt = f_map_t.AppWithResult(elt); + if (mapt != null) + return string.Format("{1}[{0}]", TypeName(mapt.Args[0]), TypeName(mapt.Args[1])); + + var arr = f_array.AppWithResult(elt); + if (arr != null) { + return string.Format("{0}[{1}]", TypeName(arr.Args[0]), arr.Args[1].ToString()); + } + + foreach (var app in elt.Names) + if (app.Func.Arity == 0 && app.Func.Name.StartsWith("^")) { + var n = app.Func.Name.Substring(1); + switch (n) { + case "^i1": return "int8_t"; + case "^u1": return "uint8_t"; + case "^i2": return "int16_t"; + case "^u2": return "uint16_t"; + case "^i4": return "int32_t"; + case "^u4": return "uint32_t"; + case "^i8": return "int64_t"; + case "^u8": return "uint64_t"; + case "^bool": return "bool"; + default: + var pref = "_vcc_math_type_"; + if (n.StartsWith(pref)) n = n.Substring(pref.Length); + return n; + } + } + + return null; + } + + public string TypeName(Model.Element elt) + { + var r = TryTypeName(elt); + if (r == null) + return elt.ToString(); + else return r; + } + + public string TryTypeName(Model.Element elt) + { + string res; + if (!typeName.TryGetValue(elt, out res)) { + typeName[elt] = elt.ToString(); // avoid infinite recursion + res = TypeNameCore(elt); + typeName[elt] = res; + } + return res; + } + + public static readonly string[] synthethic_fields = new string[] { "$f_owns", "$f_ref_cnt", "$f_vol_version", "$f_root", "$f_group_root", "$f_active_option" }; + + public string ConstantFieldName(Model.Element elt) + { + string res; + IsConstantField(elt, out res); + return res; + } + + public bool IsConstantField(Model.Element elt) + { + string dummy; + return IsConstantField(elt, out dummy); + } + + public bool IsConstantField(Model.Element elt, out string theName) + { + var bestScore = int.MinValue; + string bestName = null; + + foreach (var t in elt.Names) { + var score = int.MinValue; + string name = null; + if (t.Args.Length == 0) { + name = t.Func.Name; + score = 0; + var dotIdx = name.IndexOf('.'); + if (dotIdx > 0) { + score += 10; + name = name.Substring(dotIdx + 1); + } + if (name.Contains('#')) score -= 1; + } else if (t.Func.Name.StartsWith("$f_") && synthethic_fields.Contains(t.Func.Name)) { + name = string.Format("{0}<{1}>", t.Func.Name.Substring(3).Replace("root", "alloc_root"), TypeName(t.Args[0])); + score = 6; + } else if (t.Func == f_array_emb) { + name = string.Format("[0] (of {0}[{1}])", TypeName(t.Args[0]), t.Args[1].ToString()); + score = 5; + } + if (score > bestScore) { + bestScore = score; + bestName = name; + } + } + + theName = bestName; + return bestScore >= 5; + } + + bool IsSomeState(Model.Element elt) + { + var tp = GuessType(elt); + return tp == tp_state || tp == tp_heaptp; + } + + bool IsThisState(Model.Element st, Model.Element elt) + { + return elt == st || elt == f_heap.TryEval(st); + } + + Model.Element GuessType(Model.Element element) + { + Model.Element res; + if (!guessedType.TryGetValue(element, out res)) { + res = GuessTypeCore(element); + guessedType[element] = res; + } + return res; + } + + Model.Element GuessTypeCore(Model.Element element) + { + if (element is Model.Boolean) + return tp_bool; + + var fld = f_field.TryEval(element); + if (fld != null) { + var tp = f_field_type.TryEval(fld); + if (tp != null) { + var ptp = f_ptr_to.TryEval(tp); + if (ptp != null) + return ptp; + ptp = f_spec_ptr_to.TryEval(tp); + if (ptp != null) + return ptp; + } + return tp_object; + } + + foreach (var tpl in element.References) { + if (element == tpl.Result) { + if (tpl.Func == f_ptr) + return tp_object; + if (tpl.Func == f_heap) + return tp_heaptp; + } + + if (tpl.Args.Length >= 1 && tpl.Args[0] == element) { + if (tpl.Func == f_heap || tpl.Func == f_closed || tpl.Func == f_good_state) + return tp_state; + } + + if (tpl.Func == f_select_bool) + if (tpl.Args[0] == element) + return tp_ptrset; + else if (tpl.Args[1] == element) + return tp_object; + + var fname = tpl.Func.Name; + + if (tpl.Args.Length == 2 && tpl.Args[0] == element && fname.StartsWith("$select.$map_t")) { + var mt = model.TryGetFunc("MT#" + fname); + if (mt != null && mt.Arity == 0) + return mt.GetConstant(); + var t1 = GuessType(tpl.Args[1]); + var t2 = GuessType(tpl.Result); + var t = f_map_t.TryEval(t1, t2); + if (t != null) + return t; + } + + var tpName = DataTypeName(element, tpl); + if (tpName != null) { + var tp = model.TryGetFunc("^$#" + tpName); + if (tp != null) + return tp.GetConstant(); + } + } + + return tp_mathint; + } + + string DataTypeName(Model.Element elt, Model.FuncTuple tpl) + { + var fname = tpl.Func.Name; + if (tpl.Args.Length == 1 && tpl.Args[0] == elt && fname.StartsWith("RF#")) { + var fldName = tpl.Func.Name.Substring(3); + var idx = fldName.LastIndexOf('.'); + if (idx > 0) { + return fldName.Substring(0, idx).Replace("_vcc_math_type_", ""); + } + } + + if (tpl.Args.Length == 1 && tpl.Args[0] == elt && (fname.StartsWith("DSZ#") || fname.StartsWith("RSZ#") || fname.StartsWith("DGH#"))) { + return fname.Substring(4).Replace("_vcc_math_type_", ""); + } + return null; + } + + public DataKind GetKind(Model.Element tp, out Model.FuncTuple tpl) + { + tpl = null; + + if (tp == tp_object) + return DataKind.Object; + else if (tp == tp_ptrset) + return DataKind.Ptrset; + + tpl = f_ptr_to.AppWithResult(tp); + if (tpl != null) return DataKind.PhysPtr; + tpl = f_spec_ptr_to.AppWithResult(tp); + if (tpl != null) return DataKind.SpecPtr; + tpl = f_map_t.AppWithResult(tp); + if (tpl != null) return DataKind.Map; + + return DataKind.Flat; + } + + public DataKind GetKind(Model.Element tp) + { + Model.FuncTuple dummy; + return GetKind(tp, out dummy); + } + + + public Model.Element WrapForUse(Model.Element elt, Model.Element tp) + { + Model.FuncTuple tpl; + var kind = GetKind(tp, out tpl); + + if (kind == DataKind.Flat) { + if (elt.Kind == Model.ElementKind.Integer) { + var tpname = TypeName(tp); + if(tpname.StartsWith("$")) tpname = tpname.Substring(1); + if (tpname.StartsWith("#")) { + foreach (var tupl in elt.References) { + if (tupl.Args.Length == 1 && tupl.Args[0] == elt && tupl.Func.Name.StartsWith("$int_to_") && tupl.Func.Name.EndsWith(tpname)) { + return tupl.Result; + } + } + } + } + return elt; + } + + if (kind == DataKind.Map) { + if (elt.Kind == Model.ElementKind.Integer) { + Model.Element theMap = null; + foreach (var conv in model.Functions) + // really, we should reconstruct the name of this function, but this is painful + if (conv.Arity == 1 && conv.Name.StartsWith("$int_to_map_t")) { + var app = conv.AppWithArg(0, elt); + if (app != null) { + theMap = app.Result; + break; + } + } + if (theMap == null) return elt; + return theMap; + } + return elt; + } else if (kind == DataKind.Ptrset) { + var tmp = f_int_to_ptrset.TryEval(elt); + if (tmp != null) + return tmp; + return elt; + } + + if (kind == DataKind.PhysPtr || kind == DataKind.SpecPtr || kind == DataKind.Object) { + if (elt.Kind == Model.ElementKind.Integer) { + var tmp = f_int_to_ptr.TryEval(elt); + if (tmp != null) + elt = tmp; + } + } + + if (kind == DataKind.Object) + return elt; + + if (kind == DataKind.PhysPtr) + return Util.OrElse(f_phys_ptr_cast.TryEval(elt, tpl.Args[0]), elt); + + if (kind == DataKind.SpecPtr) + return Util.OrElse(f_spec_ptr_cast.TryEval(elt, tpl.Args[0]), elt); + + Util.Assert(false); + return elt; + } + + void AddSpecialField(StateNode state, Model.Element elt, List res, string name, Model.Func select_map) + { + if (elt == null) return; + + var map = state.State.TryGet("$s"); + if (map != null) + map = select_map.TryEval(map); + if (map != null) { + var model = elt.Model; + Model.Element val = f_select_bool.TryEval(map, elt); + Model.Element tp = tp_bool; + if (val == null) { + val = f_select_ptr.TryEval(map, elt); + tp = tp_object; + } + if (val == null) { + val = f_select_int.TryEval(map, elt); + tp = tp_mathint; + } + if (val != null) { + res.Add(new FieldNode(state, new EdgeName(name), val, tp) { Category = NodeCategory.MethodologyProperty }); + } + } + } + + void AddPointerFunction(StateNode state, Model.Element elt, List res, string name, Model.Func fn, Model.Element tp) + { + if (elt == null) return; + + var val = fn.TryEval(elt); + if (val != null) { + res.Add(new FieldNode(state, new EdgeName(name), val, tp) { Category = NodeCategory.MethodologyProperty }); + } + } + + void AddPtrType(StateNode state, Model.Element elt, List res) + { + var f = f_field.TryEval(elt); + if (f == null) return; + + var tp = f_field_type.TryEval(f); + + var seq = ""; + + var is_seq = f_is_sequential_field.TryEval(f) as Model.Boolean; + var is_vol = f_is_volatile_field.TryEval(f) as Model.Boolean; + + if (is_seq != null && is_vol != null && is_seq.Value == is_vol.Value) { + seq = " (volatile/sequential mismatch)"; + } else if ((is_seq != null && is_seq.Value) || (is_vol != null && !is_vol.Value)) { + seq = " (sequential)"; + } else if ((is_seq != null && !is_seq.Value) || (is_vol != null && is_vol.Value)) { + seq = " (volatile)"; + } + + if (tp != null || seq != "") { + res.Add(new FieldNode(state, new EdgeName("\\typeof" + seq), tp, tp_mathint) { Category = NodeCategory.MethodologyProperty }); + } + } + + string SkolemName(Model.Func f, ref Model.Element tp) + { + if (f.Name.IndexOf('!') > 0) { + var tok = DecodeToken(f.Name, ref tp); + if (tok != null) { + var baseName = f.Name.Substring(0, f.Name.LastIndexOf('$')); + if (baseName.StartsWith("Q#")) + baseName = baseName.Substring(2); + return string.Format("{0}@{1}", baseName, ShortenToken(tok, 10, false)); + } + } + return null; + } + + string GlobalName(Model.Func f, ref Model.Element tp) + { + if (f.Name.StartsWith("G#")) { + var idx = f.Name.LastIndexOf("#dt"); + if (idx < 0) return null; + var name = f.Name.Substring(2, idx - 2); + tp = DecodeDT(f.Name.Substring(idx + 1)); + return string.Format("::{0}", name); + } + return null; + } + + + public IEnumerable CommonNodes(StateNode state) + { + var skolems = new List(); + + Model.Element tp = null; + + foreach (var f in model.Functions) { + if (f.Arity != 0) continue; + var s = SkolemName(f, ref tp); + if (s == null) + s = GlobalName(f, ref tp); + if (s != null) { + if (tp == null) + tp = GuessType(f.GetConstant()); + var val = WrapForUse(f.GetConstant(), tp); + skolems.Add(new VariableNode(state, s, val, tp)); + } + } + + return skolems; + } + + private Model.Element GuessPtrTo(Model.Element tp) + { + var p = f_ptr_to.TryEval(tp); + if (p != null) return p; + p = f_spec_ptr_to.TryEval(tp); + if (p != null) return p; + var nm = model.MkFunc("*ptrto_" + TypeName(tp), 0).GetConstant(); + f_ptr_to.AddApp(nm, tp); + return f_ptr_to.TryEval(tp); + } + + private Model.Element PtrTo(Model.Element tp, Model.Func f_ptr_to) + { + var p = f_ptr_to.TryEval(tp); + if (p != null) return p; + var nm = model.MkFunc("*" + f_ptr_to.Name + "_" + TypeName(tp), 0).GetConstant(); + f_ptr_to.AddApp(nm, tp); + return f_ptr_to.TryEval(tp); + } + + private bool IsArrayField(Model.Element ptr) + { + return ptr != null && f_idx.TryEval(ptr, model.TryMkElement("0")) != null; + } + + public IEnumerable GetExpansion(StateNode state, Model.Element elt, Model.Element tp) + { + List result = new List(); + Model.FuncTuple tpl; + + if (elt == null) return result; + + var kind = GetKind(tp, out tpl); + if (kind == DataKind.PhysPtr || kind == DataKind.SpecPtr || kind == DataKind.Object) { + var heap = state.State.TryGet("$s"); + if (heap != null) + heap = f_heap.TryEval(heap); + var addresses = new HashSet(); + + if (heap != null) { + var basePtr = f_base.TryEval(elt); + foreach (var fld in f_select_field.AppsWithArg(0, heap)) { + var val = f_select_value.TryEval(fld.Result, elt); + if (val != null) { + var field = fld.Args[1]; + if (!IsConstantField(field) && viewOpts.ViewLevel <= 2) + continue; + var addr = f_dot.TryEval(elt, field); + if (addr != null) addresses.Add(addr); + var node = ComputeUnionActiveOption(state, elt, val, field); + if (node != null) + result.Add(node); + else + BuildFieldNode(result, state, addr, field, val, addr); + } + } + //result.Sort(CompareFields); + } + + { + foreach (var app in f_idx.AppsWithArg(0, elt)) { + var addr = app.Result; + Model.Element val = null, atp = tp; + + addresses.Add(addr); + + foreach (var papp in f_dot.AppsWithResult(addr)) { + var tmp = f_select_value.OptEval(f_select_field.OptEval(heap, papp.Args[1]), papp.Args[0]); + if (tmp != null) { + val = tmp; + var tt = f_field_type.TryEval(papp.Args[1]); + if (tt != null) atp = tt; + } + } + + if (val != null) + val = WrapForUse(val, atp); + result.Add(new MapletNode(state, new EdgeName(this, "[%0]", app.Args[1]), val, atp) { Category = NodeCategory.Maplet }); + if (addr != null) + result.Add(new MapletNode(state, new EdgeName(this, "&[%0]", app.Args[1]), addr, GuessPtrTo(atp)) { Category = NodeCategory.Maplet }); + } + } + + foreach (var ptr in f_dot.AppsWithArg(0, elt)) { + if (addresses.Contains(ptr.Result)) continue; + var fld = ptr.Args[1]; + var idx = f_field_arr_index.TryEval(fld); + if (idx != null) { + var xtp = f_field_type.TryEval(fld); + result.Add(new MapletNode(state, new EdgeName(this, "&[%0] of %1", idx, f_field_arr_size.TryEval(fld)), ptr.Result, GuessPtrTo(xtp)) { Category = NodeCategory.Maplet }); + } + if (!IsConstantField(ptr.Args[1])) continue; + BuildFieldNode(result, state, ptr.Result, ptr.Args[1], null, ptr.Result); + } + + AddSpecialField(state, elt, result, "\\closed", f_closed); + AddSpecialField(state, elt, result, "\\owner", f_owners); + AddSpecialField(state, elt, result, "\\root", f_roots); + AddSpecialField(state, elt, result, "\\timestamp", f_timestamps); + AddPointerFunction(state, elt, result, "\\embedding", f_prim_emb, tp_object); + AddPointerFunction(state, elt, result, "\\addr", f_addr, tp_mathint); + + if (viewOpts.ViewLevel >= 1) { + AddPtrType(state, elt, result); + AddCasts(state, elt, result); + var sets = new SetsNode(state, elt); + if (!sets.IsEmpty) + result.Add(sets); + } + + } else if (kind == DataKind.Map) { + var elTp = tpl.Args[1]; + foreach (var sel in model.Functions) + if (sel.Arity == 2 && sel.Name.StartsWith("$select.$map_t")) { + foreach (var app in sel.AppsWithArg(0, elt)) { + var val = WrapForUse(app.Result, elTp); + var edgname = new EdgeName(this, "[%0]", app.Args[1]); + result.Add(new MapletNode(state, edgname, val, elTp) { Category = NodeCategory.Maplet }); + } + } + } else if (kind == DataKind.Ptrset) { + foreach (var sel in f_select_bool.AppsWithArg(0, elt)) { + var edgname = new EdgeName(this, "[%0]", sel.Args[1]); + result.Add(new MapletNode(state, edgname, sel.Result, tp_bool) { Category = NodeCategory.Maplet }); + } + } else if (kind == DataKind.Flat) { + foreach (var tupl in elt.References) { + if (tupl.Args.Length == 1 && tupl.Args[0] == elt) { + var fname = tupl.Func.Name; + var idx = fname.LastIndexOf('.'); + if (fname.StartsWith("RF#") && idx > 0) { + fname = fname.Substring(idx + 1); + } else if (fname.StartsWith("DP#p")) { + fname = fname.Substring(4); + idx = fname.IndexOf('#'); + if (idx > 0) + fname = fname.Substring(idx + 1) + "#" + fname.Substring(0, idx); + } else { + fname = null; + } + + if (fname != null) + result.Add(new FieldNode(state, new EdgeName(fname), tupl.Result, GuessType(tupl.Result)) { Category = NodeCategory.SpecField }); + } + } + } + + if (!(elt is Model.Boolean)) { + var curState = state.State.TryGet("$s"); + + foreach (var tupl in elt.References) { + { + var seenSelf = false; + var seenState = false; + var seenThisState = false; + var args = tupl.Args; + for (int i = 0; i < args.Length; ++i) { + if (args[i] == elt) seenSelf = true; + if (IsThisState(curState, args[i])) seenThisState = true; + else if (IsSomeState(args[i])) seenState = true; + } + if (!seenSelf) continue; // not looking for aliases (maybe we should?) + if (seenState && !seenThisState) continue; + } + + var argsFmt = new StringBuilder(); + var name = tupl.Func.Name; + + var score = FunctionScore(name); + if (score >= viewOpts.ViewLevel) + continue; + + var retTp = GuessType(tupl.Result); + var retVal = tupl.Result; + + var cat = NodeCategory.MethodologyProperty; + if (name.StartsWith("F#")) { + name = name.Substring(2); + cat = NodeCategory.UserFunction; + } + + if (name.StartsWith("DF#")) { + name = name.Substring(3); + cat = NodeCategory.UserFunction; + } + + if (name.StartsWith("$eq.$")) + name = "EQ"; + + { + Model.Element sktp = null; + var sk = SkolemName(tupl.Func, ref sktp); + if (sk != null) { + name = sk; + if (sktp != null) + retVal = WrapForUse(tupl.Result, sktp); + cat = NodeCategory.Maplet; + } + } + + { + argsFmt.Append(name).Append("("); + var args = new List(); + foreach (var a in tupl.Args) { + if (IsThisState(curState, a)) + argsFmt.Append("\\now, "); + else if (a == elt) + argsFmt.Append(selfMarker + ", "); + else { + argsFmt.AppendFormat("%{0}, ", args.Count); + args.Add(a); + } + } + argsFmt.Length -= 2; + argsFmt.Append(")"); + var edgeName = new EdgeName(this, argsFmt.ToString(), args.ToArray()); + result.Add(new MapletNode(state, edgeName, retVal, retTp) { ViewLevel = score, Category = cat }); + } + + } + } + + return result; + } + + private FieldNode ComputeUnionActiveOption(StateNode state, Model.Element elt, Model.Element val, Model.Element field) + { + if (f_active_option.AppsWithResult(field).FirstOrDefault() != null) { + var activeOpt = f_dot.OptEval(elt, f_int_to_field.OptEval(val)); + if (activeOpt != null) { + var nm = ConstantFieldName(field); + var fieldNode = new FieldNode(state, new EdgeName(nm), activeOpt, GuessType(activeOpt)) { Category = NodeCategory.MethodologyProperty }; + return fieldNode; + } + } + return null; + } + + private void AddCasts(StateNode state, Model.Element elt, List result) + { + foreach (var app in f_phys_ptr_cast.AppsWithArg(0, elt)) { + if (app.Result != elt) + result.Add(new MapletNode(state, new EdgeName(this, "(" + TypeName(app.Args[1]) + "*)..."), app.Result, PtrTo(app.Args[1], f_ptr_to))); + } + foreach (var app in f_spec_ptr_cast.AppsWithArg(0, elt)) { + if (app.Result != elt) + result.Add(new MapletNode(state, new EdgeName(this, "(" + TypeName(app.Args[1]) + "^)..."), app.Result, PtrTo(app.Args[1], f_spec_ptr_to))); + } + var addr = f_addr.TryEval(elt); + if (addr != null) { + foreach (var app in f_blob_type.Apps) { + var blob = f_address_root.TryEval(addr, app.Result); + if (blob != null) { + result.Add(new MapletNode(state, new EdgeName(this, TypeName(app.Result) + "..."), blob, app.Result)); + } + } + } + } + + private void BuildFieldNode(List result, StateNode state, Model.Element ptr, Model.Element field, Model.Element val, Model.Element addr) + { + var ftp = f_field_type.TryEval(field); + if (val != null) + val = WrapForUse(val, ftp); + + if (IsArrayField(ptr)) { + val = addr; + addr = null; + ftp = GuessPtrTo(ftp); + } + + var nm = ConstantFieldName(field); + var edgname = nm == null ? field.ToString() : nm; + + var cat = NodeCategory.PhysField; + if (f_is_ghost_field.IsTrue(field)) + cat = NodeCategory.SpecField; + if (nm != null && nm.Contains("<")) + cat = NodeCategory.MethodologyProperty; + + var fieldNode = new FieldNode(state, new EdgeName(edgname), val, ftp) { Category = cat}; + result.Add(fieldNode); + + if (addr != null) { + result.Add(new FieldNode(state, new EdgeName("&" + edgname), addr, GuessPtrTo(ftp)) { Category = cat }); + } + } + + public override IEnumerable States + { + get + { + return states; + } + } + + private int DataTypeToString(StringBuilder sb, int level, Model.Element elt) + { + Model.FuncTuple ctor = null; + int len = 1; + string dataTypeType = null; + foreach (var app in elt.References) { + var n = app.Func.Name; + if (app.Result == elt && n.StartsWith("DF#")) { + ctor = app; + } + var tmp = DataTypeName(elt, app); + if (tmp != null) dataTypeType = tmp; + } + + if (dataTypeType != null) { + if (ctor != null) + sb.Append(ctor.Func.Name.Substring(3)); + else + sb.Append(DataTypeShortName(elt, dataTypeType)); + if (ctor != null && ctor.Args.Length > 0) { + if (level <= 0) sb.Append("(...)"); + else { + sb.Append("("); + for (int i = 0; i < ctor.Args.Length; ++i) { + if (i != 0) sb.Append(", "); + len += DataTypeToString(sb, level - 1, ctor.Args[i]); + } + sb.Append(")"); + } + } + } else { + sb.Append(CanonicalName(elt)); + } + return len; + } + + private string DataTypeShortName(Model.Element elt, string tp) + { + var baseName = tp; + + var hd = model.MkFunc("DGH#" + tp, 1).TryEval(elt); + if (hd != null) { + foreach (var nm in hd.References) { + if (nm.Func.Arity == 0 && nm.Func.Name.StartsWith("DH#")) + baseName = nm.Func.Name.Substring(3); + } + } + + return baseName; + } + + private string CanonicalBaseNameCore(string name, Model.Element elt, bool doDatatypes, ref NameSeqSuffix suff) + { + var vm = this; + + if (name.Contains("[") || name.Contains("'")) + name = ""; + + if (name != "") + return name; + + var isNull = false; + foreach (var tpl in elt.References) { + var fn = tpl.Func; + if (fn.Name.StartsWith("$select.$map_t") && fn.Arity == 2 && tpl.Args[0] == elt) + return "map"; + if (fn.Name.StartsWith("$int_to_map_t") && tpl.Result == elt) + return "map"; + + if (fn.Arity >= 1 && tpl.Args[0] == elt) { + if (fn == f_select_bool) + return "ptrset"; + } + + if (tpl.Result == elt) + if (fn == f_int_to_version) + return "version"; + + if (fn == f_is_null && tpl.Result == model.True) + isNull = true; + + var dtpName = DataTypeName(elt, tpl); + if (dtpName != null) { + var sb = new StringBuilder(); + string prev = null; + datatypeLongName[elt] = "*SELF*"; // in case we recurse (but this shouldn't happen) + for (int lev = 0; lev < 10; lev++) { + sb.Length = 0; + var len = DataTypeToString(sb, lev, elt); + if (prev == null || len <= maxDatatypeNameLength) + prev = sb.ToString(); + } + + datatypeLongName[elt] = prev; + suff = NameSeqSuffix.WhenNonZero; + return prev; + } + } + + var fld = vm.f_field.TryEval(elt); + if (fld != null) { + var tp = vm.f_field_type.TryEval(fld); + if (tp != null) { + var n = vm.TryTypeName(tp); + if (n != null) { + if (isNull) + return "(" + n + "*)NULL"; + return n; + } + } + } + + return ""; + } + + protected override string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff) + { + var lit = this.LiteralName(elt); + if (lit != null) { + suff = NameSeqSuffix.None; + return lit; + } + if (datatypeLongName.TryGetValue(elt, out lit)) { + suff = NameSeqSuffix.WhenNonZero; + return lit; + } + + var name = base.CanonicalBaseName(elt, out suff); + name = CanonicalBaseNameCore(name, elt, true, ref suff); + + return name; + } + + public override string PathName(IEnumerable path) + { + var sb = new StringBuilder(); + foreach (var d in path) { + var name = d.Name; + if (name == "") continue; // can that happen? + if (name.Contains("(") && name.Contains(selfMarker)) { + var repl = name.Replace(selfMarker, sb.ToString()); + sb.Length = 0; + sb.Append(repl); + } else { + if (sb.Length > 0 && name[0] != '[') + sb.Append("->"); + sb.Append(d.Name); + } + } + + return sb.ToString(); + } + } + + class StateNode : NamedState + { + internal VccModel vm; + internal List vars; + internal List commons; + internal int index; + internal string capturedStateName; + + public StateNode(VccModel parent, Model.CapturedState s) + : base(s, parent) + { + this.capturedStateName = s.Name; + this.vm = parent; + } + + internal void SetupVars() + { + if (vars != null) return; + vars = new List(); + + var names = Util.Empty(); + + if (vm.states.Count > 0) { + var prev = vm.states.Last(); + names = prev.vars.Map(v => v.realName); + } + + names = names.Concat(state.Variables).Distinct(); + + var curVars = state.Variables.ToDictionary(x => x); + foreach (var v in names) { + var localName = vm.GetUserVariableName(v); + if (localName != null) { + var tp = vm.LocalType(v); + var val = state.TryGet(v); + val = vm.WrapForUse(val, tp); + var vn = new VariableNode(this, v, val, tp) { ShortName = localName }; + vn.updatedHere = vm.states.Count > 0 && curVars.ContainsKey(v); + if (curVars.ContainsKey(v)) + vm.RegisterLocalValue(vn.Name, val); + vars.Add(vn); + } + } + + vm.Flush(vars); + + commons = new List(); + commons.AddRange(vm.CommonNodes(this)); + } + + public override IEnumerable Nodes + { + get { + return vars.Concat(commons); + } + } + + public override string CapturedStateName + { + get + { + return this.capturedStateName; + } + } + } + + class ElementNode : DisplayNode + { + protected StateNode stateNode; + protected Model.Element tp; + protected VccModel vm { get { return stateNode.vm; } } + + public ElementNode(StateNode st, EdgeName name, Model.Element elt, Model.Element tp) + : base(st.vm, name, elt) + { + this.stateNode = st; + this.tp = tp; + } + + protected override void ComputeChildren() + { + children.AddRange(vm.GetExpansion(stateNode, element, tp)); + } + + public override string ToolTip + { + get + { + var sb = new StringBuilder(); + if (tp != null) + sb.AppendFormat("Type: {0}\n", vm.TypeName(tp)); + var i = element as Model.Integer; + if (i != null) { + var n = System.Numerics.BigInteger.Parse(i.Numeral); + sb.AppendFormat("Value: {0} (0x{1:x})\n", n, n); + } else if (element != null) { + sb.AppendFormat("Value: {0}\n", element); + } + return sb.ToString(); + } + } + } + + class SetsNode : ElementNode + { + List refs = new List(); + + public SetsNode(StateNode par, Model.Element elt) + : base(par, new EdgeName("\\in ..."), null, null) + { + children = new List(); + foreach (var app in vm.f_select_bool.AppsWithArg(1, elt)) { + children.Add( + new MapletNode(par, new EdgeName(vm, VccModel.selfMarker + " \\in %0", app.Args[0]), app.Result, vm.tp_bool) { Category = NodeCategory.MethodologyProperty }); + refs.Add(app.Args[0]); + } + Category = NodeCategory.MethodologyProperty; + } + + public override IEnumerable References + { + get + { + return refs; + } + } + + public bool IsEmpty { get { return children.Count == 0; } } + } + + + class FieldNode : ElementNode + { + public FieldNode(StateNode par, EdgeName realName, Model.Element elt, Model.Element tp) + : base(par, realName, elt, tp) + { + } + } + + class MapletNode : ElementNode + { + public MapletNode(StateNode par, EdgeName realName, Model.Element elt, Model.Element tp) + : base(par, realName, elt, tp) + { + } + } + + class VariableNode : ElementNode + { + public bool updatedHere; + public string realName; + + public VariableNode(StateNode par, string realName, Model.Element elt, Model.Element tp) + : base(par, new EdgeName(realName), elt, tp) + { + this.realName = realName; + } + + public override string ShortName + { + set { this.name = new EdgeName(value); } + get { return this.name.ToString(); } + } + } +} -- cgit v1.2.3