diff --git a/CUERipper/frmCUERipper.Designer.cs b/CUERipper/frmCUERipper.Designer.cs index 43f89d0..9e6dff2 100644 --- a/CUERipper/frmCUERipper.Designer.cs +++ b/CUERipper/frmCUERipper.Designer.cs @@ -134,6 +134,7 @@ namespace CUERipper // // statusStrip1 // + this.statusStrip1.ImageScalingSize = new System.Drawing.Size(24, 24); this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripStatusLabel1, this.toolStripStatusLabelMusicBrainz, diff --git a/CUERipper/frmCUERipper.cs b/CUERipper/frmCUERipper.cs index 1d8a26b..92ecbdd 100644 --- a/CUERipper/frmCUERipper.cs +++ b/CUERipper/frmCUERipper.cs @@ -998,7 +998,7 @@ namespace CUERipper } } - private void resetEncoderModes(CUEToolsUDC encoder) + private void resetEncoderModes(AudioEncoderSettingsViewModel encoder) { encoder.settings.PCM = AudioPCMConfig.RedBook; buttonEncoderSettings.Enabled = encoder.settings.HasBrowsableAttributes(); @@ -1034,7 +1034,7 @@ namespace CUERipper { if (SelectedOutputAudioFormat == null) return; - CUEToolsUDC encoder = bnComboBoxEncoder.SelectedItem as CUEToolsUDC; + var encoder = bnComboBoxEncoder.SelectedItem as AudioEncoderSettingsViewModel; if (encoder == null) return; if (SelectedOutputAudioType == AudioEncoderType.Lossless) @@ -1046,7 +1046,7 @@ namespace CUERipper private void trackBarEncoderMode_Scroll(object sender, EventArgs e) { - CUEToolsUDC encoder = bnComboBoxEncoder.SelectedItem as CUEToolsUDC; + var encoder = bnComboBoxEncoder.SelectedItem as AudioEncoderSettingsViewModel; string[] modes = encoder.SupportedModes; encoder.settings.EncoderMode = modes[trackBarEncoderMode.Value]; labelEncoderMode.Text = encoder.settings.EncoderMode; @@ -1129,17 +1129,17 @@ namespace CUERipper data.Encoders.RaiseListChangedEvents = false; - foreach (CUEToolsUDC encoder in _config.encoders) - if (encoder.extension == SelectedOutputAudioFmt.extension) + foreach (var encoder in _config.encoders) + if (encoder.Extension == SelectedOutputAudioFmt.extension) { - if (SelectedOutputAudioType == AudioEncoderType.Lossless && !encoder.lossless) + if (SelectedOutputAudioType == AudioEncoderType.Lossless && !encoder.Lossless) continue; - if (SelectedOutputAudioType == AudioEncoderType.Lossy && encoder.lossless) + if (SelectedOutputAudioType == AudioEncoderType.Lossy && encoder.Lossless) continue; data.Encoders.Add(encoder); } - CUEToolsUDC select = SelectedOutputAudioType == AudioEncoderType.Lossless ? SelectedOutputAudioFmt.encoderLossless + var select = SelectedOutputAudioType == AudioEncoderType.Lossless ? SelectedOutputAudioFmt.encoderLossless : SelectedOutputAudioFmt.encoderLossy; data.Encoders.RaiseListChangedEvents = true; data.Encoders.ResetBindings(); @@ -1569,7 +1569,7 @@ namespace CUERipper private void buttonEncoderSettings_Click(object sender, EventArgs e) { - CUEToolsUDC encoder = bnComboBoxEncoder.SelectedItem as CUEToolsUDC; + var encoder = bnComboBoxEncoder.SelectedItem as AudioEncoderSettingsViewModel; if (encoder == null) return; var form = new Options(encoder.settings); @@ -1770,7 +1770,7 @@ namespace CUERipper private BindingList releases = new BindingList(); private BindingList drives = new BindingList(); private BindingList formats = new BindingList(); - private BindingList encoders = new BindingList(); + private BindingList encoders = new BindingList(); public CUEMetadataEntry selectedRelease { get; set; } public bool metadataMode { get; set; } @@ -1816,7 +1816,7 @@ namespace CUERipper } } - public BindingList Encoders + public BindingList Encoders { get { diff --git a/CUERipper/frmCUERipper.resx b/CUERipper/frmCUERipper.resx index eb3593a..770c109 100644 --- a/CUERipper/frmCUERipper.resx +++ b/CUERipper/frmCUERipper.resx @@ -112,31 +112,31 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 222, 95 - + - 487, 20 + 737, 30 MiddleLeft - 20, 20 + 28, 30 - 20, 20 + 28, 30 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAMISURBVDhPbZINT5pnFIb5gduyrOmyLTOzpMWGttMxN9r6 + YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAMISURBVDhPbZINT5pnFIb5gduyrOmyLTOzpMWGttMxN9r6 AVIRnFpWJAWpa/3o1BJbO9cpXRCrqNTKEEOZ1qLoBBSJCIh8vcC1dy7LQuKd3DnJc3Jf50nOkZwnjweM /bs0mw65Zd2nayKOI1Dmn55A6ayeq6mhHE3yLPXfCshuQ40O6u5XUA5VUD+t0DtVxOHNVAPKFM8e3vwG 6toUjVIxVA9fKvPIOkBhBs1Ihc5nFSwvSzxZEPDtFKohJu0Gqhv7YjjD5Zo8tXUVrigqfH8H2voEjDaw @@ -156,30 +156,34 @@ White - 20, 20 + 28, 30 Album found in AccurateRip database. - 100, 19 + 150, 29 Read progress - 0, 20 + 0, 30 toolStripStatusAr - 0, 424 + 0, 656 + + + + 2, 0, 21, 0 - 664, 25 + 996, 35 - + 12 @@ -190,7 +194,7 @@ statusStrip1 - System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -234,20 +238,22 @@ 70 - Fill 0, 0 + + 4, 5, 4, 5 + - 656, 158 + 984, 248 7 - + 357, 17 @@ -257,7 +263,7 @@ listTracks - System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel4 @@ -272,10 +278,13 @@ NoControl - 3, 3 + 4, 5 + + + 4, 5, 4, 5 - 170, 33 + 255, 51 12 @@ -287,7 +296,7 @@ buttonGo - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel1 @@ -302,10 +311,13 @@ NoControl - 88, 3 + 132, 5 + + + 4, 5, 4, 5 - 85, 33 + 128, 51 13 @@ -320,7 +332,7 @@ buttonAbort - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel1 @@ -335,10 +347,13 @@ NoControl - 3, 3 + 4, 5 + + + 4, 5, 4, 5 - 79, 33 + 118, 51 20 @@ -353,7 +368,7 @@ buttonPause - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel1 @@ -362,10 +377,13 @@ 1 - 271, 20 + 406, 31 + + + 4, 5, 4, 5 - 54, 20 + 81, 26 5 @@ -377,7 +395,7 @@ numericWriteOffset - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBoxSettings @@ -392,10 +410,13 @@ NoControl - 203, 22 + 304, 34 + + + 4, 0, 4, 0 - 62, 13 + 93, 20 23 @@ -407,7 +428,7 @@ lblWriteOffset - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBoxSettings @@ -422,10 +443,13 @@ NoControl - 83, 46 + 124, 71 + + + 4, 5, 4, 5 - 21, 21 + 32, 32 35 @@ -434,7 +458,7 @@ buttonEncoderSettings - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBoxSettings @@ -446,10 +470,13 @@ True - 212, 48 + 318, 74 + + + 4, 5, 4, 5 - 83, 17 + 121, 24 34 @@ -461,7 +488,7 @@ checkBoxTestAndCopy - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBoxSettings @@ -469,20 +496,23 @@ 1 - + 17, 95 - + 210, 56 - 6, 19 + 9, 29 + + + 4, 5, 4, 5 - 40, 0 + 58, 0 - 70, 21 + 103, 27 0 @@ -502,17 +532,20 @@ 2 - + 1217, 56 - 105, 46 + 158, 71 + + + 4, 5, 4, 5 - 40, 0 + 58, 0 - 90, 21 + 133, 27 3 @@ -536,10 +569,13 @@ NoControl - 209, 103 + 314, 158 + + + 4, 0, 4, 0 - 109, 18 + 164, 28 33 @@ -551,7 +587,7 @@ labelSecureMode - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBoxSettings @@ -559,14 +595,17 @@ 4 - + 1045, 56 - 83, 19 + 124, 29 + + + 4, 5, 4, 5 - 112, 21 + 166, 27 2 @@ -599,13 +638,13 @@ NoControl - 12, 106 + 18, 163 0, 0, 0, 0 - 25, 13 + 37, 21 30 @@ -617,7 +656,7 @@ labelEncoderMinMode - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBoxSettings @@ -625,17 +664,20 @@ 6 - + 526, 56 - 6, 46 + 9, 71 + + + 4, 5, 4, 5 - 40, 0 + 58, 0 - 70, 21 + 103, 27 1 @@ -665,13 +707,13 @@ NoControl - 166, 106 + 249, 163 0, 0, 0, 0 - 29, 13 + 44, 20 32 @@ -686,7 +728,7 @@ labelEncoderMaxMode - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBoxSettings @@ -701,13 +743,13 @@ NoControl - 6, 106 + 9, 163 0, 0, 0, 0 - 189, 15 + 284, 23 31 @@ -722,7 +764,7 @@ labelEncoderMode - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBoxSettings @@ -734,13 +776,13 @@ NoControl - 6, 76 + 9, 117 0, 0, 0, 0 - 189, 45 + 284, 69 4 @@ -749,7 +791,7 @@ trackBarEncoderMode - System.Windows.Forms.TrackBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TrackBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBoxSettings @@ -761,10 +803,13 @@ NoControl - 198, 76 + 297, 117 + + + 4, 5, 4, 5 - 127, 45 + 190, 69 7 @@ -773,7 +818,7 @@ trackBarSecureMode - System.Windows.Forms.TrackBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TrackBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBoxSettings @@ -787,8 +832,14 @@ 0, 0 + + 4, 5, 4, 5 + + + 4, 5, 4, 5 + - 339, 136 + 508, 209 11 @@ -797,7 +848,7 @@ groupBoxSettings - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel2 @@ -805,18 +856,18 @@ 2 - + 882, 56 - + 207, 17 - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABy - CQAAAk1TRnQBSQFMAgEBBAEAAUQBAwFEAQMBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CQAAAk1TRnQBSQFMAgEBBAEAAUwBAwFMAQMBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -865,23 +916,26 @@ toolStripMenuItem1 - + 960, 17 - + 624, 17 - 3, 91 + 4, 140 - + + 4, 5, 4, 5 + + 454, 17 - + 789, 17 - 170, 23 + 255, 35 30 @@ -890,7 +944,7 @@ progressBarErrors - ProgressODoom.ProgressBarEx, ProgressODoom, Version=1.0.4803.25982, Culture=neutral, PublicKeyToken=null + ProgressODoom.ProgressBarEx, ProgressODoom, Version=1.0.6651.26127, Culture=neutral, PublicKeyToken=null panel1 @@ -899,13 +953,16 @@ 4 - 3, 64 + 4, 98 - + + 4, 5, 4, 5 + + 356, 56 - 170, 23 + 255, 35 31 @@ -917,7 +974,7 @@ progressBarCD - ProgressODoom.ProgressBarEx, ProgressODoom, Version=1.0.4803.25982, Culture=neutral, PublicKeyToken=null + ProgressODoom.ProgressBarEx, ProgressODoom, Version=1.0.6651.26127, Culture=neutral, PublicKeyToken=null panel1 @@ -929,10 +986,13 @@ Fill - 0, 4 + 0, 6 + + + 4, 5, 4, 5 - 656, 20 + 984, 26 10 @@ -944,7 +1004,7 @@ txtOutputPath - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel5 @@ -955,217 +1015,219 @@ Top, Left, Right - + 708, 56 - + 17, 56 - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABY - LAAAAk1TRnQBSQFMAgEBCgEAASgBAAEoAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABMAMAAQEBAAEgBgABMCoAAWkBcQF5Af8BaQFxAXkB/wFpAXEBeQH/AWkBcQF5Af8cAAFfAckC/wE8 - AYMBrAH/ATwBgwGsAf8BXwHJAv8BXwHJAv8BXwHJAv8BXwHJAv8BXwHJAv8BXwHJAv8BXwHJAv8BXwHJ - Av8BXwHJAv8BXwHJAv8BXwHJAv+UAAFpAXEBeQH/A0AB/wNAAf8BJwI3Af8DDgH/Aw4B/wMAAf8DDgH/ - EAABPAGDAawB/wEAAgQB/wEqASgBJgH/AUcBSgFFAf8BAAIEAf8BIgEUARgB/wFfAckC/wFfAckC/wFf - AckC/wFfAckC/wFfAckC/wFfAckC/wFfAckC/wFfAckC/wFfAckC/wFfAckC/4wAA0AB/wG9AsYB/wFp - AXEBeQH/A0AB/wEfAicB/wMOAf8DDgH/AwAB/wMAAf8DDgH/DQACBAH/AcsB0QHKAf8B/AP/AfwD/wH8 - A/8BRwFKAUUB/wEiARQBGAH/AV8ByQL/AV8ByQL/AV8ByQL/AV8ByQL/AV8ByQL/AV8ByQL/AV8ByQL/ - AV8ByQL/AV8ByQL/iAABHwInAf8DQAH/AWkBcQF5Af8BvQLGAf8BaQFxAXkB/wEfAicB/wMOAf8DDgH/ - AwAB/wMAAf8DAAH/Aw4B/wkAAgQB/wHLAdEBygH/AfwD/wH8A/8B/AP/AfwD/wEAAgQB/wFfAckC/wFf - AckC/wFfAckC/wFfAckC/wFfAckC/wFfAckC/wFfAckC/wFfAckC/wFfAckC/4QAAR8CJwH/AScCNwH/ - A0AB/wNAAf8BaQFxAXkB/wFpAXEBeQH/AScCNwH/AR8CJwH/Aw4B/wMAAf8DAAH/AwAB/wMAAf8BHwIn - Af8EAAE8AYMBrAH/ASIBFAEYAf8BdQJsAf8BvAK9Af8BvAK9Af8BywHRAcoB/wEAAgQB/wEqASgBJgH/ - AQACBAH/AQACBAH/AQACBAH/AQACBAH/ASoBKAEmAf8BXwHJAv8BXwHJAv8BXwHJAv+EAAMOAf8BHwIn - Af8BHwInAf8BJwI3Af8BJwI3Af8DDgH/ARYBYQFpAf8BFgFhAWkB/wMGAf8DBgH/AwAB/wMAAf8DAAH/ - AwAB/wQAAV8ByQL/ATwBgwGsAf8BIgEUARgB/wEAAgQB/wEAAgQB/wH8A/8BAAIEAf8BIgEUARgB/wGk - AakBoQH/AfwD/wH8A/8BkwGeAZwB/wEqASgBJgH/ASoBKAEmAf8BXwHJAv8BXwHJAv+AAAFpAXEBeQH/ - AwAB/wMOAf8DDgH/Aw4B/wMOAf8BAAHGAdYB/wEAAcYB1gH/AQABxgHWAf8BAAHGAdYB/wMGAf8DAAH/ - AwAB/wMAAf8DAAH/AWkBcQF5Af8BXwHJAv8BXwHJAv8BXwHJAv8BXwHJAv8BAAIEAf8B/AP/AQACBAH/ - ASoBKAEmAf8B/AP/AfwD/wH8A/8B/AP/AcsB0QHKAf8BAAIEAf8BXwHJAv8BXwHJAv+AAAFpAXEBeQH/ - AwAB/wMAAf8DAAH/AQACBgH/ARYBYQFpAf8BAAHGAdYB/wEAAcYB1gH/AQABxgHWAf8BAAHGAdYB/wEW - AWEBaQH/AwAB/wMAAf8DAAH/AwAB/wFpAXEBeQH/Aa4BagFxAf8BrgFqAXEB/wGuAWoBcQH/Aa4BagFx - Af8BAAIEAf8B/AP/AQACBAH/AQACBAH/AUcBSgFFAf8BywHRAcoB/wH8A/8B/AP/AfwD/wEAAgQB/wGu - AWoBcQH/Aa4BagFxAf+AAAFpAXEBeQH/AwAB/wMAAf8DAAH/AwAB/wEWAWEBaQH/AQABxgHWAf8BAAHG - AdYB/wEAAcYB1gH/AQABxgHWAf8BFgFhAWkB/wMOAf8DDgH/Aw4B/wMOAf8BaQFxAXkB/wGuAWoBcQH/ - Aa4BagFxAf8BrgFqAXEB/wGuAWoBcQH/AQACBAH/AfwD/wEAAgQB/wFiAUgBSwH/ASIBFAEYAf8BAAIE - Af8BAAIEAf8BAAIEAf8B/AP/AQACBAH/Aa4BagFxAf8BrgFqAXEB/4AAAWkBcQF5Af8DAAH/AwAB/wMA - Af8DAAH/Aw4B/wEAAcYB1gH/AQABxgHWAf8BAAHGAdYB/wEAAcYB1gH/Aw4B/wEfAicB/wEfAicB/wMO - Af8DDgH/AWkBcQF5Af8BrgFqAXEB/wGuAWoBcQH/Aa4BagFxAf8BrgFqAXEB/wEAAgQB/wH8A/8BIgEU - ARgB/wEAAgQB/wEqASgBJgH/AWIBSAFLAf8BYgFIAUsB/wEAAgQB/wH8A/8BAAIEAf8BrgFqAXEB/wGu - AWoBcQH/hAADDgH/AwAB/wMAAf8DAAH/AwAB/wMOAf8BFgFhAWkB/wEWAWEBaQH/Aw4B/wNAAf8DQAH/ - AR8CJwH/AR8CJwH/AR8CJwH/BAABrgFqAXEB/wGuAWoBcQH/Aa4BagFxAf8BrgFqAXEB/wEAAgQB/wH8 - A/8B/AP/AZMBngGcAf8BKgEoASYB/wEAAgQB/wEiARQBGAH/AQACBAH/AfwD/wEAAgQB/wGuAWoBcQH/ - Aa4BagFxAf+EAANAAf8DAAH/AwAB/wMAAf8DDgH/Aw4B/wEfAicB/wNAAf8BaQFxAXkB/wFpAq0B/wNA - Af8DQAH/AR8CJwH/A0AB/wQAAa4BagFxAf8BrgFqAXEB/wGuAWoBcQH/Aa4BagFxAf8BAAIEAf8BvAK9 - Af8B/AP/AfwD/wH8A/8BywHRAcoB/wFXAWABXwH/AQACBAH/AfwD/wEAAgQB/wGuAWoBcQH/Aa4BagFx - Af+IAAEfAicB/wMAAf8DAAH/Aw4B/wMOAf8BHwInAf8BJwI3Af8BaQFxAXkB/wG9AsYB/wFpAXEBeQH/ - AScCNwH/A0AB/wgAAa4BagFxAf8BrgFqAXEB/wGuAWoBcQH/Aa4BagFxAf8BKgEoASYB/wFHAUoBRQH/ - AbwCvQH/AfwD/wH8A/8B/AP/AfwD/wH8A/8B/AP/AQACBAH/Aa4BagFxAf8BrgFqAXEB/4wAA0AB/wMA - Af8DDgH/Aw4B/wEfAicB/wEnAjcB/wNAAf8BaQFxAXkB/wFpAXEBeQH/AWkBcQF5Af8MAAGuAWoBcQH/ - Aa4BagFxAf8BrgFqAXEB/wGuAWoBcQH/Aa4BagFxAf8BKgEoASYB/wEAAgQB/wEqASgBJgH/AZMBngGc - Af8B/AP/AfwD/wH8A/8B/AP/AQACBAH/Aa4BagFxAf8BrgFqAXEB/5AAAScCNwH/AScCNwH/Aw4B/wMO - Af8DDgH/AR8CJwH/A0AB/wNAAf8QAAGuAWoBcQH/Aa4BagFxAf8BrgFqAXEB/wGuAWoBcQH/Aa4BagFx - Af8BrgFqAXEB/wGuAWoBcQH/ASoBKAEmAf8BAAIEAf8BIgEUARgB/wF1AmwB/wHLAdEBygH/AfwD/wEA - AgQB/wGuAWoBcQH/Aa4BagFxAf+YAAFpAXEBeQH/AWkBcQF5Af8BaQFxAXkB/wFpAXEBeQH/HAABrgFq - AXEB/wGuAWoBcQH/Aa4BagFxAf8BrgFqAXEB/wGuAWoBcQH/Aa4BagFxAf8BrgFqAXEB/wGuAWoBcQH/ - Aa4BagFxAf8BIgEUARgB/wEAAgQB/wFHAUoBRQH/ASoBKAEmAf8BrgFqAXEB/4gAA8AB/wNyAf8DcgH/ + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAi + LAAAAk1TRnQBSQFMAgEBCgEAATABAAEwAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABMAMAAQEBAAEgBgABMCoAAWgBcAF4Af8BaAFwAXgB/wFoAXABeAH/AWgBcAF4Af8cAAFeAckC/wE7 + AYMBrAH/ATsBgwGsAf8BXgHJAv8BXgHJAv8BXgHJAv8BXgHJAv8BXgHJAv8BXgHJAv8BXgHJAv8BXgHJ + Av8BXgHJAv8BXgHJAv8BXgHJAv+UAAFoAXABeAH/Az8B/wM/Af8BJgI2Af8DDQH/Aw0B/wMAAf8DDQH/ + EAABOwGDAawB/wEAAgMB/wEpAScBJQH/AUYBSQFEAf8BAAIDAf8BIQETARcB/wFeAckC/wFeAckC/wFe + AckC/wFeAckC/wFeAckC/wFeAckC/wFeAckC/wFeAckC/wFeAckC/wFeAckC/4wAAz8B/wG9AsYB/wFo + AXABeAH/Az8B/wEeAiYB/wMNAf8DDQH/AwAB/wMAAf8DDQH/DQACAwH/AcsB0QHKAf8B/AP/AfwD/wH8 + A/8BRgFJAUQB/wEhARMBFwH/AV4ByQL/AV4ByQL/AV4ByQL/AV4ByQL/AV4ByQL/AV4ByQL/AV4ByQL/ + AV4ByQL/AV4ByQL/iAABHgImAf8DPwH/AWgBcAF4Af8BvQLGAf8BaAFwAXgB/wEeAiYB/wMNAf8DDQH/ + AwAB/wMAAf8DAAH/Aw0B/wkAAgMB/wHLAdEBygH/AfwD/wH8A/8B/AP/AfwD/wEAAgMB/wFeAckC/wFe + AckC/wFeAckC/wFeAckC/wFeAckC/wFeAckC/wFeAckC/wFeAckC/wFeAckC/4QAAR4CJgH/ASYCNgH/ + Az8B/wM/Af8BaAFwAXgB/wFoAXABeAH/ASYCNgH/AR4CJgH/Aw0B/wMAAf8DAAH/AwAB/wMAAf8BHgIm + Af8EAAE7AYMBrAH/ASEBEwEXAf8BdAJrAf8BvAK9Af8BvAK9Af8BywHRAcoB/wEAAgMB/wEpAScBJQH/ + AQACAwH/AQACAwH/AQACAwH/AQACAwH/ASkBJwElAf8BXgHJAv8BXgHJAv8BXgHJAv+EAAMNAf8BHgIm + Af8BHgImAf8BJgI2Af8BJgI2Af8DDQH/ARUBYAFoAf8BFQFgAWgB/wMFAf8DBQH/AwAB/wMAAf8DAAH/ + AwAB/wQAAV4ByQL/ATsBgwGsAf8BIQETARcB/wEAAgMB/wEAAgMB/wH8A/8BAAIDAf8BIQETARcB/wGk + AakBoQH/AfwD/wH8A/8BkwGeAZwB/wEpAScBJQH/ASkBJwElAf8BXgHJAv8BXgHJAv+AAAFoAXABeAH/ + AwAB/wMNAf8DDQH/Aw0B/wMNAf8BAAHGAdYB/wEAAcYB1gH/AQABxgHWAf8BAAHGAdYB/wMFAf8DAAH/ + AwAB/wMAAf8DAAH/AWgBcAF4Af8BXgHJAv8BXgHJAv8BXgHJAv8BXgHJAv8BAAIDAf8B/AP/AQACAwH/ + ASkBJwElAf8B/AP/AfwD/wH8A/8B/AP/AcsB0QHKAf8BAAIDAf8BXgHJAv8BXgHJAv+AAAFoAXABeAH/ + AwAB/wMAAf8DAAH/AQACBQH/ARUBYAFoAf8BAAHGAdYB/wEAAcYB1gH/AQABxgHWAf8BAAHGAdYB/wEV + AWABaAH/AwAB/wMAAf8DAAH/AwAB/wFoAXABeAH/Aa4BaQFwAf8BrgFpAXAB/wGuAWkBcAH/Aa4BaQFw + Af8BAAIDAf8B/AP/AQACAwH/AQACAwH/AUYBSQFEAf8BywHRAcoB/wH8A/8B/AP/AfwD/wEAAgMB/wGu + AWkBcAH/Aa4BaQFwAf+AAAFoAXABeAH/AwAB/wMAAf8DAAH/AwAB/wEVAWABaAH/AQABxgHWAf8BAAHG + AdYB/wEAAcYB1gH/AQABxgHWAf8BFQFgAWgB/wMNAf8DDQH/Aw0B/wMNAf8BaAFwAXgB/wGuAWkBcAH/ + Aa4BaQFwAf8BrgFpAXAB/wGuAWkBcAH/AQACAwH/AfwD/wEAAgMB/wFhAUcBSgH/ASEBEwEXAf8BAAID + Af8BAAIDAf8BAAIDAf8B/AP/AQACAwH/Aa4BaQFwAf8BrgFpAXAB/4AAAWgBcAF4Af8DAAH/AwAB/wMA + Af8DAAH/Aw0B/wEAAcYB1gH/AQABxgHWAf8BAAHGAdYB/wEAAcYB1gH/Aw0B/wEeAiYB/wEeAiYB/wMN + Af8DDQH/AWgBcAF4Af8BrgFpAXAB/wGuAWkBcAH/Aa4BaQFwAf8BrgFpAXAB/wEAAgMB/wH8A/8BIQET + ARcB/wEAAgMB/wEpAScBJQH/AWEBRwFKAf8BYQFHAUoB/wEAAgMB/wH8A/8BAAIDAf8BrgFpAXAB/wGu + AWkBcAH/hAADDQH/AwAB/wMAAf8DAAH/AwAB/wMNAf8BFQFgAWgB/wEVAWABaAH/Aw0B/wM/Af8DPwH/ + AR4CJgH/AR4CJgH/AR4CJgH/BAABrgFpAXAB/wGuAWkBcAH/Aa4BaQFwAf8BrgFpAXAB/wEAAgMB/wH8 + A/8B/AP/AZMBngGcAf8BKQEnASUB/wEAAgMB/wEhARMBFwH/AQACAwH/AfwD/wEAAgMB/wGuAWkBcAH/ + Aa4BaQFwAf+EAAM/Af8DAAH/AwAB/wMAAf8DDQH/Aw0B/wEeAiYB/wM/Af8BaAFwAXgB/wFoAq0B/wM/ + Af8DPwH/AR4CJgH/Az8B/wQAAa4BaQFwAf8BrgFpAXAB/wGuAWkBcAH/Aa4BaQFwAf8BAAIDAf8BvAK9 + Af8B/AP/AfwD/wH8A/8BywHRAcoB/wFWAV8BXgH/AQACAwH/AfwD/wEAAgMB/wGuAWkBcAH/Aa4BaQFw + Af+IAAEeAiYB/wMAAf8DAAH/Aw0B/wMNAf8BHgImAf8BJgI2Af8BaAFwAXgB/wG9AsYB/wFoAXABeAH/ + ASYCNgH/Az8B/wgAAa4BaQFwAf8BrgFpAXAB/wGuAWkBcAH/Aa4BaQFwAf8BKQEnASUB/wFGAUkBRAH/ + AbwCvQH/AfwD/wH8A/8B/AP/AfwD/wH8A/8B/AP/AQACAwH/Aa4BaQFwAf8BrgFpAXAB/4wAAz8B/wMA + Af8DDQH/Aw0B/wEeAiYB/wEmAjYB/wM/Af8BaAFwAXgB/wFoAXABeAH/AWgBcAF4Af8MAAGuAWkBcAH/ + Aa4BaQFwAf8BrgFpAXAB/wGuAWkBcAH/Aa4BaQFwAf8BKQEnASUB/wEAAgMB/wEpAScBJQH/AZMBngGc + Af8B/AP/AfwD/wH8A/8B/AP/AQACAwH/Aa4BaQFwAf8BrgFpAXAB/5AAASYCNgH/ASYCNgH/Aw0B/wMN + Af8DDQH/AR4CJgH/Az8B/wM/Af8QAAGuAWkBcAH/Aa4BaQFwAf8BrgFpAXAB/wGuAWkBcAH/Aa4BaQFw + Af8BrgFpAXAB/wGuAWkBcAH/ASkBJwElAf8BAAIDAf8BIQETARcB/wF0AmsB/wHLAdEBygH/AfwD/wEA + AgMB/wGuAWkBcAH/Aa4BaQFwAf+YAAFoAXABeAH/AWgBcAF4Af8BaAFwAXgB/wFoAXABeAH/HAABrgFp + AXAB/wGuAWkBcAH/Aa4BaQFwAf8BrgFpAXAB/wGuAWkBcAH/Aa4BaQFwAf8BrgFpAXAB/wGuAWkBcAH/ + Aa4BaQFwAf8BIQETARcB/wEAAgMB/wFGAUkBRAH/ASkBJwElAf8BrgFpAXAB/4gAA8AB/wNxAf8DcQH/ A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8EAAMLAQ8DFAEbAx0BKQMi - ATIBTAFRAUwBpgFCAWABQQHRAUIBYAFBAdEDPAFmBAADPAFmAUIBYAFBAdEBQgFgAUEB0QFCAWABQQHR - AUIBYAFBAdEBSwFSAUsBqQMjATMQAAEoAicBOwFaAVQBTgGUAYUBcAFbAc4BogF+AVkB6wGiAX4BWQHr - AYUBcAFbAc4BWgFUAU4BlAIAAeIB/wIAAeIB/wwAAaYCjAH/AUkCDgH/AUICBAH/AT4CAAH/AT4CAAH/ - AT4CAAH/AT4CAAH/AT4CAAH/AT4CAAH/AT4CAAH/AT4CAAH/AT4CAAH/AT4CAAH/ATwCAAH/ATgCAAH/ - ARgCAAH/A3IB/wMAAf8DFwH/Ay4B/wMAAf8DEQH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPA - Af8DwAH/A8AB/wMGAQgDCgEOAxABFQMSARkBRQFfAUIBzAEfAdUBDgH/AS4BlwEmAe8BSgFOAUoBmQQA - AUoBTgFKAZkBLgGXASYB7wEfAdUBDgH/AR8B1QEOAf8BHwHVAQ4B/wFCAWYBQQHRAxMBGggAAwoBDQFa - AVQBTwGWAa8BggFVAfoB4QHNAbkB/wHxAeABzgH/AfkB5wHWAf8B+AHmAdQB/wHwAd0BzAH/AeEBzQG5 - Af8CAAHiAf8CAAHiAf8DCgENCAABvwGFAYYB/wGDARIBFAH/AXsBBgEIAf8BdwEAAQEB/wF3AQABAQH/ - A+oB/wPqAf8D6gH/AXcBAAEBAf8D6gH/A+oB/wPqAf8BdwEAAQEB/wFyAgAB/wFtAgAB/wE5AgAB/wMA - Af8DwA3/Ay4B/wMRAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8QAAFGAWIBQgHM - ASIBzQERAf8BQgFfAUEB0QMjATMEAAMjATMBQgFfAUEB0QEfAcwBDgH/AR8BzAEOAf8BHwHMAQ4B/wFF - AWoBQQHRCAADCgENAXMBZQFXAbgB2QG/AaUB/wH+AfIB5AL/AecBzwH/AfwB2wG7Af8B+QHTAbIB/wH2 - AdABrAH/AfQB0QGuAf8B9gHYAbsB/wIAAeIB/wIAAeIB/wFzAWUBVwG4AwoBDQQAAcABggGDAf8BiQET - ARUB/wGDAQcBCQH/AX0BAAEBAf8D9gH/AX0BAAEBAf8BfQEAAQEB/wP2Af8BfQEAAQEB/wP2Af8BfQEA - AQEB/wF9AQABAQH/A/YB/wF4AgAB/wFzAgAB/wE8AgAB/wMAAf8DwBH/AwAB/wPAAf8DwAH/A8AB/wPA - Af8DwAH/A8AB/wPAAf8DwAH/A8AB/wErASwBKwFDAUwBXgFKAbgBTAFeAUoBuAErASwBKwFDAUYBZgFC - AcwBJgHEARUB/wFCAV4BQQHRAzwBZgQAAzwBZgFCAV4BQQHRAR8BwQEOAf8BHwHBAQ4B/wEfAcEBDgH/ - AUUBawFBAdEIAAFaAVQBTwGWAdkBvwGlAv8B+AHrAv8B6wHRAv8B4QHDAf8B/gHbAboB/wH7AdYBsgH/ - AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AcIBggGDAf8BjgEU - ARYB/wGIAQgBCgH/AYQBAAECBf8BhAEAAQIB/wGEAQABAgX/AYQBAAECBf8BhAEAAQIB/wGEAQABAgX/ - AX0BAAEBAf8BdwEAAQEB/wE+AgAB/wNyAf8DEQH/A1oB/wOyAf8DsgH/A8AB/wMAAf8DFwH/AwAB/wMA - Af8DAAH/AwAB/wMXAf8DwAH/A8AB/wPAAf8BTQFcAUsBsgFMAcYBOwH/AUYBoAE5AfMBRgFmAUIBzAE+ - AXIBPAHZASABtwEPAf8BMwGLASoB7wE/AV4BPwHTAUIBWQFCAcwBPwFeAT8B0wEvAYgBKAHvASEBtwEQ - Af8BIAG2AQ8B/wEfAbYBDgH/AUUBawFBAdEEAAMmATgBtgGHAVUB/QL+AfoC/wH5AekC/wHvAdgC/wHn - Ac0C/wHhAcIB/wH8AdwBuwH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/ - AgAB4gH/AcIBggGDAf8BjgEUARYB/wGIAQgBCgH/AYQBAAECAf8BhAEAAQIN/wGEAQABAg3/AYQBAAEC - Af8BfQEAAQEB/wF3AQABAQH/AT4CAAH/A8AB/wNyAf8DEQH/AwAB/wMABf8DAAH/AxEB/wOWCf8DhgH/ - AxcB/wMXAf8DwAH/A8AB/wFGAWkBQgHMAUsBxQE6Af8BQQG7ATAB/wFKAcQBOQH/AUABvQEvAf8BHwGr - AQ4B/wEhAawBEAH/ASUBrwEUAf8BJQGvARQB/wEkAa8BEwH/ATIBjQEqAe8BQgFqAUEB0QFCAWoBQQHR - AS8BjAEoAe8BRgFrAUEB0QQAAVoBVAFPAZYB4gHOAboB/wH3Ad4BxgL/AekB0QL/AfYB4gL/AfIB3QL/ - AfAB3QH/AfgB6gHZAf8B+AHmAdQB/wH7Ad8BxwH/AfUBzwGrAf8CAAHiAf8CAAHiAf8B+AHdAcMB/wHi - Ac4BugH/AVoBVAFPAZYBwgGCAYMB/wGOARQBFgH/AYgBCAEKAf8BhAEAAQIB/wGEAQABAgH/AYQBAAEC - Af8BhAEAAQIF/wGEAQABAgX/AYQBAAECAf8BhAEAAQIB/wGEAQABAgH/AX0BAAEBAf8BdwEAAQEB/wE+ - AgAB/wPAAf8DwAH/A8AB/wPAAf8DAAX/AwAB/wMXEf8DwAH/AwAB/wPAAf8DwAH/AU0BXQFLAbIBUwHN - AUIB/wFKAaYBOwHzAUcBaQFCAcwBRgF1AT4B2QExAbABIAH/ASABogEPAf8BHwGhAQ4B/wEfAaEBDgH/ - ASYBqAEVAf8BQQFrAT8B0wM8AWYDIwEzAUoBUAFKAZkDPAFmBAABhgFwAVsB0AHvAeAB0AH/AecBvgGW - Af8B5wG8AZQB/wHwAcwBqQH/Af4B7AHaAf8B3QHEAawB/wGcAXwBXAHnAZwBfAFcAecB3QHDAaoB/wH4 - Ad0BxAH/AgAB4gH/AgAB4gH/AfUB1gG4Af8B8QHfAc8B/wGGAXABWwHQAcIBggGDAf8BjgEUARYB/wGI - AQgBCgH/AYQBAAECAf8BhAEAAQIB/wGEAQABAgH/AYQBAAECBf8BhAEAAQIF/wGEAQABAgH/AYQBAAEC - Af8BhAEAAQIB/wF9AQABAQH/AXcBAAEBAf8BPgIAAf8DWgH/A1oB/wNaAf8DWgH/AwAF/wMAAf8DAAH/ - Ay4B/wPADf8DAAH/A1oB/wNaAf8BKwEsASsBQwFMAWABSgG4AUwBYAFKAbgBKwEsASsBQwFHAWsBQgHM - AU0BxwE8Af8BPAG3ASsB/wEyAa0BIQH/ASgBpAEXAf8BLwGqAR4B/wFCAWYBQgHMFAABoQF9AVkB7AH1 - AeQB1QH/AekBvgGXAf8B6AG8AZYB/wHnAbwBlAH/AfMB3gHKAf8BnAF7AVkB5gMUARsDFAEbAZwBewFZ - AeYB9gHjAdMB/wIAAeIB/wIAAeIB/wHtAckBpAH/AfYB5AHSAf8BoQF9AVkB7AHCAYIBgwH/AY4BFAEW - Af8BiAEIAQoB/wGEAQABAgH/AYQBAAECAf8BhAEAAQIB/wGEAQABAgH/AYQBAAECAf8BhAEAAQIB/wGE - AQABAgH/AYQBAAECAf8BhAEAAQIB/wGEAQABAgH/AX0BAAEBAf8BdwEAAQEB/wE+AgAB/wNaAf8DWgH/ - A1oB/wNaAf8DAAX/AwAB/wM0Af8DEQH/AwAB/wMAAf8DAAX/AwAB/wNaAf8DWgH/EAABRwFrAUIBzAFQ - AcoBPwH/AUIBvAExAf8BQgG8ATEB/wFCAbwBMQH/AUoBxAE5Af8BQwFrAUMB0wM8AWYDIwEzAUoBUAFK - AZkDPAFmBAABoQF9AVkB7AH1AeQB1QH/AekBvwGZAf8B6QHAAZkB/wHpAcEBmgH/AfMB3QHJAf8BnAF7 - AVkB5gMUARsDFAEbAZwBewFZAeYB+AHoAdkB/wHyAdIBsgH/AfABzAGrAf8B8AHMAasB/wH2AeQB0wH/ - AaEBfQFZAew0/wP2Af8D6gH/A3sB/wNaAf8DWgH/A1oB/wNaAf8DAAX/AxEB/wMAAf8DFwH/AzQB/wM0 - Af8DAAX/AwAB/wNaAf8DWgH/EAABRwFtAUIBzAFVAc8BRAH/AUcBwQE2Af8BRwHBATYB/wFHAcEBNgH/ - AUkBwwE4Af8BSgGdAT8B7wFCAWsBQgHRAUIBawFCAdEBSgGcAT8B7wFHAW0BQgHMBAABhgFwAVsB0AHw - AeEB0QH/AeoBxAGhAf8B6QHBAZsB/wHpAcABlwH/AfEBzgGyAf8B3AHDAaoB/wGcAXwBXAHnAZwBfAFc - AecB3QHEAawC/wH8AfMC/wH0AeUC/wHuAdoB/wH8AeUB0QH/AfEB4QHRAf8BhgFwAVsB0AT/AY4BFAEW - Cf8BhAEAAQIN/wGEAQABAgH/AYQBAAECDf8BfQEAAQEB/wF3AQABAQH/A3sB/wNaAf8DWgH/A1oB/wNa - Af8DAAn/A4YB/wMXAf8DAAH/AxEB/wMABf8DAAH/A1oB/wNaAf8QAAFHAW0BQgHMAWIB3AFRAf8BWgHU - AUkB/wFZAdMBSAH/AVgB0gFHAf8BUgHMAUEB/wFMAcYBOwH/AVQBzgFDAf8BXQHXAUwB/wFbAdUBSgH/ - AUcBbQFCAcwEAAFaAVQBTwGWAeIBzgG6Af8B8QHSAbYB/wHrAcEBmwH/AesBvwGZAv8B5AHTAv8B6AHb - Af8B8wHaAccB/wH4AfEB5AL/AfgB7QL/AfcB6QL/Af4B8QL/AfwB7wL/AfwB8gH/AeIBzgG6Af8BWgFU - AU8BlgT/AY4BFAEWCf8BhAEAAQIJ/wGEAQABAhH/AYQBAAECAf8D9gH/A+oB/wN7Af8DWgH/A1oB/wNa - Af8DWgH/AwAB/wOyDf8DwAH/A0gB/wMABf8DAAH/A1oB/wNaAf8QAAFKAVIBSgGZAUkBbwFCAcwBSQFv - AUIBzAFJAW8BQgHMAUkBbwFCAcwBSAF+AUMB2QFYAdIBRwH/AUcBfAE+AdkBSQFvAUIBzAFJAW8BQgHM - AUoBUgFKAZkEAAMmATgBtgGHAVUB/QH6Ae0B4QH/AewBxwGjAv8B7AHaBf8B9wHNAbYB/wHsAb0BlwL/ - AfQB3AP/AfcC/wH3AegD/wHzA/8B+QH/Av4B+QH/AbYBhwFVAf0DJgE4BP8BjgEUARYJ/wGEAQABAgn/ - AYQBAAECAf8BhAEAAQIB/wGEAQABAgH/AYQBAAECBf8BhAEAAQIB/wF9AQABAQH/AXcBAAEBAf8BPgIA - Af8DWgH/A1oB/wNaAf8DWgH/AxcB/wMuAf8Dshn/AwAB/wNaAf8DWgH/IAABKwEsASsBQwFJAW8BQgHM - AWMB3QFSAf8BSQFvAUIBzAErASwBKwFDEAABWgFUAU8BlgHZAb8BpQL/AfoB8Ab/Af0B8wH/AfABwQGj - Af8B7gHGAaAB/wH9AfAB0QP/Af4C/wH9AfAC/wH9AfEF/wHZAb8BpQH/AVoBVAFPAZYEAAT/AY4BFAEW - Af8BiAEIAQoF/wGEAQABAgn/AYQBAAECCf8BhAEAAQIF/wGEAQABAgH/A/YB/wPqAf8BPgIAAf8DWgH/ - A1oB/wNaAf8DWgH/A1oB/wMXAf8DAAH/AxcB/wOGEf8DAAH/A1oB/wNaAf8gAAFOAWMBSgG4AVsBuAFM - AfMBXgHYAU0B/wFaAbgBTAHzAU4BYwFKAbgQAAMKAQ0BcwFlAVcBuAHZAb8BpQH/Af4B/QH8Av8B8QHk - Af8B8gHKAa4B/wHyAdIBrQH/AfkB7QHIA/8B9wP/Af0B/wH+Af0B/AH/AdkBvwGlAf8BcwFlAVcBuAMK - AQ0EAAT/AZEBGwEdCf8BiAEIAQoB/wGIAQgBCgn/AYgBCAEKAf8BiAEIAQoN/wGDAQcBCQH/AXsBBgEI - Af8DgAH/A1oB/wNaAf8DWgH/A1oB/wNaAf8DWgH/A1oB/wMXAf8DAAH/AxEB/wNaAf8DwAX/AwAB/wNa - Af8DWgH/IAABTgFjAUoBuAFvAekBXgH/AWoB5AFZAf8BbgHoAV0B/wFOAWMBSgG4FAADCgENAVoBVAFP - AZYBrwGCAVUB+gHhAc0BuQH/AfEB4gHUAf8B+QHsAd8B/wH7AfMB5QH/AfQB7QHkAf8B4gHOAbsB/wGv - AYIBVQH6AVoBVAFPAZYDCgENCAAE/wGVASUBJy3/A/cB/wPsAf8DggH/BAADWgH/A1oB/wNaAf8DWgH/ - A1oB/wNaAf8DWgH/A1oB/wNaAf8DEQH/AwAB/wMuAf8DFwH/A1oB/yQAASsBLAErAUMBTgFhAUsBsgFJ - AXEBQgHMAU4BYQFLAbIBKwEsASsBQxwAASgCJwE7AVoBVAFOAZQBhQFwAVsBzgGiAX4BWQHrAaMBfwFY - Ae8BjQF0AVoB2QFbAVQBTwGXASgCJwE7EAAI/wHDAYUBhin/A/wB/wP3Af8DvwH//wAFAAGZAswB/wFh - AswB/wFhAswB/wFhAswB/wFhAswB/wFhAswB/wFhAswB/wPqAf8gAAGkAqAB/wNhAf8DzAH/tAABmQLM - Af8BmQP/AZkD/wGZA/8BmQP/AZkD/wFhAswB/wFhAswB/wPxAf8gAAPXAf8DYQH/CAADmQH/A1oB/wNQ - Af8DUAH/Az0B/wM0Af8DLgH/AyQB/wOGAf8MAAGZAswB/wFhAswB/wFhAswB/wFhAswB/wFhAswB/wFh - AswB/wFhAswB/wFhAswB/wFhAswB/wPqAf8YAAGZAswB/wFhAswB/wFhAswB/wFhAswB/wFhAswB/wFh - AswB/wFhAswB/wFhAswB/wFhAswB/wPqAf8UAAGZAswB/wGZA/8BmQP/AZkD/wGZA/8BmQP/AWECzAH/ - AZkBzAL/AS4CmQH/AWECzAH/AWECzAH/AZkCzAH/EAAD6gH/A2EB/wPqAf8IAANaAf8DYQH/A1AB/wM9 - Af8DPQH/A1AB/wNhAf8DcgH/AyQB/wwAAZkCzAH/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wFh - AswB/wFhAswB/wPxAf8UAAGZAswB/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BYQLMAf8BYQLM - Af8D8QH/EAABmQLMAf8BmQP/AZkD/wGZA/8BmQP/AZkD/wFhAswB/wFhAswB/wFhAswB/wEuAswB/wGZ - A/8BmQLMAf8QAAOyAf8DhgH/A4YB/wgAAaQCoAH/A2EB/wNaAf8DWgH/A1oB/wNQAf8DUAH/Az0B/wOG - Af8MAAGZAswB/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BYQLMAf8BmQHMAv8BYQLMAf8D8QH/ - EAABmQLMAf8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AWECzAH/AZkBzAL/AWECzAH/A/EB/wwA - AZkCzAH/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BLgLMAf8BmQP/AS4CmQH/AWECzAH/ - AZkCzAH/TAABmQLMAf8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AWECzAH/AWECzAH/AWECzAH/ - AZkCzAH/EAABmQLMAf8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AWECzAH/AWECzAH/AWECzAH/ - AZkCzAH/DAABmQLMAf8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wEuAswB/wGZA/8BLgLM - Af8BmQP/AZkCzAH/CAADcgH/A3IB/wNhAf84AAGZAswB/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZ - A/8BmQP/AZkD/wGZA/8BmQLMAf8QAAGZAswB/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/ - AZkD/wGZA/8BmQLMAf8MAAGZAswB/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AS4CzAH/ - AZkD/wEuAswB/wGZA/8BmQLMAf8IAAPxAf8DlgX/CAABpAKgAf8DYQH/A2EB/wNhAf8DYQH/A2EB/wNa - Af8DWgH/A5kB/wwAAZkCzAH/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZ - AswB/xAAAZkCzAH/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZAswB/wwA - AZkCzAH/AcwD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BLgLMAf8BmQP/AS4CzAH/AZkD/wGZ - AswB/wwAA/EB/wOWAf8IAANhAf8DYQH/A1AB/wNIAf8DPQH/A1AB/wNhAf8DcgH/A1oB/wwAAZkCzAH/ - AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZAswB/xAAAZkCzAH/AZkD/wGZ - A/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZAswB/wwAAcYB1gHvAf8BzAP/AZkD/wGZ - A/8BmQP/AZkD/wGZA/8BmQP/AZkD/wEuAswB/wGZA/8BLgLMAf8BmQP/AZkCzAH/CAADsgH/A4YB/wOy - Af8IAAOyAf8DcgH/A2EB/wNhAf8DYQH/A2EB/wNhAf8DYQH/AaQCoAH/DAABmQLMAf8BmQP/AZkD/wGZ - A/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkCzAH/EAABmQLMAf8BmQP/AZkD/wGZA/8BmQP/ - AZkD/wGZA/8BmQP/AZkD/wGZA/8CmQFhAf8BmQHMAZkB/wwAAcYB1gHvAf8BzAP/AcwD/wHMA/8BmQP/ - AZkD/wGZA/8BmQP/AZkD/wEuAswB/wGZA/8BLgLMAf8BmQP/AZkCzAH/TAABmQLMAf8BzAP/AZkD/wGZ - A/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkCzAH/EAABmQLMAf8BzAP/AZkD/wGZA/8BmQP/ - AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQFhAS4B/wGZAWEBLgH/A+MB/wgAAdYC5wH/AcYB1gHvAf8BYQLM - Af8BYQLMAf8BYQLMAf8BYQLMAf8BYQLMAf8BYQLMAf8BYQLMAf8BYQLMAf8BmQP/AS4CzAH/AZkD/wGZ - AswB/wgAA4YB/wOGAf8DhgH/OAABmQLMAf8BzAP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZ - A/8BmQP/AZkCzAH/EAABmQLMAf8BzAP/AZkD/wGZA/8BmQP/AZkD/wKZAWEB/wHMAZkBLgH/AcwBmQEu - Af8BzAGZAS4B/wHMAZkBLgL/AcwBLgH/AcwBmQFhAf8D4wH/DAABxgHWAe8B/wHMA/8BzAP/AcwD/wGZ - A/8BmQP/AZkD/wGZA/8BmQP/AS4CzAH/AZkD/wGZAswB/wwAA4YB/wwAA7IB/wOGAf8DcgH/A3IB/wNy - Af8DcgH/A2EB/wNhAf8BpAKgAf8MAAHGAdYB7wH/AcwD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZ - A/8BmQP/AZkD/wHGAdYB7wH/EAABxgHWAe8B/wHMA/8BmQP/AZkD/wGZA/8BmQP/AcwBmQEuAv8BzAGZ - Av8BzAFhAv8BzAFhAv8BzAFhAv8BzAFhAv8BzAFhAf8BzAGZAWEB/wwAAdYC5wH/AcYB1gHvAf8BYQLM - Af8BYQLMAf8BYQLMAf8BYQLMAf8BYQLMAf8BYQLMAf8BYQLMAf8BYQLMAf8BmQP/AcYB1gHvAf8MAAOG - Af8MAAOGAf8DYQH/A1AB/wNQAf8DSAH/A0gB/wNQAf8DYQH/A2EB/wwAAcYB1gHvAf8BzAP/AcwD/wHM - A/8BzAP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AcYB1gHvAf8QAAHGAdYB7wH/AcwD/wHMA/8BzAP/ - AcwD/wGZA/8CzAGZAf8BzAGZAWEB/wHMAZkBYQH/AcwBmQFhAf8BzAGZAWEC/wHMAZkB/wHMAZkBYQH/ - A+MB/xQAAcYB1gHvAf8BzAP/AcwD/wHMA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wHGAdYB7wH/CAADsgH/ - A4YB/wwAA7IB/wOGAf8DhgH/A4YB/wOGAf8DcgH/A3IB/wNyAf8DsgH/DAAB1gLnAf8BxgHWAe8B/wHG - AdYB7wH/AcYB1gHvAf8BxgHWAe8B/wHGAdYB7wH/AcYB1gHvAf8BxgHWAe8B/wHGAdYB7wH/AcYB1gHv - Af8BxgHWAe8B/wHWAucB/xAAAdYC5wH/AcYB1gHvAf8BxgHWAe8B/wHGAdYB7wH/AcYB1gHvAf8BxgHW - Ae8B/wHGAdYB7wH/AcYB1gHvAf8BxgHWAe8B/wHGAdYB7wH/AcwBmQFhAf8BzAGZAWEB/wPqAf8YAAHW - AucB/wHGAdYB7wH/AcYB1gHvAf8BxgHWAe8B/wHGAdYB7wH/AcYB1gHvAf8BxgHWAe8B/wHGAdYB7wH/ - AcYB1gHvAf8B1gLnAf+0AAHwAcoBpgH/A+oB/wgAAUIBTQE+BwABPgMAASgDAAFAAwABMAMAAQEBAAEB - BQABgAEBFgAD/wEAAfwBPwGAAQEEAAHwAQ8GAAHgAQcGAAHAAQMGAAGAAQEGAAGAAQEmAAGAAQEGAAGA - AQEGAAHAAQMGAAHgAQcGAAHwAQ8GAAH8AT8BgAEBBAABgAEBAQABgAHwAQcFAAGAAcABAwQAAfABgQGA - AQEFAAGBAYAGAAEBBwABAQcAAQEHAAEfBgAB8AEBBgAB8AEBBgAB8AEBBgAB8AEBBgAB/wEHAYABAQQA - Af8BBwGAAQEEAAH/AQcBwAEDAgABgAEBAf8BBwHwAQ8CAAj/AYABfwGPBf8BgAE/AcwBAQHAAQ8BwAEP - AYABBwGMAQEBwAEHAcABBwGAAQcBjAEBAcABAwHAAQMBgAEBAv8BwAEDAcABAwGAAQEBjwH/AcABAwHA - AQMBgAEBAYwBAQHAAQMBwAEDAYABAQHMAQEBwAEDAcABAwGAAQEBjAEBAcABAwHAAQMBgAEBAv8BwAED - AcABAQGAAQEBjwH/AcABAwHAAQAB4AEBAdwBAQHAAQMBwAEAAeABAQHcAQEBwAEDAcABAAH4AQEBnAEB - AcABAwHAAQEB+AEBBf8B8ws= + ATIBTwFSAU8BpgFKAV8BSQHRAUoBXwFJAdEDPAFmBAADPAFmAUoBXwFJAdEBSgFfAUkB0QFKAV8BSQHR + AUoBXwFJAdEBTwFSAU8BqQMjATMQAAMnATsBUgFQAU4BlAF3AWoBXAHOAZgBegFZAesBmAF6AVkB6wF3 + AWoBXAHOAVIBUAFOAZQCAAHiAf8CAAHiAf8MAAGmAowB/wFIAg0B/wFBAgMB/wE9AgAB/wE9AgAB/wE9 + AgAB/wE9AgAB/wE9AgAB/wE9AgAB/wE9AgAB/wE9AgAB/wE9AgAB/wE9AgAB/wE7AgAB/wE3AgAB/wEX + AgAB/wNxAf8DAAH/AxYB/wMtAf8DAAH/AxAB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/ + A8AB/wPAAf8DBgEIAwoBDgMQARUDEgEZAUwBXgFLAcwBHgHVAQ0B/wEzAZEBLQHvAU0BTgFNAZkEAAFN + AU4BTQGZATMBkQEtAe8BHgHVAQ0B/wEeAdUBDQH/AR4B1QENAf8BSgFjAUkB0QMTARoIAAMKAQ0BUgFQ + AU4BlgGsAX8BUwH6AeEBzQG5Af8B8QHgAc4B/wH5AecB1gH/AfgB5gHUAf8B8AHdAcwB/wHhAc0BuQH/ + AgAB4gH/AgAB4gH/AwoBDQgAAb8BhQGGAf8BgwERARMB/wF6AQUBBwH/AXYCAAH/AXYCAAH/A+oB/wPq + Af8D6gH/AXYCAAH/A+oB/wPqAf8D6gH/AXYCAAH/AXECAAH/AWwCAAH/ATgCAAH/AwAB/wPADf8DLQH/ + AxAB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/xAAAU4BXwFLAcwBIQHNARAB/wFK + AV4BSQHRAyMBMwQAAyMBMwFKAV4BSQHRAR4BzAENAf8BHgHMAQ0B/wEeAcwBDQH/AU0BZgFJAdEIAAMK + AQ0BZgFfAVcBuAHZAb8BpQH/Af4B8gHkAv8B5wHPAf8B/AHbAbsB/wH5AdMBsgH/AfYB0AGsAf8B9AHR + Aa4B/wH2AdgBuwH/AgAB4gH/AgAB4gH/AWYBXwFXAbgDCgENBAABwAGCAYMB/wGJARIBFAH/AYMBBgEI + Af8BfAIAAf8D9gH/AXwCAAH/AXwCAAH/A/YB/wF8AgAB/wP2Af8BfAIAAf8BfAIAAf8D9gH/AXcCAAH/ + AXICAAH/ATsCAAH/AwAB/wPAEf8DAAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/ + ASsBLAErAUMBUQFbAVABuAFRAVsBUAG4ASsBLAErAUMBTgFiAUsBzAElAcQBFAH/AUoBXQFJAdEDPAFm + BAADPAFmAUoBXQFJAdEBHgHBAQ0B/wEeAcEBDQH/AR4BwQENAf8BTQFmAUkB0QgAAVIBUAFOAZYB2QG/ + AaUC/wH4AesC/wHrAdEC/wHhAcMB/wH+AdsBugH/AfsB1gGyAf8CAAHiAf8CAAHiAf8CAAHiAf8CAAHi + Af8CAAHiAf8CAAHiAf8CAAHiAf8CAAHiAf8BwgGCAYMB/wGOARMBFQH/AYgBBwEJAf8BhAEAAQEF/wGE + AQABAQH/AYQBAAEBBf8BhAEAAQEF/wGEAQABAQH/AYQBAAEBBf8BfAIAAf8BdgIAAf8BPQIAAf8DcQH/ + AxAB/wNZAf8DsgH/A7IB/wPAAf8DAAH/AxYB/wMAAf8DAAH/AwAB/wMAAf8DFgH/A8AB/wPAAf8DwAH/ + AVIBWQFQAbIBSwHGAToB/wFJAZoBOwHzAU4BYgFLAcwBRwFrAUQB2QEfAbcBDgH/ATgBhQEvAe8BRwFd + AUcB0wFLAVkBSwHMAUcBXQFHAdMBNAGDAS4B7wEgAbcBDwH/AR8BtgEOAf8BHgG2AQ0B/wFNAWYBSQHR + BAADJgE4AbUBhwFUAf0C/gH6Av8B+QHpAv8B7wHYAv8B5wHNAv8B4QHCAf8B/AHcAbsB/wIAAeIB/wIA + AeIB/wIAAeIB/wIAAeIB/wIAAeIB/wIAAeIB/wIAAeIB/wIAAeIB/wHCAYIBgwH/AY4BEwEVAf8BiAEH + AQkB/wGEAQABAQH/AYQBAAEBDf8BhAEAAQEN/wGEAQABAQH/AXwCAAH/AXYCAAH/AT0CAAH/A8AB/wNx + Af8DEAH/AwAB/wMABf8DAAH/AxAB/wOWCf8DhgH/AxYB/wMWAf8DwAH/A8AB/wFOAWQBSwHMAUoBxQE5 + Af8BQAG7AS8B/wFJAcQBOAH/AT8BvQEuAf8BHgGrAQ0B/wEgAawBDwH/ASQBrwETAf8BJAGvARMB/wEj + Aa8BEgH/ATgBhwEvAe8BSgFmAUkB0QFKAWYBSQHRATQBhgEuAe8BTQFmAUkB0QQAAVIBUAFOAZYB4gHO + AboB/wH3Ad4BxgL/AekB0QL/AfYB4gL/AfIB3QL/AfAB3QH/AfgB6gHZAf8B+AHmAdQB/wH7Ad8BxwH/ + AfUBzwGrAf8CAAHiAf8CAAHiAf8B+AHdAcMB/wHiAc4BugH/AVIBUAFOAZYBwgGCAYMB/wGOARMBFQH/ + AYgBBwEJAf8BhAEAAQEB/wGEAQABAQH/AYQBAAEBAf8BhAEAAQEF/wGEAQABAQX/AYQBAAEBAf8BhAEA + AQEB/wGEAQABAQH/AXwCAAH/AXYCAAH/AT0CAAH/A8AB/wPAAf8DwAH/A8AB/wMABf8DAAH/AxYR/wPA + Af8DAAH/A8AB/wPAAf8BUgFaAVABsgFSAc0BQQH/AUwBnwE9AfMBTgFkAUsBzAFNAW8BRwHZATABsAEf + Af8BHwGiAQ4B/wEeAaEBDQH/AR4BoQENAf8BJQGoARQB/wFKAWcBRwHTAzwBZgMjATMBTQFOAU0BmQM8 + AWYEAAF4AWoBWwHQAe8B4AHQAf8B5wG+AZYB/wHnAbwBlAH/AfABzAGpAf8B/gHsAdoB/wHdAcQBrAH/ + AZEBdwFcAecBkQF3AVwB5wHdAcMBqgH/AfgB3QHEAf8CAAHiAf8CAAHiAf8B9QHWAbgB/wHxAd8BzwH/ + AXgBagFbAdABwgGCAYMB/wGOARMBFQH/AYgBBwEJAf8BhAEAAQEB/wGEAQABAQH/AYQBAAEBAf8BhAEA + AQEF/wGEAQABAQX/AYQBAAEBAf8BhAEAAQEB/wGEAQABAQH/AXwCAAH/AXYCAAH/AT0CAAH/A1kB/wNZ + Af8DWQH/A1kB/wMABf8DAAH/AwAB/wMtAf8DwA3/AwAB/wNZAf8DWQH/ASsBLAErAUMBUQFcAVABuAFR + AVwBUAG4ASsBLAErAUMBTgFmAUsBzAFMAccBOwH/ATsBtwEqAf8BMQGtASAB/wEnAaQBFgH/AS4BqgEd + Af8BSwFiAUsBzBQAAZgBegFZAewB9QHkAdUB/wHpAb4BlwH/AegBvAGWAf8B5wG8AZQB/wHzAd4BygH/ + AZIBdwFZAeYDFAEbAxQBGwGSAXcBWQHmAfYB4wHTAf8CAAHiAf8CAAHiAf8B7QHJAaQB/wH2AeQB0gH/ + AZgBegFZAewBwgGCAYMB/wGOARMBFQH/AYgBBwEJAf8BhAEAAQEB/wGEAQABAQH/AYQBAAEBAf8BhAEA + AQEB/wGEAQABAQH/AYQBAAEBAf8BhAEAAQEB/wGEAQABAQH/AYQBAAEBAf8BhAEAAQEB/wF8AgAB/wF2 + AgAB/wE9AgAB/wNZAf8DWQH/A1kB/wNZAf8DAAX/AwAB/wMzAf8DEAH/AwAB/wMAAf8DAAX/AwAB/wNZ + Af8DWQH/EAABTgFmAUsBzAFPAcoBPgH/AUEBvAEwAf8BQQG8ATAB/wFBAbwBMAH/AUkBxAE4Af8BSwFn + AUsB0wM8AWYDIwEzAU0BTgFNAZkDPAFmBAABmAF6AVkB7AH1AeQB1QH/AekBvwGZAf8B6QHAAZkB/wHp + AcEBmgH/AfMB3QHJAf8BkgF3AVkB5gMUARsDFAEbAZIBdwFZAeYB+AHoAdkB/wHyAdIBsgH/AfABzAGr + Af8B8AHMAasB/wH2AeQB0wH/AZgBegFZAew0/wP2Af8D6gH/A3oB/wNZAf8DWQH/A1kB/wNZAf8DAAX/ + AxAB/wMAAf8DFgH/AzMB/wMzAf8DAAX/AwAB/wNZAf8DWQH/EAABTgFmAUsBzAFUAc8BQwH/AUYBwQE1 + Af8BRgHBATUB/wFGAcEBNQH/AUgBwwE3Af8BSwGVAUIB7wFKAWYBSgHRAUoBZgFKAdEBSwGUAUIB7wFO + AWYBSwHMBAABeAFqAVsB0AHwAeEB0QH/AeoBxAGhAf8B6QHBAZsB/wHpAcABlwH/AfEBzgGyAf8B3AHD + AaoB/wGRAXcBXAHnAZEBdwFcAecB3QHEAawC/wH8AfMC/wH0AeUC/wHuAdoB/wH8AeUB0QH/AfEB4QHR + Af8BeAFqAVsB0AT/AY4BEwEVCf8BhAEAAQEN/wGEAQABAQH/AYQBAAEBDf8BfAIAAf8BdgIAAf8DegH/ + A1kB/wNZAf8DWQH/A1kB/wMACf8DhgH/AxYB/wMAAf8DEAH/AwAF/wMAAf8DWQH/A1kB/xAAAU4BZgFL + AcwBYQHcAVAB/wFZAdQBSAH/AVgB0wFHAf8BVwHSAUYB/wFRAcwBQAH/AUsBxgE6Af8BUwHOAUIB/wFc + AdcBSwH/AVoB1QFJAf8BTgFmAUsBzAQAAVIBUAFOAZYB4gHOAboB/wHxAdIBtgH/AesBwQGbAf8B6wG/ + AZkC/wHkAdMC/wHoAdsB/wHzAdoBxwH/AfgB8QHkAv8B+AHtAv8B9wHpAv8B/gHxAv8B/AHvAv8B/AHy + Af8B4gHOAboB/wFSAVABTgGWBP8BjgETARUJ/wGEAQABAQn/AYQBAAEBEf8BhAEAAQEB/wP2Af8D6gH/ + A3oB/wNZAf8DWQH/A1kB/wNZAf8DAAH/A7IN/wPAAf8DRwH/AwAF/wMAAf8DWQH/A1kB/xAAAU0BUAFN + AZkBTwFpAUsBzAFPAWkBSwHMAU8BaQFLAcwBTwFpAUsBzAFNAXQBSQHZAVcB0gFGAf8BTQF0AUcB2QFP + AWkBSwHMAU8BaQFLAcwBTQFQAU0BmQQAAyYBOAG1AYcBVAH9AfoB7QHhAf8B7AHHAaMC/wHsAdoF/wH3 + Ac0BtgH/AewBvQGXAv8B9AHcA/8B9wL/AfcB6AP/AfMD/wH5Af8C/gH5Af8BtQGHAVQB/QMmATgE/wGO + ARMBFQn/AYQBAAEBCf8BhAEAAQEB/wGEAQABAQH/AYQBAAEBAf8BhAEAAQEF/wGEAQABAQH/AXwCAAH/ + AXYCAAH/AT0CAAH/A1kB/wNZAf8DWQH/A1kB/wMWAf8DLQH/A7IZ/wMAAf8DWQH/A1kB/yAAASsBLAEr + AUMBTwFpAUsBzAFiAd0BUQH/AU8BaQFLAcwBKwEsASsBQxAAAVIBUAFOAZYB2QG/AaUC/wH6AfAG/wH9 + AfMB/wHwAcEBowH/Ae4BxgGgAf8B/QHwAdED/wH+Av8B/QHwAv8B/QHxBf8B2QG/AaUB/wFSAVABTgGW + BAAE/wGOARMBFQH/AYgBBwEJBf8BhAEAAQEJ/wGEAQABAQn/AYQBAAEBBf8BhAEAAQEB/wP2Af8D6gH/ + AT0CAAH/A1kB/wNZAf8DWQH/A1kB/wNZAf8DFgH/AwAB/wMWAf8DhhH/AwAB/wNZAf8DWQH/IAABUgFe + AVABuAFcAa8BTAHzAV0B2AFMAf8BWwGvAUwB8wFSAV4BUAG4EAADCgENAWYBXwFXAbgB2QG/AaUB/wH+ + Af0B/AL/AfEB5AH/AfIBygGuAf8B8gHSAa0B/wH5Ae0ByAP/AfcD/wH9Af8B/gH9AfwB/wHZAb8BpQH/ + AWYBXwFXAbgDCgENBAAE/wGRARoBHAn/AYgBBwEJAf8BiAEHAQkJ/wGIAQcBCQH/AYgBBwEJDf8BgwEG + AQgB/wF6AQUBBwH/A4AB/wNZAf8DWQH/A1kB/wNZAf8DWQH/A1kB/wNZAf8DFgH/AwAB/wMQAf8DWQH/ + A8AF/wMAAf8DWQH/A1kB/yAAAVIBXgFQAbgBbgHpAV0B/wFpAeQBWAH/AW0B6AFcAf8BUgFeAVABuBQA + AwoBDQFSAVABTgGWAawBfwFTAfoB4QHNAbkB/wHxAeIB1AH/AfkB7AHfAf8B+wHzAeUB/wH0Ae0B5AH/ + AeIBzgG7Af8BrAF/AVMB+gFSAVABTgGWAwoBDQgABP8BlQEkASYt/wP3Af8D7AH/A4IB/wQAA1kB/wNZ + Af8DWQH/A1kB/wNZAf8DWQH/A1kB/wNZAf8DWQH/AxAB/wMAAf8DLQH/AxYB/wNZAf8kAAErASwBKwFD + AVIBXAFQAbIBTwFpAUsBzAFSAVwBUAGyASsBLAErAUMcAAMnATsBUgFQAU4BlAF3AWoBXAHOAZgBegFZ + AesBmwF7AVgB7wGAAW8BWwHZAVMBUAFPAZcDJwE7EAAI/wHDAYUBhin/A/wB/wP3Af8DvwH//wAFAAGZ + AswB/wFgAswB/wFgAswB/wFgAswB/wFgAswB/wFgAswB/wFgAswB/wPqAf8gAAGkAqAB/wNgAf8DzAH/ + tAABmQLMAf8BmQP/AZkD/wGZA/8BmQP/AZkD/wFgAswB/wFgAswB/wPxAf8gAAPXAf8DYAH/CAADmQH/ + A1kB/wNPAf8DTwH/AzwB/wMzAf8DLQH/AyMB/wOGAf8MAAGZAswB/wFgAswB/wFgAswB/wFgAswB/wFg + AswB/wFgAswB/wFgAswB/wFgAswB/wFgAswB/wPqAf8YAAGZAswB/wFgAswB/wFgAswB/wFgAswB/wFg + AswB/wFgAswB/wFgAswB/wFgAswB/wFgAswB/wPqAf8UAAGZAswB/wGZA/8BmQP/AZkD/wGZA/8BmQP/ + AWACzAH/AZkBzAL/AS0CmQH/AWACzAH/AWACzAH/AZkCzAH/EAAD6gH/A2AB/wPqAf8IAANZAf8DYAH/ + A08B/wM8Af8DPAH/A08B/wNgAf8DcQH/AyMB/wwAAZkCzAH/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/ + AZkD/wFgAswB/wFgAswB/wPxAf8UAAGZAswB/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BYALM + Af8BYALMAf8D8QH/EAABmQLMAf8BmQP/AZkD/wGZA/8BmQP/AZkD/wFgAswB/wFgAswB/wFgAswB/wEt + AswB/wGZA/8BmQLMAf8QAAOyAf8DhgH/A4YB/wgAAaQCoAH/A2AB/wNZAf8DWQH/A1kB/wNPAf8DTwH/ + AzwB/wOGAf8MAAGZAswB/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BYALMAf8BmQHMAv8BYALM + Af8D8QH/EAABmQLMAf8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AWACzAH/AZkBzAL/AWACzAH/ + A/EB/wwAAZkCzAH/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BLQLMAf8BmQP/AS0CmQH/ + AWACzAH/AZkCzAH/TAABmQLMAf8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AWACzAH/AWACzAH/ + AWACzAH/AZkCzAH/EAABmQLMAf8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AWACzAH/AWACzAH/ + AWACzAH/AZkCzAH/DAABmQLMAf8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wEtAswB/wGZ + A/8BLQLMAf8BmQP/AZkCzAH/CAADcQH/A3EB/wNgAf84AAGZAswB/wGZA/8BmQP/AZkD/wGZA/8BmQP/ + AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQLMAf8QAAGZAswB/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZ + A/8BmQP/AZkD/wGZA/8BmQLMAf8MAAGZAswB/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/ + AS0CzAH/AZkD/wEtAswB/wGZA/8BmQLMAf8IAAPxAf8DlgX/CAABpAKgAf8DYAH/A2AB/wNgAf8DYAH/ + A2AB/wNZAf8DWQH/A5kB/wwAAZkCzAH/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/ + AZkD/wGZAswB/xAAAZkCzAH/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZ + AswB/wwAAZkCzAH/AcwD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BLQLMAf8BmQP/AS0CzAH/ + AZkD/wGZAswB/wwAA/EB/wOWAf8IAANgAf8DYAH/A08B/wNHAf8DPAH/A08B/wNgAf8DcQH/A1kB/wwA + AZkCzAH/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZAswB/xAAAZkCzAH/ + AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZAswB/wwAAcYB1gHvAf8BzAP/ + AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wEtAswB/wGZA/8BLQLMAf8BmQP/AZkCzAH/CAADsgH/ + A4YB/wOyAf8IAAOyAf8DcQH/A2AB/wNgAf8DYAH/A2AB/wNgAf8DYAH/AaQCoAH/DAABmQLMAf8BmQP/ + AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkCzAH/EAABmQLMAf8BmQP/AZkD/wGZ + A/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8CmQFgAf8BmQHMAZkB/wwAAcYB1gHvAf8BzAP/AcwD/wHM + A/8BmQP/AZkD/wGZA/8BmQP/AZkD/wEtAswB/wGZA/8BLQLMAf8BmQP/AZkCzAH/TAABmQLMAf8BzAP/ + AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AZkCzAH/EAABmQLMAf8BzAP/AZkD/wGZ + A/8BmQP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQFgAS0B/wGZAWABLQH/A+MB/wgAAdYC5wH/AcYB1gHv + Af8BYALMAf8BYALMAf8BYALMAf8BYALMAf8BYALMAf8BYALMAf8BYALMAf8BYALMAf8BmQP/AS0CzAH/ + AZkD/wGZAswB/wgAA4YB/wOGAf8DhgH/OAABmQLMAf8BzAP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/ + AZkD/wGZA/8BmQP/AZkCzAH/EAABmQLMAf8BzAP/AZkD/wGZA/8BmQP/AZkD/wKZAWAB/wHMAZkBLQH/ + AcwBmQEtAf8BzAGZAS0B/wHMAZkBLQL/AcwBLQH/AcwBmQFgAf8D4wH/DAABxgHWAe8B/wHMA/8BzAP/ + AcwD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AS0CzAH/AZkD/wGZAswB/wwAA4YB/wwAA7IB/wOGAf8DcQH/ + A3EB/wNxAf8DcQH/A2AB/wNgAf8BpAKgAf8MAAHGAdYB7wH/AcwD/wGZA/8BmQP/AZkD/wGZA/8BmQP/ + AZkD/wGZA/8BmQP/AZkD/wHGAdYB7wH/EAABxgHWAe8B/wHMA/8BmQP/AZkD/wGZA/8BmQP/AcwBmQEt + Av8BzAGZAv8BzAFgAv8BzAFgAv8BzAFgAv8BzAFgAv8BzAFgAf8BzAGZAWAB/wwAAdYC5wH/AcYB1gHv + Af8BYALMAf8BYALMAf8BYALMAf8BYALMAf8BYALMAf8BYALMAf8BYALMAf8BYALMAf8BmQP/AcYB1gHv + Af8MAAOGAf8MAAOGAf8DYAH/A08B/wNPAf8DRwH/A0cB/wNPAf8DYAH/A2AB/wwAAcYB1gHvAf8BzAP/ + AcwD/wHMA/8BzAP/AZkD/wGZA/8BmQP/AZkD/wGZA/8BmQP/AcYB1gHvAf8QAAHGAdYB7wH/AcwD/wHM + A/8BzAP/AcwD/wGZA/8CzAGZAf8BzAGZAWAB/wHMAZkBYAH/AcwBmQFgAf8BzAGZAWAC/wHMAZkB/wHM + AZkBYAH/A+MB/xQAAcYB1gHvAf8BzAP/AcwD/wHMA/8BmQP/AZkD/wGZA/8BmQP/AZkD/wHGAdYB7wH/ + CAADsgH/A4YB/wwAA7IB/wOGAf8DhgH/A4YB/wOGAf8DcQH/A3EB/wNxAf8DsgH/DAAB1gLnAf8BxgHW + Ae8B/wHGAdYB7wH/AcYB1gHvAf8BxgHWAe8B/wHGAdYB7wH/AcYB1gHvAf8BxgHWAe8B/wHGAdYB7wH/ + AcYB1gHvAf8BxgHWAe8B/wHWAucB/xAAAdYC5wH/AcYB1gHvAf8BxgHWAe8B/wHGAdYB7wH/AcYB1gHv + Af8BxgHWAe8B/wHGAdYB7wH/AcYB1gHvAf8BxgHWAe8B/wHGAdYB7wH/AcwBmQFgAf8BzAGZAWAB/wPq + Af8YAAHWAucB/wHGAdYB7wH/AcYB1gHvAf8BxgHWAe8B/wHGAdYB7wH/AcYB1gHvAf8BxgHWAe8B/wHG + AdYB7wH/AcYB1gHvAf8B1gLnAf+0AAHwAcoBpgH/A+oB/wgAAUIBTQE+BwABPgMAASgDAAFAAwABMAMA + AQEBAAEBBQABgAEBFgAD/wEAAfwBPwGAAQEEAAHwAQ8GAAHgAQcGAAHAAQMGAAGAAQEGAAGAAQEmAAGA + AQEGAAGAAQEGAAHAAQMGAAHgAQcGAAHwAQ8GAAH8AT8BgAEBBAABgAEBAQABgAHwAQcFAAGAAcABAwQA + AfABgQGAAQEFAAGBAYAGAAEBBwABAQcAAQEHAAEfBgAB8AEBBgAB8AEBBgAB8AEBBgAB8AEBBgAB/wEH + AYABAQQAAf8BBwGAAQEEAAH/AQcBwAEDAgABgAEBAf8BBwHwAQ8CAAj/AYABfwGPBf8BgAE/AcwBAQHA + AQ8BwAEPAYABBwGMAQEBwAEHAcABBwGAAQcBjAEBAcABAwHAAQMBgAEBAv8BwAEDAcABAwGAAQEBjwH/ + AcABAwHAAQMBgAEBAYwBAQHAAQMBwAEDAYABAQHMAQEBwAEDAcABAwGAAQEBjAEBAcABAwHAAQMBgAEB + Av8BwAEDAcABAQGAAQEBjwH/AcABAwHAAQAB4AEBAdwBAQHAAQMBwAEAAeABAQHcAQEBwAEDAcABAAH4 + AQEBnAEBAcABAwHAAQEB+AEBBf8B8ws= - 0, 28 + 0, 43 + + + 4, 5, 4, 5 - 61, 0 + 90, 0 - 656, 21 + 982, 27 1 @@ -1191,11 +1253,14 @@ 0, 0 + + 4, 5, 4, 5 + - 61, 0 + 90, 0 - 656, 21 + 982, 27 0 @@ -1219,13 +1284,16 @@ Fill - 0, 4 + 0, 6 + + + 4, 5, 4, 5 - 40, 0 + 58, 0 - 656, 21 + 984, 27 9 @@ -1269,8 +1337,11 @@ 0, 0 + + 4, 5, 4, 5 + - 656, 158 + 984, 248 8 @@ -1282,7 +1353,7 @@ listMetadata - System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel4 @@ -1291,10 +1362,13 @@ 1 - 6, 57 + 9, 88 + + + 4, 5, 4, 5 - 80, 23 + 120, 35 3 @@ -1309,7 +1383,7 @@ buttonMetadata - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel3 @@ -1321,10 +1395,13 @@ NoControl - 270, 57 + 405, 88 + + + 4, 5, 4, 5 - 80, 24 + 120, 37 5 @@ -1339,7 +1416,7 @@ buttonVA - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel3 @@ -1351,10 +1428,13 @@ NoControl - 94, 57 + 141, 88 + + + 4, 5, 4, 5 - 80, 24 + 120, 37 4 @@ -1369,7 +1449,7 @@ buttonReload - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel3 @@ -1381,10 +1461,13 @@ NoControl - 358, 57 + 537, 88 + + + 4, 5, 4, 5 - 80, 24 + 120, 37 6 @@ -1399,7 +1482,7 @@ buttonEncoding - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel3 @@ -1411,10 +1494,13 @@ NoControl - 6, 57 + 9, 88 + + + 4, 5, 4, 5 - 80, 24 + 120, 37 3 @@ -1432,7 +1518,7 @@ buttonTracks - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel3 @@ -1444,10 +1530,13 @@ NoControl - 446, 57 + 669, 88 + + + 4, 5, 4, 5 - 80, 24 + 120, 37 41 @@ -1462,7 +1551,7 @@ buttonFreedbSubmit - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel3 @@ -1474,10 +1563,13 @@ Right - 480, 0 + 720, 0 + + + 4, 5, 4, 5 - 176, 136 + 264, 209 42 @@ -1486,7 +1578,7 @@ panel1 - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel2 @@ -1498,13 +1590,16 @@ Fill - 5, 5 + 8, 8 + + + 4, 5, 4, 5 - 100, 100 + 150, 154 - 131, 126 + 196, 193 Zoom @@ -1516,7 +1611,7 @@ pictureBox1 - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel7 @@ -1524,17 +1619,20 @@ 0 - + 1148, 17 NoControl - 534, 57 + 801, 88 + + + 4, 5, 4, 5 - 80, 24 + 120, 37 44 @@ -1549,7 +1647,7 @@ buttonSettings - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel3 @@ -1561,13 +1659,16 @@ Fill - 339, 0 + 508, 0 + + + 4, 5, 4, 5 - 5, 5, 5, 5 + 8, 8, 8, 8 - 141, 136 + 212, 209 44 @@ -1576,7 +1677,7 @@ panel7 - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel2 @@ -1588,10 +1689,13 @@ Bottom - 4, 284 + 6, 441 + + + 4, 5, 4, 5 - 656, 136 + 984, 209 45 @@ -1600,7 +1704,7 @@ panel2 - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel6 @@ -1612,10 +1716,13 @@ NoControl - 182, 57 + 273, 88 + + + 4, 5, 4, 5 - 80, 24 + 120, 37 45 @@ -1630,7 +1737,7 @@ buttonEjectDisk - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel3 @@ -1642,13 +1749,13 @@ Top - 4, 4 + 6, 6 0, 0, 0, 0 - 656, 90 + 984, 138 46 @@ -1657,7 +1764,7 @@ panel3 - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel6 @@ -1669,10 +1776,13 @@ Fill - 4, 94 + 6, 144 + + + 4, 5, 4, 5 - 656, 158 + 984, 248 47 @@ -1681,7 +1791,7 @@ panel4 - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel6 @@ -1693,13 +1803,16 @@ Bottom - 4, 252 + 6, 392 + + + 4, 5, 4, 5 - 0, 4, 0, 0 + 0, 6, 0, 0 - 656, 32 + 984, 49 48 @@ -1708,7 +1821,7 @@ panel5 - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel6 @@ -1722,11 +1835,14 @@ 0, 0 + + 4, 5, 4, 5 + - 4, 4, 4, 4 + 6, 6, 6, 6 - 664, 424 + 996, 656 49 @@ -1735,7 +1851,7 @@ panel6 - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -1743,17 +1859,17 @@ 0 - + True - + 50 - 6, 13 + 9, 20 - 664, 449 + 996, 691 @@ -2152,8 +2268,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAQAAwAMAAPAPAAA= + + 4, 5, 4, 5 + - 680, 487 + 1009, 719 CenterScreen @@ -2165,186 +2284,186 @@ toolStripStatusLabel1 - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripStatusLabelMusicBrainz - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripStatusCTDB - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripStatusAr - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripProgressBar1 - System.Windows.Forms.ToolStripProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripStatusLabel2 - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Title - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 TrackNo - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 columnHeaderArtist - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Start - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Length - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 losslessOrNotBindingSource - System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 bindingSourceCR - System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 encodersBindingSource - System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 formatsBindingSource - System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 cUEStylesBindingSource - System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 drivesBindingSource - System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 imageListChecked - System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripMenuItem1 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 plainBackgroundPainter1 - ProgressODoom.PlainBackgroundPainter, ProgressODoom, Version=1.0.4803.25982, Culture=neutral, PublicKeyToken=null + ProgressODoom.PlainBackgroundPainter, ProgressODoom, Version=1.0.6651.26127, Culture=neutral, PublicKeyToken=null styledBorderPainter1 - ProgressODoom.StyledBorderPainter, ProgressODoom, Version=1.0.4803.25982, Culture=neutral, PublicKeyToken=null + ProgressODoom.StyledBorderPainter, ProgressODoom, Version=1.0.6651.26127, Culture=neutral, PublicKeyToken=null plainProgressPainter1 - ProgressODoom.PlainProgressPainter, ProgressODoom, Version=1.0.4803.25982, Culture=neutral, PublicKeyToken=null + ProgressODoom.PlainProgressPainter, ProgressODoom, Version=1.0.6651.26127, Culture=neutral, PublicKeyToken=null gradientGlossPainter1 - ProgressODoom.GradientGlossPainter, ProgressODoom, Version=1.0.4803.25982, Culture=neutral, PublicKeyToken=null + ProgressODoom.GradientGlossPainter, ProgressODoom, Version=1.0.6651.26127, Culture=neutral, PublicKeyToken=null plainProgressPainter2 - ProgressODoom.PlainProgressPainter, ProgressODoom, Version=1.0.4803.25982, Culture=neutral, PublicKeyToken=null + ProgressODoom.PlainProgressPainter, ProgressODoom, Version=1.0.6651.26127, Culture=neutral, PublicKeyToken=null toolTip1 - System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolTip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 releasesBindingSource - System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 imageListMetadataSource - System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 columnHeaderValue - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 columnHeaderName - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 backgroundWorkerArtwork - System.ComponentModel.BackgroundWorker, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 frmCUERipper - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/CUETools.ALACEnc/Program.cs b/CUETools.ALACEnc/Program.cs index 005542a..ddff495 100644 --- a/CUETools.ALACEnc/Program.cs +++ b/CUETools.ALACEnc/Program.cs @@ -61,7 +61,7 @@ namespace CUETools.ALACEnc int adaptive_passes = -1; bool do_seektable = true; bool buffered = false; - var settings = new ALACWriterSettings(); + var settings = new Codecs.ALAC.EncoderSettings(); for (int arg = 0; arg < args.Length; arg++) { @@ -162,11 +162,11 @@ namespace CUETools.ALACEnc //return 0; IAudioSource audioSource; if (input_file == "-") - audioSource = new WAVReader("", Console.OpenStandardInput()); + audioSource = new Codecs.WAV.AudioDecoder(new Codecs.WAV.DecoderSettings() { IgnoreChunkSizes = true }, "", Console.OpenStandardInput()); else if (File.Exists(input_file) && Path.GetExtension(input_file) == ".wav") - audioSource = new WAVReader(input_file, null); + audioSource = new Codecs.WAV.AudioDecoder(new Codecs.WAV.DecoderSettings(), input_file); else if (File.Exists(input_file) && Path.GetExtension(input_file) == ".m4a") - audioSource = new ALACReader(input_file, null); + audioSource = new Codecs.ALAC.AudioDecoder(new Codecs.ALAC.DecoderSettings(), input_file); else { Usage(); @@ -177,7 +177,7 @@ namespace CUETools.ALACEnc if (output_file == null) output_file = Path.ChangeExtension(input_file, "m4a"); settings.PCM = audioSource.PCM; - ALACWriter alac = new ALACWriter((output_file == "-" || output_file == "nul") ? "" : output_file, + Codecs.ALAC.AudioEncoder alac = new Codecs.ALAC.AudioEncoder((output_file == "-" || output_file == "nul") ? "" : output_file, output_file == "-" ? Console.OpenStandardOutput() : output_file == "nul" ? new NullStream() : null, settings); diff --git a/CUETools.Codecs.ALAC/ALACDotNet.cs b/CUETools.Codecs.ALAC/ALACDotNet.cs index ef026c7..2741cd3 100644 --- a/CUETools.Codecs.ALAC/ALACDotNet.cs +++ b/CUETools.Codecs.ALAC/ALACDotNet.cs @@ -27,13 +27,27 @@ using CUETools.Codecs; namespace CUETools.Codecs.ALAC { - [AudioDecoderClass("cuetools", "m4a", 2)] - public class ALACReader : IAudioSource + public class DecoderSettings : AudioDecoderSettings + { + public override string Extension => "m4a"; + + public override string Name => "cuetools"; + + public override Type DecoderType => typeof(AudioDecoder); + + public override int Priority => 2; + + public DecoderSettings() : base() { } + } + + [AudioDecoderClass(typeof(DecoderSettings))] + public class AudioDecoder : IAudioSource { - public ALACReader(string path, Stream IO) + public AudioDecoder(DecoderSettings settings, string path, Stream IO = null) { + m_settings = settings; _path = path; - _IO = IO != null ? IO : new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); + _IO = IO ?? new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); _buff = new byte[512]; _tags = new NameValueCollection(); qtmovie_read(); @@ -43,7 +57,7 @@ namespace CUETools.Codecs.ALAC calculate_length(); } - public ALACReader(AudioPCMConfig _pcm, int rice_historymult, int rice_initialhistory, int rice_kmodifier, int blocksize) + public AudioDecoder(AudioPCMConfig _pcm, int rice_historymult, int rice_initialhistory, int rice_kmodifier, int blocksize) { pcm = _pcm; @@ -59,9 +73,10 @@ namespace CUETools.Codecs.ALAC _framesBuffer = new byte[65536]; } - public AudioDecoderSettings Settings { get { return null; } } + private DecoderSettings m_settings; + public AudioDecoderSettings Settings => m_settings; - private void InitTables() + private void InitTables() { if (_predicterror_buffer_a != null) return; diff --git a/CUETools.Codecs.ALAC/ALACWriter.cs b/CUETools.Codecs.ALAC/ALACWriter.cs index aea745d..c37d894 100644 --- a/CUETools.Codecs.ALAC/ALACWriter.cs +++ b/CUETools.Codecs.ALAC/ALACWriter.cs @@ -30,12 +30,24 @@ using System.Collections.Generic; using System.Runtime.InteropServices; #endif using CUETools.Codecs; +using Newtonsoft.Json; namespace CUETools.Codecs.ALAC { - public class ALACWriterSettings: AudioEncoderSettings + [JsonObject(MemberSerialization.OptIn)] + public class EncoderSettings: AudioEncoderSettings { - public ALACWriterSettings() + public override string Extension => "m4a"; + + public override string Name => "cuetools"; + + public override Type EncoderType => typeof(AudioEncoder); + + public override int Priority => 1; + + public override bool Lossless => true; + + public EncoderSettings() : base("0 1 2 3 4 5 6 7 8 9 10", "5") { } @@ -51,11 +63,12 @@ namespace CUETools.Codecs.ALAC [DefaultValue(false)] [DisplayName("Verify")] [Description("Decode each frame and compare with original")] - public bool DoVerify { get; set; } + [JsonProperty] + public bool DoVerify { get; set; } } - [AudioEncoderClass("cuetools", "m4a", true, 1, typeof(ALACWriterSettings))] - public class ALACWriter : IAudioDest + [AudioEncoderClass(typeof(EncoderSettings))] + public class AudioEncoder : IAudioDest { Stream _IO = null; bool _pathGiven = false; @@ -100,13 +113,13 @@ namespace CUETools.Codecs.ALAC int _windowsize = 0, _windowcount = 0; ALACFrame frame; - ALACReader verify; + AudioDecoder verify; bool inited = false; List chunk_pos; - public ALACWriter(string path, Stream IO, ALACWriterSettings settings) + public AudioEncoder(string path, Stream IO, EncoderSettings settings) { m_settings = settings; m_settings.Validate(); @@ -134,7 +147,7 @@ namespace CUETools.Codecs.ALAC chunk_pos = new List(); } - public ALACWriter(string path, ALACWriterSettings settings) + public AudioEncoder(string path, EncoderSettings settings) : this(path, null, settings) { } @@ -147,7 +160,7 @@ namespace CUETools.Codecs.ALAC } } - ALACWriterSettings m_settings; + EncoderSettings m_settings; public AudioEncoderSettings Settings { @@ -1369,7 +1382,7 @@ namespace CUETools.Codecs.ALAC { get { - var version = typeof(ALACWriter).Assembly.GetName().Version; + var version = typeof(AudioEncoder).Assembly.GetName().Version; return vendor_string ?? "CUETools " + version.Major + "." + version.Minor + "." + version.Build; } set @@ -1768,7 +1781,7 @@ namespace CUETools.Codecs.ALAC if (m_settings.DoVerify) { - verify = new ALACReader(Settings.PCM, history_mult, initial_history, k_modifier, m_blockSize); + verify = new AudioDecoder(Settings.PCM, history_mult, initial_history, k_modifier, m_blockSize); verifyBuffer = new int[Alac.MAX_BLOCKSIZE * Settings.PCM.ChannelCount]; } diff --git a/CUETools.Codecs.APE/CUETools.Codecs.APE.cpp b/CUETools.Codecs.APE/CUETools.Codecs.APE.cpp index 1b0fcf5..3c7734a 100644 --- a/CUETools.Codecs.APE/CUETools.Codecs.APE.cpp +++ b/CUETools.Codecs.APE/CUETools.Codecs.APE.cpp @@ -80,12 +80,52 @@ namespace CUETools { namespace Codecs { namespace APE { GCHandle _gchBuffer; }; - [AudioDecoderClass("MAC_SDK", "ape", 1)] - public ref class APEReader : public IAudioSource + ref class AudioDecoder; + + public ref class DecoderSettings : public AudioDecoderSettings { public: - APEReader(String^ path, Stream^ IO) + DecoderSettings() + : AudioDecoderSettings() { + } + + virtual property String^ Name + { + String^ get() override { return "MAC_SDK"; } + } + + virtual property String^ Extension + { + String^ get() override { return "ape"; } + } + + virtual property Type^ DecoderType + { + Type^ get() override { return AudioDecoder::typeid; } + } + + virtual property int Priority + { + int get() override { return 1; } + } + + virtual property String^ Version + { + String^ get() + { + return MAC_VERSION_STRING; + } + } + }; + + [AudioDecoderClass(DecoderSettings::typeid)] + public ref class AudioDecoder : public IAudioSource + { + public: + AudioDecoder(DecoderSettings^ settings, String^ path, Stream^ IO) + { + m_settings = settings; pAPEDecompress = NULL; _sampleOffset = 0; _bufferOffset = 0; @@ -118,7 +158,7 @@ namespace CUETools { namespace Codecs { namespace APE { _sampleCount = pAPEDecompress->GetInfo (APE_DECOMPRESS_TOTAL_BLOCKS, 0, 0); // * ? } - ~APEReader () + ~AudioDecoder () { if (_winFileIO) delete _winFileIO; @@ -211,7 +251,7 @@ namespace CUETools { namespace Codecs { namespace APE { virtual property AudioDecoderSettings^ Settings { AudioDecoderSettings^ get(void) { - return nullptr; + return m_settings; } } @@ -228,6 +268,7 @@ namespace CUETools { namespace Codecs { namespace APE { array^ _readBuffer; CWinFileIO* _winFileIO; GCHandle _gchIO, _gchReadBuffer; + DecoderSettings^ m_settings; property Int32 SamplesInBuffer { @@ -238,14 +279,41 @@ namespace CUETools { namespace Codecs { namespace APE { } }; - public ref class APEWriterSettings : public AudioEncoderSettings + ref class AudioEncoder; + + public ref class EncoderSettings : public AudioEncoderSettings { public: - APEWriterSettings() + EncoderSettings() : AudioEncoderSettings("fast normal high extra insane", "high") { } + virtual property String^ Name + { + String^ get() override { return "MAC_SDK"; } + } + + virtual property String^ Extension + { + String^ get() override { return "ape"; } + } + + virtual property Type^ EncoderType + { + Type^ get() override { return AudioEncoder::typeid; } + } + + virtual property bool Lossless + { + bool get() override { return true; } + } + + virtual property int Priority + { + int get() override { return 1; } + } + virtual property String^ Version { String^ get() @@ -255,13 +323,14 @@ namespace CUETools { namespace Codecs { namespace APE { } }; - [AudioEncoderClass("MAC_SDK", "ape", true, 1, APEWriterSettings::typeid)] - public ref class APEWriter : IAudioDest + [AudioEncoderClass(EncoderSettings::typeid)] + public ref class AudioEncoder : IAudioDest { public: - APEWriter(String^ path, APEWriterSettings^ settings) + AudioEncoder(EncoderSettings^ settings, String^ path, Stream^ IO) { _settings = settings; + _IO = IO; if (_settings->PCM->ChannelCount != 1 && _settings->PCM->ChannelCount != 2) throw gcnew Exception("Only stereo and mono audio formats are allowed."); @@ -277,7 +346,7 @@ namespace CUETools { namespace Codecs { namespace APE { throw gcnew Exception("Unable to open APE compressor."); } - ~APEWriter() + ~AudioEncoder() { if (_winFileIO) delete _winFileIO; @@ -365,7 +434,7 @@ namespace CUETools { namespace Codecs { namespace APE { IAPECompress * pAPECompress; bool _initialized; Int64 _finalSampleCount, _samplesWritten; - APEWriterSettings^ _settings; + EncoderSettings^ _settings; String^ _path; Stream^ _IO; GCHandle _gchIO, _gchBuffer; @@ -374,7 +443,8 @@ namespace CUETools { namespace Codecs { namespace APE { array^ _sampleBuffer; void Initialize() { - _IO = gcnew FileStream (_path, FileMode::Create, FileAccess::ReadWrite, FileShare::Read); + if (_IO == nullptr) + _IO = gcnew FileStream (_path, FileMode::Create, FileAccess::ReadWrite, FileShare::Read); _writeBuffer = gcnew array(0x4000); _gchIO = GCHandle::Alloc(_IO); diff --git a/CUETools.Codecs.BDLPCM/BDLPCMReader.cs b/CUETools.Codecs.BDLPCM/BDLPCMReader.cs index f3d70a8..d1dae33 100644 --- a/CUETools.Codecs.BDLPCM/BDLPCMReader.cs +++ b/CUETools.Codecs.BDLPCM/BDLPCMReader.cs @@ -5,16 +5,29 @@ using System.IO; namespace CUETools.Codecs.BDLPCM { - [AudioDecoderClass("cuetools", "m2ts", 2)] - public class BDLPCMReader : IAudioSource + public class DecoderSettings : AudioDecoderSettings { - public unsafe BDLPCMReader(string path, Stream IO, ushort pid) + public override string Extension => "m2ts"; + + public override string Name => "cuetools"; + + public override Type DecoderType => typeof(AudioDecoder); + + public override int Priority => 2; + + public DecoderSettings() : base() { } + } + + [AudioDecoderClass(typeof(DecoderSettings))] + public class AudioDecoder : IAudioSource + { + public unsafe AudioDecoder(string path, Stream IO, ushort pid) : this(path, IO) { settings.Pid = pid; } - public unsafe BDLPCMReader(string path, Stream IO) + public unsafe AudioDecoder(string path, Stream IO) { _path = path; _IO = IO != null ? IO : new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 0x10000); @@ -24,7 +37,7 @@ namespace CUETools.Codecs.BDLPCM _samplePos = 0; _sampleLen = -1; demux_ts_packets(null, 0); - settings = new BDLPCMReaderSettings(); + settings = new BDLPCMDecoderSettings(); } public AudioDecoderSettings Settings { get { return settings; } } @@ -736,6 +749,6 @@ namespace CUETools.Codecs.BDLPCM int demuxer_channel; TsStream chosenStream; long _samplePos, _sampleLen; - BDLPCMReaderSettings settings; + BDLPCMDecoderSettings settings; } } diff --git a/CUETools.Codecs.BDLPCM/BDLPCMReaderSettings.cs b/CUETools.Codecs.BDLPCM/BDLPCMReaderSettings.cs index 0ea451a..4279482 100644 --- a/CUETools.Codecs.BDLPCM/BDLPCMReaderSettings.cs +++ b/CUETools.Codecs.BDLPCM/BDLPCMReaderSettings.cs @@ -2,23 +2,22 @@ using System.Collections.Generic; using System.ComponentModel; using System.Text; +using Newtonsoft.Json; namespace CUETools.Codecs.BDLPCM { - public class BDLPCMReaderSettings : AudioDecoderSettings + [JsonObject(MemberSerialization.OptIn)] + public class BDLPCMDecoderSettings : AudioDecoderSettings { - public BDLPCMReaderSettings() + public BDLPCMDecoderSettings() { IgnoreShortItems = true; } - [Browsable(false)] public bool IgnoreShortItems { get; set; } - [Browsable(false)] public int? Stream { get; set; } - [Browsable(false)] public ushort? Pid { get; set; } } } diff --git a/CUETools.Codecs.BDLPCM/MPLSReader.cs b/CUETools.Codecs.BDLPCM/MPLSReader.cs index 3df666b..398ef57 100644 --- a/CUETools.Codecs.BDLPCM/MPLSReader.cs +++ b/CUETools.Codecs.BDLPCM/MPLSReader.cs @@ -6,18 +6,31 @@ using System.Globalization; namespace CUETools.Codecs.BDLPCM { - [AudioDecoderClass("cuetools", "mpls", 2)] - public class MPLSReader : IAudioSource + public class MPLSDecoderSettings : AudioDecoderSettings { - public unsafe MPLSReader(string path, Stream IO, ushort pid) + public override string Extension => "mpls"; + + public override string Name => "cuetools"; + + public override Type DecoderType => typeof(MPLSDecoder); + + public override int Priority => 2; + + public MPLSDecoderSettings() : base() { } + } + + [AudioDecoderClass(typeof(MPLSDecoderSettings))] + public class MPLSDecoder : IAudioSource + { + public unsafe MPLSDecoder(string path, Stream IO, ushort pid) : this(path, IO) { settings.Pid = pid; } - public unsafe MPLSReader(string path, Stream IO) + public unsafe MPLSDecoder(string path, Stream IO) { - settings = new BDLPCMReaderSettings(); + settings = new BDLPCMDecoderSettings(); _path = path; _IO = IO != null ? IO : new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 0x10000); int length = (int)_IO.Length; @@ -36,7 +49,7 @@ namespace CUETools.Codecs.BDLPCM void openEntries() { - readers = new List(); + readers = new List(); var pids = new List(); foreach (var item in hdr_m.play_item) foreach (var audio in item.audio) @@ -70,7 +83,7 @@ namespace CUETools.Codecs.BDLPCM var m2ts = System.IO.Path.Combine( System.IO.Path.Combine(parent.FullName, "STREAM"), item.clip_id + ".m2ts"); - var entry = new BDLPCMReader(m2ts, null, chosenPid); + var entry = new AudioDecoder(m2ts, null, chosenPid); readers.Add(entry); break; } @@ -437,10 +450,10 @@ namespace CUETools.Codecs.BDLPCM byte[] contents; AudioPCMConfig pcm; - List readers; - BDLPCMReader currentReader; + List readers; + AudioDecoder currentReader; MPLSHeader hdr_m; - BDLPCMReaderSettings settings; + BDLPCMDecoderSettings settings; } public struct MPLSPlaylistMark diff --git a/CUETools.Codecs.FLACCL/CUETools.Codecs.FLACCL.csproj b/CUETools.Codecs.FLACCL/CUETools.Codecs.FLACCL.csproj index 6e57998..e732c82 100644 --- a/CUETools.Codecs.FLACCL/CUETools.Codecs.FLACCL.csproj +++ b/CUETools.Codecs.FLACCL/CUETools.Codecs.FLACCL.csproj @@ -54,6 +54,9 @@ AllRules.ruleset + + ..\CUETools\packages\Newtonsoft.Json.11.0.1\lib\net40\Newtonsoft.Json.dll + @@ -110,6 +113,9 @@ true + + +