From 39c0c921ee387575fb7ef5036404d59effaf92dc Mon Sep 17 00:00:00 2001 From: hneemann Date: Sun, 10 Feb 2019 18:45:40 +0100 Subject: [PATCH 01/14] added a simple midi speaker --- .../de/neemann/digital/core/ModelEvent.java | 2 +- .../de/neemann/digital/core/element/Keys.java | 8 ++ .../de/neemann/digital/core/io/Speaker.java | 102 ++++++++++++++++++ .../digital/draw/library/ElementLibrary.java | 3 +- src/main/resources/lang/lang_de.xml | 9 ++ src/main/resources/lang/lang_en.xml | 9 ++ .../resources/dig/backtrack/AllComponents.dig | 65 ++++++++--- 7 files changed, 184 insertions(+), 14 deletions(-) create mode 100644 src/main/java/de/neemann/digital/core/io/Speaker.java diff --git a/src/main/java/de/neemann/digital/core/ModelEvent.java b/src/main/java/de/neemann/digital/core/ModelEvent.java index a73ab3948..1cbbdf42b 100644 --- a/src/main/java/de/neemann/digital/core/ModelEvent.java +++ b/src/main/java/de/neemann/digital/core/ModelEvent.java @@ -16,7 +16,7 @@ public enum ModelEvent { STARTED, /** - * The model had stopped. + * The model has stopped. */ STOPPED, diff --git a/src/main/java/de/neemann/digital/core/element/Keys.java b/src/main/java/de/neemann/digital/core/element/Keys.java index 036c6ee3e..fd2177896 100644 --- a/src/main/java/de/neemann/digital/core/element/Keys.java +++ b/src/main/java/de/neemann/digital/core/element/Keys.java @@ -735,4 +735,12 @@ public final class Keys { public static final Key RECT_RIGHT = new Key<>("RectRight", false).setSecondary(); + + /** + * Selects the midi channel + */ + public static final Key.KeyInteger MIDICHANNEL = + new Key.KeyInteger("midiChannel", 0) + .setMin(0) + .setMax(15); } diff --git a/src/main/java/de/neemann/digital/core/io/Speaker.java b/src/main/java/de/neemann/digital/core/io/Speaker.java new file mode 100644 index 000000000..b7805f61b --- /dev/null +++ b/src/main/java/de/neemann/digital/core/io/Speaker.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2019 Helmut Neemann. + * Use of this source code is governed by the GPL v3 license + * that can be found in the LICENSE file. + */ +package de.neemann.digital.core.io; + +import de.neemann.digital.core.*; +import de.neemann.digital.core.element.Element; +import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.ElementTypeDescription; +import de.neemann.digital.core.element.Keys; +import de.neemann.digital.lang.Lang; + +import javax.sound.midi.MidiChannel; +import javax.sound.midi.MidiSystem; +import javax.sound.midi.MidiUnavailableException; +import javax.sound.midi.Synthesizer; + +import static de.neemann.digital.core.element.PinInfo.input; + +/** + * The speaker. + */ +public class Speaker extends Node implements Element { + + /** + * The Speakers description + */ + public static final ElementTypeDescription DESCRIPTION + = new ElementTypeDescription(Speaker.class, input("N"), input("V"), input("en")) {} + .addAttribute(Keys.MIDICHANNEL) + .addAttribute(Keys.ROTATE); + + private final int chanNum; + private ObservableValue note; + private ObservableValue volume; + private ObservableValue enable; + private MidiChannel channel; + private boolean lastEn = false; + private int notePlaying; + + /** + * Creates a new instance + * + * @param attributes the elements attributes + */ + public Speaker(ElementAttributes attributes) { + chanNum = attributes.get(Keys.MIDICHANNEL); + } + + @Override + public void setInputs(ObservableValues inputs) throws NodeException { + note = inputs.get(0).checkBits(7, this, 0); + volume = inputs.get(1).checkBits(7, this, 1); + enable = inputs.get(2).checkBits(1, this, 2).addObserverToValue(this); + } + + @Override + public ObservableValues getOutputs() { + return ObservableValues.EMPTY_LIST; + } + + @Override + public void readInputs() throws NodeException { + boolean en = enable.getBool(); + if (channel != null) { + if (!lastEn && en) { + notePlaying = (int) note.getValue(); + int v = (int) volume.getValue(); + channel.noteOn(notePlaying, v); + } else if (lastEn && !en) { + channel.noteOff(notePlaying); + } + } + lastEn = en; + } + + @Override + public void writeOutputs() throws NodeException { + } + + @Override + public void init(Model model) throws NodeException { + try { + Synthesizer synth = MidiSystem.getSynthesizer(); + synth.open(); + MidiChannel[] channels = synth.getChannels(); + if (chanNum >= channels.length) + channel = channels[0]; + else + channel = channels[chanNum]; + + model.addObserver(event -> { + if (event.equals(ModelEvent.STOPPED)) + synth.close(); + }, ModelEvent.STOPPED); + } catch (MidiUnavailableException e) { + throw new NodeException(Lang.get("err_midiSystemNotAvailable"), e); + } + } +} diff --git a/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java b/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java index 2d2ea6697..8ebe578f1 100644 --- a/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java +++ b/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java @@ -140,7 +140,8 @@ public class ElementLibrary implements Iterable .add(DummyElement.DATADESCRIPTION) .add(RotEncoder.DESCRIPTION) .add(Keyboard.DESCRIPTION) - .add(Terminal.DESCRIPTION))) + .add(Terminal.DESCRIPTION) + .add(Speaker.DESCRIPTION))) .add(new LibraryNode(Lang.get("lib_wires")) .add(Ground.DESCRIPTION) .add(VDD.DESCRIPTION) diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index b2fd04060..d0dbb4b50 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -258,6 +258,11 @@ Über diesen Eingang werden die anzuzeigenden Daten an das Terminal weitergegeben. Ein High an diesem Eingang aktiviert den Takteingang. + Lautsprecher + Nutzt das MIDI-System, um Noten abzuspielen. + Note + Lautstärke + Wenn gesetzt, wird der Ton ausgegeben. @@ -993,6 +998,7 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Alle Speicher in welche Daten geladen werden sollen, benötigen die selbe Bitbreite. Wenn Programme in mehrere RAMs geladen werden sollen, müssen alle RAMs unterschiedliche Bezeichnungen haben. Die lexikalische Ordnung legt dann die Reihenfolge der RAMs fest. + Das MIDI-System ist nicht verfügbar. Adress-Bits Anzahl der Adress-Bits, die verwendet werden. @@ -1291,6 +1297,9 @@ Sind evtl. die Namen der Variablen nicht eindeutig? links mitte mitte mitte + MIDI-Kanal + Legt den MIDI-Kanal fest. + Leitung eingefügt. Aus Zwischenablage eingefügt. Wert ''{0}'' in Element ''{1}'' verändert. diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index f97303005..1e8ae4621 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -263,6 +263,11 @@ The data to write to the terminal A high at this input enables the clock input. + Speaker + Uses the MIDI system to play notes. + Note + Valume + When set, the note is played. @@ -986,6 +991,7 @@ All memories into which data are to be loaded require the same bit width. If programs are to be loaded into several RAMs, all RAMs must have different names. The lexical order then determines the order of the RAMs. + The MIDI-System is not available. Address Bits Number of address bits used. @@ -1279,6 +1285,9 @@ left center center center + MIDI channel + Selects the MIDI channel to use. + Inserted wire. Insert from clipboard. Value ''{0}'' in component ''{1}'' modified. diff --git a/src/test/resources/dig/backtrack/AllComponents.dig b/src/test/resources/dig/backtrack/AllComponents.dig index 81ae12d7a..786c4d7e3 100644 --- a/src/test/resources/dig/backtrack/AllComponents.dig +++ b/src/test/resources/dig/backtrack/AllComponents.dig @@ -579,6 +579,31 @@ + + Speaker + + + + + Const + + + Bits + 7 + + + + + + Const + + + Bits + 7 + + + + @@ -625,6 +650,10 @@ + + + + @@ -773,6 +802,10 @@ + + + + @@ -781,10 +814,6 @@ - - - - @@ -805,6 +834,10 @@ + + + + @@ -985,6 +1018,10 @@ + + + + @@ -1105,6 +1142,14 @@ + + + + + + + + @@ -1113,10 +1158,6 @@ - - - - @@ -1129,10 +1170,6 @@ - - - - @@ -1613,6 +1650,10 @@ + + + + From 9bc188d69e268fcfd1580aa363a41ce890d8030f Mon Sep 17 00:00:00 2001 From: hneemann Date: Sun, 10 Feb 2019 20:20:18 +0100 Subject: [PATCH 02/14] improved the MIDI component --- .../core/io/{Speaker.java => MIDI.java} | 50 +++++++++++-------- .../digital/draw/library/ElementLibrary.java | 2 +- src/main/resources/lang/lang_de.xml | 13 +++-- src/main/resources/lang/lang_en.xml | 13 +++-- .../resources/dig/backtrack/AllComponents.dig | 22 ++++++-- 5 files changed, 64 insertions(+), 36 deletions(-) rename src/main/java/de/neemann/digital/core/io/{Speaker.java => MIDI.java} (66%) diff --git a/src/main/java/de/neemann/digital/core/io/Speaker.java b/src/main/java/de/neemann/digital/core/io/MIDI.java similarity index 66% rename from src/main/java/de/neemann/digital/core/io/Speaker.java rename to src/main/java/de/neemann/digital/core/io/MIDI.java index b7805f61b..2defa0ea2 100644 --- a/src/main/java/de/neemann/digital/core/io/Speaker.java +++ b/src/main/java/de/neemann/digital/core/io/MIDI.java @@ -22,30 +22,34 @@ import static de.neemann.digital.core.element.PinInfo.input; /** * The speaker. */ -public class Speaker extends Node implements Element { +public class MIDI extends Node implements Element { /** * The Speakers description */ public static final ElementTypeDescription DESCRIPTION - = new ElementTypeDescription(Speaker.class, input("N"), input("V"), input("en")) {} + = new ElementTypeDescription(MIDI.class, + input("N"), + input("V"), + input("OnOff"), + input("C").setClock()) .addAttribute(Keys.MIDICHANNEL) .addAttribute(Keys.ROTATE); private final int chanNum; private ObservableValue note; private ObservableValue volume; - private ObservableValue enable; + private ObservableValue clock; + private ObservableValue onOff; private MidiChannel channel; - private boolean lastEn = false; - private int notePlaying; + private boolean lastCl = false; /** * Creates a new instance * * @param attributes the elements attributes */ - public Speaker(ElementAttributes attributes) { + public MIDI(ElementAttributes attributes) { chanNum = attributes.get(Keys.MIDICHANNEL); } @@ -53,7 +57,8 @@ public class Speaker extends Node implements Element { public void setInputs(ObservableValues inputs) throws NodeException { note = inputs.get(0).checkBits(7, this, 0); volume = inputs.get(1).checkBits(7, this, 1); - enable = inputs.get(2).checkBits(1, this, 2).addObserverToValue(this); + onOff = inputs.get(2).checkBits(1, this, 2); + clock = inputs.get(3).checkBits(1, this, 3).addObserverToValue(this); } @Override @@ -63,17 +68,16 @@ public class Speaker extends Node implements Element { @Override public void readInputs() throws NodeException { - boolean en = enable.getBool(); - if (channel != null) { - if (!lastEn && en) { - notePlaying = (int) note.getValue(); + boolean cl = clock.getBool(); + if (!lastCl && cl) { + int note = (int) this.note.getValue(); + if (onOff.getBool()) { int v = (int) volume.getValue(); - channel.noteOn(notePlaying, v); - } else if (lastEn && !en) { - channel.noteOff(notePlaying); - } + channel.noteOn(note, v); + } else + channel.noteOff(note); } - lastEn = en; + lastCl = cl; } @Override @@ -86,10 +90,16 @@ public class Speaker extends Node implements Element { Synthesizer synth = MidiSystem.getSynthesizer(); synth.open(); MidiChannel[] channels = synth.getChannels(); - if (chanNum >= channels.length) - channel = channels[0]; - else - channel = channels[chanNum]; + if (chanNum >= channels.length) { + synth.close(); + throw new NodeException(Lang.get("err_midiChannel_N_NotAvailable", chanNum)); + } + + channel = channels[chanNum]; + if (channel == null) { + synth.close(); + throw new NodeException(Lang.get("err_midiChannel_N_NotAvailable", chanNum)); + } model.addObserver(event -> { if (event.equals(ModelEvent.STOPPED)) diff --git a/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java b/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java index 8ebe578f1..ee47e90ae 100644 --- a/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java +++ b/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java @@ -141,7 +141,7 @@ public class ElementLibrary implements Iterable .add(RotEncoder.DESCRIPTION) .add(Keyboard.DESCRIPTION) .add(Terminal.DESCRIPTION) - .add(Speaker.DESCRIPTION))) + .add(MIDI.DESCRIPTION))) .add(new LibraryNode(Lang.get("lib_wires")) .add(Ground.DESCRIPTION) .add(VDD.DESCRIPTION) diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index d0dbb4b50..465ba9323 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -258,11 +258,13 @@ Über diesen Eingang werden die anzuzeigenden Daten an das Terminal weitergegeben. Ein High an diesem Eingang aktiviert den Takteingang. - Lautsprecher - Nutzt das MIDI-System, um Noten abzuspielen. - Note - Lautstärke - Wenn gesetzt, wird der Ton ausgegeben. + MIDI + Nutzt das MIDI-System, um Noten abzuspielen. + Note + Lautstärke + Wenn gesetzt, enspricht das dem Drücken eine Keyboard-Taste (key down). + Wenn nicht gesetzt, entspricht das einem Loslassen der Taste (key up). + Takteingang @@ -999,6 +1001,7 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Wenn Programme in mehrere RAMs geladen werden sollen, müssen alle RAMs unterschiedliche Bezeichnungen haben. Die lexikalische Ordnung legt dann die Reihenfolge der RAMs fest. Das MIDI-System ist nicht verfügbar. + Der MIDI-Kanal {0} ist nicht verfügbar. Adress-Bits Anzahl der Adress-Bits, die verwendet werden. diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 1e8ae4621..50e489782 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -263,11 +263,13 @@ The data to write to the terminal A high at this input enables the clock input. - Speaker - Uses the MIDI system to play notes. - Note - Valume - When set, the note is played. + MIDI + Uses the MIDI system to play notes. + Note + Volume + If set, this translates to pressing a keyboard key (key down event), + if not set, this translates to releasing the key (key up event). + Clock @@ -992,6 +994,7 @@ If programs are to be loaded into several RAMs, all RAMs must have different names. The lexical order then determines the order of the RAMs. The MIDI-System is not available. + The MIDI channel {0} is not available. Address Bits Number of address bits used. diff --git a/src/test/resources/dig/backtrack/AllComponents.dig b/src/test/resources/dig/backtrack/AllComponents.dig index 786c4d7e3..eba5835d4 100644 --- a/src/test/resources/dig/backtrack/AllComponents.dig +++ b/src/test/resources/dig/backtrack/AllComponents.dig @@ -579,11 +579,6 @@ - - Speaker - - - Const @@ -604,6 +599,11 @@ + + MIDI + + + @@ -836,6 +836,10 @@ + + + + @@ -1006,6 +1010,10 @@ + + + + @@ -1498,6 +1506,10 @@ + + + + From c6bf863b4bbd0278bab305071a015a4459c63596 Mon Sep 17 00:00:00 2001 From: hneemann Date: Sun, 10 Feb 2019 20:38:08 +0100 Subject: [PATCH 03/14] improved the MIDI component --- distribution/Assembly.xml | 7 + src/main/dig/misc/MIDIexample.dig | 235 ++++++++++++++++++ .../digital/integration/TestExamples.java | 2 +- 3 files changed, 243 insertions(+), 1 deletion(-) create mode 100644 src/main/dig/misc/MIDIexample.dig diff --git a/distribution/Assembly.xml b/distribution/Assembly.xml index 48e9fee90..81f836273 100644 --- a/distribution/Assembly.xml +++ b/distribution/Assembly.xml @@ -105,6 +105,13 @@ *.dig + + ${basedir}/src/main/dig/misc + /examples/misc/ + + *.dig + + ${basedir}/src/main/dig/hdl /examples/hdl/ diff --git a/src/main/dig/misc/MIDIexample.dig b/src/main/dig/misc/MIDIexample.dig new file mode 100644 index 000000000..de4c449fc --- /dev/null +++ b/src/main/dig/misc/MIDIexample.dig @@ -0,0 +1,235 @@ + + + 1 + + + + In + + + Label + Vol + + + Bits + 7 + + + InDefault + + + + + + + Clock + + + runRealTime + true + + + Label + C + + + Frequency + 15 + + + + + + Counter + + + Bits + 6 + + + + + + Ground + + + + + Add + + + Bits + 7 + + + + + + Ground + + + + + Const + + + Value + 30 + + + Bits + 7 + + + intFormat + dec + + + + + + Splitter + + + Input Splitting + 6,1 + + + Output Splitting + 7 + + + + + + Const + + + Value + 0 + + + + + + MIDI + + + + + D_FF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/de/neemann/digital/integration/TestExamples.java b/src/test/java/de/neemann/digital/integration/TestExamples.java index 9e0311838..b268132fe 100644 --- a/src/test/java/de/neemann/digital/integration/TestExamples.java +++ b/src/test/java/de/neemann/digital/integration/TestExamples.java @@ -32,7 +32,7 @@ public class TestExamples extends TestCase { */ public void testDistExamples() throws Exception { File examples = new File(Resources.getRoot().getParentFile().getParentFile(), "/main/dig"); - assertEquals(248, new FileScanner(this::check).scan(examples)); + assertEquals(249, new FileScanner(this::check).scan(examples)); assertEquals(170, testCasesInFiles); } From 1590790a90d499395474747e6c381c024d3989d8 Mon Sep 17 00:00:00 2001 From: hneemann Date: Sun, 10 Feb 2019 21:23:27 +0100 Subject: [PATCH 04/14] typo --- src/main/resources/lang/lang_de.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index 465ba9323..edaba7482 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -262,7 +262,7 @@ Nutzt das MIDI-System, um Noten abzuspielen. Note Lautstärke - Wenn gesetzt, enspricht das dem Drücken eine Keyboard-Taste (key down). + Wenn gesetzt, enspricht das dem Drücken einer Keyboard-Taste (key down). Wenn nicht gesetzt, entspricht das einem Loslassen der Taste (key up). Takteingang From b4d30bfe2e98883b674a4fe205a1c2274ddb2900 Mon Sep 17 00:00:00 2001 From: hneemann Date: Mon, 11 Feb 2019 14:03:12 +0100 Subject: [PATCH 05/14] improved the midi component --- .../de/neemann/digital/core/element/Keys.java | 10 +- .../java/de/neemann/digital/core/io/MIDI.java | 33 +---- .../neemann/digital/core/io/MIDIHelper.java | 136 ++++++++++++++++++ .../digital/gui/components/EditorFactory.java | 34 +++++ src/main/resources/lang/lang_de.xml | 3 + src/main/resources/lang/lang_en.xml | 3 + 6 files changed, 190 insertions(+), 29 deletions(-) create mode 100644 src/main/java/de/neemann/digital/core/io/MIDIHelper.java diff --git a/src/main/java/de/neemann/digital/core/element/Keys.java b/src/main/java/de/neemann/digital/core/element/Keys.java index fd2177896..b5a71a87b 100644 --- a/src/main/java/de/neemann/digital/core/element/Keys.java +++ b/src/main/java/de/neemann/digital/core/element/Keys.java @@ -741,6 +741,12 @@ public final class Keys { */ public static final Key.KeyInteger MIDICHANNEL = new Key.KeyInteger("midiChannel", 0) - .setMin(0) - .setMax(15); + .setMin(0) + .setMax(15); + + /** + * Selects the midi channel + */ + public static final Key MIDIINSTRUMENT = + new Key<>("midiInstrument", ""); } diff --git a/src/main/java/de/neemann/digital/core/io/MIDI.java b/src/main/java/de/neemann/digital/core/io/MIDI.java index 2defa0ea2..96d232887 100644 --- a/src/main/java/de/neemann/digital/core/io/MIDI.java +++ b/src/main/java/de/neemann/digital/core/io/MIDI.java @@ -10,12 +10,8 @@ import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.ElementTypeDescription; import de.neemann.digital.core.element.Keys; -import de.neemann.digital.lang.Lang; import javax.sound.midi.MidiChannel; -import javax.sound.midi.MidiSystem; -import javax.sound.midi.MidiUnavailableException; -import javax.sound.midi.Synthesizer; import static de.neemann.digital.core.element.PinInfo.input; @@ -33,10 +29,12 @@ public class MIDI extends Node implements Element { input("V"), input("OnOff"), input("C").setClock()) + .addAttribute(Keys.ROTATE) .addAttribute(Keys.MIDICHANNEL) - .addAttribute(Keys.ROTATE); + .addAttribute(Keys.MIDIINSTRUMENT); private final int chanNum; + private final String instrument; private ObservableValue note; private ObservableValue volume; private ObservableValue clock; @@ -51,6 +49,7 @@ public class MIDI extends Node implements Element { */ public MIDI(ElementAttributes attributes) { chanNum = attributes.get(Keys.MIDICHANNEL); + instrument = attributes.get(Keys.MIDIINSTRUMENT); } @Override @@ -86,27 +85,7 @@ public class MIDI extends Node implements Element { @Override public void init(Model model) throws NodeException { - try { - Synthesizer synth = MidiSystem.getSynthesizer(); - synth.open(); - MidiChannel[] channels = synth.getChannels(); - if (chanNum >= channels.length) { - synth.close(); - throw new NodeException(Lang.get("err_midiChannel_N_NotAvailable", chanNum)); - } - - channel = channels[chanNum]; - if (channel == null) { - synth.close(); - throw new NodeException(Lang.get("err_midiChannel_N_NotAvailable", chanNum)); - } - - model.addObserver(event -> { - if (event.equals(ModelEvent.STOPPED)) - synth.close(); - }, ModelEvent.STOPPED); - } catch (MidiUnavailableException e) { - throw new NodeException(Lang.get("err_midiSystemNotAvailable"), e); - } + MIDIHelper.getInstance().open(model); + channel = MIDIHelper.getInstance().getChannel(chanNum, instrument); } } diff --git a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java new file mode 100644 index 000000000..d7a392de1 --- /dev/null +++ b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java @@ -0,0 +1,136 @@ +package de.neemann.digital.core.io; + +import de.neemann.digital.core.Model; +import de.neemann.digital.core.ModelEvent; +import de.neemann.digital.core.NodeException; +import de.neemann.digital.lang.Lang; + +import javax.sound.midi.*; +import java.util.ArrayList; +import java.util.TreeMap; + +/** + * Helper for MIDI functions + */ +public final class MIDIHelper { + private static MIDIHelper ourInstance = new MIDIHelper(); + + /** + * @return the MIDIHelper + */ + public static MIDIHelper getInstance() { + return ourInstance; + } + + private Synthesizer synthesizer; + private boolean isOpen; + private TreeMap instrumentMap; + + private MIDIHelper() { + } + + private Synthesizer getSynthesizer() throws NodeException { + if (synthesizer == null) { + try { + synthesizer = MidiSystem.getSynthesizer(); + if (synthesizer == null) + throw new NodeException(Lang.get("err_midiSystemNotAvailable")); + } catch (MidiUnavailableException e) { + throw new NodeException(Lang.get("err_midiSystemNotAvailable"), e); + } + } + return synthesizer; + } + + /** + * Opens the synthesizer + * + * @param model the mode used. If the model is closed also the synthesizer is closed + * @throws NodeException NodeException + */ + public void open(Model model) throws NodeException { + if (!isOpen) { + try { + getSynthesizer().open(); + } catch (MidiUnavailableException e) { + throw new NodeException(Lang.get("err_midiSystemNotAvailable"), e); + } + isOpen = true; + + model.addObserver(event -> { + if (event.equals(ModelEvent.STOPPED)) + close(); + }, ModelEvent.STOPPED); + } + } + + private void close() { + if (!isOpen) { + synthesizer.close(); + synthesizer = null; + } + } + + /** + * Creates the channel to use + * + * @param num the channel number + * @param instrument the instrument to use + * @return the channel + * @throws NodeException NodeException + */ + public MidiChannel getChannel(int num, String instrument) throws NodeException { + Instrument instr = null; + if (!instrument.isEmpty()) { + instr = getInstrument(instrument); + + if (!getSynthesizer().loadInstrument(instr)) + throw new NodeException(Lang.get("err_midiInstrument_N_NotAvailable", instrument)); + } + + MidiChannel[] channels = getSynthesizer().getChannels(); + if (num >= channels.length) { + close(); + throw new NodeException(Lang.get("err_midiChannel_N_NotAvailable", num)); + } + + MidiChannel channel = channels[num]; + if (channel == null) { + close(); + throw new NodeException(Lang.get("err_midiChannel_N_NotAvailable", num)); + } + + if (instr != null) { + final Patch patch = instr.getPatch(); + channel.programChange(patch.getBank(), patch.getProgram()); + } + + return channel; + } + + /** + * @return the list of available instruments + * @throws NodeException NodeException + */ + public String[] getInstruments() throws NodeException { + return new ArrayList<>(getInstumentMap().keySet()).toArray(new String[0]); + } + + private Instrument getInstrument(String instrument) throws NodeException { + Instrument i = getInstumentMap().get(instrument); + if (i == null) + throw new NodeException(Lang.get("err_midiInstrument_N_NotAvailable", instrument)); + return i; + } + + private TreeMap getInstumentMap() throws NodeException { + if (instrumentMap == null) { + instrumentMap = new TreeMap<>(); + for (Instrument i : getSynthesizer().getAvailableInstruments()) { + instrumentMap.put(i.getName(), i); + } + } + return instrumentMap; + } + +} diff --git a/src/main/java/de/neemann/digital/gui/components/EditorFactory.java b/src/main/java/de/neemann/digital/gui/components/EditorFactory.java index 36f3a56bd..838352f6c 100644 --- a/src/main/java/de/neemann/digital/gui/components/EditorFactory.java +++ b/src/main/java/de/neemann/digital/gui/components/EditorFactory.java @@ -13,6 +13,7 @@ import de.neemann.digital.core.element.*; import de.neemann.digital.core.extern.Application; import de.neemann.digital.core.extern.PortDefinition; import de.neemann.digital.core.io.InValue; +import de.neemann.digital.core.io.MIDIHelper; import de.neemann.digital.core.memory.DataField; import de.neemann.digital.core.memory.ROM; import de.neemann.digital.core.memory.importer.Importer; @@ -94,6 +95,9 @@ public final class EditorFactory { * @return the editor */ public Editor create(Key key, T value) { + if (key == Keys.MIDIINSTRUMENT) + return (Editor) new MidiInstrumentEditor(value.toString()); + Class fac = map.get(key.getValueClass()); if (fac == null) throw new RuntimeException("no editor found for " + key.getValueClass().getSimpleName()); @@ -1037,4 +1041,34 @@ public final class EditorFactory { romManager = value; } } + + private static final class MidiInstrumentEditor extends LabelEditor { + private JComboBox comb; + + private MidiInstrumentEditor(String instrument) { + String[] instruments; + try { + instruments = MIDIHelper.getInstance().getInstruments(); + } catch (NodeException e) { + instruments = new String[]{"MIDI not available"}; + } + comb = new JComboBox<>(instruments); + comb.setSelectedItem(instrument); + } + + @Override + protected JComponent getComponent(ElementAttributes elementAttributes) { + return comb; + } + + @Override + public String getValue() { + return (String) comb.getSelectedItem(); + } + + @Override + public void setValue(String value) { + comb.setSelectedItem(value); + } + } } diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index edaba7482..ac1aeca50 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -1002,6 +1002,7 @@ Sind evtl. die Namen der Variablen nicht eindeutig? unterschiedliche Bezeichnungen haben. Die lexikalische Ordnung legt dann die Reihenfolge der RAMs fest. Das MIDI-System ist nicht verfügbar. Der MIDI-Kanal {0} ist nicht verfügbar. + Das MIDI-Instrument {0} ist nicht verfügbar. Adress-Bits Anzahl der Adress-Bits, die verwendet werden. @@ -1302,6 +1303,8 @@ Sind evtl. die Namen der Variablen nicht eindeutig? MIDI-Kanal Legt den MIDI-Kanal fest. + MIDI-Instrument + Das MIDI-Instrument, welches verwendet werden soll. Leitung eingefügt. Aus Zwischenablage eingefügt. diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 50e489782..5c7997b24 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -995,6 +995,7 @@ different names. The lexical order then determines the order of the RAMs. The MIDI-System is not available. The MIDI channel {0} is not available. + The MIDI instrument {0} is not available. Address Bits Number of address bits used. @@ -1290,6 +1291,8 @@ MIDI channel Selects the MIDI channel to use. + MIDI instrument + The MIDI instrument to use. Inserted wire. Insert from clipboard. From 3016cd728781f03880a34306d9164ac664d51879 Mon Sep 17 00:00:00 2001 From: hneemann Date: Mon, 11 Feb 2019 14:18:38 +0100 Subject: [PATCH 06/14] added a missing license notice --- src/main/java/de/neemann/digital/core/io/MIDIHelper.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java index d7a392de1..291b4c63f 100644 --- a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java +++ b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2019 Helmut Neemann. + * Use of this source code is governed by the GPL v3 license + * that can be found in the LICENSE file. + */ package de.neemann.digital.core.io; import de.neemann.digital.core.Model; From 2dfc84ffe107a8806baeece15f0786ed3f110f08 Mon Sep 17 00:00:00 2001 From: hneemann Date: Mon, 11 Feb 2019 14:39:08 +0100 Subject: [PATCH 07/14] fixed a bug closing the synthesizer --- src/main/java/de/neemann/digital/core/io/MIDIHelper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java index 291b4c63f..d77a8633a 100644 --- a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java +++ b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java @@ -70,9 +70,9 @@ public final class MIDIHelper { } private void close() { - if (!isOpen) { + if (isOpen) { synthesizer.close(); - synthesizer = null; + isOpen = false; } } From 57593c1f6a85c8cb5029621b01245760eff04519 Mon Sep 17 00:00:00 2001 From: hneemann Date: Mon, 11 Feb 2019 15:28:15 +0100 Subject: [PATCH 08/14] testcases are allowed to run without MIDI interface available. --- .../neemann/digital/core/io/MIDIHelper.java | 216 +++++++++++++++++- 1 file changed, 211 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java index d77a8633a..b7a9fb1d0 100644 --- a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java +++ b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java @@ -9,6 +9,8 @@ import de.neemann.digital.core.Model; import de.neemann.digital.core.ModelEvent; import de.neemann.digital.core.NodeException; import de.neemann.digital.lang.Lang; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.sound.midi.*; import java.util.ArrayList; @@ -18,6 +20,7 @@ import java.util.TreeMap; * Helper for MIDI functions */ public final class MIDIHelper { + private static final Logger LOGGER = LoggerFactory.getLogger(MIDIHelper.class); private static MIDIHelper ourInstance = new MIDIHelper(); /** @@ -27,19 +30,20 @@ public final class MIDIHelper { return ourInstance; } - private Synthesizer synthesizer; + private SynthesizerInterface synthesizer; private boolean isOpen; private TreeMap instrumentMap; private MIDIHelper() { } - private Synthesizer getSynthesizer() throws NodeException { + private SynthesizerInterface getSynthesizer() throws NodeException { if (synthesizer == null) { try { - synthesizer = MidiSystem.getSynthesizer(); - if (synthesizer == null) + final Synthesizer synth = MidiSystem.getSynthesizer(); + if (synth == null) throw new NodeException(Lang.get("err_midiSystemNotAvailable")); + synthesizer = new RealSynthesizer(synth); } catch (MidiUnavailableException e) { throw new NodeException(Lang.get("err_midiSystemNotAvailable"), e); } @@ -58,8 +62,14 @@ public final class MIDIHelper { try { getSynthesizer().open(); } catch (MidiUnavailableException e) { - throw new NodeException(Lang.get("err_midiSystemNotAvailable"), e); + if (System.getProperty("testdata") == null) { + throw new NodeException(Lang.get("err_midiSystemNotAvailable"), e); + } else { + LOGGER.info("Use fake MIDI interface!"); + synthesizer = new SynthesizerMock(); + } } + isOpen = true; model.addObserver(event -> { @@ -138,4 +148,200 @@ public final class MIDIHelper { return instrumentMap; } + private interface SynthesizerInterface { + void open() throws MidiUnavailableException; + + void close(); + + boolean loadInstrument(Instrument instr); + + Instrument[] getAvailableInstruments(); + + MidiChannel[] getChannels(); + } + + private static final class RealSynthesizer implements SynthesizerInterface { + private final Synthesizer synthesizer; + + private RealSynthesizer(Synthesizer synthesizer) { + this.synthesizer = synthesizer; + } + + @Override + public void open() throws MidiUnavailableException { + synthesizer.open(); + } + + @Override + public void close() { + synthesizer.close(); + } + + @Override + public boolean loadInstrument(Instrument instr) { + return synthesizer.loadInstrument(instr); + } + + @Override + public Instrument[] getAvailableInstruments() { + return synthesizer.getAvailableInstruments(); + } + + @Override + public MidiChannel[] getChannels() { + return synthesizer.getChannels(); + } + } + + private static final class SynthesizerMock implements SynthesizerInterface { + @Override + public void open() throws MidiUnavailableException { + } + + @Override + public void close() { + } + + @Override + public boolean loadInstrument(Instrument instr) { + return true; + } + + @Override + public Instrument[] getAvailableInstruments() { + return new Instrument[0]; + } + + @Override + public MidiChannel[] getChannels() { + return new MidiChannel[]{new MidiChannel() { + @Override + public void noteOn(int i, int i1) { + } + + @Override + public void noteOff(int i, int i1) { + } + + @Override + public void noteOff(int i) { + } + + @Override + public void setPolyPressure(int i, int i1) { + } + + @Override + public int getPolyPressure(int i) { + return 0; + } + + @Override + public void setChannelPressure(int i) { + + } + + @Override + public int getChannelPressure() { + return 0; + } + + @Override + public void controlChange(int i, int i1) { + + } + + @Override + public int getController(int i) { + return 0; + } + + @Override + public void programChange(int i) { + + } + + @Override + public void programChange(int i, int i1) { + + } + + @Override + public int getProgram() { + return 0; + } + + @Override + public void setPitchBend(int i) { + + } + + @Override + public int getPitchBend() { + return 0; + } + + @Override + public void resetAllControllers() { + + } + + @Override + public void allNotesOff() { + + } + + @Override + public void allSoundOff() { + + } + + @Override + public boolean localControl(boolean b) { + return false; + } + + @Override + public void setMono(boolean b) { + + } + + @Override + public boolean getMono() { + return false; + } + + @Override + public void setOmni(boolean b) { + + } + + @Override + public boolean getOmni() { + return false; + } + + @Override + public void setMute(boolean b) { + + } + + @Override + public boolean getMute() { + return false; + } + + @Override + public void setSolo(boolean b) { + + } + + @Override + public boolean getSolo() { + return false; + } + }}; + } + } + } From dbdb6f79a0a2f7e3788cdad06e932fa1257b183d Mon Sep 17 00:00:00 2001 From: hneemann Date: Mon, 11 Feb 2019 23:13:48 +0100 Subject: [PATCH 09/14] Allow MIDI program change --- src/main/dig/misc/BillieJean.dig | 2698 +++++++++++++++++ src/main/dig/misc/MIDIexample.dig | 36 +- .../de/neemann/digital/core/element/Keys.java | 16 +- .../java/de/neemann/digital/core/io/MIDI.java | 66 +- .../digital/gui/components/EditorFactory.java | 2 +- src/main/resources/lang/lang_de.xml | 5 + src/main/resources/lang/lang_en.xml | 5 + .../digital/integration/TestExamples.java | 2 +- .../resources/dig/backtrack/AllComponents.dig | 8 + 9 files changed, 2800 insertions(+), 38 deletions(-) create mode 100644 src/main/dig/misc/BillieJean.dig diff --git a/src/main/dig/misc/BillieJean.dig b/src/main/dig/misc/BillieJean.dig new file mode 100644 index 000000000..1b24b28f5 --- /dev/null +++ b/src/main/dig/misc/BillieJean.dig @@ -0,0 +1,2698 @@ + + + 1 + + + + Clock + + + runRealTime + true + + + Label + C + + + Frequency + 400 + + + + + + MIDI + + + midiProgChange + true + + + midiInstrument + Accordion + + + + + + ROM + + + AddrBits + 14 + + + Bits + 36 + + + Data + fc000,1060035,10e4005,116801b,11ec031,1270007,12f4032,1378023,e8380bc,e8980bc,1003f4a4, +100bdb2a,1061db2a,1069f4a4,1303e2aa,1361e2aa,1603f8a8,160bd8aa,1661d8aa,1669f8a8, +1903e7aa,1961e7aa,1c03f4a4,1c0bd72a,1c61d72a,1c69f4a4,1f03e52a,1f61e52a,2203f8a8, +220bd72a,2261d72a,2269f8a8,2503e7aa,2561e7aa,2803f4a4,280bd52a,2861d52a,2869f4a4, +2b03e2aa,2b61e2aa,2e03f828,2e0bdb2a,2e61db2a,2e69f828,3103e52a,3161e52a,3403f4a4, +340bdcaa,3461dcaa,3469f4a4,3703e2aa,3761e2aa,3a03f8a8,3a0bdcaa,3a61dcaa,3a69f8a8, +3d03e7aa,3d61e7aa,40033a9e,400bbfaa,4013f4a4,401bdb2a,4023df52,4061df52,4069db2a, +4071f4a4,4191bfaa,43013a9e,430bbfa5,4313e2aa,431bdbd2,4361dbd2,4369e2aa,44a1bfa5, +4603bfa8,460bf8a8,4613d8aa,461bdbd2,4661dbd2,4669d8aa,4671f8a8,47b9bfa8,49033a9e, +490bbfaa,4913e7aa,491bd9d2,4961d9d2,4969e7aa,4a99bfaa,4c013a9e,4c0bbfa8,4c13f4a4, +4c1bd72a,4c23dd52,4c61dd52,4c69d72a,4c71f4a4,4dc1bfa8,4f03bfa5,4f0be52a,4f13d7d2, +4f61d7d2,4f69e52a,5099bfa5,5203bfa3,520bf8a8,5213d72a,521bdf52,5261df52,5269d72a, +5271f8a8,53e9bfa3,5503bfa5,550be7aa,5513dd52,5561dd52,5569e7aa,56b1bfa5,58033a9e, +580bbfaa,5813f4a4,581bd52a,5823dc52,5861dc52,5869d52a,5871f4a4,5979bfaa,5b013a9e, +5b0bbfa5,5b13e2aa,5b1bd752,5b61d752,5b69e2aa,5c81bfa5,5e03bfa8,5e0bf828,5e13db2a, +5e1be052,5e61e052,5e69db2a,5e71f828,5fa9bfa8,61033a9e,610bbfaa,6113e52a,611bdad2, +6161dad2,6169e52a,6271bfaa,64013a9e,640bbfa8,6413f4a4,641bdcaa,6423df52,6461df52, +6469dcaa,6471f4a4,65d9bfa8,6703bfa5,670be2aa,6713de52,6761de52,6769e2aa,68b1bfa5, +6a03bfa3,6a0bf8a8,6a13dcaa,6a1be252,6a61e252,6a69dcaa,6a71f8a8,6c09bfa3,6d03bfa5, +6d0be7aa,6d13d952,6d61d952,6d69e7aa,6e99bfa5,70033a9e,700bbfaa,7013f4a4,701bdb2a, +7023e252,7061e252,7069db2a,7071f4a4,7191bfaa,73013a9e,730bbfa5,7313e2aa,731bdd52, +7361dd52,7369e2aa,74a1bfa5,7603bfa8,760bf8a8,7613d8aa,761be152,7661e152,7669d8aa, +7671f8a8,77b9bfa8,79033a9e,790bbfaa,7913e7aa,791bde52,7961de52,7969e7aa,7a99bfaa, +7c013a9e,7c0bbfa8,7c13f4a4,7c1bd72a,7c23dc52,7c61dc52,7c69d72a,7c71f4a4,7dc1bfa8, +7f03bfa5,7f0be52a,7f13de52,7f61de52,7f69e52a,8099bfa5,8203bfa3,820bf8a8,8213d72a, +821be052,8261e052,8269d72a,8271f8a8,83e9bfa3,8503bfa5,850be7aa,8513f245,851be052, +8561e052,8569f245,8571e7aa,86b1bfa5,88033a9e,880bbfaa,8813f4a4,881bd52a,8823f8c5, +882be152,8861e152,8869f8c5,8871d52a,8879f4a4,8979bfaa,8b013a9e,8b0bbfa5,8b13e2aa, +8b1bfac5,8b23e052,8b61e052,8b69fac5,8b71e2aa,8c81bfa5,8e03bfa8,8e0bf828,8e13db2a, +8e1beec5,8e23df52,8e61df52,8e69eec5,8e71db2a,8e79f828,8fa9bfa8,91033a9e,910bbfaa, +9113e52a,911be052,9123e845,9161e052,9169e52a,9181e845,9271bfaa,94013a9e,940bbfa8, +9413f4a4,941bdcaa,9423e052,9461e052,9469dcaa,9471f4a4,95d9bfa8,9703bfa5,970be2aa, +9713e252,9761e252,9769e2aa,98b1bfa5,9a03bfa3,9a0bf8a8,9a13dcaa,9a1bdf52,9a61df52, +9a69dcaa,9a71f8a8,9c09bfa3,9d03bfa5,9d0be7aa,9d13e052,9d61e052,9d69e7aa,9e99bfa5, +a0033a9e,a00bbfaa,a013f4a4,a01bdb2a,a023df52,a061df52,a069db2a,a071f4a4,a191bfaa, +a3013a9e,a30bbfa5,a313e2aa,a31bdbd2,a361dbd2,a369e2aa,a4a1bfa5,a603bfa8,a60bf8a8, +a613d8aa,a61bdbd2,a661dbd2,a669d8aa,a671f8a8,a7b9bfa8,a9033a9e,a90bbfaa,a913e7aa, +a91bd9d2,a961d9d2,a969e7aa,aa99bfaa,ac013a9e,ac0bbfa8,ac13f4a4,ac1bd72a,ac23dd52, +ac61dd52,ac69d72a,ac71f4a4,adc1bfa8,af03bfa5,af0be52a,af13d7d2,af61d7d2,af69e52a, +b099bfa5,b203bfa3,b20bf8a8,b213d72a,b21bdf52,b261df52,b269d72a,b271f8a8,b3e9bfa3, +b503bfa5,b50be7aa,b513dd52,b561dd52,b569e7aa,b6b1bfa5,b8033a9e,b80bbfaa,b813f4a4, +b81bd52a,b823dc52,b861dc52,b869d52a,b871f4a4,b979bfaa,bb013a9e,bb0bbfa5,bb13e2aa, +bb1bd752,bb61d752,bb69e2aa,bc81bfa5,be03bfa8,be0bf828,be13db2a,be1be052,be61e052, +be69db2a,be71f828,bfa9bfa8,c1033a9e,c10bbfaa,c113e52a,c11bdad2,c161dad2,c169e52a, +c271bfaa,c4013a9e,c40bbfa8,c413f4a4,c41bdcaa,c423df52,c461df52,c469dcaa,c471f4a4, +c5d9bfa8,c703bfa5,c70be2aa,c713de52,c761de52,c769e2aa,c8b1bfa5,ca03bfa3,ca0bf8a8, +ca13dcaa,ca1be252,ca61e252,ca69dcaa,ca71f8a8,cc09bfa3,cd03bfa5,cd0be7aa,cd13d952, +cd61d952,cd69e7aa,ce99bfa5,d0033a9e,d00bbfaa,d013f4a4,d01bdb2a,d023e252,d061e252, +d069db2a,d071f4a4,d191bfaa,d3013a9e,d30bbfa5,d313e2aa,d31bdd52,d361dd52,d369e2aa, +d4a1bfa5,d603bfa8,d60bf8a8,d613d8aa,d61be152,d661e152,d669d8aa,d671f8a8,d7b9bfa8, +d9033a9e,d90bbfaa,d913e7aa,d91bde52,d961de52,d969e7aa,da99bfaa,dc013a9e,dc0bbfa8, +dc13f4a4,dc1bd72a,dc23dc52,dc61dc52,dc69d72a,dc71f4a4,ddc1bfa8,df03bfa5,df0be52a, +df13de52,df61de52,df69e52a,e099bfa5,e203bfa3,e20bf8a8,e213d72a,e21be052,e261e052, +e269d72a,e271f8a8,e3e9bfa3,e503bfa5,e50be7aa,e513e052,e561e052,e569e7aa,e679bfa5, +e8033a9e,e80b7039,e813703d,e81b7042,e823bfaa,e82bf4a4,e833d52a,e83be152,e861e152, +e869d52a,e871f4a4,e979bfaa,e9817042,e989703d,e9917039,eb013a9e,eb0bbfa5,eb13e2aa, +eb1be052,eb61e052,eb69e2aa,ec81bfa5,ee03bfa8,ee0bf828,ee13db2a,ee1bdf52,ee61df52, +ee69db2a,ee71f828,efa9bfa8,f1033a9e,f10b703b,f113703f,f11b7044,f123bfaa,f12be52a, +f133e052,f161e052,f169e52a,f271bfaa,f2817044,f289703f,f291703b,f4013a9e,f40bbfa8, +f413f4a4,f41bdcaa,f423e052,f461e052,f469dcaa,f471f4a4,f5d9bfa8,f703bfa5,f70be2aa, +f713e252,f761e252,f769e2aa,f8b1bfa5,fa03bfa3,fa0bf8a8,fa13dcaa,fa1bdf52,fa61df52, +fa69dcaa,fa71f8a8,fc09bfa3,fd03bfa5,fd0be7aa,fd13e052,fd61e052,fd69e7aa,fe99bfa5, +100033a9e,1000b703d,100137040,1001b7045,10023bfaa,1002bf4a4,10033db2a,1003bdf52,10061df52, +10069db2a,10071f4a4,101817045,101897040,10191703d,10199bfaa,103013a9e,1030bbfa5,10313e2aa, +1031bdbd2,10361dbd2,10369e2aa,104a1bfa5,10603bfa8,1060bf8a8,10613d8aa,1061bdbd2,10661dbd2, +10669d8aa,10671f8a8,107b9bfa8,109033a9e,1090b703b,10913703f,1091b7044,10923bfaa,1092be7aa, +10933d9d2,10961d9d2,10969e7aa,10a817044,10a89703f,10a91703b,10a99bfaa,10c013a9e,10c0bbfa8, +10c13f4a4,10c1bd72a,10c23dd52,10c61dd52,10c69d72a,10c71f4a4,10dc1bfa8,10f03bfa5,10f0be52a, +10f13d7d2,10f61d7d2,10f69e52a,11099bfa5,11203bfa3,1120bf8a8,11213d72a,1121bdf52,11261df52, +11269d72a,11271f8a8,113e9bfa3,11503bfa5,1150be7aa,11513dd52,11561dd52,11569e7aa,116b1bfa5, +118033a9e,1180b7039,11813703d,1181b7042,11823bfaa,1182bf4a4,11833d52a,1183bdc52,11861dc52, +11869d52a,11871f4a4,11979bfaa,119817042,11989703d,119917039,11b013a9e,11b0bbfa5,11b13e2aa, +11b1bd752,11b61d752,11b69e2aa,11c81bfa5,11e03bfa8,11e0bf828,11e13db2a,11e1be052,11e61e052, +11e69db2a,11e71f828,11fa9bfa8,121033a9e,1210b703b,12113703f,1211b7044,12123bfaa,1212be52a, +12133dad2,12161dad2,12169e52a,12271bfaa,122817044,12289703f,12291703b,124013a9e,1240bbfa8, +12413f4a4,1241bdcaa,12423df52,12461df52,12469dcaa,12471f4a4,125d9bfa8,12703bfa5,1270be2aa, +12713de52,12761de52,12769e2aa,128b1bfa5,12a03bfa3,12a0bf8a8,12a13dcaa,12a1be252,12a61e252, +12a69dcaa,12a71f8a8,12c09bfa3,12d03bfa5,12d0be7aa,12d13d952,12d61d952,12d69e7aa,12e99bfa5, +130033a9e,1300b703d,130137040,1301b7045,13023bfaa,1302bf4a4,13033db2a,1303be252,13061e252, +13069db2a,13071f4a4,131817045,131897040,13191703d,13199bfaa,133013a9e,1330bbfa5,13313e2aa, +1331bdd52,13361dd52,13369e2aa,134a1bfa5,13603bfa8,1360bf8a8,13613d8aa,1361be152,13623ef55, +13661ef55,13669e152,13671d8aa,13679f8a8,137b9bfa8,139033a9e,1390b703b,13913703f,1391b7044, +13923bfaa,1392be7aa,13933de52,13961de52,13969e7aa,13a817044,13a89703f,13a91703b,13a99bfaa, +13c013a9e,13c0bbfa8,13c13f4a4,13c1bd72a,13c23dc52,13c61dc52,13c69d72a,13c71f4a4,13dc1bfa8, +13f03bfa5,13f0be52a,13f13de52,13f61de52,13f69e52a,14099bfa5,14203bfa3,1420bf8a8,14213d72a, +1421be052,14223ef55,14261ef55,14269e052,14271d72a,14279f8a8,143e9bfa3,14503bfa5,1450be7aa, +14513e052,14561e052,14569e7aa,146b1bfa5,148037039,1480b703d,148137042,1481bbfaa,14823f4a4, +1482bd52a,14833e152,14861e152,14869d52a,14871f4a4,14979bfaa,149817042,14989703d,149917039, +14b03bfa5,14b0be2aa,14b13e052,14b61e052,14b69e2aa,14c81bfa5,14e03bfa8,14e0bf828,14e13db2a, +14e1bdf52,14e2a3fbd,14e61df52,14e69db2a,14e71f828,14fa9bfa8,150403fbd,150da3b3d,15103703b, +1510b703f,151137044,1511bbfaa,15123e52a,1512be052,15161e052,15169e52a,15271bfaa,152817044, +15289703f,15291703b,153e03b3d,15403bfa8,1540bf4a4,15413dcaa,1541be052,1543a3fbd,15461e052, +15469dcaa,15471f4a4,155d9bfa8,156603fbd,15703bfa5,1570be2aa,15713e252,1571a3dbb,15761e252, +15769e2aa,158b1bfa5,159783dbb,15a03bfa3,15a0bf8a8,15a13dcaa,15a1bdf52,15a3a36b9,15a61df52, +15a69dcaa,15a71f8a8,15c09bfa3,15ca036b9,15d03bfa5,15d0be7aa,15d13e052,15d61e052,15d69e7aa, +15d723fbb,15e99bfa5,16003703d,1600b7040,160137045,1601bbfaa,16023f4a4,1602bdb2a,16033df52, +16061df52,16069db2a,16071f4a4,161817045,161897040,16191703d,16199bfaa,162383fbb,16303bfa5, +1630be2aa,16313dbd2,16361dbd2,16369e2aa,163722db9,164a1bfa5,165502db9,16603bfa8,1660bf8a8, +16613d8aa,1661bdbd2,166523fbd,16661dbd2,16669d8aa,16671f8a8,167b9bfa8,168603fbd,16903703b, +1690b703f,169137044,1691bbfaa,16923e7aa,1692bd9d2,169623bb9,16969d9d2,16971e7aa,16a503bb9, +16a817044,16a89703f,16a91703b,16a99bfaa,16ae22739,16be02739,16c03bfa8,16c0bf4a4,16c13d72a, +16c1bdd52,16c61dd52,16c69d72a,16c71f4a4,16c7a3fbb,16dc1bfa8,16e703fbb,16f03bfa5,16f0be52a, +16f13d7d2,16f423fb9,16f61d7d2,16f69e52a,17099bfa5,171683fb9,17203bfa3,1720bf8a8,17213d72a, +1721bdf52,172223fbd,17261df52,17269d72a,17271f8a8,173e9bfa3,17503bfa5,1750be7aa,17513dd52, +17561dd52,17569e7aa,175f03fbd,176b1bfa5,178037039,1780b703d,178137042,1781bbfaa,17823f4a4, +1782bd52a,17833dc52,17861dc52,17869d52a,17871f4a4,17979bfaa,179817042,17989703d,179917039, +17b03bfa5,17b0be2aa,17b13d752,17b323fbd,17b61d752,17b69e2aa,17c81bfa5,17da03fbd,17e03bfa8, +17e0bf828,17e13db2a,17e1be052,17e2a3fbd,17e61e052,17e69db2a,17e71f828,17fa9bfa8,180c03fbd, +18103703b,1810b703f,181137044,1811bbfaa,18123e52a,1812bdad2,181323fbd,18161dad2,18169e52a, +18271bfaa,182817044,18289703f,18291703b,183e83fbd,18403bfa8,1840bf4a4,18413dcaa,1841bdf52, +184623fbd,18469df52,18471dcaa,18479f4a4,185d9bfa8,186b83fbd,18703bfa5,1870be2aa,18713de52, +1874a3fbb,18761de52,18769e2aa,188b1bfa5,189803fbb,18a03bfa3,18a0bf8a8,18a13dcaa,18a1be252, +18a323fb9,18a61e252,18a69dcaa,18a71f8a8,18c09bfa3,18c983fb9,18d03bfa5,18d0be7aa,18d13d952, +18d4a3fbb,18d61d952,18d69e7aa,18e99bfa5,18fa03fbb,19003703d,1900b7040,190137045,1901bbfaa, +19023f4a4,1902bdb2a,19033e252,190523fb9,19061e252,19069db2a,19071f4a4,191817045,191897040, +19191703d,19199bfaa,192083fb9,19303bfa5,1930be2aa,19313dd52,193223fbd,19361dd52,19369e2aa, +194a1bfa5,19603bfa8,1960bf8a8,19613d8aa,1961be152,19661e152,19669d8aa,19671f8a8,197b9bfa8, +198c03fbd,19903703b,1990b703f,199137044,1991bbfaa,19923e7aa,1992bde52,19961de52,19969e7aa, +199723fbb,19a817044,19a89703f,19a91703b,19a99bfaa,19c03bfa8,19c0bf4a4,19c13d72a,19c1bdc52, +19c61dc52,19c69d72a,19c71f4a4,19dc1bfa8,19ea03fbb,19f03bfa5,19f0be52a,19f13de52,19f5a3fb9, +19f61de52,19f69e52a,1a099bfa5,1a1b83fb9,1a203bfa3,1a20bf8a8,1a213d72a,1a21be052,1a261e052, +1a269d72a,1a271f8a8,1a2823fb8,1a3e9bfa3,1a4d83fb8,1a503bfa5,1a50be7aa,1a513e052,1a561e052, +1a569e7aa,1a5aa3fb6,1a6b1bfa5,1a8037039,1a80b703e,1a8137042,1a81bbfaf,1a823f4a4,1a82bd52a, +1a833e152,1a861e152,1a869d52a,1a871f4a4,1a9817042,1a989703e,1a9917039,1a999bfaf,1aa603fb6, +1ab03bfaa,1ab0be2aa,1ab13e052,1ab61e052,1ab69e2aa,1ac19bfaa,1ae03bfad,1ae0bf828,1ae13db2a, +1ae1bdf52,1ae61df52,1ae69db2a,1ae71f828,1afa1bfad,1b1037039,1b10b703e,1b1137042,1b11bbfaf, +1b123e52a,1b12be052,1b161e052,1b169e52a,1b2817042,1b289703e,1b2917039,1b331bfaf,1b403f4a4, +1b40bdcaa,1b413e052,1b461e052,1b469dcaa,1b471f4a4,1b703bfaa,1b70be2aa,1b713e252,1b761e252, +1b769e2aa,1b8c1bfaa,1ba03bfa8,1ba0bf8a8,1ba13dcaa,1ba1bdf52,1ba223fb6,1ba61df52,1ba69dcaa, +1ba71f8a8,1bb603fb6,1bbaa3fb8,1bbe1bfa8,1bc903fb8,1bd03bfaa,1bd0be7aa,1bd13e052,1bd1a3fb6, +1bd61e052,1bd69e7aa,1bea1bfaa,1c0037039,1c00b703e,1c0137042,1c01bbfaf,1c023f4a4,1c02bdb2a, +1c033df52,1c061df52,1c069db2a,1c071f4a4,1c0a03fb6,1c1817042,1c189703e,1c1917039,1c199bfaf, +1c303bfaa,1c30be2aa,1c313dbd2,1c361dbd2,1c369e2aa,1c491bfaa,1c6023fb6,1c60bbfad,1c613f8a8, +1c61bd8aa,1c623dbd2,1c661dbd2,1c669d8aa,1c671f8a8,1c7303fb6,1c7c9bfad,1c7d23a38,1c8783a38, +1c9037039,1c90b703e,1c9137042,1c91bbfaf,1c923e7aa,1c92bd9d2,1c93a3fb6,1c961d9d2,1c969e7aa, +1ca817042,1ca89703e,1ca917039,1cb21bfaf,1cc03f4a4,1cc0bd72a,1cc13dd52,1cc61dd52,1cc69d72a, +1cc71f4a4,1ccf03fb6,1cf03bfaa,1cf0be52a,1cf13d7d2,1cf61d7d2,1cf69e52a,1d0f9bfaa,1d203bfa8, +1d20bf8a8,1d213d72a,1d21bdf52,1d2223fb6,1d261df52,1d269d72a,1d271f8a8,1d3203fb6,1d3c23bb8, +1d3e1bfa8,1d4483bb8,1d503bfa5,1d50be7aa,1d513dd52,1d51a3fb6,1d561dd52,1d569e7aa,1d6f9bfa5, +1d8037039,1d80b703d,1d8137042,1d81bbfaa,1d823f4a4,1d82bd52a,1d833dc52,1d8583fb6,1d861dc52, +1d869d52a,1d871f4a4,1d9817042,1d989703d,1d9917039,1d999bfaa,1db03bfa5,1db0be2aa,1db13d752, +1db61d752,1db69e2aa,1dca1bfa5,1de03bfa8,1de0bf828,1de13db2a,1de1be052,1de61e052,1de69db2a, +1de71f828,1dfb9bfa8,1e103703b,1e10b703f,1e1137044,1e11bbfaa,1e123e52a,1e12bdad2,1e161dad2, +1e169e52a,1e2817044,1e289703f,1e291703b,1e299bfaa,1e403bfa8,1e40bf4a4,1e413dcaa,1e41bdf52, +1e461df52,1e469dcaa,1e471f4a4,1e5c1bfa8,1e703bfa5,1e70be2aa,1e713de52,1e761de52,1e769e2aa, +1e899bfa5,1ea03bfa3,1ea0bf8a8,1ea13dcaa,1ea1be252,1ea61e252,1ea69dcaa,1ea71f8a8,1ebe9bfa3, +1ed03bfa5,1ed0be7aa,1ed13d952,1ed61d952,1ed69e7aa,1eeb1bfa5,1f003703d,1f00b7040,1f0137045, +1f01bbfaa,1f023f4a4,1f02bdb2a,1f033e252,1f061e252,1f069db2a,1f071f4a4,1f179bfaa,1f1817045, +1f1897040,1f191703d,1f303bfa5,1f30be2aa,1f313dd52,1f31a3fb6,1f361dd52,1f369e2aa,1f481bfa5, +1f4b03fb6,1f5fa3fb9,1f603bfa8,1f60bf8a8,1f613d8aa,1f61be152,1f661e152,1f669d8aa,1f671f8a8, +1f7a9bfa8,1f8603fb9,1f903703b,1f90b703f,1f9137044,1f91bbfaa,1f923e7aa,1f92bde52,1f9323fbb, +1f961de52,1f969e7aa,1fa71bfaa,1fa817044,1fa89703f,1fa91703b,1fc03bfa8,1fc0bf4a4,1fc13d72a, +1fc1bdc52,1fc61dc52,1fc69d72a,1fc71f4a4,1fdd9bfa8,1fe383fbb,1ff03bfa5,1ff0be52a,1ff13de52, +1ff1a3fb9,1ff61de52,1ff69e52a,200b1bfa5,201203fb9,201f23fb8,20203bfa3,2020bf8a8,20213d72a, +2021be052,20261e052,20269d72a,20271f8a8,20409bfa3,204483fb8,20503bfa5,2050be7aa,20513e052, +205323fb6,20561e052,20569e7aa,20699bfa5,208037039,2080b703e,208137042,2081bbfaf,20823f4a4, +2082bd52a,20833e152,20861e152,20869d52a,20871f4a4,209817042,20989703e,209917039,20999bfaf, +20b03bfaa,20b0be2aa,20b13e052,20b61e052,20b69e2aa,20c19bfaa,20e03bfad,20e0bf828,20e13db2a, +20e1bdf52,20e483fb6,20e61df52,20e69db2a,20e71f828,20fa1bfad,211037039,2110b703e,211137042, +2111bbfaf,21123e52a,2112be052,21161e052,21169e52a,212817042,21289703e,212917039,21331bfaf, +21403f4a4,2140bdcaa,21413e052,21461e052,21469dcaa,21471f4a4,21703bfaa,2170be2aa,21713e252, +21761e252,21769e2aa,218c1bfaa,21a03bfa8,21a0bf8a8,21a13dcaa,21a1bdf52,21a223fb9,21a61df52, +21a69dcaa,21a71f8a8,21b503fb9,21ba23fb8,21be1bfa8,21cf83fb8,21d03bfaa,21d0be7aa,21d13e052, +21d523fb6,21d61e052,21d69e7aa,21ea1bfaa,220037039,2200b703e,220137042,2201bbfaf,22023f4a4, +2202bdb2a,22033df52,22061df52,22069db2a,22071f4a4,221817042,22189703e,221917039,22199bfaf, +22303bfaa,2230be2aa,22313dbd2,22361dbd2,22369e2aa,224703fb6,22491bfaa,225fa3fb9,22603bfad, +2260bf8a8,22613d8aa,2261bdbd2,22661dbd2,22669d8aa,22671f8a8,227383fb9,2279a3fb8,227c9bfad, +228903fb8,229037239,2290b723e,229137242,2291bbfaf,22923e7aa,2292bd9d2,2293a3fb6,22961d9d2, +22969e7aa,22b21bfaf,22c03f4a4,22c0bd72a,22c13dd52,22c61dd52,22c69d72a,22c71f4a4,22f03bfaa, +22f0be52a,22f13d7d2,22f61d7d2,22f69e52a,230903fb6,230f9bfaa,231fa3fb9,23203bfa8,2320bf8a8, +23213d72a,2321bdf52,23261df52,23269d72a,23271f8a8,233503fb9,2338a3fb8,233e1bfa8,234e03fb8, +23503bfa5,2350be7aa,23513dd52,2351a3fb6,23561dd52,23569e7aa,236817242,23689723e,236917239, +236f9bfa5,238037039,2380b703d,238137042,2381bbfaa,23823f4a4,2382bd52a,23833dc52,23861dc52, +23869d52a,23871f4a4,239817042,23989703d,239917039,23999bfaa,23a303fb6,23b03bfa5,23b0be2aa, +23b13d752,23b61d752,23b69e2aa,23ca1bfa5,23e03bfa8,23e0bf828,23e13db2a,23e1be052,23e61e052, +23e69db2a,23e71f828,23fb9bfa8,24103703b,2410b703f,241137044,2411bbfaa,24123e52a,2412bdad2, +24161dad2,24169e52a,242817044,24289703f,24291703b,24299bfaa,24403bfa8,2440bf4a4,24413dcaa, +2441bdf52,24461df52,24469dcaa,24471f4a4,245c1bfa8,24703bfa5,2470be2aa,24713de52,24761de52, +24769e2aa,24899bfa5,24a03bfa3,24a0bf8a8,24a13dcaa,24a1be252,24a61e252,24a69dcaa,24a71f8a8, +24be9bfa3,24d03bfa5,24d0be7aa,24d13d952,24d61d952,24d69e7aa,24eb1bfa5,25003703d,2500b7040, +250137045,2501bbfaa,25023f4a4,2502bdb2a,25033e252,25061e252,25069db2a,25071f4a4,25179bfaa, +251817045,251897040,25191703d,25303bfa5,2530be2aa,25313dd52,25361dd52,25369e2aa,25481bfa5, +25603bfa8,2560bf8a8,25613d8aa,2561be152,25661e152,25669d8aa,25671f8a8,257a9bfa8,25903703b, +2590b703f,259137044,2591bbfaa,25923e7aa,2592bde52,25961de52,25969e7aa,25a71bfaa,25a817044, +25a89703f,25a91703b,25c03bfa8,25c0bf4a4,25c13d72a,25c1bdc52,25c61dc52,25c69d72a,25c71f4a4, +25dd9bfa8,25f03bfa5,25f0be52a,25f13de52,25f61de52,25f69e52a,260b1bfa5,26203bfa3,2620bf8a8, +26213d72a,2621be052,26261e052,26269d72a,26271f8a8,26409bfa3,26503bfa5,2650be7aa,26513e052, +26561e052,26569e7aa,26699bfa5,268037039,2680b703d,268137042,2681bbfaa,26823f4a4,2682bd52a, +26833e152,26861e152,26869d52a,26871f4a4,269817042,26989703d,269917039,26999bfaa,26b03bfa5, +26b0be2aa,26b13e052,26b61e052,26b69e2aa,26ca1bfa5,26e03bfa8,26e0bf828,26e13db2a,26e1bdf52, +26e2a3fbd,26e61df52,26e69db2a,26e71f828,26fb9bfa8,270403fbd,270da3b3d,27103703b,2710b703f, +271137044,2711bbfaa,27123e52a,2712be052,27161e052,27169e52a,272817044,27289703f,27291703b, +27299bfaa,273e03b3d,27403bfa8,2740bf4a4,27413dcaa,2741be052,2743a3fbd,27461e052,27469dcaa, +27471f4a4,275c1bfa8,276603fbd,27703bfa5,2770be2aa,27713e252,2771a3dbb,27761e252,27769e2aa, +27899bfa5,279783dbb,27a03bfa3,27a0bf8a8,27a13dcaa,27a1bdf52,27a3a36b9,27a61df52,27a69dcaa, +27a71f8a8,27be9bfa3,27ca036b9,27d03bfa5,27d0be7aa,27d13e052,27d61e052,27d69e7aa,27d723fbb, +27eb1bfa5,28003703d,2800b7040,280137045,2801bbfaa,28023f4a4,2802bdb2a,28033df52,28061df52, +28069db2a,28071f4a4,28179bfaa,281817045,281897040,28191703d,282383fbb,28303bfa5,2830be2aa, +28313dbd2,28361dbd2,28369e2aa,283722db9,28481bfa5,285502db9,28603bfa8,2860bf8a8,28613d8aa, +2861bdbd2,286523fbd,28661dbd2,28669d8aa,28671f8a8,287a9bfa8,288603fbd,28903703b,2890b703f, +289137044,2891bbfaa,28923e7aa,2892bd9d2,289623bb9,28969d9d2,28971e7aa,28a503bb9,28a71bfaa, +28a817044,28a89703f,28a91703b,28ae22739,28be02739,28c03bfa8,28c0bf4a4,28c13d72a,28c1bdd52, +28c61dd52,28c69d72a,28c71f4a4,28c7a3fbb,28dd9bfa8,28e703fbb,28f03bfa5,28f0be52a,28f13d7d2, +28f423fb9,28f61d7d2,28f69e52a,290b1bfa5,291683fb9,29203bfa3,2920bf8a8,29213d72a,2921bdf52, +292223fbd,29261df52,29269d72a,29271f8a8,29409bfa3,29503bfa5,2950be7aa,29513dd52,29561dd52, +29569e7aa,295f03fbd,29699bfa5,298037039,2980b703d,298137042,2981bbfaa,29823f4a4,2982bd52a, +29833dc52,29861dc52,29869d52a,29871f4a4,299817042,29989703d,299917039,29999bfaa,29b03bfa5, +29b0be2aa,29b13d752,29b323fbd,29b61d752,29b69e2aa,29ca1bfa5,29da03fbd,29e03bfa8,29e0bf828, +29e13db2a,29e1be052,29e2a3fbd,29e61e052,29e69db2a,29e71f828,29fb9bfa8,2a0c03fbd,2a103703b, +2a10b703f,2a1137044,2a11bbfaa,2a123e52a,2a12bdad2,2a1323fbd,2a161dad2,2a169e52a,2a2817044, +2a289703f,2a291703b,2a299bfaa,2a3e83fbd,2a403bfa8,2a40bf4a4,2a413dcaa,2a41bdf52,2a4623fbd, +2a469df52,2a471dcaa,2a479f4a4,2a5c1bfa8,2a6b83fbd,2a703bfa5,2a70be2aa,2a713de52,2a74a3fbb, +2a761de52,2a769e2aa,2a899bfa5,2a9803fbb,2aa03bfa3,2aa0bf8a8,2aa13dcaa,2aa1be252,2aa323fb9, +2aa61e252,2aa69dcaa,2aa71f8a8,2abe9bfa3,2ac983fb9,2ad03bfa5,2ad0be7aa,2ad13d952,2ad4a3fbb, +2ad61d952,2ad69e7aa,2aeb1bfa5,2afa03fbb,2b003703d,2b00b7040,2b0137045,2b01bbfaa,2b023f4a4, +2b02bdb2a,2b033e252,2b0523fb9,2b061e252,2b069db2a,2b071f4a4,2b179bfaa,2b1817045,2b1897040, +2b191703d,2b2083fb9,2b303bfa5,2b30be2aa,2b313dd52,2b3223fbd,2b361dd52,2b369e2aa,2b481bfa5, +2b603bfa8,2b60bf8a8,2b613d8aa,2b61be152,2b661e152,2b669d8aa,2b671f8a8,2b7a9bfa8,2b8c03fbd, +2b903703b,2b90b703f,2b9137044,2b91bbfaa,2b923e7aa,2b92bde52,2b961de52,2b969e7aa,2b9723fbb, +2ba71bfaa,2ba817044,2ba89703f,2ba91703b,2bc03bfa8,2bc0bf4a4,2bc13d72a,2bc1bdc52,2bc61dc52, +2bc69d72a,2bc71f4a4,2bdd9bfa8,2bea03fbb,2bf03bfa5,2bf0be52a,2bf13de52,2bf5a3fb9,2bf61de52, +2bf69e52a,2c0b1bfa5,2c1b83fb9,2c203bfa3,2c20bf8a8,2c213d72a,2c21be052,2c261e052,2c269d72a, +2c271f8a8,2c2823fb8,2c409bfa3,2c4d83fb8,2c503bfa5,2c50be7aa,2c513e052,2c561e052,2c569e7aa, +2c5aa3fb6,2c699bfa5,2c8003fb6,2c80b7039,2c813703e,2c81b7042,2c823bfaf,2c82bf4a4,2c833d52a, +2c83be152,2c861e152,2c869d52a,2c871f4a4,2c9817042,2c989703e,2c9917039,2c999bfaf,2cb03bfaa, +2cb0be2aa,2cb13e052,2cb61e052,2cb69e2aa,2cc19bfaa,2ce03bfad,2ce0bf828,2ce13db2a,2ce1bdf52, +2ce61df52,2ce69db2a,2ce71f828,2cfa1bfad,2d1037039,2d10b703e,2d1137042,2d11bbfaf,2d123e52a, +2d12be052,2d161e052,2d169e52a,2d2817042,2d289703e,2d2917039,2d331bfaf,2d403f4a4,2d40bdcaa, +2d413e052,2d461e052,2d469dcaa,2d471f4a4,2d703bfaa,2d70be2aa,2d713e252,2d761e252,2d769e2aa, +2d8c1bfaa,2da03bfa8,2da0bf8a8,2da13dcaa,2da1bdf52,2da223fb6,2da61df52,2da69dcaa,2da71f8a8, +2db603fb6,2dbaa2338,2dbe1bfa8,2dc902338,2dd03bfaa,2dd0be7aa,2dd13e052,2dd1a3fb6,2dd61e052, +2dd69e7aa,2dea1bfaa,2e0037039,2e00b703e,2e0137042,2e01bbfaf,2e023f4a4,2e02bdb2a,2e033df52, +2e061df52,2e069db2a,2e071f4a4,2e0a03fb6,2e1817042,2e189703e,2e1917039,2e199bfaf,2e303bfaa, +2e30be2aa,2e313dbd2,2e361dbd2,2e369e2aa,2e491bfaa,2e603bfad,2e60bf8a8,2e613d8aa,2e61bdbd2, +2e62a3fb6,2e661dbd2,2e669d8aa,2e671f8a8,2e7583fb6,2e7c9bfad,2e7d23a38,2e8783a38,2e9037239, +2e90b723e,2e9137242,2e91bbfaf,2e923e7aa,2e92bd9d2,2e9423fb6,2e961d9d2,2e969e7aa,2eb21bfaf, +2ec03f4a4,2ec0bd72a,2ec13dd52,2ec61dd52,2ec69d72a,2ec71f4a4,2ecf83fb6,2ef03bfaa,2ef0be52a, +2ef13d7d2,2ef61d7d2,2ef69e52a,2f0f9bfaa,2f203bfa8,2f20bf8a8,2f213d72a,2f21bdf52,2f2223fb6, +2f261df52,2f269d72a,2f271f8a8,2f3183fb6,2f3c22d38,2f3e1bfa8,2f4a02d38,2f503bfa5,2f50be7aa, +2f513dd52,2f52a3fb6,2f561dd52,2f569e7aa,2f6817242,2f689723e,2f6917239,2f6f9bfa5,2f8037039, +2f80b703d,2f8137042,2f81bbfaa,2f823f4a4,2f82bd52a,2f833dc52,2f861dc52,2f869d52a,2f871f4a4, +2f8783fb6,2f9817042,2f989703d,2f9917039,2f999bfaa,2fb03bfa5,2fb0be2aa,2fb13d752,2fb61d752, +2fb69e2aa,2fca1bfa5,2fe03bfa8,2fe0bf828,2fe13db2a,2fe1be052,2fe61e052,2fe69db2a,2fe71f828, +2ffb9bfa8,30103703b,3010b703f,301137044,3011bbfaa,30123e52a,3012bdad2,30161dad2,30169e52a, +302817044,30289703f,30291703b,30299bfaa,30403bfa8,3040bf4a4,30413dcaa,3041bdf52,30461df52, +30469dcaa,30471f4a4,305c1bfa8,30703bfa5,3070be2aa,30713de52,30761de52,30769e2aa,30899bfa5, +30a03bfa3,30a0bf8a8,30a13dcaa,30a1be252,30a61e252,30a69dcaa,30a71f8a8,30be9bfa3,30d03bfa5, +30d0be7aa,30d13d952,30d61d952,30d69e7aa,30eb1bfa5,31003703d,3100b7040,310137045,3101bbfaa, +31023f4a4,3102bdb2a,31033e252,31061e252,31069db2a,31071f4a4,31179bfaa,311817045,311897040, +31191703d,31303bfa5,3130be2aa,31313dd52,31361dd52,31369e2aa,31481bfa5,31603bfa8,3160bf8a8, +31613d8aa,3161be152,31661e152,31669d8aa,31671f8a8,317a9bfa8,31903703b,3190b703f,319137044, +3191bbfaa,31923e7aa,3192bde52,31961de52,31969e7aa,31a71bfaa,31a817044,31a89703f,31a91703b, +31c03bfa8,31c0bf4a4,31c13d72a,31c1bdc52,31c61dc52,31c69d72a,31c71f4a4,31dd9bfa8,31f03bfa5, +31f0be52a,31f13de52,31f61de52,31f69e52a,320b1bfa5,32203bfa3,3220bf8a8,32213d72a,3221be052, +32261e052,32269d72a,32271f8a8,32409bfa3,32503bfa5,3250bfaa8,32513ef2e,3251be052,32561e052, +32569ef2e,32571faa8,32639bfa5,32683fca8,326e1fca8,328023b42,3280a6cb2,328126db9,3281a68be, +32823bfa6,3282bf4a4,32833d52a,3283be152,32861e152,32869d52a,32871f4a4,32987003f,32aa03b42, +32af237c0,32b03e2aa,32b0be052,32b61e052,32b69e2aa,32bf037c0,32c623fc2,32e03f828,32e0bdb2a, +32e13df52,32e61df52,32e69db2a,32e71f828,32f103fc2,32f822040,330a02040,33103e52a,3310be052, +3312a3fc2,33161e052,33169e52a,33191bfa6,33283bfa6,333d9bfa6,33403bfa6,3340bf4a4,33413dcaa, +3341be052,33461e052,33469dcaa,33471f4a4,336303fc2,336ca3fc5,337006cb2,3370a70b4,33713e2aa, +3371be252,33761e252,33769e2aa,33a03f8a8,33a0bdcaa,33a13df52,33a61df52,33a69dcaa,33a71f8a8, +33b8070b4,33b8a70b2,33bd9bfa6,33c503fc5,33d03bfa6,33d0be7aa,33d13e052,33d1a3fc2,33d61e052, +33d69e7aa,33fa03fc2,33fa868be,33fc06db9,340023fc5,3400870b2,340126b31,3401a70b6,34023bfaa, +3402bf4a4,34033db2a,3403bdf52,34041bfa6,34061df52,34069db2a,34071f4a4,342983fc5,342e23fc2, +34303e2aa,3430bdbd2,34361dbd2,34369e2aa,344103fc2,3446a3fc2,34603f8a8,3460bd8aa,34613dbd2, +34661dbd2,34669d8aa,34671f8a8,346e03fc2,347623fc0,348683fc0,348d23fc2,348e33fc2,34903e7aa, +3490bd9d2,34929bfaa,34961d9d2,34969e7aa,349b93fc2,34a83bf9e,34b403fc2,34bc1bf9e,34bf33fc5, +34c03bf9e,34c0bf4a4,34c13d72a,34c1bdd52,34c61dd52,34c69d72a,34c71f4a4,34ea93fc5,34f03e52a, +34f0bd7d2,34f3b31c2,34f61d7d2,34f69e52a,3501131c2,35203f8a8,3520bd72a,35213ea34,3521bdf52, +352233fcc,35259bf9e,35261df52,35269ea34,35271d72a,35279f8a8,354393fcc,35503bfa3,3550bf12e, +35513dd52,3551b3fc9,3552a3f3d,35561dd52,35569f12e,356783f3d,3569a3fc2,357413fc9,357c1bfa3, +357e03fc2,3580070b6,358086b31,358126ab2,3581a6639,358226a3e,3582bbfa6,35833f4a4,3583bd52a, +35843dc52,3584a3fc0,35861dc52,35869d52a,35871f4a4,359283fc0,359b23fc2,35ab03fc2,35b03e2aa, +35b0bd752,35b223fc2,35b61d752,35b69e2aa,35e03f828,35e0bdb2a,35e13e052,35e61e052,35e69db2a, +35e71f828,360e83fc2,36103e52a,3610bdad2,36111bfa6,3614a3fc2,36161dad2,36169e52a,362603fc2, +36283bfa6,362ea3fc0,363d83fc0,36401bfa6,3640bbfa6,36413f4a4,3641bdcaa,36423df52,36461df52, +36469dcaa,36471f4a4,364823fc2,366806ab2,3670270b4,3670be2aa,36713de52,367183fc2,36761de52, +36769e2aa,367ca3fc4,36a03f8a8,36a0bdcaa,36a13e252,36a61e252,36a69dcaa,36a71f8a8,36b8070b4, +36b8a70b2,36c21bfa6,36c983fc4,36d03bfa6,36d0be7aa,36d13d952,36d61d952,36d69e7aa,36d723fc2, +36f806a3e,36fa06639,36ff9bfa6,3700070b2,3700a6d36,3701270b9,3701bbfaa,37023f4a4,3702bdb2a, +37033e252,37061e252,37069db2a,37071f4a4,371e03fc2,37303e2aa,3730bdd52,37361dd52,37369e2aa, +37603f8a8,3760bd8aa,37613e152,37661e152,37669d8aa,37671f8a8,37903e7aa,3790bde52,37951bfaa, +37961de52,37969e7aa,37a83bf9e,37ba9bf9e,37c03bf9e,37c0bf4a4,37c13d72a,37c1bdc52,37c61dc52, +37c69d72a,37c71f4a4,37f03e52a,37f0bde52,37f61de52,37f69e52a,38203f8a8,3820bd72a,38213ea34, +3821be052,38261e052,38269ea34,38271d72a,38279f8a8,38499bf9e,38503bfa3,3850bf3ae,38513e052, +3851a3fc0,38561e052,38569f3ae,387a03fc0,387d9bfa3,3880070b9,388086d36,388126ab2,3881a6939, +3882269be,3882bbfa6,38833f4a4,3883bd52a,38843e152,3884a3fc2,38861e152,38869d52a,38871f4a4, +38a883fc2,38b03e2aa,38b0be052,38b223fc0,38b61e052,38b69e2aa,38c003fc0,38cba3fc2,38e03f828, +38e0bdb2a,38e13df52,38e61df52,38e69db2a,38e71f828,38f383fc2,38fda3fc0,390e9bfa6,390f83fc0, +39103e52a,3910be052,391623fc2,39169e052,39171e52a,39283bfa6,393b1bfa6,39403bfa6,3940bf4a4, +39413dcaa,3941be052,39461e052,39469dcaa,39471f4a4,394803fc2,394ea3fc2,395806ab2,396e03fc2, +3970270b4,3970be2aa,39713e252,39761e252,39769e2aa,39a03f8a8,39a0bdcaa,39a13df52,39a61df52, +39a69dcaa,39a71f8a8,39b4070b4,39b49bfa6,39b8270b2,39cd23fc2,39d03bfa6,39d0be7aa,39d13e052, +39d61e052,39d69e7aa,39da03fc2,39e423fc2,39f8069be,39f883fc2,39fa06939,39fe23fc5,39fe9bfa6, +3a00070b2,3a00a6bb1,3a0126eb6,3a01bbfaa,3a023f4a4,3a02bdb2a,3a033df52,3a061df52,3a069db2a, +3a071f4a4,3a2b83fc5,3a303e2aa,3a30bdbd2,3a3123fc2,3a361dbd2,3a369e2aa,3a4503fc2,3a4b23fc2, +3a603f8a8,3a60bd8aa,3a613dbd2,3a661dbd2,3a669d8aa,3a671f8a8,3a7703fc2,3a80a3fc0,3a8e33fc2, +3a903e7aa,3a90bd9d2,3a9283fc0,3a961bfaa,3a969d9d2,3a971e7aa,3a99a3fc2,3a9b93fc2,3aa83bf9e, +3abd1bf9e,3abf33fc5,3ac03bf9e,3ac0bf4a4,3ac13d72a,3ac1bdd52,3ac61dd52,3ac69d72a,3ac71f4a4, +3acd83fc2,3aea93fc5,3af006eb6,3af086bb1,3af126731,3af1a6936,3af23e52a,3af2bd7d2,3af3b31c2, +3af61d7d2,3af69e52a,3b01131c2,3b203f8a8,3b20bd72a,3b213ea34,3b21bdf52,3b2233fcc,3b261df52, +3b269ea34,3b271d72a,3b279f8a8,3b381bf9e,3b4393fcc,3b503bfa3,3b50bf2ae,3b513dd52,3b51a3fbd, +3b5233fc9,3b561dd52,3b569f2ae,3b6283fbd,3b6a23fc2,3b7613fc9,3b7a83fc2,3b7e9bfa3,3b8006936, +3b8086731,3b8126c32,3b81a6939,3b8226c3e,3b82ae74a,3b832e74e,3b83ae751,3b843bfa6,3b84bf4a4, +3b853d22a,3b85bdc52,3b8623fbe,3b869dc52,3b871d22a,3b879f4a4,3ba983fbe,3bb03d12a,3bb0bd752, +3bb223fbe,3bb61d752,3bb69d12a,3bc003fbe,3bc7a3fbe,3bdc83fbe,3be03f828,3be0bddaa,3be13e052, +3be1a3fbe,3be61e052,3be69ddaa,3be71f828,3bf9a3fc0,3bfa03fbe,3c0b9bfa6,3c103ecae,3c10bdad2, +3c161dad2,3c169ecae,3c283bfa6,3c3f03fc0,3c401bfa6,3c40bbfa6,3c413f4a4,3c41bdf2a,3c423df52, +3c4623fc2,3c469df52,3c471df2a,3c479f4a4,3c6806c32,3c70270b4,3c70bd8aa,3c713de52,3c761de52, +3c769d8aa,3c8d9bfa6,3ca03bfa6,3ca0bf8a8,3ca13ddaa,3ca1be252,3ca61e252,3ca69ddaa,3ca71f8a8, +3cab83fc2,3cb2070b4,3cb8270b2,3ccd1bfa6,3ccea3fc2,3cd03bfa1,3cd0bf1ae,3cd13d952,3cd61d952, +3cd69f1ae,3cf806c3e,3cf886939,3cf903fc2,3cfa1bfa1,3cfd870b2,3d0026e31,3d00a70b8,3d01270bb, +3d018e751,3d022e7d3,3d02bbfa5,3d033f4a4,3d03bdf2a,3d043e252,3d04a3fc1,3d061e252,3d069df2a, +3d071f4a4,3d1c9bfa5,3d2b03fc1,3d303bda5,3d30bd7aa,3d313dd52,3d32a3fc1,3d361dd52,3d369d7aa, +3d4303fc1,3d4a23fc1,3d5b83fc1,3d5e1bda5,3d603bfa5,3d60bf8a8,3d613ddaa,3d61be152,3d63a3fc1, +3d661e152,3d669ddaa,3d671f8a8,3d7483fc1,3d7ca3fc2,3d8386e31,3d84070bb,3d84870b8,3d851bfa5, +3d9026231,3d90a6fb8,3d912603b,3d91bbfa5,3d923ef2e,3d92bde52,3d961de52,3d969ef2e,3dad9bfa5, +3dc003fc2,3dc08e7d3,3dc10e74e,3dc18e74a,3dc22e74d,3dc2ae750,3dc32e7d5,3dc3bbfa5,3dc43f4a4, +3dc4bdf2a,3dc53dc52,3dc61dc52,3dc69df2a,3dc71f4a4,3dc7a3fc4,3de41bfa5,3ded0603b,3ded86fb8, +3df006231,3df0a5931,3df1263b8,3df1a5bbb,3df23bfa5,3df2bd8aa,3df33de52,3df61de52,3df69d8aa, +3dfb03fc4,3e149bfa5,3e1b85bbb,3e1c863b8,3e1d05931,3e2026131,3e20a6d38,3e2125f3b,3e21bbfa5, +3e223f8a8,3e22bdc2a,3e233ea34,3e23be052,3e24a3fc2,3e261e052,3e269ea34,3e271dc2a,3e279f8a8, +3e3a1bfa5,3e3f86131,3e4185f3b,3e4286d38,3e4783fc2,3e5026531,3e50a7138,3e512683b,3e51bbfa5, +3e523ef2e,3e52be052,3e5323fc4,3e561e052,3e569ef2e,3e659bfa5,3e7306531,3e738683b,3e7483fc4, +3e7507138,3e7e0e750,3e800e7d5,3e808e74d,3e812e63d,3e81ae642,3e82364b9,3e82b64bd,3e83364c2, +3e83bbfaa,3e843f4a4,3e84bd52a,3e853e5b9,3e85be152,3e861e152,3e869d52a,3e871f4a4,3e991bfaa, +3e999e5b9,3eb03bfa5,3eb0be2aa,3eb13e052,3eb61e052,3eb69e2aa,3eca1bfa5,3ee03bfa8,3ee0bf727, +3ee13f828,3ee1bdb2a,3ee23df52,3ee323fc2,3ee61df52,3ee69db2a,3ee71f828,3ee79f727,3ef80e642, +3ef88e63d,3ef9164c2,3ef9964bd,3efa164b9,3efb9bfa8,3eff83fc2,3f0c23fc2,3f102e63f,3f10ae644, +3f11364bb,3f11b64bf,3f12364c4,3f12bbfaa,3f133e52a,3f13be052,3f161e052,3f169e52a,3f299bfaa, +3f3783fc2,3f403bfa8,3f40bf4a4,3f413dcaa,3f41be052,3f4223ec0,3f461e052,3f469dcaa,3f471f4a4, +3f5c1bfa8,3f703bfa5,3f70be2aa,3f713e252,3f7183ec0,3f73a3fbd,3f761e252,3f769e2aa,3f899bfa5, +3fa03bfa3,3fa0bf727,3fa13f8a8,3fa1bdcaa,3fa23df52,3fa61df52,3fa69dcaa,3fa71f8a8,3fa79f727, +3fbe9bfa3,3fc903fbd,3fd00e644,3fd08e63f,3fd1164c4,3fd1964bf,3fd2164bb,3fd2bbfa5,3fd33e7aa, +3fd3be052,3fd423fbd,3fd61e052,3fd69e7aa,3feb1bfa5,3ff883fbd,40002e640,4000ae645,4001364bd, +4001b64c0,4002364c5,4002bbfaa,40033f4a4,4003bdb2a,40043df52,400623fc2,40069df52,40071db2a, +40079f4a4,40179bfaa,402083fc2,40303bfa5,4030be2aa,40313dbd2,4034a3fc2,40361dbd2,40369e2aa, +40481bfa5,405c83fc2,40603bfa8,4060bf727,40613f8a8,4061bd8aa,40623dbd2,40661dbd2,40669d8aa, +40671f8a8,40679f727,40770e645,40780e640,4078964c5,4079164c0,4079964bd,407a9bfa8,408ea3c40, +40902e63f,4090ae644,4091364bb,4091b64bf,4092364c4,4092bbfaa,40933e7aa,4093bd9d2,40961d9d2, +40969e7aa,40a71bfaa,40c03bfa8,40c0bf4a4,40c13d72a,40c1bdd52,40c61dd52,40c69d72a,40c71f4a4, +40dd9bfa8,40e983c40,40f023fbd,40f0bbfa5,40f13e52a,40f1bd7d2,40f61d7d2,40f69e52a,41083f0ad, +410b1bfa5,410e1f0ad,41203bfa3,4120bf727,41213f8a8,4121bd72a,41223f3ab,4122bdf52,41261df52, +41269f3ab,41271d72a,41279f8a8,41281f727,413a0e63f,413a8e644,41409bfa3,414e83fbd,4150164c4, +4150964bf,4151164bb,4151bbfa5,41523e7aa,4152be152,41561e152,41569e7aa,41683e2d2,41699bfa5, +416e1e2d2,41802e63d,4180ae642,4181364b9,4181b64bd,4182364c2,4182bbfaa,41833f4a4,4183bd52a, +41843dc52,41861dc52,41869d52a,41871f4a4,41991bfaa,41af23fc2,41b03bfa5,41b0be2aa,41b13d752, +41b61d752,41b69e2aa,41ca1bfa5,41d883fc2,41e03bfa8,41e0bf727,41e13f828,41e1bdb2a,41e23e052, +41e2a3fc2,41e61e052,41e69db2a,41e71f828,41e79f727,41f70e63d,41f80e642,41f8964c2,41f9164bd, +41f9964b9,41fb9bfa8,420a83fc2,42102e63f,4210ae644,4211364bb,4211b64bf,4212364c4,4212bbfaa, +42133e52a,4213bdad2,421423fc2,42161dad2,42169e52a,42299bfaa,423a03fc2,42403bfa8,4240bf4a4, +42413dcaa,4241bdf52,424623fc0,42469df52,42471dcaa,42479f4a4,425c1bfa8,426e83fc0,42703bfa5, +4270be2aa,42713de52,4273a3fbd,42761de52,42769e2aa,42899bfa5,429803fbd,42a03bfa3,42a0bf727, +42a13f8a8,42a1bdcaa,42a23e252,42a2a3fbd,42a30e644,42a50e63f,42a61e252,42a69dcaa,42a71f8a8, +42a79f727,42be9bfa3,42d0164c4,42d0964bf,42d1164bb,42d1bbfa5,42d23e7aa,42d2bd952,42d383fbd, +42d61d952,42d69e7aa,42eb1bfa5,430023fc2,4300ae640,43012e645,4301b64bd,4302364c0,4302b64c5, +43033bfaa,4303bf4a4,43043db2a,4304be252,43061e252,43069db2a,43071f4a4,43179bfaa,432a03fc2, +43303bfa5,4330be2aa,43313dd52,43361dd52,43369e2aa,4338a3fc5,43481bfa5,435f83fc5,43603bfa8, +4360bf727,43613f8a8,4361bd8aa,43623e152,43661e152,43669d8aa,43671f8a8,43679f727,436a8e645, +436b0e640,4378164c5,4378964c0,4379164bd,437a9bfa8,43902e63f,4390ae644,4391364bb,4391b64bf, +4392364c4,4392bbfaa,43933e7aa,4393bde52,439423fc7,43961de52,43969e7aa,43a71bfaa,43c03bfa8, +43c0bf4a4,43c13d72a,43c1bdc52,43c61dc52,43c69d72a,43c71f4a4,43dd9bfa8,43e583fc7,43f03bfa5, +43f0be52a,43f13de52,43f3a3fc5,43f61de52,43f69e52a,440b1bfa5,441983fc5,441b8e63f,441c8e644, +44203bfa3,4420bf727,44213f8a8,4421bd72a,44223e052,442323fc4,44261e052,44269d72a,44271f8a8, +44279f727,44409bfa3,444783fc4,44503bfa5,4450be7aa,44513e052,4451a3fc2,44561e052,44569e7aa, +4468164c4,4468964bf,4469164bb,44699bfa5,44802b5b6,4480ae64a,44812e74e,4481b64b9,4482364be, +4482b64c2,44833bfaf,4483bf4a4,44843d52a,4484be152,44852bfc2,44861e152,44869d52a,44871f4a4, +44918bfc2,44920b5b6,44981bfaf,449c03fc2,44aeaa8b6,44af0a8b6,44b03bfaa,44b0be2aa,44b13e052, +44b2aaac2,44b30aac2,44b61e052,44b69e2aa,44c19bfaa,44c62aac2,44c68aac2,44c82aab6,44c88aab6, +44df2bcb6,44e03bfad,44e0bf727,44e13f828,44e1bdb2a,44e23df52,44e2abfc2,44e61df52,44e69db2a, +44e71f828,44e79f727,44ee8bcb6,44f08bfc2,44fa1bfad,450f2aab6,450f8aab6,45103bfaf,4510be52a, +45113e052,4512aaac2,45130aac2,45161e052,45169e52a,45262aac2,45268aac2,45292aab6,45298aab6, +45331bfaf,453e2b5b6,45402bfc2,4540bf4a4,45413dcaa,4541be052,45461e052,45469dcaa,45471f4a4, +454e0b5b6,45520bfc2,456ea3fc2,456faa8b6,45700a8b6,4570bbfaa,45713e2aa,4571be252,4573aa6c2, +45740a6c2,45761e252,45769e2aa,45852a6c2,45858a6c2,45882a6b6,45888a6b6,458c1bfaa,459eab5b6, +45a03bfa8,45a0bf727,45a13f8a8,45a1bdcaa,45a23df52,45a2abfc2,45a603fc2,45a69df52,45a71dcaa, +45a79f8a8,45a81f727,45b00b5b6,45b18bfc2,45be1bfa8,45cea3fc2,45cf2a4b6,45cf8a4b6,45d02a4c2, +45d0bbfaa,45d13e7aa,45d1be052,45d20a4c2,45d61e052,45d69e7aa,45e6aa4c2,45e70a4c2,45e9aa4b6, +45ea0a4b6,45ea9bfaa,45f583fc2,45feab5b6,46003bfaf,4600bf4a4,46013db2a,4601bdf52,460223fc9, +4602abfc2,46061df52,46069db2a,46071f4a4,46100b5b6,46118bfc2,46189bfaf,462503fc9,462eaa4b6, +462f0a4b6,46303bfaa,4630be2aa,46313dbd2,4631a3fc7,46322a8c2,46328a8c2,46361dbd2,46369e2aa, +4644aa8c2,46450a8c2,46492a6b6,46499bfaa,464a0a6b6,465d03fc7,465f2b336,46603bfad,4660bf727, +46613f8a8,4661bd8aa,46623dbd2,46632bfc2,46661dbd2,46669d8aa,46671f8a8,46679f727,466823fc7, +46708b336,46710bfc2,467c9bfad,46903bfaf,4690be7aa,46913d9d2,4691aa6b6,46920a6b6,46932a8c2, +46938a8c2,46961d9d2,46969e7aa,46a72a8c2,46a78a8c2,46a803fc7,46aa2a8b6,46aa8a8b6,46b21bfaf, +46beab5b6,46c03f4a4,46c0bd72a,46c13dd52,46c32bfc2,46c3a3fc2,46c61dd52,46c69d72a,46c71f4a4, +46cd8b5b6,46d30bfc2,46e603fc2,46ee2a636,46ee8a636,46f03bfaa,46f0be52a,46f13d7d2,46f3aa4c2, +46f40a4c2,46f61d7d2,46f69e52a,46f723fbe,47062a4c2,47068a4c2,4709aa4b6,470a0a4b6,470f9bfaa, +471fab5b6,47203bfa8,4720bf727,47213f8a8,4721bd72a,47223df52,4722abfc2,47261df52,47269d72a, +47271f8a8,47279f727,472d0b5b6,472f8bfc2,473e1bfa8,474a03fbe,474e2a4b6,474e8a4b6,47503bfa5, +4750be7aa,47513dd52,47532a4c2,47538a4c2,47561dd52,47569e7aa,4757a3fbd,4767aa6c2,47680a6c2, +4769aa6b6,476a0a6b6,476e164b9,476f9bfa5,4770164c2,4774164be,477f2b5b6,47800e74e,47808e64a, +478137039,4781b703d,478237042,4782bbfaa,47833f4a4,4783bd52a,47843dc52,4784abfc2,47861dc52, +47869d52a,47871f4a4,478e0b5b6,478e8bfc2,479817042,47989703d,479917039,47999bfaa,47b03bfa5, +47b0be2aa,47b13d752,47b61d752,47b69e2aa,47ca1bfa5,47e03bfa8,47e0bf727,47e13f828,47e1bdb2a, +47e23e052,47e61e052,47e69db2a,47e71f828,47e79f727,47ea03fbd,47fb9bfa8,48103703b,4810b703f, +481137044,4811bbfaa,48123e52a,4812bdad2,48161dad2,48169e52a,482817044,48289703f,48291703b, +48299bfaa,48403bfa8,4840bf4a4,48413dcaa,4841bdf52,48461df52,48469dcaa,48471f4a4,485c1bfa8, +48703bfa5,4870be2aa,48713de52,48761de52,48769e2aa,48899bfa5,48a03bfa3,48a0bf727,48a13f8a8, +48a1bdcaa,48a23e252,48a61e252,48a69dcaa,48a71f8a8,48a79f727,48be9bfa3,48d03bfa5,48d0be7aa, +48d13d952,48d61d952,48d69e7aa,48eb1bfa5,49003703d,4900b7040,490137045,4901bbfaa,49023f4a4, +4902bdb2a,49033e252,49061e252,49069db2a,49071f4a4,49179bfaa,491817045,491897040,49191703d, +49303bfa5,4930be2aa,49313dd52,4931a3fc2,49361dd52,49369e2aa,49481bfa5,495503fc2,495ea3fc5, +49603bfa8,4960bf727,49613f8a8,4961bd8aa,49623e152,49661e152,49669d8aa,49671f8a8,49679f727, +497a9bfa8,498983fc5,49903703b,4990b703f,499137044,4991bbfaa,49923e7aa,4992bde52,499323fc7, +49961de52,49969e7aa,49a71bfaa,49a817044,49a89703f,49a91703b,49c03bfa8,49c0bf4a4,49c13d72a, +49c1bdc52,49c61dc52,49c69d72a,49c71f4a4,49dd9bfa8,49e583fc7,49ef23fc5,49f03bfa5,49f0be52a, +49f13de52,49f61de52,49f69e52a,4a0b1bfa5,4a1503fc5,4a2023fc4,4a20bbfa3,4a213f727,4a21bf8a8, +4a223d72a,4a22be052,4a261e052,4a269d72a,4a271f8a8,4a279f727,4a409bfa3,4a4703fc4,4a503bfa5, +4a50be7aa,4a513e052,4a51aab36,4a520ab36,4a52aa642,4a530a642,4a53a3fc2,4a561e052,4a569e7aa, +4a68aabb6,4a690abb6,4a69aa642,4a6a1bfa5,4a6a8a642,4a802b5b6,4a80ae64a,4a812e74e,4a81b64b9, +4a82364be,4a82b64c2,4a833bfaf,4a83bf4a4,4a843d52a,4a84be152,4a852bfc2,4a861e152,4a869d52a, +4a871f4a4,4a918bfc2,4a920b5b6,4a981bfaf,4aa903fc2,4aaeaa8b6,4aaf0a8b6,4ab03bfaa,4ab0be2aa, +4ab13e052,4ab2aaac2,4ab30aac2,4ab61e052,4ab69e2aa,4ac19bfaa,4ac62aac2,4ac68aac2,4ac82aab6, +4ac88aab6,4adf2bcb6,4ae03bfad,4ae0bf727,4ae13f828,4ae1bdb2a,4ae23df52,4ae2abfc2,4ae61df52, +4ae69db2a,4ae71f828,4ae79f727,4aee8bcb6,4af08bfc2,4afa1bfad,4b0f2aab6,4b0f8aab6,4b103bfaf, +4b10be52a,4b113e052,4b12aaac2,4b130aac2,4b161e052,4b169e52a,4b262aac2,4b268aac2,4b292aab6, +4b298aab6,4b331bfaf,4b3e2b5b6,4b402bfc2,4b40bf4a4,4b413dcaa,4b41be052,4b461e052,4b469dcaa, +4b471f4a4,4b4e0b5b6,4b520bfc2,4b6faa8b6,4b700a8b6,4b70bbfaa,4b713e2aa,4b71be252,4b7223fc2, +4b73aa6c2,4b740a6c2,4b761e252,4b769e2aa,4b852a6c2,4b858a6c2,4b882a6b6,4b888a6b6,4b8c1bfaa, +4b9e03fc2,4b9eab5b6,4ba03bfa8,4ba0bf727,4ba13f8a8,4ba1bdcaa,4ba23df52,4ba2abfc2,4ba61df52, +4ba69dcaa,4ba71f8a8,4ba79f727,4bb00b5b6,4bb18bfc2,4bbe1bfa8,4bcf2a4b6,4bcf8a4b6,4bd023fc2, +4bd0aa4c2,4bd13bfaa,4bd1be7aa,4bd23e052,4bd28a4c2,4bd61e052,4bd69e7aa,4be6aa4c2,4be70a4c2, +4be9aa4b6,4bea0a4b6,4bea9bfaa,4bfb03fc2,4bfeab5b6,4c003bfaf,4c00bf4a4,4c013db2a,4c01bdf52, +4c022bfc2,4c02a3fc9,4c061df52,4c069db2a,4c071f4a4,4c100b5b6,4c118bfc2,4c189bfaf,4c2583fc9, +4c2eaa4b6,4c2f0a4b6,4c303bfaa,4c30be2aa,4c313dbd2,4c31a3fc7,4c322a8c2,4c328a8c2,4c361dbd2, +4c369e2aa,4c44aa8c2,4c450a8c2,4c492a6b6,4c499bfaa,4c4a0a6b6,4c5703fc7,4c5f2b336,4c603bfad, +4c60bf727,4c613f8a8,4c61bd8aa,4c623dbd2,4c632bfc2,4c63a3fc7,4c661dbd2,4c669d8aa,4c671f8a8, +4c679f727,4c708b336,4c710bfc2,4c7c9bfad,4c903bfaf,4c90be7aa,4c913d9d2,4c91aa6b6,4c920a6b6, +4c932a8c2,4c938a8c2,4c961d9d2,4c969e7aa,4c9b03fc7,4ca72a8c2,4ca78a8c2,4caa2a8b6,4caa8a8b6, +4cb21bfaf,4cbeab5b6,4cc03f4a4,4cc0bd72a,4cc13dd52,4cc223fc2,4cc32bfc2,4cc61dd52,4cc69d72a, +4cc71f4a4,4ccd8b5b6,4cd30bfc2,4cee2a636,4cee8a636,4cf03bfaa,4cf0be52a,4cf13d7d2,4cf3aa4c2, +4cf403fc2,4cf48a4c2,4cf523fbe,4cf61d7d2,4cf69e52a,4d062a4c2,4d068a4c2,4d09aa4b6,4d0a0a4b6, +4d0f9bfaa,4d1fab5b6,4d203bfa8,4d20bf727,4d213f8a8,4d21bd72a,4d223df52,4d22abfc2,4d261df52, +4d269d72a,4d271f8a8,4d279f727,4d2d0b5b6,4d2f8bfc2,4d3e1bfa8,4d4703fbe,4d4e2a4b6,4d4e8a4b6, +4d503bfa5,4d50be7aa,4d513dd52,4d532a4c2,4d538a4c2,4d5523fbd,4d561dd52,4d569e7aa,4d67aa6c2, +4d680a6c2,4d69aa6b6,4d6a0a6b6,4d6f9bfa5,4d76164c2,4d78164be,4d78964b9,4d7f2b5b6,4d800e74e, +4d808e64a,4d8137039,4d81b703d,4d8237042,4d82bbfaa,4d833f4a4,4d83bd52a,4d843dc52,4d84abfc2, +4d861dc52,4d869d52a,4d871f4a4,4d8e0b5b6,4d8e8bfc2,4d991bfaa,4d9a17039,4d9b97042,4d9c1703d, +4db03bfa5,4db0be2aa,4db13d752,4db61d752,4db69e2aa,4dca1bfa5,4de03bfa8,4de0bf727,4de13f828, +4de1bdb2a,4de23e052,4de61e052,4de69db2a,4de71f828,4de79f727,4deb03fbd,4dfb9bfa8,4e103703b, +4e10b703f,4e1137044,4e11bbfaa,4e123e52a,4e12bdad2,4e161dad2,4e169e52a,4e2817044,4e289703f, +4e291703b,4e299bfaa,4e403bfa8,4e40bf4a4,4e413dcaa,4e41bdf52,4e461df52,4e469dcaa,4e471f4a4, +4e5c1bfa8,4e703bfa5,4e70be2aa,4e713de52,4e761de52,4e769e2aa,4e899bfa5,4ea03bfa3,4ea0bf727, +4ea13f8a8,4ea1bdcaa,4ea23e252,4ea61e252,4ea69dcaa,4ea71f8a8,4ea79f727,4ebe9bfa3,4ed03bfa5, +4ed0be7aa,4ed13d952,4ed61d952,4ed69e7aa,4eeb1bfa5,4f003703d,4f00b7040,4f0137045,4f01bbfaa, +4f023f4a4,4f02bdb2a,4f033e252,4f061e252,4f069db2a,4f071f4a4,4f179bfaa,4f1870058,4f1897045, +4f1917040,4f199703d,4f303bfa5,4f30be2aa,4f313dd52,4f361dd52,4f369e2aa,4f481bfa5,4f603bfa8, +4f60bf727,4f613f8a8,4f61bd8aa,4f623e152,4f661e152,4f669d8aa,4f671f8a8,4f679f727,4f7a9bfa8, +4f903703b,4f90b703f,4f9137044,4f91bbfaa,4f923e7aa,4f92bde52,4f961de52,4f969e7aa,4fa71bfaa, +4fa817044,4fa89703f,4fa91703b,4fc03bfa8,4fc0bf4a4,4fc13d72a,4fc1bdc52,4fc61dc52,4fc69d72a, +4fc71f4a4,4fdd9bfa8,4ff03bfa5,4ff0be52a,4ff13de52,4ff61de52,4ff69e52a,500b1bfa5,50203bfa3, +5020bf727,50213f8a8,5021bd72a,50223e052,50261e052,50269d72a,50271f8a8,50279f727,50409bfa3, +50503bfa5,5050bf1ae,50513e052,5051aab36,50520ab36,5052aa642,50530a642,50561e052,50569f1ae, +5068aabb6,50690abb6,5069aa642,506a1bfa5,506a8a642,50802fe3d,5080b3fbd,508137039,5081b703d, +508237042,5082bbfaa,50833f4a4,5083bd52a,50843e152,50861e152,50869d52a,50871f4a4,50979bfaa, +509817042,50989703d,509917039,50b03bfa5,50b0be2aa,50b13e052,50b61e052,50b69e2aa,50c81bfa5, +50e03bfa8,50e0bf828,50e13db2a,50e1bdf52,50e2a3fbd,50e61df52,50e69db2a,50e71f828,50fa9bfa8, +510403fbd,510da3b3d,51103703b,5110b703f,511137044,5111bbfaa,51123e52a,5112be052,51161e052, +51169e52a,51271bfaa,512817044,51289703f,51291703b,513e03b3d,514013fbd,5140bbfa8,51413f4a4, +5141bdcaa,51423e052,5143a3fbd,51461e052,51469dcaa,51471f4a4,515d9bfa8,516603fbd,51703bfa5, +5170be2aa,51713e252,5171a3dbb,51761e252,51769e2aa,518b1bfa5,519783dbb,51a03bfa3,51a0bf8a8, +51a13dcaa,51a1bdf52,51a3a36b9,51a61df52,51a69dcaa,51a71f8a8,51c09bfa3,51ca036b9,51d03bfa5, +51d0be7aa,51d13e052,51d61e052,51d69e7aa,51d723fbb,51e99bfa5,52003703d,5200b7040,520137045, +5201bbfaa,52023f4a4,5202bdb2a,52033df52,52061df52,52069db2a,52071f4a4,521817045,521897040, +52191703d,52199bfaa,522383fbb,52303bfa5,5230be2aa,52313dbd2,52361dbd2,52369e2aa,523722db9, +524a1bfa5,525502db9,52603bfa8,5260bf8a8,52613d8aa,5261bdbd2,526523fbd,52661dbd2,52669d8aa, +52671f8a8,527b9bfa8,528603fbd,52903703b,5290b703f,529137044,5291bbfaa,52923e7aa,5292bd9d2, +529623bb9,52969d9d2,52971e7aa,52a503bb9,52a817044,52a89703f,52a91703b,52a99bfaa,52ae22739, +52bd0fe3d,52bdafe3f,52be33fbf,52be82739,52c03bfa8,52c0bf4a4,52c13d72a,52c1bdd52,52c61dd52, +52c69d72a,52c71f4a4,52c7a3fbb,52dc1bfa8,52e703fbb,52f03bfa5,52f0be52a,52f13d7d2,52f423fb9, +52f61d7d2,52f69e52a,53099bfa5,531683fb9,531d13fbf,53203bfa3,5320bf8a8,53213d72a,5321bdf52, +532223fbd,53228fe3f,53232fe3b,5323b3fbb,53261df52,53269d72a,53271f8a8,533e9bfa3,53503bfa5, +5350be7aa,53513dd52,53561dd52,53569e7aa,535f03fbd,536b1bfa5,538037039,5380b703d,538137042, +5381bbfaa,53823f4a4,5382bd52a,53833dc52,538393fbb,53850fe3b,5385afe3d,538633fbd,53869dc52, +53871d52a,53879f4a4,53979bfaa,539817042,53989703d,539917039,53b03bfa5,53b0be2aa,53b13d752, +53b323fbd,53b61d752,53b69e2aa,53c81bfa5,53da03fbd,53e03bfa8,53e0bf828,53e13db2a,53e1be052, +53e2a3fbd,53e61e052,53e69db2a,53e71f828,53fa9bfa8,540c03fbd,54103703b,5410b703f,541137044, +5411bbfaa,54123e52a,5412bdad2,541323fbd,54161dad2,54169e52a,54271bfaa,542817044,54289703f, +54291703b,543e83fbd,544013fbd,5440bbfa8,54413f4a4,5441bdcaa,54423df52,544623fbd,54469df52, +54471dcaa,54479f4a4,545d9bfa8,546b83fbd,54703bfa5,5470be2aa,54713de52,5474a3fbb,54761de52, +54769e2aa,548b1bfa5,549803fbb,54a03bfa3,54a0bf8a8,54a13dcaa,54a1be252,54a323fb9,54a61e252, +54a69dcaa,54a71f8a8,54c09bfa3,54c983fb9,54d03bfa5,54d0be7aa,54d13d952,54d4a3fbb,54d61d952, +54d69e7aa,54e99bfa5,54fa03fbb,55003703d,5500b7040,550137045,5501bbfaa,55023f4a4,5502bdb2a, +55033e252,550523fb9,55061e252,55069db2a,55071f4a4,551817045,551897040,55191703d,55199bfaa, +552083fb9,55303bfa5,5530be2aa,55313dd52,553223fbd,55361dd52,55369e2aa,554a1bfa5,55603bfa8, +5560bf8a8,55613d8aa,5561be152,55661e152,55669d8aa,55671f8a8,557b9bfa8,558c03fbd,55903703b, +5590b703f,559137044,5591bbfaa,55923e7aa,5592bde52,55961de52,55969e7aa,559723fbb,55a817044, +55a89703f,55a91703b,55a99bfaa,55c03bfa8,55c0bf4a4,55c13d72a,55c1bdc52,55c20fe3d,55c2afe3b, +55c333fbb,55c61dc52,55c69d72a,55c71f4a4,55dc1bfa8,55ea03fbb,55f03bfa5,55f0be52a,55f13de52, +55f5a3fb9,55f61de52,55f69e52a,56099bfa5,561b83fb9,56203bfa3,5620bf8a8,56213d72a,5621be052, +562213fbb,56228fe3b,56232fe39,5623b3fb9,56261e052,56269d72a,56271f8a8,562823fb8,563e9bfa3, +564d83fb8,56503bfa5,5650be7aa,56513e052,56561e052,56569e7aa,565aa3fb6,566b1bfa5,568037039, +5680b703e,568137042,5681bbfaf,56823f4a4,5682bd52a,56833e152,56838fe39,56842fe36,5684b3fb6, +568513fb9,56861e152,56869d52a,56871f4a4,569817042,56989703e,569917039,56999bfaf,56a603fb6, +56b03bfaa,56b0be2aa,56b13e052,56b61e052,56b69e2aa,56c19bfaa,56e03bfad,56e0bf828,56e13db2a, +56e1bdf52,56e61df52,56e69db2a,56e71f828,56fa1bfad,571037039,5710b703e,571137042,5711bbfaf, +57123e52a,5712be052,57161e052,57169e52a,572817042,57289703e,572917039,57331bfaf,574013fb6, +5740bf4a4,57413dcaa,5741be052,57461e052,57469dcaa,57471f4a4,57703bfaa,5770be2aa,57713e252, +57761e252,57769e2aa,578c1bfaa,57a03bfa8,57a0bf8a8,57a13dcaa,57a1bdf52,57a223fb6,57a61df52, +57a69dcaa,57a71f8a8,57b603fb6,57baa3fb8,57be1bfa8,57c903fb8,57d03bfaa,57d0be7aa,57d13e052, +57d1a3fb6,57d61e052,57d69e7aa,57ea1bfaa,580037039,5800b703e,580137042,5801bbfaf,58023f4a4, +5802bdb2a,58033df52,58061df52,58069db2a,58071f4a4,580a03fb6,581817042,58189703e,581917039, +58199bfaf,58303bfaa,5830be2aa,58313dbd2,58361dbd2,58369e2aa,58491bfaa,586023fb6,5860bbfad, +58613f8a8,5861bd8aa,58623dbd2,58661dbd2,58669d8aa,58671f8a8,587303fb6,587c9bfad,587d23a38, +588783a38,589037039,5890b703e,589137042,5891bbfaf,58923e7aa,5892bd9d2,5893a3fb6,58961d9d2, +58969e7aa,58a817042,58a89703e,58a917039,58b21bfaf,58c03f4a4,58c0bd72a,58c13dd52,58c61dd52, +58c69d72a,58c71f4a4,58cf03fb6,58f03bfaa,58f0be52a,58f13d7d2,58f61d7d2,58f69e52a,590f9bfaa, +59203bfa8,5920bf8a8,59213d72a,5921bdf52,592223fb6,59261df52,59269d72a,59271f8a8,593203fb6, +593c23bb8,593e1bfa8,594483bb8,59503bfa5,5950be7aa,59513dd52,5951a3fb6,59561dd52,59569e7aa, +596f9bfa5,59800fe36,5980b7039,59813703d,5981b7042,59823bfaa,5982bf4a4,59833d52a,5983bdc52, +598583fb6,59861dc52,59869d52a,59871f4a4,599817042,59989703d,599917039,59999bfaa,59b03bfa5, +59b0be2aa,59b13d752,59b61d752,59b69e2aa,59ca1bfa5,59e03bfa8,59e0bf828,59e13db2a,59e1be052, +59e61e052,59e69db2a,59e71f828,59fb9bfa8,5a103703b,5a10b703f,5a1137044,5a11bbfaa,5a123e52a, +5a12bdad2,5a161dad2,5a169e52a,5a2817044,5a289703f,5a291703b,5a299bfaa,5a403bfa8,5a40bf4a4, +5a413dcaa,5a41bdf52,5a461df52,5a469dcaa,5a471f4a4,5a5c1bfa8,5a703bfa5,5a70be2aa,5a713de52, +5a761de52,5a769e2aa,5a899bfa5,5aa03bfa3,5aa0bf8a8,5aa13dcaa,5aa1be252,5aa61e252,5aa69dcaa, +5aa71f8a8,5abe9bfa3,5ad03bfa5,5ad0be7aa,5ad13d952,5ad61d952,5ad69e7aa,5aeb1bfa5,5b003703d, +5b00b7040,5b0137045,5b01bbfaa,5b023f4a4,5b02bdb2a,5b033e252,5b061e252,5b069db2a,5b071f4a4, +5b179bfaa,5b1817045,5b1897040,5b191703d,5b303bfa5,5b30be2aa,5b313dd52,5b31a3fb6,5b361dd52, +5b369e2aa,5b481bfa5,5b4b03fb6,5b5fa3fb9,5b603bfa8,5b60bf8a8,5b613d8aa,5b61be152,5b661e152, +5b669d8aa,5b671f8a8,5b7a9bfa8,5b8603fb9,5b903703b,5b90b703f,5b9137044,5b91bbfaa,5b923e7aa, +5b92bde52,5b9323fbb,5b961de52,5b969e7aa,5ba71bfaa,5ba817044,5ba89703f,5ba91703b,5bc03bfa8, +5bc0bf4a4,5bc13d72a,5bc1bdc52,5bc61dc52,5bc69d72a,5bc71f4a4,5bdd9bfa8,5be383fbb,5bf03bfa5, +5bf0be52a,5bf13de52,5bf1a3fb9,5bf61de52,5bf69e52a,5c0b1bfa5,5c1203fb9,5c1f23fb8,5c203bfa3, +5c20bf8a8,5c213d72a,5c21be052,5c261e052,5c269d72a,5c271f8a8,5c409bfa3,5c4483fb8,5c503bfa5, +5c50be7aa,5c513e052,5c5323fb6,5c561e052,5c569e7aa,5c699bfa5,5c8037039,5c80b703e,5c8137042, +5c81bbfaf,5c823f4a4,5c82bd52a,5c833e152,5c861e152,5c869d52a,5c871f4a4,5c9817042,5c989703e, +5c9917039,5c999bfaf,5cb03bfaa,5cb0be2aa,5cb13e052,5cb61e052,5cb69e2aa,5cc19bfaa,5ce03bfad, +5ce0bf828,5ce13db2a,5ce1bdf52,5ce483fb6,5ce61df52,5ce69db2a,5ce71f828,5cfa1bfad,5d1037039, +5d10b703e,5d1137042,5d11bbfaf,5d123e52a,5d12be052,5d161e052,5d169e52a,5d2817042,5d289703e, +5d2917039,5d331bfaf,5d403f4a4,5d40bdcaa,5d413e052,5d461e052,5d469dcaa,5d471f4a4,5d703bfaa, +5d70be2aa,5d713e252,5d761e252,5d769e2aa,5d8c1bfaa,5da03bfa8,5da0bf8a8,5da13dcaa,5da1bdf52, +5da223fb9,5da61df52,5da69dcaa,5da71f8a8,5db503fb9,5dba23fb8,5dbe1bfa8,5dcf83fb8,5dd03bfaa, +5dd0be7aa,5dd13e052,5dd523fb6,5dd61e052,5dd69e7aa,5dea1bfaa,5e0037039,5e00b703e,5e0137042, +5e01bbfaf,5e023f4a4,5e02bdb2a,5e033df52,5e061df52,5e069db2a,5e071f4a4,5e1817042,5e189703e, +5e1917039,5e199bfaf,5e303bfaa,5e30be2aa,5e313dbd2,5e361dbd2,5e369e2aa,5e4703fb6,5e491bfaa, +5e5fa3fb9,5e603bfad,5e60bf8a8,5e613d8aa,5e61bdbd2,5e661dbd2,5e669d8aa,5e671f8a8,5e7383fb9, +5e79a3fb8,5e7c9bfad,5e8903fb8,5e9037039,5e90b703e,5e9137042,5e91bbfaf,5e923e7aa,5e92bd9d2, +5e93a3fb6,5e961d9d2,5e969e7aa,5ea817042,5ea89703e,5ea917039,5eb21bfaf,5ec03f4a4,5ec0bd72a, +5ec13dd52,5ec61dd52,5ec69d72a,5ec71f4a4,5ef03bfaa,5ef0be52a,5ef13d7d2,5ef61d7d2,5ef69e52a, +5f0903fb6,5f0f9bfaa,5f1fa3fb9,5f203bfa8,5f20bf8a8,5f213d72a,5f21bdf52,5f261df52,5f269d72a, +5f271f8a8,5f3503fb9,5f38a3fb8,5f3e1bfa8,5f4e03fb8,5f503bfa5,5f50be7aa,5f513dd52,5f51a3fb6, +5f561dd52,5f569e7aa,5f6f9bfa5,5f8037039,5f80b703d,5f8137042,5f81bbfaa,5f823f4a4,5f82bd52a, +5f833dc52,5f861dc52,5f869d52a,5f871f4a4,5f9817042,5f989703d,5f9917039,5f999bfaa,5fa303fb6, +5fb03bfa5,5fb0be2aa,5fb13d752,5fb61d752,5fb69e2aa,5fca1bfa5,5fe03bfa8,5fe0bf828,5fe13db2a, +5fe1be052,5fe61e052,5fe69db2a,5fe71f828,5ffb9bfa8,60103703b,6010b703f,601137044,6011bbfaa, +60123e52a,6012bdad2,60161dad2,60169e52a,602817044,60289703f,60291703b,60299bfaa,60403bfa8, +6040bf4a4,60413dcaa,6041bdf52,60461df52,60469dcaa,60471f4a4,605c1bfa8,60703bfa5,6070be2aa, +60713de52,60761de52,60769e2aa,60899bfa5,60a03bfa3,60a0bf8a8,60a13dcaa,60a1be252,60a61e252, +60a69dcaa,60a71f8a8,60be9bfa3,60d03bfa5,60d0be7aa,60d13d952,60d61d952,60d69e7aa,60eb1bfa5, +61003703d,6100b7040,610137045,6101bbfaa,61023f4a4,6102bdb2a,61033e252,61061e252,61069db2a, +61071f4a4,61179bfaa,611817045,611897040,61191703d,61303bfa5,6130be2aa,61313dd52,61361dd52, +61369e2aa,61481bfa5,61603bfa8,6160bf8a8,61613d8aa,6161be152,61661e152,61669d8aa,61671f8a8, +617a9bfa8,61903703b,6190b703f,619137044,6191bbfaa,61923e7aa,6192bde52,61961de52,61969e7aa, +61a71bfaa,61a817044,61a89703f,61a91703b,61c03bfa8,61c0bf4a4,61c13d72a,61c1bdc52,61c61dc52, +61c69d72a,61c71f4a4,61dd9bfa8,61f03bfa5,61f0be52a,61f13de52,61f61de52,61f69e52a,620b1bfa5, +62203bfa3,6220bf8a8,62213d72a,6221be052,62261e052,62269d72a,62271f8a8,62409bfa3,62503bfa5, +6250bf1ae,62513e052,62561e052,62569f1ae,62699bfa5,628037039,6280b703d,628137042,6281bbfaa, +62823f4a4,6282bd52a,62833e152,6283afe3d,628433fbd,62861e152,62869d52a,62871f4a4,629817042, +62989703d,629917039,62999bfaa,62b03bfa5,62b0be2aa,62b13e052,62b61e052,62b69e2aa,62ca1bfa5, +62e03bfa8,62e0bf828,62e13db2a,62e1bdf52,62e2a3fbd,62e61df52,62e69db2a,62e71f828,62fb9bfa8, +630403fbd,630da3b3d,63103703b,6310b703f,631137044,6311bbfaa,63123e52a,6312be052,63161e052, +63169e52a,632817044,63289703f,63291703b,63299bfaa,633e03b3d,634013fbd,6340bbfa8,63413f4a4, +6341bdcaa,63423e052,6343a3fbd,63461e052,63469dcaa,63471f4a4,635c1bfa8,636603fbd,63703bfa5, +6370be2aa,63713e252,6371a3dbb,63761e252,63769e2aa,63899bfa5,639783dbb,63a03bfa3,63a0bf8a8, +63a13dcaa,63a1bdf52,63a3a36b9,63a61df52,63a69dcaa,63a71f8a8,63be9bfa3,63ca036b9,63d03bfa5, +63d0be7aa,63d13e052,63d61e052,63d69e7aa,63d723fbb,63eb1bfa5,64003703d,6400b7040,640137045, +6401bbfaa,64023f4a4,6402bdb2a,64033df52,64061df52,64069db2a,64071f4a4,64179bfaa,641817045, +641897040,64191703d,642383fbb,64303bfa5,6430be2aa,64313dbd2,64361dbd2,64369e2aa,643722db9, +64481bfa5,645502db9,64603bfa8,6460bf8a8,64613d8aa,6461bdbd2,646523fbd,64661dbd2,64669d8aa, +64671f8a8,647a9bfa8,648603fbd,64903703b,6490b703f,649137044,6491bbfaa,64923e7aa,6492bd9d2, +649623bb9,64969d9d2,64971e7aa,64a503bb9,64a71bfaa,64a817044,64a89703f,64a91703b,64ae22739, +64b90fe3d,64b9afe3f,64ba33fbf,64be02739,64c03bfa8,64c0bf4a4,64c13d72a,64c1bdd52,64c61dd52, +64c69d72a,64c71f4a4,64c7a3fbb,64dd9bfa8,64e703fbb,64f03bfa5,64f0be52a,64f13d7d2,64f423fb9, +64f61d7d2,64f69e52a,650b1bfa5,651513fbf,651683fb9,651c8fe3f,651d2fe3b,651db3fbb,65203bfa3, +6520bf8a8,65213d72a,6521bdf52,652223fbd,65261df52,65269d72a,65271f8a8,65409bfa3,65503bfa5, +6550be7aa,65513dd52,65561dd52,65569e7aa,655f03fbd,65699bfa5,657893fbb,657c8fe3b,657d2fe3d, +657db3fbd,658037039,6580b703d,658137042,6581bbfaa,65823f4a4,6582bd52a,65833dc52,65861dc52, +65869d52a,65871f4a4,659817042,65989703d,659917039,65999bfaa,65b03bfa5,65b0be2aa,65b13d752, +65b323fbd,65b61d752,65b69e2aa,65ca1bfa5,65da03fbd,65e03bfa8,65e0bf828,65e13db2a,65e1be052, +65e2a3fbd,65e61e052,65e69db2a,65e71f828,65fb9bfa8,660c03fbd,66103703b,6610b703f,661137044, +6611bbfaa,66123e52a,6612bdad2,661323fbd,66161dad2,66169e52a,662817044,66289703f,66291703b, +66299bfaa,663e83fbd,66403bfa8,6640bf4a4,66413dcaa,6641bdf52,664623fbd,66469df52,66471dcaa, +66479f4a4,664813fbd,665c1bfa8,666b83fbd,66703bfa5,6670be2aa,66713de52,6674a3fbb,66761de52, +66769e2aa,66899bfa5,669803fbb,66a03bfa3,66a0bf8a8,66a13dcaa,66a1be252,66a323fb9,66a61e252, +66a69dcaa,66a71f8a8,66be9bfa3,66c983fb9,66d03bfa5,66d0be7aa,66d13d952,66d4a3fbb,66d61d952, +66d69e7aa,66eb1bfa5,66fa03fbb,67003703d,6700b7040,670137045,6701bbfaa,67023f4a4,6702bdb2a, +67033e252,670523fb9,67061e252,67069db2a,67071f4a4,67179bfaa,671817045,671897040,67191703d, +672083fb9,67303bfa5,6730be2aa,67313dd52,673223fbd,67361dd52,67369e2aa,67481bfa5,67603bfa8, +6760bf8a8,67613d8aa,6761be152,67661e152,67669d8aa,67671f8a8,677a9bfa8,678c03fbd,67903703b, +6790b703f,679137044,6791bbfaa,67923e7aa,6792bde52,67961de52,67969e7aa,679723fbb,67a71bfaa, +67a817044,67a89703f,67a91703b,67b10fe3d,67b1afe3b,67bdb3fbb,67c03bfa8,67c0bf4a4,67c13d72a, +67c1bdc52,67c61dc52,67c69d72a,67c71f4a4,67dd9bfa8,67ea03fbb,67f03bfa5,67f0be52a,67f13de52, +67f5a3fb9,67f61de52,67f69e52a,680b1bfa5,681793fbb,681b83fb9,681c8fe3b,681d2fa39,681db3bb9, +68203bfa3,6820bf8a8,68213d72a,6821be052,68261e052,68269d72a,68271f8a8,682823fb8,68409bfa3, +684d83fb8,68503bfa5,6850be7aa,68513e052,68561e052,68569e7aa,685aa3fb6,68699bfa5,687a93bb9, +688003fb6,68808fa39,68812fe36,6881b3fb6,688237039,6882b703e,688337042,6883bbfaf,68843f4a4, +6884bd52a,68853e152,68861e152,68869d52a,68871f4a4,689817042,68989703e,689917039,68999bfaf, +68b03bfaa,68b0be2aa,68b13e052,68b61e052,68b69e2aa,68c19bfaa,68e03bfad,68e0bf828,68e13db2a, +68e1bdf52,68e61df52,68e69db2a,68e71f828,68fa1bfad,691037039,6910b703e,691137042,6911bbfaf, +69123e52a,6912be052,69161e052,69169e52a,692817042,69289703e,692917039,69331bfaf,69403f4a4, +6940bdcaa,69413e052,694613fb6,69469e052,69471dcaa,69479f4a4,69703bfaa,6970be2aa,69713e252, +69761e252,69769e2aa,698c1bfaa,69a03bfa8,69a0bf8a8,69a13dcaa,69a1bdf52,69a223fb6,69a61df52, +69a69dcaa,69a71f8a8,69b603fb6,69baa2338,69be1bfa8,69c902338,69d03bfaa,69d0be7aa,69d13e052, +69d1a3fb6,69d61e052,69d69e7aa,69ea1bfaa,6a0037039,6a00b703e,6a0137042,6a01bbfaf,6a023f4a4, +6a02bdb2a,6a033df52,6a061df52,6a069db2a,6a071f4a4,6a0a03fb6,6a1817042,6a189703e,6a1917039, +6a199bfaf,6a303bfaa,6a30be2aa,6a313dbd2,6a361dbd2,6a369e2aa,6a491bfaa,6a603bfad,6a60bf8a8, +6a613d8aa,6a61bdbd2,6a62a3fb6,6a661dbd2,6a669d8aa,6a671f8a8,6a7583fb6,6a7c9bfad,6a7d23a38, +6a8783a38,6a9037039,6a90b703e,6a9137042,6a91bbfaf,6a923e7aa,6a92bd9d2,6a9423fb6,6a961d9d2, +6a969e7aa,6aa817042,6aa89703e,6aa917039,6ab21bfaf,6ac03f4a4,6ac0bd72a,6ac13dd52,6ac61dd52, +6ac69d72a,6ac71f4a4,6acf83fb6,6af03bfaa,6af0be52a,6af13d7d2,6af61d7d2,6af69e52a,6b0f9bfaa, +6b203bfa8,6b20bf8a8,6b213d72a,6b21bdf52,6b2223fb6,6b261df52,6b269d72a,6b271f8a8,6b3183fb6, +6b3c22d38,6b3e1bfa8,6b4a02d38,6b503bfa5,6b50be7aa,6b513dd52,6b52a3fb6,6b561dd52,6b569e7aa, +6b6f9bfa5,6b798fe36,6b8037039,6b80b703d,6b8137042,6b81bbfaa,6b823f4a4,6b82bd52a,6b833dc52, +6b861dc52,6b869d52a,6b871f4a4,6b8783fb6,6b9817042,6b989703d,6b9917039,6b999bfaa,6bb03bfa5, +6bb0be2aa,6bb13d752,6bb61d752,6bb69e2aa,6bca1bfa5,6be03bfa8,6be0bf828,6be13db2a,6be1be052, +6be61e052,6be69db2a,6be71f828,6bfb9bfa8,6c103703b,6c10b703f,6c1137044,6c11bbfaa,6c123e52a, +6c12bdad2,6c161dad2,6c169e52a,6c2817044,6c289703f,6c291703b,6c299bfaa,6c403bfa8,6c40bf4a4, +6c413dcaa,6c41bdf52,6c461df52,6c469dcaa,6c471f4a4,6c5c1bfa8,6c703bfa5,6c70be2aa,6c713de52, +6c761de52,6c769e2aa,6c899bfa5,6ca03bfa3,6ca0bf8a8,6ca13dcaa,6ca1be252,6ca61e252,6ca69dcaa, +6ca71f8a8,6cbe9bfa3,6cd03bfa5,6cd0be7aa,6cd13d952,6cd61d952,6cd69e7aa,6ceb1bfa5,6d003703d, +6d00b7040,6d0137045,6d01bbfaa,6d023f4a4,6d02bdb2a,6d033e252,6d061e252,6d069db2a,6d071f4a4, +6d179bfaa,6d1817045,6d1897040,6d191703d,6d303bfa5,6d30be2aa,6d313dd52,6d361dd52,6d369e2aa, +6d481bfa5,6d603bfa8,6d60bf8a8,6d613d8aa,6d61be152,6d661e152,6d669d8aa,6d671f8a8,6d7a9bfa8, +6d903703b,6d90b703f,6d9137044,6d91bbfaa,6d923e7aa,6d92bde52,6d961de52,6d969e7aa,6da71bfaa, +6da817044,6da89703f,6da91703b,6dc03bfa8,6dc0bf4a4,6dc13d72a,6dc1bdc52,6dc61dc52,6dc69d72a, +6dc71f4a4,6ddd9bfa8,6df03bfa5,6df0be52a,6df13de52,6df61de52,6df69e52a,6e0b1bfa5,6e203bfa3, +6e20bf8a8,6e213d72a,6e21be052,6e261e052,6e269d72a,6e271f8a8,6e409bfa3,6e503bfa5,6e50bfaa8, +6e513f22e,6e51be052,6e561e052,6e569f22e,6e571faa8,6e679bfa5,6e683fca8,6e6e1fca8,6e8023b42, +6e80a5bb2,6e81257b9,6e81a53be,6e823bfa6,6e82bf4a4,6e833d52a,6e83be152,6e842ed4e,6e861e152, +6e869d52a,6e871f4a4,6eaa03b42,6eaf237c0,6eb03e2aa,6eb0be052,6eb61e052,6eb69e2aa,6ebf037c0, +6ec623fc2,6ee03f828,6ee0bdb2a,6ee13df52,6ee61df52,6ee69db2a,6ee71f828,6ef103fc2,6ef822040, +6f0a02040,6f103e52a,6f10be052,6f12a3fc2,6f161e052,6f169e52a,6f191bfa6,6f283bfa6,6f3d9bfa6, +6f403bfa6,6f40bf4a4,6f413dcaa,6f41be052,6f461e052,6f469dcaa,6f471f4a4,6f6303fc2,6f6ca3fc5, +6f7005bb2,6f70a70b4,6f713e2aa,6f71be252,6f761e252,6f769e2aa,6fa03f8a8,6fa0bdcaa,6fa13df52, +6fa61df52,6fa69dcaa,6fa71f8a8,6fb8070b4,6fb8a70b2,6fbd9bfa6,6fc503fc5,6fd03bfa6,6fd0be7aa, +6fd13e052,6fd1a3fc2,6fd61e052,6fd69e7aa,6ffa03fc2,6ffa853be,6ffc057b9,700023fc5,7000870b2, +7001269b1,7001a7036,70023bfaa,7002bf4a4,70033db2a,7003bdf52,70041bfa6,70061df52,70069db2a, +70071f4a4,702983fc5,702e23fc2,70303e2aa,7030bdbd2,70361dbd2,70369e2aa,704103fc2,7046a3fc2, +70603f8a8,7060bd8aa,70613dbd2,70661dbd2,70669d8aa,70671f8a8,706e03fc2,707623fc0,708683fc0, +708d23fc2,70903e7aa,7090bd9d2,70929bfaa,70961d9d2,70969e7aa,70a83bf9e,70b403fc2,70bc1bf9e, +70c03bf9e,70c0bf4a4,70c13d72a,70c1bdd52,70c61dd52,70c69d72a,70c71f4a4,70e78ed4e,70e9af0d0, +70f03e52a,70f0bd7d2,70f61d7d2,70f69e52a,711e8f0d0,711f2f0d1,71203f8a8,7120bd72a,71213f1b4, +7121bdf52,71259bf9e,71261df52,71269f1b4,71271d72a,71279f8a8,714faf0d5,71500f0d1,7150bbfa3, +71513f1ae,7151bdd52,7152a3f3d,71561dd52,71569f1ae,716783f3d,7169a3fc2,717c1bfa3,717e03fc2, +718007036,7180869b1,7181256b2,7181a5a39,718226abe,7182bbfa6,71833f4a4,7183bd52a,71843dc52, +7184a3fc0,71861dc52,71869d52a,71871f4a4,71880f0d5,7188aed4e,719283fc0,719b23fc2,71ab03fc2, +71b03e2aa,71b0bd752,71b223fc2,71b61d752,71b69e2aa,71e03f828,71e0bdb2a,71e13e052,71e61e052, +71e69db2a,71e71f828,720e83fc2,72103e52a,7210bdad2,72111bfa6,7214a3fc2,72161dad2,72169e52a, +722603fc2,72283bfa6,722ea3fc0,723d83fc0,72401bfa6,7240bbfa6,72413f4a4,7241bdcaa,72423df52, +72461df52,72469dcaa,72471f4a4,724823fc2,7268056b2,7270270b4,7270be2aa,72713de52,727183fc2, +72748ed4e,72752f0cc,72761de52,72769e2aa,727ca3fc4,72a03f8a8,72a0bdcaa,72a13e252,72a61e252, +72a69dcaa,72a71f8a8,72b8070b4,72b8a70b2,72bb0f0cc,72bbaee4a,72c21bfa6,72c983fc4,72d03bfa6, +72d0be7aa,72d13d952,72d61d952,72d69e7aa,72d723fc2,72f806abe,72fa05a39,72ff9bfa6,7300070b2, +7300a6bb6,730127039,7301bbfaa,73023f4a4,7302bdb2a,73033e252,73040ee4a,7304ae9c9,73061e252, +73069db2a,73071f4a4,731e03fc2,73303e2aa,7330bdd52,73361dd52,73369e2aa,73603f8a8,7360bd8aa, +73613e152,73661e152,73669d8aa,73671f8a8,73903e7aa,7390bde52,73951bfaa,73961de52,73969e7aa, +73a83bf9e,73ba9bf9e,73c03bf9e,73c0bf4a4,73c13d72a,73c1bdc52,73c61dc52,73c69d72a,73c71f4a4, +73f03e52a,73f0bde52,73f61de52,73f69e52a,74203f8a8,7420bd72a,74213f1b4,7421be052,74261e052, +74269f1b4,74271d72a,74279f8a8,74499bf9e,74503bfa3,7450bf1ae,74513e052,7451a3fc0,74561e052, +74569f1ae,747a03fc0,747d9bfa3,748007039,748086bb6,748126032,7481a5cb9,7482263be,74828e9c9, +74832ed4e,7483bbfa6,74843f4a4,7484bd52a,74853e152,7485a3fc2,74861e152,74869d52a,74871f4a4, +74a883fc2,74b03e2aa,74b0be052,74b223fc0,74b61e052,74b69e2aa,74c003fc0,74cba3fc2,74e03f828, +74e0bdb2a,74e13df52,74e61df52,74e69db2a,74e71f828,74f383fc2,74fda3fc0,750e9bfa6,750f83fc0, +75103e52a,7510be052,751623fc2,75169e052,75171e52a,75283bfa6,753b1bfa6,75403bfa6,7540bf4a4, +75413dcaa,7541be052,75461e052,75469dcaa,75471f4a4,754803fc2,754ea3fc2,755806032,756e03fc2, +7570270b4,7570be2aa,75713e252,75761e252,75769e2aa,75a03f8a8,75a0bdcaa,75a13df52,75a61df52, +75a69dcaa,75a71f8a8,75b4070b4,75b49bfa6,75b8270b2,75cd23fc2,75d03bfa6,75d0be7aa,75d13e052, +75d61e052,75d69e7aa,75da03fc2,75e423fc2,75f8063be,75f883fc2,75fa05cb9,75fe23fc5,75fe9bfa6, +7600070b2,7600a6a31,760126d36,7601bbfaa,76023f4a4,7602bdb2a,76033df52,76061df52,76069db2a, +76071f4a4,762b83fc5,76303e2aa,7630bdbd2,763123fc2,76361dbd2,76369e2aa,764503fc2,764b23fc2, +76603f8a8,7660bd8aa,76613dbd2,76661dbd2,76669d8aa,76671f8a8,767703fc2,7680a3fc0,76903e7aa, +7690bd9d2,769283fc0,76961bfaa,76969d9d2,76971e7aa,7699a3fc2,76a83bf9e,76bd1bf9e,76c03bf9e, +76c0bf4a4,76c13d72a,76c1bdd52,76c61dd52,76c69d72a,76c71f4a4,76cd83fc2,76f006d36,76f086a31, +76f1265b1,76f1a67b6,76f23e52a,76f2bd7d2,76f30ed4e,76f3af0d0,76f61d7d2,76f69e52a,77203f8a8, +7720bd72a,77213f1b4,7721bdf52,77248f0d0,77252f0d1,77261df52,77269f1b4,77271d72a,77279f8a8, +77381bf9e,77503bfa3,7750bf1ae,77513dd52,7751a3fbd,7752af0d5,77538f0d1,77561dd52,77569f1ae, +776283fbd,776a23fc2,777a83fc2,777e9bfa3,7780067b6,7780865b1,7781270b2,7781a70b9,7782270be, +7782bbfa6,77833f4a4,7783bd8aa,77843dc52,7784a3fbe,77861dc52,77869d8aa,77871f4a4,778a0f0d5, +778aae851,778b2e6ce,77a983fbe,77b03d32a,77b0bd752,77b223fbe,77b61d752,77b69d32a,77c003fbe, +77c7a3fbe,77dc83fbe,77e03f828,77e0bd9aa,77e13e052,77e1a3fbe,77e61e052,77e69d9aa,77e71f828, +77f9a3fc0,77fa03fbe,780b9bfa6,78103ecae,7810bdad2,78161dad2,78169ecae,78283bfa6,7830070b2, +7831870b9,7833870be,783f03fc0,7840252b2,7840a5f39,78412593e,78419bfa6,78423bfa6,7842bf4a4, +78433ddaa,7843bdf52,784623fc2,78469df52,78471ddaa,78479f4a4,786585f39,78660593e,7866852b2, +787026432,7870a6339,787125fbe,7871bd22a,78723de52,78761de52,78769d22a,788d9bfa6,789005fbe, +789086432,789106339,78a0268b2,78a0a70b9,78a12693e,78a1bbfa6,78a23f8a8,78a2bdf2a,78a33e252, +78a61e252,78a69df2a,78a71f8a8,78ab83fc2,78c0068b2,78c18693e,78c2870b9,78cd1bfa6,78cea3fc2, +78d026532,78d0a70b9,78d126c3e,78d1bbfa1,78d23ef2e,78d2bd952,78d61d952,78d69ef2e,78e10e851, +78eb86c3e,78ed070b9,78ed86532,78f903fc2,78fa1bfa1,7900270b1,7900a70b8,7901270bb,7901bbfa5, +79023f4a4,7902bddaa,79033e252,7903a3fc1,79040e6ce,7904ae7cd,79052e7d0,79061e252,79069ddaa, +79071f4a4,791c9bfa5,792b03fc1,79303bda5,7930bef2e,79313dd52,7932a3fc1,79361dd52,79369ef2e, +794303fc1,794a23fc1,795b83fc1,795e1bda5,79603bfa5,7960bf8a8,79613dc2a,7961be152,7963a3fc1, +79661e152,79669dc2a,79671f8a8,797483fc1,797ca3fc2,79849bfa5,79903bfa5,7990becae,79913de52, +79961de52,79969ecae,79ad9bfa5,79b28e7cd,79c003fc2,79c0bbfa5,79c13f4a4,79c1be12a,79c23dc52, +79c2ae7ce,79c61dc52,79c69e12a,79c71f4a4,79c7a3fc4,79e41bfa5,79f03bfa5,79f0bef2e,79f13de52, +79f61de52,79f69ef2e,79fb03fc4,7a11870bb,7a12070b1,7a12870b8,7a149bfa5,7a20270b1,7a20a70b8, +7a21270bb,7a21bbfa5,7a223f8a8,7a22bdf2a,7a233ee34,7a23be052,7a242e7cd,7a24a3fc2,7a250e7ce, +7a261e052,7a269ee34,7a271df2a,7a279f8a8,7a3a1bfa5,7a44070b1,7a44870bb,7a46870b8,7a4783fc2, +7a503bfa5,7a50bef2e,7a513e052,7a5323fc4,7a561e052,7a569ef2e,7a679bfa5,7a680e7d0,7a7483fc4, +7a7c0e7cd,7a802e33d,7a80ae342,7a81364b9,7a81b64bd,7a82364c2,7a82bbfaa,7a833f4a4,7a83bd52a, +7a843e739,7a84be152,7a861e152,7a869e739,7a871d52a,7a879f4a4,7a991bfaa,7ab03bfa5,7ab0be2aa, +7ab13e052,7ab61e052,7ab69e2aa,7aca1bfa5,7ae03bfa8,7ae0bf727,7ae13f828,7ae1bdb2a,7ae23e434, +7ae2bdf52,7ae323fc2,7ae61df52,7ae69e434,7ae71db2a,7ae79f828,7ae81f727,7af80e342,7af88e33d, +7af9164c2,7af9964bd,7afa164b9,7afb9bfa8,7aff83fc2,7b0c23fc2,7b102e33f,7b10ae344,7b11364bb, +7b11b64bf,7b12364c4,7b12bbfaa,7b133e52a,7b13be052,7b161e052,7b169e52a,7b299bfaa,7b3783fc2, +7b403bfa8,7b40bf4a4,7b413dcaa,7b41be052,7b4223ec0,7b461e052,7b469dcaa,7b471f4a4,7b5c1bfa8, +7b703bfa5,7b70be2aa,7b713e252,7b7183ec0,7b73a3fbd,7b761e252,7b769e2aa,7b899bfa5,7ba03bfa3, +7ba0bf727,7ba13f8a8,7ba1bdcaa,7ba23df52,7ba61df52,7ba69dcaa,7ba71f8a8,7ba79f727,7bbe9bfa3, +7bc903fbd,7bd00e344,7bd08e33f,7bd1164c4,7bd1964bf,7bd2164bb,7bd2bbfa5,7bd33e7aa,7bd3be052, +7bd423fbd,7bd61e052,7bd69e7aa,7beb1bfa5,7bf883fbd,7c002e340,7c00ae345,7c01364bd,7c01b64c0, +7c02364c5,7c02bbfaa,7c033f4a4,7c03bdb2a,7c043df52,7c0623fc2,7c069df52,7c071db2a,7c079f4a4, +7c179bfaa,7c2083fc2,7c303bfa5,7c30be2aa,7c313dbd2,7c34a3fc2,7c361dbd2,7c369e2aa,7c481bfa5, +7c5c83fc2,7c603bfa8,7c60bf727,7c613f8a8,7c61bd8aa,7c623dbd2,7c661dbd2,7c669d8aa,7c671f8a8, +7c679f727,7c770e345,7c780e340,7c78964c5,7c79164c0,7c79964bd,7c7a9bfa8,7c8ea3c40,7c902e33f, +7c90ae344,7c91364bb,7c91b64bf,7c92364c4,7c92bbfaa,7c933e7aa,7c93bd9d2,7c961d9d2,7c969e7aa, +7ca71bfaa,7cc03bfa8,7cc0bf4a4,7cc13d72a,7cc1bdd52,7cc61dd52,7cc69d72a,7cc71f4a4,7cdd9bfa8, +7ce983c40,7cf023fbd,7cf0bbfa5,7cf13e52a,7cf1bd7d2,7cf61d7d2,7cf69e52a,7d083f0ad,7d0b1bfa5, +7d0e1f0ad,7d203bfa3,7d20bf727,7d213f8a8,7d21bd72a,7d223f3ab,7d22bdf52,7d261df52,7d269f3ab, +7d271d72a,7d279f8a8,7d281f727,7d3a0e33f,7d3a8e344,7d409bfa3,7d4e83fbd,7d50164c4,7d50964bf, +7d51164bb,7d51bbfa5,7d523e7aa,7d52bdd52,7d561dd52,7d569e7aa,7d699bfa5,7d802e33d,7d80ae342, +7d81364b9,7d81b64bd,7d82364c2,7d82bbfaa,7d833f4a4,7d83bd52a,7d843dc52,7d861dc52,7d869d52a, +7d871f4a4,7d991bfaa,7daf23fc2,7db03bfa5,7db0be2aa,7db13d752,7db61d752,7db69e2aa,7dca1bfa5, +7dd883fc2,7de03bfa8,7de0bf727,7de13f828,7de1bdb2a,7de23e052,7de2a3fc2,7de61e052,7de69db2a, +7de71f828,7de79f727,7df70e33d,7df80e342,7df8964c2,7df9164bd,7df9964b9,7dfb9bfa8,7e0a83fc2, +7e102e33f,7e10ae344,7e11364bb,7e11b64bf,7e12364c4,7e12bbfaa,7e133e52a,7e13bdad2,7e1423fc2, +7e161dad2,7e169e52a,7e299bfaa,7e3a03fc2,7e403bfa8,7e40bf4a4,7e413dcaa,7e41bdf52,7e4623fc0, +7e469df52,7e471dcaa,7e479f4a4,7e5c1bfa8,7e6e83fc0,7e703bfa5,7e70be2aa,7e713de52,7e73a3fbd, +7e761de52,7e769e2aa,7e899bfa5,7e9803fbd,7ea03bfa3,7ea0bf727,7ea13f8a8,7ea1bdcaa,7ea23e252, +7ea2a3fbd,7ea30e344,7ea50e33f,7ea61e252,7ea69dcaa,7ea71f8a8,7ea79f727,7ebe9bfa3,7ed0164c4, +7ed0964bf,7ed1164bb,7ed1bbfa5,7ed23e7aa,7ed2bd952,7ed383fbd,7ed61d952,7ed69e7aa,7eeb1bfa5, +7f0023fc2,7f00ae340,7f012e345,7f01b64bd,7f02364c0,7f02b64c5,7f033bfaa,7f03bf4a4,7f043db2a, +7f04be252,7f061e252,7f069db2a,7f071f4a4,7f179bfaa,7f2a03fc2,7f303bfa5,7f30be2aa,7f313dd52, +7f361dd52,7f369e2aa,7f38a3fc5,7f481bfa5,7f5f83fc5,7f603bfa8,7f60bf727,7f613f8a8,7f61bd8aa, +7f623e152,7f661e152,7f669d8aa,7f671f8a8,7f679f727,7f6a8e345,7f6b0e340,7f78164c5,7f78964c0, +7f79164bd,7f7a9bfa8,7f902e33f,7f90ae344,7f91364bb,7f91b64bf,7f92364c4,7f92bbfaa,7f933e7aa, +7f93bde52,7f9423fc7,7f961de52,7f969e7aa,7fa71bfaa,7fc03bfa8,7fc0bf4a4,7fc13d72a,7fc1bdc52, +7fc61dc52,7fc69d72a,7fc71f4a4,7fdd9bfa8,7fe583fc7,7ff03bfa5,7ff0be52a,7ff13de52,7ff3a3fc5, +7ff61de52,7ff69e52a,800b1bfa5,801983fc5,801b8e33f,801c8e344,80203bfa3,8020bf727,80213f8a8, +8021bd72a,80223e052,802323fc4,80261e052,80269d72a,80271f8a8,80279f727,80409bfa3,804783fc4, +80503bfa5,8050be7aa,80513e052,8051a3fc2,80561e052,80569e7aa,8068164c4,8068964bf,8069164bb, +80699bfa5,80802b336,8080ae3ca,80812e44e,8081b64b9,8082364be,8082b64c2,80833bfaf,8083bf4a4, +80843d52a,8084be152,80852bfc2,80861e152,80869d52a,80871f4a4,80918bfc2,80920b336,80981bfaf, +809c03fc2,80aeaa636,80af0a636,80b03bfaa,80b0be2aa,80b13e052,80b2aa842,80b30a842,80b61e052, +80b69e2aa,80c19bfaa,80c62a842,80c68a842,80c82a836,80c88a836,80df2ba36,80e03bfad,80e0bf727, +80e13f828,80e1bdb2a,80e23df52,80e2abfc2,80e61df52,80e69db2a,80e71f828,80e79f727,80ee8ba36, +80f08bfc2,80fa1bfad,810f2a836,810f8a836,81103bfaf,8110be52a,81113e052,8112aa842,81130a842, +81161e052,81169e52a,81262a842,81268a842,81292a836,81298a836,81331bfaf,813e2b336,81402bfc2, +8140bf4a4,81413dcaa,8141be052,81461e052,81469dcaa,81471f4a4,814e0b336,81520bfc2,816ea3fc2, +816faa636,81700a636,8170bbfaa,81713e2aa,8171be252,8173aa442,81740a442,81761e252,81769e2aa, +81852a442,81858a442,81882a436,81888a436,818c1bfaa,819eab336,81a03bfa8,81a0bf727,81a13f8a8, +81a1bdcaa,81a23df52,81a2abfc2,81a603fc2,81a69df52,81a71dcaa,81a79f8a8,81a81f727,81b00b336, +81b18bfc2,81be1bfa8,81cea3fc2,81cf2a236,81cf8a236,81d02a242,81d0bbfaa,81d13e7aa,81d1be052, +81d20a242,81d61e052,81d69e7aa,81e6aa242,81e70a242,81e9aa236,81ea0a236,81ea9bfaa,81f583fc2, +81feab336,82003bfaf,8200bf4a4,82013db2a,8201bdf52,820223fc9,8202abfc2,82061df52,82069db2a, +82071f4a4,82100b336,82118bfc2,82189bfaf,822503fc9,822eaa236,822f0a236,82303bfaa,8230be2aa, +82313dbd2,8231a3fc7,82322a642,82328a642,82361dbd2,82369e2aa,8244aa642,82450a642,82492a436, +82499bfaa,824a0a436,825d03fc7,825f2b0b6,82603bfad,8260bf727,82613f8a8,8261bd8aa,82623dbd2, +82632bfc2,82661dbd2,82669d8aa,82671f8a8,82679f727,826823fc7,82708b0b6,82710bfc2,827c9bfad, +82903bfaf,8290be7aa,82913d9d2,8291aa436,82920a436,82932a642,82938a642,82961d9d2,82969e7aa, +82a72a642,82a78a642,82a803fc7,82aa2a636,82aa8a636,82b21bfaf,82beab336,82c03f4a4,82c0bd72a, +82c13dd52,82c32bfc2,82c3a3fc2,82c61dd52,82c69d72a,82c71f4a4,82cd8b336,82d30bfc2,82e603fc2, +82ee2a3b6,82ee8a3b6,82f03bfaa,82f0be52a,82f13d7d2,82f3aa242,82f40a242,82f61d7d2,82f69e52a, +82f723fbe,83062a242,83068a242,8309aa236,830a0a236,830f9bfaa,831fab336,83203bfa8,8320bf727, +83213f8a8,8321bd72a,83223df52,8322abfc2,83261df52,83269d72a,83271f8a8,83279f727,832d0b336, +832f8bfc2,833e1bfa8,834a03fbe,834e2a236,834e8a236,83503bfa5,8350be7aa,83513dd52,83532a242, +83538a242,83561dd52,83569e7aa,8357a3fbd,8367aa442,83680a442,8369aa436,836a0a436,836e164b9, +836f9bfa5,8370164c2,8374164be,837f2b336,83800e44e,83808e3ca,838137039,8381b703d,838237042, +8382bbfaa,83833f4a4,8383bd52a,83843dc52,8384abfc2,83861dc52,83869d52a,83871f4a4,838e0b336, +838e8bfc2,839817042,83989703d,839917039,83999bfaa,83b03bfa5,83b0be2aa,83b13d752,83b61d752, +83b69e2aa,83ca1bfa5,83e03bfa8,83e0bf727,83e13f828,83e1bdb2a,83e23e052,83e61e052,83e69db2a, +83e71f828,83e79f727,83ea03fbd,83fb9bfa8,84103703b,8410b703f,841137044,8411bbfaa,84123e52a, +8412bdad2,84161dad2,84169e52a,842817044,84289703f,84291703b,84299bfaa,843f2ff55,84403bfa8, +8440bf4a4,84413dcaa,8441bdf52,84461df52,84469dcaa,84471f4a4,84570ff55,8457aff51,845c1bfa8, +846f8ff51,84703bfa5,8470be2aa,84713de52,8471aff4e,84761de52,84769e2aa,84888ff4e,84892ff4a, +84899bfa5,84a03bfa3,84a0bf727,84a13f8a8,84a1bdcaa,84a23e252,84a28ff4a,84a32f0c9,84a61e252, +84a69dcaa,84a71f8a8,84a79f727,84be9bfa3,84d03bfa5,84d0be7aa,84d13d952,84d61d952,84d69e7aa, +84eb1bfa5,85003703d,8500b7040,850137045,8501bbfaa,85023f4a4,8502bdb2a,85033e252,85061e252, +85069db2a,85071f4a4,85179bfaa,85187003e,851897045,851917040,85199703d,85303bfa5,8530be2aa, +85313dd52,85361dd52,85369e2aa,85481bfa5,85603bfa8,8560bf727,85613f8a8,8561bd8aa,85623e152, +85661e152,85669d8aa,85671f8a8,85679f727,857a9bfa8,85900f0c9,8590b703b,85913703f,8591b7044, +85923bfaa,8592be7aa,85933de52,85961de52,85969e7aa,85a71bfaa,85a817044,85a89703f,85a91703b, +85b8af8c0,85c03bfa8,85c0bf4a4,85c13d72a,85c1bdc52,85c61dc52,85c69d72a,85c71f4a4,85dd9bfa8, +85e18f8c0,85e22f8c2,85f03bfa5,85f0be52a,85f13de52,85f26801c,85f61de52,85f69e52a,86000f8c2, +86083f0ad,860b1bfa5,860e1f0ad,86203bfa3,8620bf727,86213f8a8,8621bd72a,86223f3ab,8622be052, +86261e052,86269f3ab,86271d72a,86279f8a8,86281f727,86409bfa3,86503bfa5,8650be7aa,86513e052, +8651aab36,86520ab36,8652aa642,86530a642,86561e052,86569e7aa,8668aabb6,86690abb6,8669aa642, +866a1bfa5,866a8a642,86802e33d,8680ae342,8681364b9,8681b64bd,8682364c2,8682bbfaa,86833f4a4, +8683bd52a,86843e152,86852bc3d,86861e152,86869d52a,86871f4a4,86908bc3d,86992bc3d,86999bfaa, +86a50bc3d,86b03bfa5,86b0be2aa,86b13e052,86b52a8bd,86b61e052,86b69e2aa,86bb0a8bd,86c92bc3b, +86ca1bfa5,86d80bc3b,86e03bfa8,86e0bf727,86e13f828,86e1bdb2a,86e23df52,86e323fc2,86e61df52, +86e69db2a,86e71f828,86e79f727,86f80e342,86f88e33d,86f9164c2,86f9964bd,86fa164b9,86fb2afb9, +86fb9bfa8,86ff83fc2,87060afb9,870c23fc2,870fabc3c,87102e33f,8710ae344,8711364bb,8711b64bf, +8712364c4,8712bbfaa,87133e52a,8713be052,87161e052,87169e52a,871b0bc3c,871babc3d,87299bfaa, +873783fc2,87403bfa8,8740bf4a4,87413dcaa,8741be052,874223ec0,87461e052,87469dcaa,87471f4a4, +875c1bfa8,876c33fc9,87703bfa5,8770be2aa,87713e252,877183ec0,8773a3fbd,87761e252,87769e2aa, +877b13fc9,87899bfa5,879f33fc9,87a03bfa3,87a0bf727,87a13f8a8,87a1bdcaa,87a23df52,87a61df52, +87a69dcaa,87a71f8a8,87a79f727,87b193fc9,87b30bc3d,87be9bfa3,87c903fbd,87d00e344,87d08e33f, +87d1164c4,87d1964bf,87d2164bb,87d2bbfa5,87d33e7aa,87d3be052,87d433fc9,87d4a3fbd,87d61e052, +87d69e7aa,87eb1bfa5,87f883fbd,88002e340,8800ae345,8801364bd,8801b64c0,8802364c5,8802bbfaa, +88033f4a4,8803bdb2a,88043df52,8804abc3d,880623fc2,88069df52,88071db2a,88079f4a4,880f0bc3d, +88179bfaa,881a2bc3d,882083fc2,88258bc3d,88303bfa5,8830be2aa,88313dbd2,8831aa7bd,8834a3fc2, +88361dbd2,88369e2aa,883b8a7bd,88481bfa5,884cabc3b,88588bc3b,885c83fc2,88603bfa8,8860bf727, +88613f8a8,8861bd8aa,88623dbd2,88661dbd2,88669d8aa,88671f8a8,88679f727,88770e345,88780e340, +8878964c5,8879164c0,8879964bd,887a2b4b9,887a9bfa8,88878b4b9,888ea3c40,88902e33f,8890ae344, +8891364bb,8891b64bf,8892364c4,8892bbfaa,88933e7aa,8893bd9d2,88942bc3d,88961d9d2,88969e7aa, +88a71bfaa,88c03bfa8,88c0bf4a4,88c13d72a,88c1bdd52,88c61dd52,88c69d72a,88c71f4a4,88d813fc9, +88dd9bfa8,88e983c40,88ef33fc7,88f023fbd,88f0bbfa5,88f13e52a,88f1bd7d2,88f61d7d2,88f69e52a, +890593fc7,89083f0ad,890ab3fc5,890b1bfa5,890e1f0ad,891a93fc5,89203bfa3,8920bf727,89213f8a8, +8921bd72a,89223f3ab,8922bdf52,892333fc7,89250bc3d,89261df52,89269f3ab,89271d72a,89279f8a8, +89281f727,893693fc7,893a0e33f,893a8e344,893eb3fc5,89409bfa3,894b93fc5,894d33fc7,894e83fbd, +894f13fc7,8950164c4,8950964bf,8951164bb,8951bbfa5,89523e7aa,8952bdd52,895333fc8,89561dd52, +89569e7aa,895733fc9,895a13fc8,89699bfa5,89802e33d,8980ae342,8981364b9,8981b64bd,8982364c2, +8982bbfaa,89833f4a4,8983bd52a,89843dc52,8984abc3d,89861dc52,89869d52a,89871f4a4,898a93fc9, +898f8bc3d,89991bfaa,899aabc3d,89a80bc3d,89af23fc2,89b03bfa5,89b0be2aa,89b13d752,89b1aacbd, +89b61d752,89b69e2aa,89bc0acbd,89ca1bfa5,89caabc3b,89d883fc2,89d90bc3b,89e03bfa8,89e0bf727, +89e13f828,89e1bdb2a,89e23e052,89e2a3fc2,89e61e052,89e69db2a,89e71f828,89e79f727,89f70e33d, +89f80e342,89f8964c2,89f9164bd,89f9964b9,89fb2af39,89fb9bfa8,8a040af39,8a0a29fbc,8a0a83fc2, +8a0e09fbc,8a0fabc3d,8a102e33f,8a10ae344,8a11364bb,8a11b64bf,8a12364c4,8a12bbfaa,8a133e52a, +8a13bdad2,8a1423fc2,8a161dad2,8a169e52a,8a299bfaa,8a3a03fc2,8a403bfa8,8a40bf4a4,8a413dcaa, +8a41bdf52,8a4623fc0,8a469df52,8a471dcaa,8a479f4a4,8a5c1bfa8,8a6e83fc0,8a6fb3fc9,8a703bfa5, +8a70be2aa,8a713de52,8a73a3fbd,8a761de52,8a769e2aa,8a7d93fc9,8a899bfa5,8a9803fbd,8aa03bfa3, +8aa0bf727,8aa13f8a8,8aa1bdcaa,8aa23e252,8aa2b2b48,8aa323fbd,8aa38e344,8aa492b48,8aa533fc9, +8aa58e33f,8aa61e252,8aa69dcaa,8aa71f8a8,8aa79f727,8ab293fc9,8abe9bfa3,8acd8bc3d,8ad0164c4, +8ad0964bf,8ad1164bb,8ad1bbfa5,8ad23e7aa,8ad2bd952,8ad383fbd,8ad633fc9,8ad69d952,8ad71e7aa, +8aeb1bfa5,8b0023fc2,8b00ae340,8b012e345,8b01b64bd,8b02364c0,8b02b64c5,8b033bfaa,8b03bf4a4, +8b043db2a,8b04be252,8b052bc3d,8b061e252,8b069db2a,8b071f4a4,8b108bc3d,8b179bfaa,8b1a2bc3d, +8b268bc3d,8b2a03fc2,8b303bfa5,8b30be2aa,8b313dd52,8b33aa93d,8b361dd52,8b369e2aa,8b38a3fc5, +8b3c8a93d,8b481bfa5,8b492bc3b,8b568bc3b,8b5f83fc5,8b603bfa8,8b60bf727,8b613f8a8,8b61bd8aa, +8b623e152,8b661e152,8b669d8aa,8b671f8a8,8b679f727,8b6a8e345,8b6b0e340,8b78164c5,8b78964c0, +8b79164bd,8b7a2ae39,8b7a9bfa8,8b870ae39,8b902e33f,8b90ae344,8b91364bb,8b91b64bf,8b92364c4, +8b92bbfaa,8b933e7aa,8b93bde52,8b942bc3d,8b94a3fc7,8b961de52,8b969e7aa,8ba71bfaa,8bc03bfa8, +8bc0bf4a4,8bc13d72a,8bc1bdc52,8bc213fc9,8bc61dc52,8bc69d72a,8bc71f4a4,8bdd9bfa8,8be583fc7, +8beb33fc9,8bf03bfa5,8bf0be52a,8bf13de52,8bf3a3fc5,8bf61de52,8bf69e52a,8bff93fc9,8c05b15c3, +8c0b1bfa5,8c0e115c3,8c11b1547,8c1691547,8c1983fc5,8c1b8e33f,8c1c8e344,8c1e33fc7,8c203bfa3, +8c20bf727,8c213f8a8,8c21bd72a,8c223e052,8c2323fc4,8c261e052,8c269d72a,8c271f8a8,8c279f727, +8c280bc3d,8c3393fc7,8c39b3fc5,8c409bfa3,8c476801b,8c4783fc4,8c503bfa5,8c50bf22e,8c513e052, +8c51a3fc2,8c5413fc5,8c5633fc2,8c569e052,8c571f22e,8c68164c4,8c68964bf,8c69164bb,8c6993fc2, +8c6a1bfa5,8c71b3fc0,8c7a93fc0,8c7b33fc2,8c802b336,8c80ae2ca,8c812e44e,8c81b64b9,8c82364be, +8c82b64c2,8c833bfaf,8c83bf4a4,8c843d52a,8c84be152,8c852bfc2,8c8593fc2,8c861e152,8c869d52a, +8c871f4a4,8c87b3fc2,8c918bfc2,8c920b336,8c981bfaf,8c9c03fc2,8caeaa636,8caf0a636,8cb03bfaa, +8cb0be2aa,8cb13e052,8cb2aa842,8cb30a842,8cb61e052,8cb69e2aa,8cc19bfaa,8cc62a842,8cc68a842, +8cc82a836,8cc88a836,8cdf2ba36,8ce03bfad,8ce0bf727,8ce13f828,8ce1bdb2a,8ce23df52,8ce2abfc2, +8ce431341,8ce61df52,8ce69db2a,8ce71f828,8ce79f727,8ce813fc2,8ceab1942,8cee8ba36,8cef11942, +8cef91341,8cf08bfc2,8cfa1bfad,8d0f2a836,8d0f8a836,8d103bfaf,8d10be52a,8d113e052,8d12aa842, +8d130a842,8d161e052,8d169e52a,8d262a842,8d268a842,8d292a836,8d298a836,8d331bfaf,8d3e2b336, +8d402bfc2,8d40bf4a4,8d413dcaa,8d41be052,8d461e052,8d469dcaa,8d471f4a4,8d4e0b336,8d520bfc2, +8d6ea3fc2,8d6faa636,8d700a636,8d70bbfaa,8d713e2aa,8d71be252,8d73aa442,8d740a442,8d761e252, +8d769e2aa,8d852a442,8d858a442,8d882a436,8d888a436,8d8c1bfaa,8d9eab336,8da03bfa8,8da0bf727, +8da13f8a8,8da1bdcaa,8da23df52,8da2abfc2,8da603fc2,8da69df52,8da71dcaa,8da79f8a8,8da81f727, +8db00b336,8db18bfc2,8dbe1bfa8,8dcea3fc2,8dcf2a236,8dcf8a236,8dd02a242,8dd0bbfaa,8dd13e7aa, +8dd1be052,8dd20a242,8dd61e052,8dd69e7aa,8de6aa242,8de70a242,8de9aa236,8dea0a236,8dea9bfaa, +8df583fc2,8dfeab336,8e003bfaf,8e00bf4a4,8e013db2a,8e01bdf52,8e0223fc9,8e02abfc2,8e061df52, +8e069db2a,8e071f4a4,8e100b336,8e118bfc2,8e189bfaf,8e2503fc9,8e2eaa236,8e2f0a236,8e303bfaa, +8e30be2aa,8e313dbd2,8e31a3fc7,8e322a642,8e328a642,8e361dbd2,8e369e2aa,8e44aa642,8e450a642, +8e492a436,8e499bfaa,8e4a0a436,8e5d03fc7,8e5f2b0b6,8e603bfad,8e60bf727,8e613f8a8,8e61bd8aa, +8e623dbd2,8e632bfc2,8e661dbd2,8e669d8aa,8e671f8a8,8e679f727,8e6823fc7,8e708b0b6,8e710bfc2, +8e7c9bfad,8e903bfaf,8e90be7aa,8e913d9d2,8e91aa436,8e920a436,8e932a642,8e938a642,8e961d9d2, +8e969e7aa,8ea72a642,8ea78a642,8ea803fc7,8eaa2a636,8eaa8a636,8eb21bfaf,8ebeab336,8ec03f4a4, +8ec0bd72a,8ec13dd52,8ec32bfc2,8ec3a3fc2,8ec61dd52,8ec69d72a,8ec71f4a4,8ecd8b336,8ed30bfc2, +8ee603fc2,8eee2a3b6,8eee8a3b6,8ef03bfaa,8ef0be52a,8ef13d7d2,8ef3aa242,8ef40a242,8ef61d7d2, +8ef69e52a,8ef723fbe,8f062a242,8f068a242,8f09aa236,8f0a0a236,8f0f9bfaa,8f1fab336,8f203bfa8, +8f20bf727,8f213f8a8,8f21bd72a,8f223df52,8f22abfc2,8f261df52,8f269d72a,8f271f8a8,8f279f727, +8f2d0b336,8f2f8bfc2,8f3e1bfa8,8f4a03fbe,8f4e2a236,8f4e8a236,8f503bfa5,8f50be7aa,8f513dd52, +8f532a242,8f538a242,8f561dd52,8f569e7aa,8f57a3fbd,8f67aa442,8f680a442,8f69aa436,8f6a0a436, +8f6e164b9,8f6f9bfa5,8f70164c2,8f74164be,8f7f2b336,8f800e44e,8f808e2ca,8f8137039,8f81b703d, +8f8237042,8f82bbfaa,8f833f4a4,8f83bd52a,8f843dc52,8f84abfc2,8f861dc52,8f869d52a,8f871f4a4, +8f8e0b336,8f8e8bfc2,8f9817042,8f989703d,8f9917039,8f999bfaa,8fad33fc9,8fb03bfa5,8fb0be2aa, +8fb13d752,8fb61d752,8fb69e2aa,8fc413fc9,8fca1bfa5,8fdeb3fd4,8fe03bfa8,8fe0bf727,8fe13f828, +8fe1bdb2a,8fe23e052,8fe61e052,8fe69db2a,8fe71f828,8fe79f727,8fea03fbd,8ffb9bfa8,900793fd4, +90103703b,9010b703f,901137044,9011bbfaa,90123e52a,9012bdad2,901333fc9,90161dad2,90169e52a, +902817044,90289703f,90291703b,90299bfaa,902a93fc9,903f2ff55,90403bfa8,9040bf4a4,90413dcaa, +9041bdf52,90461df52,90469dcaa,90471f4a4,90570ff55,9057aff51,905c1bfa8,906f8ff51,90703bfa5, +9070be2aa,90713de52,9071aff4e,90761de52,90769e2aa,90888ff4e,90892ff4a,90899bfa5,90a03bfa3, +90a0bf727,90a13f8a8,90a1bdcaa,90a23e252,90a28ff4a,90a32f0c9,90a61e252,90a69dcaa,90a71f8a8, +90a79f727,90be9bfa3,90d03bfa5,90d0be7aa,90d13d952,90d61d952,90d69e7aa,90eb1bfa5,91003703d, +9100b7040,910137045,9101bbfaa,91023f4a4,9102bdb2a,91033e252,91061e252,91069db2a,91071f4a4, +91179bfaa,911817045,911897040,91191703d,912b33fc9,91303bfa5,9130be2aa,91313dd52,9131a3fc2, +91361dd52,91369e2aa,914093fc9,91481bfa5,915503fc2,915e33fd4,915ea3fc5,91603bfa8,9160bf727, +91613f8a8,9161bd8aa,91623e152,91661e152,91669d8aa,91671f8a8,91679f727,917a9bfa8,918983fc5, +918a13fd4,918e33dc9,91900f0c9,9190b703b,91913703f,9191b7044,91923bfaa,9192be7aa,91933de52, +9193a3fc7,91961de52,91969e7aa,91a71bfaa,91a817044,91a89703f,91a91703b,91aa93dc9,91b8af8c0, +91c03bfa8,91c0bf4a4,91c13d72a,91c1bdc52,91c61dc52,91c69d72a,91c71f4a4,91dd9bfa8,91e18f8c0, +91e22f8c2,91e583fc7,91ef23fc5,91f03bfa5,91f0be52a,91f13de52,91f61de52,91f69e52a,92000f8c2, +920b1bfa5,921503fc5,922023fc4,9220bbfa3,92213f727,9221bf8a8,92223d72a,9222be052,92261e052, +92269d72a,92271f8a8,92279f727,92409bfa3,924703fc4,92503bfa5,9250be7aa,92513e052,9251aab36, +92520ab36,9252aa642,92530a642,9253a3fc2,92561e052,92569e7aa,9268aabb6,92690abb6,9269aa642, +926a1bfa5,926a8a642,92802b436,9280ae24a,92812e44e,9281b64b9,9282364be,9282b64c2,92833bfaf, +9283bf4a4,92843d52a,9284be152,92852bfc2,92861e152,92869d52a,92871f4a4,92918bfc2,92920b436, +92981bfaf,92a903fc2,92aeaa736,92af0a736,92b03bfaa,92b0be2aa,92b13e052,92b2aa942,92b30a942, +92b61e052,92b69e2aa,92c19bfaa,92c62a942,92c68a942,92c82a936,92c88a936,92df2bb36,92e03bfad, +92e0bf727,92e13f828,92e1bdb2a,92e23df52,92e2abfc2,92e61df52,92e69db2a,92e71f828,92e79f727, +92ee8bb36,92f08bfc2,92fa1bfad,930f2a936,930f8a936,93103bfaf,9310be52a,93113e052,9312aa942, +93130a942,93161e052,93169e52a,93262a942,93268a942,93292a936,93298a936,93331bfaf,933e2b436, +93402bfc2,9340bf4a4,93413dcaa,9341be052,93461e052,93469dcaa,93471f4a4,934e0b436,93520bfc2, +936faa736,93700a736,9370bbfaa,93713e2aa,9371be252,937223fc2,9373aa542,93740a542,93761e252, +93769e2aa,93852a542,93858a542,93882a536,93888a536,938c1bfaa,939e03fc2,939eab436,93a03bfa8, +93a0bf727,93a13f8a8,93a1bdcaa,93a23df52,93a2abfc2,93a61df52,93a69dcaa,93a71f8a8,93a79f727, +93b00b436,93b18bfc2,93be1bfa8,93cf2a336,93cf8a336,93d023fc2,93d0aa342,93d13bfaa,93d1be7aa, +93d23e052,93d28a342,93d61e052,93d69e7aa,93e6aa342,93e70a342,93e9aa336,93ea0a336,93ea9bfaa, +93fb03fc2,93feab436,94003bfaf,9400bf4a4,94013db2a,9401bdf52,94022bfc2,9402a3fc9,94061df52, +94069db2a,94071f4a4,94100b436,94118bfc2,94189bfaf,942583fc9,942eaa336,942f0a336,94303bfaa, +9430be2aa,94313dbd2,9431a3fc7,94322a742,94328a742,94361dbd2,94369e2aa,9444aa742,94450a742, +94492a536,94499bfaa,944a0a536,945703fc7,945f2b1b6,94603bfad,9460bf727,94613f8a8,9461bd8aa, +94623dbd2,94632bfc2,9463a3fc7,94661dbd2,94669d8aa,94671f8a8,94679f727,94708b1b6,94710bfc2, +947c9bfad,94903bfaf,9490be7aa,94913d9d2,9491aa536,94920a536,94932a742,94938a742,94961d9d2, +94969e7aa,949b03fc7,94a72a742,94a78a742,94aa2a736,94aa8a736,94b21bfaf,94beab436,94c03f4a4, +94c0bd72a,94c13dd52,94c223fc2,94c32bfc2,94c61dd52,94c69d72a,94c71f4a4,94cd8b436,94d30bfc2, +94ee2a4b6,94ee8a4b6,94f03bfaa,94f0be52a,94f13d7d2,94f3aa342,94f403fc2,94f48a342,94f523fbe, +94f61d7d2,94f69e52a,95062a342,95068a342,9509aa336,950a0a336,950f9bfaa,951fab436,95203bfa8, +9520bf727,95213f8a8,9521bd72a,95223df52,9522abfc2,95261df52,95269d72a,95271f8a8,95279f727, +952d0b436,952f8bfc2,953e1bfa8,954703fbe,954e2a336,954e8a336,95503bfa5,9550be7aa,95513dd52, +95532a342,95538a342,955523fbd,95561dd52,95569e7aa,9567aa542,95680a542,9569aa536,956a0a536, +956f9bfa5,9576164c2,9578164be,9578964b9,957f2b436,95800e44e,95808e24a,958137039,9581b703d, +958237042,9582bbfaa,95833f4a4,9583bd52a,95843dc52,9584abfc2,95861dc52,95869d52a,95871f4a4, +958e0b436,958e8bfc2,95991bfaa,959a17039,959b97042,959c1703d,95ad33fc9,95b03bfa5,95b0be2aa, +95b13d752,95b61d752,95b69e2aa,95c413fc9,95ca1bfa5,95deb3fd4,95e03bfa8,95e0bf727,95e13f828, +95e1bdb2a,95e23e052,95e61e052,95e69db2a,95e71f828,95e79f727,95eb03fbd,95fb9bfa8,960793fd4, +96103703b,9610b703f,961137044,9611bbfaa,96123e52a,9612bdad2,961333fc9,96161dad2,96169e52a, +962817044,96289703f,96291703b,96299bfaa,962a93fc9,963f2ff55,96403bfa8,9640bf4a4,96413dcaa, +9641bdf52,96461df52,96469dcaa,96471f4a4,96570ff55,9657aff51,965c1bfa8,966f8ff51,96703bfa5, +9670be2aa,96713de52,9671aff4e,96761de52,96769e2aa,96888ff4e,96892ff4a,96899bfa5,96a03bfa3, +96a0bf727,96a13f8a8,96a1bdcaa,96a23e252,96a28ff4a,96a32f0c9,96a61e252,96a69dcaa,96a71f8a8, +96a79f727,96be9bfa3,96d03bfa5,96d0be7aa,96d13d952,96d61d952,96d69e7aa,96eb1bfa5,97003703d, +9700b7040,970137045,9701bbfaa,97023f4a4,9702bdb2a,97033e252,97061e252,97069db2a,97071f4a4, +97179bfaa,971817045,971897040,97191703d,972b33fc9,97303bfa5,9730be2aa,97313dd52,97361dd52, +97369e2aa,974093fc9,97481bfa5,975e33fd4,97603bfa8,9760bf727,97613f8a8,9761bd8aa,97623e152, +97661e152,97669d8aa,97671f8a8,97679f727,97786801c,977a9bfa8,978993fd4,978e33dc9,97900f0c9, +9790b703b,97913703f,9791b7044,97923bfaa,9792be7aa,97933de52,97961de52,97969e7aa,97a71bfaa, +97a817044,97a89703f,97a91703b,97aa93dc9,97b8af8c0,97c03bfa8,97c0bf4a4,97c13d72a,97c1bdc52, +97c61dc52,97c69d72a,97c71f4a4,97dd9bfa8,97e18f8c0,97e22f8c2,97f03bfa5,97f0be52a,97f13de52, +97f61de52,97f69e52a,98000f8c2,98083f0ad,980b1bfa5,980e1f0ad,98203bfa3,9820bf727,98213f8a8, +9821bd72a,98223f3ab,9822be052,98261e052,98269f3ab,98271d72a,98279f8a8,98281f727,98409bfa3, +98503bfa5,9850bf22e,98513e052,98532bfb6,98538bfb6,98561e052,98569f22e,98699bfa5,986b2bfb6, +986b8bfb6,98802e33d,9880ae342,9881364b9,9881b64bd,9882364c2,9882bbfaa,98833f4a4,9883bd52a, +98843e152,9884abfbd,98861e152,98869d52a,98871f4a4,98918bfbd,9898abfbd,98991bfaa,98a88bfbd, +98b03bfa5,98b0be2aa,98b13e052,98b3aa3b2,98b61e052,98b69e2aa,98b70a3b2,98ca2bfbb,98ca9bfa5, +98e03bfa8,98e0bf727,98e13f828,98e1bdb2a,98e23df52,98e61df52,98e69db2a,98e71f828,98e79f727, +98e80bfbb,98f80e342,98f88e33d,98f9164c2,98f9964bd,98fa164b9,98fb9bfa8,98fc2bfb9,99068bfb9, +99102e33f,9910ae344,9911364bb,9911b64bf,9912364c4,9912bbfaa,99133e52a,9913be052,99142bfbc, +9915abfbd,99161e052,99169e52a,99198bfbc,99299bfaa,99403bfa8,9940bf4a4,99413dcaa,9941be052, +99461e052,99469dcaa,99471f4a4,995c1bfa8,99703bfa5,9970be2aa,99713e252,99761e252,99769e2aa, +99899bfa5,99a03bfa3,99a0bf727,99a13f8a8,99a1bdcaa,99a23df52,99a61df52,99a69dcaa,99a71f8a8, +99a79f727,99b10bfbd,99be9bfa3,99d00e344,99d08e33f,99d1164c4,99d1964bf,99d2164bb,99d2bbfa5, +99d33e7aa,99d3be052,99d42bcb6,99d48bcb6,99d61e052,99d69e7aa,99eb1bfa5,99ec2bc36,99ec8bc36, +9a002e340,9a00ae345,9a01364bd,9a01b64c0,9a02364c5,9a02bbfaa,9a033f4a4,9a03bdb2a,9a043df52, +9a04abfbd,9a061df52,9a069db2a,9a071f4a4,9a138bfbd,9a179bfaa,9a182bfbd,9a2a8bfbd,9a303bfa5, +9a30be2aa,9a313dbd2,9a33aa3b2,9a361dbd2,9a369e2aa,9a3a8a3b2,9a481bfa5,9a4a2bfbb,9a603bfa8, +9a60bf727,9a613f8a8,9a61bd8aa,9a623dbd2,9a628bfbb,9a661dbd2,9a669d8aa,9a671f8a8,9a679f727, +9a770e345,9a780e340,9a78964c5,9a79164c0,9a79964bd,9a7a2bfb9,9a7a9bfa8,9a84ab33b,9a858b33b, +9a870bfb9,9a8c2b73c,9a902e33f,9a90ae344,9a91364bb,9a91b64bf,9a92364c4,9a92bbfaa,9a933e7aa, +9a93bd9d2,9a940b73c,9a94abfbd,9a961d9d2,9a969e7aa,9aa71bfaa,9ac03bfa8,9ac0bf4a4,9ac13d72a, +9ac1bdd52,9ac61dd52,9ac69d72a,9ac71f4a4,9add9bfa8,9af03bfa5,9af0be52a,9af13d7d2,9af61d7d2, +9af69e52a,9b0b1bfa5,9b203bfa3,9b20bf727,9b213f8a8,9b21bd72a,9b223df52,9b261df52,9b269d72a, +9b271f8a8,9b279f727,9b380bfbd,9b3a0e33f,9b3a8e344,9b409bfa3,9b502bcb6,9b50964c4,9b51164bf, +9b51964bb,9b523bfa5,9b52be7aa,9b533dd52,9b560bcb6,9b569dd52,9b571e7aa,9b682bd36,9b699bfa5, +9b6e0bd36,9b802e33d,9b80ae342,9b81364b9,9b81b64bd,9b82364c2,9b82bbfaa,9b833f4a4,9b83bd52a, +9b843dc52,9b852bfbd,9b861dc52,9b869d52a,9b871f4a4,9b948bfbd,9b982bfbd,9b991bfaa,9baa8bfbd, +9bb03bfa5,9bb0be2aa,9bb13d752,9bb61d752,9bb69e2aa,9bca2bfbb,9bca9bfa5,9be03bfa8,9be0bf727, +9be13f828,9be1bdb2a,9be23e052,9be28bfbb,9be61e052,9be69db2a,9be71f828,9be79f727,9bf70e33d, +9bf80e342,9bf8964c2,9bf9164bd,9bf9964b9,9bfa2b339,9bfb9bfa8,9c028b339,9c102e33f,9c10ae344, +9c11364bb,9c11b64bf,9c12364c4,9c12bbfaa,9c133e52a,9c13bdad2,9c142bfbd,9c161dad2,9c169e52a, +9c299bfaa,9c403bfa8,9c40bf4a4,9c413dcaa,9c41bdf52,9c461df52,9c469dcaa,9c471f4a4,9c5c1bfa8, +9c703bfa5,9c70be2aa,9c713de52,9c761de52,9c769e2aa,9c899bfa5,9ca03bfa3,9ca0bf727,9ca13f8a8, +9ca1bdcaa,9ca23e252,9ca28e344,9ca50e33f,9ca61e252,9ca69dcaa,9ca71f8a8,9ca79f727,9cbe8bfbd, +9cbf1bfa3,9cd02bc36,9cd0964c4,9cd1164bf,9cd1964bb,9cd23bfa5,9cd2be7aa,9cd33d952,9cd38bc36, +9cd61d952,9cd69e7aa,9ce82bcb6,9ce88bcb6,9ceb1bfa5,9d002e340,9d00ae345,9d01364bd,9d01b64c0, +9d02364c5,9d02bbfaa,9d033f4a4,9d03bdb2a,9d043e252,9d04abfbd,9d061e252,9d069db2a,9d071f4a4, +9d138bfbd,9d179bfaa,9d182bfbd,9d270bfbd,9d303bfa5,9d30be2aa,9d313dd52,9d361dd52,9d369e2aa, +9d37291b2,9d38891b2,9d481bfa5,9d492bfbb,9d603bfa8,9d60bf727,9d613f8a8,9d61bd8aa,9d623e152, +9d638bfbb,9d661e152,9d669d8aa,9d671f8a8,9d679f727,9d6a8e345,9d6b0e340,9d78164c5,9d78964c0, +9d79164bd,9d7aabfb9,9d7b1bfa8,9d898bfb9,9d902e33f,9d90ae344,9d91364bb,9d91b64bf,9d92364c4, +9d92bbfaa,9d933e7aa,9d93bde52,9d942bc36,9d948bc36,9d961de52,9d969e7aa,9da71bfaa,9da8abcb6, +9da90bcb6,9dc03bfa8,9dc0bf4a4,9dc13d72a,9dc1bdc52,9dc4abfbd,9dc61dc52,9dc69d72a,9dc71f4a4, +9dd20bfbd,9dd58e344,9dd60e33f,9dd82bfbd,9ddd9bfa8,9dedaff42,9dee2ff4e,9def0bfbd,9df03bfa5, +9df0be52a,9df13de52,9df61de52,9df69e52a,9e018ff42,9e028ff4e,9e0b1bfa5,9e0dabfbb,9e1d2ff42, +9e1daff4e,9e1e8bfbb,9e203bfa3,9e20bf727,9e213f8a8,9e21bd72a,9e223e052,9e261e052,9e269d72a, +9e271f8a8,9e279f727,9e310ff4e,9e328ff42,9e3b2bfb9,9e409bfa3,9e4c8bfb9,9e503bfa5,9e50be7aa, +9e513e052,9e51abc36,9e520bc36,9e561e052,9e569e7aa,9e68164c4,9e68964bf,9e69164bb,9e69abcb6, +9e6a0bcb6,9e6a9bfa5,9e802e33d,9e80ae342,9e81364b9,9e81b64bd,9e82364c2,9e82bbfaa,9e833f4a4, +9e83bd52a,9e843e152,9e84abfbd,9e861e152,9e869d52a,9e871f4a4,9e928bfbd,9e98abfbd,9e991bfaa, +9eaf8bfbd,9eb03bfa5,9eb0be2aa,9eb13e052,9eb61e052,9eb69e2aa,9ebca903b,9ec20903b,9ec8abfbb, +9eca1bfa5,9ee03bfa8,9ee0bf727,9ee13f828,9ee1bdb2a,9ee23df52,9ee60bfbb,9ee69df52,9ee71db2a, +9ee79f828,9ee81f727,9ef82bfb9,9ef88e342,9ef90e33d,9ef9964c2,9efa164bd,9efa964b9,9efb9bfa8, +9f020bfb9,9f102e33f,9f10ae344,9f11364bb,9f11b64bf,9f12364c4,9f12bbfaa,9f133e52a,9f13be052, +9f142b63c,9f162bfbd,9f169e052,9f171e52a,9f1b8b63c,9f299bfaa,9f403bfa8,9f40bf4a4,9f413dcaa, +9f41be052,9f461e052,9f469dcaa,9f471f4a4,9f5c1bfa8,9f703bfa5,9f70be2aa,9f713e252,9f761e252, +9f769e2aa,9f899bfa5,9fa03bfa3,9fa0bf727,9fa13f8a8,9fa1bdcaa,9fa23df52,9fa61df52,9fa69dcaa, +9fa71f8a8,9fa79f727,9fbc0bfbd,9fbe9bfa3,9fd00e344,9fd08e33f,9fd1164c4,9fd1964bf,9fd2164bb, +9fd2bbfa5,9fd33e7aa,9fd3be052,9fd42bc36,9fd48bc36,9fd61e052,9fd69e7aa,9fe9abcb6,9fea0bcb6, +9feb1bfa5,a0002e340,a000ae345,a001364bd,a001b64c0,a002364c5,a002bbfaa,a0033f4a4,a003bdb2a, +a0043df52,a004abfbd,a0061df52,a0069db2a,a0071f4a4,a0140bfbd,a0179bfaa,a01a2bfbd,a0290bfbd, +a0303bfa5,a030be2aa,a0313dbd2,a031aa731,a0338a731,a0361dbd2,a0369e2aa,a0481bfa5,a04b2bfbb, +a05d8bfbb,a0603bfa8,a060bf727,a0613f8a8,a061bd8aa,a0623dbd2,a0661dbd2,a0669d8aa,a0671f8a8, +a0679f727,a0770e345,a0780e340,a078964c5,a079164c0,a079964bd,a07a2bfb9,a07a9bfa8,a0880bfb9, +a0902e33f,a090ae344,a091364bb,a091b64bf,a092364c4,a092bbfaa,a0933e7aa,a093bd9d2,a0942bcb6, +a0961d9d2,a0969e7aa,a0980bcb6,a0a71bfaa,a0a92bc36,a0ae0bc36,a0c03bfa8,a0c0bf4a4,a0c13d72a, +a0c1bdd52,a0c22bfbd,a0c61dd52,a0c69d72a,a0c71f4a4,a0cf8bfbd,a0d40e344,a0d50e33f,a0d82bfbd, +a0dd9bfa8,a0ecaff42,a0ed2ff4e,a0ef0bfbd,a0f03bfa5,a0f0be52a,a0f13d7d2,a0f61d7d2,a0f69e52a, +a1020ff42,a1028ff4e,a1083f0ad,a10b1bfa5,a10e1f0ad,a10fabfbb,a11daff42,a11e2ff4e,a1203bfa3, +a120bf727,a1213f8a8,a121bd72a,a1223f3ab,a122bdf52,a1230bfbb,a1261df52,a1269f3ab,a1271d72a, +a1279f8a8,a1281f727,a1318ff42,a1320ff4e,a13a2bfb9,a1409bfa3,a14b0bfb9,a150164c4,a150964bf, +a151164bb,a151bbfa5,a1523e7aa,a152bdd52,a1532bc36,a1538bc36,a1561dd52,a1569e7aa,a169abc36, +a16a1bfa5,a16a8bc36,a1802e33d,a180ae342,a181364b9,a181b64bd,a182364c2,a182bbfaa,a1833f4a4, +a183bd52a,a1843dc52,a184abfbd,a1861dc52,a1869d52a,a1871f4a4,a1920bfbd,a198abfbd,a1991bfaa, +a1af8bfbd,a1b03bfa5,a1b0be2aa,a1b13d752,a1b61d752,a1b69e2aa,a1bca903b,a1c20903b,a1c8abfbb, +a1ca1bfa5,a1e03bfa8,a1e0bf727,a1e13f828,a1e1bdb2a,a1e23e052,a1e28bfbb,a1e61e052,a1e69db2a, +a1e71f828,a1e79f727,a1f70e33d,a1f82bfb9,a1f88e342,a1f9164c2,a1f9964bd,a1fa164b9,a1fb9bfa8, +a2020bfb9,a2102e33f,a210ae344,a211364bb,a211b64bf,a212364c4,a212bbfaa,a2133e52a,a213bdad2, +a2142bfbc,a2161dad2,a2169e52a,a2172bfbd,a21d8bfbc,a2299bfaa,a2403bfa8,a240bf4a4,a2413dcaa, +a241bdf52,a2461df52,a2469dcaa,a2471f4a4,a25c1bfa8,a2703bfa5,a270be2aa,a2713de52,a2761de52, +a2769e2aa,a2899bfa5,a2a03bfa3,a2a0bf727,a2a13f8a8,a2a1bdcaa,a2a23e252,a2a28e344,a2a50e33f, +a2a61e252,a2a69dcaa,a2a71f8a8,a2a79f727,a2be9bfa3,a2c08bfbd,a2d0164c4,a2d0964bf,a2d1164bb, +a2d1bbfa5,a2d23e7aa,a2d2bd952,a2d32bc36,a2d38bc36,a2d61d952,a2d69e7aa,a2e92bcb6,a2e98bcb6, +a2eb1bfa5,a3002e340,a300ae345,a301364bd,a301b64c0,a302364c5,a302bbfaa,a3033f4a4,a303bdb2a, +a3043e252,a304abfbd,a3061e252,a3069db2a,a3071f4a4,a3110bfbd,a317abfbd,a3181bfaa,a3303bfa5, +a330be2aa,a3313dd52,a331a3fc2,a3338bfbd,a3361dd52,a3369e2aa,a3481bfa5,a34a2bfbb,a35503fc2, +a35ea3fc5,a3603bfa8,a360bf727,a3613f8a8,a361bd8aa,a3623e152,a3628bfbb,a3661e152,a3669d8aa, +a3671f8a8,a3679f727,a36a8e345,a36b0e340,a3772bfb9,a378164c5,a378964c0,a379164bd,a37a9bfa8, +a3860bfb9,a38983fc5,a38a2b73c,a38f2bfbd,a3902e33f,a390ae344,a391364bb,a391b64bf,a392364c4, +a392bbfaa,a3933e7aa,a393bde52,a39423fc7,a3948b73c,a3961de52,a3969e7aa,a3a71bfaa,a3c03bfa8, +a3c0bf4a4,a3c13d72a,a3c1bdc52,a3c61dc52,a3c69d72a,a3c71f4a4,a3dd9bfa8,a3e583fc7,a3ef23fc5, +a3f03bfa5,a3f0be52a,a3f13de52,a3f61de52,a3f69e52a,a40b1bfa5,a41503fc5,a41b8e33f,a41c8e344, +a42023fc4,a420bbfa3,a4213f727,a421bf8a8,a4223d72a,a422be052,a4261e052,a4269d72a,a4271f8a8, +a4279f727,a4409bfa3,a44703fc4,a4488bfbd,a4503bfa5,a450be7aa,a4513e052,a453a3fc2,a4561e052, +a4569e7aa,a468164c4,a468964bf,a469164bb,a4699bfa5,a46ce801b,a4802b336,a480ae1ca,a4812e44e, +a481b64b9,a482364be,a482b64c2,a4833bfaf,a483bf4a4,a4843d52a,a484be152,a4852bfc2,a4861e152, +a4869d52a,a4871f4a4,a4918bfc2,a4920b336,a4981bfaf,a4a903fc2,a4aeaa636,a4af0a636,a4b03bfaa, +a4b0be2aa,a4b13e052,a4b2aa842,a4b30a842,a4b61e052,a4b69e2aa,a4c19bfaa,a4c62a842,a4c68a842, +a4c82a836,a4c88a836,a4df2ba36,a4e03bfad,a4e0bf727,a4e13f828,a4e1bdb2a,a4e23df52,a4e2abfc2, +a4e61df52,a4e69db2a,a4e71f828,a4e79f727,a4ee8ba36,a4f08bfc2,a4fa1bfad,a50f2a836,a50f8a836, +a5103bfaf,a510be52a,a5113e052,a512aa842,a5130a842,a5161e052,a5169e52a,a5262a842,a5268a842, +a5292a836,a5298a836,a5331bfaf,a53e2b336,a5402bfc2,a540bf4a4,a5413dcaa,a541be052,a5461e052, +a5469dcaa,a5471f4a4,a54e0b336,a5520bfc2,a56faa636,a5700a636,a570bbfaa,a5713e2aa,a571be252, +a57223fc2,a573aa442,a5740a442,a5761e252,a5769e2aa,a5852a442,a5858a442,a5882a436,a5888a436, +a58c1bfaa,a59e03fc2,a59eab336,a5a03bfa8,a5a0bf727,a5a13f8a8,a5a1bdcaa,a5a23df52,a5a2abfc2, +a5a61df52,a5a69dcaa,a5a71f8a8,a5a79f727,a5b00b336,a5b18bfc2,a5be1bfa8,a5cf2a236,a5cf8a236, +a5d023fc2,a5d0aa242,a5d13bfaa,a5d1be7aa,a5d23e052,a5d28a242,a5d61e052,a5d69e7aa,a5e6aa242, +a5e70a242,a5e9aa236,a5ea0a236,a5ea9bfaa,a5fb03fc2,a5feab336,a6003bfaf,a600bf4a4,a6013db2a, +a601bdf52,a6022bfc2,a602a3fc9,a6061df52,a6069db2a,a6071f4a4,a6100b336,a6118bfc2,a6189bfaf, +a62583fc9,a62eaa236,a62f0a236,a6303bfaa,a630be2aa,a6313dbd2,a631a3fc7,a6322a642,a6328a642, +a6361dbd2,a6369e2aa,a644aa642,a6450a642,a6492a436,a6499bfaa,a64a0a436,a65703fc7,a65f2b0b6, +a6603bfad,a660bf727,a6613f8a8,a661bd8aa,a6623dbd2,a6632bfc2,a663a3fc7,a6661dbd2,a6669d8aa, +a6671f8a8,a6679f727,a6708b0b6,a6710bfc2,a67c9bfad,a6903bfaf,a690be7aa,a6913d9d2,a691aa436, +a6920a436,a6932a642,a6938a642,a6961d9d2,a6969e7aa,a69b03fc7,a6a72a642,a6a78a642,a6aa2a636, +a6aa8a636,a6b21bfaf,a6beab336,a6c03f4a4,a6c0bd72a,a6c13dd52,a6c223fc2,a6c32bfc2,a6c61dd52, +a6c69d72a,a6c71f4a4,a6cd8b336,a6d30bfc2,a6ee2a3b6,a6ee8a3b6,a6f03bfaa,a6f0be52a,a6f13d7d2, +a6f3aa242,a6f403fc2,a6f48a242,a6f523fbe,a6f61d7d2,a6f69e52a,a7062a242,a7068a242,a709aa236, +a70a0a236,a70f9bfaa,a71fab336,a7203bfa8,a720bf727,a7213f8a8,a721bd72a,a7223df52,a722abfc2, +a7261df52,a7269d72a,a7271f8a8,a7279f727,a72d0b336,a72f8bfc2,a73e1bfa8,a74703fbe,a74e2a236, +a74e8a236,a7503bfa5,a750be7aa,a7513dd52,a7532a242,a7538a242,a75523fbd,a7561dd52,a7569e7aa, +a767aa442,a7680a442,a769aa436,a76a0a436,a76f9bfa5,a776164c2,a778164be,a778964b9,a77f2b336, +a7800e44e,a7808e1ca,a78137039,a781b703d,a78237042,a782bbfaa,a7833f4a4,a783bd52a,a7843dc52, +a784abfc2,a7861dc52,a7869d52a,a7871f4a4,a78e0b336,a78e8bfc2,a7991bfaa,a79a17039,a79b97042, +a79c1703d,a7b03bfa5,a7b0be2aa,a7b13d752,a7b61d752,a7b69e2aa,a7ca1bfa5,a7e03bfa8,a7e0bf727, +a7e13f828,a7e1bdb2a,a7e23e052,a7e61e052,a7e69db2a,a7e71f828,a7e79f727,a7eb03fbd,a7fb9bfa8, +a8103703b,a810b703f,a81137044,a811bbfaa,a8123e52a,a812bdad2,a8161dad2,a8169e52a,a82817044, +a8289703f,a8291703b,a8299bfaa,a83f2ff55,a8403bfa8,a840bf4a4,a8413dcaa,a841bdf52,a8461df52, +a8469dcaa,a8471f4a4,a8570ff55,a857aff51,a85c1bfa8,a86f8ff51,a8703bfa5,a870be2aa,a8713de52, +a871aff4e,a8761de52,a8769e2aa,a8888ff4e,a8892ff4a,a8899bfa5,a8a03bfa3,a8a0bf727,a8a13f8a8, +a8a1bdcaa,a8a23e252,a8a28ff4a,a8a32f0c9,a8a61e252,a8a69dcaa,a8a71f8a8,a8a79f727,a8be9bfa3, +a8d03bfa5,a8d0be7aa,a8d13d952,a8d61d952,a8d69e7aa,a8eb1bfa5,a9003703d,a900b7040,a90137045, +a901bbfaa,a9023f4a4,a902bdb2a,a9033e252,a9061e252,a9069db2a,a9071f4a4,a9179bfaa,a91817045, +a91897040,a9191703d,a9303bfa5,a930be2aa,a9313dd52,a9361dd52,a9369e2aa,a9481bfa5,a9603bfa8, +a960bf727,a9613f8a8,a961bd8aa,a9623e152,a9661e152,a9669d8aa,a9671f8a8,a9679f727,a97a9bfa8, +a9900f0c9,a990b703b,a9913703f,a991b7044,a9923bfaa,a992be7aa,a9933de52,a9961de52,a9969e7aa, +a9a71bfaa,a9a817044,a9a89703f,a9a91703b,a9b8af8c0,a9c03bfa8,a9c0bf4a4,a9c13d72a,a9c1bdc52, +a9c61dc52,a9c69d72a,a9c71f4a4,a9dd9bfa8,a9e18f8c0,a9e22f8c2,a9f03bfa5,a9f0be52a,a9f13de52, +a9f61de52,a9f69e52a,aa000f8c2,aa083f0ad,aa0b1bfa5,aa0e1f0ad,aa203bfa3,aa20bf727,aa213f8a8, +aa21bd72a,aa223f3ab,aa22be052,aa261e052,aa269f3ab,aa271d72a,aa279f8a8,aa281f727,aa409bfa3, +aa503bfa5,aa50bf1ae,aa513e052,aa561e052,aa569f1ae,aa699bfa5,aa802e33d,aa80ae342,aa81364b9, +aa81b64bd,aa82364c2,aa82bbfaa,aa833f4a4,aa83bd52a,aa843e152,aa861e152,aa869d52a,aa871f4a4, +aa991bfaa,aab03bfa5,aab0be2aa,aab13e052,aab61e052,aab69e2aa,aaca1bfa5,aae03bfa8,aae0bf727, +aae13f828,aae1bdb2a,aae23df52,aae323fc2,aae61df52,aae69db2a,aae71f828,aae79f727,aaf80e342, +aaf88e33d,aaf9164c2,aaf9964bd,aafa164b9,aafb9bfa8,aaff83fc2,ab0c23fc2,ab102e33f,ab10ae344, +ab11364bb,ab11b64bf,ab12364c4,ab12bbfaa,ab133e52a,ab13be052,ab161e052,ab169e52a,ab299bfaa, +ab3783fc2,ab403bfa8,ab40bf4a4,ab413dcaa,ab41be052,ab4223ec0,ab461e052,ab469dcaa,ab471f4a4, +ab5c1bfa8,ab703bfa5,ab70be2aa,ab713e252,ab7183ec0,ab73a3fbd,ab761e252,ab769e2aa,ab899bfa5, +aba03bfa3,aba0bf727,aba13f8a8,aba1bdcaa,aba23df52,aba61df52,aba69dcaa,aba71f8a8,aba79f727, +abbe9bfa3,abc903fbd,abd00e344,abd08e33f,abd1164c4,abd1964bf,abd2164bb,abd2bbfa5,abd33e7aa, +abd3be052,abd423fbd,abd61e052,abd69e7aa,abeb1bfa5,abf883fbd,ac002e340,ac00ae345,ac01364bd, +ac01b64c0,ac02364c5,ac02bbfaa,ac033f4a4,ac03bdb2a,ac043df52,ac0623fc2,ac069df52,ac071db2a, +ac079f4a4,ac179bfaa,ac2083fc2,ac303bfa5,ac30be2aa,ac313dbd2,ac34a3fc2,ac361dbd2,ac369e2aa, +ac481bfa5,ac5c83fc2,ac603bfa8,ac60bf727,ac613f8a8,ac61bd8aa,ac623dbd2,ac661dbd2,ac669d8aa, +ac671f8a8,ac679f727,ac770e345,ac780e340,ac78964c5,ac79164c0,ac79964bd,ac7a9bfa8,ac8ea3c40, +ac902e33f,ac90ae344,ac91364bb,ac91b64bf,ac92364c4,ac92bbfaa,ac933e7aa,ac93bd9d2,ac961d9d2, +ac969e7aa,aca71bfaa,acc03bfa8,acc0bf4a4,acc13d72a,acc1bdd52,acc61dd52,acc69d72a,acc71f4a4, +acdd9bfa8,ace983c40,acf023fbd,acf0bbfa5,acf13e52a,acf1bd7d2,acf61d7d2,acf69e52a,ad083f0ad, +ad0b1bfa5,ad0e1f0ad,ad203bfa3,ad20bf727,ad213f8a8,ad21bd72a,ad223f3ab,ad22bdf52,ad261df52, +ad269f3ab,ad271d72a,ad279f8a8,ad281f727,ad3a0e33f,ad3a8e344,ad409bfa3,ad4e83fbd,ad50164c4, +ad50964bf,ad51164bb,ad51bbfa5,ad523e7aa,ad52bdd52,ad561dd52,ad569e7aa,ad699bfa5,ad802e33d, +ad80ae342,ad81364b9,ad81b64bd,ad82364c2,ad82bbfaa,ad833f4a4,ad83bd52a,ad843dc52,ad861dc52, +ad869d52a,ad871f4a4,ad991bfaa,adaf23fc2,adb03bfa5,adb0be2aa,adb13d752,adb61d752,adb69e2aa, +adca1bfa5,add883fc2,ade03bfa8,ade0bf727,ade13f828,ade1bdb2a,ade23e052,ade2a3fc2,ade61e052, +ade69db2a,ade71f828,ade79f727,adf70e33d,adf80e342,adf8964c2,adf9164bd,adf9964b9,adfb9bfa8, +ae0a83fc2,ae102e33f,ae10ae344,ae11364bb,ae11b64bf,ae12364c4,ae12bbfaa,ae133e52a,ae13bdad2, +ae1423fc2,ae161dad2,ae169e52a,ae299bfaa,ae3a03fc2,ae403bfa8,ae40bf4a4,ae413dcaa,ae41bdf52, +ae4623fc0,ae469df52,ae471dcaa,ae479f4a4,ae5c1bfa8,ae6e83fc0,ae703bfa5,ae70be2aa,ae713de52, +ae73a3fbd,ae761de52,ae769e2aa,ae899bfa5,ae9803fbd,aea03bfa3,aea0bf727,aea13f8a8,aea1bdcaa, +aea23e252,aea2a3fbd,aea30e344,aea50e33f,aea61e252,aea69dcaa,aea71f8a8,aea79f727,aebe9bfa3, +aed0164c4,aed0964bf,aed1164bb,aed1bbfa5,aed23e7aa,aed2bd952,aed383fbd,aed61d952,aed69e7aa, +aeeb1bfa5,af0023fc2,af00ae340,af012e345,af01b64bd,af02364c0,af02b64c5,af033bfaa,af03bf4a4, +af043db2a,af04be252,af061e252,af069db2a,af071f4a4,af179bfaa,af2a03fc2,af303bfa5,af30be2aa, +af313dd52,af361dd52,af369e2aa,af38a3fc5,af481bfa5,af5f83fc5,af603bfa8,af60bf727,af613f8a8, +af61bd8aa,af623e152,af661e152,af669d8aa,af671f8a8,af679f727,af6a8e345,af6b0e340,af78164c5, +af78964c0,af79164bd,af7a9bfa8,af7c7001c,af902e33f,af90ae344,af91364bb,af91b64bf,af92364c4, +af92bbfaa,af933e7aa,af93bde52,af9423fc7,af961de52,af969e7aa,afa71bfaa,afc03bfa8,afc0bf4a4, +afc13d72a,afc1bdc52,afc61dc52,afc69d72a,afc71f4a4,afdd9bfa8,afe583fc7,aff03bfa5,aff0be52a, +aff13de52,aff3a3fc5,aff61de52,aff69e52a,b00b1bfa5,b01983fc5,b01b8e33f,b01c8e344,b0203bfa3, +b020bf727,b0213f8a8,b021bd72a,b0223e052,b02323fc4,b0261e052,b0269d72a,b0271f8a8,b0279f727, +b0409bfa3,b04783fc4,b0503bfa5,b050bf1ae,b0513e052,b051a3fc2,b0561e052,b0569f1ae,b068164c4, +b068964bf,b069164bb,b0699bfa5,b0802b336,b080ae3ca,b0812e44e,b081b64b9,b082364be,b082b64c2, +b0833bfaf,b083bf4a4,b0843d52a,b084be152,b0852bfc2,b0861e152,b0869d52a,b0871f4a4,b0918bfc2, +b0920b336,b0981bfaf,b09c03fc2,b0aeaa636,b0af0a636,b0b03bfaa,b0b0be2aa,b0b13e052,b0b1b3fbc, +b0b2aa842,b0b30a842,b0b61e052,b0b69e2aa,b0c19bfaa,b0c593fbc,b0c62a842,b0c68a842,b0c82a836, +b0c88a836,b0cc33fbb,b0df2ba36,b0df93fbb,b0e03bfad,b0e0bf727,b0e13f828,b0e1bdb2a,b0e23df52, +b0e2abfc2,b0e61df52,b0e69db2a,b0e71f828,b0e79f727,b0ee8ba36,b0f08bfc2,b0fa33fb9,b0fa9bfad, +b0fb13fb9,b10f2a836,b10f8a836,b1103bfaf,b110be52a,b1113e052,b112aa842,b1130a842,b113b3fbb, +b1161e052,b1169e52a,b12193fbb,b1262a842,b1268a842,b1292a836,b1298a836,b12d32c36,b12d92c36, +b1331bfaf,b13e2b336,b1402bfc2,b140bf4a4,b1413dcaa,b141be052,b144b3fb9,b1461e052,b1469dcaa, +b1471f4a4,b14e0b336,b1520bfc2,b16ea3fc2,b16faa636,b1700a636,b170bbfaa,b1713e2aa,b171be252, +b173aa442,b1740a442,b1761e252,b1769e2aa,b17e13fb9,b1852a442,b1858a442,b1882a436,b1888a436, +b18933fbb,b18c1bfaa,b19893fbb,b19eab336,b1a03bfa8,b1a0bf727,b1a13f8a8,b1a1bdcaa,b1a23df52, +b1a2abfc2,b1a603fc2,b1a69df52,b1a71dcaa,b1a79f8a8,b1a81f727,b1b00b336,b1b18bfc2,b1be1bfa8, +b1cea3fc2,b1cf2a236,b1cf8a236,b1d02a242,b1d0bbfaa,b1d13e7aa,b1d1be052,b1d20a242,b1d61e052, +b1d69e7aa,b1e6aa242,b1e70a242,b1e9aa236,b1ea0a236,b1ea9bfaa,b1f583fc2,b1feab336,b2003bfaf, +b200bf4a4,b2013db2a,b201bdf52,b20223fc9,b202abfc2,b2061df52,b2069db2a,b2071f4a4,b2100b336, +b2118bfc2,b2189bfaf,b22503fc9,b22e33fbc,b22eaa236,b22f0a236,b2303bfaa,b230be2aa,b2313dbd2, +b231a3fc7,b2322a642,b2328a642,b2361dbd2,b2369e2aa,b24213fbc,b244aa642,b2450a642,b24733fbb, +b2492a436,b2499bfaa,b24a0a436,b25d03fc7,b25f2b0b6,b2603bfad,b260bf727,b2613f8a8,b261bd8aa, +b2623dbd2,b2632bfc2,b26413fbb,b2661dbd2,b2669d8aa,b2671f8a8,b2679f727,b26823fc7,b2708b0b6, +b2710bfc2,b27c33fb9,b27c93fb9,b27d1bfad,b29033fbb,b290bbfaf,b2913e7aa,b291bd9d2,b2922a436, +b2928a436,b2932a642,b2938a642,b2961d9d2,b2969e7aa,b29e13fbb,b2a72a642,b2a78a642,b2a803fc7, +b2aa2a636,b2aa8a636,b2ae32c36,b2ae92c36,b2b21bfaf,b2beab336,b2c03f4a4,b2c0bd72a,b2c13dd52, +b2c233fb9,b2c32bfc2,b2c3a3fc2,b2c61dd52,b2c69d72a,b2c71f4a4,b2cd8b336,b2d30bfc2,b2e603fc2, +b2ee2a3b6,b2ee8a3b6,b2f03bfaa,b2f0be52a,b2f13d7d2,b2f3aa242,b2f40a242,b2f61d7d2,b2f69e52a, +b2f723fbe,b2fb93fb9,b3062a242,b3068a242,b30933fb6,b309aa236,b30a0a236,b30f9bfaa,b31993fb6, +b31fab336,b3203bfa8,b320bf727,b3213f8a8,b321bd72a,b3223df52,b322abfc2,b3261df52,b3269d72a, +b3271f8a8,b3279f727,b32d0b336,b32f8bfc2,b33e1bfa8,b34a03fbe,b34e2a236,b34e8a236,b3503bfa5, +b350be7aa,b3513dd52,b3532a242,b3538a242,b3561dd52,b3569e7aa,b357a3fbd,b367aa442,b3680a442, +b369aa436,b36a0a436,b36e164b9,b36f9bfa5,b370164c2,b374164be,b37f2b336,b3800e44e,b3808e3ca, +b38137039,b381b703d,b38237042,b382bbfaa,b3833f4a4,b383bd52a,b3843dc52,b384abfc2,b3861dc52, +b3869d52a,b3871f4a4,b38e0b336,b38e8bfc2,b39817042,b3989703d,b39917039,b3999bfaa,b3b03bfa5, +b3b0be2aa,b3b13d752,b3b61d752,b3b69e2aa,b3ca1bfa5,b3e03bfa8,b3e0bf727,b3e13f828,b3e1bdb2a, +b3e23e052,b3e61e052,b3e69db2a,b3e71f828,b3e79f727,b3ea03fbd,b3fb9bfa8,b4103703b,b410b703f, +b41137044,b411bbfaa,b4123e52a,b412bdad2,b4161dad2,b4169e52a,b42817044,b4289703f,b4291703b, +b4299bfaa,b43f2ff55,b4403bfa8,b440bf4a4,b4413dcaa,b441bdf52,b4461df52,b4469dcaa,b4471f4a4, +b4570ff55,b457aff51,b45c1bfa8,b46f8ff51,b4703bfa5,b470be2aa,b4713de52,b471aff4e,b4761de52, +b4769e2aa,b4888ff4e,b4892ff4a,b4899bfa5,b4a03bfa3,b4a0bf727,b4a13f8a8,b4a1bdcaa,b4a23e252, +b4a28ff4a,b4a32f0c9,b4a61e252,b4a69dcaa,b4a71f8a8,b4a79f727,b4be9bfa3,b4d03bfa5,b4d0be7aa, +b4d13d952,b4d61d952,b4d69e7aa,b4eb1bfa5,b5003703d,b500b7040,b50137045,b501bbfaa,b5023f4a4, +b502bdb2a,b5033e252,b5061e252,b5069db2a,b5071f4a4,b5179bfaa,b51817045,b51897040,b5191703d, +b5303bfa5,b530be2aa,b5313dd52,b531a3fc2,b5361dd52,b5369e2aa,b5481bfa5,b55503fc2,b55ea3fc5, +b5603bfa8,b560bf727,b5613f8a8,b561bd8aa,b5623e152,b5661e152,b5669d8aa,b5671f8a8,b5679f727, +b57a9bfa8,b58983fc5,b5900f0c9,b590b703b,b5913703f,b591b7044,b5923bfaa,b592be7aa,b5933de52, +b593a3fc7,b5961de52,b5969e7aa,b5a71bfaa,b5a817044,b5a89703f,b5a91703b,b5b8af8c0,b5c03bfa8, +b5c0bf4a4,b5c13d72a,b5c1bdc52,b5c61dc52,b5c69d72a,b5c71f4a4,b5dd9bfa8,b5e18f8c0,b5e22f8c2, +b5e583fc7,b5ef23fc5,b5f03bfa5,b5f0be52a,b5f13de52,b5f61de52,b5f69e52a,b6000f8c2,b60b1bfa5, +b61503fc5,b62023fc4,b620bbfa3,b6213f727,b621bf8a8,b6223d72a,b622be052,b6261e052,b6269d72a, +b6271f8a8,b6279f727,b6409bfa3,b64703fc4,b6503bfa5,b650bf1ae,b6513e052,b651aab36,b6520ab36, +b652aa642,b6530a642,b653a3fc2,b6561e052,b6569f1ae,b668aabb6,b6690abb6,b669aa642,b66a1bfa5, +b66a8a642,b6802b336,b680ae3ca,b6812e44e,b681b64b9,b682364be,b682b64c2,b6833bfaf,b683bf4a4, +b6843d52a,b684be152,b6852bfc2,b6861e152,b6869d52a,b6871f4a4,b6918bfc2,b6920b336,b6981bfaf, +b6a903fc2,b6aeaa636,b6af0a636,b6b03bfaa,b6b0be2aa,b6b13e052,b6b1b3fbc,b6b2aa842,b6b30a842, +b6b61e052,b6b69e2aa,b6c19bfaa,b6c593fbc,b6c62a842,b6c68a842,b6c82a836,b6c88a836,b6cc33fbb, +b6df2ba36,b6df93fbb,b6e03bfad,b6e0bf727,b6e13f828,b6e1bdb2a,b6e23df52,b6e2abfc2,b6e61df52, +b6e69db2a,b6e71f828,b6e79f727,b6ee8ba36,b6f08bfc2,b6fa33fb9,b6fa9bfad,b6fb13fb9,b70f2a836, +b70f8a836,b7103bfaf,b710be52a,b7113e052,b712aa842,b7130a842,b713b3fbb,b7161e052,b7169e52a, +b72193fbb,b7262a842,b7268a842,b7292a836,b7298a836,b72d32c36,b72d92c36,b7331bfaf,b73e2b336, +b7402bfc2,b740bf4a4,b7413dcaa,b741be052,b744b3fb9,b7461e052,b7469dcaa,b7471f4a4,b74e0b336, +b7520bfc2,b76faa636,b7700a636,b770bbfaa,b7713e2aa,b771be252,b77223fc2,b773aa442,b7740a442, +b7761e252,b7769e2aa,b77e13fb9,b7852a442,b7858a442,b7882a436,b7888a436,b78933fbb,b78c1bfaa, +b79893fbb,b79e03fc2,b79eab336,b7a03bfa8,b7a0bf727,b7a13f8a8,b7a1bdcaa,b7a23df52,b7a2abfc2, +b7a61df52,b7a69dcaa,b7a71f8a8,b7a79f727,b7b00b336,b7b18bfc2,b7be1bfa8,b7cf2a236,b7cf8a236, +b7d023fc2,b7d0aa242,b7d13bfaa,b7d1be7aa,b7d23e052,b7d28a242,b7d61e052,b7d69e7aa,b7e6aa242, +b7e70a242,b7e9aa236,b7ea0a236,b7ea9bfaa,b7fb03fc2,b7feab336,b8003bfaf,b800bf4a4,b8013db2a, +b801bdf52,b8022bfc2,b802a3fc9,b8061df52,b8069db2a,b8071f4a4,b8100b336,b8118bfc2,b8189bfaf, +b82583fc9,b82e33fbc,b82eaa236,b82f0a236,b8303bfaa,b830be2aa,b8313dbd2,b831a3fc7,b8322a642, +b8328a642,b8361dbd2,b8369e2aa,b84213fbc,b844aa642,b8450a642,b84733fbb,b8492a436,b8499bfaa, +b84a0a436,b85703fc7,b85f2b0b6,b8603bfad,b860bf727,b8613f8a8,b861bd8aa,b8623dbd2,b8632bfc2, +b863a3fc7,b86413fbb,b8661dbd2,b8669d8aa,b8671f8a8,b8679f727,b8708b0b6,b8710bfc2,b87c33fb9, +b87c93fb9,b87d1bfad,b89033fbb,b890bbfaf,b8913e7aa,b891bd9d2,b8922a436,b8928a436,b8932a642, +b8938a642,b8961d9d2,b8969e7aa,b89b03fc7,b89e13fbb,b8a72a642,b8a78a642,b8aa2a636,b8aa8a636, +b8ae32c36,b8ae92c36,b8b21bfaf,b8beab336,b8c03f4a4,b8c0bd72a,b8c13dd52,b8c223fc2,b8c2b3fb9, +b8c32bfc2,b8c61dd52,b8c69d72a,b8c71f4a4,b8cd8b336,b8d30bfc2,b8ee2a3b6,b8ee8a3b6,b8f03bfaa, +b8f0be52a,b8f13d7d2,b8f3aa242,b8f403fc2,b8f48a242,b8f523fbe,b8f61d7d2,b8f69e52a,b8fb93fb9, +b9062a242,b9068a242,b90933fb6,b909aa236,b90a0a236,b90f9bfaa,b91993fb6,b91fab336,b9203bfa8, +b920bf727,b9213f8a8,b921bd72a,b9223df52,b922abfc2,b9261df52,b9269d72a,b9271f8a8,b9279f727, +b92d0b336,b92f8bfc2,b93e1bfa8,b94703fbe,b94e2a236,b94e8a236,b9503bfa5,b950be7aa,b9513dd52, +b9532a242,b9538a242,b95523fbd,b9561dd52,b9569e7aa,b967aa442,b9680a442,b969aa436,b96a0a436, +b96f9bfa5,b976164c2,b978164be,b978964b9,b97f2b336,b9800e44e,b9808e3ca,b98137039,b981b703d, +b98237042,b982bbfaa,b9833f4a4,b983bd52a,b9843dc52,b984abfc2,b9861dc52,b9869d52a,b9871f4a4, +b98e0b336,b98e8bfc2,b9991bfaa,b99a17039,b99b97042,b99c1703d,b9b03bfa5,b9b0be2aa,b9b13d752, +b9b61d752,b9b69e2aa,b9ca1bfa5,b9e03bfa8,b9e0bf727,b9e13f828,b9e1bdb2a,b9e23e052,b9e61e052, +b9e69db2a,b9e71f828,b9e79f727,b9eb03fbd,b9fb9bfa8,ba103703b,ba10b703f,ba1137044,ba11bbfaa, +ba123e52a,ba12bdad2,ba161dad2,ba169e52a,ba2817044,ba289703f,ba291703b,ba299bfaa,ba3f2ff55, +ba403bfa8,ba40bf4a4,ba413dcaa,ba41bdf52,ba461df52,ba469dcaa,ba471f4a4,ba570ff55,ba57aff51, +ba5c1bfa8,ba6f8ff51,ba703bfa5,ba70be2aa,ba713de52,ba71aff4e,ba761de52,ba769e2aa,ba888ff4e, +ba892ff4a,ba899bfa5,baa03bfa3,baa0bf727,baa13f8a8,baa1bdcaa,baa23e252,baa28ff4a,baa32f0c9, +baa61e252,baa69dcaa,baa71f8a8,baa79f727,babe9bfa3,bad03bfa5,bad0be7aa,bad13d952,bad61d952, +bad69e7aa,baeb1bfa5,bb003703d,bb00b7040,bb0137045,bb01bbfaa,bb023f4a4,bb02bdb2a,bb033e252, +bb061e252,bb069db2a,bb071f4a4,bb179bfaa,bb1817045,bb1897040,bb191703d,bb303bfa5,bb30be2aa, +bb313dd52,bb361dd52,bb369e2aa,bb481bfa5,bb603bfa8,bb60bf727,bb613f8a8,bb61bd8aa,bb623e152, +bb661e152,bb669d8aa,bb671f8a8,bb679f727,bb7a9bfa8,bb900f0c9,bb90b703b,bb913703f,bb91b7044, +bb923bfaa,bb92be7aa,bb933de52,bb961de52,bb969e7aa,bba71bfaa,bba817044,bba89703f,bba91703b, +bbb8af8c0,bbc03bfa8,bbc0bf4a4,bbc13d72a,bbc1bdc52,bbc61dc52,bbc69d72a,bbc71f4a4,bbda6801c, +bbdd9bfa8,bbe18f8c0,bbe22f8c2,bbf03bfa5,bbf0be52a,bbf13de52,bbf61de52,bbf69e52a,bc000f8c2, +bc083f0ad,bc0b1bfa5,bc0e1f0ad,bc203bfa3,bc20bf727,bc213f8a8,bc21bd72a,bc223f3ab,bc22be052, +bc261e052,bc269f3ab,bc271d72a,bc279f8a8,bc281f727,bc409bfa3,bc503bfa5,bc50bf1ae,bc513e052, +bc51aab36,bc520ab36,bc52aa642,bc530a642,bc561e052,bc569f1ae,bc68aabb6,bc690abb6,bc69aa642, +bc6a1bfa5,bc6a8a642,bc802e33d,bc80ae342,bc81364b9,bc81b64bd,bc82364c2,bc82bbfaa,bc833f4a4, +bc83bd52a,bc843e152,bc84abfbd,bc861e152,bc869d52a,bc871f4a4,bc918bfbd,bc98abfbd,bc991bfaa, +bca88bfbd,bcb03bfa5,bcb0be2aa,bcb13e052,bcb3aa3b2,bcb61e052,bcb69e2aa,bcb70a3b2,bcca2bfbb, +bcca9bfa5,bce03bfa8,bce0bf727,bce13f828,bce1bdb2a,bce23df52,bce323fc2,bce61df52,bce69db2a, +bce71f828,bce79f727,bce80bfbb,bcf80e342,bcf88e33d,bcf9164c2,bcf9964bd,bcfa164b9,bcfb9bfa8, +bcfc2bfb9,bcff83fc2,bd068bfb9,bd0c23fc2,bd102e33f,bd10ae344,bd11364bb,bd11b64bf,bd12364c4, +bd12bbfaa,bd133e52a,bd13be052,bd142bfbc,bd15abfbd,bd161e052,bd169e52a,bd198bfbc,bd299bfaa, +bd3783fc2,bd403bfa8,bd40bf4a4,bd413dcaa,bd41be052,bd4223ec0,bd461e052,bd469dcaa,bd471f4a4, +bd5c1bfa8,bd703bfa5,bd70be2aa,bd713e252,bd7183ec0,bd73a3fbd,bd761e252,bd769e2aa,bd899bfa5, +bda03bfa3,bda0bf727,bda13f8a8,bda1bdcaa,bda23df52,bda61df52,bda69dcaa,bda71f8a8,bda79f727, +bdb10bfbd,bdbe9bfa3,bdc903fbd,bdd00e344,bdd08e33f,bdd1164c4,bdd1964bf,bdd2164bb,bdd2bbfa5, +bdd33e52a,bdd3be052,bdd423fbd,bdd4abcb6,bdd50bcb6,bdd61e052,bdd69e52a,bdeb1bfa5,bdec2bc36, +bdec8bc36,bdf883fbd,be002e340,be00ae345,be01364bd,be01b64c0,be02364c5,be02bbfaa,be033f4a4, +be03bdb2a,be043df52,be04abfbd,be0623fc2,be069df52,be071db2a,be079f4a4,be138bfbd,be179bfaa, +be182bfbd,be2083fc2,be2a8bfbd,be303bfa5,be30be2aa,be313dbd2,be33aa3b2,be34a3fc2,be361dbd2, +be369e2aa,be3a8a3b2,be481bfa5,be4a2bfbb,be5c83fc2,be603bfa8,be60bf727,be613f8a8,be61bd8aa, +be623dbd2,be628bfbb,be661dbd2,be669d8aa,be671f8a8,be679f727,be770e345,be780e340,be78964c5, +be79164c0,be79964bd,be7a2bfb9,be7a9bfa8,be84ab33b,be858b33b,be870bfb9,be8c2b73c,be8ea3c40, +be902e33f,be90ae344,be91364bb,be91b64bf,be92364c4,be92bbfaa,be933e7aa,be93bd9d2,be940b73c, +be94abfbd,be961d9d2,be969e7aa,bea71bfaa,bec03bfa8,bec0bf4a4,bec13d72a,bec1bdd52,bec61dd52, +bec69d72a,bec71f4a4,bedd9bfa8,bee983c40,bef023fbd,bef0bbfa5,bef13e52a,bef1bd7d2,bef61d7d2, +bef69e52a,bf083f0ad,bf0b1bfa5,bf0e1f0ad,bf203bfa3,bf20bf727,bf213f8a8,bf21bd72a,bf223f3ab, +bf22bdf52,bf261df52,bf269f3ab,bf271d72a,bf279f8a8,bf281f727,bf380bfbd,bf3a0e33f,bf3a8e344, +bf409bfa3,bf4e83fbd,bf502bcb6,bf50964c4,bf51164bf,bf51964bb,bf523bfa5,bf52be7aa,bf533dd52, +bf560bcb6,bf569dd52,bf571e7aa,bf682bd36,bf699bfa5,bf6e0bd36,bf802e33d,bf80ae342,bf81364b9, +bf81b64bd,bf82364c2,bf82bbfaa,bf833f4a4,bf83bd52a,bf843dc52,bf852bfbd,bf861dc52,bf869d52a, +bf871f4a4,bf948bfbd,bf982bfbd,bf991bfaa,bfaa8bfbd,bfb03bfa5,bfb0be2aa,bfb13d752,bfb61d752, +bfb69e2aa,bfca2bfbb,bfca9bfa5,bfe03bfa8,bfe0bf727,bfe13f828,bfe1bdb2a,bfe23e052,bfe28bfbb, +bfe323fc2,bfe61e052,bfe69db2a,bfe71f828,bfe79f727,bff70e33d,bff80e342,bff8964c2,bff9164bd, +bff9964b9,bffa2b339,bffb9bfa8,bfff83fc2,c0028b339,c00c23fc2,c0102e33f,c010ae344,c011364bb, +c011b64bf,c012364c4,c012bbfaa,c0133e52a,c013bdad2,c0142bfbd,c0161dad2,c0169e52a,c0299bfaa, +c03783fc2,c0403bfa8,c040bf4a4,c0413dcaa,c041bdf52,c04223ec0,c0461df52,c0469dcaa,c0471f4a4, +c05c1bfa8,c0703bfa5,c070be2aa,c0713de52,c07183ec0,c073a3fbd,c0761de52,c0769e2aa,c0899bfa5, +c0a03bfa3,c0a0bf727,c0a13f8a8,c0a1bdcaa,c0a23e252,c0a28e344,c0a50e33f,c0a61e252,c0a69dcaa, +c0a71f8a8,c0a79f727,c0be8bfbd,c0bf1bfa3,c0c903fbd,c0d02bc36,c0d0964c4,c0d1164bf,c0d1964bb, +c0d23bfa5,c0d2be7aa,c0d33d952,c0d38bc36,c0d423fbd,c0d61d952,c0d69e7aa,c0e82bcb6,c0e88bcb6, +c0eb1bfa5,c0f883fbd,c1002e340,c100ae345,c101364bd,c101b64c0,c102364c5,c102bbfaa,c1033f4a4, +c103bdb2a,c1043e252,c104abfbd,c10623fc2,c1069e252,c1071db2a,c1079f4a4,c1138bfbd,c1179bfaa, +c1182bfbd,c12083fc2,c1270bfbd,c1303bfa5,c130be2aa,c1313dd52,c134a3fc2,c1361dd52,c1369e2aa, +c137291b2,c138891b2,c1481bfa5,c1492bfbb,c15c83fc2,c1603bfa8,c160bf727,c1613f8a8,c161bd8aa, +c1623e152,c1638bfbb,c1661e152,c1669d8aa,c1671f8a8,c1679f727,c16a8e345,c16b0e340,c178164c5, +c178964c0,c179164bd,c17aabfb9,c17b1bfa8,c1898bfb9,c18ea3c40,c1902e33f,c190ae344,c191364bb, +c191b64bf,c192364c4,c192bbfaa,c1933e7aa,c193bde52,c1942bc36,c1948bc36,c1961de52,c1969e7aa, +c1a71bfaa,c1a8abcb6,c1a90bcb6,c1c03bfa8,c1c0bf4a4,c1c13d72a,c1c1bdc52,c1c4abfbd,c1c61dc52, +c1c69d72a,c1c71f4a4,c1d20bfbd,c1d58e344,c1d60e33f,c1d82bfbd,c1dd9bfa8,c1e983c40,c1edaff42, +c1ee2ff4e,c1ef0bfbd,c1f023fbd,c1f0bbfa5,c1f13e52a,c1f1bde52,c1f61de52,c1f69e52a,c2018ff42, +c2028ff4e,c2083f0ad,c20b1bfa5,c20dabfbb,c20e1f0ad,c21d2ff42,c21daff4e,c21e8bfbb,c2203bfa3, +c220bf727,c2213f8a8,c221bd72a,c2223f3ab,c222be052,c2261e052,c2269f3ab,c2271d72a,c2279f8a8, +c2281f727,c2310ff4e,c2328ff42,c23b2bfb9,c2409bfa3,c24c8bfb9,c24e83fbd,c2503bfa5,c250bf1ae, +c2513e052,c251abc36,c2520bc36,c2561e052,c2569f1ae,c268164c4,c268964bf,c269164bb,c269abcb6, +c26a0bcb6,c26a9bfa5,c2802e33d,c280ae342,c281364b9,c281b64bd,c282364c2,c282bbfaa,c2833f4a4, +c283bd52a,c2843e152,c284abfbd,c2861e152,c2869d52a,c2871f4a4,c2918bfbd,c298abfbd,c2991bfaa, +c2a88bfbd,c2b03bfa5,c2b0be2aa,c2b13e052,c2b3aa3b2,c2b61e052,c2b69e2aa,c2b70a3b2,c2ca2bfbb, +c2ca9bfa5,c2e03bfa8,c2e0bf727,c2e13f828,c2e1bdb2a,c2e23df52,c2e323fc2,c2e61df52,c2e69db2a, +c2e71f828,c2e79f727,c2e80bfbb,c2f80e342,c2f88e33d,c2f9164c2,c2f9964bd,c2fa164b9,c2fb9bfa8, +c2fc2bfb9,c2ff83fc2,c3068bfb9,c30c23fc2,c3102e33f,c310ae344,c311364bb,c311b64bf,c312364c4, +c312bbfaa,c3133e52a,c313be052,c3142bfbc,c315abfbd,c3161e052,c3169e52a,c3198bfbc,c3299bfaa, +c33783fc2,c3403bfa8,c340bf4a4,c3413dcaa,c341be052,c34223ec0,c3461e052,c3469dcaa,c3471f4a4, +c35c1bfa8,c3703bfa5,c370be2aa,c3713e252,c37183ec0,c373a3fbd,c3761e252,c3769e2aa,c3899bfa5, +c3a03bfa3,c3a0bf727,c3a13f8a8,c3a1bdcaa,c3a23df52,c3a61df52,c3a69dcaa,c3a71f8a8,c3a79f727, +c3b10bfbd,c3be9bfa3,c3c903fbd,c3d00e344,c3d08e33f,c3d1164c4,c3d1964bf,c3d2164bb,c3d2bbfa5, +c3d33e7aa,c3d3be052,c3d423fbd,c3d4abcb6,c3d50bcb6,c3d61e052,c3d69e7aa,c3eb1bfa5,c3ec2bc36, +c3ec8bc36,c3f883fbd,c4002e340,c400ae345,c401364bd,c401b64c0,c402364c5,c402bbfaa,c4033f4a4, +c403bdb2a,c4043df52,c404abfbd,c40623fc2,c4069df52,c4071db2a,c4079f4a4,c4118bfbd,c4179bfaa, +c418abfbd,c42083fc2,c4288bfbd,c4303bfa5,c430be2aa,c4313dbd2,c433aa3b2,c434a3fc2,c4361dbd2, +c4369e2aa,c4370a3b2,c4481bfa5,c44a2bfbb,c45c83fc2,c4603bfa8,c460bf727,c4613f8a8,c461bd8aa, +c4623dbd2,c4661dbd2,c4669d8aa,c4671f8a8,c4679f727,c4680bfbb,c4770e345,c4780e340,c478964c5, +c479164c0,c479964bd,c47a9bfa8,c47c2bfb9,c4868bfb9,c48ea3c40,c4902e33f,c490ae344,c491364bb, +c491b64bf,c492364c4,c492bbfaa,c4933e7aa,c493bd9d2,c4942bfbc,c495abfbd,c4961d9d2,c4969e7aa, +c4998bfbc,c4a71bfaa,c4c03bfa8,c4c0bf4a4,c4c13d72a,c4c1bdd52,c4c61dd52,c4c69d72a,c4c71f4a4, +c4dd9bfa8,c4e983c40,c4f023fbd,c4f0bbfa5,c4f13e52a,c4f1bd7d2,c4f61d7d2,c4f69e52a,c50b1bfa5, +c5203bfa3,c520bf727,c5213f8a8,c521bd72a,c5223df52,c5261df52,c5269d72a,c5271f8a8,c5279f727, +c5310bfbd,c53a0e33f,c53a8e344,c5409bfa3,c54e83fbd,c550164c4,c550964bf,c551164bb,c551bbfa5, +c5523e7aa,c552bdd52,c5542bcb6,c5548bcb6,c5561dd52,c5569e7aa,c5699bfa5,c56c2bc36,c56c8bc36, +c5802e33d,c580ae342,c581364b9,c581b64bd,c582364c2,c582bbfaa,c5833f4a4,c583bd52a,c5843dc52, +c584abfbd,c5861dc52,c5869d52a,c5871f4a4,c5928bfbd,c598abfbd,c5991bfaa,c5af8bfbd,c5b03bfa5, +c5b0be2aa,c5b13d752,c5b61d752,c5b69e2aa,c5bca903b,c5c20903b,c5c8abfbb,c5ca1bfa5,c5e03bfa8, +c5e0bf727,c5e13f828,c5e1bdb2a,c5e23e052,c5e323fc2,c5e60bfbb,c5e69e052,c5e71db2a,c5e79f828, +c5e81f727,c5f70e33d,c5f82bfb9,c5f88e342,c5f9164c2,c5f9964bd,c5fa164b9,c5fb9bfa8,c5ff83fc2, +c6020bfb9,c60c23fc2,c6102e33f,c610ae344,c611364bb,c611b64bf,c612364c4,c612bbfaa,c6133e52a, +c613bdad2,c6142b63c,c6162bfbd,c6169dad2,c6171e52a,c61b8b63c,c6299bfaa,c63783fc2,c6403bfa8, +c640bf4a4,c6413dcaa,c641bdf52,c64223ec0,c6461df52,c6469dcaa,c6471f4a4,c65c1bfa8,c6703bfa5, +c670be2aa,c6713de52,c67183ec0,c673a3fbd,c6761de52,c6769e2aa,c6899bfa5,c6a03bfa3,c6a0bf727, +c6a13f8a8,c6a1bdcaa,c6a23e252,c6a28e344,c6a50e33f,c6a61e252,c6a69dcaa,c6a71f8a8,c6a79f727, +c6bc0bfbd,c6be9bfa3,c6c903fbd,c6d0164c4,c6d0964bf,c6d1164bb,c6d1bbfa5,c6d23e7aa,c6d2bd952, +c6d32bc36,c6d38bc36,c6d423fbd,c6d61d952,c6d69e7aa,c6e9abcb6,c6ea0bcb6,c6eb1bfa5,c6f883fbd, +c7002e340,c700ae345,c701364bd,c701b64c0,c702364c5,c702bbfaa,c7033f4a4,c703bdb2a,c7043e252, +c704abfbd,c70623fc2,c7069e252,c7071db2a,c7079f4a4,c7140bfbd,c7179bfaa,c71a2bfbd,c72083fc2, +c7290bfbd,c7303bfa5,c730be2aa,c7313dd52,c731aa731,c7338a731,c734a3fc2,c7361dd52,c7369e2aa, +c7481bfa5,c74b2bfbb,c75c83fc2,c75d8bfbb,c7603bfa8,c760bf727,c7613f8a8,c761bd8aa,c7623e152, +c7661e152,c7669d8aa,c7671f8a8,c7679f727,c76a8e345,c76b0e340,c778164c5,c778964c0,c779164bd, +c779abfb9,c77a9bfa8,c7880bfb9,c78ea3c40,c7902e33f,c790ae344,c791364bb,c791b64bf,c792364c4, +c792bbfaa,c7933e7aa,c793bde52,c7942bcb6,c7961de52,c7969e7aa,c7980bcb6,c7a71bfaa,c7a92bc36, +c7ae0bc36,c7c03bfa8,c7c0bf4a4,c7c13d72a,c7c1bdc52,c7c22bfbd,c7c61dc52,c7c69d72a,c7c71f4a4, +c7cf8bfbd,c7d58e344,c7d60e33f,c7d82bfbd,c7dd9bfa8,c7e983c40,c7edaff42,c7ee2ff4e,c7ef0bfbd, +c7f023fbd,c7f0bbfa5,c7f13e52a,c7f1bde52,c7f61de52,c7f69e52a,c8018ff42,c8028ff4e,c80b1bfa5, +c80fabfbb,c81d2ff42,c81daff4e,c8203bfa3,c820bf727,c8213f8a8,c821bd72a,c8223e052,c8228bfbb, +c8261e052,c8269d72a,c8271f8a8,c8279f727,c8310ff4e,c8328ff42,c83a2bfb9,c8409bfa3,c84b0bfb9, +c84e83fbd,c8503bfa5,c850be7aa,c8513e052,c8532bc36,c8538bc36,c8561e052,c8569e7aa,c868164c4, +c868964bf,c869164bb,c869abc36,c86a1bfa5,c86a8bc36,c8802dcbd,c880adcc2,c881364b9,c881b64bd, +c882364c2,c882bbfaa,c8833f4a4,c883bd52a,c8843e152,c884abfbd,c8861e152,c8869d52a,c8871f4a4, +c8920bfbd,c898abfbd,c8991bfaa,c8af8bfbd,c8b03bfa5,c8b0be2aa,c8b13e052,c8b61e052,c8b69e2aa, +c8bca903b,c8c20903b,c8c8abfbb,c8ca1bfa5,c8e03bfa8,c8e0bf727,c8e13f828,c8e1bdb2a,c8e23df52, +c8e28bfbb,c8e323fc2,c8e61df52,c8e69db2a,c8e71f828,c8e79f727,c8f82bfb9,c8f88dcc2,c8f90dcbd, +c8f9964c2,c8fa164bd,c8fa964b9,c8fb9bfa8,c8ff83fc2,c9020bfb9,c90c23fc2,c9102dcbf,c910adcc4, +c911364bb,c911b64bf,c912364c4,c912bbfaa,c9133e52a,c913be052,c9142bfbc,c9161e052,c9169e52a, +c9172bfbd,c91d8bfbc,c9299bfaa,c93783fc2,c9403bfa8,c940bf4a4,c9413dcaa,c941be052,c94223ec0, +c9461e052,c9469dcaa,c9471f4a4,c95c1bfa8,c9703bfa5,c970be2aa,c9713e252,c97183ec0,c973a3fbd, +c9761e252,c9769e2aa,c9899bfa5,c9a03bfa3,c9a0bf727,c9a13f8a8,c9a1bdcaa,c9a23df52,c9a61df52, +c9a69dcaa,c9a71f8a8,c9a79f727,c9be9bfa3,c9c08bfbd,c9c903fbd,c9d00dcc4,c9d08dcbf,c9d1164c4, +c9d1964bf,c9d2164bb,c9d2bbfa5,c9d33e7aa,c9d3be052,c9d42bc36,c9d48bc36,c9d523fbd,c9d61e052, +c9d69e7aa,c9e92bcb6,c9e98bcb6,c9eb1bfa5,c9f883fbd,ca002dcc0,ca00adcc5,ca01364bd,ca01b64c0, +ca02364c5,ca02bbfaa,ca033f4a4,ca03bdb2a,ca043df52,ca04abfbd,ca0623fc2,ca069df52,ca071db2a, +ca079f4a4,ca118bfbd,ca179bfaa,ca18abfbd,ca2083fc2,ca288bfbd,ca303bfa5,ca30be2aa,ca313dbd2, +ca33aa3b2,ca34a3fc2,ca361dbd2,ca369e2aa,ca370a3b2,ca481bfa5,ca4a2bfbb,ca5c83fc2,ca603bfa8, +ca60bf727,ca613f8a8,ca61bd8aa,ca623dbd2,ca661dbd2,ca669d8aa,ca671f8a8,ca679f727,ca680bfbb, +ca770dcc5,ca780dcc0,ca78964c5,ca79164c0,ca79964bd,ca7a9bfa8,ca7c2bfb9,ca868bfb9,ca8ea3c40, +ca902dcbf,ca90adcc4,ca91364bb,ca91b64bf,ca92364c4,ca92bbfaa,ca933e7aa,ca93bd9d2,ca942bfbc, +ca95abfbd,ca961d9d2,ca969e7aa,ca998bfbc,caa71bfaa,cac03bfa8,cac0bf4a4,cac13d72a,cac1bdd52, +cac61dd52,cac69d72a,cac71f4a4,cadd9bfa8,cae983c40,caf023fbd,caf0bbfa5,caf13e52a,caf1bd7d2, +caf61d7d2,caf69e52a,cb083f0ad,cb0b1bfa5,cb0e1f0ad,cb203bfa3,cb20bf727,cb213f8a8,cb21bd72a, +cb223f3ab,cb22bdf52,cb261df52,cb269f3ab,cb271d72a,cb279f8a8,cb281f727,cb310bfbd,cb3a0dcbf, +cb3a8dcc4,cb409bfa3,cb4e83fbd,cb50164c4,cb50964bf,cb51164bb,cb51bbfa5,cb523f1ae,cb52bdd52, +cb542bcb6,cb548bcb6,cb561dd52,cb569f1ae,cb699bfa5,cb6c2bc36,cb6c8bc36,cb802dcbd,cb80adcc2, +cb81364b9,cb81b64bd,cb82364c2,cb82bbfaa,cb833f4a4,cb83bd52a,cb843dc52,cb84abfbd,cb861dc52, +cb869d52a,cb871f4a4,cb918bfbd,cb98abfbd,cb991bfaa,cba88bfbd,cbb03bfa5,cbb0be2aa,cbb13d752, +cbb3aa3b2,cbb61d752,cbb69e2aa,cbb70a3b2,cbca2bfbb,cbca9bfa5,cbe03bfa8,cbe0bf727,cbe13f828, +cbe1bdb2a,cbe23e052,cbe323fc2,cbe61e052,cbe69db2a,cbe71f828,cbe79f727,cbe80bfbb,cbf70dcbd, +cbf80dcc2,cbf8964c2,cbf9164bd,cbf9964b9,cbfb9bfa8,cbfc2bfb9,cbff83fc2,cc068bfb9,cc0c23fc2, +cc102dcbf,cc10adcc4,cc11364bb,cc11b64bf,cc12364c4,cc12bbfaa,cc133e52a,cc13bdad2,cc142bfbc, +cc15abfbd,cc161dad2,cc169e52a,cc198bfbc,cc299bfaa,cc3783fc2,cc403bfa8,cc40bf4a4,cc413dcaa, +cc41bdf52,cc4223ec0,cc461df52,cc469dcaa,cc471f4a4,cc5c1bfa8,cc703bfa5,cc70be2aa,cc713de52, +cc7183ec0,cc73a3fbd,cc761de52,cc769e2aa,cc899bfa5,cca03bfa3,cca0bf727,cca13f8a8,cca1bdcaa, +cca23e252,cca28dcc4,cca50dcbf,cca61e252,cca69dcaa,cca71f8a8,cca79f727,ccb10bfbd,ccbe9bfa3, +ccc903fbd,ccd0164c4,ccd0964bf,ccd1164bb,ccd1bbfa5,ccd23e52a,ccd2bd952,ccd423fbd,ccd4abcb6, +ccd50bcb6,ccd61d952,ccd69e52a,cceb1bfa5,ccec2bc36,ccec8bc36,ccf883fbd,cd002dcc0,cd00adcc5, +cd01364bd,cd01b64c0,cd02364c5,cd02bbfaa,cd033f4a4,cd03bddaa,cd043e252,cd04abfbd,cd0623fc2, +cd069e252,cd071ddaa,cd079f4a4,cd118bfbd,cd179bfaa,cd18abfbd,cd2083fc2,cd288bfbd,cd303bfa5, +cd30be52a,cd313dd52,cd33aa3b2,cd34a3fc2,cd361dd52,cd369e52a,cd370a3b2,cd481bfa5,cd4a2bfbb, +cd5c83fc2,cd603bfa8,cd60bf727,cd613f8a8,cd61bdb2a,cd623e152,cd661e152,cd669db2a,cd671f8a8, +cd679f727,cd680bfbb,cd6a8dcc5,cd6b0dcc0,cd78164c5,cd78964c0,cd79164bd,cd7a9bfa8,cd7c2bfb9, +cd868bfb9,cd8ea3c40,cd902dcbf,cd90adcc4,cd91364bb,cd91b64bf,cd92364c4,cd92bbfaa,cd933ea2a, +cd93bde52,cd942bfbc,cd95abfbd,cd961de52,cd969ea2a,cd998bfbc,cda71bfaa,cdc03bfa8,cdc0bf4a4, +cdc13d9aa,cdc1bdc52,cdc61dc52,cdc69d9aa,cdc71f4a4,cdd58dcc4,cdd60dcbf,cddd9bfa8,cde983c40, +cdedaff42,cdee2ff4e,cdf023fbd,cdf0bbfa5,cdf13e7aa,cdf1bde52,cdf61de52,cdf69e7aa,ce018ff42, +ce028ff4e,ce0b1bfa5,ce1d2ff42,ce1daff4e,ce203bfa3,ce20bf727,ce213f8a8,ce21bd9aa,ce223e052, +ce261e052,ce269d9aa,ce271f8a8,ce279f727,ce310bfbd,ce318ff4e,ce328ff42,ce409bfa3,ce4e83fbd, +ce503bfa5,ce50bf42e,ce513e052,ce542bcb6,ce548bcb6,ce561e052,ce569f42e,ce68164c4,ce68964bf, +ce69164bb,ce699bfa5,ce6c2bc36,ce6c8bc36,ce802dcbd,ce80adcc2,ce81364b9,ce81b64bd,ce82364c2, +ce82bbfaa,ce833f4a4,ce83bddaa,ce843e252,ce84abfbd,ce861e252,ce869ddaa,ce871f4a4,ce918bfbd, +ce98abfbd,ce991bfaa,cea88bfbd,ceb03bfa5,ceb0be52a,ceb13dd52,ceb3aa3b2,ceb61dd52,ceb69e52a, +ceb70a3b2,ceca2bfbb,ceca9bfa5,cee03bfa8,cee0bf727,cee13f8a8,cee1bdb2a,cee23e152,cee323fc2, +cee61e152,cee69db2a,cee71f8a8,cee79f727,cee80bfbb,cef80dcc2,cef88dcbd,cef9164c2,cef9964bd, +cefa164b9,cefb9bfa8,cefc2bfb9,ceff83fc2,cf068bfb9,cf0c23fc2,cf102dcbf,cf10adcc4,cf11364bb, +cf11b64bf,cf12364c4,cf12bbfaa,cf133ea2a,cf13bde52,cf142bfbc,cf15abfbd,cf161de52,cf169ea2a, +cf198bfbc,cf299bfaa,cf3783fc2,cf403bfa8,cf40bf4a4,cf413d9aa,cf41bdc52,cf4223ec0,cf461dc52, +cf469d9aa,cf471f4a4,cf5c1bfa8,cf703bfa5,cf70be7aa,cf713de52,cf7183ec0,cf73a3fbd,cf761de52, +cf769e7aa,cf899bfa5,cfa03bfa3,cfa0bf727,cfa13f8a8,cfa1bd9aa,cfa23e052,cfa61e052,cfa69d9aa, +cfa71f8a8,cfa79f727,cfb10bfbd,cfbe9bfa3,cfc903fbd,cfd00dcc4,cfd08dcbf,cfd1164c4,cfd1964bf, +cfd2164bb,cfd2bbfa5,cfd33ea2a,cfd3be052,cfd423fbd,cfd4abcb6,cfd50bcb6,cfd61e052,cfd69ea2a, +cfeb1bfa5,cfec2bc36,cfec8bc36,cff883fbd,d0002dcc0,d000adcc5,d001364bd,d001b64c0,d002364c5, +d002bbfaa,d0033f4a4,d003bddaa,d0043e0d2,d004abfbd,d00623fc2,d0069e0d2,d0071ddaa,d0079f4a4, +d0118bfbd,d0179bfaa,d018abfbd,d02083fc2,d0288bfbd,d0303bfa5,d030be52a,d0313d5d2,d033aa3b2, +d034a3fc2,d0361d5d2,d0369e52a,d0370a3b2,d0481bfa5,d04a2bfbb,d05c83fc2,d0603bfa8,d060bf727, +d0613f8a8,d061bdb2a,d0623e1d2,d0661e1d2,d0669db2a,d0671f8a8,d0679f727,d0680bfbb,d0770dcc5, +d0780dcc0,d078964c5,d079164c0,d079964bd,d07a9bfa8,d07c2bfb9,d0868bfb9,d08ea3c40,d0902dcbf, +d090adcc4,d091364bb,d091b64bf,d092364c4,d092bbfaa,d0933ea2a,d093bde52,d0942bfbc,d095abfbd, +d0961de52,d0969ea2a,d0998bfbc,d0a71bfaa,d0a83e0d2,d0ae1e0d2,d0c03bfa8,d0c0bf4a4,d0c13d9aa, +d0c1be0d2,d0c61e0d2,d0c69d9aa,d0c71f4a4,d0dd9bfa8,d0e983c40,d0f023fbd,d0f0bbfa5,d0f13e7aa, +d0f1be0d2,d0f61e0d2,d0f69e7aa,d1083e352,d10b1bfa5,d10e1e352,d1203bfa3,d120be727,d1213e3a8, +d121bd9aa,d1223e6d2,d1261e6d2,d1269d9aa,d1271e3a8,d1279e727,d1310bfbd,d13a0dcbf,d13a8dcc4, +d1409bfa3,d14e83fbd,d150164c4,d150964bf,d151164bb,d151bbfa5,d1523ea2a,d152bd952,d1542bcb6, +d1548bcb6,d1561d952,d1569ea2a,d1683de52,d1699bfa5,d16c2bc36,d16c8bc36,d16e1de52,d1802dcbd, +d180adcc2,d18134fb9,d181b4fbd,d18234dc2,d182b97aa,d1833d3a4,d183bc92a,d1843c852,d184abfbd, +d1861c852,d1869c92a,d1871d3a4,d1918bfbd,d198abfbd,d199197aa,d1a88bfbd,d1b03bfa5,d1b0bc52a, +d1b13c452,d1b3aa3b2,d1b61c452,d1b69c52a,d1b70a3b2,d1ca2bfbb,d1ca9bfa5,d1e03bfa8,d1e0bdf27, +d1e13cba8,d1e1bc32a,d1e23c352,d1e61c352,d1e69c32a,d1e71cba8,d1e79df27,d1e80bfbb,d1f70dcbd, +d1f80dcc2,d1f894dc2,d1f914fbd,d1f994fb9,d1fb9bfa8,d1fc2bfb9,d2068bfb9,d2102d2bf,d210ad2c4, +d211351bb,d211b51bf,d212351c4,d212bbfaa,d2133c12a,d213bc352,d2142bfbc,d215abfbd,d2161c352, +d2169c12a,d2198bfbc,d2299bfaa,d2400d2c4,d2408d2bf,d2413bfa8,d241bcda4,d2423c0aa,d242bc352, +d2461c352,d2469c0aa,d2471cda4,d25c1bfa8,d2703bfa5,d270bc0aa,d2713c352,d276151c4,d276951bf, +d277151bb,d2779c352,d2781c0aa,d2899bfa5,d2a03bfa3,d2a0bd727,d2a13c7a8,d2a1bc0aa,d2a23c352, +d2a61c352,d2a69c0aa,d2a71c7a8,d2a79d727,d2b10bfbd,d2be9bfa3,d2d03bfa5,d2d0bc0aa,d2d13c352, +d2d61c352,d2d69c0aa,d2eb1bfa5 + + + lastDataFile + /home/hneemann/Dokumente/Digital/BillyJean.hex + + + + + + Splitter + + + Input Splitting + 36 + + + Output Splitting + 7,7,3,1,1,17 + + + + + + Counter + + + valueIsProbe + true + + + Label + Main + + + Bits + 17 + + + inverterConfig + + C + + + + + + + Ground + + + + + VDD + + + + + Comparator + + + Bits + 17 + + + + + + Counter + + + valueIsProbe + true + + + Label + Event + + + Bits + 14 + + + inverterConfig + + C + + + + + + + Ground + + + + + VDD + + + + + Tunnel + + + NetName + Vol + + + + + + Tunnel + + + NetName + Key + + + + + + Tunnel + + + rotation + + + + NetName + Vol + + + + + + Tunnel + + + rotation + + + + NetName + Key + + + + + + Demultiplexer + + + Selector Bits + 3 + + + + + + Tunnel + + + NetName + C + + + + + + Tunnel + + + rotation + + + + NetName + C + + + + + + MIDI + + + midiProgChange + true + + + midiInstrument + Accordion + + + midiChannel + 2 + + + + + + Tunnel + + + rotation + + + + NetName + Vol + + + + + + Tunnel + + + rotation + + + + NetName + Key + + + + + + Tunnel + + + rotation + + + + NetName + C + + + + + + MIDI + + + midiProgChange + true + + + midiInstrument + Accordion + + + midiChannel + 3 + + + + + + Tunnel + + + rotation + + + + NetName + Vol + + + + + + Tunnel + + + rotation + + + + NetName + Key + + + + + + Tunnel + + + rotation + + + + NetName + C + + + + + + MIDI + + + midiProgChange + true + + + midiInstrument + Accordion + + + midiChannel + 4 + + + + + + Tunnel + + + rotation + + + + NetName + Vol + + + + + + Tunnel + + + rotation + + + + NetName + Key + + + + + + Tunnel + + + rotation + + + + NetName + C + + + + + + MIDI + + + midiProgChange + true + + + midiInstrument + Accordion + + + midiChannel + 5 + + + + + + Tunnel + + + rotation + + + + NetName + Vol + + + + + + Tunnel + + + rotation + + + + NetName + Key + + + + + + Tunnel + + + rotation + + + + NetName + C + + + + + + MIDI + + + midiProgChange + true + + + midiInstrument + Accordion + + + midiChannel + 6 + + + + + + Tunnel + + + rotation + + + + NetName + Vol + + + + + + Tunnel + + + rotation + + + + NetName + Key + + + + + + Tunnel + + + rotation + + + + NetName + C + + + + + + MIDI + + + midiProgChange + true + + + midiInstrument + Accordion + + + midiChannel + 7 + + + + + + Tunnel + + + rotation + + + + NetName + Vol + + + + + + Tunnel + + + rotation + + + + NetName + Key + + + + + + Tunnel + + + rotation + + + + NetName + C + + + + + + MIDI + + + midiProgChange + true + + + midiInstrument + Accordion + + + midiChannel + 10 + + + + + + Tunnel + + + rotation + + + + NetName + Vol + + + + + + Tunnel + + + rotation + + + + NetName + Key + + + + + + Tunnel + + + rotation + + + + NetName + C + + + + + + Tunnel + + + NetName + PC + + + + + + Tunnel + + + NetName + OnOff + + + + + + Tunnel + + + rotation + + + + NetName + PC + + + + + + Tunnel + + + rotation + + + + NetName + OnOff + + + + + + Tunnel + + + rotation + + + + NetName + PC + + + + + + Tunnel + + + rotation + + + + NetName + OnOff + + + + + + Tunnel + + + rotation + + + + NetName + PC + + + + + + Tunnel + + + rotation + + + + NetName + OnOff + + + + + + Tunnel + + + rotation + + + + NetName + PC + + + + + + Tunnel + + + rotation + + + + NetName + OnOff + + + + + + Tunnel + + + rotation + + + + NetName + PC + + + + + + Tunnel + + + rotation + + + + NetName + OnOff + + + + + + Tunnel + + + rotation + + + + NetName + PC + + + + + + Tunnel + + + rotation + + + + NetName + OnOff + + + + + + Tunnel + + + rotation + + + + NetName + PC + + + + + + Tunnel + + + rotation + + + + NetName + OnOff + + + + + + Tunnel + + + rotation + + + + NetName + PC + + + + + + Tunnel + + + rotation + + + + NetName + OnOff + + + + + + Text + + + textFontSize + 36 + + + Description + Michael Jackson's +Billie Jean +{{de Michael Jackson's +Billie Jean +}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/dig/misc/MIDIexample.dig b/src/main/dig/misc/MIDIexample.dig index de4c449fc..010f1887d 100644 --- a/src/main/dig/misc/MIDIexample.dig +++ b/src/main/dig/misc/MIDIexample.dig @@ -37,7 +37,7 @@ 15 - + Counter @@ -113,7 +113,12 @@ MIDI - + + + midiInstrument + Accordion + + @@ -121,6 +126,11 @@ + + Const + + + @@ -132,16 +142,20 @@ - - - - - + - - + + + + + + + + + + @@ -205,7 +219,7 @@ - + @@ -213,7 +227,7 @@ - + diff --git a/src/main/java/de/neemann/digital/core/element/Keys.java b/src/main/java/de/neemann/digital/core/element/Keys.java index b5a71a87b..bcd33792b 100644 --- a/src/main/java/de/neemann/digital/core/element/Keys.java +++ b/src/main/java/de/neemann/digital/core/element/Keys.java @@ -739,14 +739,20 @@ public final class Keys { /** * Selects the midi channel */ - public static final Key.KeyInteger MIDICHANNEL = - new Key.KeyInteger("midiChannel", 0) - .setMin(0) - .setMax(15); + public static final Key.KeyInteger MIDI_CHANNEL = + new Key.KeyInteger("midiChannel", 1) + .setMin(1) + .setMax(16); /** * Selects the midi channel */ - public static final Key MIDIINSTRUMENT = + public static final Key MIDI_INSTRUMENT = new Key<>("midiInstrument", ""); + + /** + * Enables Program change + */ + public static final Key MIDI_PROG_CHANGE = + new Key<>("midiProgChange", false); } diff --git a/src/main/java/de/neemann/digital/core/io/MIDI.java b/src/main/java/de/neemann/digital/core/io/MIDI.java index 96d232887..574f009c1 100644 --- a/src/main/java/de/neemann/digital/core/io/MIDI.java +++ b/src/main/java/de/neemann/digital/core/io/MIDI.java @@ -6,10 +6,7 @@ package de.neemann.digital.core.io; import de.neemann.digital.core.*; -import de.neemann.digital.core.element.Element; -import de.neemann.digital.core.element.ElementAttributes; -import de.neemann.digital.core.element.ElementTypeDescription; -import de.neemann.digital.core.element.Keys; +import de.neemann.digital.core.element.*; import javax.sound.midi.MidiChannel; @@ -24,21 +21,38 @@ public class MIDI extends Node implements Element { * The Speakers description */ public static final ElementTypeDescription DESCRIPTION - = new ElementTypeDescription(MIDI.class, - input("N"), - input("V"), - input("OnOff"), - input("C").setClock()) + = new ElementTypeDescription(MIDI.class) { + public PinDescriptions getInputDescription(ElementAttributes elementAttributes) throws NodeException { + if (elementAttributes.get(Keys.MIDI_PROG_CHANGE)) + return new PinDescriptions(input("N"), + input("V"), + input("OnOff"), + input("PC"), + input("en"), + input("C").setClock()).setLangKey(getPinLangKey()); + else + return new PinDescriptions(input("N"), + input("V"), + input("OnOff"), + input("en"), + input("C").setClock()).setLangKey(getPinLangKey()); + } + } .addAttribute(Keys.ROTATE) - .addAttribute(Keys.MIDICHANNEL) - .addAttribute(Keys.MIDIINSTRUMENT); + .addAttribute(Keys.LABEL) + .addAttribute(Keys.MIDI_CHANNEL) + .addAttribute(Keys.MIDI_INSTRUMENT) + .addAttribute(Keys.MIDI_PROG_CHANGE); private final int chanNum; private final String instrument; + private final boolean progChangeEnable; private ObservableValue note; private ObservableValue volume; private ObservableValue clock; private ObservableValue onOff; + private ObservableValue en; + private ObservableValue progChange; private MidiChannel channel; private boolean lastCl = false; @@ -48,8 +62,9 @@ public class MIDI extends Node implements Element { * @param attributes the elements attributes */ public MIDI(ElementAttributes attributes) { - chanNum = attributes.get(Keys.MIDICHANNEL); - instrument = attributes.get(Keys.MIDIINSTRUMENT); + chanNum = attributes.get(Keys.MIDI_CHANNEL)-1; + instrument = attributes.get(Keys.MIDI_INSTRUMENT); + progChangeEnable = attributes.get(Keys.MIDI_PROG_CHANGE); } @Override @@ -57,7 +72,14 @@ public class MIDI extends Node implements Element { note = inputs.get(0).checkBits(7, this, 0); volume = inputs.get(1).checkBits(7, this, 1); onOff = inputs.get(2).checkBits(1, this, 2); - clock = inputs.get(3).checkBits(1, this, 3).addObserverToValue(this); + if (progChangeEnable) { + progChange = inputs.get(3).checkBits(1, this, 3); + en = inputs.get(4).checkBits(1, this, 4); + clock = inputs.get(5).checkBits(1, this, 5).addObserverToValue(this); + } else { + en = inputs.get(3).checkBits(1, this, 3); + clock = inputs.get(4).checkBits(1, this, 4).addObserverToValue(this); + } } @Override @@ -68,13 +90,17 @@ public class MIDI extends Node implements Element { @Override public void readInputs() throws NodeException { boolean cl = clock.getBool(); - if (!lastCl && cl) { + if (!lastCl && cl && en.getBool()) { int note = (int) this.note.getValue(); - if (onOff.getBool()) { - int v = (int) volume.getValue(); - channel.noteOn(note, v); - } else - channel.noteOff(note); + if (progChange != null && progChange.getBool()) { + channel.programChange(note); + } else { + if (onOff.getBool()) { + int v = (int) volume.getValue(); + channel.noteOn(note, v); + } else + channel.noteOff(note); + } } lastCl = cl; } diff --git a/src/main/java/de/neemann/digital/gui/components/EditorFactory.java b/src/main/java/de/neemann/digital/gui/components/EditorFactory.java index 838352f6c..03f074e6e 100644 --- a/src/main/java/de/neemann/digital/gui/components/EditorFactory.java +++ b/src/main/java/de/neemann/digital/gui/components/EditorFactory.java @@ -95,7 +95,7 @@ public final class EditorFactory { * @return the editor */ public Editor create(Key key, T value) { - if (key == Keys.MIDIINSTRUMENT) + if (key == Keys.MIDI_INSTRUMENT) return (Editor) new MidiInstrumentEditor(value.toString()); Class fac = map.get(key.getValueClass()); diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index ac1aeca50..eda6583f6 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -264,6 +264,8 @@ Lautstärke Wenn gesetzt, enspricht das dem Drücken einer Keyboard-Taste (key down). Wenn nicht gesetzt, entspricht das einem Loslassen der Taste (key up). + Wenn dieser eingang high ist, kann der Baustein angesprochen werden. + Wenn gesetzt, wird mit dem Wert an Eingang N das Programm (Instrument) gewechselt. Takteingang @@ -1305,6 +1307,9 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Legt den MIDI-Kanal fest. MIDI-Instrument Das MIDI-Instrument, welches verwendet werden soll. + Programmwechsel erlauben + Fügt einen weiteren Eingang PC hinzu. Wird dieser Eingang auf High gesetzt, + wird mit dem Wert am Eingang N das Programm (Intrument) gewechselt. Leitung eingefügt. Aus Zwischenablage eingefügt. diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 5c7997b24..81d3c83fa 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -269,6 +269,8 @@ Volume If set, this translates to pressing a keyboard key (key down event), if not set, this translates to releasing the key (key up event). + Enables the component + If high, the value at N is used to change the program (instrument). Clock @@ -1293,6 +1295,9 @@ Selects the MIDI channel to use. MIDI instrument The MIDI instrument to use. + Allow program change + Adds a new input PC. If this input is set to high, + the value at input N is used to change te program (instrument). Inserted wire. Insert from clipboard. diff --git a/src/test/java/de/neemann/digital/integration/TestExamples.java b/src/test/java/de/neemann/digital/integration/TestExamples.java index b268132fe..0be319d82 100644 --- a/src/test/java/de/neemann/digital/integration/TestExamples.java +++ b/src/test/java/de/neemann/digital/integration/TestExamples.java @@ -32,7 +32,7 @@ public class TestExamples extends TestCase { */ public void testDistExamples() throws Exception { File examples = new File(Resources.getRoot().getParentFile().getParentFile(), "/main/dig"); - assertEquals(249, new FileScanner(this::check).scan(examples)); + assertEquals(250, new FileScanner(this::check).scan(examples)); assertEquals(170, testCasesInFiles); } diff --git a/src/test/resources/dig/backtrack/AllComponents.dig b/src/test/resources/dig/backtrack/AllComponents.dig index eba5835d4..455cc413f 100644 --- a/src/test/resources/dig/backtrack/AllComponents.dig +++ b/src/test/resources/dig/backtrack/AllComponents.dig @@ -1238,6 +1238,10 @@ + + + + @@ -1510,6 +1514,10 @@ + + + + From 5cab838ad713e3441cfd37074a206915b8c88b96 Mon Sep 17 00:00:00 2001 From: hneemann Date: Tue, 12 Feb 2019 08:30:33 +0100 Subject: [PATCH 10/14] fixed a build issue --- src/main/dig/misc/BillieJean.dig | 32 ------------------- src/main/dig/misc/MIDIexample.dig | 7 +--- .../neemann/digital/core/io/MIDIHelper.java | 18 +++++++---- src/main/resources/lang/lang_de.xml | 3 +- src/main/resources/lang/lang_en.xml | 1 + 5 files changed, 15 insertions(+), 46 deletions(-) diff --git a/src/main/dig/misc/BillieJean.dig b/src/main/dig/misc/BillieJean.dig index 1b24b28f5..13707b47c 100644 --- a/src/main/dig/misc/BillieJean.dig +++ b/src/main/dig/misc/BillieJean.dig @@ -28,10 +28,6 @@ midiProgChange true - - midiInstrument - Accordion - @@ -1632,10 +1628,6 @@ d2d61c352,d2d69c0aa,d2eb1bfa5 midiProgChange true - - midiInstrument - Accordion - midiChannel 2 @@ -1692,10 +1684,6 @@ d2d61c352,d2d69c0aa,d2eb1bfa5 midiProgChange true - - midiInstrument - Accordion - midiChannel 3 @@ -1752,10 +1740,6 @@ d2d61c352,d2d69c0aa,d2eb1bfa5 midiProgChange true - - midiInstrument - Accordion - midiChannel 4 @@ -1812,10 +1796,6 @@ d2d61c352,d2d69c0aa,d2eb1bfa5 midiProgChange true - - midiInstrument - Accordion - midiChannel 5 @@ -1872,10 +1852,6 @@ d2d61c352,d2d69c0aa,d2eb1bfa5 midiProgChange true - - midiInstrument - Accordion - midiChannel 6 @@ -1932,10 +1908,6 @@ d2d61c352,d2d69c0aa,d2eb1bfa5 midiProgChange true - - midiInstrument - Accordion - midiChannel 7 @@ -1992,10 +1964,6 @@ d2d61c352,d2d69c0aa,d2eb1bfa5 midiProgChange true - - midiInstrument - Accordion - midiChannel 10 diff --git a/src/main/dig/misc/MIDIexample.dig b/src/main/dig/misc/MIDIexample.dig index 010f1887d..7e994b4b7 100644 --- a/src/main/dig/misc/MIDIexample.dig +++ b/src/main/dig/misc/MIDIexample.dig @@ -113,12 +113,7 @@ MIDI - - - midiInstrument - Accordion - - + diff --git a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java index b7a9fb1d0..1273e1753 100644 --- a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java +++ b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java @@ -97,10 +97,10 @@ public final class MIDIHelper { public MidiChannel getChannel(int num, String instrument) throws NodeException { Instrument instr = null; if (!instrument.isEmpty()) { - instr = getInstrument(instrument); + if (!getSynthesizer().loadInstruments()) + throw new NodeException(Lang.get("err_midiInstrumentsNotAvailable")); - if (!getSynthesizer().loadInstrument(instr)) - throw new NodeException(Lang.get("err_midiInstrument_N_NotAvailable", instrument)); + instr = getInstrument(instrument); } MidiChannel[] channels = getSynthesizer().getChannels(); @@ -141,6 +141,7 @@ public final class MIDIHelper { private TreeMap getInstumentMap() throws NodeException { if (instrumentMap == null) { instrumentMap = new TreeMap<>(); + instrumentMap.put("", null); for (Instrument i : getSynthesizer().getAvailableInstruments()) { instrumentMap.put(i.getName(), i); } @@ -153,7 +154,7 @@ public final class MIDIHelper { void close(); - boolean loadInstrument(Instrument instr); + boolean loadInstruments(); Instrument[] getAvailableInstruments(); @@ -178,8 +179,11 @@ public final class MIDIHelper { } @Override - public boolean loadInstrument(Instrument instr) { - return synthesizer.loadInstrument(instr); + public boolean loadInstruments() { + Soundbank soundbank = synthesizer.getDefaultSoundbank(); + if (soundbank == null) + return false; + return synthesizer.loadAllInstruments(soundbank); } @Override @@ -203,7 +207,7 @@ public final class MIDIHelper { } @Override - public boolean loadInstrument(Instrument instr) { + public boolean loadInstruments() { return true; } diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index eda6583f6..80836ce3f 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -1005,6 +1005,7 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Das MIDI-System ist nicht verfügbar. Der MIDI-Kanal {0} ist nicht verfügbar. Das MIDI-Instrument {0} ist nicht verfügbar. + Die MIDI-Instrumente sind nicht verfügbar. Adress-Bits Anzahl der Adress-Bits, die verwendet werden. @@ -1309,7 +1310,7 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Das MIDI-Instrument, welches verwendet werden soll. Programmwechsel erlauben Fügt einen weiteren Eingang PC hinzu. Wird dieser Eingang auf High gesetzt, - wird mit dem Wert am Eingang N das Programm (Intrument) gewechselt. + wird mit dem Wert am Eingang N das Programm (Instrument) gewechselt. Leitung eingefügt. Aus Zwischenablage eingefügt. diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 81d3c83fa..4ace3fee5 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -998,6 +998,7 @@ The MIDI-System is not available. The MIDI channel {0} is not available. The MIDI instrument {0} is not available. + The MIDI instruments are not available. Address Bits Number of address bits used. From dd041f0da922fd007dea886f068bb2675377b3f0 Mon Sep 17 00:00:00 2001 From: hneemann Date: Tue, 12 Feb 2019 08:40:50 +0100 Subject: [PATCH 11/14] fixed a build issue --- src/main/java/de/neemann/digital/core/io/MIDIHelper.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java index 1273e1753..bc795c71f 100644 --- a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java +++ b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java @@ -218,7 +218,7 @@ public final class MIDIHelper { @Override public MidiChannel[] getChannels() { - return new MidiChannel[]{new MidiChannel() { + final MidiChannel dummy = new MidiChannel() { @Override public void noteOn(int i, int i1) { } @@ -344,7 +344,12 @@ public final class MIDIHelper { public boolean getSolo() { return false; } - }}; + }; + return new MidiChannel[]{ + dummy, dummy, dummy, dummy, + dummy, dummy, dummy, dummy, + dummy, dummy, dummy, dummy, + dummy, dummy, dummy, dummy}; } } From 145e59ea2fe0602078c858d2716e54768f0f74a7 Mon Sep 17 00:00:00 2001 From: hneemann Date: Tue, 12 Feb 2019 13:57:36 +0100 Subject: [PATCH 12/14] refactoring of MIDI helper --- .../neemann/digital/core/io/MIDIHelper.java | 30 ++++++------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java index bc795c71f..8ca4d19e1 100644 --- a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java +++ b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java @@ -96,12 +96,8 @@ public final class MIDIHelper { */ public MidiChannel getChannel(int num, String instrument) throws NodeException { Instrument instr = null; - if (!instrument.isEmpty()) { - if (!getSynthesizer().loadInstruments()) - throw new NodeException(Lang.get("err_midiInstrumentsNotAvailable")); - + if (!instrument.isEmpty()) instr = getInstrument(instrument); - } MidiChannel[] channels = getSynthesizer().getChannels(); if (num >= channels.length) { @@ -154,8 +150,6 @@ public final class MIDIHelper { void close(); - boolean loadInstruments(); - Instrument[] getAvailableInstruments(); MidiChannel[] getChannels(); @@ -171,6 +165,13 @@ public final class MIDIHelper { @Override public void open() throws MidiUnavailableException { synthesizer.open(); + + Soundbank soundbank = synthesizer.getDefaultSoundbank(); + if (soundbank == null) + throw new MidiUnavailableException(); + + if (!synthesizer.loadAllInstruments(soundbank)) + throw new MidiUnavailableException(); } @Override @@ -178,14 +179,6 @@ public final class MIDIHelper { synthesizer.close(); } - @Override - public boolean loadInstruments() { - Soundbank soundbank = synthesizer.getDefaultSoundbank(); - if (soundbank == null) - return false; - return synthesizer.loadAllInstruments(soundbank); - } - @Override public Instrument[] getAvailableInstruments() { return synthesizer.getAvailableInstruments(); @@ -199,18 +192,13 @@ public final class MIDIHelper { private static final class SynthesizerMock implements SynthesizerInterface { @Override - public void open() throws MidiUnavailableException { + public void open() { } @Override public void close() { } - @Override - public boolean loadInstruments() { - return true; - } - @Override public Instrument[] getAvailableInstruments() { return new Instrument[0]; From 58db5649bf4a8d743c9ef0c8836844c925561478 Mon Sep 17 00:00:00 2001 From: hneemann Date: Tue, 12 Feb 2019 14:03:47 +0100 Subject: [PATCH 13/14] fixed a language error --- src/main/java/de/neemann/digital/core/io/MIDIHelper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java index 8ca4d19e1..dc883396a 100644 --- a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java +++ b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java @@ -168,10 +168,10 @@ public final class MIDIHelper { Soundbank soundbank = synthesizer.getDefaultSoundbank(); if (soundbank == null) - throw new MidiUnavailableException(); + throw new MidiUnavailableException(Lang.get("err_midiInstrumentsNotAvailable")); if (!synthesizer.loadAllInstruments(soundbank)) - throw new MidiUnavailableException(); + throw new MidiUnavailableException(Lang.get("err_midiInstrumentsNotAvailable")); } @Override From ed0ffa8ec1f3574f17504cab2de6db3c1fc9209f Mon Sep 17 00:00:00 2001 From: hneemann Date: Tue, 12 Feb 2019 20:14:16 +0100 Subject: [PATCH 14/14] improved the MIDIHelper API --- src/main/java/de/neemann/digital/core/io/MIDI.java | 5 ++--- src/main/java/de/neemann/digital/core/io/MIDIHelper.java | 7 +++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/io/MIDI.java b/src/main/java/de/neemann/digital/core/io/MIDI.java index 574f009c1..0ce31fc57 100644 --- a/src/main/java/de/neemann/digital/core/io/MIDI.java +++ b/src/main/java/de/neemann/digital/core/io/MIDI.java @@ -62,7 +62,7 @@ public class MIDI extends Node implements Element { * @param attributes the elements attributes */ public MIDI(ElementAttributes attributes) { - chanNum = attributes.get(Keys.MIDI_CHANNEL)-1; + chanNum = attributes.get(Keys.MIDI_CHANNEL) - 1; instrument = attributes.get(Keys.MIDI_INSTRUMENT); progChangeEnable = attributes.get(Keys.MIDI_PROG_CHANGE); } @@ -111,7 +111,6 @@ public class MIDI extends Node implements Element { @Override public void init(Model model) throws NodeException { - MIDIHelper.getInstance().open(model); - channel = MIDIHelper.getInstance().getChannel(chanNum, instrument); + channel = MIDIHelper.getInstance().getChannel(chanNum, instrument, model); } } diff --git a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java index dc883396a..35f7d9fcc 100644 --- a/src/main/java/de/neemann/digital/core/io/MIDIHelper.java +++ b/src/main/java/de/neemann/digital/core/io/MIDIHelper.java @@ -57,7 +57,7 @@ public final class MIDIHelper { * @param model the mode used. If the model is closed also the synthesizer is closed * @throws NodeException NodeException */ - public void open(Model model) throws NodeException { + private void ensureOpen(Model model) throws NodeException { if (!isOpen) { try { getSynthesizer().open(); @@ -91,10 +91,13 @@ public final class MIDIHelper { * * @param num the channel number * @param instrument the instrument to use + * @param model the model * @return the channel * @throws NodeException NodeException */ - public MidiChannel getChannel(int num, String instrument) throws NodeException { + public MidiChannel getChannel(int num, String instrument, Model model) throws NodeException { + ensureOpen(model); + Instrument instr = null; if (!instrument.isEmpty()) instr = getInstrument(instrument);