From 3e7c22d6591859be6fe73c6bf20012e6baa69139 Mon Sep 17 00:00:00 2001 From: Pete Brown Date: Wed, 7 Feb 2024 02:03:25 -0500 Subject: [PATCH] More docs updates --- build/staging/version/BundleInfo.wxi | 2 +- docs/_site/assets/js/search-data.json | 613 +++++++++++------- docs/_site/config-json.html | 24 +- .../connections/README.html | 2 +- ...pointDeviceInformationUpdateEventArgs.html | 2 +- .../MidiEndpointDeviceWatcher.html | 2 +- .../enumeration/README.html | 2 +- .../message-utilities/README.html | 2 +- .../messages/IMidiUniversalPacket.html | 2 +- .../messages/MidiMessage128.html | 2 +- .../messages/MidiMessage32.html | 2 +- .../messages/MidiMessage64.html | 2 +- .../messages/MidiMessage96.html | 2 +- .../messages/MidiMessageStruct.html | 2 +- .../messages/MidiMessageTypeEnum.html | 2 +- .../messages/MidiPacketTypeEnum.html | 2 +- .../messages/README.html | 2 +- .../IMidiEndpointMessageProcessingPlugin.html | 2 +- .../MidiChannelEndpointListener.html | 2 +- .../MidiGroupEndpointListener.html | 2 +- .../MidiMessageTypeEndpointListener.html | 2 +- .../service/MidiService.html | 2 +- ...iceMessageProcessingPluginInformation.html | 2 +- ...MidiServiceTransportPluginInformation.html | 2 +- .../MidiSessionConnectionInformation.html | 2 +- .../service/MidiSessionInformation.html | 2 +- .../service/console-enum-sessions.png | Bin 0 -> 105542 bytes .../service/console-ping.png | Bin 0 -> 165158 bytes docs/_site/developer-docs/endpoint-ids.html | 2 +- docs/config-json.md | 27 +- .../connections/README.md | 18 +- ...ndpointDeviceInformationUpdateEventArgs.md | 2 +- .../enumeration/MidiEndpointDeviceWatcher.md | 2 +- .../enumeration/README.md | 11 +- .../message-utilities/README.md | 3 + .../messages/IMidiUniversalPacket.md | 2 + .../messages/MidiMessage128.md | 2 + .../messages/MidiMessage32.md | 2 + .../messages/MidiMessage64.md | 2 + .../messages/MidiMessage96.md | 2 + .../messages/MidiMessageStruct.md | 2 + .../messages/MidiMessageTypeEnum.md | 2 + .../messages/MidiPacketTypeEnum.md | 2 + .../Windows.Devices.Midi2/messages/README.md | 2 +- .../IMidiEndpointMessageProcessingPlugin.md | 24 +- .../MidiChannelEndpointListener.md | 19 +- .../MidiGroupEndpointListener.md | 20 +- .../MidiMessageTypeEndpointListener.md | 20 +- .../service/MidiService.md | 3 +- ...rviceMessageProcessingPluginInformation.md | 7 + .../MidiServiceTransportPluginInformation.md | 7 +- .../MidiSessionConnectionInformation.md | 2 +- .../service/MidiSessionInformation.md | 8 + .../service/console-enum-sessions.png | Bin 0 -> 105542 bytes .../service/console-ping.png | Bin 0 -> 165158 bytes docs/developer-docs/endpoint-ids.md | 17 +- .../nuget/Windows.Devices.Midi2.nuspec | 2 +- .../Midi2Client/MidiGroupEndpointListener.idl | 4 +- .../MidiMessageTypeEndpointListener.idl | 3 + 59 files changed, 575 insertions(+), 329 deletions(-) create mode 100644 docs/_site/developer-docs/Windows.Devices.Midi2/service/console-enum-sessions.png create mode 100644 docs/_site/developer-docs/Windows.Devices.Midi2/service/console-ping.png create mode 100644 docs/developer-docs/Windows.Devices.Midi2/service/console-enum-sessions.png create mode 100644 docs/developer-docs/Windows.Devices.Midi2/service/console-ping.png diff --git a/build/staging/version/BundleInfo.wxi b/build/staging/version/BundleInfo.wxi index 8b223f2c..f49b5b23 100644 --- a/build/staging/version/BundleInfo.wxi +++ b/build/staging/version/BundleInfo.wxi @@ -1,4 +1,4 @@ - + diff --git a/docs/_site/assets/js/search-data.json b/docs/_site/assets/js/search-data.json index 3c1984f9..481c47a9 100644 --- a/docs/_site/assets/js/search-data.json +++ b/docs/_site/assets/js/search-data.json @@ -1,1481 +1,1614 @@ {"0": { "doc": "IMidiEndpointMessageProcessingPlugin", "title": "IMidiEndpointMessageProcessingPlugin", - "content": "(In progress) . ", + "content": "This interface is implemented by any type which can be an endpoint processing plugin in the client API. These plugins are used to process or manipulate messages coming from an endpoint. Microsoft provides several plugins in the API, including the MidiVirtualEndpointDevice, the MidiChannelEndpointListener, and the MidiGroupEndpointListener. All of these types implement the IMidiEndpointMessageProcessingPlugin interface and operate in the same way. The main part of message processing is the ProcessIncomingMessage callback. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.html" },"1": { + "doc": "IMidiEndpointMessageProcessingPlugin", + "title": "Properties", + "content": "| Property | Description | . | Id | Generated GUID for this plugin instance. This is needed if you want to remove the plugin from the endpoint connection | . | Name | Optional application-supplied name for this plugin instance. | . | Tag | Optional application-supplied arbitrary data to associate with this plugin instance | . | IsEnabled | True if the plugin is enabled and should participate in message processing | . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.html#properties", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.html#properties" + },"2": { + "doc": "IMidiEndpointMessageProcessingPlugin", + "title": "Functions", + "content": "| Function | Description | . | Initialize(endpointConnection) | Called by the endpoint connection. Perform any setup code which requires the endpoint connection pointer here. | . | OnEndpointConnectionOpened() | Callback when the endpoint connection is opened. If the plugin is added after the endpoint connection has already been opened, this is called immediately. | . | ProcessIncomingMessage(args, skipFurtherListeners, skipMainMessageReceivedEvent) | Callback for processing an incoming message. If the code sets skipFurtherListeners to true, any plugins after this one will not be called. If the code sets skipMainMessageReceivedEvent to true, the endpoint’s MessageReceived event will not be called for this message. Note: this callback is synchronous, so code in this should execute quickly and return immediately when complete. | . | Cleanup() | Called when the endpoint is tearing down | . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.html#functions", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.html#functions" + },"3": { "doc": "IMidiEndpointMessageProcessingPlugin", "title": "IDL", "content": "IMidiEndpointMessageProcessingPlugin IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.html#idl" - },"2": { + },"4": { "doc": "IMidiUniversalPacket", "title": "IMidiUniversalPacket", - "content": "This interface is implemented by the rich MidiMessageXX runtime class types. It may also be used as the interface for message-specific classes you create yourself. | Property | Description | . | Timestamp | 64 bit timestamp set by the receiving transport in the case of incoming messages, or by the sender in the case of outgoing messages | . | MessageType | A MidiMessageType enumeration value which represents the 4 bit MIDI Message type 0x0 - 0xF as defined by the MIDI UMP standard. | . | PacketType | A MidiPacketType enumeration value which can be cast to an int to get the number of 32-bit words in the message packet | . | Function | Description | . | PeekFirstWord() | Provides access to the first word of data, even if the message type and size is not yet known by the API user | . IMidiUniversalPacket IDL . ", + "content": "This interface is implemented by the rich MidiMessageXX runtime class types. It may also be used as the interface for message-specific classes you create yourself. | Property | Description | . | Timestamp | 64 bit timestamp set by the receiving transport in the case of incoming messages, or by the sender in the case of outgoing messages | . | MessageType | A MidiMessageType enumeration value which represents the 4 bit MIDI Message type 0x0 - 0xF as defined by the MIDI UMP standard. | . | PacketType | A MidiPacketType enumeration value which can be cast to an int to get the number of 32-bit words in the message packet | . | Function | Description | . | PeekFirstWord() | Provides access to the first word of data, even if the message type and size is not yet known by the API user | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/IMidiUniversalPacket.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/IMidiUniversalPacket.html" - },"3": { + },"5": { + "doc": "IMidiUniversalPacket", + "title": "IDL", + "content": "IMidiUniversalPacket IDL . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/IMidiUniversalPacket.html#idl", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/IMidiUniversalPacket.html#idl" + },"6": { "doc": "MidiChannel", "title": "MidiChannel", "content": "The MidiChannel class is used to provide formatting and data validation for MIDI 1.0 and MIDI 2.0 channels. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiChannel.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiChannel.html" - },"4": { + },"7": { "doc": "MidiChannel", "title": "Properties", "content": "| Property | Description | . | Index | The data value, or channel Index (0-15) | . | NumberForDisplay | The number that should be displayed in any UI. (1-16) | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiChannel.html#properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiChannel.html#properties" - },"5": { + },"8": { "doc": "MidiChannel", "title": "Static Properties", "content": "| Static Property | Description | . | LabelShort | Returns the localized abbreviation. For example, “Ch” in English. | . | LabelFull | Returns the localized full name. For example, “Channel” in English. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiChannel.html#static-properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiChannel.html#static-properties" - },"6": { + },"9": { "doc": "MidiChannel", "title": "Functions", "content": "| Function | Description | . | MidiChannel() | Constructs an empty MidiChannel | . | MidiChannel(index) | Constructs a MidiChannel with the specified index | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiChannel.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiChannel.html#functions" - },"7": { + },"10": { "doc": "MidiChannel", "title": "Static Functions", "content": "| Static Function | Description | . | IsValidChannelIndex(index) | Verifies that the provided index is valid (between 0 and 15) | . MidiChannel IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiChannel.html#static-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiChannel.html#static-functions" - },"8": { + },"11": { "doc": "MidiChannelEndpointListener", "title": "MidiChannelEndpointListener", - "content": "(In progress) . ", + "content": "This class acts as a filter. Incoming messages with the specified group and channel will be provided through the MessageReceived event. Other messages will be ignored. In addition to the properties and methods in IMidiEndpointMessageProcessingPlugin, and the MessageReceived event from IMidiMessageReceivedEventSource the class provides the following: . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.html" - },"9": { + },"12": { + "doc": "MidiChannelEndpointListener", + "title": "Properties", + "content": "| Property | Description | . | IncludeGroup | The MidiGroup that this listener will listen to. | . | IncludeChannels | The channels that this listener will listen to on the group. | . | PreventCallingFurtherListeners | True if this plugin should prevent further listeners from processing a message that is in-scope for this processor. | . | PreventFiringMainMessageReceivedEvent | True if this plugin should prevent the endpoint’s MessageReceived event from firing if the message was in-scope for this plugin. | . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.html#properties", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.html#properties" + },"13": { + "doc": "MidiChannelEndpointListener", + "title": "Functions", + "content": "| Property | Description | . | MidiChannelEndpointListener() | Construct a new instance of this type | . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.html#functions", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.html#functions" + },"14": { "doc": "MidiChannelEndpointListener", "title": "IDL", "content": "MidiChannelEndpointListener IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.html#idl" - },"10": { + },"15": { "doc": "MidiClock", "title": "MidiClock", "content": "The MidiClock is what is used for all timestamps in Windows MIDI Services. Although it is internally backed by QueryPerformanceCounter, we recommend using the MidiClock type directly instead of calling QPC yourself. Also note that QueryPerformanceCounter technically returns a signed 64 bit integer, but the timestamp values used in Windows MIDI Services are unsigned 64 bit integers. Typically, this is of no practical concern as the tick resolution is currently 100ns and takes tens of thousands of years to wrap around even with a 64 bit signed integer. Note: The MIDI Clock is unrelated to wall clock time. It is an ever-increasing value of period 1/TimestampFrequency seconds that starts over when the PC is rebooted. To convert to wall clock time, you need to get the MidiClock.Now value at a known time, and then use that as a baseline until the next time you reboot the PC. You can learn more about high-resolution timestamps in Windows at https://aka.ms/miditimestamp. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/clock/MidiClock.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/clock/MidiClock.html" - },"11": { + },"16": { "doc": "MidiClock", "title": "Static Properties", "content": "| Static Property | Description | . | Now | Returns the current timestamp | . | TimestampFrequency | Returns the number of timestamp ticks per second. This is calculated the first time it is called, and then cached for future calls. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/clock/MidiClock.html#static-properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/clock/MidiClock.html#static-properties" - },"12": { + },"17": { "doc": "MidiClock", "title": "Static Functions", "content": "The static functions are for convenience in calculating offsets to a timestamp, and for converting between units. | Static Function | Description | . | ConvertTimestampToMicroseconds(timestampValue) | Converts the provided timestamp to microseconds | . | ConvertTimestampToMilliseconds(timestampValue) | Converts the provided timestamp to milliseconds | . | ConvertTimestampToSeconds(timestampValue) | Converts the provided timestamp to seconds | . | OffsetTimestampByTicks(timestampValue, offsetTicks) | Offsets a given timestamp by the provided (signed) number of ticks | . | OffsetTimestampByMicroseconds(timestampValue, offsetMicroseconds) | Offsets a given timestamp by the provided (signed) number of microseconds | . | OffsetTimestampByMilliseconds(timestampValue, offsetMilliseconds) | Offsets a given timestamp by the provided (signed) number of milliseconds | . | OffsetTimestampBySeconds(timestampValue, offsetSeconds) | Offsets a given timestamp by the provided (signed) number of seconds | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/clock/MidiClock.html#static-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/clock/MidiClock.html#static-functions" - },"13": { + },"18": { "doc": "MidiClock", "title": "IDL", "content": "MidiClock IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/clock/MidiClock.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/clock/MidiClock.html#idl" - },"14": { + },"19": { "doc": "MidiEndpointConnection", "title": "MidiEndpointConnection", "content": "The MidiEndpointConnection type represents a single connection to a single endpoint managed by Windows MIDI Services. It is created using the functions of the MidiSession, and is tied to the lifetime of that session. Connections allocate resources including send/receive buffers, and processing threads. For that reason, a session should generally not open more than one connection to a single endpoint. If you need to partition out messages more easily (by group or channel, for example) the MessageProcessingPlugins collection will help you do that. To ensure an application is able to wire up processing plugins and event handlers before the connection is active, the connection returned by the MidiSession is not yet open. Once the connection is acquired, the application should assign event handlers, and optionally assign any message processing plugins. Once complete, the application calls the Open() function to connect to the service, create the queues, and begin sending and receiving messages. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html" - },"15": { + },"20": { "doc": "MidiEndpointConnection", "title": "Properties", "content": "| Property | Description | . | ConnectionId | The generated GUID which uniquely identifes this connection instance. This is what is provided to the MidiSession when disconnecting an endpoint | . | EndpointDeviceId | The system-wide identifier for the device connection. This is returned through enumeration calls. | . | Tag | You may use this Tag property to hold any additional information you wish to have associated with the connection. | . | IsOpen | True if this connection is currently open. When first created, the connection is not open until the consuming code calls the Open method | . | Settings | Settings used to create this connection. | . | MessageProcessingPlugins | Collection of all message processing plugins which will optionally handle incoming messages. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html#properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html#properties" - },"16": { + },"21": { "doc": "MidiEndpointConnection", "title": "Static Member Functions", "content": "| Static Function | Description | . | GetDeviceSelector() | Returns the device selector used for enumerating endpoint devices compatible with this API. | . | SendMessageSucceeded(sendResult) | Helper function to decipher the return result of a message sending function to tell if it succeeded. | . | SendMessageFailed(sendResult) | Helper function to decipher the return result of a message sending function to tell if it failed. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html#static-member-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html#static-member-functions" - },"17": { + },"22": { "doc": "MidiEndpointConnection", "title": "Functions", "content": "| Function | Description | . | Open() | Open the connection and start receiving messages. Wire up the message event handler before calling this method. | . | SendMessagePacket(message) | Send an IMidiUniversalPacket-implementing type such as MidiMessage64 or a strongly-typed message class. | . | SendMessageStruct(timestamp, message, wordCount) | Send a fixed-sized MidiMessageStruct containing wordCount valid words. Additional words are ignored. | . | SendMessageWordArray(timestamp, words, startIndex, wordCount) | Note: Some projections will send the entire array as a copy, so this may not be the most effecient way to send messages from your language. | . | SendMessageWords(timestamp, word0) | Send a single 32-bit Universal MIDI Packet as 32-bit words. This is often the most efficient way to send this type of message | . | SendMessageWords(timestamp, word0, word1) | Send a single 64-bit Universal MIDI Packet as 32-bit words. This is often the most efficient way to send this type of message | . | SendMessageWords(timestamp, word0, word1, word2) | Send a single 96-bit Universal MIDI Packet as 32-bit words. This is often the most efficient way to send this type of message | . | SendMessageWords(timestamp, word0, word1, word2, word3) | Send a single 128-bit Universal MIDI Packet as 32-bit words. This is often the most efficient way to send this type of message | . | SendMessageBuffer(timestamp, buffer, byteOffset, byteLength) | Send a single Universal MIDI Packet as bytes from a buffer. The number of bytes sent must match the size read from the first 4 bits of the data starting at the specified offset, and must be laid out correctly with the first byte corresponding to the MSB of the first word of the UMP (the word which contains hte message type). If you want to manage a chunk of buffer memory, the IMemoryBuffer type is the acceptable WinRT approach, and is as close as you get to sending a pointer into a buffer. | . | AddEndpointProcessingPlugin(plugin) | Add an endpoint processing plugin to this connection | . | RemoveEndpointProcessingPlugin(id) | Remove an endpoint processing plugin | . Tip: In all the functions which accept a timestamp to schedule the message, you can send a timestamp of 0 (zero) to bypass the scheduler and send the message immediately. Otherwise, the provided timestamp is treated as an absolute time for when the message should be sent from the service. Note that the service-based scheduler (currently based on a std::priority_queue) gets less efficient when there are thousands of messages in it, so it’s recommended that you not schedule too many messages at a time or too far out into the future. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html#functions" - },"18": { + },"23": { "doc": "MidiEndpointConnection", "title": "Events", "content": "| Event | Description | . | MessageReceived(source, args) | From IMidiMessageReceivedEventSource. This is the event for receiving MIDI Messages, one at a time. | . When processing the MessageReceived event, do so quickly. This event is synchronous. If you need to do long-running processing of incoming messages, add them to your own incoming queue structure and have them processed by another application thread. Note: Wire up event handlers and add message processing plugins prior to calling Open(). ", "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html#events", "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html#events" - },"19": { + },"24": { "doc": "MidiEndpointConnection", "title": "IDL", "content": "MidiEndpointConnection IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html#idl" - },"20": { + },"25": { "doc": "MidiEndpointConnection", "title": "Sample", "content": "Here’s an excerpt from the full “API client basics” sample. It shows sending and receiving messages using the two built-in loopback endpoints. For more information on the loopback endpoints, see diagnostics endpoints. using (var session = MidiSession.CreateSession(\"API Sample Session\")) { // get the endpoint Ids. Normally, you'd use enumeration functions to get this // for non-diagnostics endpoints. var endpointAId = MidiEndpointDeviceInformation.DiagnosticsLoopbackAEndpointId; var endpointBId = MidiEndpointDeviceInformation.DiagnosticsLoopbackBEndpointId; Console.WriteLine(\"Connecting to Sender UMP Endpoint: \" + endpointAId); Console.WriteLine(\"Connecting to Receiver UMP Endpoint: \" + endpointBId); var sendEndpoint = session.CreateEndpointConnection(endpointAId); var receiveEndpoint = session.CreateEndpointConnection(endpointBId); void MessageReceivedHandler(object sender, MidiMessageReceivedEventArgs args) { var ump = args.GetMessagePacket(); Console.WriteLine(); Console.WriteLine(\"Received UMP\"); Console.WriteLine(\"- Current Timestamp: \" + MidiClock.Now); Console.WriteLine(\"- UMP Timestamp: \" + ump.Timestamp); Console.WriteLine(\"- UMP Msg Type: \" + ump.MessageType); Console.WriteLine(\"- UMP Packet Type: \" + ump.PacketType); Console.WriteLine(\"- Message: \" + MidiMessageUtility.GetMessageFriendlyNameFromFirstWord(args.PeekFirstWord())); if (ump is MidiMessage32) { var ump32 = ump as MidiMessage32; if (ump32 != null) Console.WriteLine(\"- Word 0: 0x{0:X}\", ump32.Word0); } }; // wire up the event handler before opening the endpoint receiveEndpoint.MessageReceived += MessageReceivedHandler; Console.WriteLine(\"Opening endpoint connection\"); receiveEndpoint.Open(); sendEndpoint.Open(); Console.WriteLine(\"Creating MIDI 1.0 Channel Voice 32-bit UMP...\"); var ump32 = MidiMessageBuilder.BuildMidi1ChannelVoiceMessage( MidiClock.Now, // use current timestamp 5, // group 5 Midi1ChannelVoiceMessageStatus.NoteOn, // 9 3, // channel 3 120, // note 120 - hex 0x78 100); // velocity 100 hex 0x64 sendEndpoint.SendMessagePacket((IMidiUniversalPacket)ump32); // could also use the SendWords methods, etc. Console.WriteLine(\" ** Wait for the message to arrive, and then press enter to cleanup. ** \"); Console.ReadLine(); // you should unregister the event handler as well receiveEndpoint.MessageReceived -= MessageReceivedHandler; // not strictly necessary if the session is going out of scope or is in a using block session.DisconnectEndpointConnection(sendEndpoint.ConnectionId); session.DisconnectEndpointConnection(receiveEndpoint.ConnectionId); } . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html#sample", "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/MidiEndpointConnection.html#sample" - },"21": { + },"26": { "doc": "MidiEndpointDeviceInformation", "title": "MidiEndpointDeviceInformation", "content": "This class is a specialized equivalent of the DeviceInformation WinRT class. It handles requesting all of the additional properties necessary for MIDI devices, and also goes a step further to retrieve parent device information so that applications can display the endpoints and parent devices in context. We’ve heard from developers that we did not provide sufficient information about devices in the past, so we created this class and the associated properties to remedy that. We also heard that Async calls were a non-starter for most DAW applications, so everything in this class is synchronous. Note: the MidiEndpointDeviceWatcher is a better way to retrieve devices because you can then keep the watcher open in a background thread, and be notified of property changes, device add/remove, etc. When displaying endpoint devices to users, you’ll typically want to stick to the defaults: IncludeClientUmpNative | IncludeClientByteStreamNative. You do not want to show the Diagnostic Ping ever, and you typically will not want to show the system-wide Diagnostic Loopback singletons. Finally, you don’t want to show the Virtual Device Responder endpoints because those should be reserved only for the “device” application in app-to-app MIDI. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html" - },"22": { + },"27": { "doc": "MidiEndpointDeviceInformation", "title": "In-protocol discovered information", "content": "When a device is first enumerated by the MIDI Service, if it is a UMP-native device, we will attempt endpoint discover and protocol negotiation. During that, we request all endpoint information and all function block information. The received data is then cached in the device properties so that applications do not need to perform this process themselves. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#in-protocol-discovered-information", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#in-protocol-discovered-information" - },"23": { + },"28": { "doc": "MidiEndpointDeviceInformation", "title": "Properties", "content": "| Property | Source | Description | . | Id | Windows | The endpoint device interface id | . | ContainerId | Windows | The device container | . | DeviceInstanceId | Windows | The device instance id without the interface information | . | Name | Various | This is the name which should be displayed in any application. It calculates the correct name based on the hierarchy of possible names, including a user-specified name. Always respect the user’s choice here. | . | TransportSuppliedName | Transports | The name provided by the driver or the endpoint transport. | . | EndpointSuppliedName | MIDI 2.0 | The name provided by MIDI 2.0 endpoint information. This is discovered in-protocol. | . | UserSuppliedName | Configuration | The name provided by the user. | . | ProductInstanceId | MIDI 2.0 | Property of the same name discovered by MIDI 2.0 in-protocol endpoint information. | . | SpecificationVersionMajor | MIDI 2.0 | Discovered UMP version | . | SpecificationVersionMinor | MIDI 2.0 | Discovered UMP version | . | SupportsMidi10Protocol | MIDI 2.0 | Discovered protocol support | . | SupportsMidi20Protocol | MIDI 2.0 | Discovered protocol support | . | `ConfiguredToReceiveJRTimestamps | MIDI 2.0 | Note that JR timestamps are handled entirely in the service and are not sent back down to the client. | . | `ConfiguredToSendJRTimestamps | MIDI 2.0 | Note that JR timestamps are handled entirely in the service and are not sent back down to the client. | . | DeviceIdentitySystemExclusiveId | MIDI 2.0 | Device Identity information | . | DeviceIdentityDeviceFamilyLsb | MIDI 2.0 | Device Identity information | . | DeviceIdentityDeviceFamilyMsb | MIDI 2.0 | Device Identity information | . | DeviceIdentityDeviceFamilyModelNumberLsb | MIDI 2.0 | Device Identity information | . | DeviceIdentityDeviceFamilyModelNumberMsb | MIDI 2.0 | Device Identity information | . | DeviceIdentitySoftwareRevisionLevel | MIDI 2.0 | Device Identity information | . | TransportId | Windows | The Id of the transport abstraction that manages this endpoint | . | TransportMnemonic | Windows | A short abbreviation for the transport. This can be used as a transport identifier. | . | TransportSuppliedSerialNumber | Windows | iSerialNumber, when available in USB, and other ids from other transports. | . | ManufacturerName | Windows | The name of the manufacturer of the device, if available | . | SupportsMultiClient | Windows | True if this endpoint supports multi-client use | . | NativeDataFormat | Windows | Because the driver and service handle data format translation, it’s not immediately obvious if the device is natively UMP or natively Byte Stream. This property provides that information | . | GroupTerminalBlocks | Windows | A collection of Group Terminal Blocks. These are used only in USB. For MIDI 2.0 devices, Function Blocks are preferred. | . | HasStaticFunctionBlocks | MIDI 2.0 | True if the function blocks are static. That is, the groups never change. | . | FunctionBlockCount | MIDI 2.0 | The number of function blocks the endpoint has declared. Function blocks always start at index zero and go to FunctionBlockCount-1 | . | EndpointPurpose | Windows | The purpose of the endpoint. This is used primarily for filtering. | . | Description | Configuration | An endpoint description which is typically provided by the user | . | LargeImagePath | Configuration | The path to a png or jpg image that represents this endpoint. Typically user-supplied. | . | SmallImagePath | Configuration | The path to a png or jpg image that represents this endpoint. Typically user-supplied. | . | RequiresNoteOffTranslation | Configuration | True if the endpoint requires internal translation of Note On with zero velocity (in the case of MIDI 1.0) to a Note Off message. Typically user-supplied. | . | RecommendedCCAutomationIntervalMS | Configuration | Number of milliseconds between automation value changes. This is usually only for old and slow MIDI 1.0 devices that are prone to data flooding. User-supplied. | . | Properties | Windows | A collection of all the raw properties. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#properties" - },"24": { + },"29": { "doc": "MidiEndpointDeviceInformation", "title": "Static Properties", "content": "| Static Property | Description | . | DiagnosticsLoopbackAEndpointId | Endpoint Id for the diagnostic loopback used for development and support purposes. | . | DiagnosticsLoopbackBEndpointId | Endpoint Id for the diagnostic loopback used for development and support purposes. | . | EndpointInterfaceClass | The class GUID which appears at the end of the Endpoint Ids | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#static-properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#static-properties" - },"25": { + },"30": { "doc": "MidiEndpointDeviceInformation", "title": "Functions", "content": "| Function | Description | . | GetParentDeviceInformation() | Finds and then retrieves the parent DeviceInformation type with appropriate properties. | . | GetContainerInformation() | Gets the device container information and returns its DeviceInformation with appropriate properties | . | UpdateFromDeviceInformation(deviceInformation) | For use by any watcher which must update this object | . | UpdateFromDeviceInformationUpdate(deviceInformationUpdate) | For use by any watcher which must update this object | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#functions" - },"26": { + },"31": { "doc": "MidiEndpointDeviceInformation", "title": "Static Functions", "content": "| Static Function | Description | . | CreateFromId(id) | Creates a new MidiEndpointDeviceInformation object from the specified id | . | FindAll() | Searches for all endpoint devices and returns a list in the default sort order | . | FindAll(sortOrder) | Searches for all endpoint devices and returns a list in the specified sort order | . | FindAll(sortOrder, endpointFilter) | Searches for all endpoint devices which match the filter, and returns a list in the specified sort order. | . | DeviceMatchesFilter(deviceInformation, endpointFilter) | A helper function to compare a device against the filter. | . | GetAdditionalPropertiesList() | This returns the list of properties which must be requested during enumeration. Typically not needed for applications, as the watcher calls this function | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#static-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#static-functions" - },"27": { + },"32": { "doc": "MidiEndpointDeviceInformation", "title": "IDL", "content": "MidiEndpointDeviceInformation IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#idl" - },"28": { + },"33": { "doc": "MidiEndpointDeviceInformation", "title": "Sample", "content": "What follows is an excerpt of the larger C++/WinRT enumeration sample. #include \"pch.h\" #include <iostream> using namespace winrt::Windows::Devices::Midi2; // API int main() { winrt::init_apartment(); bool includeDiagnosticsEndpoints = true; // enumerate all endpoints. A normal application should enumerate only // IncludeClientByteStreamNative | IncludeClientUmpNative auto endpoints = MidiEndpointDeviceInformation::FindAll( MidiEndpointDeviceInformationSortOrder::Name, MidiEndpointDeviceInformationFilter::IncludeClientByteStreamNative | MidiEndpointDeviceInformationFilter::IncludeClientUmpNative | MidiEndpointDeviceInformationFilter::IncludeDiagnosticLoopback | MidiEndpointDeviceInformationFilter::IncludeVirtualDeviceResponder ); std::cout << endpoints.Size() << \" endpoints returned\" << std::endl << std::endl; for (auto const& endpoint : endpoints) { std::cout << \"Identification\" << std::endl; std::cout << \"- Name: \" << winrt::to_string(endpoint.Name()) << std::endl; std::cout << \"- Id: \" << winrt::to_string(endpoint.Id()) << std::endl; std::cout << std::endl << \"Endpoint Metadata\" << std::endl; std::cout << \"- Product Instance Id: \" << winrt::to_string(endpoint.ProductInstanceId()) << std::endl; std::cout << \"- Endpoint-supplied Name: \" << winrt::to_string(endpoint.EndpointSuppliedName()) << std::endl; std::cout << std::endl << \"User-supplied Metadata\" << std::endl; std::cout << \"- User-supplied Name: \" << winrt::to_string(endpoint.UserSuppliedName()) << std::endl; std::cout << \"- Description: \" << winrt::to_string(endpoint.Description()) << std::endl; std::cout << \"- Small Image Path: \" << winrt::to_string(endpoint.SmallImagePath()) << std::endl; std::cout << \"- Large Image Path: \" << winrt::to_string(endpoint.LargeImagePath()) << std::endl; // ... } } . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#sample", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformation.html#sample" - },"29": { + },"34": { "doc": "MidiEndpointDeviceInformationUpdateEventArgs", "title": "MidiEndpointDeviceInformationUpdateEventArgs", "content": "Represents a notification that endpoint properties have been updated . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.html" - },"30": { + },"35": { "doc": "MidiEndpointDeviceInformationUpdateEventArgs", "title": "Functions", - "content": "| Property | Description | ————— | ———– | Id | Id of the endpoint which has been updated | UpdatedName | True if the name properties have been updated | UpdatedEndpointInformation | True if the in-protocol endpoint information has been updated | UpdatedDeviceIdentity | True if the in-protocol device identity information has been updated | UpdatedStreamConfiguration | True if protocol negotiation changed configuration of the endpoint | UpdatedFunctionBlocks | True if any function blocks have been updated | UpdatedUserMetadata | True if any user-supplied metadata fields have been updated | UpdatedAdditionalCapabilities | True if the additional capabilities have been updated | DeviceInformationUpdate | The source Windows.Devices.Enumeration.DeviceInformationUpdate` object. | . If none of the UpdatedXX properties are true, then other properties have been updated. ", + "content": "| Property | Description | . | Id | Id of the endpoint which has been updated | . | UpdatedName | True if the name properties have been updated | . | UpdatedEndpointInformation | True if the in-protocol endpoint information has been updated | . | UpdatedDeviceIdentity | True if the in-protocol device identity information has been updated | . | UpdatedStreamConfiguration | True if protocol negotiation changed configuration of the endpoint | . | UpdatedFunctionBlocks | True if any function blocks have been updated | . | UpdatedUserMetadata | True if any user-supplied metadata fields have been updated | . | UpdatedAdditionalCapabilities | True if the additional capabilities have been updated | . | DeviceInformationUpdate | The source Windows.Devices.Enumeration.DeviceInformationUpdate object. | . If none of the UpdatedXX properties are true, then other properties have been updated. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.html#functions" - },"31": { + },"36": { "doc": "MidiEndpointDeviceInformationUpdateEventArgs", "title": "IDL", "content": "MidiEndpointDeviceInformationUpdateEventArgs IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.html#idl" - },"32": { + },"37": { "doc": "MidiEndpointDeviceWatcher", "title": "MidiEndpointDeviceWatcher", "content": "WinRT provides a Windows.Devices.Enumeration namespace with a DeviceWatcher class. That class is generic to any type of device, and so requires additional work to use with MIDI devices. Because of that, we’ve wrapped that functionality in the MidiEndpointDeviceWatcher class and the related MidiEndpointDeviceInformation class. This is the class applications should use when they want to find devices, and also be notified when devices are added or removed, or when properties like function blocks or device names change. Create a MidiEndpointDeviceWatcher on a background thread, and use the internal list of Endpoints as your source of record for device properties. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html" - },"33": { + },"38": { "doc": "MidiEndpointDeviceWatcher", "title": "Properties", "content": "| Function | Description | . | Status | The current status. See the Windows.Devices.Enumeration.DeviceWatcherStatus enumeration | . | EnumeratedEndpointDevices | The list of enumerated devices. Provided here for convenience so applications do not need to keep their own list of MIDI devices. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html#properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html#properties" - },"34": { + },"39": { "doc": "MidiEndpointDeviceWatcher", "title": "Functions", "content": "| Function | Description | . | Start() | Begin device enumeration. Wire up event handlers before calling this function. | . | Stop() | Stop device enumeration. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html#functions" - },"35": { + },"40": { "doc": "MidiEndpointDeviceWatcher", "title": "Static Functions", "content": "| Static Function | Description | . | CreateWatcher(endpointFilter) | Create a watcher which will enumerate devices based on the provided filter | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html#static-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html#static-functions" - },"36": { + },"41": { "doc": "MidiEndpointDeviceWatcher", "title": "Events", "content": "| Event | Description | . | Added(source, deviceInformation) | A new endpoint has been added. | . | Removed(source, deviceInformationUpdate) | An endpoint has been removed. | . | Updated(source endpointDeviceInformationUpdate) | Properties of an endpoint have been updated. This is much more common than it was with the older MIDI 1.0 APIs due to both in-protocol endpoint information, and user configuration. | . | EnumerationCompleted(source) | Raised when the initial device enumeration has been completed. Devices may still be added or removed after this event, but use this to decide when you have enough information to display an initial list. | . | Stopped(source) | Enumeration has been stopped. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html#events", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html#events" - },"37": { + },"42": { "doc": "MidiEndpointDeviceWatcher", "title": "IDL", "content": "MidiEndpointDeviceWatcher IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html#idl" - },"38": { + },"43": { "doc": "MidiFunctionBlock", "title": "MidiFunctionBlock", "content": "The original MIDI 2.0 USB specification includes the concept of a Group Terminal Block. After ratification of that specification, it was found that Group Terminal Blocks were insufficient for two main reasons: . | Group Terminal Blocks are USB-specific, and so are not available on other transports like Network or Virtual. | Group Terminal Blocks are static, defined in USB descriptors, and so cannot change during runtime. | . Group Terminal Blocks are still available, but function blocks are the preferred approach for defining capapbilities of a device. When both are available, you should use the function block information. A function block represents a function of a MIDI 2.0 device. A function block may span one or more groups, and if not a static function block, those group numbers may change during operation. For example, a Tone Generator function of a device may need 64 channels to represent its multi-timbral nature. One way it can accomplish this is to declare a function block which spans 4 groups, each of which has 16 channels of data (16x4 = 64). Function blocks also represent the valid groups for communication with an endpoint. If an endpoint declares 4 function blocks, which together cover only group indexes 0-5, and all of those blocks are marked active, only those groups should be available to users of an application. This helps cut down on clutter caused by always displaying 16 groups. Function blocks have names which should be displayed to the user along with the group numbers. In the end, the actual addressible entity is the endpoint stream with the group number in the Universal MIDI Packet. But the function block provides context for that group number. Per the specification, function blocks can span more than one group, and can overlap with each other so that different functions can be available on the same group. Function blocks are used in the Windwos MIDI Services API in three ways: . | A property of a MidiEndpointDeviceInformation object, representing function blocks discovered through endpoint discovery. These function blocks are read-only. | The return value of the AsEquivalentFunctionBlock method of the GroupTerminalBlock class. This is a convenience function. These function blocks are read-only | Provided by the application as part of the device definition for a virtual device in app-to-app MIDI. These function blocks are editable before adding them to the device definition. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/metadata/MidiFunctionBlock.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/metadata/MidiFunctionBlock.html" - },"39": { + },"44": { "doc": "MidiFunctionBlock", "title": "Properties", "content": "Most properties are 1:1 with the MIDI 2.0 UMP specification section on function blocks. We assemble the name for you and map values to enumerations when possible. | Property | Description | . | IsReadOnly | True if this function block should be treated as read-only. If you attempt to assign a value to a property in a read-only function block, the assignment will silently fail. | . | Number | The index of the block 0-31. We use “number” here to be consistent with the specification | . | Name | The assembled name of the function block | . | IsActive | True if this block is active | . | Direction | The direction of the block from the block’s point of view. | . | UIHint | A hint which tells you how this block should be treated in a user interface. This should be considered a “soft filter” for display, not a mechanism to keep blocks completely hidden from a user. | . | Midi10Connection | How to treat this block if it is a MIDI 1.0 connection | . | FirstGroupIndex | Zero-based index of the first group spanned by this block. | . | GroupCount | The number of groups spanned. | . | MidiCIMessageVersionFormat | MIDI CI version format value | . | MaxSystemExclusive8Streams | The maximum number of System Exclusive 8 streams allowed. Please refer to the UMP specification for how to treat this value. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/metadata/MidiFunctionBlock.html#properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/metadata/MidiFunctionBlock.html#properties" - },"40": { + },"45": { "doc": "MidiFunctionBlock", "title": "Functions", "content": "| Function | Description | . | MidiFunctionBlock() | Construct an empty function block | . | IncludesGroup(group) | Helper function which returns true if this function exists on the supplied group | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/metadata/MidiFunctionBlock.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/metadata/MidiFunctionBlock.html#functions" - },"41": { + },"46": { "doc": "MidiFunctionBlock", "title": "IDL", "content": "MidiFunctionBlock IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/metadata/MidiFunctionBlock.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/metadata/MidiFunctionBlock.html#idl" - },"42": { + },"47": { "doc": "MidiGroup", "title": "MidiGroup", "content": "The MidiGroup class is used to provide formatting and data validation for UMP (Universal MIDI Packet) groups. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiGroup.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiGroup.html" - },"43": { + },"48": { "doc": "MidiGroup", "title": "Properties", "content": "| Property | Description | . | Index | The data value, or group Index (0-15) | . | NumberForDisplay | The number that should be displayed in any UI. (1-16) | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiGroup.html#properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiGroup.html#properties" - },"44": { + },"49": { "doc": "MidiGroup", "title": "Static Properties", "content": "| Static Property | Description | . | LabelShort | Returns the localized abbreviation. For example, “Gr” in English. | . | LabelFull | Returns the localized full name. For example, “Group” in English. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiGroup.html#static-properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiGroup.html#static-properties" - },"45": { + },"50": { "doc": "MidiGroup", "title": "Functions", "content": "| Function | Description | . | MidiGroup() | Constructs an empty MidiGroup | . | MidiGroup(index) | Constructs a MidiGroup with the specified index | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiGroup.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiGroup.html#functions" - },"46": { + },"51": { "doc": "MidiGroup", "title": "Static Functions", "content": "| Static Function | Description | . | IsValidGroupIndex(index) | Verifies that the provided index is valid (between 0 and 15) | . MidiGroup IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiGroup.html#static-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiGroup.html#static-functions" - },"47": { + },"52": { "doc": "MidiGroupEndpointListener", "title": "MidiGroupEndpointListener", - "content": "(In progress) . ", + "content": "This class acts as a filter. Incoming messages with the specified group will be provided through the MessageReceived event. Other messages will be ignored. For a MIDI 1.0 device, where the ports (virtual MIDI cables) have been mapped to UMP groups, this class can provide the equivalent of a MIDI 1.0 port to an application, ignoring all other inputs and operating only on the included groups. In addition to the properties and methods in IMidiEndpointMessageProcessingPlugin, and the MessageReceived event from IMidiMessageReceivedEventSource the class provides the following: . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.html" - },"48": { + },"53": { + "doc": "MidiGroupEndpointListener", + "title": "Properties", + "content": "| Property | Description | . | IncludeGroups | The list of MidiGroup numbers that this listener will listen to. | . | PreventCallingFurtherListeners | True if this plugin should prevent further listeners from processing a message that is in-scope for this processor. | . | PreventFiringMainMessageReceivedEvent | True if this plugin should prevent the endpoint’s MessageReceived event from firing if the message was in-scope for this plugin. | . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.html#properties", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.html#properties" + },"54": { + "doc": "MidiGroupEndpointListener", + "title": "Functions", + "content": "| Property | Description | . | MidiGroupEndpointListener() | Construct a new instance of this type | . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.html#functions", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.html#functions" + },"55": { "doc": "MidiGroupEndpointListener", "title": "IDL", "content": "MidiGroupEndpointListener IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.html#idl" - },"49": { + },"56": { "doc": "MidiGroupTerminalBlock", "title": "MidiGroupTerminalBlock", "content": "A Group Terminal Block is a USB-only feature used to describe the groups on a device. When available, Function Blocks are the preferred mechanism for finding active groups, names, and more, meaning that the Group Terminal Block can typically be ignored in those cases. For more context, please see the documentation for the MidiFunctionBlock type. Note: In Windows MIDI Services, we translate MIDI 1.0 device “ports” into individual Group Terminal Blocks. Each virtual cable number in the stream, which used to become a separate input or output port, now maps to a group number. For example, a 5 port MIDI 1.0 device will now show up as a single endpoint with 5 Group Terminal Blocks each spanning a single group. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/metadata/MidiGroupTerminalBlock.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/metadata/MidiGroupTerminalBlock.html" - },"50": { + },"57": { "doc": "MidiGroupTerminalBlock", "title": "Properties", "content": "| Property | Description | . | Number | Block number | . | Name | Name provided by USB. In the case of MIDI 1.0 devices, when available, this is the iJack string | . | Direction | Direction of the block, from the block’s point of view | . | Protocol | Information about the protocol in use. Note that the Jitter Reduction values here should be ignored. Jitter reduction timestamp handling is negotiated through protocol negotiation, and is entirely handled by the service | . | FirstGroupIndex | The index of the first group spanned by this block | . | GroupCount | The number of groups spanned | . | MaxDeviceInputBandwidthIn4KBitsPerSecondUnits | Please see the USB MIDI 2.0 specification for the actual value for this field. | . | MaxDeviceOutputBandwidthIn4KBitsPerSecondUnits | Please see the USB MIDI 2.0 specification for the actual value for this field. | . | CalculatedMaxDeviceInputBandwidthBitsPerSecond | Bits-per-second calculated value for the MaxDeviceInputBandwidthIn4KBitsPerSecondUnits property | . | CalculatedMaxDeviceOutputBandwidthBitsPerSecond | Bits-per-second calculated value for the MaxDeviceOutputBandwidthIn4KBitsPerSecondUnits property | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/metadata/MidiGroupTerminalBlock.html#properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/metadata/MidiGroupTerminalBlock.html#properties" - },"51": { + },"58": { "doc": "MidiGroupTerminalBlock", "title": "Functions", "content": "| Function | Description | . | IncludesGroup(group) | Helper function which returns true if this function exists on the supplied group | . | AsEquivalentFunctionBlock() | Helper function which returns a MidiFunctionBlock that is approximately equivalent to this MidiGroupTerminalBlock. This is to enable applications to be able to deal with only a single type of block when showing the metadata | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/metadata/MidiGroupTerminalBlock.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/metadata/MidiGroupTerminalBlock.html#functions" - },"52": { + },"59": { "doc": "MidiGroupTerminalBlock", "title": "IDL", "content": "MidiGroupTerminalBlock IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/metadata/MidiGroupTerminalBlock.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/metadata/MidiGroupTerminalBlock.html#idl" - },"53": { + },"60": { "doc": "MidiMessage128", "title": "MidiMessage128", - "content": "MidiMessage128 is used for some data messages as well as important “Type F” stream metadata messages. Includes all functions and properties in IMidiUniversalPacket, as well as: . | Property | Description | . | Word0 | First 32-bit MIDI word | . | Word1 | Second 32-bit MIDI word | . | Word2 | Third 32-bit MIDI word | . | Word3 | Fourth 32-bit MIDI word | . | Function | Description | . | MidiMessage128() | Default constructor | . | MidiMessage128(timestamp, word0, word1, word2, word3) | Construct a new message with a timestamp and all 32 bit MIDI words | . MidiMessage128 IDL . ", + "content": "MidiMessage128 is used for some data messages as well as important “Type F” stream metadata messages. Includes all functions and properties in IMidiUniversalPacket, as well as: . | Property | Description | . | Word0 | First 32-bit MIDI word | . | Word1 | Second 32-bit MIDI word | . | Word2 | Third 32-bit MIDI word | . | Word3 | Fourth 32-bit MIDI word | . | Function | Description | . | MidiMessage128() | Default constructor | . | MidiMessage128(timestamp, word0, word1, word2, word3) | Construct a new message with a timestamp and all 32 bit MIDI words | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage128.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessage128.html" - },"54": { + },"61": { + "doc": "MidiMessage128", + "title": "IDL", + "content": "MidiMessage128 IDL . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage128.html#idl", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessage128.html#idl" + },"62": { "doc": "MidiMessage32", "title": "MidiMessage32", - "content": "MidiMessage32 is used for short messages such as utility messages and MIDI 1.0 messages in UMP format. Includes all functions and properties in IMidiUniversalPacket, as well as: . | Property | Description | . | Word0 | First 32-bit MIDI word | . | Function | Description | . | MidiMessage32() | Default constructor | . | MidiMessage32(timestamp, word0) | Construct a new message with a timestamp and 32 bit MIDI word | . MidiMessage32 IDL . ", + "content": "MidiMessage32 is used for short messages such as utility messages and MIDI 1.0 messages in UMP format. Includes all functions and properties in IMidiUniversalPacket, as well as: . | Property | Description | . | Word0 | First 32-bit MIDI word | . | Function | Description | . | MidiMessage32() | Default constructor | . | MidiMessage32(timestamp, word0) | Construct a new message with a timestamp and 32 bit MIDI word | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage32.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessage32.html" - },"55": { + },"63": { + "doc": "MidiMessage32", + "title": "IDL", + "content": "MidiMessage32 IDL . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage32.html#idl", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessage32.html#idl" + },"64": { "doc": "MidiMessage64", "title": "MidiMessage64", - "content": "MidiMessage64 is used for some data messages and for MIDI 2.0 Channel Voice messages. Includes all functions and properties in IMidiUniversalPacket, as well as: . | Property | Description | . | Word0 | First 32-bit MIDI word | . | Word1 | Second 32-bit MIDI word | . | Function | Description | . | MidiMessage64() | Default constructor | . | MidiMessage64(timestamp, word0, word1) | Construct a new message with a timestamp and all 32 bit MIDI words | . MidiMessage64 IDL . ", + "content": "MidiMessage64 is used for some data messages and for MIDI 2.0 Channel Voice messages. Includes all functions and properties in IMidiUniversalPacket, as well as: . | Property | Description | . | Word0 | First 32-bit MIDI word | . | Word1 | Second 32-bit MIDI word | . | Function | Description | . | MidiMessage64() | Default constructor | . | MidiMessage64(timestamp, word0, word1) | Construct a new message with a timestamp and all 32 bit MIDI words | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage64.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessage64.html" - },"56": { + },"65": { + "doc": "MidiMessage64", + "title": "IDL", + "content": "MidiMessage64 IDL . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage64.html#idl", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessage64.html#idl" + },"66": { "doc": "MidiMessage96", "title": "MidiMessage96", - "content": "MidiMessage96 is currently unused in the MIDI 2.0 UMP specification. Includes all functions and properties in IMidiUniversalPacket, as well as: . | Property | Description | . | Word0 | First 32-bit MIDI word | . | Word1 | Second 32-bit MIDI word | . | Word2 | Third 32-bit MIDI word | . | Function | Description | . | MidiMessage96() | Default constructor | . | MidiMessage96(timestamp, word0, word1, word2) | Construct a new message with a timestamp and all 32 bit MIDI words | . MidiMessage96 IDL . ", + "content": "MidiMessage96 is currently unused in the MIDI 2.0 UMP specification. Includes all functions and properties in IMidiUniversalPacket, as well as: . | Property | Description | . | Word0 | First 32-bit MIDI word | . | Word1 | Second 32-bit MIDI word | . | Word2 | Third 32-bit MIDI word | . | Function | Description | . | MidiMessage96() | Default constructor | . | MidiMessage96(timestamp, word0, word1, word2) | Construct a new message with a timestamp and all 32 bit MIDI words | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage96.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessage96.html" - },"57": { + },"67": { + "doc": "MidiMessage96", + "title": "IDL", + "content": "MidiMessage96 IDL . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage96.html#idl", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessage96.html#idl" + },"68": { "doc": "MidiMessageBuilder", "title": "MidiMessageBuilder", "content": "(In progress) . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageBuilder.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageBuilder.html" - },"58": { + },"69": { "doc": "MidiMessageBuilder", "title": "Functions", "content": "| Function | Description | . |   |   | . |   |   | . |   |   | . |   |   | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageBuilder.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageBuilder.html#functions" - },"59": { + },"70": { "doc": "MidiMessageBuilder", "title": "IDL", "content": "MidiMessageBuilder IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageBuilder.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageBuilder.html#idl" - },"60": { + },"71": { "doc": "MidiMessageConverter", "title": "MidiMessageConverter", "content": "(In progress) . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageConverter.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageConverter.html" - },"61": { + },"72": { "doc": "MidiMessageConverter", "title": "Functions", "content": "| Function | Description | . |   |   | . |   |   | . |   |   | . |   |   | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageConverter.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageConverter.html#functions" - },"62": { + },"73": { "doc": "MidiMessageConverter", "title": "IDL", "content": "MidiMessageConverter IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageConverter.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageConverter.html#idl" - },"63": { + },"74": { "doc": "MidiMessageReceivedEventArgs", "title": "MidiMessageReceivedEventArgs", "content": "This is the main class to use when receving MIDI data from a message source such as a connection or a message processing plugin. Note: Do not keep a copy of the MidiMessageReceivedEventArgs class, as the data it points to is guaranteed to exist for only the duration of the event handler call for which this instance was an argument. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/MidiMessageReceivedEventArgs.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/MidiMessageReceivedEventArgs.html" - },"64": { + },"75": { "doc": "MidiMessageReceivedEventArgs", "title": "Properties", "content": "| Property | Description | . | Timestamp | The 64-bit MIDI Clock timestamp set by the service when this message was received | . | PacketType | Type of Universal MIDI Packet. This value can be cast to get the number of valid words in the data. You can use this value to determine which of the FillMessageXX methods would be appropriate to call. For example, if the value is MidiPacketType.UniversalMidiPacket64 you would call FillMessage64 | . | MessageType | The type of Universal MIDI Packet Message. This comes from the first 4 bits of the data. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/MidiMessageReceivedEventArgs.html#properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/MidiMessageReceivedEventArgs.html#properties" - },"65": { + },"76": { "doc": "MidiMessageReceivedEventArgs", "title": "Functions", "content": "| Function | Description | . | PeekFirstWord() | Returns the first word of the message data without removing it. | . | GetMessagePacket() | Returns an IMidiUniversalPacket runtime class representing the data. This requires an allocation. | . | FillWords(word0, word1, word2, word3) | Puts the data in the supplied words and returns the number of valid words to read. If the return value is 2, for example, then only word0 and word1 contain valid data. | . | FillMessageStruct(message) | Fills the provided lightweight structure with the message data. Returns the number of valid words in the updated struct. | . | FillMessage32(message) | Adds the data to the provided MidiMessage32 runtimeclass. The reference behavior is projection-dependent. Returns true if the provided type matches the expected packet type and the data has been written. | . | FillMessage64(message) | Adds the data to the provided MidiMessage64 runtimeclass. The reference behavior is projection-dependent. Returns true if the provided type matches the expected packet type and the data has been written. | . | FillMessage96(message) | Adds the data to the provided MidiMessage96 runtimeclass. The reference behavior is projection-dependent. Returns true if the provided type matches the expected packet type and the data has been written. | . | FillMessage128(message) | Adds the data to the provided MidiMessage128 runtimeclass. The reference behavior is projection-dependent. Returns true if the provided type matches the expected packet type and the data has been written. | . | FillWordArray(words, startIndex) | Writes the data starting at the zero-based startIndex. Some projections pass a copy of all the data, so this may not always be an efficient approach. Returns the number of words written. | . | FillByteArray(bytes, startIndex) | Writes the data starting at the zero-based startIndex. Some projections pass a copy of all the data, so this may not always be an efficient approach. Returns the number of bytes written. | . | FillBuffer(buffer, byteOffset) | Writes the data to the buffer starting at byteOffset. Returns the number of bytes written. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/MidiMessageReceivedEventArgs.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/MidiMessageReceivedEventArgs.html#functions" - },"66": { + },"77": { "doc": "MidiMessageReceivedEventArgs", "title": "IDL", "content": "MidiMessageReceivedEventArgs IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/MidiMessageReceivedEventArgs.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/MidiMessageReceivedEventArgs.html#idl" - },"67": { + },"78": { "doc": "MidiMessageStruct", "title": "MidiMessageStruct", - "content": "MidiMessageStruct is provided for cases where the API consumer wants to have a fixed value type they can use to send and receive messages. In the case of receiving messages, a function which fills the struct will typically return a count of valid words. The MidiMessageStruct struct type is simpler than the other runtime class types and may therefore perform better in some projections and for some uses. Note that this type does not include the timestamp field. | Field | Description | . | Word0 | First 32-bit MIDI word | . | Word1 | Second 32-bit MIDI word | . | Word2 | Third 32-bit MIDI word | . | Word3 | Fourth 32-bit MIDI word | . MidiMessageStruct IDL . ", + "content": "MidiMessageStruct is provided for cases where the API consumer wants to have a fixed value type they can use to send and receive messages. In the case of receiving messages, a function which fills the struct will typically return a count of valid words. The MidiMessageStruct struct type is simpler than the other runtime class types and may therefore perform better in some projections and for some uses. Note that this type does not include the timestamp field. | Field | Description | . | Word0 | First 32-bit MIDI word | . | Word1 | Second 32-bit MIDI word | . | Word2 | Third 32-bit MIDI word | . | Word3 | Fourth 32-bit MIDI word | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageStruct.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessageStruct.html" - },"68": { + },"79": { + "doc": "MidiMessageStruct", + "title": "IDL", + "content": "MidiMessageStruct IDL . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageStruct.html#idl", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessageStruct.html#idl" + },"80": { "doc": "MidiMessageTranslator", "title": "MidiMessageTranslator", "content": "(In progress) . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageTranslator.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageTranslator.html" - },"69": { + },"81": { "doc": "MidiMessageTranslator", "title": "Functions", "content": "| Function | Description | . |   |   | . |   |   | . |   |   | . |   |   | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageTranslator.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageTranslator.html#functions" - },"70": { + },"82": { "doc": "MidiMessageTranslator", "title": "IDL", "content": "MidiMessageTranslator IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageTranslator.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageTranslator.html#idl" - },"71": { + },"83": { "doc": "MidiMessageTypeEndpointListener", "title": "MidiMessageTypeEndpointListener", - "content": "(In progress) . ", + "content": "This class acts as a filter. Incoming messages with the specified message type will be provided through the MessageReceived event. Other messages will be ignored. In this way, the listener can be set up to, for example, only pay attention to MIDI 2.0 Channel Voice messages, leaving stream messages and System Exclusive by the wayside. In addition to the properties and methods in IMidiEndpointMessageProcessingPlugin, and the MessageReceived event from IMidiMessageReceivedEventSource the class provides the following: . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.html" - },"72": { + },"84": { + "doc": "MidiMessageTypeEndpointListener", + "title": "Properties", + "content": "| Property | Description | . | IncludeMessageTypes | The list of MidiMessageType values that this listener will listen to. | . | PreventCallingFurtherListeners | True if this plugin should prevent further listeners from processing a message that is in-scope for this processor. | . | PreventFiringMainMessageReceivedEvent | True if this plugin should prevent the endpoint’s MessageReceived event from firing if the message was in-scope for this plugin. | . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.html#properties", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.html#properties" + },"85": { + "doc": "MidiMessageTypeEndpointListener", + "title": "Functions", + "content": "| Property | Description | . | MidiGroupEndpointListener() | Construct a new instance of this type | . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.html#functions", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.html#functions" + },"86": { "doc": "MidiMessageTypeEndpointListener", "title": "IDL", "content": "MidiMessageTypeEndpointListener IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.html#idl" - },"73": { + },"87": { "doc": "MidiMessageType", "title": "MidiMessageType Enumeration", - "content": "The values correspond directly to the “mt” field in the MIDI UMP packet and may be cast as such if trimmed to 4 bits and shifted into place. | Property | Value | Description | . | UtilityMessage32 | 0x0 | 32-bit utility message | . | SystemCommon32 | 0x1 | 32-bit system common message | . | Midi1ChannelVoice32 | 0x2 | 32-bit MIDI 1.0 channel voice message | . | DataMessage64 | 0x3 | 64-bit data message (including MIDI 1.0 System Exclusive) | . | Midi2ChannelVoice64 | 0x4 | 64-bit MIDI 2.0 channel voice message | . | DataMessage128 | 0x5 | 128-bit Data Message | . | FutureReserved632 | 0x6 | Reserved for future use by the MIDI standards bodies | . | FutureReserved732 | 0x7 | Reserved for future use by the MIDI standards bodies | . | FutureReserved864 | 0x8 | Reserved for future use by the MIDI standards bodies | . | FutureReserved964 | 0x9 | Reserved for future use by the MIDI standards bodies | . | FutureReservedA64 | 0xA | Reserved for future use by the MIDI standards bodies | . | FutureReservedB96 | 0xB | Reserved for future use by the MIDI standards bodies | . | FutureReservedC96 | 0xC | Reserved for future use by the MIDI standards bodies | . | FlexData128 | 0xD | 128-bit Flex Data message including song file data messages | . | FutureReservedE128 | 0xE | Reserved for future use by the MIDI standards bodies | . | Stream128 | 0xF | 128-bit stream message, including endpoint discovery and function block messages | . MidiMessageType IDL . ", + "content": "The values correspond directly to the “mt” field in the MIDI UMP packet and may be cast as such if trimmed to 4 bits and shifted into place. | Property | Value | Description | . | UtilityMessage32 | 0x0 | 32-bit utility message | . | SystemCommon32 | 0x1 | 32-bit system common message | . | Midi1ChannelVoice32 | 0x2 | 32-bit MIDI 1.0 channel voice message | . | DataMessage64 | 0x3 | 64-bit data message (including MIDI 1.0 System Exclusive) | . | Midi2ChannelVoice64 | 0x4 | 64-bit MIDI 2.0 channel voice message | . | DataMessage128 | 0x5 | 128-bit Data Message | . | FutureReserved632 | 0x6 | Reserved for future use by the MIDI standards bodies | . | FutureReserved732 | 0x7 | Reserved for future use by the MIDI standards bodies | . | FutureReserved864 | 0x8 | Reserved for future use by the MIDI standards bodies | . | FutureReserved964 | 0x9 | Reserved for future use by the MIDI standards bodies | . | FutureReservedA64 | 0xA | Reserved for future use by the MIDI standards bodies | . | FutureReservedB96 | 0xB | Reserved for future use by the MIDI standards bodies | . | FutureReservedC96 | 0xC | Reserved for future use by the MIDI standards bodies | . | FlexData128 | 0xD | 128-bit Flex Data message including song file data messages | . | FutureReservedE128 | 0xE | Reserved for future use by the MIDI standards bodies | . | Stream128 | 0xF | 128-bit stream message, including endpoint discovery and function block messages | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.html#midimessagetype-enumeration", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.html#midimessagetype-enumeration" - },"74": { + },"88": { + "doc": "MidiMessageType", + "title": "IDL", + "content": "MidiMessageType IDL . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.html#idl", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.html#idl" + },"89": { "doc": "MidiMessageType", "title": "MidiMessageType", "content": " ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.html" - },"75": { + },"90": { "doc": "MidiMessageUtility", "title": "MidiMessageUtility", "content": "This class contains a number of static helper functions for reading information from Universal MIDI Packets, and also manipulating that information. In most cases, the calling application needs to do some validation before calling functions which return specific fields. If, for example, the application asks for the Flex Data Status, but doesn’t provide a valid Flex Data message, the function will happily return whatever other data is in the position of that field. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html" - },"76": { + },"91": { "doc": "MidiMessageUtility", "title": "Validation Functions", "content": "| Function | Description | . | ValidateMessage32MessageType(word0) | Validate that the message type field in the word is for a 32-bit UMP | . | ValidateMessage64MessageType(word0) | Validate that the message type field in the word is for a 64-bit UMP | . | ValidateMessage96MessageType(word0) | Validate that the message type field in the word is for a 96-bit UMP | . | ValidateMessage128MessageType(word0) | Validate that the message type field in the word is for a 128-bit UMP | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html#validation-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html#validation-functions" - },"77": { + },"92": { "doc": "MidiMessageUtility", "title": "Informational Functions", "content": "| Function | Description | . | MessageTypeHasGroupField(messageType) | Returns true if the message type is known to be one which contains a group field. Valid only for message types known at the type the API was written. | . | MessageTypeHasChannelField(messageType) | Returns true if the message type is known to be one which contains a channel field. Valid only for message types known at the type the API was written. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html#informational-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html#informational-functions" - },"78": { + },"93": { "doc": "MidiMessageUtility", "title": "Field Access Functions", "content": "| Function | Description | . | GetMessageTypeFromMessageFirstWord(word0) | Returns the MidiMessageType for the message | . | GetPacketTypeFromMessageFirstWord(word0) | Returns the MidiPacketType for the message | . | GetGroupFromMessageFirstWord(word0) | Returns the MidiGroup for the message. First check to see if the message type has a group field. | . | GetChannelFromMessageFirstWord(word0) | Returns the MidiChannel for the message. First check to see if the message type has a channel field. | . | GetStatusFromUtilityMessage(word0) | Returns the status byte | . | GetStatusFromMidi1ChannelVoiceMessage(word0) | When provided a MIDI 1.0 channel voice message, returns the Midi1ChannelVoiceMessageStatus for the message. | . | GetStatusFromMidi2ChannelVoiceMessageFirstWord(word0) | When provided a MIDI 2.0 channel voice message, returns the Midi2ChannelVoiceMessageStatus for the message. | . | GetStatusBankFromFlexDataMessageFirstWord(word0) | Returns the status bank byte | . | GetStatusFromFlexDataMessageFirstWord(word0) | Returns the status byte | . | GetStatusFromSystemCommonMessage(word0) | Returns the status byte | . | GetStatusFromDataMessage64FirstWord(word0) | Returns the status byte | . | GetNumberOfBytesFromDataMessage64FirstWord(word0) | Returns the byte count field | . | GetStatusFromDataMessage128FirstWord(word0) | Returns the status byte | . | GetNumberOfBytesFromDataMessage128FirstWord(word0) | Returns the byte count field | . | GetFormFromStreamMessageFirstWord(word0) | Returns the form nibble as a byte | . | GetStatusFromStreamMessageFirstWord(word0) | Returns the status byte | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html#field-access-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html#field-access-functions" - },"79": { + },"94": { "doc": "MidiMessageUtility", "title": "Field Manipulation Functions", "content": "| Function | Description | . | ReplaceGroupInMessageFirstWord(word0, newGroup) | Replaces the group field in word0 and returns the resulting MIDI word | . | ReplaceChannelInMessageFirstWord(word0, newChannel) | Replaces the channel field in word0 and returns the resulting MIDI word | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html#field-manipulation-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html#field-manipulation-functions" - },"80": { + },"95": { "doc": "MidiMessageUtility", "title": "Additional Functions", "content": "| Function | Description | . | GetMessageFriendlyNameFromFirstWord(UInt32 word0) | Returns the localized “Friendly Name” string for a message. For example, this is what is displayed in the console output when you are monitoring an endpoint in verbose mode. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html#additional-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html#additional-functions" - },"81": { + },"96": { "doc": "MidiMessageUtility", "title": "IDL", "content": "MidiMessageUtility IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiMessageUtility.html#idl" - },"82": { + },"97": { "doc": "MidiPacketType", "title": "MidiPacketType Enumeration", - "content": "The values correspond to the number of 32-bit MIDI words in the packet. | Property | Value | Description | . | UnknownOrInvalid | 0 | An invalid zero-length Universal MIDI Packet | . | UniversalMidiPacket32 | 1 | 32-bit (1 word) Universal MIDI Packet | . | UniversalMidiPacket64 | 2 | 64-bit (2 words) Universal MIDI Packet | . | UniversalMidiPacket96 | 3 | 96-bit (3 words) Universal MIDI Packet | . | UniversalMidiPacket128 | 4 | 128-bit (4 words) Universal MIDI Packet | . MidiPacketType IDL . ", + "content": "The values correspond to the number of 32-bit MIDI words in the packet. | Property | Value | Description | . | UnknownOrInvalid | 0 | An invalid zero-length Universal MIDI Packet | . | UniversalMidiPacket32 | 1 | 32-bit (1 word) Universal MIDI Packet | . | UniversalMidiPacket64 | 2 | 64-bit (2 words) Universal MIDI Packet | . | UniversalMidiPacket96 | 3 | 96-bit (3 words) Universal MIDI Packet | . | UniversalMidiPacket128 | 4 | 128-bit (4 words) Universal MIDI Packet | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.html#midipackettype-enumeration", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.html#midipackettype-enumeration" - },"83": { + },"98": { + "doc": "MidiPacketType", + "title": "IDL", + "content": "MidiPacketType IDL . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.html#idl", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.html#idl" + },"99": { "doc": "MidiPacketType", "title": "MidiPacketType", "content": " ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.html" - },"84": { + },"100": { "doc": "MidiService", "title": "MidiService", "content": "The MidiService class contains a number of static functions which enable working with the service outside of a specific session. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiService.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiService.html" - },"85": { + },"101": { "doc": "MidiService", "title": "Static Functions", "content": "| Static Function | Description | . | PingService(pingCount) | Send one or more ping messages to the ping endpoint and report on the status and time. Return if the responses are not received in a calculated timeout period. | . | PingService(pingCount, timeoutMilliseconds) | Send one or more ping messages to the ping endpoint and report on the status and time. Return if responses are not received in the specified timeout period. | . | GetInstalledTransportPlugins() | Returns a list of MidiServiceTransportPluginInformation representing all service transport plugins (also called Abstractions) | . | GetInstalledMessageProcessingPlugins() | Returns a list of MidiServiceMessageProcessingPluginInformation objects representing all service message processing plugins (also called Transforms) | . | GetActiveSessions() | Returns a list of MidiSessionInformation detailing all active Windows MIDI Services sessions on this PC. | . | UpdateRuntimeConfiguration(configurationUpdate) | Used by client-side SDK components for some transports and other plugins, and by the MIDI Settings app. The format of the data is dependent upon the target specified in the data. Use with caution. For more information, see the config JSON documentation | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiService.html#static-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiService.html#static-functions" - },"86": { + },"102": { "doc": "MidiService", "title": "A note on the ping process", "content": "Pinging the Windows service uses the same mechanism as sending any UMP message. The actual message sent is a prioprietary message. (At the time this was created, there was no standard MIDI 2.0 UMP ping message). The message itself is sent to the diagnostics endpoint in the service, which is implemented like any other transport. Therefore, the speed of the pings here and the success of the ping process is a reasonable indicator of service, cross-process queue, and client API health. The diagnostic ping endpoint does not understand any other type of message, and should not be used by applications other than through the ping functions here. The ping does not tell you if a specific transport or device is in a bad state. For example, if a specific USB MIDI device has crashed, this ping message will still work because it is not sent out over USB. Here’s an example of ping responses through the MIDI console app . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiService.html#a-note-on-the-ping-process", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiService.html#a-note-on-the-ping-process" - },"87": { + },"103": { "doc": "MidiService", "title": "A note on updating runtime configuration", "content": "In order to foster an open plugin ecosystem, we need a way to get settings and configuration for those plugins up to them in the Windows service. The way we’ve chosen to do that is JSON, because that same JSON, when not transient in nature, can also be saved into the permanent configuration file for the active MIDI setup. The runtime configuration update should only be used by code which understands exactly what will be done with the data, and can handle the response which is returned. It is not a general API endpoint, but is designed for components which will extend Windows MIDI Services. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiService.html#a-note-on-updating-runtime-configuration", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiService.html#a-note-on-updating-runtime-configuration" - },"88": { + },"104": { "doc": "MidiService", "title": "IDL", "content": "MidiService IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiService.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiService.html#idl" - },"89": { + },"105": { "doc": "MidiServiceMessageProcessingPluginInformation", "title": "MidiServiceMessageProcessingPluginInformation", - "content": " ", + "content": "(section in progress) . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiServiceMessageProcessingPluginInformation.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiServiceMessageProcessingPluginInformation.html" - },"90": { + },"106": { + "doc": "MidiServiceMessageProcessingPluginInformation", + "title": "IDL", + "content": "MidiSessionMidiServiceMessageProcessingPluginInformationInformation IDL . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiServiceMessageProcessingPluginInformation.html#idl", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiServiceMessageProcessingPluginInformation.html#idl" + },"107": { "doc": "MidiServicePingResponse", "title": "MidiServicePingResponse", "content": "This class represents a single ping message response. This is used to assess health and performance of the Windows service. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiServicePingResponse.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiServicePingResponse.html" - },"91": { + },"108": { "doc": "MidiServicePingResponse", "title": "Static Functions", "content": "| Property | Description | . | SourceId | Id used to track this ping source connection instance, in the case of multiple applications using the same ping endpoint | . | Index | Index of the ping | . | ClientSendMidiTimestamp | The time the client sent the ping message | . | ServiceReportedMidiTimestamp | The time the service reported receiving the ping message | . | ClientReceiveMidiTimestamp | The time the client received the ping response | . | ClientDeltaTimestamp | The delta between the client sending the message and receiving the response | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiServicePingResponse.html#static-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiServicePingResponse.html#static-functions" - },"92": { + },"109": { "doc": "MidiServicePingResponse", "title": "IDL", "content": "MidiServicePingResponse IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiServicePingResponse.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiServicePingResponse.html#idl" - },"93": { + },"110": { "doc": "MidiServicePingResponseSummary", "title": "MidiServicePingResponseSummary", "content": "This class represents a summary of the ping attempts against the Windows service. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiServicePingResponseSummary.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiServicePingResponseSummary.html" - },"94": { + },"111": { "doc": "MidiServicePingResponseSummary", "title": "Static Functions", "content": "| Property | Description | . | Success | True if the ping was a success | . | FailureReason | In case of a failure, this includes information about why the failure happened. | . | TotalPingRoundTripMidiClock | The total MIDI Clock time for all ping messages to be sent and received | . | AveragePingRoundTripMidiClock | Calculated average round trip time for ping messages | . | Responses | A list of all the responses for the ping messages | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiServicePingResponseSummary.html#static-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiServicePingResponseSummary.html#static-functions" - },"95": { + },"112": { "doc": "MidiServicePingResponseSummary", "title": "IDL", "content": "MidiServicePingResponseSummary IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiServicePingResponseSummary.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiServicePingResponseSummary.html#idl" - },"96": { + },"113": { "doc": "MidiServiceTransportPluginInformation", "title": "MidiServiceTransportPluginInformation", - "content": " ", + "content": "(section in progress) . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiServiceTransportPluginInformation.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiServiceTransportPluginInformation.html" - },"97": { + },"114": { + "doc": "MidiServiceTransportPluginInformation", + "title": "IDL", + "content": "MidiServiceTransportPluginInformation IDL . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiServiceTransportPluginInformation.html#idl", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiServiceTransportPluginInformation.html#idl" + },"115": { "doc": "MidiSession", "title": "MidiSession", "content": "Before you can connect to an endpoint, you must start a new MIDI session. An application may have any number of sessions open. For example, the application may open one session per open project, or one session per tab in the case of a browser. The lifetime of endpoint connections opened through a session are controlled through the session. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/session/MidiSession.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/session/MidiSession.html" - },"98": { + },"116": { "doc": "MidiSession", "title": "Properties", "content": "| Property | Description | . | Id | Generated Id for the session | . | Name | Name for this session. To change the name after creating the session, use the UpdateName() function. This will update the service | . | Settings | The settings used to create this session | . | IsOpen | True if this session is open and ready to use | . | Connections | Map of all endpoint connections created through this session. Disconnecting an endpoint using DisconnectEndpointConnection will remove the connection from this map. The map key is the generated connection GUID that identifies an instance of an endpoint connection | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/session/MidiSession.html#properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/session/MidiSession.html#properties" - },"99": { + },"117": { "doc": "MidiSession", "title": "Static Member Functions", "content": "The two static functions are factory-pattern methods for creating a new session. | Static Function | Description | . | CreateSession(sessionName) | Create and return a new session with the specified name | . | CreateSession(sessionName, settings) | Create and return a new session with the specified name and settings | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/session/MidiSession.html#static-member-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/session/MidiSession.html#static-member-functions" - },"100": { + },"118": { "doc": "MidiSession", "title": "Functions", "content": "| Function | Description | . | CreateEndpointConnection(endpointDeviceId) | Create a new connection to the specified endpoint device Id | . | CreateEndpointConnection(endpointDeviceId, options) | Create a new connection to the specified endpoint device Id, using the provided connection options | . | CreateEndpointConnection(endpointDeviceId, options, settings) | Create a new connection to the specified endpoint device Id, using the provided connection options and the endpoint-specific settings | . | CreateVirtualDeviceAndConnection(deviceDefinition) | Create the device-side of an app-to-app virtual endpoint. The calling application will perform as a MIDI device, responding to discovery and other MIDI 2.0 protocol messages. | . | DisconnectEndpointConnection(endpointConnectionId) | Cleanly disconnect an endpoint connection and remove it from the connection map | . | UpdateName(newName) | Update the name of this session locally and in the MIDI Service | . Note: If you manually close a MidiEndpointConnection using IClosable (or IDisposable), it will not be removed from the MidiSession’s collection of endpoints. Instead, use the DisconnectEndpointConnection method of the session to keep both in sync. For that reason, we do not recommend that you wrap the CreateEndpointConnection calls in a using statement. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/session/MidiSession.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/session/MidiSession.html#functions" - },"101": { + },"119": { "doc": "MidiSession", "title": "IDL", "content": "MidiSession IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/session/MidiSession.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/session/MidiSession.html#idl" - },"102": { + },"120": { "doc": "MidiSession", "title": "Sample", "content": "using (var session = MidiSession.CreateSession(\"API Sample Session\")) { ... } . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/session/MidiSession.html#sample", "relUrl": "/developer-docs/Windows.Devices.Midi2/session/MidiSession.html#sample" - },"103": { + },"121": { "doc": "MidiSessionConnectionInformation", "title": "MidiSessionConnectionInformation", - "content": "This class represents an open connection in a Windows MIDI Services session. ", + "content": "This class represents an open connection in a Windows MIDI Services session. This is an informational class only for reporting system-wide connection usage. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.html" - },"104": { + },"122": { "doc": "MidiSessionConnectionInformation", "title": "Static Functions", "content": "| Property | Description | . | EndpointDeviceId | The endpoint device id for the connection | . | InstanceCount | The number of instances of this connection which are open in the parent session | . | EarliestConnectionTime | The date and time the first instance of the connection was opened | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.html#static-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.html#static-functions" - },"105": { + },"123": { "doc": "MidiSessionConnectionInformation", "title": "IDL", "content": "MidiSessionConnectionInformation IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.html#idl" - },"106": { + },"124": { "doc": "MidiSessionInformation", "title": "MidiSessionInformation", "content": "This class represents an open Windows MIDI Services session. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.html" - },"107": { + },"125": { "doc": "MidiSessionInformation", "title": "Static Functions", "content": "| Property | Description | . | SessionId | The generated internal GUID for the session | . | ProcessId | The process id for the session | . | ProcessName | The process name for the session, captured when the session was created | . | SessionName | The name of the session provided through the API | . | StartTime | The date and time the session was created | . | Connections | A list of MidiSessionConnectionInformation objects detailing the connections currently open for this session | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.html#static-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.html#static-functions" - },"108": { + },"126": { + "doc": "MidiSessionInformation", + "title": "Example", + "content": "The Windows MIDI Services Console app uses the MidiSessionInformation MidiSessionConnectionInformation and the MidiService class to display active sessions. In this case, you can see three open sessions. The process name and process id are on the left. The session name is in the text on the right, after the word “Session”, and the start time is the date and time in green. Finally, the list of connections for each session is underneath the session information. ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.html#example", + + "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.html#example" + },"127": { "doc": "MidiSessionInformation", "title": "IDL", "content": "MidiSessionInformation IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.html#idl" - },"109": { + },"128": { "doc": "MidiSessionSettings", "title": "MidiSessionSettings", "content": "MidiSessionSettings are currently unused. We are evaluating keeping this in the API. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/session/MidiSessionSettings.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/session/MidiSessionSettings.html" - },"110": { + },"129": { "doc": "MidiSessionSettings", "title": "IDL", "content": "MidiSessionSettings IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/session/MidiSessionSettings.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/session/MidiSessionSettings.html#idl" - },"111": { + },"130": { "doc": "MidiStreamConfigurationRequestReceivedEventArgs", "title": "MidiStreamConfigurationRequestReceivedEventArgs", "content": "(in development) . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/virtual-device/MidiStreamConfigurationRequestReceivedEventArgs.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/virtual-device/MidiStreamConfigurationRequestReceivedEventArgs.html" - },"112": { + },"131": { "doc": "MidiStreamConfigurationRequestReceivedEventArgs", "title": "IDL", "content": "MidiStreamConfigurationRequestReceivedEventArgs IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/virtual-device/MidiStreamConfigurationRequestReceivedEventArgs.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/virtual-device/MidiStreamConfigurationRequestReceivedEventArgs.html#idl" - },"113": { + },"132": { "doc": "MidiStreamMessageBuilder", "title": "MidiStreamMessageBuilder", "content": "(In progress) . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiStreamMessageBuilder.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiStreamMessageBuilder.html" - },"114": { + },"133": { "doc": "MidiStreamMessageBuilder", "title": "Functions", "content": "| Function | Description | . |   |   | . |   |   | . |   |   | . |   |   | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiStreamMessageBuilder.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiStreamMessageBuilder.html#functions" - },"115": { + },"134": { "doc": "MidiStreamMessageBuilder", "title": "IDL", "content": "MidiStreamMessageBuilder IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/MidiStreamMessageBuilder.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/MidiStreamMessageBuilder.html#idl" - },"116": { + },"135": { "doc": "MidiUniqueId", "title": "MidiUniqueId", "content": "The MidiUniqueId class is used to provide formatting and data validation for MIDI-CI MUID types used in Function Blocks and MIDI CI transactions. In the specification, Byte1 is the LSB and Byte4 is the MSB. We follow that convention here. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiUniqueId.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiUniqueId.html" - },"117": { + },"136": { "doc": "MidiUniqueId", "title": "Properties", "content": "| Property | Description | . | Byte1 | The data value for byte 1 of the MUID | . | Byte2 | The data value for byte 2 of the MUID | . | Byte3 | The data value for byte 3 of the MUID | . | Byte4 | The data value for byte 4 of the MUID | . | As28BitInteger | The data value converted to a 28 bit integer | . | IsBroadcast | True if this is the broadcast MUID value | . | IsReserved | True if this is the reserved MUID value | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiUniqueId.html#properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiUniqueId.html#properties" - },"118": { + },"137": { "doc": "MidiUniqueId", "title": "Static Properties", "content": "| Static Property | Description | . | LabelShort | Returns the localized abbreviation. | . | LabelFull | Returns the localized full name. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiUniqueId.html#static-properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiUniqueId.html#static-properties" - },"119": { + },"138": { "doc": "MidiUniqueId", "title": "Functions", "content": "| Function | Description | . | MidiUniqueId() | Constructs an empty MidiUniqueId | . | MidiUniqueId(integer28bit) | Constructs the MidiUniqueId from the given 28 bit integer | . | MidiUniqueId(byte1, byte2, byte3, byte4) | Constructs a MidiUniqueId with the specified bytes | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiUniqueId.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiUniqueId.html#functions" - },"120": { + },"139": { "doc": "MidiUniqueId", "title": "Static Functions", "content": "| Function | Description | . | CreateBroadcast() | Constructs a broadcast MidiUniqueId | . | CreateRandom() | Constructs a random MidiUniqueId | . MidiUniqueId IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/MidiUniqueId.html#static-functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/MidiUniqueId.html#static-functions" - },"121": { + },"140": { "doc": "MidiVirtualEndpointDevice", "title": "MidiVirtualEndpointDevice", "content": "The MidiVirtualEndpointDeviceDefinition class specifies, in an easy to use format, the responses for discovery and protocol negotiation, as well as the properties to use when constructing the device endpoint. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDevice.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDevice.html" - },"122": { + },"141": { "doc": "MidiVirtualEndpointDevice", "title": "Properties", "content": "| Property | Description | . | DeviceDefinition | The MidiVirtualEndpointDeviceDefinition used to create this device. This should be treated as read-only data. | . | FunctionBlocks | Current list of function blocks for this device. | . | SuppressHandledMessages | True if the protocol messages handled by this class should be filtered out of the incoming message stream | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDevice.html#properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDevice.html#properties" - },"123": { + },"142": { "doc": "MidiVirtualEndpointDevice", "title": "Functions", "content": "| Function | Description | . | UpdateFunctionBlock | Update the properties of a single function block. The number of actual function blocks cannot change after creation (per the UMP specification) but blocks may be marked as active or inactive. Changes here will result in the MIDI 2.0 function block notification messages being sent out. | . | UpdateEndpointName | Update the endpoint name, and send out the appropriate endpoint name notification messages. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDevice.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDevice.html#functions" - },"124": { + },"143": { "doc": "MidiVirtualEndpointDevice", "title": "Events", "content": "| Event | Description | . | StreamConfigurationRequestReceived(device, args) | Raised when this device receives a Stream Configuration Request UMP message. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDevice.html#events", "relUrl": "/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDevice.html#events" - },"125": { + },"144": { "doc": "MidiVirtualEndpointDevice", "title": "IDL", "content": "MidiVirtualEndpointDevice IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDevice.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDevice.html#idl" - },"126": { + },"145": { "doc": "MidiVirtualEndpointDeviceDefinition", "title": "MidiVirtualEndpointDeviceDefinition", "content": "The MidiVirtualEndpointDeviceDefinition class specifies, in an easy to use format, the responses for discovery and protocol negotiation, as well as the properties to use when constructing the device endpoint. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDeviceDefinition.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDeviceDefinition.html" - },"127": { + },"146": { "doc": "MidiVirtualEndpointDeviceDefinition", "title": "Properties", "content": "| Property | Description | . | EndpointName | Name of the endpoint used for both the device enumeration and for responding to the endpoint name request UMP message | . | EndpointProductInstanceId | The unique identifier for this device. This value is used when creating the device Id, and is also used as the response for endpoint discovery when the id is requested. In general, this value should be kept to less than 32 characters and not include any special characters or symbols | . | SupportsMidi1ProtocolMessages | For endpoint discovery. True if this endpoint supports MIDI 1.0 protocol messages over UMP | . | SupportsMidi2ProtocolMessages | For endpoint discovery. True if this endpoint supports MIDI 2.0 protocol messages over UMP | . | SupportsReceivingJRTimestamps | For endpoint discovery. True if this endpoint supports recieving JR timestamps (typically, you’ll want to set this to false) | . | SupportsSendingJRTimestamps | For endpoint discovery. True if this endpoint supports sending JR timestamps (typically, you’ll want to set this to false) | . | DeviceManufacturerSystemExclusiveId | MIDI 2.0 UMP Device Identity value | . | DeviceFamilyLsb | MIDI 2.0 UMP Device Identity value | . | DeviceFamilyMsb | MIDI 2.0 UMP Device Identity value | . | DeviceFamilyModelLsb | MIDI 2.0 UMP Device Identity value | . | DeviceFamilyModelMsb | MIDI 2.0 UMP Device Identity value | . | SoftwareRevisionLevel | MIDI 2.0 UMP Device Identity value | . | AreFunctionBlocksStatic | True if the function blocks will not change in any way | . | FunctionBlocks | list of function blocks for this device | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDeviceDefinition.html#properties", "relUrl": "/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDeviceDefinition.html#properties" - },"128": { + },"147": { "doc": "MidiVirtualEndpointDeviceDefinition", "title": "Functions", "content": "| Function | Description | . | MidiVirtualEndpointDeviceDefinition() | Construct a new device definition | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDeviceDefinition.html#functions", "relUrl": "/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDeviceDefinition.html#functions" - },"129": { + },"148": { "doc": "MidiVirtualEndpointDeviceDefinition", "title": "IDL", "content": "MidiVirtualEndpointDeviceDefinition IDL . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDeviceDefinition.html#idl", "relUrl": "/developer-docs/Windows.Devices.Midi2/virtual-device/MidiVirtualEndpointDeviceDefinition.html#idl" - },"130": { + },"149": { "doc": "Service", "title": "Service", "content": "The MidiService class is a utility class which provides access to health and status information related to the MidiSrv Service. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/service/README.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/service/README.html" - },"131": { + },"150": { "doc": "Session", "title": "Session", "content": "Interaction with a MIDI Endpoint always starts with creating a session. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/session/README.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/session/README.html" - },"132": { + },"151": { "doc": "Connections", - "title": "Connection APIs", - "content": " ", - "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/README.html#connection-apis", + "title": "Connecting to a MIDI Endpoint", + "content": "In Windows MIDI Services, once you have opened a session, you will typically open one or more connections to device endpoints. The session class contains methods which return an initialized, but not open, connection to the specified endpoint. The remainder of your interaction for sending and receiving data is with the MidiEndpointConnection class. All endpoints in Windows MIDI Services send and receive messages using the Universal MIDI Packet format. Any required translation (for MIDI 1.0 devices, for example) is handled in the service and/or in the USB driver. Workflow . | Open a session | Using an endpoint id discovered through enumeration or another mechanism, create an endpoint connection | Wire up to the connection any event handlers or message processors | Open the connection | Send and receive messages | Using the session, disconnect the connection when you are done with it. | . ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/README.html#connecting-to-a-midi-endpoint", - "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/README.html#connection-apis" - },"133": { + "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/README.html#connecting-to-a-midi-endpoint" + },"152": { "doc": "Connections", "title": "Connections", "content": " ", "url": "/docs/developer-docs/Windows.Devices.Midi2/connections/README.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/connections/README.html" - },"134": { + },"153": { "doc": "Client Plugins", "title": "Client-side Processing Plugins", "content": "Connections allocate service resources (time and memory), so we recommend applications maintain only a single connection to an endpoint within any session. But because the new endpoint stream-focused approach aggregates what used to be considered ports, we provide processing plugins to parcel out the incoming messages based on criteria set by the application. In this way, an application can have the logical equivalent of several input ports, without the associated resource usage. MIDI 1.0 had the concept of ports. Each port was just a single cable/jack from a MIDI stream exposed by the device. The API and driver were responsible for merging all of the different cables into the single stream for outgoing data, or pulling them apart for incoming data. In MIDI 2.0, what used to be a Port is now morally equivalent to a Group address in the message data. Instead of speaking to N different enumerated entities for a device, the application speaks to a single bidirectional UMP endpoint which aggregates all of this information, much like the driver did behind the scenes in MIDI 1.0. We recognize that there are cases when the old model of MIDI Ports is more convenient for passing around in a DAW or similar app, particularly for incoming data. To help, there are plugins which implement IMidiEndpointMessageProcessingPlugin. The API includes a few stock plugins, but developers are free to provide their own. Listener instances are 1:1 with endpoint connections. We don’t support using the same listener on multiple endpoints. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/README.html#client-side-processing-plugins", "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/README.html#client-side-processing-plugins" - },"135": { + },"154": { "doc": "Client Plugins", "title": "Client Plugins", "content": " ", "url": "/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/README.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/processing-plugins/README.html" - },"136": { + },"155": { "doc": "Endpoint Enumeration", - "title": "Enumeration APIs", - "content": " ", - "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/README.html#enumeration-apis", + "title": "Enumerating Endpoints", + "content": "Windows MIDI Services provides detailed information about each MIDI endpoint on the system. In addition to ids and names, you can also get user metadata, function blocks, group terminal blocks, in-protocol properties, the parent device and container, and much more. There are two ways to enumerate endpoint devices. | Static enumeration using the MidiEndpointDeviceInformation class. This is a snapshot in time and is not updated when in-protocol information is updated, or the user has specified new properties like the name. This approach is really only useful in the simplest of scenarios, as it does not handle device connects and disconnects after the initial enumeration. | Dynamic enumeration using the MidiEndpointDeviceWatcher. When you set up a watcher on a background thread, you will be notified when any new endpoints are connected to the system, or any existing endpoints are disconnected. You will also be alerted when properties change on an enumerated device. For example, when new function block information is sent in-protocol, the properties are updated and an event is raised. For these reasons, the device watcher approach is the approach any non-trival application should use to list and track MIDI endpoints. | . Note that you can enumerate endpoint devices using the stock Windows.Devices.Enumeration.DeviceInformation and Windows.Devices.Enumeration.DeviceWatcher classes. However, those classes do not automatically request the extended property set needed for MIDI, do not translate the binary properties like the group terminal blocks and function blocks, and also do not automatically resolve the relationship with the parent device. ", + "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/README.html#enumerating-endpoints", - "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/README.html#enumeration-apis" - },"137": { + "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/README.html#enumerating-endpoints" + },"156": { "doc": "Endpoint Enumeration", "title": "Endpoint Enumeration", "content": " ", "url": "/docs/developer-docs/Windows.Devices.Midi2/enumeration/README.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/enumeration/README.html" - },"138": { + },"157": { "doc": "Simple Types", "title": "Simple Types", "content": "There are several simple or basic types used in Windows MIDI Services. These types provide formatting and validation to help ensure applications display data in similar ways. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/simple-types/README.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/simple-types/README.html" - },"139": { + },"158": { "doc": "Metadata", "title": "Metadata", "content": "The Windows Service intercepts (but does not remove from the stream) Endpoint metadata notifications. For example, we’ll intercept Endpoint Name notifications and use those to provide a new endpoint-supplied name for the device. These are cached in the SWD properties for the Endpoint Device. In addition to the endpoint data, we also capture and store block data. The block data should be used by applications to identify which groups are active and how to display them to the user. For example, you may want to display a function block name including group numbers like “Sequencer (Groups 1, 2, 3)” in a way similar to how you treated ports in the past. Function Blocks and Group Terminal Blocks are important types of MIDI 2.0 metadata which describe an endpoint and so have their own discrete types. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/metadata/README.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/metadata/README.html" - },"140": { + },"159": { "doc": "Messages", "title": "Messages", - "content": "Windows MIDI Services messages are all sent and received in Universal MIDI Packet (UMP) format. a UMP is made up of 1-4 32 bit MIDI words, sized in 32 bit, 64 bit, 96 bit, and 128 bit packets. The first four bits of the packet are the message type, and from that, you can identify the type and size of message which follows. ", + "content": "Windows MIDI Services messages are all sent and received in Universal MIDI Packet (UMP) format, even if the device is a bytestream MIDI 1.0 device (we do the translation for you). a UMP is made up of 1-4 32 bit MIDI words, sized in 32 bit, 64 bit, 96 bit, and 128 bit packets. The first four bits of the packet are the message type, and from that, you can identify the type and size of message which follows. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/README.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/README.html" - },"141": { + },"160": { "doc": "Messages", "title": "Words", "content": "Several functions operate on one or more 32 bit MIDI words directly. This is efficient for transmission, but may not be convenient for storage or processing. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/README.html#words", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/README.html#words" - },"142": { + },"161": { "doc": "Messages", "title": "Rich Types", "content": "The rich UMP types are full runtime classes, and so have more overhead than the fixed types or raw words. However, they offer conveniences not offered by the other types, including storage of the timestamp, message and packet type enumerations, and interface-based polymorphism. If your send/receive speed is not super critical, these are often the easiest solution. If you are familiar with the Windows.Devices.Midi message types, these are the conceptual equivalent in UMP. For the most part, we do not provide strongly-typed discrete message types (like specific MIDI 2.0 Channel Voice messages or similar) in the API as that is a moving target, and many applications also include their own message creation and processing functions using their own libraries or any of the libraries included on https://midi2.dev. If there’s demand for strongly-typed messages, we may provide them in the future. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/README.html#rich-types", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/README.html#rich-types" - },"143": { + },"162": { "doc": "Messages", "title": "Fixed-Size Struct type", "content": "In addition to the richer types and raw words, the MidiMessageStruct type offers a fixed 128 bit message which can be used to send or receive any type of MIDI UMP. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/messages/README.html#fixed-size-struct-type", "relUrl": "/developer-docs/Windows.Devices.Midi2/messages/README.html#fixed-size-struct-type" - },"144": { + },"163": { "doc": "Message Utilities", "title": "Message Utilities", - "content": " ", + "content": "There are many open source and internal libraries that can be used for creating and parsing message data. For a functional MIDI API, however, we did have to create a number of these ourselves, and so surface them in the API so that you may take advantage of them in your own code. For other open source MIDI libraries, visit the official site midi2.dev, run by members of the MIDI Association. The Windows MIDI Services service and API code uses some of this open source internally. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/message-utilities/README.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/message-utilities/README.html" - },"145": { + },"164": { "doc": "Virtual Devices", "title": "Virtual Devices", "content": "Fully-featured app-to-app MIDI in a MIDI 2.0 world involves connections to a virtual device which must participate in the full MIDI 2.0 protocol, from discovery through protocol negotiation. To support this scenario, the way app-to-app MIDI works in Windows MIDI Services is for an application to define a device and then using the MidiSession, construct that device’s endpoint. Once the device endpoint is opened, Windows MIDI Services will then construct a second application-visible multi-client endpoint which applications will use to talk to the device app. During that conversation, the service will also handle discovery and protocol negotiation with the virtual device just like it would any physical device. In addition to the service component, it is implemented in the client API as a type of Client-SIde Processing Plugin . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/virtual-device/README.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/virtual-device/README.html" - },"146": { + },"165": { "doc": "Windows.Devices.Midi2 API", "title": "Windows.Devices.Midi2", "content": "The Windows.Devices.Midi2 types are documented in these pages. Typical API workflow: . | Create a new session, with an appropriate name. The name will be visible to users and so should be meaningful. Each application may open more than one session at a time (for example, different songs in a DAW, or different tabs in a browser). A single session manages the lifetime of the connections opened through it. | Connect to an endpoint. Typically, you’ll get the endpoint’s id through the enumeration functions. | Wire up a MidiMessageReceived event handler. This is how you will receive incoming messages from the endpoint. Messages are received individually, with one event per message. | Optionally, add any processing plugins. If you want to filter messages or provide multiple “views” into a stream, you can add the appropriate client message processing plugins. | Open the connection. Once the connection is open, you may send and receive messages. | . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/README.html#windowsdevicesmidi2", "relUrl": "/developer-docs/Windows.Devices.Midi2/README.html#windowsdevicesmidi2" - },"147": { + },"166": { "doc": "Windows.Devices.Midi2 API", "title": "Endpoint Enumeration", "content": "Enumeration is how you discover endpoints and get notified of endpoints when they are added, updated, or removed. For the best user experience, keep a MidiEndpointDeviceWatcher running in a background thread so you can monitor device removal, and property updates (name, function blocks, etc.) . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/README.html#endpoint-enumeration", "relUrl": "/developer-docs/Windows.Devices.Midi2/README.html#endpoint-enumeration" - },"148": { + },"167": { "doc": "Windows.Devices.Midi2 API", "title": "Session", "content": "Interaction with a MIDI Endpoint always starts with creating a session. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/README.html#session", "relUrl": "/developer-docs/Windows.Devices.Midi2/README.html#session" - },"149": { + },"168": { "doc": "Windows.Devices.Midi2 API", "title": "Connections", "content": "Once you have a session, you will create one or more connections to send and receive messages. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/README.html#connections", "relUrl": "/developer-docs/Windows.Devices.Midi2/README.html#connections" - },"150": { + },"169": { "doc": "Windows.Devices.Midi2 API", "title": "Clock", "content": "The MIDI clock is used for creating timestamps for use in sending MIDI messages. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/README.html#clock", "relUrl": "/developer-docs/Windows.Devices.Midi2/README.html#clock" - },"151": { + },"170": { "doc": "Windows.Devices.Midi2 API", "title": "Messages", "content": "MIDI Messages are discrete packets of data of a known length. In the MIDI 2.0 specification, they are known as Universal MIDI Packets. In Windows MIDI Services, even MIDI 1.0 bytestream messages are presented in their equivalent Universal MIDI Packet format. The API includes several classes not only for the messages, but also to help construct and parse them. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/README.html#messages", "relUrl": "/developer-docs/Windows.Devices.Midi2/README.html#messages" - },"152": { + },"171": { "doc": "Windows.Devices.Midi2 API", "title": "Metadata", "content": "Function Blocks and Group Terminal Blocks are important types of MIDI 2.0 metadata which describe an endpoint. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/README.html#metadata", "relUrl": "/developer-docs/Windows.Devices.Midi2/README.html#metadata" - },"153": { + },"172": { "doc": "Windows.Devices.Midi2 API", "title": "Client-Side Processing Plugins", "content": "Connections allocate service resources (time and memory), so we recommend applications maintain only a single connection to an endpoint within any session. But because the new endpoint stream-focused approach aggregates what used to be considered ports, we provide processing plugins to parcel out the incoming messages based on criteria set by the application. In this way, an application can have the logical equivalent of several input ports, without the associated resource usage. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/README.html#client-side-processing-plugins", "relUrl": "/developer-docs/Windows.Devices.Midi2/README.html#client-side-processing-plugins" - },"154": { + },"173": { "doc": "Windows.Devices.Midi2 API", "title": "Virtual Devices", "content": "A virtual device is the mechanism through which app-to-app MIDI works through the API. One application acts as the MIDI Endpoint Device, and other applications connect to it. In addition to the service component, it is implemented in the client API as a type of Client-SIde Processing Plugin . ", "url": "/docs/developer-docs/Windows.Devices.Midi2/README.html#virtual-devices", "relUrl": "/developer-docs/Windows.Devices.Midi2/README.html#virtual-devices" - },"155": { + },"174": { "doc": "Windows.Devices.Midi2 API", "title": "Simple Types", "content": "There are several simple or basic types used in Windows MIDI Services. These types provide formatting and validation to help ensure applications display data in similar ways. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/README.html#simple-types", "relUrl": "/developer-docs/Windows.Devices.Midi2/README.html#simple-types" - },"156": { + },"175": { "doc": "Windows.Devices.Midi2 API", "title": "Service", "content": "The MidiService class is a utility class which provides access to health and status information related to the MidiSrv Service. ", "url": "/docs/developer-docs/Windows.Devices.Midi2/README.html#service", "relUrl": "/developer-docs/Windows.Devices.Midi2/README.html#service" - },"157": { + },"176": { "doc": "Windows.Devices.Midi2 API", "title": "Windows.Devices.Midi2 API", "content": " ", "url": "/docs/developer-docs/Windows.Devices.Midi2/README.html", "relUrl": "/developer-docs/Windows.Devices.Midi2/README.html" - },"158": { + },"177": { "doc": "Best Practices", "title": "Best Practices and Performance Optimizations", "content": "Here’s a list of best practices and performance optimizations for MIDI API-consuming applications. ", "url": "/docs/developer-docs/best-practices.html#best-practices-and-performance-optimizations", "relUrl": "/developer-docs/best-practices.html#best-practices-and-performance-optimizations" - },"159": { + },"178": { "doc": "Best Practices", "title": "Fast transmission of messages", "content": "For maximum compatibility across languages, and for safety, WinRT doesn’t allow pointers to be exposed by any properties or as parameters or return types for any function. In addition, the by-value and by-reference semantics for parameters are not always under the control of the API developer. For those reasons, and to maximize ease of use across a number of languages and use-cases, we have multiple ways to send and receive messages. You will want to do your own performance testing from your application and scenarios, but in general, the send/receives with the least overhead are those which send/receive individual 32 bit words, a single 128 bit structure, or the IMemoryBuffer. The word and struct methods do pass copies of data, but the amount of data, for most time critical messages, is still 64 bits or less (MIDI 1.0 channel voice messages are 32 bits, MIDI 2.0 channel voice messages are 64 bits). The IMemoryBuffer approach is a more advanced way to transfer data to and from the API. This wraps a buffer of data which you can reuse between calls, including send/receive, as long as you manage and avoid any potential overlaps. Internally, the COM types used to access this ensures that only pointers are passed into the API. There’s a bit more ceremony to using this approach, so we recommend investing time there only if it better fits your app’s programming model. In addition, because IMemoryBuffer deals with bytes and not 32 bit words, you need to ensure you are correctly copying the data in, following the endianness rules for our internal MIDI 2.0 data representation. The most flexible, but least performant approach, is to use the IMidiMessage interface and the methods which return strongly typed messages. These do involve additional type allocations either on the part of the caller or in the API code. Data copies . In the underlying implementation, copying of data is unavoidable in places. Here are the main places where it happens. When sending messages . | The individual WinRT projection for your language may enforce a copy or translation of the data going into the API. This varies. Arrays, in particular, vary here. | The API copies the data (typically a memcpy), regardless of how it is provided, into the cross-process queue for that client endpoint connection. This is shared cross-process memory on Windows. It’s also a circular queue, so we can’t hold onto pointers for long, which is why 4 below operates how it does. | On the service side, the pointers into the buffer are provided to the client connection and the plugins in that chain. No copying here. | There will be copies of the data created if there are any processing plugins which must significantly manipulate the data (each plugin decides how it deals with the data), or if you schedule the message to be sent in the future (see 2 above). | Finally, the messages may be copied when being supplied to the transport. In the case of USB, we make a call into a kernel driver, so have another cross process queue for that which requires we copy data into it to supply it to the driver. In the case of networking, we have to copy the data into the network buffers and transmit. In app-to-app / virtual MIDI, and also the built-in loopback endpoints, we typically just send the same message pointers through the entire process and do not copy any data in the transport. | . This code is all quite efficient, and the amount of data in a single message is small, so these happen quite quickly. Nevertheless, we’re always looking at places where we can further optimize, but still retain the flexibility provided by having a Windows Service which processes the messages. When receiving messages, the process is almost exactly the opposite of sending. There’s no in-bound message scheduling, but there may be data transformations that plugins perform. In addition, endpoints with multiple clients connected do require fanning out those messages into multiple queues, resulting in multiple copies across the different cross-process inbound client connection queues. That is a small price to pay for full multi-client MIDI support. ", "url": "/docs/developer-docs/best-practices.html#fast-transmission-of-messages", "relUrl": "/developer-docs/best-practices.html#fast-transmission-of-messages" - },"160": { + },"179": { "doc": "Best Practices", "title": "Displaying connections to your app users", "content": "Most apps need to display device and endpoint connection information to their users. Here are some details related to that. Use the MidiEndpointDeviceWatcher to respond to device changes . MIDI devices come and go based on connecting/disconnecting USB cables, or new network endpoints coming online. In addition, properties like Function Blocks and Endpoint Name are subject to change at any time. Use the MidiEndpointDeviceWatcher class on a background thread to monitor these endpoints, and receive notifications when anything changes. This is a much more robust approach vs simply enumerating a snapshot of devices up-front. There’s no API or service reason to require a customer to reboot or reload a MIDI DAW or other application to see newly added endpoints. Don’t include diagnostics endpoints for most apps . Unless the app is a utility / testing app, we recommend you do not display the UMP Loopback Endpoints to the user. These are for diagnostics and testing only. By default, they are excluded during enumeration. Enable drill-down into Groups (functions) . A single function block may exist on multiple groups, and multiple groups may overlap function blocks. That is the nature of the MIDI 2.0 specification. In most cases, you’ll find that a function is associated with one or more groups and those groups do not span other function blocks. We recommend that, when displaying a connection to the user, you connect them to the UMP Endpoint, but then enable some sort of drill-down to show the function block names and their associated groups. SynthCompany Foo Synth 5 - Synthesizer (Groups 1, 2, 3) - Sequencer (Groups 4, 5) - MIDI DIN Out (Group 6) . Or similar based on the conventions of your application. Note that a flat list, like what many apps used for MIDI 1.0 ports, is not as reasonable in a MIDI 2.0 world. Use the Function Block UI Hint to help you decide how to show functions . The UI Hint property of a Function Block was created to give the UI an indication of the intended direction of communication, as a user would see it, for a function block. This shouldn’t necessarily block functions from showing up in a list that contains, for example, input devices, but it may be that you want to prioritize the ones with an appropriate UI hint, and have a “see all” option or similar to display the rest. ", "url": "/docs/developer-docs/best-practices.html#displaying-connections-to-your-app-users", "relUrl": "/developer-docs/best-practices.html#displaying-connections-to-your-app-users" - },"161": { + },"180": { "doc": "Best Practices", "title": "Prefer not mixing legacy APIs and Windows MIDI Services in the same session", "content": "There’s nothing technically preventing you from using winmm or WinRT MIDI 1.0 in the same application, at the same time as the new API, but there’s also no need to beyond transitioning code. The new API will do everything the old does, plus a lot more. The older APIs don’t have access to a lot of the metadata you’ll need for devices, and in the case of MIDI 2.0 endpoints, will require additional message translation in the service. Of course, offering a choice between Windows MIDI Services and an older API in your application is perfectly acceptable, based on your use cases, and which versions of the operating systems you need to support. ", "url": "/docs/developer-docs/best-practices.html#prefer-not-mixing-legacy-apis-and-windows-midi-services-in-the-same-session", "relUrl": "/developer-docs/best-practices.html#prefer-not-mixing-legacy-apis-and-windows-midi-services-in-the-same-session" - },"162": { + },"181": { "doc": "Best Practices", "title": "Best Practices", "content": " ", "url": "/docs/developer-docs/best-practices.html", "relUrl": "/developer-docs/best-practices.html" - },"163": { + },"182": { "doc": "Config JSON", "title": "JSON Config File", "content": "It’s best to use the Settings application and the transport / processing plugins for Settings to manipulate the file. However, if you edit it by hand, here are some notes. ", "url": "/docs/config-json.html#json-config-file", "relUrl": "/config-json.html#json-config-file" - },"164": { + },"183": { "doc": "Config JSON", "title": "The File location is Restricted", "content": "The JSON configuration files are all stored in %allusersprofile%\\Microsoft\\MIDI which typically resolves to C:\\ProgramData\\Microsoft\\MIDI. For security reasons, we don’t allow the file to be stored in any other location. However, you can have as many files in that folder as you want, and switch between them as needed. The default config file is typically named Default.midiconfig.json. The actual name is stored in the registry under HKLM\\SOFTWARE\\Microsoft\\Windows MIDI Services in the CurrentConfig value. This value must not contain any non-filename path characters (no backslashes, colons, etc.). ", "url": "/docs/config-json.html#the-file-location-is-restricted", "relUrl": "/config-json.html#the-file-location-is-restricted" - },"165": { + },"184": { "doc": "Config JSON", "title": "JSON is Case-Sensitive", - "content": "JSON is typically case-sensitive for all keys. The Windows.Data.Json parser used by Windows MIDI Services is case-sensitive with no option to ignore case. That includes GUID values. For example, the following two values are not equivalent JSON keys: . \"{26FA740D-469C-4D33-BEB1-3885DE7D6DF1}\": { \"_comment\": \"KS MIDI (USB etc.)\" }, . and . \"{26fa740d-469c-4d33-beb1-3885de7d6df1}\": { \"_comment\": \"KS MIDI (USB etc.)\" }, . ", + "content": "JSON is typically case-sensitive for all keys. The Windows.Data.Json parser used by Windows MIDI Services is case-sensitive with no option to ignore case. That includes GUID values. For example, the following two values are not equivalent JSON keys: . \"{26FA740D-469C-4D33-BEB1-3885DE7D6DF1}\": { \"_comment\": \"KS MIDI (USB etc.)\" } . and . \"{26fa740d-469c-4d33-beb1-3885de7d6df1}\": { \"_comment\": \"KS MIDI (USB etc.)\" } . ", "url": "/docs/config-json.html#json-is-case-sensitive", "relUrl": "/config-json.html#json-is-case-sensitive" - },"166": { + },"185": { "doc": "Config JSON", "title": "Schema", - "content": "The JSON config file is such that each transport owns its own schema within the bucket associated with its class ID (GUID). We do not impose a schema on the transports or other plugins. Therefore there is no formal JSON Schema for this file. Here’s an example of a bare-bones file, with sections for three different transports. { \"header\": { \"_comment\": \"NOTE: All json keys are case-sensitive, including GUIDs.\", \"product\" : \"Windows MIDI Services\", \"fileVersion\": 1.0 }, \"endpointTransportPluginSettings\": { \"{26FA740D-469C-4D33-BEB1-3885DE7D6DF1}\": { \"_comment\": \"KS MIDI (USB etc.)\" }, \"{C95DCD1F-CDE3-4C2D-913C-528CB8A4CBE6}\": { \"_comment\": \"Network MIDI\" }, \"{8FEAAD91-70E1-4A19-997A-377720A719C1}\": { \"_comment\": \"Virtual MIDI\" } }, \"endpointProcessingPluginSettings\": { } } . Endpoint Properties . The basics of this are identical for each transport. We’ll use KS (USB) as an example . \"{26FA740D-469C-4D33-BEB1-3885DE7D6DF1}\": { \"_comment\": \"KS MIDI (USB etc.)\" \"SWD: \\\\\\\\?\\\\SWD#MIDISRV#MIDIU_KS_BIDI_6799286025327820155_OUTPIN.0_INPIN.2#{e7cce071-3c03-423f-88d3-f1045d02552b}\": { \"userSuppliedName\" : \"Pete's Kontrol S61\", \"userSuppliedDescription\" : \"This is my most favorite MIDI 2.0 controller in the whole world!\" } ... }, . Of those, the identification method SWD is the most important. This controls how we identify a matching device. In cases where the manufacturer doesn’t supply a unique iSerialNumber in USB, unplugging your device from one USB port and plugging it into another can result in a new Id. Similarly, if you have two or more of the same device, and they do not have unique serial numbers, it can be impossible for Windows to distinguish between them. Valid values for the identification method prefix . | SWD: : (The colon and trailing space are required). Use the full Windows Endpoint Device Interface Id. For example \\\\\\\\?\\\\SWD#MIDISRV#MIDIU_KS_BIDI_16024944077548273316_OUTPIN.0_INPIN.2#{e7cce071-3c03-423f-88d3-f1045d02552b}. (Note how the backslashes have to be escaped with additional backslashes.) If the device has an iSerialNumber or you never move it between USB ports, this tends to work fine. | (other methods to be added here when we implement them) | . Valid properties you can set across all supported endpoints . | Property | Type | Description | . | userSuppliedName | Quoted Text | The name you want to use for the endpoint. This will override the name displayed in correctly-coded applications, but won’t necessarily change what you see in Device Manager. These names should be relatively short so they display fully in all/most applications, but meaningful to you. | . | userSuppliedDescription | Quoted Text | A text description and/or notes about the endpoint. Applications may or may not use this data | . | forceSingleClientOnly | Boolean true/false (no quotes) | Most endpoints are multi-client (more than one application can use them simultaneously) by default. This setting is for forcing an endpoint to be single-client only (a value of true). It’s unusual to need this, but a typical use may be to disable multi-client for a device which has a custom driver which doesn’t gracefully handle multiple client applications at the same time. | . ", + "content": "The JSON config file is such that each transport owns its own schema within the bucket associated with its class ID (GUID). We do not impose a schema on the transports or other plugins. Therefore there is no formal JSON Schema for this file. Here’s an example of a bare-bones file, with sections for three different transports. { \"header\": { \"_comment\": \"NOTE: All json keys are case-sensitive, including GUIDs.\", \"product\" : \"Windows MIDI Services\", \"fileVersion\": 1.0 }, \"endpointTransportPluginSettings\": { \"{26FA740D-469C-4D33-BEB1-3885DE7D6DF1}\": { \"_comment\": \"KS MIDI (USB etc.)\" }, \"{C95DCD1F-CDE3-4C2D-913C-528CB8A4CBE6}\": { \"_comment\": \"Network MIDI\" }, \"{8FEAAD91-70E1-4A19-997A-377720A719C1}\": { \"_comment\": \"Virtual MIDI\" } }, \"endpointProcessingPluginSettings\": { } } . Endpoint Properties . The basics of this are identical for each transport. We’ll use KS (USB) as an example . \"{26FA740D-469C-4D33-BEB1-3885DE7D6DF1}\": { \"_comment\": \"KS MIDI (USB etc.)\" \"SWD: \\\\\\\\?\\\\SWD#MIDISRV#MIDIU_KS_BIDI_6799286025327820155_OUTPIN.0_INPIN.2#{e7cce071-3c03-423f-88d3-f1045d02552b}\": { \"userSuppliedName\" : \"Pete's Kontrol S61\", \"userSuppliedDescription\" : \"This is my most favorite MIDI 2.0 controller in the whole world!\" } }, . Of those, the identification method SWD is the most important. This controls how we identify a matching device. In cases where the manufacturer doesn’t supply a unique iSerialNumber in USB, unplugging your device from one USB port and plugging it into another can result in a new Id. Similarly, if you have two or more of the same device, and they do not have unique serial numbers, it can be impossible for Windows to distinguish between them. Valid values for the identification method prefix . | SWD: : (The colon and trailing space are required). Use the full Windows Endpoint Device Interface Id. For example \\\\\\\\?\\\\SWD#MIDISRV#MIDIU_KS_BIDI_16024944077548273316_OUTPIN.0_INPIN.2#{e7cce071-3c03-423f-88d3-f1045d02552b}. (Note how the backslashes have to be escaped with additional backslashes.) If the device has an iSerialNumber or you never move it between USB ports, this tends to work fine. | (other methods to be added here when we implement them) | . Valid properties you can set across all supported endpoints . | Property | Type | Description | . | userSuppliedName | Quoted Text | The name you want to use for the endpoint. This will override the name displayed in correctly-coded applications, but won’t necessarily change what you see in Device Manager. These names should be relatively short so they display fully in all/most applications, but meaningful to you. | . | userSuppliedDescription | Quoted Text | A text description and/or notes about the endpoint. Applications may or may not use this data | . | forceSingleClientOnly | Boolean true/false (no quotes) | Most endpoints are multi-client (more than one application can use them simultaneously) by default. This setting is for forcing an endpoint to be single-client only (a value of true). It’s unusual to need this, but a typical use may be to disable multi-client for a device which has a custom driver which doesn’t gracefully handle multiple client applications at the same time. | . ", "url": "/docs/config-json.html#schema", "relUrl": "/config-json.html#schema" - },"167": { + },"186": { "doc": "Config JSON", "title": "Plugin-specific settings", - "content": "This is not an exhaustive list, because the transport and processing plugins may be created by anyone. Virtual MIDI . Virtual MIDI includes three different sections inside its transport bucket. \"{8FEAAD91-70E1-4A19-997A-377720A719C1}\": { \"_comment\": \"Virtual MIDI\", \"add\": { }, \"update\": { }, \"remove\": { } } . For the persistent configuration file, typically “add” is all that is specified, as it doesn’t make sense to update or remove endpoints or routing on service start. NOTE: This document is not yet complete. We’ll add more details as the schemas are finalized . KS (USB etc) MIDI . TODO: Show how to update endpoint names and provide other properties here . ", + "content": "This is not an exhaustive list, because the transport and processing plugins may be created by anyone. Virtual MIDI . TODO: Provide examples for this . For the persistent configuration file, typically “add” is all that is specified, as it doesn’t make sense to update or remove endpoints or routing on service start. NOTE: This document is not yet complete. We’ll add more details as the schemas are finalized . KS (USB etc) MIDI . TODO: Show how to update endpoint names and provide other properties here . ", "url": "/docs/config-json.html#plugin-specific-settings", "relUrl": "/config-json.html#plugin-specific-settings" - },"168": { + },"187": { "doc": "Config JSON", "title": "Config JSON", "content": " ", "url": "/docs/config-json.html", "relUrl": "/config-json.html" - },"169": { + },"188": { "doc": "Consuming the MIDI API", "title": "Consuming the Windows MIDI Services API", "content": "The Windows MIDI Services API is built using C++/WinRT. WinRT, a requirement for modern APIs on Windows, enables desktop applications, regardless of language, to be able to use APIs, SDKs, etc. that we create. The older tools, C++/CX, are arguably simpler to implement in, but because they include proprietary extensions to C++, we decided to go with standards-based C++/WinRT instead. ", "url": "/docs/developer-docs/consuming-midi-api.html#consuming-the-windows-midi-services-api", "relUrl": "/developer-docs/consuming-midi-api.html#consuming-the-windows-midi-services-api" - },"170": { + },"189": { "doc": "Consuming the MIDI API", "title": "Prerequisites", "content": "To use the API, your application language and tools must be able to work with WinRT metadata and libraries, or the generated projection header file. | Visual Studio 2022+ if you are using Visual Studio | Windows SDK 10.0.20348 (Install with Visual Studio) | Windows 10 22H2, or preferably, the latest version of Windows 11. Our development machines are all running Windows 11. | C++ 17 (C++ 20 may work, C++ 14 will not) | The NuGet package(s) from the release | . Note that there are somewhat hacky ways to get traditional C to work with the COM interfaces, but it is a ton of work for you, and is not a scenario we support. If you find yourself in that situation, I recommend factoring out the MIDI code into its own lib and encapsulating all the C++ calls in there. NOTE: In the period of time before Windows MIDI Services ships in Windows, you will also need to run the latest Windows 11 Insider Canary build of Windows in order to be able to use the USB MIDI 2.0 driver. Click here to learn more and join the Windows Insider Program. CPU Architecture: The public GitHub releases currently support Intel/AMD x64 only. Our internal builds and in-box release support x64 as well as Arm64. There is no planned support for Arm(32) or x86. We only support 64 bit applications. ", "url": "/docs/developer-docs/consuming-midi-api.html#prerequisites", "relUrl": "/developer-docs/consuming-midi-api.html#prerequisites" - },"171": { + },"190": { "doc": "Consuming the MIDI API", "title": "Consuming from C++ with Visual Studio", "content": "Add the C++/WinRT Nuget package to your C++ project in Visual Studio. This installs the required tools and build process. See the C++/WinRT FAQ link below for using LLVM/Clang. Note that the Windows MIDI Services team does not provide any support for LLVM/Clang, but we will take PRs as required if we need to change something reasonable to ensure you are successful with those tools, within what C++/WinRT can support. In your project, set your target and minimum SDK versions to 10.0.20348.0 . Download the NuGet package for the Core SDK . | Until this is published on NuGet.org, you’ll need to set up a local package repository. This is easy to do inside the NuGet Package Manager in Visual Studio. You simply point to a folder. The structure I use in the local clone of the repo is a subfolder of the release folder for all NuGet packages. Specifically D:\\peteb\\Documents\\GitHub\\microsoft\\midi\\build\\release\\NuGet\\ | . If needed, modify the project file as required (info in the C++/WinRT docs, and you can also look at the sample application code). If you are not using Visual Studio as your toolchain for your project, you may want to pull out the MIDI code into a library in your project which does. It’s not strictly required, but it’s much easier to use C++/WinRT. (If you do not want to do this, you’ll need to manually set up the cppwinrt tools as part of your build process to generate the required Windows.Devices.Midi2.h projection header. After that, you can develop using your normal flow.). Read through this page, specifically the “If the API is implemented in a Windows Runtime component”. After that, you reference the types as you would anything else in C++. Only the toolchain is an extra step. What it produces is standard C++. We’re considering what we can do here to possibly eliminate even that step in the future, but it’s required for now. When in doubt, REbuild your project. C++/WinRT does a lot of code generation for the projections. | C++ Windows MIDI Services Example Code | Introduction to C++/WinRT | C++/WinRT on GitHub | C++/WinRT FAQ | C++/WinRT Troubleshooting | . ", "url": "/docs/developer-docs/consuming-midi-api.html#consuming-from-c-with-visual-studio", "relUrl": "/developer-docs/consuming-midi-api.html#consuming-from-c-with-visual-studio" - },"172": { + },"191": { "doc": "Consuming the MIDI API", "title": "Consuming from C# Desktop App", "content": "Your project will currently need to target .NET 7 or above. We prefer .NET 8. Releases will eventually be in the official NuGet.org package source. For now, you can create a local package source and place the NuGet package in there. Then add it to your package sources in the NuGet Package Manager in Visual Studio. The package contains the .NET (C#) projection for .NET 7 and .NET 8. You will still need to install the C#/WinRT NuGet package in your project because we use other Windows SDK types from Windows.Foundation and more. Note that other .NET languages (like Visual Basic) may work, but have not been tested. | C# Windows MIDI Services Example Code | C#/WinRT on GitHub | . ", "url": "/docs/developer-docs/consuming-midi-api.html#consuming-from-c-desktop-app", "relUrl": "/developer-docs/consuming-midi-api.html#consuming-from-c-desktop-app" - },"173": { + },"192": { "doc": "Consuming the MIDI API", "title": "Consuming from C# UWP", "content": "Support for this is not yet in place. We are evaluating the need for UWP support. Our top priority is desktop application support. ", "url": "/docs/developer-docs/consuming-midi-api.html#consuming-from-c-uwp", "relUrl": "/developer-docs/consuming-midi-api.html#consuming-from-c-uwp" - },"174": { + },"193": { "doc": "Consuming the MIDI API", "title": "Consuming from Rust / RS WinRT", "content": "We will provide more information in the future. However, you will follow a similar approach to C++ using windows-rs instead of C++/WinRT. Note that the Rust WinRT tools are newer and are still in active development. Supporting non-Windows SDK winmd files is or will be supported, but is not intuitive at the moment. There is no existing crate for Windows MIDI Services right now. | Getting Started with windows-rs | Rust for Windows and the windows crate | Set up your Rust Development Environment | Rust Windows MIDI Services Example Code | windows-rs on GitHub | . ", "url": "/docs/developer-docs/consuming-midi-api.html#consuming-from-rust--rs-winrt", "relUrl": "/developer-docs/consuming-midi-api.html#consuming-from-rust--rs-winrt" - },"175": { + },"194": { "doc": "Consuming the MIDI API", "title": "Consuming from C++ without Visual Studio (using cmake or other tools)", "content": "The C++/WinRT tool cppwinrt.exe will generate a standard C++ 17 header file Windows.Devices.Midi2.h which you can pull in and include in your project. The header file projections for WinRT types outside of Windows::Devices::Midi2 are included with the Windows SDK. When we ship Windows MIDI Services in-box in Windows, this API will be projected in the same way as all the others in the Windows SDK. First, install the Windows SDK. You can get the SDK from the Windows Dev Center . The SDK install includes the cppwinrt.exe tool. For the 10.0.22621.0 version of the SDK, it is found here on my PC: C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.22621.0\\x64 and C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.22621.0\\arm64 . Pick the version appropriate for your development PC architecture. Normally, all SDK header files, on my PC with the 10.0.22621.0 version of the SDK installed, are located here C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\cppwinrt\\winrt . Generating the Projection Headers . The tool produces the header files from from the .winmd file. This file can be found with the developer release of Windows MIDI Services either as a separate download in the release, or by opening the NuGet package (it’s just a zip file) and pulling it from there. The .winmd file is just metadata about the implementation dll. C:\\demos\\cppwinrt>dir Volume in drive C has no label. Volume Serial Number is 0AEC-1038 Directory of C:\\demos\\cppwinrt 11/09/2023 02:21 PM <DIR> . 11/09/2023 02:20 PM <DIR> .. 11/06/2023 08:48 PM 55,808 Windows.Devices.Midi2.winmd 1 File(s) 55,808 bytes 2 Dir(s) 32,987,725,824 bytes free C:\\demos\\cppwinrt> C:\\demos\\cppwinrt>set cppwinrt=\"C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.22621.0\\x64\\cppwinrt.exe\" C:\\demos\\cppwinrt>%cppwinrt% -input Windows.Devices.Midi2.winmd -reference 10.0.20348.0+ -output .\\projection C:\\demos\\cppwinrt>dir /s Volume in drive C has no label. Volume Serial Number is 0AEC-1038 Directory of C:\\demos\\cppwinrt 11/09/2023 02:26 PM <DIR> . 11/09/2023 02:20 PM <DIR> .. 11/09/2023 02:26 PM <DIR> projection 11/06/2023 08:48 PM 55,808 Windows.Devices.Midi2.winmd 1 File(s) 55,808 bytes Directory of C:\\demos\\cppwinrt\\projection 11/09/2023 02:26 PM <DIR> . 11/09/2023 02:26 PM <DIR> .. 11/09/2023 02:26 PM <DIR> winrt 0 File(s) 0 bytes Directory of C:\\demos\\cppwinrt\\projection\\winrt 11/09/2023 02:26 PM <DIR> . 11/09/2023 02:26 PM <DIR> .. 11/09/2023 02:26 PM <DIR> impl 11/09/2023 02:26 PM 349,214 Windows.Devices.Midi2.h 1 File(s) 349,214 bytes Directory of C:\\demos\\cppwinrt\\projection\\winrt\\impl 11/09/2023 02:26 PM <DIR> . 11/09/2023 02:26 PM <DIR> .. 11/09/2023 02:26 PM 155,054 Windows.Devices.Midi2.0.h 11/09/2023 02:26 PM 22,170 Windows.Devices.Midi2.1.h 11/09/2023 02:26 PM 26,886 Windows.Devices.Midi2.2.h 3 File(s) 204,110 bytes Total Files Listed: 5 File(s) 609,132 bytes 11 Dir(s) 32,988,221,440 bytes free C:\\demos\\cppwinrt> . The minimum SDK to build against is 10.0.20348.0, to support Windows 10. If you get a “Mismatched C++/WinRT headers” message, you can change the version in the command line to be the version of the SDK you downloaded. Typically, that is not necessary as long as you use the version of cppwinrt.exe from the same SDK root location where you reference the SDK headers from. Using the Projection . Once you have the header file referenced, you can use the same sample code used in the C++/WinRT examples. Note that the generated projection header takes care of referencing dependencies from the generated files and from the SDK. You will need to ensure that referenced tree of files is part of your build process by having the correct include path for the generated files and the SDK headers. NOTE: don’t use my example below. That is subject to change. Use what is actually generated. // WARNING: Please don't edit this file. It was generated by C++/WinRT v2.0.220110.5 #pragma once #ifndef WINRT_Windows_Devices_Midi2_H #define WINRT_Windows_Devices_Midi2_H #include \"winrt/base.h\" static_assert(winrt::check_version(CPPWINRT_VERSION, \"2.0.220110.5\"), \"Mismatched C++/WinRT headers.\"); #define CPPWINRT_VERSION \"2.0.220110.5\" #include \"winrt/Windows.Devices.h\" #include \"winrt/impl/Windows.Data.Json.2.h\" #include \"winrt/impl/Windows.Devices.Enumeration.2.h\" #include \"winrt/impl/Windows.Devices.Midi.2.h\" #include \"winrt/impl/Windows.Foundation.2.h\" #include \"winrt/impl/Windows.Foundation.Collections.2.h\" #include \"winrt/impl/Windows.Devices.Midi2.2.h\" ... Note: As of the time of this writing, the generated projections are compatible with C++/17. [They are not compatible with C++/20]https://github.com/microsoft/cppwinrt/issues/1322(). This issue is out of the control of the MIDI project. GCC Support . We haven’t tried it ourselves, but C++/WinRT does appear to be compatible with GCC. See this pull request from 2022. ", "url": "/docs/developer-docs/consuming-midi-api.html#consuming-from-c-without-visual-studio-using-cmake-or-other-tools", "relUrl": "/developer-docs/consuming-midi-api.html#consuming-from-c-without-visual-studio-using-cmake-or-other-tools" - },"176": { + },"195": { "doc": "Consuming the MIDI API", "title": "Consuming from NodeJS / Electron", "content": "We are investigating projection support for node.js / Electron. We have a prelimary version working. In that version, the code to enumerate endpoints and then send messages in a loop looks like this: . function createWindow () { const mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js') } }) mainWindow.loadFile('index.html') // Enumerate endpoints const endpoints = midi2.MidiEndpointDeviceInformation.findAll( midi2.MidiEndpointDeviceInformationSortOrder.name, midi2.MidiEndpointDeviceInformationFilter.includeDiagnosticLoopback + midi2.MidiEndpointDeviceInformationFilter.includeClientUmpNative + midi2.MidiEndpointDeviceInformationFilter.includeClientByteStreamNative); console.log(endpoints); for (var i = 0; i < endpoints.size; i++) { var endpoint = endpoints.getAt(i); console.log(endpoint.id); console.log(endpoint.deviceInstanceId); console.log(endpoint.name); console.log(endpoint.description); console.log(endpoint.transportMnemonic); console.log(\"------------------------------------------------\"); console.log(\"\"); } const loopbackAId = midi2.MidiEndpointDeviceInformation.diagnosticsLoopbackAEndpointId; const loopbackBId = midi2.MidiEndpointDeviceInformation.diagnosticsLoopbackBEndpointId; // create a new session var session = midi2.MidiSession.createSession(\"Electron Test Session\"); // connect to loopback A var sendConnection = session.createEndpointConnection(loopbackAId); // connection needs to be opened before it is used sendConnection.open(); // send messages out to that endpoint for (var j = 0; j < 1000; j++) { sendConnection.sendMessageWords(midi2.MidiClock.now, 0x48675309, 0xDEADBEEF); } session.close(); } . You can see it’s very similar to the code for other languages like C# and C++. Here’s what the output looked like in the initial test. I also had a midi.exe console running and all 1000 messages were received. C:\\demos\\node-midi\\electron-midi>npm start > electron-midi@1.0.0 start > electron . Windows::Foundation::Collections:IVectorView { __winRtInstance__: true } \\\\?\\SWD#MIDISRV#MIDIU_DIAG_LOOPBACK_A#{e7cce071-3c03-423f-88d3-f1045d02552b} SWD\\MIDISRV\\MIDIU_DIAG_LOOPBACK_A Diagnostics Loopback A Diagnostics loopback endpoint. For testing purposes. DIAG ------------------------------------------------ \\\\?\\SWD#MIDISRV#MIDIU_DIAG_LOOPBACK_B#{e7cce071-3c03-423f-88d3-f1045d02552b} SWD\\MIDISRV\\MIDIU_DIAG_LOOPBACK_B Diagnostics Loopback B Diagnostics loopback endpoint. For testing purposes. DIAG ------------------------------------------------ \\\\?\\SWD#MIDISRV#MIDIU_KS_BIDI_14488056966904779946_OUTPIN.0_INPIN.1#{e7cce071-3c03-423f-88d3-f1045d02552b} SWD\\MIDISRV\\MIDIU_KS_BIDI_14488056966904779946_OUTPIN.0_INPIN.1 UM-ONE KS ------------------------------------------------ C:\\demos\\node-midi\\electron-midi> . ", "url": "/docs/developer-docs/consuming-midi-api.html#consuming-from-nodejs--electron", "relUrl": "/developer-docs/consuming-midi-api.html#consuming-from-nodejs--electron" - },"177": { + },"196": { "doc": "Consuming the MIDI API", "title": "Flutter / Dart", "content": "Once the API is in-box on Windows, it will be possible for the projections to be generated by the Flutter/Dart teams, like they do with the Windows SDK today. ", "url": "/docs/developer-docs/consuming-midi-api.html#flutter--dart", "relUrl": "/developer-docs/consuming-midi-api.html#flutter--dart" - },"178": { + },"197": { "doc": "Consuming the MIDI API", "title": "Webview2 Hosted / PWA", "content": "We are investigating. ", "url": "/docs/developer-docs/consuming-midi-api.html#webview2-hosted--pwa", "relUrl": "/developer-docs/consuming-midi-api.html#webview2-hosted--pwa" - },"179": { + },"198": { "doc": "Consuming the MIDI API", "title": "Python", "content": "Once the API is in the Windows SDK, tools like PyWinRT can be used to create projections. ", "url": "/docs/developer-docs/consuming-midi-api.html#python", "relUrl": "/developer-docs/consuming-midi-api.html#python" - },"180": { + },"199": { "doc": "Consuming the MIDI API", "title": "Consuming the MIDI API", "content": " ", "url": "/docs/developer-docs/consuming-midi-api.html", "relUrl": "/developer-docs/consuming-midi-api.html" - },"181": { + },"200": { "doc": "Diagnostics Endpoints", "title": "MIDI Diagnostic Endpoints", "content": "Windows MIDI Services comes with three diagnostic endpoints, two of which are there for application development, testing, and debugging. ", "url": "/docs/developer-docs/diagnostic-endpoints.html#midi-diagnostic-endpoints", "relUrl": "/developer-docs/diagnostic-endpoints.html#midi-diagnostic-endpoints" - },"182": { + },"201": { "doc": "Diagnostics Endpoints", "title": "Loopbacks A and B", "content": "Windows MIDI Services comes with two loopback endpoints which are always present if the Windows service is running. These cannot be turned off by applications or configuration, and so may be relied upon by customer support, unit tests, and more. The Endpoint Device Ids are available as static members of the MidiEndpointDeviceInformation class . winrt::hstring MidiEndpointDeviceInformation::DiagnosticsLoopbackAEndpointId(); winrt::hstring MidiEndpointDeviceInformation::DiagnosticsLoopbackBEndpointId(); . By default, these endpoints are not returned by enumeration calls, because most applications would not want to present them to the user. However, you can include them in the MidiEndpointDeviceInformation::FindAll and MidiEndpointDeviceWatcher::CreateWatcher device filters by using the MidiEndpointDeviceInformationFilter enum value IncludeDiagnosticLoopback if your application has a diagnostic need for them. MidiEndpointDeviceInformationFilter::IncludeDiagnosticLoopback . Diagnostic Loopback Endpoints A and B are cross-wired so that any message sent out on loopback A will come in on loopback B, and any message sent out on B will come in on A. In this way, the loopbacks function as a global app-to-app MIDI implementation for testing. Note that there is only one instance of each endpoint in the system, so if multiple applications use the loopback, the messages will get mixed together like any other endpoint. TIP: The Diagnostic Loopback Endpoints are in place for testing and development only. Applications should not present them to users, or use them for communication outside of testing and debugging. Don’t expose the diagnostic loopback endpoints as part of the list of endpoints in a production DAW application. Special Timestamp Behavior . Normally, an incoming MIDI message will receive a new timestamp when it first arrives from a remote endpoint. In this way, you know exactly when the Windows service first “saw” the message. The loopback endpoints are special-cased so that they do not alter the original sent timestamp. The entire message and timestamp, is sent back exactly as it is received. If you send a message to a loopback with a timestamp of 0 (send immediately), it will come back with the same 0 timestamp. Similarly, if you specify an actual timestamp, that same timestamp will come back in the received message. The latter can be helpful in unit testing when you need to correlate a sent message with a received message, or you need to verify that the specific timestamp you sent was actually sent. If you need the more typical timestamp behavior, you can set up app-to-app MIDI virtual endpoints. Metadata Capture . The Loopback endpoints capture Endpoint and Function Block metadata just like any other endpoint. Because of this, you can change the name of the endpoint through in-protocol messages. If you do that, simply change it back later using the same type of message. Note: We’re working to purge the endpoint metadata cache on device reconnection or service restart, which would reset those properties and names. Currently, it persists across service and Windows restarts. ", "url": "/docs/developer-docs/diagnostic-endpoints.html#loopbacks-a-and-b", "relUrl": "/developer-docs/diagnostic-endpoints.html#loopbacks-a-and-b" - },"183": { + },"202": { "doc": "Diagnostics Endpoints", "title": "Ping", "content": "The ping endpoint is not normally returned through any enumeration. It is for internal use only, and should not be used by any applications. It recognizes only one type of proprietary message. Behavior and implementation of the Ping endpoint is subject to change and should not be relied upon by any code outside of the API. ", "url": "/docs/developer-docs/diagnostic-endpoints.html#ping", "relUrl": "/developer-docs/diagnostic-endpoints.html#ping" - },"184": { + },"203": { "doc": "Diagnostics Endpoints", "title": "Diagnostics Endpoints", "content": " ", "url": "/docs/developer-docs/diagnostic-endpoints.html", "relUrl": "/developer-docs/diagnostic-endpoints.html" - },"185": { + },"204": { "doc": "Endpoint Device Ids", "title": "Endpoint Device Ids", - "content": "The Endpoint Device Id (also referred to as a Device Id) is the way we identify individual devices and interfaces in Windows. Example for one of the built-in loopback endpoints: \\\\?\\SWD#MIDISRV#MIDIU_LOOPBACK_A#{e7cce071-3c03-423f-88d3-f1045d02552b} . | Part | Description | . | SWD | Software device | . | MIDISRV | The name of the enumerator. For Windows MIDI Services, this is the MidiSrv Windows Service | . | MIDIU_LOOPBACK_A | Arbitrary unique identification string provided by the transport. Typically includes a unique identifier. | . | GUID | The interface Id. For Windows MIDI Services, every interface is a bidirectional interface, even if the connected device is MIDI 1.0 with a single unidirectional interface. For MIDI 1.0 devices, you can look at the group terminal blocks to identify active groups/directions. For MIDI 2.0 devices, you can look at the function blocks for the same information and more. | . If you look at the device in Device Manager, and look at Details/Device Instance Path, you’ll see all of the information here except for the interface Id. When you enumerate devices through Windows::Devices::Enumeration, the interface Id is included and required. Tip: Although it was required in the past, we don’t recommend parsing these strings. If there’s information you need about the device which is not contained in the enumerated properties, please let us know and we’ll look into whether or not we can create a custom property to hold that. ", + "content": "The Endpoint Device Id (also referred to as a Device Id) is the way we identify individual devices and interfaces in Windows. Example for one of the built-in loopback endpoints: . \\\\?\\SWD#MIDISRV#MIDIU_DIAG_LOOPBACK_A#{e7cce071-3c03-423f-88d3-f1045d02552b} . | Part | Description | . | SWD | Software device. This is any device that is not a physical device connected to the PC, and which is created using the Software Device APIs. All MIDI endpoints are software devices and may or may not have a physical connected device as a parent. | . | MIDISRV | The name of the enumerator. For Windows MIDI Services, this is the MidiSrv Windows Service | . | MIDIU | Indicates a MIDI UMP interface. | . | DIAG | Mnemonic for the transport which created this device interface. | . | LOOPBACK_A | Arbitrary unique identification string provided by the transport. Typically includes a unique identifier like a serial number. It may also contain other information like the pin pairs used to provide the bidirectional communication. | . | MIDIU_DIAG_LOOPBACK_A | The entire string here is controlled by the transport. By convention it breaks down into the fields mentioned above, but that is not something you should count on. In general, parsing these strings is not recommended. | . | GUID | The interface Id. For Windows MIDI Services, every interface is a bidirectional interface, even if the connected device is MIDI 1.0 with a single unidirectional interface. For MIDI 1.0 devices, you can look at the group terminal blocks to identify active groups/directions. For MIDI 2.0 devices, you can look at the function blocks for the same information and more. | . If you look at the device in Device Manager, and look at Details/Device Instance Path, you’ll see all of the information here except for the interface Id. When you enumerate devices through Windows::Devices::Enumeration or through Windows MIDI Services, the interface Id is included and required. Tip: Although it was required in the past, we don’t recommend parsing these strings. If there’s information you need about the device which is not contained in the enumerated properties, please let us know and we’ll look into whether or not we can create a custom property to hold that. ", "url": "/docs/developer-docs/endpoint-ids.html", "relUrl": "/developer-docs/endpoint-ids.html" - },"186": { + },"205": { "doc": "Programming Languages FAQ", "title": "Programming Languages and App Models FAQ", "content": "This is a developer-focused FAQ. ", "url": "/docs/developer-docs/faq-programming-languages.html#programming-languages-and-app-models-faq", "relUrl": "/developer-docs/faq-programming-languages.html#programming-languages-and-app-models-faq" - },"187": { + },"206": { "doc": "Programming Languages FAQ", "title": "WinRT", "content": "Q: Why is the API and SDK WinRT instead of a set of C headers like classic APIs? Why not use classic COM? A: New APIs for Windows are required to be WinRT, unless there are really good reasons not to be. WinRT is enhanced COM with a richer type system with better support for use by most of the languages and frameworks used to develop Windows applications. Q: Does the fact that the API and SDK are WinRT mean they are sandboxed? A: No. WinRT is modern COM. The term has been overloaded in the past to also include an app model, Store requirements, and more. In this project, WinRT simply means the implementation flavor with support for projections. It does not impose any sandbox or other restrictions on consuming applications. Q: Why does the service plugin model use COM instead of WinRT? A: For our runtime discovery-based plugin model, “Classic” COM makes more sense. WinRT components need to be known at compile time. Q: Why do MIDI namespaces sometimes start with Microsoft instead of Windows? A: Anything targeted for delivery in-box can use Windows.Devices. Anything which is an additional component download for applications, like the SDK, use Microsoft as the top-level namespace as per our conventions. ", "url": "/docs/developer-docs/faq-programming-languages.html#winrt", "relUrl": "/developer-docs/faq-programming-languages.html#winrt" - },"188": { + },"207": { "doc": "Programming Languages FAQ", "title": "Projections", "content": "Q: Which projections will this project deliver? A: We will start with the basic projections: C++, C# (current .net versions), and JavaScript. We will add more (Rust, for example) as we proceed in development. We want to be as inclusive here as we can reasonably be. ", "url": "/docs/developer-docs/faq-programming-languages.html#projections", "relUrl": "/developer-docs/faq-programming-languages.html#projections" - },"189": { + },"208": { "doc": "Programming Languages FAQ", "title": "App Models", "content": "Q: What is the primary app model the API and SDK are targeting? A: Windows desktop apps of all types including C++, C#, Electron, and more. Q: Do the API and SDK support UWP Applications? A: During the initial testing rollout, the API is not built into Windows, and so may not be completely compatible with UWP apps. TBD which functions are usable from the UWP sandbox in the future, but we want to support as much as is possible. ", "url": "/docs/developer-docs/faq-programming-languages.html#app-models", "relUrl": "/developer-docs/faq-programming-languages.html#app-models" - },"190": { + },"209": { "doc": "Programming Languages FAQ", "title": "Project Implementation Languages", "content": "Q: Which languages are used in the project? A: Primarily, the project is C++ and C#. Q: Why is the API and SDK C++ instead of Rust? A: Rust supports WinRT, including authoring, through the rs/WinRT project. However, Rust does not currently support Arm64EC, which means apps on Arm64 devices which need to load x64 plugins (that is, most DAWs) would not be able to load the SDK into their process. Additionally, modern C++ can be used quite safely, it’s just not “safe by default” like Rust is. Q: Why is the API and SDK C++ instead of C#/.net? A: The majority of DAWs are written in C++ or similar languages. Although one can create WinRT components from C#, they carry along a runtime and garbage collection which most DAW developers do not want in their process. Additionally, C# does not support Arm64EC. Q: Why are the apps in C# /.net? A: C# is a great language for applications. Additionally, we want to encourage contributions from our enormous C#/.net development community. Q: Why is the Windows Service C++ instead of C#, Rust, or something else? A: Early prototypes of the service were in C#, which worked fine for most things, until you got into the kernel data transfer, integration with the PnP stack, and more. The implementation team already knows how to use those features and APIs, with great performance, in C++ based on their work with the audio services in Windows today, so the implementation is in C++. Q: Why does the driver have reimplementations of features we see in the standard library? A: In kernel mode drivers, the standard library is largely unavailable. ", "url": "/docs/developer-docs/faq-programming-languages.html#project-implementation-languages", "relUrl": "/developer-docs/faq-programming-languages.html#project-implementation-languages" - },"191": { + },"210": { "doc": "Programming Languages FAQ", "title": "Programming Languages FAQ", "content": " ", "url": "/docs/developer-docs/faq-programming-languages.html", "relUrl": "/developer-docs/faq-programming-languages.html" - },"192": { + },"211": { "doc": "Windows Midi Services", "title": "Windows MIDI Services", "content": "Source repo and developer releases on GitHub . Discord Server for discussion about this project . ", "url": "/docs/#windows-midi-services", "relUrl": "/#windows-midi-services" - },"193": { + },"212": { "doc": "Windows Midi Services", "title": "Key Features", "content": ". | Multi-client by default. Unless an endpoint is configured to not allow shared connections, or there is some issue around multi-client in a third-party driver, any endpoint (including MIDI 1.0 devices) can be used by multiple applications at the same time. So far, in our testing, we haven’t found any USB devices or drivers which cannot be multi-client. | Faster. In our testing, we’ve found that the new infrastructure is much faster at sending and receiving messages compared to the older API, even with plugins configured in the service. There are no built-in speed caps or throttling in Windows MIDI Services, even for older USB MIDI 1.0 devices. The driver is not limited USB full-speed, and supports USB 3.x speeds. | Lower Jitter. Along with higher speed comes lower jitter. This will vary by transport type (USB vs Network vs Virtual), and the device Windows is talking to, but the jitter is in the low microsecond range even without any compensation. | More Deterministic. Speaking of latency compensation, the new API enables timestamp-based message scheduling for outbound messages, and also will soon support Jitter Reduction timestamps for MIDI 2.0 devices which can use them. | Extensible. The service has been designed to be extensible by Microsoft and third-parties. New types of transports can be added at any time, including during prototyping of a new transport specification. (We’re working on Network MIDI 2.0, Bluetooth MIDI 1.0 and considering RTP, all using this model.) Similarly, message processing plugins can also be developed by Microsoft or third-parties and used for production and/or prototyping. No kernel driver experience required in most cases. | App-to-App and Virtual MIDI. Windows MIDI Services includes virtual / app-to-app MIDI 2.0 to enable lightning fast communication between apps on the PC. We’re also investigating flexible routing between any MIDI endpoints as a future feature. | Better tools. We supply the midi.exe Windows MIDI Services Console for developers and power users, or anyone comfortable with the command line. You can use it to monitor endpoints, send and receive messages, send/capture SysEx data and much more. We’ll deliver the MIDI Settings GUI app after our initial release. That app enables renaming devices, configuring your MIDI setup, testing, and more. | UMP-Centric. The new API fully embraces MIDI 2.0 and the Universal MIDI Packet format and handles all required translation in the service and driver. This makes the app model simple while ensuring all your existing devices continue to work. | Open Source. The source code is open and available to everyone under a permissive license. Not sure how something works? Want to create a transport but aren’t sure how we did it? Want to investigate a bug or contribute a feature? The code is there for you to explore. | . Note: Additionally MIDI CI functionality, which does not technically require OS support, will be coming after version 1.0. We intend to add helpers for profiles, property exchange, MUID tracking, and more. In the meantime, applications can send and receive MIDI CI messages without anything in their way, using custom code or third-party libraries. MIDI CI is just MIDI 1.0-compatible SysEx. ", "url": "/docs/#key-features", "relUrl": "/#key-features" - },"194": { + },"213": { "doc": "Windows Midi Services", "title": "API Backwards Compatibility", "content": "Our intention is for developers to begin adopting Windows MIDI Services in place of the older WinMM, WinRT, and (deprecated) DirectMusic APIs in their applications. All new MIDI features, transports, and more will be implemented in Windows MIDI Services and the new API. A select number of features, slightly more than their current baseline, will be available to WinMM and WinRT APIs through our backwards-compatibility shims and abstractions, but this is simply to ensure existing applications continue to function on systems using Windows MIDI Services. Please note that we are not providing backwards compatibility to support DirectMusic MIDI APIs. The existing MIDI APIs on Windows talk (almost) directly to MIDI 1.0 drivers through kernel calls. In Windows MIDI Services, the architecture is built around a central Windows Service, much like our audio system today. It also uses a much faster IO mechanism for communication with the USB driver vs what our MIDI 1.0 API uses today. This provides much more flexibility, including the potential for multi-client use, and good baseline speed with our new class driver. We are working on shims and abstractions which will allow some of the existing MIDI 1.0 APIs to talk to the service rather than directly to the driver. Here is where we currently stand with planned backwards compatibility. Backwards compatibility for WinMM and WinRT APIs will be a post-1.0 feature, but shortly after that first release. | API | What you should expect | . | Windows MIDI Services | This project. 100% of all supported features for MIDI 1.0 and MIDI 2.0, including multi-client. API/SDK uses UMP as its internal data format even for MIDI 1.0 devices. Transports and the service handle translation. | . | WinMM (Win32 API most apps use today) | Access to MIDI 1.0 and most MIDI 2.0 devices, at a MIDI 1.0 compatibility level only. It is possible we will add multi-client support here after our initial release. | . | WinRT (MIDI API Introduced with Windows 10) | Access to MIDI 1.0 and most MIDI 2.0 devices, at a MIDI 1.0 compatibility level only. It is possible we will add multi-client support here after our initial release. | . | DirectMusic | No compatibility planned. Not part of our testing. | . Note that we are also investigating and experimenting with how to best incorporate the existing in-box Roland GS / General MIDI Synth into this architecture. It’s likely we will handle it as an additional transport, but we need to test some of the MIDI file players today as many of them make assumptions about which synth index is the GS synth, so this compatibility may come after the initial release. ", "url": "/docs/#api-backwards-compatibility", "relUrl": "/#api-backwards-compatibility" - },"195": { + },"214": { "doc": "Windows Midi Services", "title": "Resources", "content": "Developer Materials . | Get started examples | API Documentation | Samples | Programming Languages FAQ | . Windows MIDI Services Console app . | Console overview | . Advanced Materials . | JSON Configuration File | . Relevant specifications . These are the updated MIDI 2.0 specifications which apply to this project today. | MIDI 2.0 UMP Specifications | . ", "url": "/docs/#resources", "relUrl": "/#resources" - },"196": { + },"215": { "doc": "Windows Midi Services", "title": "Windows Midi Services", "content": " ", "url": "/docs/", "relUrl": "/" - },"197": { + },"216": { "doc": "MIDI Console", "title": "Windows MIDI Services Console", "content": "If you have the midi console installed, you can invoke it from any command prompt using midi. We recommend using Windows Terminal for the best experience. ", "url": "/docs/midi-console.html#windows-midi-services-console", "relUrl": "/midi-console.html#windows-midi-services-console" - },"198": { + },"217": { "doc": "MIDI Console", "title": "General Information", "content": "Commands vs Options . MIDI Console commands are words with no symbol prefix. For example endpoint or send-message-file. Options are prefixed with two dashes if you use the full word, or a single dash if you use the single-letter abbreviation. For example --help or -h. There is no statement completion built in to the console, but there are some supported abbreviations for commands. These are not yet fully documented but are present in the Program.cs in the console source code. “Ports” vs “Streams” . In MIDI 1.0, specifically USB MIDI 1.0, a connected device would have a single input and single output stream. Inside that stream are packets of data with virtual cable numbers. Those numbers (16 total at most) identify the “port” the data is going to. Operating systems would then translate those into input and output ports. Those cable numbers were hidden from users. MIDI 2.0 does not have a concept of a port. Instead, you always work with the stream itself. The group number, which is in the MIDI message now, is the moral equivalent of that cable number. So where you may have seen a device with 5 input and 5 output ports in the past, you will now see a single bidirectional UMP Endpoint stream with 5 input groups and 5 output groups. We know this can take some getting used to, but it enables us to use MIDI 1.0 devices as though they are MIDI 2.0 devices, and provide a unified API. Help . Add the option --help or its short version -h to any command to get information and examples for that command. midi --help midi service --help midi enumerate --help midi enumerate endpoints --help . The --help option will always provide the most up-to-date list of commands and options supported by the MIDI Services Console. ", "url": "/docs/midi-console.html#general-information", "relUrl": "/midi-console.html#general-information" - },"199": { + },"218": { "doc": "MIDI Console", "title": "Check the MIDI Service Health", "content": "The heart of Windows MIDI Services is the Windows Service which processes and routes messages, creates endpoints, and more. The MIDI Services Console app includes a few commands to check the status and health of the service. Check MIDI Service Status . If you want to verify that the MIDI Service is running, you can check its status using the Service Control Manager, or through the MIDI Console. midi service status midi svc status . If you uset the --verbose or -v option, the console will display more information about the service. midi service status midi svc status . Ping the Service . If you want to verify that the service is transmitting and receiving messages, you can use the ping command, much like you would . midi service ping midi svc ping . This command also supports the --verbose or -v option to display the full results of the ping. It also supports a --count or -c parameter for the number of messages you want to send. Finally, the call supports a --timeout or -t parameter to set the timeout in milliseconds before the ping is considered to have failed. Here are examples of the command with various parameters. midi service ping --verbose midi service ping --verbose --count 20 --timeout 20000 . Stop / Start / Restart the Service . The MIDI console has three commands for managing the Windows service. These can be useful when developing or debugging service-side plugins. Note that these must be run from an Administrator console session. midi service stop midi service start midi service restart . ", "url": "/docs/midi-console.html#check-the-midi-service-health", "relUrl": "/midi-console.html#check-the-midi-service-health" - },"200": { + },"219": { "doc": "MIDI Console", "title": "See the Current Timestamp and Frequency", "content": "If you want to see the MIDI clock we’re using for timestamps and message scheduling, you can use the time command. It will display the current timestamp in ticks, and the number of ticks per second (the resolution) . midi time midi clock . ", "url": "/docs/midi-console.html#see-the-current-timestamp-and-frequency", "relUrl": "/midi-console.html#see-the-current-timestamp-and-frequency" - },"201": { + },"220": { "doc": "MIDI Console", "title": "Enumerate (List) MIDI Entities", "content": "A basic operation you may do with the tool is list the major entities (Endpoints and Plugins) in the system. The enumerate command has the aliases enum and list which may be used instead of the full enumerate command. Enumerate MIDI UMP Endpoints . The ump-endpoints parameter has the alias endpoints and the alias ump so either may be used with the same results. These commands are all equivalent: . midi enumerate ump-endpoints midi enumerate endpoints midi enum endpoints midi list endpoints midi list ump . All of the above statements will return a list of all the user-focused UMP endpoints on the system. Note: There are loopback endpoints A and B that are always available and are built into the service. They are crosswired to each other so that any message sent to A is received on B, and vice versa. They cannot be removed or disabled. Because these are more for support, testing, and developer scenarios, they are not returned from enumeration calls by default. Instead, you would supply the --include-loopback option for the enumeration commands. Enumerate Classic Byte-stream (MIDI 1.0) Endpoints . This uses the old WinRT API. Its primary reason for existance is so you can see what’s shown to older APIs vs what is shown for the new Windows MIDI Services API. As with the UMP endpoints, the commands have aliases, so the following are all equivalent . midi enumerate bytestream-endpoints midi enumerate legacy-endpoints midi enum legacy-endpoints midi list legacy . Enumerate Transport Plugins . TODO: This feature is actively in development. Enumerate Message Processing Plugins . TODO: This feature is actively in development. ", "url": "/docs/midi-console.html#enumerate-list-midi-entities", "relUrl": "/midi-console.html#enumerate-list-midi-entities" - },"202": { + },"221": { "doc": "MIDI Console", "title": "Watch UMP Endpoints for Changes", "content": "Enumerating endpoints gives you a snapshot of the list at a moment in time. Watching the endpoints will give you a constantly updating list, which reflects device add/remove as well as property updates. This is useful more for developers, or those who are using tools to modify endpoints and want to verify that the changes were reported. The watch-endpoints command has the alias watch, so these are equivalent: . midi watch-endpoints midi watch . Note that only UMP endpoints (or bytestream endpoints converted to UMP by the new USB driver and service) are watched for changes. The older MIDI API is not used here. When you want to stop watching the endpoints for changes, hit the escape key. ", "url": "/docs/midi-console.html#watch-ump-endpoints-for-changes", "relUrl": "/midi-console.html#watch-ump-endpoints-for-changes" - },"203": { + },"222": { "doc": "MIDI Console", "title": "Single-Endpoint Commands", "content": "There are a number of commands, including those for monitoring and sending messages, which operate on a single endpoint. In most any command which takes an Endpoint Device Id as a parameter, that parameter is optional. If you leave it out, and the command operates on a single endpoint, you will be prompted with a menu of available endpoints to work with. If you want to script the commands without requiring any user interaction, provide the endpoint device ID as the first parameter after the endpoint command. For example: . midi endpoint \\\\?\\SWD#MIDISRV#MIDIU_DIAG_LOOPBACK_B#{e7cce071-3c03-423f-88d3-f1045d02552b} properties --verbose . Get Detailed Endpoint Properties . In the Device Manager in Windows, you can only see a subset of properties for a device. The same goes with the pnputil utility. It can be useful to see all of the key properties of a MIDI Endpoint. Therefore, we’ve baked property reporting right into the MIDI Services Console. midi endpoint properties . By default, only key properties are displayed. If you want to see the complete list of all properties for the endpoint device, its container, and its parent device, add the --verbose parameter. midi endpoint properties --verbose . As with other endpoint commands, if you provide the endpoint device Id, it will be used. Otherwise, you will be prompted to select an endpoint. Monitor an Endpoint for Incoming Messages . By default, every UMP Endpoint in Windows MIDI Services is multi-client. That means that more than one application can open a connection to the endpoint and send and/or receive messages. This also makes it possible to monitor all the incoming messages on an endpoint, even when that endpoint is in use by another application. When run in verbose mode, the monitor will display each message as it arrives. It also displays helpful information about the type of the message, the group and channel when appropriate, the timestap offset (from the previous message if it was received recently), and more. This requires a fairly wide console window to allow formatting each message to take up only a single line. In a narrow window the format will be a bit ugly. We recommend using the Windows Terminal application, which has support for zooming in and out using the mouse wheel, different fonts, and more. When run without the --verbose option, the monitor displays only key data for the incoming messages. Default mode: . midi endpoint monitor . Verbose mode: . midi endpoint monitor --verbose . Saving messages to a file . When monitoring, you also have the option to save the messages to a file. This can be used to capture test data which you will send using the send-message-file command, or for storing something like a System Exclusive dump. midi endpoint monitor --capture-to-file %USERPROFILE%\\Documents\\MyMidiCapture.midi2 --annotate-capture --capture-field-delimiter Pipe . | The annotation option puts a comment before each message line, with additional details, including the timestamp. | The delimiter option enables you to specify how to delimit the MIDI words in the file. By default, the words are delimitated with spaces. | . The file you choose to write to will be appended to if it already exists. Use caution when specifying the file name, so that you don’t corrupt an unrelated file with this MIDI data. If no file extension is specified, the extension .midi2 will be automatically added to the filename. When you have completed monitoring an endpoint, hit the escape key to close the connection and the app. Send a Message from the Command Line . Sending a message to an endpoint is very helpful for testing, but can also be used in automation to, for example, change the current program, or set a MIDI CC value. It would be very easy for a person to build a batch file or PowerShell script which used midi.exe to synchronize different devices, or reset devices to a known state in preparation for a performance. The message data beyond the message type (first 4 bits) is not pre-validated, so the data can be anything. However, the number of 32 bit words must match the message type per the MIDI 2.0 specification. Send a single UMP32 message immediately . midi endpoint send-message 0x21234567 . Send a single UMP64 message ten times . midi endpoint send-message 0x41234567 0xDEADBEEF --count 10 . Send a single UMP64 message fifteen times, but with a delay of two seconds (2000 milliseconds) in between each message. Delays are in milliseconds because they are there primarily to prevent flooding with older devices. midi endpoint send-message 0x41234567 0xDEADBEEF --count 15 --pause 2000 . In general, we recommend sending messages in hexadecimal format (prefix 0x followed by 8 hexadecimal digits)as it is easier to visually inspect the information being sent. The 1-4 MIDI words are in order from left to right, from 1 to 4. Special debug messages . One thing that can be useful is to send otherwise valid UMP messages where the last word is incremented by 1 for each sent message. This helps to validate that all messages were received by your application, and in the correct order. Note that this requires a message type of at least two words. We don’t recommend sending Type F stream messages as those have the potential to corrupt data. Instead, a Type 4 MIDI 2.0 channel voice message is usually safer. midi endpoint send-message 0x41234567 0x00000000 --count 10000 --pause 2 --debug-auto-increment . When sent, you should see messages where the second word is updated from 0x00000000 through 0x00002710 (decimal 10000). We recommend the pause when sending large numbers of messages because a pause of 0 (“send as fast as possible”) can flood the buffers with more data than the client may be able to retrieve in time and may result in dropped messages. A warning is displayed when that possibility seems likely. Scheduling messages . NOTE: In current Developer Preview builds, message scheduling is turned off so the timestamp is ignored. Refer to the release notes. When sending messages, you have two options for timestamps: . --offset-microseconds is used to add a fixed time to each outgoing message so that it is scheduled that far into the future. Schedule a single UMP64 message 2 seconds from now (2 million microseconds). Offsets are in microseconds to provide more precise control compared to milliseconds. midi endpoint send-message 0x41234567 0xFEEDF00D --offset-microseconds 2000000 . You can also specify an absolute timestamp. Typically, this is used to be able to specify a timestamp of 0, which means to bypass any scheduling and send immediately. midi endpoint send-message 0x41234567 0xFEEDF00D --timestamp 0 . Of course, you can also use the midi time command to see the current timestamp, and then use that information to pick a future timestamp. Finally, if you do not specify a timestamp, the current time is used. Send a File full of Messages . If you want to send a file full of messages, for SysEx or testing, for example, the console has provision for this. The file needs to have one message per line, with 1-4 32 bit words as appropriate. There are options for delimeter (auto, space, comma, pipe, tab), word format (binary, hex, or decimal) as well as an option to change the group index. The latter is especially important when you have a SysEx file saved from one group and you want to send it on another group. The file name can include system variables which require expansion. midi endpoint send-message-file %userprofile%\\Documents\\SysExBank12.txt --new-group-index 5 . There are a number of options for this command both for the format it is reading, but also for the delay between messages (for older devices) and more. To get an explanation for each, type: . midi endpoint send-message-file --help . Here is one of the test files we use. It demonstrates comments, multiple representations for numbers, different delimeters, and more. # This is a test file for sending UMPs through Windows MIDI Services # It uses auto for the field delimiter so we can have different # delimiters on each line. Numeric format for this file is always hex. # The line above was empty. The next data line is a UMP32 0x22345678 # The messages aren't valid beyond their message type matching the number of words 0xF1345678 0x12345678 0x03263827 0x86753099 0xF2345678,0x12345678,0x86754321, 0x86753099 0xF3345678|0x12345678| 0x86754321|0x86753099 0x21345678 0x42345678 0x12341234 0x43345677 0x12341235 0x44345676 0x12341236 0x45345675 0x12341237 0x26989898 # The next two lines have different hex formatting 41345678h 12341234h 22989898h F3345678h 12345678h 86754321h 86753099h # The next lines have no hex formatting 41345678 12341234 22989898 # The next lines have inconsistent hex formatting 41345678 12341234 0xF2345678 12345678h 86754321 0x86753099 # bunch of empty lines above. And the file ends with a comment . Sending Endpoint Metadata Requests . The MIDI Services Console also makes it possible to send some common stream request messages without having to remember their exact format. Before sending the request, you may want to open another console window or tab with a device watcher active on the connected endpoint. This will tell you when the stored properties are changed. In addition, you may want to have a verbose monitoring tab/window open so you can see the response messages come back. These are primarily a convenience for developers. Note that in all the request commands, you may abbreviate request as req . Send a Function Block Request Message . In the command, you may abbreviate function-blocks as fb, functions, function or function-block. The singular versions are available to make the command make more sense when requesting a single block’s data. Request all function blocks from an endpoint . midi endpoint request function-blocks --all . Request a single function block . midi endpoint request function-blocks --function-block-number 3 . Note that you may abbreviate --function-block-number as -n or as --number . By default, you will request both the info notification and name notification messages. If you want to request only one of them, simply turn the other off. You must request at least one of the two types of messages. midi endpoint request function-blocks --all --request-name false midi endpoint request function-blocks --all --request-info false . Send an Endpoint Information Request Message . In the command, you may abbreviate endpoint-metadata as em or metadata. By default, you will request only the endpoint information notification. To request other types of information, specify the flag for that type, or simply use --all . Request all metadata notification messages . midi endpoint request endpoint-metadata --all . Request endpoint info (on by default) and name . midi endpoint request endpoint-metadata --name . Request only the name . midi endpoint request endpoint-metadata --name --endpoint-info false . Other request types . midi endpoint request endpoint-metadata --device-identity midi endpoint request endpoint-metadata --product-instance-id midi endpoint request endpoint-metadata --stream-configuration . Finally, note that you can provide a UMP version to send with the request. By default, the version is Major 1, Minor 1. The --ump-version-major and --ump-version-minor options are what you want to use here. ", "url": "/docs/midi-console.html#single-endpoint-commands", "relUrl": "/midi-console.html#single-endpoint-commands" - },"204": { + },"223": { "doc": "MIDI Console", "title": "Technical Information", "content": "The Windows MIDI Services Console app has been developed using C#, .NET 8, the MIT-licensed open source Spectre.Console library, and the Microsoft-developed open source C#/WinRT toolkit. The console uses the same Windows MIDI Services WinRT APIs available to other desktop applications. Its full source code is available on our Github repo. Pull-requests, feature requests, and bug reports welcome. The project is open source, but we request that instead of forking it to create your own version, you consider contributing to the project. ", "url": "/docs/midi-console.html#technical-information", "relUrl": "/midi-console.html#technical-information" - },"205": { + },"224": { "doc": "MIDI Console", "title": "MIDI Console", "content": " ", "url": "/docs/midi-console.html", "relUrl": "/midi-console.html" - },"206": { + },"225": { "doc": "MIDI 2.0 Implementation Details", "title": "Implementation Details", "content": "Specifications can be funny. As much as the MIDI Association, and all of us in it, try to be very specific and crisp on wording, there’s often room for interpretation. Most of these we work out among the various OS companies under the umbrella of the MIDI Association. But there are others were an approach may just not make sense on one OS or the other. Here are the ones that are Windows-specific, that you should be aware of as a developer. Of course, the full source code for Windows MIDI Services, including the USB MIDI 2.0 driver, is available in our repo, so you can review it at any time to better understand how a feature or function works. ", "url": "/docs/developer-docs/midi2-implementation-details.html#implementation-details", "relUrl": "/developer-docs/midi2-implementation-details.html#implementation-details" - },"207": { + },"226": { "doc": "MIDI 2.0 Implementation Details", "title": "Discovery and Protocol Negotiation", "content": "Windows MIDI Services supports only the UMP-based Endpoint Discovery and Protocol Negotiation. We do not implement the deprecated MIDI-CI equivalents. In addition, declaring the use of JR Timestamps in a USB MIDI 2.0 Group Terminal Block does not enable JR Timestamps in Windows MIDI Services. Instead, these must be negotiated using UMP-based Endpoint Discovery end Protocol Negotiation . ", "url": "/docs/developer-docs/midi2-implementation-details.html#discovery-and-protocol-negotiation", "relUrl": "/developer-docs/midi2-implementation-details.html#discovery-and-protocol-negotiation" - },"208": { + },"227": { "doc": "MIDI 2.0 Implementation Details", "title": "UMP Endpoint Names for native MIDI 2.0 UMP format devices", "content": "Although we make all the names available through the Enumeration API, we have an order of precedence we use when providing the recommended Name property value. In order from most preferred to least, we have: . | Any user-supplied endpoint name configured through the configuration files (these will be created by the MIDI Settings app in the future) | The name supplied through in-protocol Endpoint Name Notification messages | The name supplied by the transport plugin in the service. This is typically pulled from a device name supplied by the driver, or other transport-specific sources such as network advertising in the case of Network MIDI 2.0. | . When we create MIDI 1.0-compatible “ports” for these endpoints, we’ll use the Function Block Names if available and Group Terminal Block names if not. ", "url": "/docs/developer-docs/midi2-implementation-details.html#ump-endpoint-names-for-native-midi-20-ump-format-devices", "relUrl": "/developer-docs/midi2-implementation-details.html#ump-endpoint-names-for-native-midi-20-ump-format-devices" - },"209": { + },"228": { "doc": "MIDI 2.0 Implementation Details", "title": "UMP Endpoint Names for MIDI 1.0 byte stream format devices", "content": "The API also creates UMP endpoints for MIDI 1.0 devices. This happens two ways: . | If the device is assigned to the USB MIDI 2.0 driver (this is preferred) the driver creates Group Terminal Blocks for each “cable” (a “port” in MIDI 1.0 API speak). In the new driver, we use the iJack names, if provided, to name the Group Terminal Blocks. This is the best way to ensure your endpoint and Group Terminal Block names are correct. | If the device is assigned a third-party driver or the legacy MIDI 1.0 driver (not preferred in most cases), the service creates the Group Terminal Blocks using the same algorithm. However, because much less information is available to the service from the legacy drivers, the name may not be identical. | . The precedence for naming is the same as with MIDI 2.0 devices, with the exception of the Endpoint Name Notification, which doesn’t exist in MIDI 1.0. | Any user-supplied endpoint name | The name supplied through in-protocol Endpoint Name Notification messages | The name supplied by the transport plugin in the service. This is typically pulled from a device name supplied by the driver, or other transport-specific sources such as network advertising in the case of Network MIDI 2.0. | . ", "url": "/docs/developer-docs/midi2-implementation-details.html#ump-endpoint-names-for-midi-10-byte-stream-format-devices", "relUrl": "/developer-docs/midi2-implementation-details.html#ump-endpoint-names-for-midi-10-byte-stream-format-devices" - },"210": { + },"229": { "doc": "MIDI 2.0 Implementation Details", "title": "iSerialNumber Really Helps", "content": "If your device exposes a unique iSerialNumber, that will really help with retaining name and other information across physical USB connects and disconnects. We do our best to retain the correct information if you plug into the same physical port, but when you change ports, a device without an iSerialNumber essentially becomes a new device. This is not unique to Windows, but it’s important enough to mention here. More info and guidance in this blog post. ", "url": "/docs/developer-docs/midi2-implementation-details.html#iserialnumber-really-helps", "relUrl": "/developer-docs/midi2-implementation-details.html#iserialnumber-really-helps" - },"211": { + },"230": { "doc": "MIDI 2.0 Implementation Details", "title": "MIDI 2.0 Implementation Details", "content": " ", diff --git a/docs/_site/config-json.html b/docs/_site/config-json.html index aa681be2..05981021 100644 --- a/docs/_site/config-json.html +++ b/docs/_site/config-json.html @@ -1,11 +1,11 @@ Config JSON | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

JSON Config File

It’s best to use the Settings application and the transport / processing plugins for Settings to manipulate the file. However, if you edit it by hand, here are some notes.

The File location is Restricted

The JSON configuration files are all stored in %allusersprofile%\Microsoft\MIDI which typically resolves to C:\ProgramData\Microsoft\MIDI. For security reasons, we don’t allow the file to be stored in any other location. However, you can have as many files in that folder as you want, and switch between them as needed.

The default config file is typically named Default.midiconfig.json. The actual name is stored in the registry under HKLM\SOFTWARE\Microsoft\Windows MIDI Services in the CurrentConfig value. This value must not contain any non-filename path characters (no backslashes, colons, etc.).

JSON is Case-Sensitive

JSON is typically case-sensitive for all keys. The Windows.Data.Json parser used by Windows MIDI Services is case-sensitive with no option to ignore case. That includes GUID values. For example, the following two values are not equivalent JSON keys:

"{26FA740D-469C-4D33-BEB1-3885DE7D6DF1}":
         {
             "_comment": "KS MIDI (USB etc.)"
-        },
+        }
 

and

"{26fa740d-469c-4d33-beb1-3885de7d6df1}":
         {
             "_comment": "KS MIDI (USB etc.)"
-        },
+        }
 

Schema

The JSON config file is such that each transport owns its own schema within the bucket associated with its class ID (GUID). We do not impose a schema on the transports or other plugins. Therefore there is no formal JSON Schema for this file.

Here’s an example of a bare-bones file, with sections for three different transports.

{
     "header":
     {
@@ -28,7 +28,6 @@
         {
             "_comment": "Virtual MIDI"
         }
-
     },
     "endpointProcessingPluginSettings":
     {
@@ -43,21 +42,6 @@
         "userSuppliedName" : "Pete's Kontrol S61",
         "userSuppliedDescription" : "This is my most favorite MIDI 2.0 controller in the whole world!"
     }
-    ...
+    
 },
-

Of those, the identification method SWD is the most important. This controls how we identify a matching device. In cases where the manufacturer doesn’t supply a unique iSerialNumber in USB, unplugging your device from one USB port and plugging it into another can result in a new Id. Similarly, if you have two or more of the same device, and they do not have unique serial numbers, it can be impossible for Windows to distinguish between them.

Valid values for the identification method prefix

  • SWD: : (The colon and trailing space are required). Use the full Windows Endpoint Device Interface Id. For example \\\\?\\SWD#MIDISRV#MIDIU_KS_BIDI_16024944077548273316_OUTPIN.0_INPIN.2#{e7cce071-3c03-423f-88d3-f1045d02552b}. (Note how the backslashes have to be escaped with additional backslashes.) If the device has an iSerialNumber or you never move it between USB ports, this tends to work fine.
  • (other methods to be added here when we implement them)

Valid properties you can set across all supported endpoints

Property Type Description
userSuppliedName Quoted Text The name you want to use for the endpoint. This will override the name displayed in correctly-coded applications, but won’t necessarily change what you see in Device Manager. These names should be relatively short so they display fully in all/most applications, but meaningful to you.
userSuppliedDescription Quoted Text A text description and/or notes about the endpoint. Applications may or may not use this data
forceSingleClientOnly Boolean true/false (no quotes) Most endpoints are multi-client (more than one application can use them simultaneously) by default. This setting is for forcing an endpoint to be single-client only (a value of true). It’s unusual to need this, but a typical use may be to disable multi-client for a device which has a custom driver which doesn’t gracefully handle multiple client applications at the same time.

Plugin-specific settings

This is not an exhaustive list, because the transport and processing plugins may be created by anyone.

Virtual MIDI

Virtual MIDI includes three different sections inside its transport bucket.

"{8FEAAD91-70E1-4A19-997A-377720A719C1}":
-{
-    "_comment": "Virtual MIDI",
-    "add":
-    {
-    },
-    "update":
-    {
-    },
-    "remove":
-    {
-       
-    }
-
-}
-

For the persistent configuration file, typically “add” is all that is specified, as it doesn’t make sense to update or remove endpoints or routing on service start.

NOTE: This document is not yet complete. We’ll add more details as the schemas are finalized

KS (USB etc) MIDI

TODO: Show how to update endpoint names and provide other properties here

\ No newline at end of file +

Of those, the identification method SWD is the most important. This controls how we identify a matching device. In cases where the manufacturer doesn’t supply a unique iSerialNumber in USB, unplugging your device from one USB port and plugging it into another can result in a new Id. Similarly, if you have two or more of the same device, and they do not have unique serial numbers, it can be impossible for Windows to distinguish between them.

Valid values for the identification method prefix

Valid properties you can set across all supported endpoints

Property Type Description
userSuppliedName Quoted Text The name you want to use for the endpoint. This will override the name displayed in correctly-coded applications, but won’t necessarily change what you see in Device Manager. These names should be relatively short so they display fully in all/most applications, but meaningful to you.
userSuppliedDescription Quoted Text A text description and/or notes about the endpoint. Applications may or may not use this data
forceSingleClientOnly Boolean true/false (no quotes) Most endpoints are multi-client (more than one application can use them simultaneously) by default. This setting is for forcing an endpoint to be single-client only (a value of true). It’s unusual to need this, but a typical use may be to disable multi-client for a device which has a custom driver which doesn’t gracefully handle multiple client applications at the same time.

Plugin-specific settings

This is not an exhaustive list, because the transport and processing plugins may be created by anyone.

Virtual MIDI

TODO: Provide examples for this

For the persistent configuration file, typically “add” is all that is specified, as it doesn’t make sense to update or remove endpoints or routing on service start.

NOTE: This document is not yet complete. We’ll add more details as the schemas are finalized

KS (USB etc) MIDI

TODO: Show how to update endpoint names and provide other properties here

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/connections/README.html b/docs/_site/developer-docs/Windows.Devices.Midi2/connections/README.html index 450c5b9f..72ed541d 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/connections/README.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/connections/README.html @@ -1 +1 @@ - Connections | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Connection APIs


Table of contents

\ No newline at end of file + Connections | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Connecting to a MIDI Endpoint

In Windows MIDI Services, once you have opened a session, you will typically open one or more connections to device endpoints. The session class contains methods which return an initialized, but not open, connection to the specified endpoint.

The remainder of your interaction for sending and receiving data is with the MidiEndpointConnection class.

All endpoints in Windows MIDI Services send and receive messages using the Universal MIDI Packet format. Any required translation (for MIDI 1.0 devices, for example) is handled in the service and/or in the USB driver.

Workflow

  1. Open a session
  2. Using an endpoint id discovered through enumeration or another mechanism, create an endpoint connection
  3. Wire up to the connection any event handlers or message processors
  4. Open the connection
  5. Send and receive messages
  6. Using the session, disconnect the connection when you are done with it.

Table of contents

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.html b/docs/_site/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.html index 92c9d1b5..59e08d49 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.html @@ -1 +1 @@ - MidiEndpointDeviceInformationUpdateEventArgs | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiEndpointDeviceInformationUpdateEventArgs

Represents a notification that endpoint properties have been updated

Functions

| Property | Description | | ————— | ———– | | Id | Id of the endpoint which has been updated | | UpdatedName | True if the name properties have been updated | | UpdatedEndpointInformation | True if the in-protocol endpoint information has been updated | | UpdatedDeviceIdentity | True if the in-protocol device identity information has been updated | | UpdatedStreamConfiguration | True if protocol negotiation changed configuration of the endpoint | | UpdatedFunctionBlocks | True if any function blocks have been updated | | UpdatedUserMetadata | True if any user-supplied metadata fields have been updated | | UpdatedAdditionalCapabilities | True if the additional capabilities have been updated | | DeviceInformationUpdate | The source Windows.Devices.Enumeration.DeviceInformationUpdate` object. |

If none of the UpdatedXX properties are true, then other properties have been updated.

IDL

MidiEndpointDeviceInformationUpdateEventArgs IDL

\ No newline at end of file + MidiEndpointDeviceInformationUpdateEventArgs | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiEndpointDeviceInformationUpdateEventArgs

Represents a notification that endpoint properties have been updated

Functions

Property Description
Id Id of the endpoint which has been updated
UpdatedName True if the name properties have been updated
UpdatedEndpointInformation True if the in-protocol endpoint information has been updated
UpdatedDeviceIdentity True if the in-protocol device identity information has been updated
UpdatedStreamConfiguration True if protocol negotiation changed configuration of the endpoint
UpdatedFunctionBlocks True if any function blocks have been updated
UpdatedUserMetadata True if any user-supplied metadata fields have been updated
UpdatedAdditionalCapabilities True if the additional capabilities have been updated
DeviceInformationUpdate The source Windows.Devices.Enumeration.DeviceInformationUpdate object.

If none of the UpdatedXX properties are true, then other properties have been updated.

IDL

MidiEndpointDeviceInformationUpdateEventArgs IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html b/docs/_site/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html index 0e3f0d28..7e821bf9 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.html @@ -1 +1 @@ - MidiEndpointDeviceWatcher | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiEndpointDeviceWatcher

WinRT provides a Windows.Devices.Enumeration namespace with a DeviceWatcher class. That class is generic to any type of device, and so requires additional work to use with MIDI devices. Because of that, we’ve wrapped that functionality in the MidiEndpointDeviceWatcher class and the related MidiEndpointDeviceInformation class.

This is the class applications should use when they want to find devices, and also be notified when devices are added or removed, or when properties like function blocks or device names change.

Create a MidiEndpointDeviceWatcher on a background thread, and use the internal list of Endpoints as your source of record for device properties.

Properties

Function Description
Status The current status. See the Windows.Devices.Enumeration.DeviceWatcherStatus enumeration
EnumeratedEndpointDevices The list of enumerated devices. Provided here for convenience so applications do not need to keep their own list of MIDI devices.

Functions

Function Description
Start() Begin device enumeration. Wire up event handlers before calling this function.
Stop() Stop device enumeration.

Static Functions

Static Function Description
CreateWatcher(endpointFilter) Create a watcher which will enumerate devices based on the provided filter

Events

Event Description
Added(source, deviceInformation) A new endpoint has been added.
Removed(source, deviceInformationUpdate) An endpoint has been removed.
Updated(source endpointDeviceInformationUpdate) Properties of an endpoint have been updated. This is much more common than it was with the older MIDI 1.0 APIs due to both in-protocol endpoint information, and user configuration.
EnumerationCompleted(source) Raised when the initial device enumeration has been completed. Devices may still be added or removed after this event, but use this to decide when you have enough information to display an initial list.
Stopped(source) Enumeration has been stopped.

IDL

MidiEndpointDeviceWatcher IDL

\ No newline at end of file + MidiEndpointDeviceWatcher | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiEndpointDeviceWatcher

WinRT provides a Windows.Devices.Enumeration namespace with a DeviceWatcher class. That class is generic to any type of device, and so requires additional work to use with MIDI devices. Because of that, we’ve wrapped that functionality in the MidiEndpointDeviceWatcher class and the related MidiEndpointDeviceInformation class.

This is the class applications should use when they want to find devices, and also be notified when devices are added or removed, or when properties like function blocks or device names change.

Create a MidiEndpointDeviceWatcher on a background thread, and use the internal list of Endpoints as your source of record for device properties.

Properties

Function Description
Status The current status. See the Windows.Devices.Enumeration.DeviceWatcherStatus enumeration
EnumeratedEndpointDevices The list of enumerated devices. Provided here for convenience so applications do not need to keep their own list of MIDI devices.

Functions

Function Description
Start() Begin device enumeration. Wire up event handlers before calling this function.
Stop() Stop device enumeration.

Static Functions

Static Function Description
CreateWatcher(endpointFilter) Create a watcher which will enumerate devices based on the provided filter

Events

Event Description
Added(source, deviceInformation) A new endpoint has been added.
Removed(source, deviceInformationUpdate) An endpoint has been removed.
Updated(source endpointDeviceInformationUpdate) Properties of an endpoint have been updated. This is much more common than it was with the older MIDI 1.0 APIs due to both in-protocol endpoint information, and user configuration.
EnumerationCompleted(source) Raised when the initial device enumeration has been completed. Devices may still be added or removed after this event, but use this to decide when you have enough information to display an initial list.
Stopped(source) Enumeration has been stopped.

IDL

MidiEndpointDeviceWatcher IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/enumeration/README.html b/docs/_site/developer-docs/Windows.Devices.Midi2/enumeration/README.html index e0066912..2e667e16 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/enumeration/README.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/enumeration/README.html @@ -1 +1 @@ - Endpoint Enumeration | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Enumeration APIs


Table of contents

\ No newline at end of file + Endpoint Enumeration | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Enumerating Endpoints

Windows MIDI Services provides detailed information about each MIDI endpoint on the system. In addition to ids and names, you can also get user metadata, function blocks, group terminal blocks, in-protocol properties, the parent device and container, and much more.

There are two ways to enumerate endpoint devices.

  1. Static enumeration using the MidiEndpointDeviceInformation class. This is a snapshot in time and is not updated when in-protocol information is updated, or the user has specified new properties like the name. This approach is really only useful in the simplest of scenarios, as it does not handle device connects and disconnects after the initial enumeration.
  2. Dynamic enumeration using the MidiEndpointDeviceWatcher. When you set up a watcher on a background thread, you will be notified when any new endpoints are connected to the system, or any existing endpoints are disconnected. You will also be alerted when properties change on an enumerated device. For example, when new function block information is sent in-protocol, the properties are updated and an event is raised. For these reasons, the device watcher approach is the approach any non-trival application should use to list and track MIDI endpoints.

Note that you can enumerate endpoint devices using the stock Windows.Devices.Enumeration.DeviceInformation and Windows.Devices.Enumeration.DeviceWatcher classes. However, those classes do not automatically request the extended property set needed for MIDI, do not translate the binary properties like the group terminal blocks and function blocks, and also do not automatically resolve the relationship with the parent device.


Table of contents

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/message-utilities/README.html b/docs/_site/developer-docs/Windows.Devices.Midi2/message-utilities/README.html index a6140295..5877d818 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/message-utilities/README.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/message-utilities/README.html @@ -1 +1 @@ - Message Utilities | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Message Utilities


Table of contents

\ No newline at end of file + Message Utilities | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Message Utilities

There are many open source and internal libraries that can be used for creating and parsing message data. For a functional MIDI API, however, we did have to create a number of these ourselves, and so surface them in the API so that you may take advantage of them in your own code.

For other open source MIDI libraries, visit the official site midi2.dev, run by members of the MIDI Association. The Windows MIDI Services service and API code uses some of this open source internally.


Table of contents

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/IMidiUniversalPacket.html b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/IMidiUniversalPacket.html index 5fc55c73..f330716f 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/IMidiUniversalPacket.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/IMidiUniversalPacket.html @@ -1 +1 @@ - IMidiUniversalPacket | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

IMidiUniversalPacket

This interface is implemented by the rich MidiMessageXX runtime class types. It may also be used as the interface for message-specific classes you create yourself.

Property Description
Timestamp 64 bit timestamp set by the receiving transport in the case of incoming messages, or by the sender in the case of outgoing messages
MessageType A MidiMessageType enumeration value which represents the 4 bit MIDI Message type 0x0 - 0xF as defined by the MIDI UMP standard.
PacketType A MidiPacketType enumeration value which can be cast to an int to get the number of 32-bit words in the message packet
Function Description
PeekFirstWord() Provides access to the first word of data, even if the message type and size is not yet known by the API user

IMidiUniversalPacket IDL

\ No newline at end of file + IMidiUniversalPacket | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

IMidiUniversalPacket

This interface is implemented by the rich MidiMessageXX runtime class types. It may also be used as the interface for message-specific classes you create yourself.

Property Description
Timestamp 64 bit timestamp set by the receiving transport in the case of incoming messages, or by the sender in the case of outgoing messages
MessageType A MidiMessageType enumeration value which represents the 4 bit MIDI Message type 0x0 - 0xF as defined by the MIDI UMP standard.
PacketType A MidiPacketType enumeration value which can be cast to an int to get the number of 32-bit words in the message packet
Function Description
PeekFirstWord() Provides access to the first word of data, even if the message type and size is not yet known by the API user

IDL

IMidiUniversalPacket IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage128.html b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage128.html index 2471ca1b..6cfb157f 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage128.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage128.html @@ -1 +1 @@ - MidiMessage128 | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessage128

MidiMessage128 is used for some data messages as well as important “Type F” stream metadata messages.

Includes all functions and properties in IMidiUniversalPacket, as well as:

Property Description
Word0 First 32-bit MIDI word
Word1 Second 32-bit MIDI word
Word2 Third 32-bit MIDI word
Word3 Fourth 32-bit MIDI word
Function Description
MidiMessage128() Default constructor
MidiMessage128(timestamp, word0, word1, word2, word3) Construct a new message with a timestamp and all 32 bit MIDI words

MidiMessage128 IDL

\ No newline at end of file + MidiMessage128 | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessage128

MidiMessage128 is used for some data messages as well as important “Type F” stream metadata messages.

Includes all functions and properties in IMidiUniversalPacket, as well as:

Property Description
Word0 First 32-bit MIDI word
Word1 Second 32-bit MIDI word
Word2 Third 32-bit MIDI word
Word3 Fourth 32-bit MIDI word
Function Description
MidiMessage128() Default constructor
MidiMessage128(timestamp, word0, word1, word2, word3) Construct a new message with a timestamp and all 32 bit MIDI words

IDL

MidiMessage128 IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage32.html b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage32.html index f58a1ad9..72419c77 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage32.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage32.html @@ -1 +1 @@ - MidiMessage32 | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessage32

MidiMessage32 is used for short messages such as utility messages and MIDI 1.0 messages in UMP format.

Includes all functions and properties in IMidiUniversalPacket, as well as:

Property Description
Word0 First 32-bit MIDI word
Function Description
MidiMessage32() Default constructor
MidiMessage32(timestamp, word0) Construct a new message with a timestamp and 32 bit MIDI word

MidiMessage32 IDL

\ No newline at end of file + MidiMessage32 | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessage32

MidiMessage32 is used for short messages such as utility messages and MIDI 1.0 messages in UMP format.

Includes all functions and properties in IMidiUniversalPacket, as well as:

Property Description
Word0 First 32-bit MIDI word
Function Description
MidiMessage32() Default constructor
MidiMessage32(timestamp, word0) Construct a new message with a timestamp and 32 bit MIDI word

IDL

MidiMessage32 IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage64.html b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage64.html index 16480726..e8be6a4e 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage64.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage64.html @@ -1 +1 @@ - MidiMessage64 | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessage64

MidiMessage64 is used for some data messages and for MIDI 2.0 Channel Voice messages.

Includes all functions and properties in IMidiUniversalPacket, as well as:

Property Description
Word0 First 32-bit MIDI word
Word1 Second 32-bit MIDI word
Function Description
MidiMessage64() Default constructor
MidiMessage64(timestamp, word0, word1) Construct a new message with a timestamp and all 32 bit MIDI words

MidiMessage64 IDL

\ No newline at end of file + MidiMessage64 | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessage64

MidiMessage64 is used for some data messages and for MIDI 2.0 Channel Voice messages.

Includes all functions and properties in IMidiUniversalPacket, as well as:

Property Description
Word0 First 32-bit MIDI word
Word1 Second 32-bit MIDI word
Function Description
MidiMessage64() Default constructor
MidiMessage64(timestamp, word0, word1) Construct a new message with a timestamp and all 32 bit MIDI words

IDL

MidiMessage64 IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage96.html b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage96.html index 53627aaf..33053080 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage96.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessage96.html @@ -1 +1 @@ - MidiMessage96 | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessage96

MidiMessage96 is currently unused in the MIDI 2.0 UMP specification.

Includes all functions and properties in IMidiUniversalPacket, as well as:

Property Description
Word0 First 32-bit MIDI word
Word1 Second 32-bit MIDI word
Word2 Third 32-bit MIDI word
Function Description
MidiMessage96() Default constructor
MidiMessage96(timestamp, word0, word1, word2) Construct a new message with a timestamp and all 32 bit MIDI words

MidiMessage96 IDL

\ No newline at end of file + MidiMessage96 | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessage96

MidiMessage96 is currently unused in the MIDI 2.0 UMP specification.

Includes all functions and properties in IMidiUniversalPacket, as well as:

Property Description
Word0 First 32-bit MIDI word
Word1 Second 32-bit MIDI word
Word2 Third 32-bit MIDI word
Function Description
MidiMessage96() Default constructor
MidiMessage96(timestamp, word0, word1, word2) Construct a new message with a timestamp and all 32 bit MIDI words

IDL

MidiMessage96 IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessageStruct.html b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessageStruct.html index 4ebb6303..98b3a92c 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessageStruct.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessageStruct.html @@ -1 +1 @@ - MidiMessageStruct | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessageStruct

MidiMessageStruct is provided for cases where the API consumer wants to have a fixed value type they can use to send and receive messages. In the case of receiving messages, a function which fills the struct will typically return a count of valid words. The MidiMessageStruct struct type is simpler than the other runtime class types and may therefore perform better in some projections and for some uses. Note that this type does not include the timestamp field.

Field Description
Word0 First 32-bit MIDI word
Word1 Second 32-bit MIDI word
Word2 Third 32-bit MIDI word
Word3 Fourth 32-bit MIDI word

MidiMessageStruct IDL

\ No newline at end of file + MidiMessageStruct | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessageStruct

MidiMessageStruct is provided for cases where the API consumer wants to have a fixed value type they can use to send and receive messages. In the case of receiving messages, a function which fills the struct will typically return a count of valid words. The MidiMessageStruct struct type is simpler than the other runtime class types and may therefore perform better in some projections and for some uses. Note that this type does not include the timestamp field.

Field Description
Word0 First 32-bit MIDI word
Word1 Second 32-bit MIDI word
Word2 Third 32-bit MIDI word
Word3 Fourth 32-bit MIDI word

IDL

MidiMessageStruct IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.html b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.html index 619071a5..e8785914 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.html @@ -1 +1 @@ - MidiMessageType | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessageType Enumeration

The values correspond directly to the “mt” field in the MIDI UMP packet and may be cast as such if trimmed to 4 bits and shifted into place.

Property Value Description
UtilityMessage32 0x0 32-bit utility message
SystemCommon32 0x1 32-bit system common message
Midi1ChannelVoice32 0x2 32-bit MIDI 1.0 channel voice message
DataMessage64 0x3 64-bit data message (including MIDI 1.0 System Exclusive)
Midi2ChannelVoice64 0x4 64-bit MIDI 2.0 channel voice message
DataMessage128 0x5 128-bit Data Message
FutureReserved632 0x6 Reserved for future use by the MIDI standards bodies
FutureReserved732 0x7 Reserved for future use by the MIDI standards bodies
FutureReserved864 0x8 Reserved for future use by the MIDI standards bodies
FutureReserved964 0x9 Reserved for future use by the MIDI standards bodies
FutureReservedA64 0xA Reserved for future use by the MIDI standards bodies
FutureReservedB96 0xB Reserved for future use by the MIDI standards bodies
FutureReservedC96 0xC Reserved for future use by the MIDI standards bodies
FlexData128 0xD 128-bit Flex Data message including song file data messages
FutureReservedE128 0xE Reserved for future use by the MIDI standards bodies
Stream128 0xF 128-bit stream message, including endpoint discovery and function block messages

MidiMessageType IDL

\ No newline at end of file + MidiMessageType | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessageType Enumeration

The values correspond directly to the “mt” field in the MIDI UMP packet and may be cast as such if trimmed to 4 bits and shifted into place.

Property Value Description
UtilityMessage32 0x0 32-bit utility message
SystemCommon32 0x1 32-bit system common message
Midi1ChannelVoice32 0x2 32-bit MIDI 1.0 channel voice message
DataMessage64 0x3 64-bit data message (including MIDI 1.0 System Exclusive)
Midi2ChannelVoice64 0x4 64-bit MIDI 2.0 channel voice message
DataMessage128 0x5 128-bit Data Message
FutureReserved632 0x6 Reserved for future use by the MIDI standards bodies
FutureReserved732 0x7 Reserved for future use by the MIDI standards bodies
FutureReserved864 0x8 Reserved for future use by the MIDI standards bodies
FutureReserved964 0x9 Reserved for future use by the MIDI standards bodies
FutureReservedA64 0xA Reserved for future use by the MIDI standards bodies
FutureReservedB96 0xB Reserved for future use by the MIDI standards bodies
FutureReservedC96 0xC Reserved for future use by the MIDI standards bodies
FlexData128 0xD 128-bit Flex Data message including song file data messages
FutureReservedE128 0xE Reserved for future use by the MIDI standards bodies
Stream128 0xF 128-bit stream message, including endpoint discovery and function block messages

IDL

MidiMessageType IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.html b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.html index 0258dcb9..4c6a680e 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.html @@ -1 +1 @@ - MidiPacketType | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiPacketType Enumeration

The values correspond to the number of 32-bit MIDI words in the packet.

Property Value Description
UnknownOrInvalid 0 An invalid zero-length Universal MIDI Packet
UniversalMidiPacket32 1 32-bit (1 word) Universal MIDI Packet
UniversalMidiPacket64 2 64-bit (2 words) Universal MIDI Packet
UniversalMidiPacket96 3 96-bit (3 words) Universal MIDI Packet
UniversalMidiPacket128 4 128-bit (4 words) Universal MIDI Packet

MidiPacketType IDL

\ No newline at end of file + MidiPacketType | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiPacketType Enumeration

The values correspond to the number of 32-bit MIDI words in the packet.

Property Value Description
UnknownOrInvalid 0 An invalid zero-length Universal MIDI Packet
UniversalMidiPacket32 1 32-bit (1 word) Universal MIDI Packet
UniversalMidiPacket64 2 64-bit (2 words) Universal MIDI Packet
UniversalMidiPacket96 3 96-bit (3 words) Universal MIDI Packet
UniversalMidiPacket128 4 128-bit (4 words) Universal MIDI Packet

IDL

MidiPacketType IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/README.html b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/README.html index 251d4892..f2e3ba9b 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/messages/README.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/messages/README.html @@ -1 +1 @@ - Messages | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Messages

Windows MIDI Services messages are all sent and received in Universal MIDI Packet (UMP) format. a UMP is made up of 1-4 32 bit MIDI words, sized in 32 bit, 64 bit, 96 bit, and 128 bit packets. The first four bits of the packet are the message type, and from that, you can identify the type and size of message which follows.

Words

Several functions operate on one or more 32 bit MIDI words directly. This is efficient for transmission, but may not be convenient for storage or processing.

Rich Types

The rich UMP types are full runtime classes, and so have more overhead than the fixed types or raw words. However, they offer conveniences not offered by the other types, including storage of the timestamp, message and packet type enumerations, and interface-based polymorphism. If your send/receive speed is not super critical, these are often the easiest solution.

If you are familiar with the Windows.Devices.Midi message types, these are the conceptual equivalent in UMP.

For the most part, we do not provide strongly-typed discrete message types (like specific MIDI 2.0 Channel Voice messages or similar) in the API as that is a moving target, and many applications also include their own message creation and processing functions using their own libraries or any of the libraries included on https://midi2.dev. If there’s demand for strongly-typed messages, we may provide them in the future.

Fixed-Size Struct type

In addition to the richer types and raw words, the MidiMessageStruct type offers a fixed 128 bit message which can be used to send or receive any type of MIDI UMP.


Table of contents

\ No newline at end of file + Messages | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Messages

Windows MIDI Services messages are all sent and received in Universal MIDI Packet (UMP) format, even if the device is a bytestream MIDI 1.0 device (we do the translation for you). a UMP is made up of 1-4 32 bit MIDI words, sized in 32 bit, 64 bit, 96 bit, and 128 bit packets. The first four bits of the packet are the message type, and from that, you can identify the type and size of message which follows.

Words

Several functions operate on one or more 32 bit MIDI words directly. This is efficient for transmission, but may not be convenient for storage or processing.

Rich Types

The rich UMP types are full runtime classes, and so have more overhead than the fixed types or raw words. However, they offer conveniences not offered by the other types, including storage of the timestamp, message and packet type enumerations, and interface-based polymorphism. If your send/receive speed is not super critical, these are often the easiest solution.

If you are familiar with the Windows.Devices.Midi message types, these are the conceptual equivalent in UMP.

For the most part, we do not provide strongly-typed discrete message types (like specific MIDI 2.0 Channel Voice messages or similar) in the API as that is a moving target, and many applications also include their own message creation and processing functions using their own libraries or any of the libraries included on https://midi2.dev. If there’s demand for strongly-typed messages, we may provide them in the future.

Fixed-Size Struct type

In addition to the richer types and raw words, the MidiMessageStruct type offers a fixed 128 bit message which can be used to send or receive any type of MIDI UMP.


Table of contents

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.html b/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.html index 1cf8ae60..4dbf188d 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.html @@ -1 +1 @@ - IMidiEndpointMessageProcessingPlugin | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

IMidiEndpointMessageProcessingPlugin

(In progress)

IDL

IMidiEndpointMessageProcessingPlugin IDL

\ No newline at end of file + IMidiEndpointMessageProcessingPlugin | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

IMidiEndpointMessageProcessingPlugin

This interface is implemented by any type which can be an endpoint processing plugin in the client API. These plugins are used to process or manipulate messages coming from an endpoint.

Microsoft provides several plugins in the API, including the MidiVirtualEndpointDevice, the MidiChannelEndpointListener, and the MidiGroupEndpointListener. All of these types implement the IMidiEndpointMessageProcessingPlugin interface and operate in the same way.

The main part of message processing is the ProcessIncomingMessage callback.

Properties

Property Description
Id Generated GUID for this plugin instance. This is needed if you want to remove the plugin from the endpoint connection
Name Optional application-supplied name for this plugin instance.
Tag Optional application-supplied arbitrary data to associate with this plugin instance
IsEnabled True if the plugin is enabled and should participate in message processing

Functions

Function Description
Initialize(endpointConnection) Called by the endpoint connection. Perform any setup code which requires the endpoint connection pointer here.
OnEndpointConnectionOpened() Callback when the endpoint connection is opened. If the plugin is added after the endpoint connection has already been opened, this is called immediately.
ProcessIncomingMessage(args, skipFurtherListeners, skipMainMessageReceivedEvent) Callback for processing an incoming message. If the code sets skipFurtherListeners to true, any plugins after this one will not be called. If the code sets skipMainMessageReceivedEvent to true, the endpoint’s MessageReceived event will not be called for this message. Note: this callback is synchronous, so code in this should execute quickly and return immediately when complete.
Cleanup() Called when the endpoint is tearing down

IDL

IMidiEndpointMessageProcessingPlugin IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.html b/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.html index 8f869dd0..a02b414f 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.html @@ -1 +1 @@ - MidiChannelEndpointListener | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiChannelEndpointListener

(In progress)

IDL

MidiChannelEndpointListener IDL

\ No newline at end of file + MidiChannelEndpointListener | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiChannelEndpointListener

This class acts as a filter. Incoming messages with the specified group and channel will be provided through the MessageReceived event. Other messages will be ignored.

In addition to the properties and methods in IMidiEndpointMessageProcessingPlugin, and the MessageReceived event from IMidiMessageReceivedEventSource the class provides the following:

Properties

Property Description
IncludeGroup The MidiGroup that this listener will listen to.
IncludeChannels The channels that this listener will listen to on the group.
PreventCallingFurtherListeners True if this plugin should prevent further listeners from processing a message that is in-scope for this processor.
PreventFiringMainMessageReceivedEvent True if this plugin should prevent the endpoint’s MessageReceived event from firing if the message was in-scope for this plugin.

Functions

Property Description
MidiChannelEndpointListener() Construct a new instance of this type

IDL

MidiChannelEndpointListener IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.html b/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.html index 9ba3e347..63f8bd4d 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.html @@ -1 +1 @@ - MidiGroupEndpointListener | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiGroupEndpointListener

(In progress)

IDL

MidiGroupEndpointListener IDL

\ No newline at end of file + MidiGroupEndpointListener | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiGroupEndpointListener

This class acts as a filter. Incoming messages with the specified group will be provided through the MessageReceived event. Other messages will be ignored.

For a MIDI 1.0 device, where the ports (virtual MIDI cables) have been mapped to UMP groups, this class can provide the equivalent of a MIDI 1.0 port to an application, ignoring all other inputs and operating only on the included groups.

In addition to the properties and methods in IMidiEndpointMessageProcessingPlugin, and the MessageReceived event from IMidiMessageReceivedEventSource the class provides the following:

Properties

Property Description
IncludeGroups The list of MidiGroup numbers that this listener will listen to.
PreventCallingFurtherListeners True if this plugin should prevent further listeners from processing a message that is in-scope for this processor.
PreventFiringMainMessageReceivedEvent True if this plugin should prevent the endpoint’s MessageReceived event from firing if the message was in-scope for this plugin.

Functions

Property Description
MidiGroupEndpointListener() Construct a new instance of this type

IDL

MidiGroupEndpointListener IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.html b/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.html index 7bfa1f46..2116e7a9 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.html @@ -1 +1 @@ - MidiMessageTypeEndpointListener | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessageTypeEndpointListener

(In progress)

IDL

MidiMessageTypeEndpointListener IDL

\ No newline at end of file + MidiMessageTypeEndpointListener | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiMessageTypeEndpointListener

This class acts as a filter. Incoming messages with the specified message type will be provided through the MessageReceived event. Other messages will be ignored. In this way, the listener can be set up to, for example, only pay attention to MIDI 2.0 Channel Voice messages, leaving stream messages and System Exclusive by the wayside.

In addition to the properties and methods in IMidiEndpointMessageProcessingPlugin, and the MessageReceived event from IMidiMessageReceivedEventSource the class provides the following:

Properties

Property Description
IncludeMessageTypes The list of MidiMessageType values that this listener will listen to.
PreventCallingFurtherListeners True if this plugin should prevent further listeners from processing a message that is in-scope for this processor.
PreventFiringMainMessageReceivedEvent True if this plugin should prevent the endpoint’s MessageReceived event from firing if the message was in-scope for this plugin.

Functions

Property Description
MidiGroupEndpointListener() Construct a new instance of this type

IDL

MidiMessageTypeEndpointListener IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiService.html b/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiService.html index b3d519a3..e07019eb 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiService.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiService.html @@ -1 +1 @@ - MidiService | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiService

The MidiService class contains a number of static functions which enable working with the service outside of a specific session.

Static Functions

Static Function Description
PingService(pingCount) Send one or more ping messages to the ping endpoint and report on the status and time. Return if the responses are not received in a calculated timeout period.
PingService(pingCount, timeoutMilliseconds) Send one or more ping messages to the ping endpoint and report on the status and time. Return if responses are not received in the specified timeout period.
GetInstalledTransportPlugins() Returns a list of MidiServiceTransportPluginInformation representing all service transport plugins (also called Abstractions)
GetInstalledMessageProcessingPlugins() Returns a list of MidiServiceMessageProcessingPluginInformation objects representing all service message processing plugins (also called Transforms)
GetActiveSessions() Returns a list of MidiSessionInformation detailing all active Windows MIDI Services sessions on this PC.
UpdateRuntimeConfiguration(configurationUpdate) Used by client-side SDK components for some transports and other plugins, and by the MIDI Settings app. The format of the data is dependent upon the target specified in the data. Use with caution. For more information, see the config JSON documentation

A note on the ping process

Pinging the Windows service uses the same mechanism as sending any UMP message. The actual message sent is a prioprietary message. (At the time this was created, there was no standard MIDI 2.0 UMP ping message). The message itself is sent to the diagnostics endpoint in the service, which is implemented like any other transport. Therefore, the speed of the pings here and the success of the ping process is a reasonable indicator of service, cross-process queue, and client API health.

The diagnostic ping endpoint does not understand any other type of message, and should not be used by applications other than through the ping functions here.

The ping does not tell you if a specific transport or device is in a bad state. For example, if a specific USB MIDI device has crashed, this ping message will still work because it is not sent out over USB.

Here’s an example of ping responses through the MIDI console app

A note on updating runtime configuration

In order to foster an open plugin ecosystem, we need a way to get settings and configuration for those plugins up to them in the Windows service. The way we’ve chosen to do that is JSON, because that same JSON, when not transient in nature, can also be saved into the permanent configuration file for the active MIDI setup.

The runtime configuration update should only be used by code which understands exactly what will be done with the data, and can handle the response which is returned. It is not a general API endpoint, but is designed for components which will extend Windows MIDI Services.

IDL

MidiService IDL

\ No newline at end of file + MidiService | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiService

The MidiService class contains a number of static functions which enable working with the service outside of a specific session.

Static Functions

Static Function Description
PingService(pingCount) Send one or more ping messages to the ping endpoint and report on the status and time. Return if the responses are not received in a calculated timeout period.
PingService(pingCount, timeoutMilliseconds) Send one or more ping messages to the ping endpoint and report on the status and time. Return if responses are not received in the specified timeout period.
GetInstalledTransportPlugins() Returns a list of MidiServiceTransportPluginInformation representing all service transport plugins (also called Abstractions)
GetInstalledMessageProcessingPlugins() Returns a list of MidiServiceMessageProcessingPluginInformation objects representing all service message processing plugins (also called Transforms)
GetActiveSessions() Returns a list of MidiSessionInformation detailing all active Windows MIDI Services sessions on this PC.
UpdateRuntimeConfiguration(configurationUpdate) Used by client-side SDK components for some transports and other plugins, and by the MIDI Settings app. The format of the data is dependent upon the target specified in the data. Use with caution. For more information, see the config JSON documentation

A note on the ping process

Pinging the Windows service uses the same mechanism as sending any UMP message. The actual message sent is a prioprietary message. (At the time this was created, there was no standard MIDI 2.0 UMP ping message). The message itself is sent to the diagnostics endpoint in the service, which is implemented like any other transport. Therefore, the speed of the pings here and the success of the ping process is a reasonable indicator of service, cross-process queue, and client API health.

The diagnostic ping endpoint does not understand any other type of message, and should not be used by applications other than through the ping functions here.

The ping does not tell you if a specific transport or device is in a bad state. For example, if a specific USB MIDI device has crashed, this ping message will still work because it is not sent out over USB.

Here’s an example of ping responses through the MIDI console app

MIDI Console Ping

A note on updating runtime configuration

In order to foster an open plugin ecosystem, we need a way to get settings and configuration for those plugins up to them in the Windows service. The way we’ve chosen to do that is JSON, because that same JSON, when not transient in nature, can also be saved into the permanent configuration file for the active MIDI setup.

The runtime configuration update should only be used by code which understands exactly what will be done with the data, and can handle the response which is returned. It is not a general API endpoint, but is designed for components which will extend Windows MIDI Services.

IDL

MidiService IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiServiceMessageProcessingPluginInformation.html b/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiServiceMessageProcessingPluginInformation.html index e15b9d47..88894277 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiServiceMessageProcessingPluginInformation.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiServiceMessageProcessingPluginInformation.html @@ -1 +1 @@ - MidiServiceMessageProcessingPluginInformation | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiServiceMessageProcessingPluginInformation

\ No newline at end of file + MidiServiceMessageProcessingPluginInformation | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiServiceMessageProcessingPluginInformation

(section in progress)

IDL

MidiSessionMidiServiceMessageProcessingPluginInformationInformation IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiServiceTransportPluginInformation.html b/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiServiceTransportPluginInformation.html index 0d7e932a..ef58e564 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiServiceTransportPluginInformation.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiServiceTransportPluginInformation.html @@ -1 +1 @@ - MidiServiceTransportPluginInformation | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiServiceTransportPluginInformation

\ No newline at end of file + MidiServiceTransportPluginInformation | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiServiceTransportPluginInformation

(section in progress)

IDL

MidiServiceTransportPluginInformation IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.html b/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.html index fe28c1d5..e0d4a93b 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.html @@ -1 +1 @@ - MidiSessionConnectionInformation | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiSessionConnectionInformation

This class represents an open connection in a Windows MIDI Services session.

Static Functions

Property Description
EndpointDeviceId The endpoint device id for the connection
InstanceCount The number of instances of this connection which are open in the parent session
EarliestConnectionTime The date and time the first instance of the connection was opened

IDL

MidiSessionConnectionInformation IDL

\ No newline at end of file + MidiSessionConnectionInformation | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiSessionConnectionInformation

This class represents an open connection in a Windows MIDI Services session. This is an informational class only for reporting system-wide connection usage.

Static Functions

Property Description
EndpointDeviceId The endpoint device id for the connection
InstanceCount The number of instances of this connection which are open in the parent session
EarliestConnectionTime The date and time the first instance of the connection was opened

IDL

MidiSessionConnectionInformation IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.html b/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.html index 14c74243..548f4cf2 100644 --- a/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.html +++ b/docs/_site/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.html @@ -1 +1 @@ - MidiSessionInformation | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiSessionInformation

This class represents an open Windows MIDI Services session.

Static Functions

Property Description
SessionId The generated internal GUID for the session
ProcessId The process id for the session
ProcessName The process name for the session, captured when the session was created
SessionName The name of the session provided through the API
StartTime The date and time the session was created
Connections A list of MidiSessionConnectionInformation objects detailing the connections currently open for this session

IDL

MidiSessionInformation IDL

\ No newline at end of file + MidiSessionInformation | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

MidiSessionInformation

This class represents an open Windows MIDI Services session.

Static Functions

Property Description
SessionId The generated internal GUID for the session
ProcessId The process id for the session
ProcessName The process name for the session, captured when the session was created
SessionName The name of the session provided through the API
StartTime The date and time the session was created
Connections A list of MidiSessionConnectionInformation objects detailing the connections currently open for this session

Example

The Windows MIDI Services Console app uses the MidiSessionInformation MidiSessionConnectionInformation and the MidiService class to display active sessions.

Console midi enum sessions

In this case, you can see three open sessions. The process name and process id are on the left. The session name is in the text on the right, after the word “Session”, and the start time is the date and time in green. Finally, the list of connections for each session is underneath the session information.

IDL

MidiSessionInformation IDL

\ No newline at end of file diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/service/console-enum-sessions.png b/docs/_site/developer-docs/Windows.Devices.Midi2/service/console-enum-sessions.png new file mode 100644 index 0000000000000000000000000000000000000000..2941ed89ce1ca3ad56e4a25934a78f9fd9a35fc6 GIT binary patch literal 105542 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

eIVsYOmaS~ zu=<8e-Qv^B@Zrpo5(%2#YbcY6)%2JG-23++W<>2DmwvSRhF*JY#_b# zCIc+UD=6qx&i?S>ioX0W(zRkyALY5ir2ThJP?ne^FN zCz{>wC%-kXMcK$~dg3eKoR=TO4{$LklFIt$B%GK9&CebW4-1oW8aSu4_4A`ysa*uk z#mZs0Suh2g#ACKCh54%SGTXKoBSaMUeSlQ$ZEc#fW8YdxPcXm+WBK7@b#j81G0teJ zm*n}=yFu_r6^LOgJy%&~P7&6h+I6R(&|4E?USri$DfxR3vQO(FHeP`!WJCCM-~gES zRlkM$wKCW78=_VXBb`on`!Y4<0Z@82?d6C!Jy}!^Ni+EW93aoqDYP{NZmz82U0^eP zS)%m8PC=pOASt;F>;q?oP_oO-%aaHff`b5Jr~iU?`)B9@#>bp0L3M@ot7bY#iR?ORL;_0SdGO6s-rK2n7JcMKdNWJltk=sMfpaMidVU zR#a~UE{@|TeJQ@0m6b)i5EzYsCJm?sG?%BkanrpSo>R%*v(JT6dVp05X!hsmc@J-s&-Q|IJWSUBwC!rzh61o(>IIypFP{)_k56*&E%a!^qCp_!Rk9>@?Kd(zazH#Pb|&PKCY+O_~B7=Ue2*9b-4gg_j# z6Bdi5t%DEpjM<(Mf_GbL6H3%PfAqi;DSHgpFDMJydvNY3aQokB#mk#T4I6nF#bxa- zq-0Ll1c+z@z;~RCdIc;16z|`=T5$A{u~lF>@`-NTZ8cT*J88(t3b<>WcO;|7DS>J2 z(i;b|^~ZZN%m5@Y^C&vldDa}$m2J`v>qR3FKxSv{GBc$0+YU|3?Fj>k>nnZ*2%Af0 zrlD>mHCas;CiS)-fM1?rzL6shFQ?@U;BZvE^Ip0rm2IE%7;(9d%522Wc7mdBiJ)Fe z0f@xYZ$o+dSP<(U<0b4~Vo96d$!|-!u{DE1nt4Soa`H6a@BX9^_&HqYJI~Uz-JC z0Q#CP2_FZEG@SHC{{v4P7sJ@ zpPq8Q6kaw1Y&J?R8$>}3`_#Y+(}Is4H+UOBc0x;_$cUXa1gC;mK?NL-z4!WimFu_^ zz|;8P(|zNWXevA$lGc23UlJ`hityU^U+=shEO@V96o!I{5mVzlR_UJkYv;i-VO^wJlx^8s(u zm+wa$9iNE6z?bhwVLSLnv1g;7U3q(}Q(_bAM(%`fTEegm&=5JoPSYVJGOu2ITgq;f z?3h|cnobKUZ%m)1g{Ilj+Dhc!Ptra=twE)exiaPoKmpbo$!+IWyE41Uj?;t%AB;7H+ zC)FD7@a_9!WsQeH>GG?hNE3h}_%FnA(AO}A1Zyz3t_alJfjor){oWw{5muC6M!nZx6L=4AG_-5nkp{Hc-h*E&Kmb z7&s`eE?AFbBf7Q(Cl#NrTrx^2cP7Ea$8Su6lhg8}2i?cB3XGFE89Et3{j8&-V3Z9D!;(7VIzKeKQ8Hb3ia8=DN|A;?K02qKmeyRv|2@TjS>6nx7Bxtath^=-Hn zeO~7NiLj8gM9={d{A_&m5iK1BQP7kDB7p@Ai3c$Bc;Dhbx`YgMfzFDrz787c8JeAL zSa8IKv@1;1G8gkL>r2u)cf3U9>f4u~7O&@F4jlyb(?i(;^v@z`Vg6`TTb#?i+@MwD}up%q%l+uFCc&YH%$&t(b-!;pUjDInrsKL}B z(qDQ@b@Du?VhEo#eLVB=U8zAnOY9cJ;H6-ZtAK*oef;mg)$gd*2r^c|p(J0dA3v+3 z^yn}%NLeeY=Pf!VelZpAn%8!Rh47Wi*(hPY=+((amq$rn{PBWCZq0KNnX2pT7>8Zb zhPM0lI{vj$a8>eSKEA&f|Bvb60Sq3n^G^Om^Asfe^J{a>qE;~amkyqNPO6_(vqs!sGM@Yn8EY^vDeW5iF?)OVR&)vj9p9@ z(jJvK@$uVxm>ldE{T+mDz<$?0_~eSX90~?NB`nN3xW3C^$wC6Cdvc*A;ivwZ^ik9TT6_(wxXc%OdMkeC4VnFtgHPfGy zI5Z0No=cT;pL|zRq7SZ-DwX&EK)3wiw-1>Z_51g;KrY$!;{+*}cPNy&>$t-=j=WEP z%EDXdyFBUG79-$w$p-w+d-v|v-Mep174NzZym;t=&v{%>iq)wYv@%)(}4bDLKiZ&D|!>mA}n{Ql%EpzO@ zV`P*KiYHL$Xh};;`%xy|bd4&SHUw1j&*bG7N|dVZlsSRIq6QEK3h-<9K=K6GHE@xg zo#(SVxTwM>|1PdenzW3e2$XH0S_JFKuc*Lc%+W#hcAfEWb5euk?Rbl5Obd-BI3=U| zF_cB7v{q?Dr~y=AmhN5BeycEdo`;j$V1d(SF=6xR#&fH{iOXs zi$CVe#b}LBvzF=sjSp1z2oa! zO)L9BU2+A~Q3k-)LYmUBDDxbvt?wL#Q>UZH%V(WC{@H)5GxML>%66RuDNRE|Lt44# z(It&LcVyou_zti*Pr%@`uGoMDjRh?0;E3hG@?*+C(nAw;OlB%|&VFNi4P69y%iM|z zqn)kpodV!9_)XdF;;i!JTV`fXI3Z0Ku5fURvRrQ4#@d#JsKchdxVA~~r4C@RPN1S( zB`e8nfmE#DX^O_Gzecl=}L7KEd>Z?ls9MN>P;))gvaE{#NrAuH(*xb?V( zF-G+iZKEkmzw?^zDT62;B|y=}CMF7_3B09MSrpo#K?8g0WR1IdOg+4~FWE60z`Ri) z_vuBK>xYPMODLD*jsg|}WXZvxRKy2(kGLQ<%{BW3-dNm2*sJ@_6}L(Oj+o{r+1V{Y zId_35XygpL@%8IZs1HXj7+Y8roN}qV4U){~=WA_RnSmI8m7UV=liE7*m(+kmytgBGhTz+QT>_=P@QFjT8j3e){VkH)hPpvEtM@AhLZ{XA zk_wJAlLZn2Hkz%Im}T?BcSZhu)g%=%sv^H zvAX!^OBpvJ`e?7w@Fzvd+=)5UtpAQ5JgOPC^BPE{H~qR76%cLumrj)JiDegSt#ul_ zpa7PABW7i5xx2NDFvI~RdSAGB5lgG4R|y{dI$pO1N$a>Gt0Ed^Fa2mUdvE;+TWFd8 zVKVp16s@kq0cR#Pi~(9T>N6?C%|Mum2C zjFW*2sA0h+Hsx2Q}ll=TUIR9jCIKon%%@ zpa5Rw=KCO_qKRX!pjOoCGQh~^a0P8Gwz3^!WZTDJu@iq5xttiby61NQQdQ^M7tgR< z@0VKQnJwo0onyS0VRUgrqc9;bBX4CV3~wxo5Lqw0K7&^8j?~ zgIaiYFrN(gl=$lgEeFzN_eeM?d(XUlup@LzRY#@>EmlMwFApl3sOOaTc*pMuxDmTJ zB{Lk{_I~=5%-}9!1xKnLxul78$o@sf-h2+I7{eHkUtC&DCSbpjn(zx^VmO*H0|qxg zj}mAFP{9B|xzgbjaA-Yf1|ljEu>9<$RYGlLt$jv2{KB!V`OJAcEB$(J_yL&U9YHw6 z)%h;d4gyAf#v?AAKYtsrFtk|U*q@zSS66pkwNPR9+4jPP7)qe;3~vz)Uma`wcCE=4 z4O;6!*@U#sL8dxWFp4m|8OSa9K?H2gG)*;XFdYjA+@@wswl?yfUDl^CHenj!8xzBd zixxzIuDrx{=fONfKS1rwMf+ku5`ppNf)wMT{UF+fpsWPw$3iXj7qd6Zl(H)}TKfRA zB-tkY3_At_(u-;E(}sD&e^4n6jxmWUA2s9p zd{WYF-rlt(tW$9+2y~zJ^@+mO8Vlz^c4T>TcjFKaL{9yHW05{kFy*XS- zN2n%%;-(3r)~imDKwz;knc_Arp9bUtH#|1qu7&ajIpnmu1I}AgGv3M0icM;El^M;L0}!wFN3;zt3KXyUrtL$X*?i}2%4j5aT;VsbGL(v(A$36 z+ra8PyOq}76%>d}Dm|OA-g^$QlEK@YNdqZy+U7S@j$+GRJ1JWwOS{S5UJSD09#mPJ zjcSEae8z${;kgv0RE+fqs&Xvv7Ylwu66LNw^X^~X^b?!__%Q1Ta&}3b&2XN<=uMrm z;kWv9qH9W9@(noC0c9j`+u9eBUDe#b4gpr8c2=`;z3`=Tr?rl*|e3{X=aQn3kHo_+(n=Q_TGnggxL_?rHBHO1D_0tSs{1F)>wrG}wp!cOx{ zavOGl0P&K`u^k>4gzlJ-&HGnL;3&Mwy2sfH*goL7xg~F2>>c;yR1T=3WyW6~F~U-} zshdQVon;jpO!=D)6s*M*Gql>u<6mIe?{B8YOY|!!D4?az0JY~9Dk=s8ND4VnKsTWe z96V@fZVp3x_xcuUX=#y{Q+F)fxM1LVkn3r*lCVxvg0SkmFS~4^8n6mls0A*+s+lzwlT3S1?Vp zVLQz8c4wg&aa&h6aw`Z8en4S9*SxSMEF)tK4x%xVDkw!XK`gafNYkq()*jVr&fgqh zMifM=EQ zUCQTa#hl79KdmsykXdj*)lkzrfsSvL2~Uk+c8P;ojf@)HI)x$ZnC}wiU{YU zkk_H(o@OA+4_YlvE&q~}mZsXuiwMv*6(i%Y*b65PT{yDu%LD*|6;La|K(0eN01?c1 z|GvjrT~qV9(rhnsUJ(bVOnopl_lxuA&(n^P$ccol7Uqj`z9^NG&<#R9NKJ{x=#5yA zGt=^Ru>bm z%-^;E_t$~sFR{MoK1fT`1ns~wv%r` zlI&7Xjspvjn5W)D25;}yi4eYhUj%6A2z1jA0)(yIqkn(z53vTKpe?u;W}4loz~n8+ z%6=-V{;A9$J)%b#{?IqzrIJJcR@(D*{1WjdaI{1&eWO6P4OGeBs8 za!93X$u7YVyXCw)55)GOFlPJ(S+=svqtYbCFbecvnv3M3;6nDD`I1>ue|ay^uD^Wr zzqO?QVzvJV-qLOl2?m9nc9?K)3HW;v7D(H4z*J5-;LdE~exV-MtG^UVaA8x}f=O`( zXt8SzOiE?XPm+wYZ4Mo2N6zRjE_IPSv`qhvxKj1|Kd{38Qg@9~a(-RZ14aeCy|8(i zQoi#6H=jq2)M|SkZ0Pyc9O~h-czRHD{ewtcvHbFu8Fi0s7^ZGJ+7GMLQvFATp9316 zK7INO`6W&xlVo`&T4Tfw5M^!y<03GWLdQQJ?{4;+RRTHKPCdEuHXbyI4?8Bt(x~F1N%4(uY9IMEmBxZ}ef2P5**j(W-`-AX#<&su4JlEC6Q!vWKMfSJ z>VgN3+$l0=Oc)w9TYt^UUA>HEJI^H|%`ic*6xCc>7)#$$FM56+FT3rRySBfbGVQ(O zQWVyv73b-^46V{riler7#_EV$RWyeBE;JfGJRdhs-FWV?Y=h>-o1$n$WZ zC#DpUL^cm7A8a3LfGP!{Z^;q2kGz^H-?sfn?|g6X!e~y#u z6|bOueh4jXQURe(!(>3EySclA-XM~maQDI*9*@oGo(ebhzG&nNvy7>qU#85#HN6^Q z?XnV+Cd`hx?AY?JMmQM0bEvB4;qiD-FWpLS-mAyuzQV+EPG8ofVc2Q!Hs#*l_SOrx zlq;@7ZpCn-sVq)a^K?&cSlzV~=<1UH4;oj}`*6 z0s*7Wx*MMZ!kD~xGGD=BCt|z^7mZIb=zk|X=RQfOP>UYhbDUEd+Jx}Mk7RX}%r`w+ zDh6#%zaGJdXjE4~s2Bdx^Oi-NmML@wa*5x0W@Ecowz=MbA10 zFl9`M#TZ-Lm47AF4r<59qPYb@3KtdIjaLgxaS?f)u;&(hub7*%xo<&dl6bo*TEG3^ zyKmX8$Ca}_U3~L^`rL^N5$N%c;niEMN=r&WRC!+`OFc%;5?&#eLzi4E3HLni33jX! zRe*nRI{Rt2A3SGIy}5VtMRC#NaUMzvFqGNbl!EHro;cHFK=v_pOV!!5;=H2 z;IOAS{%thj4iyzX@bjb4T$x6ei6ip}1`NrY8c_d-!;?)M+Pk@ zmuk$eD62U!i^x9?1U8%2s3$mG#U!L~!29q}0F{^8v_~JRx(z>-j(ag4#pZ^ks_peo z%Bq{1j~x1gQmU;^!Z&Q;<`ie~vs22ti}y5~@9QkKf6~&+0-Lf+OzPs*i23mGqJEV_ z)mEa4RQQ(=HW)yPxA9rq*z0!1Cn8?C82rqMmERiB^-uk(Cp;)isfc&O)DU?#@5J0e zOm(aVc}4{eyM=w6^u_~t`ED`_23Seh?7FAFJpE?FoTHj2bUFF9E_7D!&iD`f+(yBg zfwaY%YWQV=4m7;}NBokcg_H%&!dk*z-gjI(z@*i6_LGP+m33juto0Uxct(2U=g(qg zKc}48g@7TEi_%f-2e-?XOsuxcB<#u(60dC#oWebsyWk+D?wRYiEo3UH+iH-%InRWS zDr!TBh{8UgCgA35>{%U z=j#z~s~E0FW0)SBp`vtj|JWW6+xf76f_Nt>5zu3g2Ys3g*qda;)|hry^QOz*#Uxx@ zhiWUu3`lL=)6~ZZAzo;%`BD9=(QV^2x!Ox)#CEN=ZYs$O_#tkwwkB%(*IgpI5dTA} zsu(PJ^_kSpQ*Y2`xt)RgvJl|}yZN!_v&-<=ZojSh{cN4vW-Cf}OVQapE-D;>pKI@< zEXVTjV>>UFW7l|9!WuH1wy)(_r zE>u6pui+Aonc*^2Tnhy9XUGuj%(V2Huv9=D4Nw=39C{sPIEL8LaN3vWxWXoW_CWm@ zuiNFq7%n;$e{?jVtlK|oXR|wAQ4EL1Z6@NzbtcFsU0&aV)ot-4vo@&sD300UU!5zO z`g2yT>I6<_Ax738ydAtdS6-5OeHIS^J#NH`j)}&u{Se_^n_e@c7AB#HqyPX{3fA{^ zTpjDJy3mx5@qSAwNo?GfZ#bT9zOSA6FauX^B;P?S96Qb<)d>~Bl>JP*yXxOBA1=)* z0$hF@MNCw0KeW)}weFN}bK}_1!fi?VhuG;l9v8)v$1-QDSFE_RA{PgCVg`ofU?=743i`FVv zxm@y!y07_cD_z!F+5Y>eLty;qzn#e@v9kf3J|l;*q-&Y5Ho3%*7r@G4IgSe>8P>#>qo%N8)bXApo9$j&;+ zcZ=U__={}D`gKji#n|l=N=eC0Q+>{a-n28mdsi#uBJ3mr)JN5q%6qnY2!}%Cc;74d z&LHd)64X^U&>Q&x4Z;{U&h@SFYsP?(?{yM5u7BqDwbkAssx3aoNR)}Wr2!>2Maz6*w$`VP~+z1@?!s)3e!DPGhbE|qqS#}C^1@!L~g<)g`d zC8y)RtR#l6#-G<$#}XKK=0)|FrJkUaUaz(%WcP6H#{o?Lf!{G)QF=t_RZSD~;j>G< zvn0a=tT6|k=u_l^F`*=e!gtynD8ex>c+rYqD}ht#edjll$Vy@+Qp$hVmSUJlU}su)N7re zDz2S@FR(tpX3-%B?*7A&!P#7nDQI|bie?AB9L?=4Pp%vY{Rrx5(7h5{$_}dqH$-^9 z>872~-5VZGux{oA;niU5;99wli5V@;uzXnlr$jlY=~VUY?h{PIz{O*7LBVJ0nLc|v zRB}K3Qt2=9F`1=Td-nUS_cZ=Uo{ZJ?~2U+(3?8bskU{8`4NN`KlOMR5k zMwTEYJbsQBwvZ#+3gW$=^wua^T_zz)(rpVuajHBwqG*{hWCdssrzk`3w15Iwg6UWX z`RfxL;mxv)b>+wPE?KcP+{|`C(wY z)6PGMb8DXRXpqa8guBOeE{K2Iyvo{2%u>?DF6c$tFteN}ND=0VLJDF#D1RD7>MnrF zDoS~)`*)wx8^VGyD6Z<)sX-HylfyI0sbYeJ;fhuACKa6diHA#eS-jz=QC_PRl3g1f zC95u4XYR8$Yc%Sz&iKcCc>HuoD|0Q_!Eb@CwU6o0^C6*y>e|?~4}q)aE=_GW4A0t} z)$vQU&M`mp%gtvztTkm8h|0l&Z{vQu%m-TzwyJ4^6KYIu5+SUyyp0&pp! zp|8_pgYD3w5GJEM*yL_!Jrieqy zNSU{uy#oGniM|*1^{X@4XI!&3FgtTYMa(*?u{DTEKq$qsE7UD z;u}P(W-T`rxYzPenXT%@kcBSTk6)n3AWrn>7$H{IM~{K_*_hWm)6#`&Otpb={0l5j zJk%M&)?4oBcIxs@!u3r4qMd&hT)J45$8>9yms4uZTdA{*6NS`dT7F5G05#qAtlqtL zA+o>rEeRU-FY%&pSHlqYQU4s0A%vfy6swtw{e>f^ORSgLqJw|?DEK`c@Pa}6(Ahut zwSX6bMf!8qRAFVQ$jQrRda9E(68QZY?gAdE9~B*fRh~R|6}DS&K_HfoPwt4@sDh%U z67F97$-HtksuCr;_}&BDEy(wGj^Kf_|HdiVp4`3P1bjd>?)3kyw~((HejStiXcwWi z$$JZf?lQ{`*=5jfHUfw3epw7{kCH9N#29TS&ykZA;)LmjWgK)#(l~H0=(@&NHL>yl5K?v;z(1O|DsRxkj7hf-z+HH?$G3PHgsjNaN^pBLqF6;$e@?XGV6v`!F{1iAC z_}jk=fyBfmCgy_%`dM1rFKAOpPftHny6*@FxZ)xISI~M$;{6Iv7PCMv_)XA;a$17L z!{+++>zqn{W&Dny;ok1@pJjgasY8z06a6)++P%6h)3 zsaD<&an68@wwsy>+eFZNL>?$pM%{jFlpyEU)9#%u*HIqI2H65+KAAF=nmDvODnxVh z>thy=^`CbECRf~3u``4DI*aG{+!w`oR>H*`bNjxjHO@OV2Ghl4f_{3W z>E8iJb~=0fKI|8YH&s0dviL^OLhn$tfUgu2{7cBEogKj85;avVXjwk!sOaL~y*l{y zG`_M3$xx>HZ|3>G-;Ma+>tUo__0s4g+Po0$`>^~eqH<*SRvid`oBNSVtk2^$Q;?qV z_-qY+R)ZGsMGVO_zq5}6_c?>)C+ympRljUG#A<&+&HAnI``^Wsv6RwOqo&5UlNTX1 z(IJnndT!6R+Wyezo9^Lka{XN< z(dHKI;M*w-e3!1gpK2=S+}kxk8M*bZRT10Wl+6MsMOrm(#oz;3GAu0$o}DG@0key z*1u{G=0D0Xch5=1-`w0tSxj>lF>E4vN>%11Zj&L`_eYZC7vs$#{Kj})M_I|eunZ5} zPs+m1sP^u%${vI7b!+PXCkx)?GJ9D)4{4X3=w4zLP8nzgYFRVTsoPEyKaj>?fm!+*N9T(+VJ_F= ziw#o<0nMV$X;ICML?+{Wy+zZQ%o)4RKL*hux8_U#4TOuBYww)Z0S7T zH33}cx*gTCwqc-x#R}KD<5^^SXYZcS*@9em&w$>2nZW>?S)fM|EtEDk3mf`mCa>JDpA4jzHoh=TjCWYMEb0~m3wQi9u<3ze;dyah zSkr0;fyTZ&8TD?*(Pq%ZDhJqd-ge_fvI@N5Mwd@!v$7o(2*t4JdCqL7rV7n{BEePT z3qf5elkc5zZ&sCQZ@>2nHy!b({4e6(1FEUDix$PoQI8;sqKKe^AR-_F(!mNMO}ccH z4$_+tAa+EW(mM(WQX^ezR0O1V0)!$WH3Sq0B_YXOTRs0h|9fwYckdYQj+dc_V@P(g z_x{%UR+)1y)^f&~v#E62m@e8p7P$z!*66S6ojcTWFlfwVKC1u06y>^6>uR|tHX>sp zSaAjpsrUB8Tlmm3e3*;K*B07rWNS-H`43zw9%#HK;J=a6vQZ}&GQAH`kFQ*R(JL#x zxI8BJ8rFi&IhVJ*@|AiKh`rATl zFUdErn5g>7nzm$B%3YKN0kpRpL&tplpU9mlfNMrvZ#hrhP(a^3q_%;qkL*%PasqyK zGQg@-DMB7KxdoN+syNwcGSX4uw|D6@&>~eA=HBKpzjJukKs{@$dXHV~HLi%o&F}Qq zyZ8qQ8broPPZLced8o3Gr|Fx8m-l*tU3AWlkzXd$N_R=9 zM0oid4&Isjpg^AvFI^hXy)$>@-2Bmqj5%+!5FZ-vWnrr`c-?&dKj&^(f{nSWrm( zncjq=frRD(wKM;KNEl`T##47N?EO{r@>hFm+oN3ZpKM%&%|Q(TxVeaFv4prw4{)p$ zS0hgDe0n)`-{$(1xjERiMYD4E_*BWn&cDlg5FZ-R>+-H&-Tk~$`}bpJVBhZD;o_c9 zmY@7w%=KOL*j zn8>wm#J!p1E1q?1(8MvzfZHXHMar>I@$U;9d3~^|D}~zab_t5NEp9JX6e=+Bi{+Vx z%Tf~ety5*A-Jbb{I;4xqaFla=d-VznhkEY;ZgQ~-q8)lUe+@)_;Z>b&6B)DYLcF2WKI~|BLRqf+<44fe)Irls$@0u3teFyz+jTd#OU#UPHza|y?% zqPQ_!z4h2I*+8}GpWVQ#D&I{HHRt7@eUR><-aQ%pZI$6?#y8s6O`;+0?J{|oWcNl- zPZbjDXyi&vZ+^YBSC(=fC9}AG83F-K@XLeghuToFv6Se(6!3m!ane3>->yWkx?`7y z0)Bgk<0e`^s|y8?%zv3a=>$>V89qKG5OAodsQBGrEo3YAa2T0hE*)6?mH4j$uAeP8 zBqPpax-3$(L)E>wBPELVOq&KO zV7j`J-@e5yEz$_31(PG0D>6 z5I5a0i3M6coZUKg^9yS5hMN^eHF%<_NQy=zS1O04?8+w5aD#iWD_^DmRWw4r5k2vgla@ni4 z!YOR)U3>eYWk|O5$O;`Ov2?|)TfZ<3|6}_etSJ(T2$(39x*`M&vH@;tp5_A(vw(~3 zRVl^Z$v!^KvBNgnJ#5K6(*WPzb>A&ysJN`nQ^kRM`$$R5G_X|v36&xH@BXjk@c%!( z+x<*i6;HB=HWdRC2sfdZYLsxaI1I3BP%OkbBWBm`yTVH?O*>o-hwdv_Oolped)YX9D?sub|1(PZR4ms z;`(>j-*5*uAPYu=z7J5YP$M^f8?_byX&^yVjRzzhrRU6AWGe0QuZ(i;+HV_oeXABP;gGDq0&!I#-aWE7H$g`1xCR}DI0cEN+(&K)ZJFrlH>@>?ijwX_8;8MMQaDa1&cQZ zg=zN+j|;R3YV2yrZ6#eTE!8mE2)cgyUv-~Xg#V4|!No&~lCEh0vNAf0Pu?#h?&5xsF z-{1HF*sn-&i#mX7p(~5dkPYhNY#Y069TKRCaIQ z3Uq&j;v1jrI_GSXk-4YfLgZv_zFzwjbKf$S>jfG$%@}jE(M*^me@TjqDkM0Tng?Zm zlpHk8d9raK>vZbRGXUBtC~w4f@GmwQbge)PCA%W4thIo`oT2|bYO%Vl`*rRJbIp6W z2Xiu(uV_oHyB!0TuZRMDVCe4(+l;d6Vs);wej}|;Yy$UJn?o2|^MqdKmXEb{wsiDV zNN9*f8eLzF%O}{;W0HN{7qqP}$leh9i@N%#BioC5NL1?7^M=sQ>Zfr_y!Ly-V#irY$Svb@lfNrtY|xk2N<}*ei>A8`giUkU;oC zc!&Hu*`;7-=rQYZY$+;7zu$jIt$GzT+hNILgzkFJaz+~cez*F3R_&FYUNdNY-eGj4 zx@7V7h?3b*W>QzNK!{yxg?F=&kzrt`JVqRXRZ7}`bXd6v`KkJ;Ly9}ms`Be1rvJmsEC3+qkg0*5pW?4cuT2H9`}(Xf`zJL-sdWwZ2nBSZF)oIk*1OTCeJ0=+W0f;qCqL`Y}UW3Uyp%8a=C4RO#y5?SpRK>Cffc?}Yg%s$FIClU>No^Y7Qtrw&URnEgq>pa^n^uyXlDTN z?!i>g*F3YusYBmdxRME2to9sjPJPVyBbL4;=KX z_=S&;y&ka^Ii6oRM?J?vVoYZ?cVA9Vw=>i(m!Z&&phbi()pu_9KeO<#wa9e?1vlfZ z)bS$6ww=ZInpckarS-}-&y^Z+_9wchcGGF=u|pL?WTl)(!m=`%e&at*u)ArBNv<`i zpzmtdes7+kqi$9A3oF;C&kIW}cpuBQ`RHnIZ`<4MnYc2Ftx4!+sK85^Qgik1G~Xj? zV1D0*P%J^3bnN_15{21eqFdL{b$V<5d-n(O0YB-j-<0{|_ftoc2^X@RrsYvOX0q@q z`~z&7D|b{Pu8t`IHdv2C5APeyx8PF5Bc*k62ujm~6+X$d>2afyrH$RV>Y?-8Q~?&r|cPS~X~LnIRx;3!D0E z1Rpx+Gg11=u{+gyEQ(_Ys z-^=ST)R~-!i#HHlIU;#0!o%FgQk_0qih&XIx%VU61noutn3w1V7hAF=FcQF;AGy^xe z?M?zjJ0@eT@uEck7(t^^hIP`zrDh)w=6RYu}Vf=Fmv`o;f!rRS;nk? zJPV{I0Mb$3Vub9#l{?G^C_4rE0aUZr7-g5_mzeBavsN%($v7|O;2L?Is{RK)=vBoG zhx!d4yioi$>MAumrg&qUvevzUYrEO@#-iOf*QU3l4Sn+HDMQ(?X9MQ%oq?)b(jx#6 zW{*D&3_rH4Eu#x?Lu=P23o0bHGsAqh3V9Ry{TwSqDAyyIh?4Sc9V~sJkXkS+shZXEt ze^hFX#*tSi*g|{l(C+i$ym=QNZrn$y4zl`FaODnj-zZ3gmasl^HyK>Mh}GF^6N&5xbgPb}no& zYJndj!6&!!0;w&C~7V@bM-_nbXjMsj$GI6E7j!n(_G=8P^EPoTNgr}PmLt=wxA8>1EYhOv% zqm!e(Ncs-ylHAfum^qSn>0k)?_F#%C-HN>l{<=0afNvPRXWS|Ru{e` z)N8K--zyalOxfk8Ma1U^-_-S`65fA`6kkCVGF!}*`M;(f?YE~tEtS^7``(;JjCcU; zqqR-Z>}}@P+r+VVdOIG~W)><0D@=yPl26%fVySvp3aU;014FyV=Q@b~YtFZFD;>>% zhB+6LVfsh|H&~2LyA+Go56qRAy-s8zvHMjjcKE19ux{okn$=JkmAk(N33450;_$BE zv764Zjkollh^6PB&^N_Q?A9p5k2w68J+pzAG1{&`Us}d{z9+krj$OEszUbSlF6{q( z$K+05JA5KNJv117q&Pg5EZR0}k)CeLKF7q%da;%Gl1~{nT(uevNdvP~S?#(;v_9Cp zzF220Ueu5`e#sQy)0cm%@G?ZdK-BLA{^@?-b4Ca!oarNQ-w(2}5gLv%8lc0${`$n`c5is=w*V^8gWO4&!cU%>{ZiA? z3-J{I=gqP1=OD%oGxhYodwjZ+lT!1z-bGhE7So{jkPv%8gMhU%sf(s* zdQmOCz-8}t-)yYwCdvN&tOy*APy8w&j6>m~5~dc%w3*OKTXV+0x;}0WcsCWmM?L3H zY$eU=7GcK*i)|V=0~$k*W;JpK(~Lee>m=$;PCS~BU!GH4Z4C5bEs%Dj z$|3&)`me$6FI3UI6YFW0Q8!BNF~^^pO{=QKfTz$27&Gs+4x>w+GV8&00?q)|%P~uP<2yR_xqbQ=$~nFy@*3)L5)L zKv>sdao|QKmBh$|Cy5`kyE%5E%R*$^O<*e_k%j=)Ss14&(7$a>?x-lmKgyJ1*2b;c zQC+07my+&(N_m@7O6E^*6Sf2Q-{KF-DcCbjC4rY>7xRik0wy>>E_}(*N?M}Vh9!@0 z?e{{tWY>UvyAy54sUM01ZxHjUxJiFqrE`6plTlH3?_BuWZ+P(U`K&GpwGztQMYWQ< zCwmSy=8pL)nNw+X{Ch5*B4lW0@k?Mphi$dEL*Jpj#wSgvc5NqRd1<4(jKc+Z$>uQYTJJZQtxL4@&y91dE7v&;KNYokZsr(P-vf!ZlcG<9I zFTQvn_%H#gGRa6$8eg=6EvfW-%9DM&LnvP;^|c&fG?M2atG{68{M^zJU-yP<$loE7 zDZza-)wM1>`smD?5w4nC1!Gk0Xp-y87&UoqwU6tI!aua=+4>`h575{C@h(Q=$m=mR zIo#-4+Yz?GM$5vvvLu&dY4IJ*4xLtj_e=OYKsP-c?TJlz80a~)az5Fu zDVp6Mm+r;TD{G1&*(6NtVN{NoW8ztT*F77uhj-Rt+BAoSO~X;-O;+O7=JG5#lRkv` z&$tzI2o(hlimn3lF4sUcLJUZyh{6T9hgF&FEzQjyzy(FbxFS@9f{vJo!Zrsk0+{vo zphpM9@252y1_lPffvu*$iIel2%<|8|I-h3&ffb0vkvt>r9dfHO`^*BQ*o`Zu5*$M0 z(r(@qryweuh=AEs_E-5w@zAk z4sXt!PP)FhWp`+Z{1=D+C**Y)^&lEyax9)IsV$y9x`zmH!jcx2=ZRu~b|~A}apk$6 zReU<=YdID^xdCwQ@#ubD)gW>`ZBy>oXFcoI6$0sHM zM2Dmy6x0%JLJ1&iYU!Ap>rocm*)^uArlr$sRlqK$tjRz|17ZqrQ5(1CSC5XJ&8}3) zAP3kgmrxPbF6ADG2_#%_O!&j(uL1OeU}m&>nZkkFp>GQ_H(T2lUz4|Wp}kk-t?pCr z4{n&(K(fy+xg^%NsE}9A<=4)1xq8hRlLMjhqXwpMpLZy-MB^E-tkt{2IT8z~?tnlY zZU09m4QgX2wvixn>3uH4Hq%z2F)Q40HH&^!^1QTXV!ZdwIz^Y7LHQN^+{91Svpb*WJcBve^e=ZiBoXw@?@#ptRxmnpL$xL({{&+e1&;iLhU=OZx;E223J+p8Lv!0mECXewEhj2*d@9q zUOp0M1>81OLn8u+ca6J9@{Sk;l3=(1v1rQM>tMx3mp2nn`eJ;Soe_;Zj5)YDH(=&i zfIdUsm(6|9e;Jjs&5-dzKpxRqFgjt|-Tu=bCju4e<29~7h5MkS2A(B6et$3fk@u8z zU6IB~-SIdT9_2ojRNQFzSa}bWYjmm<4Brf26i&W(X}(tuKW3PtCakFRBiS9_;Q?L( zaUX5fMR9I7ifF1@ox;*X*-oizSWAzvuPRqhPU3q~3haSLpCE@SGY#0Vf&?0LS!_Y= z@{FKhC_e>c8%!cf{5F>20&5TfKaey=6hcOQ78c)Ct#qr%$^9T1%Kwr!;jtqQl_HXk z$+Y!}aBvsEqftSX1Ao(X!EEP+H)4Bdv~LTN(6$%^_CoC}o7p1vvdFWg1a; z^>m(#<_gWa2Gb7qRh7guDJLZ$JtQo=&wF?KRVZBj{5HcSg5b7+lvLK!SKZ+n9w3|v zA)`01z>jH}5}8a#$0ma{#z`>^E_QkT)$yEqeWUyoVS4N6LgBoAS9En5ro4ZSnfbXX zo80IR&c$ew+(Sld%(Z5FnE(pky&vpJt`cV&;}jBVU1C4}#&Eia&{qH=Pg z6LH+utU;u(f)4sSUTYrpzHW=gnM^1U#d)h6Y*BHqQ~+U#Gty&n7bm0cQj+a)&Rq*w zMf%=hO4NZnOSH;wa^m7*bB{%X?{MB?hU#8a<}AmlY@9L`$qEe5PSw#YDQGAwicFV- z4a=BYhrVzxhLtWi*XBC_+-grHJEC9wkiCX(nn|FoP2HxEEspr`Q#Xq3yzu7&BqD8(=W#cE-epN zbBbJY=fhCrZBb`~dQ)+H>>={wAt(JeKP8gKxaeB&K6CoZix31MR!9i=**B!-m2hxh z$=1hCc^}LmQV>+^-U>6X#zVH8+Rt?!*CzS0IHWZBZ+8Xvs^XF(+pl^x@4ZTYd3VRq z+4lQ7D8G%NV)ERG!fA<4mFeLNW|5|JRsHHEwqF6bHpU*s`h^zC)p!>xHF2`$d|7#| zAJIU@aXLqWN7=@dZXwgge#ADERaGy5ZhJHPyYu4RpYnB)LLmz5-y(M?^eu#s>S8`- zskB|vEtgj-qp5b~I+svU<)zfv#7vR^UCC^7GJNR0Z+wmdEi!)O@^6F7gJlF-rSB09 z8X&o6gA74^eSIZh+U_)y2yFf{AgCcxc5e~b1&wwfIr2xt1`*N)>2t(5LD$R0{}zBE z^sfXea?Lo7ar$RH)mBqm`8dd*m2}6N|FG0o=i8mdp`?;I~u&;q$Ak)@#Bu;BT$vcx% zAXOi8q(=9gj2BN0l15vMMtcJdSiE$R;6vM1ZsN^g#XV-EW?svrYl~YzL6fDKF zxYS_7n_PWYUP!ZT-DXO7ki)_33DIe9fJ8!RT>8rQzlP$O4U)HTON5e?+IaL$@x>c$ z%%$!lypvO;PS_s$J}cQEnWiUXxaC<)9uNsn8>0+@*Y+~86KLluVc8Sy0uB@X%tvfo zR>m}E6WT>!kAww2a7ScYohbz?-Y;_|pPzB$mepCP58lAE-h0)z_PMmaW#fElUy4VP znFIT0onE3Y5~5F6&d~Qb-6I~uQ9`Y#^y+jqXTP_hD*C1CHT6Au)S8{Eu^fx{3D3(4 zU|aN-!j1Tn1io=X=qT2r0qDS9J5$z^B#M+3%2l-UBbr`!CE$JQs&iS=^1rnEGk zZ2FfOvlRpF2b|d>UEipvCd3eITe_!BVjm@rjPdmiMdf5#&UI{mP}>#QYLkS1QoG@; zP#$|gL(V8dr?dR#*k)BKeln3gz30|3Gs)|LtMi?yv2yw0V}6$+dZ$0z-hVwiQLa8NIxO|LJ+-X=6 zWH|6W?WI|M7oM$fz5+hiZf5pO$guz!-v`t>Lse{0!5dn8EU*I40=pvE2b&gq+{{7C z1bYf7wv)AMIfQS{lm5?4qGKsWIaYPlbGlT!9eC)8K&G>;bZwcKgD=(af6kagpA~%c zF$PMgb`TC2$6mpY&@Y~dt}dBQRtiX8gRRHW$0nIdtAw%x(st>+=IyVLnWsPDl$axm zIjd_n;r~cY>6-=@d9v9vBIA-pnA#q{%gQTbda!0(k=~3|!#2T~dmk?dQ@H?HWAXNN zSL=;<%l26PWS;<0yE8Wl{s|R6awV>_IdLyj4-t&H%yiyXCR0|Rd9v~|xJ%!7g+FYk zOTyd;Ch+Q9xgt45YW86qOMd^1j>BgMeGgj-XVYH^ z^^l}H7I8wMVI`%R!!YLV%hl~$s-&iM5}feFQfmGi^4BbdBBdpNNdve;pe*Le2dyzb&2lMAGhr zZTG4i!a{kMwB+MgEptH&5M>z}DZbSb#tk6iJ;rR)CC)LRDm4ol&00{{2Pt)Pg=$U- zC*xp#rAYo%P*hJx`_Er6eEVKfy6+wSbh=IpuqO~soGHSzl%BMbG1$WHusucl9;o19 zC1@z8yjkvvpN3fRG~uq<<2C(@4IAy1?ft#7$#y_4`vRB`ps65@gF|XJib#oz-$ly> zYaeyJJX!mwDw@6?TA)&``8fLp?DuH;%(LBDJsRO*MHmdGyeFat`^GS5A<)#o-y!tN zU6mY4@%RVmDqk8e>^iKrSBbc`z4_-my|5(`BVpy^C!7hJd++m%LyOku%Oj)jqQLf5 zk#-+v#iZZ#E2+sh#zPKHMms}8YbRD}&?xaK|3~>X77m2D4xMuM)FsMlH}nAkgR_UY zwl9G@@w{3Qb&)rkdtmp@6_Lmco{rzk%j!%g^m;u$j+r?!&g5NuX@~aoh$_TC%Qxk_ zMo*krtu4Dc=S>USvvW20NSFPN8~H4lczdWa+9CDF%)8Iy-vpS+7)0ol69#;cBxABP zfI$1Y%6Q6&xYnFg=lH#--VehEQ2R{K4pAf0PLpxLz(ts+UbAO1eAC@UZRDKyc$}O& z7R9qS#Uo$t;7r3b+A-=mvaaTkQu%Xz+Ws|@CwSVTxN`TamV$1mm))_hlAeqZ@Ej^t z(1O%ip4LYlDq8VDDqZu{PprE#<~msWxai6l*>iQC*&AZMCdcwda`ZW$)hek*l;wx- z6r-fNB|HtM7bFLam!Ngj!)2l47ZN|$qq1Q+)YGSyDsR%0rSxc29i-9E@CWVGU;?$f zEPXw_8xcYk-}kqHl$`onvw_XY>X`6p5cZBq7~3}GcP{|yH4wN$`a85(*Su580nMkp zn^{f+DO2|x4OqYGVgKdnD?)DwZKR7aRjp3gN&MMVDUH)vI4p)sOchE)MLo#ci(I_v zv0Z7Roc^(O&O<6u{v8fl$(YV(Wm(-TC%eehw#D6d<9y9j$z1|;5o>$|MRTRRQ;fVD zDOJah%tlbDhYlTT7{(xyo{)yuYOH~@T5j^F=32Q9;VtF0KBE18N*NS7f5~``T!y7c zGxsRlP8hL4>N|TW1RY4j+?LZGd}#PusHuskbI9Q!8^lTB%BTh3<&LJK&0YG%58UZi zDVUG@kc(UW>|V0)ES{${ol2=4xQ$^8JvvS{mCbU5;DIbVNw67M98|e>E-&5lDxD4L zIKd0#S|k{R?xc+6_C)bB%55Yg7%EnsB8-tHY-XN+k?;)ay+~P^-L307q-0r$r^PWO zTj42P3g(jIt!Z)QZBWdH%v33Ot<)!bEMcL`ad1i9!y{AtoA@!Lxs8-}po1Akancf) zx$tBDwFvs&O);m(aw7%HL!_Zp^`H`vuw%?gM_bC+&i{yel~+u4O5c9K%4E@5Vcj^` zy?Qou2HTf+@dUDf5wc$i`NF5GW_mMv?HgMa-K+B1&PkUi3tJ(u8ec@K6$CsM%=UQ z1X4hDZhwE>B4BBe-EESzT9%;nYVTRO3ulfmK0e@SJl-U&Rdr=ADvf@;0KfV~FIH*W zi7aEcH#fLK)iDE*^VRhwMtOe<%7I_*3<;xgQ=$uNh~(;i^qj85Y;{FA!G$!vx)N9M zU@OJMCooq5x0tDz)h-FvMEq(ob~}B3Gt=BeHQ8w^^qIN|soDJZZb30zgw$X`O68yu ztc~mM?5&h#zh6YY-qz^)6_fh8M8HL>uz`+u?t?<~&`S4Z|CKMv5gE{)O0TU`L`u&+ z-y}h;F)!!AhU6H8tonP zyrc3aqeJ-|Gu<`ZAtm9Fo6my@;!9r#G(Ab)?7&_Q9-~n;2cn1pvpk>bGyfm`rT_!h z(a{-Lv_@L<5K4e}mr`HeFS)P6EmY_$4K^P7dnb|Q5vWcgEn!gZnlI}2wCDp`<{SpF z9wA2>3p6m3Htk8-dxV~;PvlOqD1hh^h+~$HZ7Z{A42!!U6P#90-?Ot>sbwu? zUL)S0eG0IiFB62`8v^?{2MD}k#TH^=*ik0iCydv)c0&PrQieSWy>@6)!8f!}srMx+ zc5u;o87T{Q+&|gIO+d5+aNbN$q4=caglcChF<2Z6h7z(|EX_gnYnuZV(PwB7NKlfJ zp3_@)B_+7dW7%$`1qAn%yRB&7`(REo{`uawmV=@s5CpnAn!x^_tZ^|5{+f=jC}}oo zv@4ZctI-cHC3ZTI{B9Qj+t(Cnh}C&Af5AFl3C=cW77nA84-YD&5V+9(EB=wv{cA5L z7{BOOT^oPh<^4RKYKACmJgbXycx`i03Xj9%Op0*OBBcd@wpOW42PYJzD9jv)1ST+g z;=Bh>xuaG3s3-cM+cl&BkeZQu7Rw~!43{_~W80D`xhEHDxkzU#Wp0g24^lQH3}W}) z@IjCYUPE|hc{b4mhhax;;;S1_LSjN6B*t=X$dy8tsfSdN?n2xQIEQpBckbPQ)UAEQ zA!m)gDZjs*{nu!MGDu};-a|Q|Qj-0i1lJJC4#sZ*RAN=4F@L(}xmZ?`wWi8v};?~oJHa2{T>%uTPzvv{eJ z%9C443vX1Rhw~?JHSaEZq4 z3rUoDDBf@Q@1B3@i}ta;*2-Ga)VtV_)7av<(BKoA<0EG5WEvhvQR(aUHrnjB;t2Lh zih1~eDn=_H%u{-3f^FPC6EIkaU}qs@JpfH0n#YX{Iaob5H$`5q^5sAy-NbKkZ_XHc zfK(IEzxXlUnL0W$WOob~6ImqA#MkIJ0EfxQvo_n#%nOeU*lcN07YVPI&He)imGmS3#j@U*Q2`+h8 z<7VgHNpvUr3e)H%NDUu8%sxE9gEMe;7!_d0m3ojNDnr-XBnw)4dn-4q5Rjb+W0VOywtX)Ql8b5Q7k^n1T{c`@yeOr5R%2FOKM z8H0A*?mg++)zUp0@=~k9b}cO}rJ(Q#68fKe&7c!^;Nlm_8jW{jM{R>xnZh#nx}=V( zMF20l2;q=}OcN#f5zw%sfK=?d%@z^wskT{srxZ50C@_EICeJ<@@pv2=Vcq%&5987n zT$WM9)@=Toe&;6irXs?^?cG;GY4Ua{M|idcI?eRHz0C$($qAxR>W<>FW%&^bdR3&b zFw3Q82P#4$CQ=-aW>nuF;e#?+w~%u)dW9XgY_;Q#qcRk-Pf;lTQ}H%Ysi_!{Vg#oF zYK)bDX69UU&h9_5b_Ih70ODvMj)!y+pE8Fh&q+j6eV`>iJh?`+V%(eO{oa7tt8JD8 zDJD}V;}5Q$mU1AAmv?a^1i~6GeCZtT2Cw&QvRP+Yc_B4AiSky=_Omq zWU?n>&IQF#s6g^l2L{1Gqyu&%jTRkV{mRkdLWwOsQ$pUu5uLVE+-#9CK}jV6QjAvG zm6&@y5&#RzIKaI{)Pv`ECrcj7wkb1OVtQU>`jb5tS$2YUoK|$NVk;uM$afW+i`+6EnwF+e7x@4;uH4n z+VL#U`-0)3=hdkjQ}99@!kBy^zkSPtvt=MRjr5P}Kg~R!d8SalgWZi1x?PrZbDZr?{6WdDG z{{0D{w^aET;K2aZ_X^~GvL-mGDIjgqdXk~@a>v7o`4624Pzz~^0NQJ5GwcH4SlE}d z$2_5-L_jdZGk(i_>ByQpSdOL9P%ysevsWp zD7=AzK@0`R&FwBP#E?tJaNOSz#>s{*xJTMb@lDG+Q4+a#v~^tV&wm-Hm*9>!{`D5* zKb_)|HW3~TKCN*tMaQI;Gu%fEc)L3K`w#T>%OlRW@A&cmy!L*pXBJfiy#AhB3L z;=!*qA#k!jBz>ufnws;Ec0N%FXrz_zKov4h`Qi=4gZX(yAsVRw5|du6UT!_>@enjV zba8)x-@wH@&fswy#^$WZx-r^@gD|qLjt*$ewzgiD_)PkJ4lgPI;(w71k^KY(S$^$I zVAb9L%)%$t%MuO$ye8gn@7}#EqFn%7ZhOvxF$OGm6|syHMzMgPqWte!H>$PnKvCHJ z2F+ z1!1^!fG{?MiIj*I?Ax-k3)Wl}y=HKR3bdc$zU0{~i)JYTCO^LqRDS2lV`#d6TcU(; zreBfPUF{Z;IrQ32Y$pstY>(zsCR)J|EENg^_m-W-1-B z%OMWbrd1ncre4ZDG-)Tba*}PNM=0Q96^^Z8|cl|{e8!mvf{w<lbzl>A((mJ>u%KQ_v>~#8GUxoP{g+oNpJyzaFi)NR8x&B*0vZe4Zb`#t@9Lo1w-wl=r2FKuHQPy=@1<8^`f z#y{fUZ3{iIW&s93y+(wBP2}TgnhzTZQMNu9Tp}1z8NJ3BP>da5YC~I=LGFBTGQZyO z`|)4b@}l>pU+xhkfB{CXXweWNQhXPg{Lm|V@GD5-&#!>oura6+L;4ES2t4M;)rt`1 z;RaQ!_aHSdXjG;eF>iP7)GWb_UfC-<@=EkpF-#K3hoQvq4j37jlI#SGhM;)+&V;R9 z3G5;U*-jltY?4kWliQpF4v2>Y$i4-x?peQ5`}aEh+<%ix+43End)R0+PD-g%-lmo9V!(FyYEj>4sSn zr#W)GzPE@aI~;M<&WeAoAU!0=Y<~06GlbCS`XA?;O&o zP<3D~I*K#$1Ls@`LrS5Q{fmnN%kCe|`_R*WZXBz`Z-ruwR%)B03J7=L^3P9Y0rOAL ztRX;8YI+SMYh~J6x7{zuga#fmk_H@%Nmety+NYS+rbG>R1S|An@5P^*I^OgT3RQzI zEbC5f?{`st^=kjaVb&LqAHI^6-}$^gCKzxIQPV-kO`9L>&(Sf|e56&agCDB1 z)zO#FYO(knf2LDm`PTUb3{b6x%Qs z=p_HWdasmKbIOH!)dAN9fPL?`wS}R(r>79GMnr3_{QQ8BGKqAGz||a@u)cqajJJAKvyz_Pp$m5h?tl99>D_|p z?~`HCbohAuIEyChJ(#yjZ6}q&fE89Ywrvc^fD2Yu)>rS|?St94I~b6G+RM8w9=2gi zN?75UYqxKo*u8uA4=kO6eK&X)2G4$ibJmwKft(Ij;MUx}=P+f&9OhJ>K7INHy#vJk zbvG0ZGg_8m(_$EX74!uK(~PcPzuw8KyQ@S#loJDYw3(uR^X7f8v4bt5J=HW0vJY1P#nv$M0;Ra9W?6F;s0Fzm;xnp8pcuZ z>LcgRA)MI8yJ!Y)8Me4lQ43Qua&X(zGcvYo$dRHnl6iS~)1ZPk^!+K+7;miIdy|!w zUR^zG^H!Ie)U*HBDeu`v;!;IDv-Dq`>DmTS0DNWbJ{9;#nEUz+8MI<{5)b+^a4DNx zS_)BXPDJaIzaMEAI=;I|dN7_6Kd+Z-V6wZ`!Sb!I@JiRwaOSqSBu3 zC7rx9_O0T)8VusIuj!fn9ARUscx|xU%^(Cq&3f>YTNns949fd+n+%Ye_h5R`muS00HF5Wag zYh7$$iWzn~AOGEvL8qgBj5ku*n`O2hzQpmRUaicop5fKZ8M@M+qyGM3Uwjyh@L!MT z=aC!xugA3`JGTTqdwUHqdAEn(yCz|URBxqT{pXPpcH%>gj6Q4Ftyrg?ojpTUv zc3kr<-1qMT<6npDnXP}uu>Sd3iR%e8+9Al%*Dhr0^`x`E)j_V=Uv|2~ncnos{fxETMpuOWZwVt8Y^$w3icx=LOTe#)zA5-Z0UekOFO;@34= zRpu_^=ej2S@7rL16fVhRx?9x+J=QPoryNIzl!#;bK^p&k5uOcQ_`h7I|6`}LJAHos z?%lzndK>=Jr#pEamrE$85B=*KS8g8O9->8c<7`;}%8DqXs?B~v4{VB~7=H~T%p>t{VSjFT$= zTHQ2xFX{Qx>ww9FbsrWf?cH3BQJ)%1bMYZ%rnHvZ_ZEn8TI-Sx!trlLe&0vU&tTiK z%?CNd=j@6%->lt}&2em={^nfc=~Qk+I!)Wj5ZiJ}!MnoP1^!fx$b*py#qLqhIsnU; zWV|sjFz{D7J~S(py6sGJZFGynReSq05OwcnxCJ4i*RmB%S&w{o3twl4sSmWMa*&Wv z-p+svoq09Fv*#4uHYPbaw7Ob0DkkP6NYqprytxv)@a3>OV*&Z&#m}d_wlfSk9pk&NtC8IOV*uerL z-cwzBT)=vV)bvZPCv)BXwV4LN=22%|yoCYracFt~c+1`33x{G$3}N){{XY9ABTkJl zcdazh=opG7^d7a!$ne?8|9~r|EvBFDwP)Bra0|m(nK7kJ0Z|5q&;wi#CknC-O0C+v{6xUhYSEH`=)Cw2Uv7H)$1q=*5PkPSjM;%`v znSJy-DebiL-SlDv{ZQix4ie7rh+~IfzL(XheKtEdyh>7|(?-rZaJWl!zTR`EmL_RG zbaKPqA(c%r#O(YYJ)I57qN^(w!`j=Y>v zYEPKN^>}ZdGe(=0d6kBnuNjnNC0IlcY<|8$v_5~j^Y}`?&FEF#CK2M?v+Hdf_qjrj zgb2;nmpyEwQ?4d@V^Ef2q(T6pDUT=$V5nF`f*Y-gVPW1zl=cx7>nFZe!jxIAHwDz=4`ez@*@Ul(8F3ym7XO$?W!{sxk9<#B#86=mQ zocySYFE0e;2u0gPVM0IK9AnWG3+g2`l<}707-VaIT>AX^^M^ZyGx7;-)^Tmt8x^;} z>CZV6-6NYG$Hg6HxZh;?u*ot4C&0DkOZdrTx8z%xO`{FtrZHc!;(V$3U5DS;w}idr ztP||sP^w}wskB(>;Jh~EnZ7S}fMq)Oj5#Lzp?K5N5`yCG))Akal}8O@Px9=-zvgfm z^JRJWCI`YV1L6<3)_smY@rF&>V>Zl)PB92s|4E%0UEJwW^5&DN_7n0R@u3WlcnHF` zAK+EJ-)4=30kF7U#>6~@N{~6A)V_TA(pj6)2cxC*<;qSK^s12N7iP2Cg>~xuHW^wQ znLp_0^5(k_OnOdDFqU8#uHJ8}8nGbkn0|r3N$*V5dUu8Y%Vwx8tb#c%-vjL@%0KqJ zCcJU;oY}44aCiV+u1kry(2^i=*|b1xOX>6>Yk9#^yPq=}6XBc>U~P`G`zCrFxc0Ja z)2EB0vBHqyVx!J%1E*YacgCK~umou$@AEtAO5FBgx@42Lp4qvw1osej`;0YjlgYss z+s-~<_m~zuyzxQf#rbvn4@WcX-)3Kn4aj~^tG&B&On77_T}*b(>+hrh(f!)ex!vJ@ zU-@7Oy}EH!m3G8Cq=B?%HNj}H(?R0NS#fuUqS&@eSY-pZi)Xb~!dyqPi-#=lr!qLwiARd&RAH9mz)df+a1?|pP%)84(^cHZ)Z`?ueT3*2rUy*)F}wjUT`5U2o*#s%y}n7RS54Fw}!6_;<)A0?8G`B`5j# z7>jK>8emqh%l9uV$V@x4etTeVpHxu54vrS*ht7Vole*b0IpuV`eK#2QkmWP#rl8c@ z-h~5p0XLUti>x21iHrpV@V7l2f5yMT@vQih>!RCxR7T6}!#0JR3!Jkq!&UI?$;|KW zx7hxUT~@nC%R(H9SIg0%Sk0pcY*9{j{naebP?Vo9@FLd&%g8<~&z>%8nRo0LCS}^) z7@2h+(q*l;$0|H()5u$?x=CpoH3enV~@&0MrY&3NE|32OBJ>DxMvIW-2 znKjOj?fPR%YTLJc_icQ?KI!>iH;_AHOsF)nxkl-xzK`BQ-?YXRwS10sl{O9r72`aP zD2TYye(d7^YoPb$D_V*}d5|Zq-+|tr*@r6d+y08(Q0MHO!{LqK7t^Rv4_a5A z%3LYKeQ@(GugTqh4+6dYL$v9zA9WJvRJ^Y*;5RRnQLXsPFg}-}X{|rg8ICir@gG)W zX1G$k_ykOMS@+<2p3AOP#{eUep}m~6=iK&tsLQ7x`2#fM-uigp%h;?1<)K5Y2RE1w zfSjG5z>Z1w#^JrVec5Z8t>vi>kx!m%T;<=N5`UUB7hL@9o5r@I-FzHEv`ss>&C5Tx zX&qs`BG@oL^7yk4?!-b{qYmbES=K3hv1Z{>)Bb`qfm=qK)qg!MzEt^_z`%K53)p!N z`!2p2KW;IB-@+i&-zT88U(><5WkztVSGsaifH?JRaCK8=eU5Z8_4Q$mO~SrcJrg<8 zq1~Yu`xpgok|kyvG#S?INsTVj>@Ry|uJs-5w52iZ8{=nTaGCnCi38mrC@bm0d=pw&*OIgjO;t@0p9z?t+dRww(lhAEGX<&F+Qs$%J>SuFI(Sk zGGI1g2Mdels}ff(VwxHst>1|G+F9jz^$HUW_u0*SXZ{mAw(z_CiB8PFCh;NLdfeuq z^2%YET^44P!`faZA3pD8d?`Dl*yqr|<`ikh7c;Iw(~MSBjvtFMVLP{48h)D?lc~ll znt(p{RAEC&b=c)*JH5=)>^2;(wCP7(>}VbG!djO^`E4=6XQ+Fkf_7sGvb-Gf7FPrI{Ljy%f^a5-ii%EXF6#ec+JI4LD% zkivX!-=0HfKO~4dyo0fQ5RC1B>T{fwHrn=9V%t+tHh2Yzp}KI)!>!rn2B&99-GaB? zT})KHW<-NhsVbD-68|0?9CQnSQe2c-G01S91qN`UtgVO=c00p+O88S5@oiJ-wad~p-fB!#z5Go<5D668ZB9XoKC|hKY$|gI}hf%a`3SzC1xzg^Lc)ApLO`mjWcfkX`nmG+DUR|ChCA+Catv<15-7Do7r@)vS=DNC+WZBDa!;VvO7?X0sQMVpu{6 zKSWsnz?Y!$sm*A(ONN3M zR+AMr)?;zMjzMFw(3!M*_}0-rjqW~AUJ?u-qsD8ZI=DtfFE;SN-g8<=cP^g8e~ zTBL76muF%)XZCa1)(laHWYA{wO7VLxzMcIM6F2-&X?YA{rPNQdK5E0hepMbwV^F{7 zc6iQGS&^omW{nGx1DbpY*^lj-mN+V+!{!;UzPX{n;gR-U1VXs2jpuH@6L2Yl*%b4q zcenk4DMQM!CF|5VF!rqhkfL7nsYo+h0 z<_Wuv)&JmnBNY>AA^hq?^8FiC)+|x4dhl@%6w%aO)Mij>IQw+;86z(&z8bvGAdGL8 zef)6bGj(q5#{IWP)b0IBDc{yVXTTV)+WRoho)A%8ZOMa1$DbHQobBPf?YR%P*Vd?z zk&=gwvejQ_5=JBMfO^s6eAK&}q=}`mEQ-s_el8f^s|zvRPb>#nD=b0iw9?;+r}MJ& z1{Fw9=L!1p0`x=RCT`qL1vvP7xk^wFvbD7Z_)zFp=P*E#tiZY0${HF<;9Sj<_aOIA z7hgTb3BAWHeoH{_mvF8AWvx?<56&Y^iAa>>slmAG)h{YJWDimyUu{1j?porPqeO?mWx{>(DAe?k(3+$LkI%NXw>- zwfZAgB;E7C1Ha|^Wf5>?GR*3ORG#$E?okRllwl4uTB|){7Cc?9XzTMAFDwBYd?HU0 zE98Y!dX318$2AAEqY)p(=zt)W{=u`eYinzZc>ZT!FD@dHSjJ%UHGX;~9Y=JW4UXpl zNgLP!p)`yNDhw{}X{q7G3krGvH}s%nHd z?4`Gv)tg8K1kEWp5mvE>1Y*Sur+_O_D{7-IXEu~nyE%~R;6mMMT>bl?8JTf~$m0zqnNgC+i?CcBKt~>%u!;XU*JUyRiS}B z<1fndoSmS>vaf;+!I_pqWOsQ7Mnchg*a6P%+fUUqi zIaXiiV=FI%(CHB~*5%~wQ%Scwp@Ym($?O-i6WKMvZbdhcL%3SvTGS%ivZR1l?MF`N zvhAtwoRbALKCM^x&yM#n8R6+JFC!rk#*sqJ^pxN=xEK-SO|hS@Z6wCEQp8$7a5<{0 z_yb z!#jEbj{S#C{oj`GYObo8f%O*ikETu{JLz{8j$J;M5Q~jAhkx?J7d}2uubesl^!-q~ z$3P&%ofG0W9~?l0t7L4cWV{!=eqV6;92v3EJFo+L1KSA2S5RP074!Nicnx9>I-7j` z{v8}cnIs-&?&QP+`dXZAnvSWm>MnuCKC`xFy?2k&vxx~DWiCf(e)b*!oSBhDibEuA zpm2-aH1p@&lSZ?1b5p!~_YM*O+F|s#-S}w2O-fy${-MM>giS(%37{5ny$P9_)R6ie zMGxLJ%`du%UnSzclMhQIu*!&BwpO!AKaBI#`%H+!KxzY#p32+`d+2=T(y~d|c==#@ zVf4Z->XX;OMyw}`WEhCLzG2#k0zS7Urt}N%+~hpFR@u>LUY~Aycc*uF^X54E%-a00 z!prATfgnC-6UXZ`FuK4RSzeCMF+$VqsFZT6;S;-8VQ`k{^LY~FMwx-kW{_|*LA{UN z1)*$uePOneCS(ws1C_uM34@1j=dRyt<%s;%xUY!yIH#6pY6;BC+;zsO5R_)0Gk`pj z5zZh<2%UCPGBkY8W%GRZgjas;OdL5{Al*M8m?eP}v3;=L zF=zn2%OrIHY`-~ofgBs$c@bEZ&GPv9f|E|(iUiCtND3_0`JHnWDk6B9o(S#c$rEg ziZ@?+GI#)ehPxkqM)d+GcTm@SSIkl$#lz=G%4jMUpGMsyNhMI~n(Mq_&hX+*O4l&3 za8kD8VRFtmqJ0$a^q$@)?MCInL5GfRVo1+uYY6{wOWauIp@W1v3{C>Pr13*-iOb*L zAVwFyn&mV51~Ws?>uVrFhD;+(BHi>>FFwP?yT3e!0&iJ)=jV3jfmGNz>bu=cvE}l1 zc$y+fe}gn*PrX^06}QtL%3C*0+*LN7$)Rqx&}oK94|TJvx_!TW&`fqLWfHu{D;W@7 z(Fd53xU>4XBrb25TsFU+n@AaWUJYOuKtmw6AN!aT9QZGI<6^7r_Q>MsjE(_P_~p5!3<27h`#Z0tQ|Ju?kiz1 z766VB%Fu&p>%>Z#_Gt~JQC5-~Wk@$1si1^<_aBD;^eIm9*jRSHxwJyaiN`dHFSPgX z+YOnxL#4=A*rODDS8k)%zq6|%O@p>{SN}>OxJAITs01hq)>}p88~~&s z5a0sCn}phV+UY&+mO>vrEBKN65NmfuQD4st^#6_tud z#uN)ytL-vL{55K}cEz;Tk)=eH=L0!cM5}^_?X|luRVAiumN6eY(macy^NAl@t7D;H zp_MG1r6p3^dn`Uj|Tj-$Etk{CNy~sYH z8y!y(**3U{JFz;eN1Ltzr@cX~7Lyp%R~a{uW^>tmWbfai zR(F)Y+Yfa#S%-Bj^ARP-A1+uOdajFtt)blHbXoE7agreCMfoHCZt8{YkFm(*=f^l| zb}CgmsJyd`odlTo?H=w5bI?t}01kcluPPdVriuqWw(gqfrhyO=(X5(79-$3T#E8g9 zuz>kM!zFO6H5o|j0D?9Kr*{;9Yxy0k(v_*F$1O!^a`C3{T-aL~kZU^U*(4xt&erLV zyE?J#EGw|&$)YnSIQK|y0(lQ=p$U7{Nw6L$StX7lcPI|)?T_^is%R1cXx(<6)8 z6%aHY{y6x&T3ks8rHGtit^Cqy`D-^V9;8Gd7itFq;vH(HqRWr420%X~`t^tZHQm02D9EpLw^#itj= zT?huf`aL%SDcoX7|3!JxQP*w>a-q>)9P+CzY|Rng^5tT}v~azD7~=Rx<`UXD z^X&zWr2zX#u=n;vW`{YU>kqF8C~@0Uhf8~Z(frXP$Qt9NnjR6EiHSYG1hv6Sx-{^~;T@(YX8Na|mhI&}P? z*ZndTL9pOT%+p6h))F|dCnOF&%ia*_1An0#`3Pyp2T!wBHBKiFlx9NgZ2g%BjN%Ln zfy~ZgrrEo4auZl3FDUv$DkS>bhWvR4He;Qh8aroI}?4W zdixGM=-g;A>ohfISeNn2k)eo4<&na(wfQfoq=5xU7x5+bDD2D8F+BgaVuzB9BFQKA z*LW?wu{VVF-huZ`dQL>`@+_ee*Ini4gT$_DlbJ=Yqk6l*EElNS>n_RZ^gC-`eJg;W z6kR{1W;sG34u~O8s#f;}wG{W_Fcaa>UJAt@RjOsZ-V@e4bPoL5cwBfkgGr3yWYQ6S@B^5wc6Yr3|Os72B zycu_*pfT%Dt5^c9j+iOV>9#j=pOb&s|ERzDVGX%_mUzz`G^x7|@k3j~h;NYxAetu3 z7l=*g-jWwDD-K9Hb5dHX6G0fQ)#rL=XDXUj_O=;>msQ*uJh<(8^O|P)Um#bvbxDG;FGC_SUoB;gr^n*QYbG&Ib8r^R*B?JR>s=NWBR_+g$zC%Q_j65ARzE{JxBttWSA$(8+FNp8~RL;eQcv zL=-UOqLsmZF(UGZW}dUKSr{(`uAs@rryR2VE=}cF+@L+VFz3+7_vyA!!*a4~pUh@l zN+XBN@_SN8rglY{a^ScJ9pV_ar>&Y|if=bj*cqK@>?Jn6kr)y$T$j9m<8_mG4%IG{hhoB8 z0yw22OK&!xzW(mY|w6cNw+yLn)~j!>3P6ZaK1|fw+_q4&NA+2g{eCXhN#hXC4oBA3hB?oT&3!?XUP@$wabi9 z2F3&N!f8ei*g`-^X6C!T6?fXIvf9 zcGGlsU%?qciQ63A(;WwQh?#9rQHT?GZf-UbO#A`a>%)gvXRL`TIy>;ldBC2~d*yeiy#_;qmLj^8_}J(Tk{*61B&B=0CBL^JedeAOL)=W0Xf%fBp;Lvcena z6RYh$?mOWpkLlDq+)dBRHuyk!Q$;qyr_p5dGro`1odxjb!du={(F+)9ZY-;K}c{86f_RUrYY}rMUL6OIK(Wu1mMsTcFSdzT;g;=DqYe>paIgBNSjqV*PBR_1vP(N3E+I3ZW^mKI>p_C4 zCwt+(QPpk|J%Z<*Q3@cLTRYKi^lw7=FunI1*eWDcK|zI9O;T!v5woAZTiXht*2+z+ zmu>}3RBf1a4{ZnwjQ^%tbOE}BgJ3Vr=?tv_7gGqQq^WUSf6dwxLL*k{r}ffLS3{ z+T&z|VyMym?^P8s`l40O;X*5(^o5>Bcp5^bby{ty2Yy+hWz$Ec!-&(Qb^A5}z_6p* zh$jhvR4xoO{i+_zSw0l&=UuiKv5#7uy)-}J6_jtn*r%_Tb&|F@zMqmm-m*lR3Aq6o zHWLm8_%Eo(^baI+kuUe93xj~_)ew7@wSWYKkPoDbAMy&X_4QU%jp@!cRY*DtLX__T zYWWe}{>IN>AcD@z&%X((mH@fnxOcA;SPMVmfNj(2?+8RUU;;o;A&+-N%b6vhMd&9> ztsqzU4kRjhyMk$t)l)JusL~#vm*gJvLVaw}5#Z&e2C0KQfIGPGfcQB=ihfcoM+Z=d zuqJDmNPmEEX|p=jw(ToX_oTYCk{+sXnbj?M;71ueEC?}U|(lb zEr>@0#HQfVRa3Ns)1RdtEo*ep!Z>Y6Av?VVx3)IBE%vE~*4)H%9uW$X8rnj7lY8zf zT;=-BEK??aVYtYjP3K&kzhflGHp{jRM&uBr#{Qi?YH^bv)PI|a&HqVu-JpfMZpXm# zYQ8LoXb~Eum1lzZA~7X}l~qpSiv!y_#y7-$14N#^bk92(o#thmJ%zi$_Ma;qi(E8y zwLE+XpJ64`JHY=n-O99?Kb6lJGf_EDTtO?Cw<~*JYVwo?OWf{N8z@BYFsuE(Os(R`DvVgTPhRdRE15&b@g~ z*)gG>#Kecap;li_`Awj;>jmiU9rExP zl;}mx0OjvLIhH)~M!8cL7;GJ+2=v0sDu7uVq6MlophCI)S$<*qXu|I@1%cA4W%L%H zsXu#{%t3bW+c6jnE-mrXez}-vO_ka2l=I}q@PAx~hMHJV=vmQ>C{hsKS|b;JWW*jy ztLH@95n(q59vXZMBo&%i1~Jl?O!=HSo;|&smT6%7s^uwE9jRB4PxG%>1`&K#sArq6@5=!BKZZk0=Ph@d?6M()s%KtA( zx#tsr;>8>^h?*D~R;>wLAjlR0-<|-}OgttG?eCA91fp?KbPo^+034?3#gFSEsf5pq z%gZ3_u}v^@0Y&1t4pD;OE}~gnJt^*Uko1%W)ha za{s2w*PJWQKLLGE4L-l1eDOUsu)11c^Tl~BVE)$lj1AR(4+DV(o6}3+QRfJDfx7~I zJproA!Nb#4Z95bPlobG9`ko=d0K_Q{s$R~?0>Y?Wg63Ip zc1C<=W-R#W%{zo^5;7k4!lizt`=O@WX8Ule!)wmxe6(XzllfcZ9< z13RJP8lcd)z#?g!!CD4@^E4sn{co&5qX2;5@p>0l@EG?k{yH=6AUMA1>ATZOXVCo0 zMR}Ff(Hm4tcRR zBK$*d%7sE^T<-$6&= zecpGR5D>uwtYQA36%Xgy=CSFW)jf?A)tvzMn9O5RVn`l*%%FN4SeJ42p5g1YH9O!Q zHN2$$MNnTsM|=S^PYyuyT$B(bzZyx($H!M`aJQt@3UK@d(=4hCbYsCwC7mD~S?|mR zBu@~2I0$xt2!xrCgC%@pYkeX<<}>`DQS#!(Il^>@-v~B+*`5g;tjH@(L&FGgwoYDQ zp;ceHNUDfifuIN^%Xzj1kPyhOU%w8%e;y14!^H!T3A6 ze*Z7*op3!65?r|U;0%}tv}8Ka%k&|f>PTkH-x{!Ay~m2A349Ai@(*A8vIKOujaEZE zTa_;AWs+3f!sPqk!$T2RTL*+Wvn_svqO~3ll$;EJP*t#41DjTgPhi*RIlg9-buaFe zvi9_>(6l=(K?^cCD4g=QxIpW&Ibpj~e(UQS{b)xZDuO*o1OZ14$OFjM)zx*;o22kR z@m6Vo)rvb`gG_eCvVs z2>A(|>RXDYRJ@O*-ao9ps<>`;wi-_A(+n0;6+k~l@Ib88;Zz5}ZE{BgJsAU6Lt?ch@lpA0!sQim@W)`(ha@{1@e*3i;M zbJGpBUcH_+p)P+pnjqO}6FZaRs$QpW>P`A5c@(NQ0NwT0963V$FUz^uk-o=;GB`n+ zJ6IxqF*OrK{Xxr0pf^tsyQRn=K-qMBff7r=AV4+v<_|sVYVk2spL>vBAG~I?_U55L zz_-|Hq+QuvS99MGFPpV_Z+rnHMfrBlz_g54T981#c0}Zmu1ocwQg+5LiQOldm&L_1 zQ*!bD5>c$UYIi{shx%6?^#_eA{5~49oP`kxcIUw30m%uHbJ=`oohiQ%ELKPW&_UV= zeS?QUcUQ8f*{Ip+i=>CVwx+H@?pt+T0Ax0Wns8=4)f@+FM8=2{adZ27P5OJWXB%xu zVtXJ@)Xx9c9Dt3GYZ3z5D3d_u7Z#8n_w?|ATfBb{Z+sg;<;B1nWGXc4``J?`jgWH# zdD9vXu#7`@V(UkrWN=fiXZ|e(;bTgG&3V!gHD-yUfo^0&iSiWZs)_zkpQH-)a=o;DA41!r{`5uwCi z0IP;R`bS1r8hS0d8n{si1Sp*&fqo2_*Ta=uK+^+?ErUw)K+n%+>>3$oAW@7WpT1@5 zL??rRlz;>rqgu^sa6nA0Cqb>3g>-i89^=T}bJnfw?gdq}o`m@LKtPNjhEOqyvQ;>j z@3Gh%Yk`*3e}z&qXc`#MZ`=PpN=17QK>27S>UE&H<_fQgP69`S%C#iex&*YDR+x+Z z#qKNdKdK7w8SRD?Mdl8zz8+fLeF}6{{XkgpFXhEom=o!5afS7Ni!1nPOxkaG_yhZP z2hc3I5MEDAO?eR4k~1=5KuZ?j*1oM`Fc>6uL{&`e&dwU67 zb;9vedzxn)fMZ~<;D65yxe7LA#b=Q3PuV^xy`mJu*iO*qt%9~uZvbiJFfYstR)g(e zsK%b6V7%m(U+mu|Bpq-&aiH6iJJ1d?8m z@3sSzcH}TsPXp{3;X8(g*THuPPE|XA!vLsu75)8Nrqt9DP0pxSKPflNPm=^WC-~t; z_)Rrc)omc8$2Q;LL>s?F{hs2B?ow?E~Mo02l$Ufbdzj{hQ`BP8eIPGcf+T zd-sSDJ%VG!I_#Uh7x=)ahPXBp2Kh^OH!HX{FpHq2t|XB(eHkq6M?s0kz=HbUa>5Sf zV;XS$JQw)|FVsx=^rOE6A;$|o#Glx2&?sC)P|G`lv;p<^0_PDjbxy2gH#Z-r{eKd? z{V$EzpD@|`Z;c)GKNpw~|DOu2M+OA7TsO)Mg#N2F;y?&iE=aw(-YHr)xrq_2QWv+Y z`;!CwF=twnS#;|zP1ER{IuqVIi_RaCAMnDJZo@rNFvG5b4l4(_E{p*wQ z&<@#`PJA%&FMU?+5%X)q9?8?ro6UnjT zrUoT=>t2Tan0>>vQ`Vc4G#?2X8d9eXdlsvnj})n&)`>$U8y_`^*o->a9?q$uEapRl zU2%2g$LBjTPjUr0&F`NAyeXQx-B2Jv;;~%HfQ&u{}DzrQn6a)>b2b1V|br5i5>9opB{E(^g zRO?99my)g1s=L)b$^;;SEI{L(IA|mzuzXosc1@L6lMliGnJcM>zL8gqs0ZuiDus z8c*lH&Z5!4d~E7Z4Cx2dM`dPrtNzuHqml&IUlrZsDuCsj+p?A?_%z|}xi=7qwcm&4 zk2*&eA#L$q6x(y-TZ9WR+}ZCqm=q#{KsAmU(v$z0bPi*}z2;OZw>Swyetj1*Bj6YT zx9-zNyfX5Fw7r9iS>RiYO<|SWw?&l4s+<+U8|#SS&qdZq5FkY6g*)HYqgLEEr6Fyg zcNNkDf3U4l<@3$h_w>Y9LG>2_R1Dg1`L{}Un31r?IPShBk3G}eUduo0%UO;gBa?GE zT4#a;e97?BT?ZISocTIcA^gdeGXD3b7b}|9x?EP=e@Lg}piP1*3E+L%4y46*e&&Nl zKPSf>Lb`~gyQBO6kzvZ;v?9n;Ws`wy!W$<6DH><{(Zo(1oPBr@=KSk$i8^i=b{429 zI=0#I;XqD7v+%?*6cEo?VW+tz-I)Wss)emHF+9QipaOfgk7=rKdMYpKsdqr&Oz@`Y z9ikbLf6sOJU(p1m?)j$`8>>Jy5teTuy*ZnbyVS-E*yhLITZNvFg}g}F37OQb;Oy&d z-@5HaGlt~a&2SfjYBVy$tmz#3Zav#D+cDCcFdw8?rrMIzhS^fJ>XV6PE$?zmGMI0y~Rv zdyrr2`IwXa2f9b?i#~*LNZ&VPyz8sd^zNTG=6FW1ZCYRd(B_|95vFz9cmv4>bYAz* zYA&WR>HdWKN9=h0+8vwR*-2dAK{}(9TuiBIzca>mHBuo3MA4X707^067)}>g{vp zXb3QcqYkI-343W5f6t2d-&*ttdcu;;QT|j8f|m(NQ`3|yNAT7H6LBoE1bu z!46aZ*ACma2Ubkox7L*T4!?JQ^u!M$kjf6PG@WWbK|1nGq*(hZ~&yiRot>V-onQDkjb zmm(Im3^NOe_~c9zH9V|)fl2f-q!RSn0gWFTgA|TVDs6}ET(~Zv?C-xe%n4c(kyTSc zJ~pm#c~7_a9TN%&jFP?vrUY{BpO12-yb7V(E5&fKUjz7W3V&KQTx4M2#yeISEGmHr zyW*fOTws3S*@JHg0<82EgrGp#tBr45VkY`p;cVxpv)=#ZNSb~Nlyv0Fl|UPbHEd@j z9f_g7kx?XQkv{StivI}ajdNc?Y5KBEyrdMMs4uLQR*Zh6>H#%|os`xSg{Jra?0>^I z%4W_E+~c(O?_VH(00KUmFN6yCzdk}JK&uJ*GZ!v|k=*{j54nD~h4|;He@A{=cXMMY zc)x#Mct^el(%@^4optjt?1U@jjNSv^YJE2nK)3XB=Pz+F{|rB^wAX;@@>tuy<<#|) zT+_RiPlTclM?{h@=&C~RT2A2=Wk2k+ZvkkG@qJQLIGp7@@VDI4BeK!TnAJ4Zn!2Qg zm=nf!j`m!0)s$iduhEcl-u@Xq``xZ>t@L49oePf?6mlJdzkC@dYeq{9@v!-WjYn zXMIV~IsiQnUUL^c{ix$)@8FP#_s1QO7I7S3ZU5gTQF~#jDZY<1c#kj=^4{-M zK)bX$2T${wI8-!FSd&d*TNO9cvhC_(syZ}RE8}v!k2T|&r$EIr+g41!CNC6=lPICV zn5jyC^Wv-bc*e@y&>MIl8QqyF6*Y8+dSW8qLpdCiHDmGDFzK6#ACK)yPGrGgs+Zxn zFYb*S&ctRXvnL)k8+WgR0o`4{?YBHKI4YMV^;hRH@eBoBaD~TQ(DdthzpGhqpfT>a z`}M7c?}F3mC5GQ*2(Bu54D1`6%$e*ROMqcr#SetjkffI&a!-{keFw=Bm}d}G=bnN> zaQwa%BAec~`r(rqSpIhz^^;{~b~3YdS=sbNe1;s~;jS8m;HEB2GKaLssv4*BcKYk- zszN5h3x?#IVAg&+O%KbZwW{#yLBe)6g{K>3C`PR96GXngp?X5S&m19xeD`&_gW(Ov z=zdi7vSxMi=@mmc@2Hm6i;D+Unbu}srhn3DnOOam%gg>c--H~49l1_AfeZd=mb+|} zdveNrvcXM((;ik&6XysVr8dkGSCm45-wwJ5Q~kuy+UqE77s0ScMcc#u7!t6c_u?*h z)Yu(rgZs1OQF#a5vj-US_3k3+b^g?Yl=yvzYWTI&mgU&iqp)@~gCkzC*I57_j~38F z{P@PW_$9|o5JGcwVoN#3U=%!TO0vCzU%Yka4jCx^hDS#y;cE@8avL9f*RHXN^Uj*;QvhBef+Uve6|Ui-tRzA`TU-c6^7&%BmDJND>B z`p?-1?cOfU8H^gfEQDL93PUjcP{cTw9~Cr06i{6_cs}ok=d)o4xq2u47h~tHuAZ=l z>}f!6nPkR)Zw0><{Co}hD#_nxRL#hQHK{mfuqn7fg(TIy?Bo3+MRyhSudI0thmS6+Kfl@$4YLFE74Mmo zF(#_Kf_fzM8ZZRlH-BN??PE3~4R+Ov>nNJ(Zpt4iZMps$jbB4_E2k)N#vRciuZd`$ z&mz@kX5GB$7Drp^Z`BQE7fGS~*!InlL-bbj-YvogXdhF}^ohUp4P%rQ-aE>7=9(WYL>rgRqS9RthK4-(&M*Dma6*=HN=+ zdU1YNEq7oSqFF8R1ZSCkTy{laGGDxF=GXCUuGEtX-Bv@V&PeC(Yc1<{HRJnQ%Ol-S zoQ*pnY%ci@s<2?FJ-z@$z#=1tIti38|hu1(B8LK{XI+Bb*=NV z+O4Kex?`!^Pqf6opM2OA$%PO34AQSUEk>yFzrd;Y@E<%~O(kmk8mK-JaxQn3|ENAr zLiOm8&n8JR(|3dP@DIoNq79fQd+ATc@>D%AGlf;DjW-6^Pk(?@L;~Y^VzqDVN#PV% zo%YwRCzOa+_`NI^zved_$jQ2y9jv#uSMAnHs&Oj9Oy2t*XM271sCn>|D`>e+`t@K& zuuH>%{<>>Q_sTK%<;eq8?}B{g_O_RUVs+T#6T8Pjj-Y~DF@SNre`#L)(7jGUa<>_O=#CJwVD*i6@1^*dR4DNjGNpMASt>Y98L+y>G0ThYi5IO7k?}-sO!ksUW zV6b&og)X1nJdntZN(M*|Fa15(ja50$Sgm=V7aq~Ydb6)(^+O8~k7Tr|sMk==NVm=0 znOP{JCQ`86^TU3_zVoddn;I+y#TrvVK@)blXTs#_ZQO(oRH?{-#t&mF31iM7&MkU@EeefN_Tl3on;8DPUs z!=uzPMHGi(uiyP(z0Vk-Md@L(Z7Mb_=Ic|BcX}>v>MPb~t=!CXoEHh1u!y{6!kqi1 zYT8F$;zIt)05zmozxbeC*=O8`gG`5xZQhG}fuvDKbZ}24<>2J%>VDa>>sCcZ?^EVn zRE1_sEO6byV6lK%kYo*gZKRWFR<2S%(b{_Y5Zdxk^@Q2@34Mj=Yy^Us&)BLmYE&by zmn1mTOL5jLJJHNxNc|hl`P~29Dquz)Ok`M8!WG^R5KLzL=v(A93Eh$~xDq`iN&r^H z3{QCFCjl09XWQ9ODKA=dtx zzDHS{PU@nz&eX~(T!%UWe?TxuP1RKPDWk=>Sr9fz25Q1jeP1@>EgnZDvdAp5*qq8G zc(u#gPM)Nbm6>oo&NHp-=fQI*t9bU>)_6c5t?3(L=MIvd;HjbPx5k{t>?h~$^k6X# zd(-KP6LK71_>PYwYY1-vBBv~)3MjIFG)0>&R=?=MQT@yHuZo$1oZ%LZJmVu?M3I;k z<_{trUpm|1VZMkV!}vb4(uUI?D+_;t{W>i6=qt>`FT0Ra&)N_5)@iM8ReH#56Yh4X z9MZ^`Wc?j|(SK}D52dC*WGP30ZyX2>51**q>a&z@fPITv(t5>#iJ2_^v7 zvg3t1Acl3cg9OEfU?p>pOY2Z`1qVL&`DCEGWBgqGM*@aYXFrK6(qo&0+YjgrvrZK0 zPbJL-B!Uk8XWp+7EJiB9_i{cw@S`SMmr5lpB-Ow~GtRi(_GI?{*}|Y#)Qmhr{!`(9 z{TP225gtBKrs1g~Q&-iI{@7oOCaQoA4EA=Am*o;z+2?15GE*m&ahB>V@r8$TKAQYp zJ|P7M78Op~E%Q9jcY?LC9XEjY!Ju5szt-@8aThjtp;+=GIt(?~dKQzbG|@|I#d4Rw z7om_L1-f{Rl2Tl${oV|6K8Ma`Gi@vby< z8L`azELOlJ8jK460xqlQWBl6Xne1Tyl=Wk|US+@9rG>q(CRBHQ>P`K9EoSlq8g7Kv z49q;g3pL#sn|jXG=RNW;@JG|-)srORpJpzm1Vi8lZA4Opl+p>E<{BBF(Z1Bdv3gDb zUeBSq55ESY>l0UWzPEGi6J-x8y;bc&{NZ^b*I3fG+Jc9e zUg5H#V31y+boTlUva7>1UzbV-@1#9#aiiK_zy0G)nOC-yCf&v$cGdjdwY{0_)9Pg- z*zu&$NC>{M<7Vapurz3_4tFZXXjYeQtFNV~2ft*|7e}I%UA-(_^95H6TJ(0$9&?YQ zthULBzl3Nt;bYA*560Rb*s51GedawnqZaM&-|qAIC##pr?75A-7L2UzY=c&tz9 zL3fIssG@;X>kLZ9_z;yj(Rzkhox4&RCD<>88BG13KyH` zH>R9rWYftLx>jb(OP&cxG)t{zHk!R}vIWucNkJP75iN~r^~e(_)PT#q*ST@<6mQiW zDMsA+^4h5IYR=$PSv?eY5i`;U73o5_4z}XKVaP^sv-rZwitM&$(hLwRL8{r$;ZQZ+~N*eOGr- zsY^c5!0@2Ca&0t{>JP3TUCK%*LGkBwh zt?eaELF&RW!9%HIfMQa$#z|1MN^ymN5p7rw*@xe9dR=t(rZ7YC3CYh{kTc*XnA%Q! z7?o>OFum?7Z+S|j@Nq{x&t240<3@@M@xa=;Y8rjBf#$1NUEdi>W7skC5+-h`zY(5+ zo`|fz_Y|x#mYIG0{G`ju;6U((R`gfqk?=Llox4X?&4~0U!t#>OktB%+=|Mb6e&f|l zw+4ja&P?H8XLshz2EOUBTg1WBMNCY6si|`YgTyJcVF!dl*b@boEiSzt@?f+$lHK2gXTyEPOvgXDtW^jor5Y?-bz-$YNjFzag4FhFwU&BvuQ^sJu3@uXLFse)O193rYwa(Q9}m0 zy6^RbWPtHg#Rfa#A8%G@0^rwSQaRc2UX6l~5K&D-_l0pfrOjnN75mmfRwPaG% zutpYgU<-)wrev!ZGFjV> z0^0%YKvIrI*@r40PKx&99Y0bEKpqq}?8icSE1n6!wcU_>=wsbOn^JelCht_*QaUw> zgS545<;yBvh#T_q!!OEz-aYMS_VF_}>yIj6f#vGph_UPXv?pW`(p;=HrRT$A(vLGY zO>Tr9IN9#p-U0(v>5)8|sp}hfm5x|yqNIgYEAeq`J%ffwx&eqqv9ceuCT`@@v?od# z1P-^3#-IOuB3Fj~o}WQs$s7(cn;yFEM6>WDiGb?O71eTlvg^9?YBwX~@|EM+Sn~&nG+j_{5}x1FZjJyvdl9Ry2P_RP(Z!oy}em63;cMo35BqAV+2nsg=kG%Pu|xJH(( z`SPA{Wab+N)-ETTyTfv`aUlgWW|m?Xd|B3KC!@i#9=I7%+da=BHiGfsqHIwtDb1NT z7^#GH9^W1JQNI4uV!P(?m^BE@EH8t2{hlPz8z~rl*zDyZl5>hfVcIzJNtn*D{jkjA z3M;sR^KRJsQ2wu(i>Q|Ti781|ryJo%x(~Fa0+W@RoS~7fu#O$?v8iJUqU6@#kzoIs zxmTSB#vGw5SJcSY^W9$m*BWchB-fS#HG=kGYYt*tM0>Rm>+C^LIqZyqzr>Fk7%P(c z4*ZE5QYNldBl6(s_D}t*mmOmjQrL=@{W&lemqKoB^PdIe7w_A%oxjZA37pB<@2z9b zT~(lNmTt`=dy6mlF!;gvoC`A{am32bIKOzfVrr~o`l_;v2w9jn*KmoJC#k~FrApRV zU;x)YoMxT%Fv1-hJ=*%@=fPU-Heore#P65597Z0fJwF{-QNzB;2+S!ox4*J_XRd~mPFP5?gGl=)>I zu3<$mJem888XyvNg>m_f!W*hSAQUE&Ib!3FU@sd7B=NLL}_wP?#irR7( z7?vV_1tVRcMs-;%q4G>)t-?eI=A;p0E$c%2739x;(2a2B`X9Dy7_}(kIcI;(P2BbW zG)K#pI*~Ig)G$uFFcyhHW`3A;r#*|Zko>b)yWMLaM{WGLt`%oW_vTIu!4(=>v;9NQ zfGjKTB+av{r(-ALCN!J=lm6Wvl-7jbkWu2X{qAwVz;3(06m_1z`Ab-EF+%eU$o_1d z6~7B}6f&x_8PXTy%^i*n z?Re+sL+H;}H+JPUPEzUHoYuX5Exh`1j7J3=XytCe|Fh}h>i(}-`twSOyc0=2%ffpH zxtEA8oF=`$HS%-V=(?U9{TodAS=#LosKFO}dkA7;EMP4iJ{_cD}udU}tNBT|5Ksviqpkd7R zogqcz2G4t8qaPd*Jd38u))8Ni4Z)+>uKLaL_t;>Qf^6}sioLVON1DAuQz#vpHj`t7 zf&X$|Zy&x6P*)>V!P>}aRJ_h25tkvRIGEzgzBk%G6Ec!0jp3cKZfBW^?x<*%`1Xa7 zgOyw~zL*|nIu#EN@7)ct2k~Wk*@N7sANOFKBMfAZj^$*IjfGb}R5Q=qd`Fe6B0)LF z^nb{E52&WvZc#TViWNjrP?}0dDJn%kiqd;8QdLBnfJmG$pX|NlPY?sNCp_nv*m$#AHI)V1FAmif;4JiAoHUMi_}#~E&4 z(F^QH3&M!6rOkui*Ut2_PKYkIBl(M=9nn6h)}y8IVwtaX!CS$No}|828y@*LlACOg zwGTEkFAk1p_>Jno3Xuhketm*QV}qD=p7W_wzNDz|TKvl8%6Z$|dh6 z9qm|QC_=M6u%&5yqUU$Yt^8WP$wJ*5tzPtLQRY3~QuOqRiEIjzT6T+P_3dwzOI8^; zRFHyXU@h&>dJNZs_tv=POp^8)eI#ASm{Ti+_sPiX6yQb+c(!#hWz0mxN%yYfhDql9 zvDW+*$0m+=D$HH#-J;!zZ4S|rTH57@CLD`gsk$?`G(I@hZhH=I322y}(FeqaoFd?k zHYyQfcl{N^1js^SH=N1k>XHqU$GKUAhJ(OWm<{!6aAaW___!t0BYk;fY~!Gj?yh!= znFnU%^uVuK8HyxYEkE;9d)2f^mq*7B@0(Q9qfr!hsPmUuF>K4a8UDRKV-6x{M%$Ws zJGBiJn}<@5+A6fM^0)V4v@LwkEi_N3X?Sse#W=0jn=Gmnp(o^{V{UuATeaDX^kyxq zTp?-NiN_Y#U&Tbve}d8Al?Bv5*l>Hit?FGq5VJ`uc`INmassBJx2a=NSoyJJ?a(`q zNk}(-vPS7V4AmRq$hEk*6R}t_9U<MS0!Q6o0}^HZ?~2D zmi_4(#HAdZVA0oi#C_Ez^WZ*Y1lLl6c^9{ljUog(VKTSen>xO`;oXr?s1{-3%fcFxLoDab3+E7NzSOFB&XU*GQ)%zRY;E z24oB2344~NIex7hANuJL*0lx))o$C#5zWTO@vUg6(qHV`87kfw(VM4=G&As)ImI&Ng$iEr>xP^xAex*OsV`KV=uP*s<}>nCNhh|(`(E=tUF1;APbMc)a|894#Vsf?V&rZe-lIni-QRQ=# z(dLJCQ!c$FC~UToVUFqflb;G!)GMV&``@ZI-GbBbY`d_J%dfua(Td73|BB)KT8+<4 z?Cr|CmXeJpVmV!BrmxD!UQfAgS}OoSBBj;Co^8Ab6iF7nf~VTSigHG0j;c*jWG+$v6>kbw`=1a5JgdFWp=IXd2DF!wtCW3AV~aDlIw4%6yJ4|)RUg)A&@Y&uyO5&>3x;$3ABDY~ zKeN`02mE*|tL@Q>4=fM95wa3e^C+EfW+A6*D|~JFA}_LmH6ijD?@_9@MSE`DYs&wi zf0d53(?kQrbNjv~lSz@aI_xVnchCn<3?9x(P3;M2G_3s@CWHDl<9P4@xmdb6xNGee z?mJ(U&9Sd_hUK=g4hpu|s@ZB$HVE$!IOVYcmQT00MUF0s&0p`HB+bJ?mc zU&`hDPT`ZTA6}{6yz%0?n^f$koQIpc@wEtNf%fA)Mlo>(K~yr%a8bJC&EWg zs;Ag(HB|M9BA9mvy}oygz|l&fPWqKHRgSk6f^tWyA=2(YJ2=pm15-!On`zM#Ldg`# zt7jhMYO>*vsd>F`#7!l4Z5VP-I4$}fIfPD?B{k46s5`A~dvW6}^-kkYe%Xe4==Ej` zpG#YQoi@a#8^5DZ6QYTuHePbx^_7Ji_3EnSXV6oyt28+m!N&s`{9jTxa3P_gfgf+d zpJ(LA&`@on!|xpapNg+X?uv*KVB6+~h-$MY2rZIsLUv`CQidO0$uY=!wqs5-Vh#CK zDRuU&-K7tLMx@1G-3Qp~-!iISIW;DLHnE<05ORMr3^r>>eN+!)%wZ=(WtD zw{t|Bca*E$(i0jZ<&xH^zA5!h8~gLTbxo&iLu)tXOLYz{o#uQ@Egv7LbMnL41~m`m znsW1SzNpi!PC{rlJg(83hvsUX#*3Vk)=PKh#pu|`p4;>1$QGF;nOgz`{=IvaDrAE^ z-u9N$(LC8`{>~~P(5D&CP9tt4VD_CFE`=-t>3cHznqW7}18r!z-cF~Dexl*SAiIsQ zx3;_h$|xF+{-%rxdG7e+|`V#E+woRcY2p@6Pd^&jB-X#MSJkPAf zOBxH`?e3k+*Gi{Wkrmf``(=WL-|Lco%F`FF#_Fw4esW(CD~65I4&n)Y)B(PG{`1r%y@`b&&PHHCCKfM^#|16xZSX1z%`JFU};>(89%(mwKbMM`xE8x}tK05s5I> zcP&kUujGLj8o5MZGZ6wzwATo`ZU5{g>YSdqu(hqH{LQi=%A@8~dRver#W%=CJ)0{G zS+=kT2SXO>dtlb=!DHUYc2qavnA!fAdS{~8z?bBWv0m65w>2Cj9hHAxNg_Gq=NJju zIW*6y6p*!UuQ}iR*3|7mdT4crsVL+s-b**k;w^0KKY2t|-^3Kf@Li7HNq~GZ>{vz1 zwf;m%ePCaQEP|5KqqJseyqyWl-y9FZ9_i;(!#fNU5L-JwvlCiON!6AqVVPvS#;FiR zw?OVUF@AI9SvIT_I1<<6xf5-01>Og7n4;kIfoZ-g=0&=&iH(GqAP~dC2orEW?~{;@ zQ=tz5E9F!NWfrFMmn=Wl+^K0eR)Jclysas7_Q~lKRwPA%yL;f+!pbco6_?9Xp%^RO zraVY@sNjG|<)McDpeMR_ygtt>ea9>8_t~{~^3Cw6oWrMhg{zA47K~fprLR}JLsI0Q zTSYi*cJD<&E?hpu6fAo>2153tl=)%?Gd3^a>wkg6%M$*Jv zW&j=L^-n3tb2$-ssAj;<@OcB=USB7hM()+jS&pConsv+n-ze+$?=uen{!b+Ta;E>0 zbWF$!M8M&=UQ$)ebGClPtra`x@H_kEuk)PVuld14jq|ztF*Q!z&(5b8?8`feMXSw9 z#zi+Q7`y)Ufc(4U@Be>{BmV`b;n@1=SIy&H#X7V@_-N=Zohv>9D{<& zhvwl*+orV|PF>l$-BQ?YN30Y!BVNJDjQc&yKYMA?+mM2nf4Kd3x?Hpwtf0;i3RI<3 zuU-ulnK`a#!gUKNasBI-{>$=+pbEativdy{(;(+@P`y17lBrTAs0zt&7XU^9 z|LY~@wUQ~)a$NB`D^%ePw!7|0lJXM=ca$KMye@F2pD;A>Y_v{mn*y3As50Jv%nK_| znm+KMGwkyVP?==YNfn!o+$qPeSWq{)I3c!^3;r$V|EdRla+Wi=X-vELm#3blpG}o0 zet5yXpg&B$x*h(l44wKxi!$Y>2b2r^{fFkVQ`I)HavlEvQX{9+JHBmCP7jZhE{XVF z75!Uf~OiRv();MI@uBMlDZ1AV_bNeG>#j zIh2$#i6r&1Kt11o5AVr?ZBW&KE$Z^443hD=jD_l~zT!g4AB6!;k?UnTZuv<7RtiBHc9{3rk>2L6^-v^|-e#gCaSCfEzJPvrY%{Skj2HVfjQk1)i zsiRZM4IJusyb<^~pwaq^*J)O+o+_^z-v3qnaSaji<{OhHPqZtGs7b Yj|s9 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
  • oZ%~e) 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 b;-7c_da*F%X37b4g^BlR`X(ZE*BAc+1_7NZ literal 0 HcmV?d00001 diff --git a/docs/_site/developer-docs/Windows.Devices.Midi2/service/console-ping.png b/docs/_site/developer-docs/Windows.Devices.Midi2/service/console-ping.png new file mode 100644 index 0000000000000000000000000000000000000000..b94f56839a93734ac2e6d61c2ade5cb8d2820b9b GIT binary patch literal 165158 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

    js8p)^5WcZpj|Ca9t~wrc&5{w4d~c| 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 z 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 W@6Gf6<`i-(y<_{X@3~v|pZH&wcJep? literal 0 HcmV?d00001 diff --git a/docs/_site/developer-docs/endpoint-ids.html b/docs/_site/developer-docs/endpoint-ids.html index 1606429d..397da398 100644 --- a/docs/_site/developer-docs/endpoint-ids.html +++ b/docs/_site/developer-docs/endpoint-ids.html @@ -1 +1 @@ - Endpoint Device Ids | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

    Endpoint Device Ids

    The Endpoint Device Id (also referred to as a Device Id) is the way we identify individual devices and interfaces in Windows.

    Example for one of the built-in loopback endpoints: \\?\SWD#MIDISRV#MIDIU_LOOPBACK_A#{e7cce071-3c03-423f-88d3-f1045d02552b}

    Part Description
    SWD Software device
    MIDISRV The name of the enumerator. For Windows MIDI Services, this is the MidiSrv Windows Service
    MIDIU_LOOPBACK_A Arbitrary unique identification string provided by the transport. Typically includes a unique identifier.
    GUID The interface Id. For Windows MIDI Services, every interface is a bidirectional interface, even if the connected device is MIDI 1.0 with a single unidirectional interface. For MIDI 1.0 devices, you can look at the group terminal blocks to identify active groups/directions. For MIDI 2.0 devices, you can look at the function blocks for the same information and more.

    If you look at the device in Device Manager, and look at Details/Device Instance Path, you’ll see all of the information here except for the interface Id. When you enumerate devices through Windows::Devices::Enumeration, the interface Id is included and required.

    Tip: Although it was required in the past, we don’t recommend parsing these strings. If there’s information you need about the device which is not contained in the enumerated properties, please let us know and we’ll look into whether or not we can create a custom property to hold that.

    \ No newline at end of file + Endpoint Device Ids | Windows MIDI Services Skip to main content Link Menu Expand (external link) Document Search Copy Copied

    Endpoint Device Ids

    The Endpoint Device Id (also referred to as a Device Id) is the way we identify individual devices and interfaces in Windows.

    Example for one of the built-in loopback endpoints:

    \\?\SWD#MIDISRV#MIDIU_DIAG_LOOPBACK_A#{e7cce071-3c03-423f-88d3-f1045d02552b}

    Part Description
    SWD Software device. This is any device that is not a physical device connected to the PC, and which is created using the Software Device APIs. All MIDI endpoints are software devices and may or may not have a physical connected device as a parent.
    MIDISRV The name of the enumerator. For Windows MIDI Services, this is the MidiSrv Windows Service
    MIDIU Indicates a MIDI UMP interface.
    DIAG Mnemonic for the transport which created this device interface.
    LOOPBACK_A Arbitrary unique identification string provided by the transport. Typically includes a unique identifier like a serial number. It may also contain other information like the pin pairs used to provide the bidirectional communication.
    MIDIU_DIAG_LOOPBACK_A The entire string here is controlled by the transport. By convention it breaks down into the fields mentioned above, but that is not something you should count on. In general, parsing these strings is not recommended.
    GUID The interface Id. For Windows MIDI Services, every interface is a bidirectional interface, even if the connected device is MIDI 1.0 with a single unidirectional interface. For MIDI 1.0 devices, you can look at the group terminal blocks to identify active groups/directions. For MIDI 2.0 devices, you can look at the function blocks for the same information and more.

    If you look at the device in Device Manager, and look at Details/Device Instance Path, you’ll see all of the information here except for the interface Id. When you enumerate devices through Windows::Devices::Enumeration or through Windows MIDI Services, the interface Id is included and required.

    Tip: Although it was required in the past, we don’t recommend parsing these strings. If there’s information you need about the device which is not contained in the enumerated properties, please let us know and we’ll look into whether or not we can create a custom property to hold that.

    \ No newline at end of file diff --git a/docs/config-json.md b/docs/config-json.md index 9fceff1e..e0e874cd 100644 --- a/docs/config-json.md +++ b/docs/config-json.md @@ -22,14 +22,14 @@ JSON is typically case-sensitive for all keys. The Windows.Data.Json parser used "{26FA740D-469C-4D33-BEB1-3885DE7D6DF1}": { "_comment": "KS MIDI (USB etc.)" - }, + } ``` and ```json "{26fa740d-469c-4d33-beb1-3885de7d6df1}": { "_comment": "KS MIDI (USB etc.)" - }, + } ``` ## Schema @@ -61,7 +61,6 @@ Here's an example of a bare-bones file, with sections for three different transp { "_comment": "Virtual MIDI" } - }, "endpointProcessingPluginSettings": { @@ -83,7 +82,7 @@ The basics of this are identical for each transport. We'll use KS (USB) as an ex "userSuppliedName" : "Pete's Kontrol S61", "userSuppliedDescription" : "This is my most favorite MIDI 2.0 controller in the whole world!" } - ... + }, ``` @@ -108,25 +107,7 @@ This is not an exhaustive list, because the transport and processing plugins may ### Virtual MIDI -Virtual MIDI includes three different sections inside its transport bucket. - -```json -"{8FEAAD91-70E1-4A19-997A-377720A719C1}": -{ - "_comment": "Virtual MIDI", - "add": - { - }, - "update": - { - }, - "remove": - { - - } - -} -``` +TODO: Provide examples for this For the persistent configuration file, typically "add" is all that is specified, as it doesn't make sense to update or remove endpoints or routing on service start. diff --git a/docs/developer-docs/Windows.Devices.Midi2/connections/README.md b/docs/developer-docs/Windows.Devices.Midi2/connections/README.md index 7e376fc2..94c5a622 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/connections/README.md +++ b/docs/developer-docs/Windows.Devices.Midi2/connections/README.md @@ -5,4 +5,20 @@ parent: Windows.Devices.Midi2 API has_children: true --- -# Connection APIs +# Connecting to a MIDI Endpoint + +In Windows MIDI Services, once you have opened a session, you will typically open one or more connections to device endpoints. The session class contains methods which return an initialized, but not open, connection to the specified endpoint. + +The remainder of your interaction for sending and receiving data is with the `MidiEndpointConnection` class. + +All endpoints in Windows MIDI Services send and receive messages using the Universal MIDI Packet format. Any required translation (for MIDI 1.0 devices, for example) is handled in the service and/or in the USB driver. + +Workflow + +1. Open a session +2. Using an endpoint id discovered through enumeration or another mechanism, create an endpoint connection +3. Wire up to the connection any event handlers or message processors +4. Open the connection +5. Send and receive messages +6. Using the session, disconnect the connection when you are done with it. + diff --git a/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.md b/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.md index 31641976..d1e2a012 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.md +++ b/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceInformationUpdateEventArgs.md @@ -14,7 +14,7 @@ Represents a notification that endpoint properties have been updated | Property | Description | | --------------- | ----------- | -| `Id | Id of the endpoint which has been updated | +| `Id` | Id of the endpoint which has been updated | | `UpdatedName` | True if the name properties have been updated | | `UpdatedEndpointInformation` | True if the in-protocol endpoint information has been updated | | `UpdatedDeviceIdentity` | True if the in-protocol device identity information has been updated | diff --git a/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.md b/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.md index 905078c9..6bda899f 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.md +++ b/docs/developer-docs/Windows.Devices.Midi2/enumeration/MidiEndpointDeviceWatcher.md @@ -12,7 +12,7 @@ WinRT provides a `Windows.Devices.Enumeration` namespace with a `DeviceWatcher` This is the class applications should use when they want to find devices, and also be notified when devices are added or removed, or when properties like function blocks or device names change. -Create a MidiEndpointDeviceWatcher on a background thread, and use the internal list of Endpoints as your source of record for device properties. +Create a `MidiEndpointDeviceWatcher` on a background thread, and use the internal list of Endpoints as your source of record for device properties. ## Properties diff --git a/docs/developer-docs/Windows.Devices.Midi2/enumeration/README.md b/docs/developer-docs/Windows.Devices.Midi2/enumeration/README.md index 335cffd8..f9432a29 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/enumeration/README.md +++ b/docs/developer-docs/Windows.Devices.Midi2/enumeration/README.md @@ -5,4 +5,13 @@ parent: Windows.Devices.Midi2 API has_children: true --- -# Enumeration APIs +# Enumerating Endpoints + +Windows MIDI Services provides detailed information about each MIDI endpoint on the system. In addition to ids and names, you can also get user metadata, function blocks, group terminal blocks, in-protocol properties, the parent device and container, and much more. + +There are two ways to enumerate endpoint devices. + +1. Static enumeration using the `MidiEndpointDeviceInformation` class. This is a snapshot in time and is not updated when in-protocol information is updated, or the user has specified new properties like the name. This approach is really only useful in the simplest of scenarios, as it does not handle device connects and disconnects after the initial enumeration. +2. Dynamic enumeration using the `MidiEndpointDeviceWatcher`. When you set up a watcher on a background thread, you will be notified when any new endpoints are connected to the system, or any existing endpoints are disconnected. You will also be alerted when properties change on an enumerated device. For example, when new function block information is sent in-protocol, the properties are updated and an event is raised. For these reasons, the device watcher approach is the approach any non-trival application should use to list and track MIDI endpoints. + +> Note that you can enumerate endpoint devices using the stock `Windows.Devices.Enumeration.DeviceInformation` and `Windows.Devices.Enumeration.DeviceWatcher` classes. However, those classes do not automatically request the extended property set needed for MIDI, do not translate the binary properties like the group terminal blocks and function blocks, and also do not automatically resolve the relationship with the parent device. diff --git a/docs/developer-docs/Windows.Devices.Midi2/message-utilities/README.md b/docs/developer-docs/Windows.Devices.Midi2/message-utilities/README.md index 2fea3a9b..81d25e49 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/message-utilities/README.md +++ b/docs/developer-docs/Windows.Devices.Midi2/message-utilities/README.md @@ -7,3 +7,6 @@ has_children: true # Message Utilities +There are many open source and internal libraries that can be used for creating and parsing message data. For a functional MIDI API, however, we did have to create a number of these ourselves, and so surface them in the API so that you may take advantage of them in your own code. + +For other open source MIDI libraries, visit the official site [midi2.dev](https://midi2.dev), run by members of the MIDI Association. The Windows MIDI Services service and API code uses some of this open source internally. diff --git a/docs/developer-docs/Windows.Devices.Midi2/messages/IMidiUniversalPacket.md b/docs/developer-docs/Windows.Devices.Midi2/messages/IMidiUniversalPacket.md index 120e56c7..9f7c8aa4 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/messages/IMidiUniversalPacket.md +++ b/docs/developer-docs/Windows.Devices.Midi2/messages/IMidiUniversalPacket.md @@ -20,5 +20,7 @@ This interface is implemented by the rich MidiMessageXX runtime class types. It | -------- | ----------- | | `PeekFirstWord()` | Provides access to the first word of data, even if the message type and size is not yet known by the API user | +## IDL + [IMidiUniversalPacket IDL](https://github.com/microsoft/MIDI/blob/main/src/api/Client/Midi2Client/IMidiUniversalPacket.idl) diff --git a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage128.md b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage128.md index 9b6c2cdb..47913dfc 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage128.md +++ b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage128.md @@ -24,4 +24,6 @@ Includes all functions and properties in `IMidiUniversalPacket`, as well as: | `MidiMessage128()` | Default constructor | | `MidiMessage128(timestamp, word0, word1, word2, word3)` | Construct a new message with a timestamp and all 32 bit MIDI words | +## IDL + [MidiMessage128 IDL](https://github.com/microsoft/MIDI/blob/main/src/api/Client/Midi2Client/MidiMessage128.idl) diff --git a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage32.md b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage32.md index ab1382f5..f9aa2549 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage32.md +++ b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage32.md @@ -21,4 +21,6 @@ Includes all functions and properties in `IMidiUniversalPacket`, as well as: | `MidiMessage32()` | Default constructor | | `MidiMessage32(timestamp, word0)` | Construct a new message with a timestamp and 32 bit MIDI word | +## IDL + [MidiMessage32 IDL](https://github.com/microsoft/MIDI/blob/main/src/api/Client/Midi2Client/MidiMessage32.idl) diff --git a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage64.md b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage64.md index 1e454822..5246dcc8 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage64.md +++ b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage64.md @@ -22,5 +22,7 @@ Includes all functions and properties in `IMidiUniversalPacket`, as well as: | `MidiMessage64()` | Default constructor | | `MidiMessage64(timestamp, word0, word1)` | Construct a new message with a timestamp and all 32 bit MIDI words | +## IDL + [MidiMessage64 IDL](https://github.com/microsoft/MIDI/blob/main/src/api/Client/Midi2Client/MidiMessage64.idl) diff --git a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage96.md b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage96.md index ec18a959..755cd148 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage96.md +++ b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessage96.md @@ -23,5 +23,7 @@ Includes all functions and properties in `IMidiUniversalPacket`, as well as: | `MidiMessage96()` | Default constructor | | `MidiMessage96(timestamp, word0, word1, word2)` | Construct a new message with a timestamp and all 32 bit MIDI words | +## IDL + [MidiMessage96 IDL](https://github.com/microsoft/MIDI/blob/main/src/api/Client/Midi2Client/MidiMessage96.idl) diff --git a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageStruct.md b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageStruct.md index 611b90f6..0e37e644 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageStruct.md +++ b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageStruct.md @@ -17,4 +17,6 @@ has_children: false | `Word2` | Third 32-bit MIDI word | | `Word3` | Fourth 32-bit MIDI word | +## IDL + [MidiMessageStruct IDL](https://github.com/microsoft/MIDI/blob/main/src/api/Client/Midi2Client/MidiMessageStruct.idl) diff --git a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.md b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.md index 24261bcb..f54b4a2b 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.md +++ b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiMessageTypeEnum.md @@ -29,4 +29,6 @@ The values correspond directly to the "mt" field in the MIDI UMP packet and may | `FutureReservedE128` | `0xE` | Reserved for future use by the MIDI standards bodies | | `Stream128` | `0xF` | 128-bit stream message, including endpoint discovery and function block messages | +## IDL + [MidiMessageType IDL](https://github.com/microsoft/MIDI/blob/main/src/api/Client/Midi2Client/MidiMessageTypeEnum.idl) diff --git a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.md b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.md index 08b8dc73..3336bc86 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.md +++ b/docs/developer-docs/Windows.Devices.Midi2/messages/MidiPacketTypeEnum.md @@ -18,4 +18,6 @@ The values correspond to the number of 32-bit MIDI words in the packet. | `UniversalMidiPacket96` | `3` | 96-bit (3 words) Universal MIDI Packet | | `UniversalMidiPacket128` | `4` | 128-bit (4 words) Universal MIDI Packet | +## IDL + [MidiPacketType IDL](https://github.com/microsoft/MIDI/blob/main/src/api/Client/Midi2Client/MidiPacketTypeEnum.idl) diff --git a/docs/developer-docs/Windows.Devices.Midi2/messages/README.md b/docs/developer-docs/Windows.Devices.Midi2/messages/README.md index 015bca94..be397b0a 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/messages/README.md +++ b/docs/developer-docs/Windows.Devices.Midi2/messages/README.md @@ -7,7 +7,7 @@ has_children: true # Messages -Windows MIDI Services messages are all sent and received in Universal MIDI Packet (UMP) format. a UMP is made up of 1-4 32 bit MIDI words, sized in 32 bit, 64 bit, 96 bit, and 128 bit packets. The first four bits of the packet are the message type, and from that, you can identify the type and size of message which follows. +Windows MIDI Services messages are all sent and received in Universal MIDI Packet (UMP) format, even if the device is a bytestream MIDI 1.0 device (we do the translation for you). a UMP is made up of 1-4 32 bit MIDI words, sized in 32 bit, 64 bit, 96 bit, and 128 bit packets. The first four bits of the packet are the message type, and from that, you can identify the type and size of message which follows. ## Words diff --git a/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.md b/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.md index 088ce6bb..b9643278 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.md +++ b/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/IMidiEndpointMessageProcessingPlugin.md @@ -8,7 +8,29 @@ has_children: false # IMidiEndpointMessageProcessingPlugin -(In progress) +This interface is implemented by any type which can be an endpoint processing plugin in the client API. These plugins are used to process or manipulate messages coming from an endpoint. + +Microsoft provides several plugins in the API, including the `MidiVirtualEndpointDevice`, the `MidiChannelEndpointListener`, and the `MidiGroupEndpointListener`. All of these types implement the `IMidiEndpointMessageProcessingPlugin` interface and operate in the same way. + +The main part of message processing is the `ProcessIncomingMessage` callback. + +## Properties + +| Property | Description | +| ---- | ---- | +| `Id` | Generated GUID for this plugin instance. This is needed if you want to remove the plugin from the endpoint connection | +| `Name` | Optional application-supplied name for this plugin instance. | +| `Tag` | Optional application-supplied arbitrary data to associate with this plugin instance | +| `IsEnabled` | True if the plugin is enabled and should participate in message processing | + +## Functions + +| Function | Description | +| ---- | ---- | +| `Initialize(endpointConnection)` | Called by the endpoint connection. Perform any setup code which requires the endpoint connection pointer here. | +| `OnEndpointConnectionOpened()` | Callback when the endpoint connection is opened. If the plugin is added after the endpoint connection has already been opened, this is called immediately. | +| `ProcessIncomingMessage(args, skipFurtherListeners, skipMainMessageReceivedEvent)` | Callback for processing an incoming message. If the code sets `skipFurtherListeners` to true, any plugins after this one will not be called. If the code sets `skipMainMessageReceivedEvent` to true, the endpoint's MessageReceived event will not be called for this message. Note: this callback is synchronous, so code in this should execute quickly and return immediately when complete. | +| `Cleanup()` | Called when the endpoint is tearing down | ## IDL diff --git a/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.md b/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.md index ee83c9c0..762aa3da 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.md +++ b/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiChannelEndpointListener.md @@ -8,7 +8,24 @@ has_children: false # MidiChannelEndpointListener -(In progress) +This class acts as a filter. Incoming messages with the specified group and channel will be provided through the `MessageReceived` event. Other messages will be ignored. + +In addition to the properties and methods in `IMidiEndpointMessageProcessingPlugin`, and the MessageReceived event from `IMidiMessageReceivedEventSource` the class provides the following: + +## Properties + +| Property | Description | +| ---- | ---- | +| `IncludeGroup` | The `MidiGroup` that this listener will listen to. | +| `IncludeChannels` | The channels that this listener will listen to on the group. | +| `PreventCallingFurtherListeners` | True if this plugin should prevent further listeners from processing a message that is in-scope for this processor. | +| `PreventFiringMainMessageReceivedEvent` | True if this plugin should prevent the endpoint's `MessageReceived` event from firing if the message was in-scope for this plugin. | + +## Functions + +| Property | Description | +| ---- | ---- | +| `MidiChannelEndpointListener()` | Construct a new instance of this type | ## IDL diff --git a/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.md b/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.md index 3154b5a1..903a41fd 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.md +++ b/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiGroupEndpointListener.md @@ -8,7 +8,25 @@ has_children: false # MidiGroupEndpointListener -(In progress) +This class acts as a filter. Incoming messages with the specified group will be provided through the `MessageReceived` event. Other messages will be ignored. + +For a MIDI 1.0 device, where the ports (virtual MIDI cables) have been mapped to UMP groups, this class can provide the equivalent of a MIDI 1.0 port to an application, ignoring all other inputs and operating only on the included groups. + +In addition to the properties and methods in `IMidiEndpointMessageProcessingPlugin`, and the MessageReceived event from `IMidiMessageReceivedEventSource` the class provides the following: + +## Properties + +| Property | Description | +| ---- | ---- | +| `IncludeGroups` | The list of `MidiGroup` numbers that this listener will listen to. | +| `PreventCallingFurtherListeners` | True if this plugin should prevent further listeners from processing a message that is in-scope for this processor. | +| `PreventFiringMainMessageReceivedEvent` | True if this plugin should prevent the endpoint's `MessageReceived` event from firing if the message was in-scope for this plugin. | + +## Functions + +| Property | Description | +| ---- | ---- | +| `MidiGroupEndpointListener()` | Construct a new instance of this type | ## IDL diff --git a/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.md b/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.md index 334ef717..d4bf01bc 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.md +++ b/docs/developer-docs/Windows.Devices.Midi2/processing-plugins/MidiMessageTypeEndpointListener.md @@ -8,7 +8,25 @@ has_children: false # MidiMessageTypeEndpointListener -(In progress) +This class acts as a filter. Incoming messages with the specified message type will be provided through the `MessageReceived` event. Other messages will be ignored. In this way, the listener can be set up to, for example, only pay attention to MIDI 2.0 Channel Voice messages, leaving stream messages and System Exclusive by the wayside. + +In addition to the properties and methods in `IMidiEndpointMessageProcessingPlugin`, and the MessageReceived event from `IMidiMessageReceivedEventSource` the class provides the following: + +## Properties + +| Property | Description | +| ---- | ---- | +| `IncludeMessageTypes` | The list of `MidiMessageType` values that this listener will listen to. | +| `PreventCallingFurtherListeners` | True if this plugin should prevent further listeners from processing a message that is in-scope for this processor. | +| `PreventFiringMainMessageReceivedEvent` | True if this plugin should prevent the endpoint's `MessageReceived` event from firing if the message was in-scope for this plugin. | + +## Functions + +| Property | Description | +| ---- | ---- | +| `MidiGroupEndpointListener()` | Construct a new instance of this type | + + ## IDL diff --git a/docs/developer-docs/Windows.Devices.Midi2/service/MidiService.md b/docs/developer-docs/Windows.Devices.Midi2/service/MidiService.md index 4931b35e..8e1f8c5a 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/service/MidiService.md +++ b/docs/developer-docs/Windows.Devices.Midi2/service/MidiService.md @@ -31,8 +31,7 @@ The ping does not tell you if a specific transport or device is in a bad state. Here's an example of ping responses through the MIDI console app -``` -``` +![MIDI Console Ping](./console-ping.png) ## A note on updating runtime configuration diff --git a/docs/developer-docs/Windows.Devices.Midi2/service/MidiServiceMessageProcessingPluginInformation.md b/docs/developer-docs/Windows.Devices.Midi2/service/MidiServiceMessageProcessingPluginInformation.md index 91bdeaeb..52fab2d6 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/service/MidiServiceMessageProcessingPluginInformation.md +++ b/docs/developer-docs/Windows.Devices.Midi2/service/MidiServiceMessageProcessingPluginInformation.md @@ -8,3 +8,10 @@ has_children: false # MidiServiceMessageProcessingPluginInformation +(section in progress) + +## IDL + +[MidiSessionMidiServiceMessageProcessingPluginInformationInformation IDL](https://github.com/microsoft/MIDI/blob/main/src/api/Client/Midi2Client/MidiServiceMessageProcessingPluginInformation.idl) + + diff --git a/docs/developer-docs/Windows.Devices.Midi2/service/MidiServiceTransportPluginInformation.md b/docs/developer-docs/Windows.Devices.Midi2/service/MidiServiceTransportPluginInformation.md index cfd85adf..abeb50c9 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/service/MidiServiceTransportPluginInformation.md +++ b/docs/developer-docs/Windows.Devices.Midi2/service/MidiServiceTransportPluginInformation.md @@ -6,5 +6,10 @@ grand_parent: Windows.Devices.Midi2 API has_children: false --- +# MidiServiceTransportPluginInformation -# MidiServiceTransportPluginInformation \ No newline at end of file +(section in progress) + +## IDL + +[MidiServiceTransportPluginInformation IDL](https://github.com/microsoft/MIDI/blob/main/src/api/Client/Midi2Client/MidiServiceTransportPluginInformation.idl) diff --git a/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.md b/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.md index adf0153e..53836917 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.md +++ b/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionConnectionInformation.md @@ -8,7 +8,7 @@ has_children: false # MidiSessionConnectionInformation -This class represents an open connection in a Windows MIDI Services session. +This class represents an open connection in a Windows MIDI Services session. This is an informational class only for reporting system-wide connection usage. ## Static Functions diff --git a/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.md b/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.md index 2a068452..a63fbe3a 100644 --- a/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.md +++ b/docs/developer-docs/Windows.Devices.Midi2/service/MidiSessionInformation.md @@ -21,6 +21,14 @@ This class represents an open Windows MIDI Services session. | `StartTime` | The date and time the session was created | | `Connections` | A list of `MidiSessionConnectionInformation` objects detailing the connections currently open for this session | +## Example + +The Windows MIDI Services Console app uses the `MidiSessionInformation` `MidiSessionConnectionInformation` and the `MidiService` class to display active sessions. + +![Console midi enum sessions](./console-enum-sessions.png) + +In this case, you can see three open sessions. The process name and process id are on the left. The session name is in the text on the right, after the word "Session", and the start time is the date and time in green. Finally, the list of connections for each session is underneath the session information. + ## IDL [MidiSessionInformation IDL](https://github.com/microsoft/MIDI/blob/main/src/api/Client/Midi2Client/MidiSessionInformation.idl) diff --git a/docs/developer-docs/Windows.Devices.Midi2/service/console-enum-sessions.png b/docs/developer-docs/Windows.Devices.Midi2/service/console-enum-sessions.png new file mode 100644 index 0000000000000000000000000000000000000000..2941ed89ce1ca3ad56e4a25934a78f9fd9a35fc6 GIT binary patch literal 105542 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

    eIVsYOmaS~ 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 Yj|s9 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
  • oZ%~e) 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 b;-7c_da*F%X37b4g^BlR`X(ZE*BAc+1_7NZ literal 0 HcmV?d00001 diff --git a/docs/developer-docs/Windows.Devices.Midi2/service/console-ping.png b/docs/developer-docs/Windows.Devices.Midi2/service/console-ping.png new file mode 100644 index 0000000000000000000000000000000000000000..b94f56839a93734ac2e6d61c2ade5cb8d2820b9b GIT binary patch literal 165158 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

    js8p)^5WcZpj|Ca9t~wrc&5{w4d~c| z-pUDYiCNv<#iB12KR~hg+}*+dx`OjeWwnSP0NNM&T8IFCjCn5gl|`+&;W744(ofoY zGMGCXD@?S<=gQIHi^0ib7AY^Ea+ZA0W+gWcQqnr_s6Ob_xMJR?T+5@&9);;9?$SO& z4%sqCbZF(T3#hNLb&FQKt8+(?#t2l;JvL(A0Y`R&xa&lIe@GQ;MO^G*(LeJhe5R8@ zup~#oyyZ?k$eY2OWwhGFw#An-KA(E&>x!7w-=`A;g-W*bG=hDfKNHJe=OBL*NmVz&2@R8 zP^i9Q`1Tl{o&lvSqaBUj=Sr@FNc;-q6jaQ}m>-U9QH`!69zaz*25cuLw=CT4`dUtb zlI_df_B9aE#JQPQ!@i#jz?X3{9taZ*Sl$25rA^{+exW(@*)6I=|pW+tlqgzz`UJAydaS(#!DO2w?(-(^h0lTwkX?ydP{h#;KRxWA*M`QBl zBTvJV}=%u8Gu6^WUhJx_^Df#P%E7V*rfm-#TnI|zrV%v0- z@m8^O`gLE@I?x3*dhKZN+gP`c#h-lL`iWVoc10kS1;DM;KC|c(lv_cGOoQa@R;>uq zuE}H~rae)Wk(yyoGXq6vBM7yxW?JHkqrL*6aG8#_^dAmvAozqsY17s5jlS`Ry=ib7 zky}owDfqo}}B`9ZRl!lIF3_ za`36l`rXq~B+5aD3Gk<2qL;D+kOOtWvg5%R02jpG(&@R%^6P%U(x|&{YxeS zo}h>H#J{>yp{~*YIg9dNn2z7C*a4H^_|G1=|1D|5_Or3Dkk{xm=$xaxxmhxdA$j~D zui{WrV@pYGGym!<%*$^|N;OlUBW2Fhl-&xgJ&?Aph3&q1T<8C-DHevi^lx0&e{Gok z|IyO_n?L2%9{Lb!xYaXM;Rn@P3Tf7>Pe|-=xEO!5#NlwI1wddS6gx<+Nw&ZCCQvF5 zZsi<2f9_BiC`Nb9|nzH zvD6wV=xq&9qg}oWC}OD39HQI@Mn|3O;WtWdW`mj?AiP0qdVe>+7kDPqto-gXCue8S zF9n!wQX|6+(FdBV3PBg6PRy@9FrAou{me2@F&#ea58hl#kt0tw{_*S*^lAarqYvuO zSKBFdOhd(i(NrNmnUne0w1HCnkb3i+==r1FTlgmNVS!B5caq|Wjplg1W9s>|*C>R) zx48ixbIL`8aRW3Kwzq4mZf{b8f+t5FTQh%i5FR#=v&;LU4BBD92UHaZRV5{zX4RBs zQyO^T2Yfct6XVXgL$Aix61vLM!TYB=&d$XUF%EjHK&b#!TA}_d@NU!-P*_?18g*4D zW-Y}XtUMUB3J9#Ep`4wab(HmEK^EQS`Lguf;YK9O=@_TNZM`tb;nnOzuK~3 zFlJkKJniIaO%wAPL~%pSiUCv?P~gJuvg=NkYn3D={U7Sy1E{I>dmD|FW5tf5fQ2F= zAcBfQhz&6Gj?^fKAXPzn)5B3z1f=)gL5TEDZ1fU3(glRj0@5KN$z25;g!|pnSWU?m4x(A*dYjNx>oCjJ zi3{Z={50Rso^+RI6}Hl%k4h{iE|h+YWi?&;Er`AD-b%2>#a}l67K;>e_%F8jy0tec z%zrcV?Z!H)n@|IMkb+3i+aZ}!VD%>xM{mL?Ln;Cp<;S9Z#_w2Z$7RUmO81vf2majY zI?MAVkCJpz%=r$h%)c)4he7gCQi#4kCzJtkCJDmg2N^834K%X;bw?3R#5@VIgivUf z0qG&APil^r^qL-4G2k4AB{^a4T&y?=@Sj7eQKJzPUhq6kHab&NQ_dZkjf%90b;x&^fYM4k+dxvqT_1{LNX09vjIcc8 z-!?<#*tekd15d`|JfYO&bV)g+Cz}@bms>hc8iDqzWOdjJq+1hjQIVG|wDBMBgH9GC zdrtDv;@yr%MqcedBjQeX;c33lmq)8@N3=!L+12TwLtw0vFy!g?RM2CdcHEj~Lx#c! z#4I2gFJudpfe6T@O#o38Bl`pLJPO6ISM(q=Q~sxBGXL2px;A4C$R;@S`Zk!4bmSi$ zM}t%hZcoCRkN!wJj8d0X}R ziP?J;U;NXF0>0&IcuY~wEma?Kfmc!^ZC!ogm|-E4jX?i;CxH{5Obf~bBSC-%$vhdP zfDaOdaDSA~EEVt6I<06_3*zs=TZBq@)`mZl;E4h&pcs#|_G)5a9&%3_Ahq-bB`#UK zTESld3ZW9M8S{dScrbs6%+m}<4PV$@4OL+1v`C#evSKnFN!UMc0b@MS)Kv0x%k^#% zkaog4O$EgcY&7f1K{>m9Ylwh5kXIEM5Rijj9Ytiqkf|L9-RV;hgURb$;8u)&Z(VvTVEZ39`)s(fEh^s?AayxK2RYNFjo#9fLJBCJ*l z`uBKHby?je2NCgUTLF@L1hMkOXb3KtlMSRd3RekBvxVs2X0@3EnzyCGM*355`A(kP zZ4gbbe)nj~arDs>Jz*E*FEQ`ud&hr6F14-OZ8rIYP`|I)qU zij{!-l(AutypjHAd(Zh!EvT+^XYA&M5wjU%QejN|XJb)r?Q5HVt>|)7Hu!uC7y?Az z(eJX*2xiRG(sJgoOYL8-vOQ{Y`gjN0wtz<$?`05O;Pvl{`b8_EQArhL73{Ach zdyzD!HtgMC0ljqCFhtTVcDrx){S!g0UevX)9h5W%EVD*XE`_Z}rX4m-WNbbs8rGnH z;x2)rk67U|!i~U0gekj0abr#{r*F%LE$9K=yEK)s%VkGoWSpIimCQOru>MuvP3D{r zPtEHv+)7r_rd_TQ<`|Cgj`q3qKy zInzLKCf)+Z7Rim1@@%IxN{a-2G4vwNN3Dri|0#_eNCIOMY?)LAe6Q%7=0|fRFa=eU z-=88X(u`Z9e$~K`QqQER|-QsPutYD+fH?M zYh6WF0;tEu&YY3|U<}fC#AMfn?SBi8-U@m)bjov|Hx~bv1?6Z9BBlJCkHFyB1*d!x z)yG&;#`I}Jgu%8^l6|+WM8BhN;K(zzv_76J1{BdES zgz=FIrK@5&KXLSv3iydVU^`4rOq5{s5ZSDG_r=nhSaABeQ1A`r+CNdzozfOAZ0r*i zb!n^^sfA4j;>f(ce%77gj70_=)G7CjS1#VIj>wYlb(T1%82K%82gl3~ZJE|U!_rHm z3F!LcXKD+>8^1okn|%}ND&(g^ZS?-uOrn&IZWL)b zl+E^@gzRu+6uZ}w_`xPK(DMVl1In7gEvSLkA2ur)%8_NZa)J(@6C3_Zat|)MZ>lqo``!f* z*7G1@AMgaZfew~NoCjLqlZ&8%Hv#)yUdPfyU(JWw5|HYEoaEHRRd1OmmLTJL3X6 z%V*Dbo!H-XWAurIyI88v*L(Fw?&3-rxJk!>(fwx(C8-V*U7VRDBB`bOiNp;K^- zYq8uQwe~`8@ms{~A~J%{Lyud9eE*j9L{$tG(&b|=(*St1Oi+{EyJNPwO=1F;%|lm0 z%or5^srkP*~R@^&i`;!aB=#jPM=3^e8qNm1Y zo_>w-HE|+jM_?%JVgQT1E7)oPGLz{USu#8CnWB0XyZoft(_o?zL{+W`--2Lv z5X`jdg9qSOfjSrAbDaa2FXgi@9b@P{*8#S5X6a=-7CnzeYBday0N4tIsWBva7kASO zSF>TD<_>=O^2D3tpbhteczuiXwBm900Y-v%q5bxy7}=K-*~WXDeeAa=gdynnn=sP@ zu4lYhM4AhA7R^(keCN(RtvTf>I(jk9ov_~S&Q0!ipiHDhotyyqoR#s)f5!6J=Z|+9 zPK_Zx6+9)<)gw&UxTo7At9ki%mJbyhD0JYUhbgG)kS%Hx(F`u5Mc`s8K;+-%5v3%4 z^tD!OgYZ}x3=iTvOf4+(bFGvA^);w+Ti#TdN%y&pUyQ9 z#@+dM6pylg_W!LAgKOlMmc&04EQ1(YT_2ib%=ZV>+JtyZB{bzYqyKsG*h66sVXvcj z_p3r5tr;Wy-3T@t*~6Z>ZPP~3_0|6n(gJHmv)N1<`Y&#hT6r)(oaF&6j>_wxNC;}< zNF8V^{nFCXfMDp2Lweua-%n1&*^nE1DlE!#eYZUMcHeX276;|sUWwIvY%pqemw#Vb ztEIm`6KR-*$nv2AJP%6lOaDMEK0*SvHEI_W3vp<#!v8^E0H8tLH6h&cqC$=bf z(taFwmOIb*(7_(zH#^A3ZgnHg6uv-CCqde`^Ai&X?1^d&Jq}7AdL=h~Ja|UPs}D*i zqEKV7q2iGcsHehJY}0T0<$BXJfK#Y$Q8P45K&n7^pHzSJ*n6!;U?)n_`{cu&+|P=Q z>W^6T75%5_&B+w{av@;?y49$H@qo&Svtq|lZ&+_M9Fp=m!Hac*IPM<>0c!h;V(;l8 zPYz4tP1lv7$~ms2q$g}J-%L~Gw;MruB<1F|DQte`4~ecXfFn)*sW*Oi1rS1N)K=tH zemBngKh-h+Kcr=32)~GXuB0$WytNe0Xn3v&{)0Mum16-9=ef9oo{&o0`bK{*9@I0H zHr)9}g(*HF-^-Bn_e0Su+6p|GgD1Ine)-F0a;ZB)!|e0bCA%Z7k7ruZ<=mK5_j}{< z41=?|gwj>|W*H_Li`%!s!!EdcXLEZm!aRoc2S0+CVD;8Mn|F~Sj0%1CyvWk0zR81h ze}!=Om~%cy&G7z-%L|OSx^QedZ5^0(u1wS6v}>a}^-nwdBOs-38ihTchd0NvfW&PIo@?d@}etd1qWPqkbs&X~4 z{X?B;ioU11MutaNPaW_SHw+o)%skkQD`a<5w(8O_e{>1ewW zGpef__H@S9?n!mPt`rk;YlbjAA?2Ie2_X$07n;C}I==RtEM;F;=NwghvceVGnuK%y zTV=*su1mJLYFfhBmMlB8>w*?GMpNucX3GqDs-uMd$T|N{NrvPpxO@#;1wlz}wc@%^ z96A9;WE1MB?pC3N_qMdQo{~ux|HS47s z5m9BGONvv-t;!N~L-U%h!=(?8B03Sm;#1tTg&rf1o-_V5(^Rxq-N_`D5wG+UreH5j z0r!7RLDoMtl6&o=!xW(}cdzRCBeLOzA<+LJz9n^|QabgQXgRSAIu1bxFszEbePO^L z7&S9I?mfA;Q;a%M4SOF7r>n94&^<<3OzaF#BS8^{;?N`QEYeI^K%nNOIkhOKMh;Fa zGbBh8-ItR)(%*;uILAv|;zE{A$B*v9bFF#0&V#P9h6=^kznsfBOg7c5FG*Q!U>5kG zIZ+%#3tNc%{z&IRR5(YmUcNCd2^J`pdU0QIDlvCvAn|@shc@HqO8!vc9w>=zk{7>S zP8eBGWmI7oW>q`BDw^Fj%I8djg{JRL_tSU(NV$qjHg~6pu^&p&T@-8^yVk4S?(l`= zPv@PIEg=u~7xw5Bj3Xn=JE)yJiH*@nExSnu>pc@U%L_MpSo&?pVsEF6e{{v#d;K#e zJ`9Q;#rk$R%500VZhE+Clji97YnZ${{&tqy2{ppZPV~0WnK^^;I!VSb zHKUO3!&J%3Li3sxtRT#Dv5>=Ny$0Z>9x#!^mUUsDgy_R>!79m*bO8;H_M%#eY zoSch@K-FKEWB2x`b)~a`BC~FnRH2_D=SKD7CZ7I=2=M@JUf%xltO#f`2?EtkM>QP( z;^gh=hz=ZRDd{N2yBX`qs_38dd>frQCoG_umvPI&&lYagq+jCVUz^1^)8f=#HEt9?1@ijmw{C+aAMCy7cXRJ+pz zT@P#22+FgWt;7H0iP?Z~Nq;`;Z^qzX#rRE$iWY*Nlc|4z)hE84CjyUBHdE6u4j zC7_PYbxa%#K%Pw-D{Zbvb@9h%Udk7vk@kV`L8cceBe0tD1FSzQ(iBBg^g9BQ)4;?z zZf^rKGG6RFcDAP@>x^$q+M6>~JsC;16{qFvqsU>GbLQq4Pg)zcK4|kIq}mH?^^JK_ z+*INmfGjIJAzqJVD@w4CwTogm4~v5G$ex&h1B{~@^5W|Li%op)LAoq1-s!JX(&H&- zB};qq*Ay|>x`j6P4DRT3X2nuqDJSbn7d`8%CThPL51V#XpZ6W`r%=PJU$whr^%%8FY9-R$<{PvZ3GDi1t{bq-zok5M*GK*-R_A_G(u)}VEcHT{mTrvEki+wv{*Ro;sJmXgnZ>ia zxS#61Xn_Hnx3A@w+j$1PHf`Ri%dh82IJcR)f*lHXqsm@;M0efE#r}sS&ZXvdp)GJ7 z4IErEyN=6<|5esp977&iGRtu}i%FF67jdf^y=FfVotWmNGLN6_hv&I2kw+-k5?o)j zrVZshak3rNGqvjWf0`kFrfu13y1){%04v1FVfklb#XwFLsVjx!>OzD<__1ySsgeiC zoMBbEW;DcPW!gP@uluqjfi1ZA_$RHyV-_Fh^?yz(dTqH?1wJAb#s}HL@ag3;Zv}x~_XkV2 z{1d-ax!$zye}m7>SgI- zb`{}Th0WGkG;(8kbbrPTQ-)viD02T`xzp1kM*H4abtMzJC0)%FPqdwS-OE5~o;Gf$ zf^cDVl|CtSwAyR>f84&osZkM~cl;%s=<$h*h84{VCueW2)XiGiMhiXdiN`o^$CbDK zpmgYxNdzNfqv=K#`bq4y`PHy%%bz2rr{7PQ^q=FhycOJtaoSY4gVer(sB%mvAEsTL zW0viTW>cWt%Vz{H0Ra-uOS)P(OeKvl41?xp^Q)*_*q}=RPg~ci)6@FfryP_cSLwsl zUBzEkGza0YerztdpRNer0XvS^oGqyBnj8K7pzF<3Pcb5#=8#JwL#B+YvA2Gs(F{@) z1WBu~E2bf!OHG?-J}>wg~GNxDU|(8en=(EK)li73CK&HkbnY z6lT85W~CuJ*ZC?u-P5nqiuS?v%xSHFpKJ^AMF}~RCjIHgZjYaH{`R}+{5e@&nU9Ei zCDQ(jFtrNW0G>z&(s>zrv-#%AYp2vF9gGq4nytC^yhhUXoU-(YLd=NxU@n*u8>mAL z$C_$&rK;~S)-fYvSgbQ`9>csFI;~~8V-e^mGPxS&pP|5&_P*?9X(3+m+|-K8 zG4+Fr9Xxm!rMUSwi7UwNY9tUYO|0!cy9ZQEs#6?KqNDCp?r1r_SeWL=S3t=Q9{f>H zF5dqDO)YEX12r&n_*HheTdy`4y~F45O3w915KC>B{gyI|xRE(wC#lNP6@(L^8kSUh z#qqPyWD#q(jaT|V9#;#QB0nCmb~b><+M>O%Sv|tfhA)9gyZ@pJbx=rskIDxN<+&g|6jSa$fv?q^K#*diBDHbEN7sr%J|+p599qCCv(zw-$-UP=Et4zEXU6>qP{{+ds<7_TDd+q=$?#w^fSMggv{IBDUz{`J zPBXL5xGdp@*UP(CzF7Z)GQ~!kYGlz!g@FfOX+4r5oGU37Y??h3UYwH!8mkd)L{qr6hHD_@Ex8aVh~znnjlEC zjw8`E!6-S`2kR3Opj@Ka96rAFziR4HjW- zLr-2*FA0OLTjjxxXJv)Mp0500e?6gKFIZZ48PIB@pU**^?!LNRP-d_m2% z@=gbWM*qBIKB2rDBJ|%syLbK>%4G@=sr5^)r&t?@!0{At_$|9I<&miWM5gm^{?B3R z9i5J^sz`V^l_%+5kh^h#8rDBUulqznxYwjtQmwH4!X55NRXlMZPy1j~T463~_deRL zny8yIxN4UnQ^di*hJqHz-)9%rS>G(-YH0h{BsYd~3u>owY;LZwB~MA^2sO8{Eb3v( zMtf4>4W^{QISCrZC3f9C55Gd2oAQaBJQ0gC2$uuh9D z(q!}1zzoWJQG@r~QO;56+-}+s18`vx$PJ4!(|J`287qA*!3K_J5JNzqza`j`<_`PEIzUa|VK^0`mao5o3Cj8Eq0z?k>mS3QyWB-1POhZVkp4bLJJvHo zLJvCh=43nC8xezy0P0^`c_Z{KrTeCbJEX&!;XtC1BU&Um7z1_HE3&GD1+h|-8_t44 zGGEI!zj#K6V2;LDh>XkNi$Hpp;6z8?vcN{?PyIos_gdn%vr~+65%;(Z#qwz%T3)Ky;J`q7|ZIU<3bEZOb zANL;pJ6>S68q707VaEJ87w_R2_UM%mC1=^FOIR&4dK7Z0`9Cv-DnP8n^ zI-J6V#ji^^CT??&AxUNDk<7t0DW(T_`!ak3ND9PfA6Z`e9+16s&mGRswnFYBnWaf8!DP3-E%S?BeXl57;)$q7Y-8TP3 zh#Y&g_R=MYXbgD`-r5Ovk8FV4T{OAAJ-6TPr4y}`+PT<^^XH73&oolNM8ksst_red z6YgFzDw;9|o(Q`noKN>FV_Q+W?!4@~tXpJ4q_+V30BN(=ryl)xXtr3^d_Mwso>pO} zp3_rm%C3P`#3J!g4zd3+V05OPx(f>xAxFHA+Q-N1kxjkct2+GfeA-$T!x^;YWl7Hb zPHZbMApxzlW&8-iErgp`p?;<+D%CX#?V6mMDT(}En`=exNTFF05^OV6vmkP6vO~Z% z0R5!fn1X)?e*GLL*%tBaZY#(@Wq1zKo*+|p31%NmhPbr&&y}_B*g|w+p}8_Fae48T zp1daMYcEY{5fxmu#T_H5BgT_JGEJJBDFcqCeA7HG-Zg>8l(1cNisz1Ywosv|DTZsb z5^JWI$=#S9o1u6#RoZzwYB7cQi*gok>ziKRXo@@~st^D#yk%bz-sL0imQ2Fq!PP&aeHrXB)MT6L zGsgL+^DK$)su86$I3n>lDftp*BtK;w*`E-_rIqHAG##!BrGl+!Tei1!X~M4b64L+I zVDGBy7~s>6fgH)%ishBJg@RZlwoTEUqD1RZ66gQNxRJ_;tAF7BjNVLeg7V+%?&CQ0 z#cqzmgag%d%7X8=jRjb)MlMda42E0GdjZ@|0?$Drr)%b%8@9EmjU;NsWRTiPn9!-J znL}HU;f@hfg%b;QEI{fqb;4H)CZoJ$ULeH{h?Db@vg^kjUE|QkFPC*gO^9L0*0c-@ zjd&eVJYqH@8qQ{xJ7P7X`9;B=lyc6Dm=e%wyzk)I2T0&hHe}-jS0x$LdZy?NJ7&E8 zPt-{qfBie^jQbUJ0{dX{#cG8yT)#dk9=K{7r5skIUQ<;)tB#Oqi<)lk85xHzCJNFaj<2v zXwr5t=l3?u8Q?Ofp_Gs*<`D0;48B>!eG_%$136TijgO#`1b~bKJdovS%xq8pB*b!}{6~rVs5RBEgBk0; z_xQ?=T3fz~rh?!^TyDvzwY$>#>5XaOzR9RFWlR>M2SmXAb*zswPfttCt*m{NbSW^7 zefKw8ut8FvJx8{(vU95)d+7G0BfnIg*e_gdQ&)v=>MNX|*WUgz-IjSU)kL!tHt|vk zYNF6R3>O=YOI)s=T^8OC1n6=wKiqjH#AZ$WvvwAg2)(CD%S=fx==p>9rkQ1S(aZ=S zm1S5wjhVdEBfVN$Ve@tlF?(u1hS+U;f_xd?PtTl~UR?fxW9JXE9i+$Vt zreg5EagYd@rUY~f81q#avkOo6fBpJSWGK=}UNmJuK?8~8F0<=7+lfwCRs3Yaw)#~Q z8)~^l8>Ue{fMU$ikL^_4lHX+0+l1cdTuVc10f>b zz&zOz0isZPjP#jB!e#{-22rvQ!~hMJ7!jvM6QlvWei} zOqN|xkftcX+-xJHt#$v7cvIG(qCXCjP3_(G>uc!8_4js7g>mS94@4s#$8k9mT;0@? zxQ9*1j2|aj+_@+~L-k61ai~#&p4*+EYXjZsK<7`Zv)2UcE^feWpbY+I#zzu0A*B#Q zr3-_hABSjbA_*t(bbftN5R0G=gl#IX<9qVt+l(L-3r)YcGV#hcdggoxhe{G`TX0@a zq+FloS(5V=|0bl*0qBJR{+qm(KWDhw&9Pf=5kJtI;(khJ99Le5dqt~1f$tjZEKs3S z%anR@sVDLPCUy|?3Lwuz`4Pl?PECI(FWV!-7h)Z=NQD?=?E3` zT(JM9#0nXiMb+Y-RLvNb?X(s>43j2DQd5D3EsvBDuX2d@6&HbomIe=R;1ZM3E8feI z5NBBQu6@s7xi-YlkoAOvVb1aK0eStmJU_q^(dGw$PT&wAY7tcdsFB|H z#~l@waIL)?t&tVNOCb?3znO&25S7l5Z}5E|pN$}+mP9l$z` zF|i;yoG4tBIyZa8jIAs)0eGx@h=~!D0?a`XdcOqWi537)W%xG#MZ{Z5p7;-n z+mh%(&yR_r`DIizq}Em-;AA`ljfeb9api|ndY3@?wTaEeoB+4A1u;c6#cXq*;1P`a zReR>!K|TOiI>+JW(CRdCE|G$S;%x=H+oZ}Vf!muoxYE{I7#gYK?}3Lwh*BfHk$1({ zCBAJyyIm{@co9aOWPAH{@uQ$lju&MsxFjTefFu+}b0`833Ba99Qq5k@1at!4PwCbk z^08lu-)Aa+pHXvNnbqxw14Jv2WQVn4H)6@%mwzekpK*dYlvWgojQ3VtuW8x{W$!8d z&)LxjCVxk^%xk2~P4Vc28pwRz8$a_ez4!mU)PKuPq^U17E;Jq(3mU5&kUD<^(p5GE zR>^nIkNqg^%5H0O#RX;og*WvZBA-WXxxGOHY`d3QvrOuMY*5=jX!}`Y0-B^*Fva0P zg5dorz=Ygyam_~2HM@RUbD(pOevcqG$%2}1^vO+nlUcmbw+08oH7eLcH|~Op zd2_@Z1tyXAIFe(_ZDvGD{~XSG^GYf~0qHMVw$VXa*?1rkGz4Icph+MYB(XF(VDuJD z>u6o}R)`Wk%5}-`zsbBkF*$lM(lJlc03vrNEF+|xoj>P9WK7xL#*;!OxPELBxQk>P zCDtF87ccKXqT?p19r5l)%(PvXDVod8gnRXNjEhLHizVr&q`!{ogpd=9paODVp41e3 zg^(cG>TChy=6V?tM?kEQ1fT<5{P;~&lx803vy}5P56ecdfe_BvR$%L=fbbQ-UbAS4 zxda&&|3nDK(Dua0#HF|9U6}2@J601Xb&4+^>dmEA?-_HYq+o}G9<7-qyFM%T%zNK3TSjAuNA6R1>y519!39L{geA1BQ0|BKqJIit5yBpxRok< zy!npYNsf}`X(h-K28O$-~bE-zqPZ|La@(9JrI2W`v^kinA0~gcT?y zg5}iWZBpr^L!s0@0)TdJv2q>;5QkX_#K;uzX=)J1M3<6q&NRvzM9@o44;z6Ij0ebe zAuUpuSakKl;#YlY$C%S)nG)jTY~OyG_)7pv17_Xvg*bXHsbUqapQ{LHzGtB-gO%EC zWdd|4U;`jDy!BTZSw}AtYmQBh;}!+MUU|`9^wml-E|Ll%Rs`>oMYNd^ph7&<-F=Nd zWk2zyO`rw5z+#AGir7T4C1bvYgI2(JUQ2&I_5SSV) zCj+!|noc)FvZY9F@NW`2(|Oz(i48jaq@69j-nUH=X&T4fdf%xj9E%oorlwK6{AT7@ zmzPz^1nO*3`D{g!P>SyN_44+d8D2DSwf=Q{LI+wFHMy2Yik%tqZB{ybj*IznlRO7+ z6{Gn)j4veX49wCWSXWFhOF6R_ZIDvl(6;B6ob;4NK3BA@e-pn1=c6C1yuiyZOqKY$ z=HJi*LF}(w3zDVwuTwxWwqck4D`PttqNd@W>_)P0vWN!&Aqv!CXBrZSH_>*7z`O;n zju7=K8b{Xn;oB4jDw^ydrfFS07Q%yG>>ndJa3KuHFEVx#*`P4g>Cqzc8|2m5Hzzh` zFwVV&@GcsB#hoaN4OslBi=kYt?+~E(bx1%AaI08vF>0wPqn0etMIN+rSKCg;gsi*i zvoV%RMF48C3eDUmPnp|y9*18b?Q0f8YHp0g+vBLtDo!P&49N36B38CX_ao_cWQl_5 zBH9`L$e}kDaHRpO&E`BL&uY6aSKgH)3Acdct2wBq)+fJO5`j2Cz{5dedFMhO1&v!? z?xjo!y7_3b_s&`|f>xa$t-q}gpz9+aM^GVl6gKF@U--d}gEdo=-620~m?sh)G1zmY zu|l_<>RCNDS!?|q1X8`Fl?4!oA5r_h-mY~3EHYmEHCLgvyi)o{7*iC^$d+u`A&e=y z4(P$}0AuKx_Hx*+QdS z;O97L2hI;Wz4UTyrc_lkc+$$c@FjiK$R?QpQqP+HVWFhx6i2n08n@di^JNCSrjnP@ zzb3se$%8J*xCzAFIPT6Ml7jy8Dw4%VgcS%?qbCQ4^9+KBLE>@WG3*4wUAZ|D))c9N zcSlQTRI=~O!Q~iPHwiqj5R+Sz^z|G==#RTaQw9mJbzmti?i_XyaxH)~S#m<9Dz zNQfDKA+DW!iY!36t)^5~t%!QcmEOxzKC_P^5I9kFT!IIS#7&UcmU$g31q0&$BhVRk z+miMO&Hu++_RB~gR$Ark9Hrkq;qOenF$18Kw!a#Bq76IhBViMb(4&y6pgWLxn<}2# zFRzb(LMBH`pl9LU&s>Zfk%e45OWA~4g`+TPl*T`P5XQ`hD$4j5pmWbpFn582BY!JO zCb8%T1PGozYB<@nvd$#YtKEem>!OYVC=x5h&5T?Ey4K%vTPtXMEM(Vn(bg`ryV|ao z{A0M(8vt!~01>hXx32J$gqSK|>VWippP19=OTP}GKf;>X#A*9ixs44bejR_KR`|0) zlFD(%U9K{N#6^mGeDZo?y+zY#e3X!c2^c|SS=C3w*L^ESbAqze-rJad(H#Zsv z61mmbN;@h~P?{anCUE&ALOXDh71qCK*03DAkk?FDPJkr-IF8yvcq0vL&C+K@!7d~* z0yaAd>~H$dqD%MS^?XA^#bs80$o8+!ykgT&r!7~YiqH7hLIw$v8~+aoXgx+2FDfpBuX&ce>`BCQ}LEt)WN(s59_LV6^+Xy zRZKCVzH{7=JL#p}c?mR5eKw}O6%uLF=`VAaAZO<^e}Kr83T6_yCx}BigO;WOt@ztu z5LZe#7!`*K385kQ_Tx%)m37a|3~rbmnN zXJTaRE!_sfkd$-!>ssdX9H|h5VXJk3$s>gfT6FR|K9g%9I5iXA?E)Hl5kGw4-=vE= z_htcoi=`!!v)d`mVt$6m4a+k$?~61T$fva$)#CJW5lhG1Y(4WsNKdZ8~(Q zF>f60)})EJz(BVK7N9ugRXCfBw4I=)DpKZFJ?hMG&_gepY5ijW%D+(W~Diwru}Zjm8CM8cYsx7~J$ zkBS$h^#RN3uS=GLrFP}OcOzDlP1iLLZm*-iV@6kL0_FxZOR{TTRu7o}17*a1NfnfB zhqYvry-RwH>r12%*`;Qx56FChO#I4w}`Ax-aQ+x=$^& zx@xw4KXB`Bx_VJCaW+bmo(@p}XTEZq1WwOUv+kKMXa4)CVxu_-lF8r3U8fp#3*FbI zeP3_~5D~N6yx_ohkXT8c?X>XEn|sZX#xL|IWgH>Ijh!lXZX;hMm=M>3>NnV#0LxIP z{KAQX^dWP}1BK>xT?|N&@@$g}99o<2#X(bxFGM=^Fi^wr&>FD57b3erDb=&OT5f8; zE#a-)r19DMMD%flS+T14a1+o$N(C%LM9(2`E=lVb_%|WCb}^$q#sr=b>OUjU566ka z;h<$`N^3csbd>njL>^=e_a_vD6ZqvT(A{T*SX^iKN*NsaV={MjaY^>_ZUKtsT%7yi zy}$nOxjBVHD8%;Jbp=3{k20%kcE$<<4-|0IjQH{T-=gge>BJElDF_HVSyrP*QU=>S zJ|&7fCnjsz5lVQ%{QR^0Lg0|{x=Wke(5)9cQf0;D#SbD~9A9$9#0bInC%=1~ z@&-W}RF8!IVv3YhkYF5e!35w21m;t%ZY|fFO~+sVl(12Yc~;|B^MSy?`5{lS=g~0X zh}w4v@(9tyy<2y(K@tQml70Hsj*lCV15yG_3tyj|h~3bE{5fQ~3#8Mqz%PH3e0Iv? z*TwJtb3`$G_W$z}s{Xr|>MvURES&K?`@=yzI&cO~*uDbf)>J;sCTA_k!9WQn!b%S6 z?C*~Xv{D3>7?@y%Zpp#YTfK#u_RAfp)Om!K1sE>+Dk^M1&_8#`^p4tsmm7NxqQZE#FO*(ovmv71mx%oO}8HhFW-SXjtuvZ-8*aRhx&_%VAdounrQP;g`Z}md)*#9m`KV zoSk+>-93NgZl(tOzmhmFjFQw^yZfDZG1G9L-s`mJZ)$|jc!7jV`&nm<9b1KeI^1KM z&lOibhdH?aUq5=8n@R194TWj$8pP6V!G5^oac(h`d^r=Yhu;NL+|ccUEUVXkvMf85 z(?{mt$T-@Le*E~%;PAumru82?LMGKi_3{LlL4TE_>ozvBH&Wp?oUNzzkf~OZQ z5KKhwi?^A4c1UjdYfdg<$4J<#+qHZ`TQu*dYZ|8eGG#U8-97*2aH#dMrAgV$!=X+Z z2HPd-f8@L|oZNEzzka^F4ha3P7Y=EPzQ+F7D^Fhh|Kcr&s;#Z9m2fy;HZi+Y#lL65 zTRZYA=V|2UjUk-(T+`GfrKuT0IrQtFTT+cCrlyW7ahy2%$F;4fpKC6saAq{|3l~r^ z#1seiqeq{0O{qsRyEv5VJCqN^c0I2~v-=KrPc3~OnL8VO1yjKm#nwo_{JN&5<|Fhz z-h@I<)THFyfAr|lDijTQ!?BQtP)>__1||0g;FyBR_=GoFv@l$tZ|_XSo-0j7`)d#S zZ$dTBij0i&NzYYfSfzS>x!nCS=de)?U&F0*^kGzU$H0ruWQ}PjgOC!@%jE9A-uInf zx{tc9V{`m+pp_EGk<&fwXGU$TYAZ=064GrE@~CHTJo%K$K8Tu0nS?nj%iys z^7lmaZu&&={vcm)e?V_R>9O;sR<;S$Gm7_8c(%uP2vU-e5_1yOt!MhnA{~aCDWN^sQds z83<1o-+KC6$~V8Dh!<5J-r=t2j;ELT4R)Q)o#(3_sO4bVYr5nA;X8_2V2Gi z{ldI@q|@KMd-v??*V~o3>mRf;-*nAq!(TQGN^oq>{F4lI?K8(#wQ0LiN4zQ-f4J~7 zPTX=XHhGo73-&3nyv zR2p`=311+54w2rSg-5PnExJ$-3tQg#avZ#6=j_?r8kR>&pyBA;XGvS-kJlaj2Cqb) z=Uv{%k@HKHn zg+>Y;L;Xx!P_3LZ5mF&&;7Xj6Hf4_B*)#)@3GI?A*`8G|5P8jMr%pyeJS+yi+lUEx zH*?1`w>NE^;ffh#+PzFTqxlAVG!-*|Oq*xz+zyW=v!&6;KQvEfUQWZ~&vZQ>eo={f z25)9LWaXtHpb{v(yVq(vvL;@AT7nB{;Pz^|)gJt!Rjl>cPAr=dM!TDPZx1}e_m8(NOOiBEl<$X%V{a(t9PbBOl)5&d{{Pe#&J^>JZAc zoIhC|SGGOAE9C5fht;`ft1!ocMt;UWC|LAVAhOHtq^x`?FLaM{@;rKGDIyBjz;gOD ztHLdJo1|3aaG*INoJ@DO(2~uEO)ObL{?CHU{+D1;9qv=hr@qF<1R|Yqb{kZ9#$|NW1dcE_QT&Q${n{?Ke2@k%*I7Zvl z8=IC?OyF2RISxa*54(vKGv*OJoDDqZv$>)K2zu4Y>7Q9R2RjS`&Zkb-V`GU>J2igku z+Y-;{5tHfxMHEV|UM)-GP$q^I&V}^J%M%f~bZH10989*|REUxNh`uzEy;l4rT&Lwx znl5K%k2(3na0)@LYS$ja!vyD8WU2&~w9|+`Bz8*+I8(lCm1J<3pV&g;dZZ*~m~$~% zGD}c7vBAe!`K|j!)8)oij;oiVWIukY;_J=sn&sF9D+2a*V~4-fv9!VIb%Tn1`&%9l z^C-N%owIcCQCo>ss9Z&LsJ5c!Puu2PmCt@tA0xNf9LgZa!yKF*9sN`_7Em>_N9>Rv zWi)eKg0NUTyqalLxY;9sWpb0cA4M_^`l$Oc#gkR1-;5O0UQX;$h4EC$Q_Z70d|mhd z>zvg?mzy8x4)uchaapsPIfTuq)zr~5m2+M!0>dLdzMD|E(owTFHreKcW1%>IrP0QU ziqlKgI&N33*+PZvx9f)JeVc1zyTP!y)G{ySHt1lJtQY=lw}{(?%sdVDm!&L;F1`)d z7&?MRj950`seSlCpo#NhaL8=h z*tA{v#cyY|31x?)oYW2U@3W)6PrJvcpJ2%xG`A|FZ1-W4cnR>uyeD@DbQg>r9@^PH zll5XMXP2kG=ph!e$ngbP13Q;DogBoqBof6(_81dtT(oOb?}OvPYW$zrAjG)V*|Q0C zCs_KUVITdjfg84=q5>Aaj$18X2r>Ga7q4o{JzCq;T!WwS2U-yMZmC74I|-FAD(ODx z7kiTEL6s#ugOPGy*BswbfBkfTrPO3sMq=Vtz-yxJba80s)t(~HgWr19RbZ3Plq{t*uuud8iUcHb5XkN|R!?(Ngfcl|#oZLU9LjM}%3Is%70?>ks;Kah)y4A6jAjpuY>S$ToLB zFGS#ch#NF%$3(6zjW!5wK~bEjA1HGj9~84k0-_b)nJQMkEf!WPE!Ait#*gOzMRgrf z_xa-WrnC@-|=;Y?7$9ffi`6jv@) z`C=(Y6Y;#m;+2s)_UrL<2K6R6C&;Rux@I0?FLGnt=@~hwwCVs)E`bsfx z-k7xG)U>z$_4h2KS8K)reCsQ>6k#|2n*F8vf{^X$PE0<#5ntkss+PBFwlBKpj(Jl& z#RzZp2R|MTiTfH)%dT24`8+*!99|YCzyxkZ$wf%ODK!)^1VV&YUizk;e;AxRSf#^V znt5fxj|o;~;eO=G_%&Kh%sGqvV85|1SFBptS5-@0H89CWl<(F$KkJmqK^}hXcufU` zy*atLEp2Tc{iU#Ws=tP01#RcFs`%tZp&4d_k5&VJX;@nIX*77d;A|wH{Oa~Mk__EF zKW>cpZrh%e5waWya17Qw;>+`}FeM0#3l4ONJ8Smuskogptip``$B$Z4Fhj3~@46{V z1gpb>TF<8Y-taIdHMaNF{u(!->SI6_RE-Av;{E>Z0Ph`?J83~3Qq)&wpK9Xu2W`!_{ z#ZDsUU_^+O)GWp++hp`K&*^`))*F8HzD$#aQC2H7d@{`n(n@*n3Lc^#JT9niJhCG&74!Rb*< zN$SlT(M&;JiO)-2J*!^!`8S%-PS@4fLy$<2SkJ&Ix`)OV*^fgMGDj(GO_y=}E~0dv zLNYx$m?2kT->t;1J6*MocW#DABS=T(XGTcC2isZE^~I3daobG@wjH#-@NRsG>*8sR z4P5Hyw1zkQz^FM22&glVjcKu+Bjax`*s`)i`cO6C@@&|zccS0Dr4gsAhgg_1yigun z>~!4nw(*hhw>zTLzZKXWx3;R4EIGpli>dOvzGxJO-R4azPlROxDS7K}`BXQ1DzU#j__|pp}xqZxfz}{@$YLbIylJVdn!yqDJI#{!rW}2quYl zrhG~3ttAz%<*l)HW9@RfWsmm@n!A4@NajX5XSo-xk9y|PTB_D}3Ro>Kd4p%I#kW-} zWH7Jc@nw{Y?@S!Km0-xHDoiRrRSBhLh8VcfyU;aH?qqD~fZ#E;V$l0X;wA(EG9Ay? zyubZG8tyhM?VUS!Huv^=L7OS8>$S0PZI8kZwEGPTD=)sO*+7G#%YSiNWpKd84C9tv z(8Va?($wy_Rw?le_ny2ILacj7S*{VQyD>B4r4eZ!?9;y*^nJ<*7WL~_>WF;_*e_7H z?PyRqP06M8wi&kNpgsCv`)ml2jIxuQY!qGgjE>JmRCtRbFzF#2$fWB&RBFfqul^{-z^ z(S{0=y`*S|*c$NP=O0!Zi%fFNtRMKlhd$UFb z42%W8O-enujmdxOs=~UnK9*g&W*#aS?AEiICeJ1}orrug!a|6j^q@ti<~!|^Ves~p zw2&pLFFi{?ai7@2--P_^alB^4GQRqX6++^VR8Cap*9(L}vtbhh_d>l+v>Vs>x=j9T zpaNw#=8+wXH0{58uXi!dG{$tv-mZet%Pp{(GkE<`?N8etq6{Nwy8EjgRoj9a0sY9j zVCYDXbRO!|Doon0SvJSBJ|kuGI`P-m_>Q>xxjGC;u2jzk&m1eYl01F3Q!~RH^ z-^lvR0}v5?w>q7VO8pgz6x1ZT`=w|iWS(ndi?fE|zxf}0%Wq9S-qv~b5!nT{A`8!3 zyM>Dn-^w@f@;hqpbDlIa5|o0JPBckHqMayPnKH$ZYKL@e7V&ruXxqk-76I<#b*7 zg}u2yahX-Hh2$pM-1(9GUC=tp0jlh_XNMMhxamb2aKqY{{qIQA|L`<=?e(c4<-^rI z#bxq}Ra^#tGWqg=)I&${G!GYEs zw?5sJRs8{$S-*gQyN^F9p{+PQOYIk z+NV1b>EHCXAXjJ)D|Ap(4;IvrT3f%}r5j{xPNVXfw{6tL!UOTF2u|2(J))odX8iLd ze8T(?%b;0ft-@+so4K+7z?Kg%ub;uGb##bKC3u8hrbSCRpn5PIysh5HNli74B6v`t zSC?Qz*f^{9NZH*au_W56%977*B+P$B=f=>bQuW1mT1DiJNAP9@b}cx-IO2JdqD7P0nnD z!*$S#YKs`Mvfnm-X|*E&cTHmsuaxh_jSgl2EPY>`?uV&0e(AP6?3=|4PQwYf%~tN< zuxzreb-&({GfA-5ZRwBJu^r5APwe5fq_Am#47~` z%sGQ*@Cm?aFZ7R`HXrQQ%bbhb`L97Vv%YtM0QJtx>FA_jcdEyURAI06z5Betlk{0< zJR?Z3b3my#NMd{UEWf$O){cjrpIu(;Di|#IO03cNc={DgY)KP7lF*+0k=Hq#lLwF* zblYclEK;2^aAOq~&t(p!+(T`*PW#Aq!!N_u>VZ$DW9;p(S4X!P zIzW#;x0)=*$1%c@zAfFTWYy*UO4CvM$nJSIW_qIez|sV?B+zeg8jTy(uzqvPBgR{F zF~)L3>cpE8^e3FB+;kZ&e>4BEO-4Ou8#tRv%8~}nEy!gS4qi42w*D7#<5>|=n1$zi zFt2ct(XjdI*^VfU6kJ>_KK@{da9B`q6C!$2HPbnH_#xBaB%kI{npN4h6h3lnL7^9W zXvw3^LkENL>Xt>!%VGDnu)esbK-RLd>|mVwY5)HFJKDgXjw-%&GXxu#(b`fK>Ohzv z^+gyOUPf3lKo|MB-Hz_f(xYk3@Wqxo6_>IrMkUN=c({eaJ zKR@xMjzN?fH+6rUBIEnxA&2f+vYy-1AkQ=M%y5m3iQc4PQET4Z;IpB@I^KW8^QHs= zaxvaUS{3sgJ?H$O<3 zAp_R_WUB)CAo8K7lbkIpn)Kq=&*o1EnH#N}|HT%C>_ETjGywVl(YN?3Z7;<2wJYPx zuE|y9g?o9ndr{~MF0Q1;%BHq9mi*!8t+M$B?!7c+(UWI0hK!?tDBAP9a+I)y8}xK( zk%P^a+%Pj*E3Kz;K{eDeF9||V~ zDxX)hILhJaLdU?!7!EM@AAfA*Idq8Y*s)!^gB5Pn+Y~He>gY3DM&vkLx=nKz8>qBO zqOpbgM;_9@Dp|=}F*ww=mv3?NZ%o*(U5&zhJclU%qRn3S;lpW9h_V^``b1V??YfKF z+<@zg{^1LaiizQtl43J5G8)lcXQ7gJPX=aGJePUDZQHgRZAQ-D;Ye0RRn@IXVn)Um z{~i0zKxE?U#q=wB*dHu|{e^GrD?^T7N2f95)U4D;@ugbrlIan)kv^b4o?KJdJF|5b zhSg2TZ9v8gGML{ad`&$X3c&OM0WmetJ;>+v3gGV-P*|-@{APG_nwZ+q2(3SYA{H<< zhZ-ysTJZ}5-QLc3^$d-J=YKezdf~-=?_C3ZD+!7FBGR8kHm?`5OBz3>(_KF*po5kE z5%ZI90@m}N|GEf>X7@~;mHUsb6ZD&kSoU{???BRf^mF#w!Yu5VIOcDD8s}V%kqV`5 z;Lu_btAD<7xMsH3Fi*PJ^%)Dg%SS!EwMBeJgUeXzn4kLQ^yBb-?wcadK6Mv3gy}4C$yAG!FE35oKR$phG## z;^~uP;Sw&XGD7}zT|jnGmKUsRe3g(n;->AweFEi9a&}l$9Y>BFnNYI6f+x@B1F^H(kAJ_|FQvmpnFV7O zO(@*SJ9pCu_aRH%tS(xRkB<*Q(8ZsYMoT0TQH)hpRkhjviEyo6B+4OJ)W=h8-%%_1 zCcY*{0YOb|*TjSDSEN08Goyx#y`YGc#a9BWloFU^O@#{3@0RBCK*ifdo8S6^m$G-4&=A zr>8EAzt@t}5>pwD@yYLCnpk>hB+IeJcJzHwCK-52JSL_V$^6cw`0Uka4-$EfwJGhJ z{RCJ6Ojv-SzkTrR;7HNCsDlSFy^TS#fOJrA*LW!*bm=~{Vb3Pt+*p3@MKJWPI9=Sj zW3bXyWr?As-HxF7H-~W989E2Nn@}epUCuxmj z?b8F=BmBz36JWb+uwT>oG|&D{eMqu5F2>|s1jfTyC}_*^{!2{#I4%O*S-m5-xhp4h z-wh=*d-Bz=Nxt_7q$+NGH-E2EzbEdb9V^mHk6ol*CF00?Ar5SD!WkdjUmZq`sH&-5 zm`rqFm)L=nKN+IGGPn};RjZ8Zg0tTD=0;t_`<3&j3z0&Xbne_%k_0m7g+&GHHNGBi z=$2q9&?6`=3R5fdWH`yS0SAbSZ(r_gc>IXz8Tn3b0}kYnr8*7bF|u<0hP1)GX1E~} z#$rhCqOH!+8u&EEYNh^-EeA{sKu0i>@RLK!-W99P1FDX-_1Ez2^2^oA9<}+VcZlZC z|KzitI<&Qo%}jd}naiY2cjC}Tq3(OVQ0e$9i>4C}Mo#FjjY2JUAML0LtkhtXhN?`= zxd^kfmGsxmNDVG)pY3!X&=~K&tvFA4Jm2ZvkIZI(&Z)}rtY6ZVJ91i-3>QLmBVUcPHH~Nt z9o!aeA6<)rGC*Q5vrFSwB-BApI$YMBz(G_+2>|QCPj^= zp3u^`8X30+7u4Kvfe!KEPxpBf9W9S;_hpu6&H+Fl{kpeL$&UmSu6Dh4bb-^*r$;el zgBvBe+N?|uB^{sjiTf4Vjh}3`e_p+<6QjkBU6$*iLBy}0*Wfd6sG*^uoj+<^{8Mff z2<=7MP|MwF)bhFeQG5mw=67TORI_w9a8-edq|nR$So4}uteepdfGGXBSmgj(M^25p zX9cawt@K?X*T#(QYg-Ph9GHJ}E+2dEU0NLF)*mY_YfQ%$&ji0U^YRl4+w%^_->{;U ztt|pc;CvCM+w8hbyc{o%1oJty`DeoM2IV_mX+W3|$A+gJ3-%2I}W6~S%%-5&C( zc|nQCx1atzb{yRs`5E%;qYsTe{B*F_q(3U_;^;z{A0X8E>KOS5H^mV#v?-RC7yWj3 z^>%Xl7Uv!{B1c>bCf!})iUYGxbV7EoVDa4ZNSJ?xEh`=;wm5||*o7&(x(eqJQ*zxa zcPONIxn{m;5c13x_p)uzD(@}r-9W2$Kp(%0Ynq$ByCdx@bG2QBopM3iTgP_hW{tc~ z`;+0T;eqcg_y4#k9KO_l48I}J7?W35P5mQ==e%oPKTLwaaWu}ScRp3>Z7qH|-F7eL zQ#_q4i+%n?KTpIYktd=^fmCwwmCg4@MVI$VZ)bnLZAC(Fpvz##KFJi>gGZX?hr~;Y zJ@v3PEs-V(^s7y(Pu=YTu4l7P@zsq36qY?F6xo*!?ez-Og-BtBj6e!4ElfUvpxfMJ!dk$=?8vvKe>z(8*gXIC&X(fjW-$^m!&<->$J8)Zt*1%>I}OwF8T~G z|DZxXtu9=uy3x3leDM4V+ChjrE$#uJ_=R=Dq4O|$P2tk#R!v=S$_XKE7QzKHG?Sa6d#>PtS0t5&x z+&D?ODs-0WZKn=;xqg`&DOY)S$Ws47ynIeh`(XcG3VQ@_jmrn2OU3hh25THmR9YCG z1G)wyd@|{pRN?b(22oc@o%&^7YX{ASl&b*H!gE(qS)O&(|LkuxL|exdg-XMw!W%Ps zPAv;>t`zap3ZZO6y4pXn4O3?-^%X8{6`HNn>2aEupO2C`zk;2KJ8uuYPM_paej=BZ z!09CAxP27HP0;z%cr{@1`njL?%~i|%PDTj6)D#a=R#Dl4BJscA%7+_2UJ|B78FeG4 zC*L;>Vlp{hCJ+=BcTO>@&Xm$xxVbMuVrKi+>q6!2x*eIj(Mb}WWTDDJW9w&UTXdzX zbhLNOiOcnjh-!3XdQZ|LD|h)iti)^`;=L`Nr8zB$iz^kIcB+HM$rkgRO*?aZh%Yz-AHY8a``SLXzv+*pFuZB(@V@oJm?-qowA z^lGYQT9K(!*_siDzQ~1|Xh~jPAunS?fh0x6BwYoi>6o5ixn>getcA;MdnM(Rn087{ zY-IQlq$V@h3@Hn1LXJ(IZ|SyMO?q;Kwz}ts9(Z?y_!aOi4_Qtc8k!ZkWe*VVD#8v8}Xo<=f|U*4Y8Q|9A!V-Fm2%cy;F;hRH3>P=#zRU z9FtwH9Mh92Q#BIJ2B=W$mGVRJPG_s<*(x6%+25ZymTK&`(-s7Eh<6(%?9+%rawr}b zaD2SB>?iEYA1th+o_X{fMO++m*=F$*r@y?~c>a3$A(^6yeg3#rk-eoyd&?dOtr&JU zejacSu3cbdK5>2pXRTS@>ZxKS8G}Gy6e$ZFYyqL4Yt^1HLxENIEM>m}*bBSQm!$N* zmv}e#bmtc(--IRZkoG4tD4{3%a?__g>yNLfHb1l*nn@7FM0?0>Vs}6-&Il zrBWWgluJZJL>Nw&LCVowaoK&jfK^H_{Y-}SS~2MbI|ONTL|^!g9AMDDaV+#59mgL_ zZ2OT2d>^b?5OJg~{@S`e3U z`Ky_CHVh67^bV)t6z%PWfbcrEY*ww@fq$Xj(UA?XpMPO0a<+M4ZD>sXo^=dhBgyEf zd%_m)W-~j11_b!%rz1up!EGGT;iW^nVvnM#9$p!KedG z#0otz;S#{apphID;)Na9zjFyX;8A9kl|LBj<{t?@Slz;m0}6tf!UV5XIA#iqvrZ1f z{>u9h+U(7iMU03;X}=p`xOjGryJ6(G9~_f)6+at4i6Grx%XVK52@_Bj-nh$aFa6OS zdv@)c1L`KI1+VnNai8CAm!7=sZ|J{>2<{j=^4Z zuc8l6{~m;jZ<5g@)+xS!vcT< zs;g+t!8B~C-#oxFm<((>ASj9#-B}9t>{?`yYan2R!C0Eu6aghIIkU75e@A0pyG{x5 zE_o|0eskYyKeS7+#yq5!FaDe!Kjk>K$c%3hJx_cp_UOf2bn3$}P?#d#Fwh?R{Ld|9ukhz5(YJ!*D z?*VGWFFSNq?OF69ujwOA*3My`-6+`zCFDUn=_d$SL4@`P%|PE3f%ad7%~X?`P=;o8 zq;!CrS~ji3jtqO@uML~TRC35YL;+922TL6y@wm*3&g|{c!2JkMjyCPjoIO5>X?{@H zKgnx)x@F@>CFnm6x3%sN0CIT>&--ApsMAAVXJ%8vvl|CMnrK<%cs@He_4}?-m!p6S z(L0h)k(P|B$iZi>tVE<2X{bdw5p_%T^*ziV&5fis{gL=PlQXo&AZ~7M4%4Pnm^z&J4b$@)*B& z6ge1f8L`9fmLUvnyY9)NtVwd~5Mq`4i#Z_~QgQ9)060J^uUK)~OAuZT0+DfwjIfq* zaKdP25y=3!ZTj^Zw&hQjq%o*Li}C`qvZgyqcBAC}=%`4}S%3nooQjrl?P2iLcvpO= zZCX}k9vWPzF(+uermwoU@}TI*CIm3>AAhue_#yw%M^eV{1Kb#g$?+zcWZ_~~E(z;X zxt^VBIeul9Q5l{`VZ#*|F((shzN*af|^YwDO|MoX?U0DTZM;KjCz`)Od z>fLTS!lXU@6|YSFe5TdWXHe=*R{A%FlBg~#6Gdr%u4>m_y)vKb13Ssk%s9-_8Ix`H zA*e!fzKqpFQ}ngly=Ir_O=TBt-EH^wlSfSSq-oz@vh{DlI||$lkSd+F&Ij8rXcW{u zfLIB%n(K3Vc~#%QfEBt(Uk(^pN0L%NM}8sK{LzY54iDN?^Y`nb7$>Zobite|5Cz%n zSTX`4-jTlf3Dk|pT^iVUAS0lG-*Xe$gETdzj(%YOy*#wZ8< z%-5H0+cfsc_;q9FXsXV3Q9A}nDly8Cs4Et)deL=xCHEcpt3Usf(YUx@h61SseSN^o zO!s66!shc7tHrI#Mv5T8EH zFJWzlV^E!jR z44uh&Zn>h%<3+g1kYK+j7+@8qum~E^XI!b-qKMuIFKxGVVNsyKu@h55hDoC~qnfS- z3dJo)r|zUr7!3xiX)%vzpZ04CzJd20UQ7)6@D7>+eGp6Q|~L-^B_ ztHWN1f#Jr`jepVt>x71AlLY$?07`qyeZuqlqSly)8g<|lf<%^?q$pquA!C=%c$&+} zrW~P8&FO0?7)&8f@iiQD1raDoPoA9i3|f2J&u8yc)VU&7N=cI=XSuij`L*kO#5$(m z__G|oiV;m09K@p%YWO4NHVVom2W*b&b4c(Xc5W(&Hvq=;taU~9wxAm&3 zum9?6e+7yCzGeoMiixl+`Q@b0Y7Z~#-`-m?7!y7p@SaW41#Kp$vMzCalWqwf;2B<4fysc~ zm3J4&D3gz7Yuz8Jcs$H;8TX?SCPY}pzL?U-19Ie%`MRK)C+8=X-@_^7zwKiSBnJ$n-*wZ*Ui1Tvr%WTaJ$CBt9VqawT&E z6Isy|)vRD->Vqub_0DRfcpZoJ%^+8Q&ytHZ-bGWL&VVt|hcVt}=IWu_>JMre6Gz;d z33Y>gA7=*Zre|?v_D!2MDXXcSRa4srwN==>mg$IL;dXlIDeomgCPip_&fDj_2hk(| z{Fk7Mdv*Ml_N!cmTf6JEBa48m`q6fR&shK7dH2I8MGdqCw2si+n~fJ11kLzBfrM@R zsmpB~JVlJ)0&1MuGnNcINb&eYCrtHkQ6gd(YInm2>TF?sJcv*=*C+@XpiaIEO#&v+ z6&|V}z;Xpp5(T1*nG<~M&Q2QqccVr=x@;}V`RLAuOxXVKoO`v0mjo7 z1?}IRA9=r=AN`;;0%iGr*$@-s?Mk84AkHS9MFsod&pHLf04g{^OeW%QF%POmM*`6o3M=^er57}8wPJ}D zH|R#hTB#AZCA)5#Of=Xi6FhYLuo<%jixEURY15qh+HsI z*?hJsUhsb)2ZIC((qM_tq%u)019D%^P^z_0;mDHGQ)b3`A+x`%9M(n{*CYX0y&zmd z!6Mt;&rg5sdzcti2OStZUDU`t$pfS1an#_IvbHS645GCCcUCKD`ef7W=zm~1Xz0h< z?PRZIkD-hBam*1^5&(9O(}U4WC7*@$jM$MWf3g$}y`7r2^yTZ;J0}Uc6`9;zCvN>v z2Yt?a(UFIdR3IgNytsc?*f^_yYv>dF)}T2}&=NmrZz>q%6#Fnd~_WjURqwI_N8|B$#m;>A<&V_ztx*s zd-LsH=butFHX!*WZAs!Bf`DFzkDglU)pN`t4?9-9vTEiGYM;IZkmY)pb-1<;Ul-F< zHXyeQ$Az$d#w<+*NX|-)e9I9roQ*Fq_@g0-{}3;o*7UxLk_R$ z7vx2I+=?Jz2sO1Iw?1SF=B>|}8r_O;+LTW=Brm?b&y}G<{(%*%Xry#Q={Y*xRU;vTwc+ z(gDzzUx?n~Bu>=H{_B%~W+8jW1z_ZvtL+8fFz;bMazRr+pcyS=jKu|s*TAcgddt$c zp^7bUnRn-`K&&!pIu_$|_jMV3QVxa%!boSVe zEOrQDbRP$c)eEVlgQ_wO-W`om?BHgwPdF^&AI0q|(IB8wYrY zuFkYt;}#BIl<=617Vr%@+j4;7(pY&@B!4E~E{SxjvbQ#rUMgzvwUEJ$GQ*L)9CKIZ zAwFqWhs8MwPs6#ucVvfm$Bnw6vcP~H^atgd{mK0-@*lsqb=$USU(OYzw6xS^x{9SG z?E~WaARU@z&#jxqIhDKT1tVeW|5{?1M|S;^a8BFM5BRpy!9n-S5^v&9`^Giy2U|vq z(U(U}wPu%ocV@^L)CX{00+@0lyMzt6j1}`9Ommvj#^X!=L}qo6;C>R4X}f4lbewO# zq#h@^X%uH1W*I8&JDzi`8XSgK9$nLoh3hT9(DB+P>2|Sy_<;lthy*H>HvDcZ6?9;(HUvXVG zTmF8LhHj2&$-#@yhJ5J>bnGJ+bad{(jQv;+%YnLSzdU6e=XCv?*N=VvqSGV2xGu!6 zs>#X4E?%c6g^$HkYtM|#2iSmi(e3aLqU`ovYxW_^1y1@)hW=iztLFaW$L!Km<deBYkU1H zh)cm=SBsD87^%KUOZPl@Cphzn^%-%9_rz@1h_3do5EQ@*w}~m#*0Zl-f$=85X$9a7 zeVu}h=p}{nY9-ehDwtWckxn*@sd0i+7%vJa25=cNZ3}gA7)bmk%wHk&XI{aXR`bf> z_O~PifhRQ4$=R;Pg%2onm}zg2H7CM42EI95K?$b@*n)(J2e-8)Xq~AtOl*wApuUT5 zy7Un0c!-W+{6F$)(XjmvXJExC zxU76GQ#&vF7J(y2-oXLOzAGNq!hA9^`+A6o_rcW4qp7U; z;Q<4|@HQiAi*(iLJu|e4kdY2jY3Nx`1!PSoY2(was_7ARp@*Sxxx%H6vmhoo(*=8? zSd;u4EI>bS#X;;FJ}L$HD`L_yXT8|f+Vf=O(_s``Z+(^pfb4;m1Xd9a#l9e6!TKBl z%4G&XJ#}}sjKN#6*JEw;orgN%59?2T&vb$=L zm%Dzo!z6VFV0Sbo0~pIg7&{Y%s8qU>wV-dK`rTH5OO8lfNCcI~Qq077TY z>5sQePAv!jglvYs%e}Tl%PccloaXcq@^-{H2l7-P3IINaW;c~aV}UW4a*^J%XOC9N z4v&e+N&kkSN=8F3zfYkSSa*f1SFf5Z&4Gb}qIQ;i21Cr$BsjehZ%)!rCGlH7?!B%F zuyjH-Y-X^`!$Dh)B32an*B0w_sWKEVy-%17*{tEv$u6H|>`l2}W8ZCgpq8JlfZv}A z0rckQEdnu26G%Il9-wVlEbcd}91qK1g-H{J4jKgR(jlvzCz_TN-idf!i?Bm2-v}rr z>^}4O?y46eq2H_od`Q-$=}3%?L7Oua73e+Aklwph@mQqKpnKN0xL4>cD|tcMq~QAM zXx1%7Vf-8;%4L8Z0mueJFS?e5Q*M2BqJtNKX$2xR{IRI_5Zn7czq`33Tqt9$UN?7T zc`|}2;x_UE2!hvHYXkw`rw?$)QIg>kkPJUr=e}_B^3rO`kwo3x-L;L4Lt%|LhNo{{ zSf+P0&cu2ZcKEGi7=z)C=FMu#Wl65KRLAS0!rTcMz`GHcA{26#Yo|ePd>=MCuxkvx z5qvnE!MoZ5gB`1@;#qXd3NyBNm$xt^8MA=D%0F@&_agM%2H3s)eQobP)&{9;X#-Ej@?T}MrPF~ zFvp{6u{I#{LRBR**!lN4ojS_&i#eFenGgTZ9+0vNe|kV<@*eQ=!1P^*(U2D%p)VqU z%c-sI`QnzrKEGfPI#D5QQrQ=Ap;8tE`dNYeUu@r?`ymU>hI!5i>nJkVQun{Jc?-xW zc&^3=dYaSvcKjo=aKGDyO^}ERz`zT_cJtIkL_88NSei)Ephc&;qrMfcdO_WBOh zb7d{>I_>dx9UGr=B#~yXq|MFJ?X4J0`Dz-qYtzSBb6wW@ zTB^&D*e<#HoX<(xWCv8`VJF9(rJO+ccqvFFv3w>iEPkF-ZXO#-g#h#22TS$4Tp3X6 zD7Ir+bUeGL?CS5{k^+ZuA0HRCVd91RL#F}7kF1|if`J!?9~P%m6J)v_44;-?D;?Xc z4=-1oYvM7|wf%Wo`FNp@nwnZ=iR&za2$jw~Sh}qqINxBHmTEUKljfHDVzIVVBr`^p zI^~mE^nJtc;Z48WL@r$W()wCBWj8bh)n^9^ZI#;I7EYEE z;K)7&Vobyvr1Y2%jB9R<=B#zM22Os1Hz?@7S7FNbB3%tljJL`~t@r6Ef`PIrLAp=axyJ?#Ub?OWh+kethn7a>+GKOg5yIv*sSmSKA?@BrZTv z=sK_3nWLABy`!UdgY{ukdwYA$r|80uwjf=L(3F+1;T1N6Cg$1Km*>3FFTOnoMIv&V zAJ}NLiv`-(6a)k(Xh}dV2E3*nLE(f?*VFKyU{!%5V!H&g9kCv6s_lT!3H+NVw~dXy^T)qJ!CZUC#NO z>Q&M#SShDGD)m7Ro4T4H>J2*T*R+@UCFkDb>!H00qG@!Ibv;A{bt1k?@3E}doa!+M zg}5>|t3k0cL|UzhL&O~pKBZYTSG#RwN8-;h*<93dFd>)3y=~U^>Xl`s-9OrD-h#2= zqM_GtuFJIPbAy7df`WqS&m;8)n`+Ac%56gB_qzi70C;YSjC{Nid1zP|@}Dt&GwL-Q zK0J;oBKEu9mAh_Pvb>zz950jdUOxwUgC!DlA%5npaRon)m-Xm8zY`iQAvmJTz2P76 z{E*v@j*jWipUZ=Q{#PVYxG+Kb;nI_%yyWMO>{PdI`3!Dou-*IYa(cf=_WyM=!w@EO zuTA??w^x?Ec}qj(v>T#ho)x*%Ngt9cF%~K@&iMg!KtDD*%(c{*Ji5B-g>?<9_7!y0 ze3F;!IwiKVlI@@p%W}l8Of1yWkn}4L>zA#8iy;bVe{#VD6%P;3{$t0qXC=T@1Z)8L zmZ@n{UqOq_g%YUZLH)afHz7XKmco&TR>qCioqHD4(LiBRX~hNjy>`^(V`7b@ge3>1awby=>1BaJ)L4jFWB z1{xOS9Uuh*ibWWa`2*o2qz`CY?;6t`LmS8biuZ}OCQi$LH%3sHf!KZaig8hxO|Bds zw$Zd=nglKhl_l9GFg`1FtGu)2eV-mI!1S+Eoxa-1qEteIyP){07Z=i7QFR@yo)jyC zns#Iu+Chx9=h5zYTt7BEtj*H+5z>GP?OlZJ@6zsd8h+Cb#x%NivCr*tc>T^`>o}cK z8w-M_G*GDu{pUniK|sG7o5xu+;C5e97XNnum>-=ugueW@N0qUVx;fwVE+~r&5vcr0fPVmKT2Mknrw8_M{OTn zt9&Z+2>ty*eZ~djJ9J~kF5i=0Th({`Lnx4?*RY-Dk$yoAO1zWa+!cV%OdOi(T|eA` zrX9^*>a-+e_H5X`qaKwKLBClEzIQad3-)v|dWJnl*=VPuX;O~Bie**ux zN5O$uaF)2}PLFpBVh9v#M70wrI}dsd<#MlO8}v&Rj~01> z-LJtY!QVFvmJFr=x_$j;cV+d!L`q4N=@ zy_TaTGtl9ikXZMj%L+uu(OA>9Yy+UZ0_0xlmoEDPw~crMc=N|&{iWFiIWtItsxpJB z+fwxhI$uj8>Yri(ifkrk^tt5k$-ra^b(LO6%3&D_)Utx79rO(BQXcg^I51M6ls&Q^ zTli9F->V%Ut)W52mWgGFE{6FxwdDu<>HbE>L}5g-PNEDzAJ0EB0IVOQ8gp&XY?|+N z+%#=%f7w`a?-jXBwQRRGy$(|}Dv1Y2R)in~keM|FJp>L(l(shTp2)h09&D(p7HW*1Xkt@P zgS$QX3}MHyzscu+sA`+#wIj&6bB&#7GOOpiq9@KRA6fb3z>R?U+&j$ka#Y-uCUz3#gV!`L8fl3HL0L&=-Dw3VJE zosO6ds?>fxhd0s`^+=(9hUp$zq9K|t67?u`PcyS1CkT$d*HsQI%14fHX0M3!(T;j~ z&sAKg`-=#OtTJ3ySkF?k|7CLs=de%u9qtDc18F1j`P+~Do8kF~b771|b(Uy$(?Zo} zOt?-?RH2sCvi47r#(Xp@Ej9HCc;_rXJ=VtUzPWUH!$ij3u#XKPU%mxt1Y41{ZU?@5 zL~$;#AXBJw;e_We=Yr1OBrDVq5{0S6p!l6$+B%M8zX*zlK_b~?!3FBv!FgAl)5*9HsnEbPQd zg+UtmGH!Ks3&l5`qp;21SanS#)@rU zV5xd_gTHCsa^H}o32f?MNGtAlcUG=8kV23T{W;q=21j%9Q?h~3q^mVD;FZU}BLj|% zo9+)bUp5OQ9z3?Z6x7OTPdwO>pj97GY^lYOGq_AcI8^ZHf;Jbtyj@B zXFBN$=h(?X)r~|BZRqB|Z;{~!v)_F{0A`08l2L(5$8C`7r9%n0X4F3;M>e&y|NLy% zRw0Aw-G^7r4ahuE|IO53&2UWNRgHE4oWWX4!T0D`#x)NGz0UC>WP+w58-|&nr1sQ2 zDnu|X(y;hLChc{j+nJ`PN>EFKp3QHT24c|$BhunXqL1UQ|KexB&_k9R2nW$jDpb2W zZrO>(EhScbKXp(|RSSgis1Eq`A!_-$>f=9R-i=ZCy!)8XuAcbEM04a6#-3A8u8b9W zc#o#pEzk&{jyN0Vw!^j6FG;x&I~MEdnXHX18HhP@+5OBh?(V+!66^z-1=&TdSCZeC zM6K_?XrnvdGpVTf@ODpivkG;rV+1XE-Ymv6>F8`-Q$xH=E^+GxJw5Pl-5dy5Iej!@7}!#@3C_yEGyVStAaX0?y^K;v%Gp=QKNV|AU2>l zJ_Xab%a5Ale8r`RrKWX`0Xh((()ki$pzwdv-0a79~h*ndR-f6NsOLiY)5{VixoRhm- zq#jH|1zZ^!#EUC(aBoi$~Iy5yIrWhM`%xI=Q+q z2ulI00enDY3K@b?2%It4XdG^(N2;;Cam+q5;NHFM>Nweb$W*OBPP!&r(^v48qDpFj zze&}0C)t2JKqHON-4RYO>orRD-Amfb2X__1;6h-1po@pyW#0R>vNFhtPQz4zR=b<4 zss!tElo5^`v5cCdDN!ffT(CtCf-r0wLdi18Y`}V$j>v<5dOgI1?K(Dv0I?^@pz%RW zKHfQT+BZGC)jkqnS1IEzDg+b`1kDYo(F%n-KhOG4y`5)anrzRvWCW=@(~x|f(w)Eg z4UA{E9mvjk%t&AxWsZn_g6?L2at>``O{h`su8n4*es!l-{ihtb?PwkxxPBVM?o~lt zWQ)R7a6xHo^l&AbD{^QUF}aeP?`XI-^-&=uuSp^Zs@XJNhoK0m>Gluej)MlcM`Ap@0|F;psqs zE&Gz7nNtmH5Qwz=`oxiM4qxcJw=BHb+QuRHq?WeZ`50`wV9X<*Ewj{vdE&QJDRlc( zL{W{5dyD3GB;sCo?MvIxB>uosY zNYu}l)1zd5{kCgvh-0>&9)SrRL||fo+IxhhvEdm?B&RZUOCYI={`$w=E}YNSjR-ot zD%j?@$D%u<+|POrN%g>8CCzs}J!djEXY*mfOVUEiiA z9gxx9tGy5_oIx@2T>Z!Z<1iXQ#o|w6&p2yv!qP1u$ zLkPwS);oF!Iyz06nMk?T4Ry9zP3MF4mZ^{7-+uX$a4Kn#I_`!i^>7yIYOqV62goH{ zm>Z>47s*}3O(J8mfQC+!OBvioPavqxU_yYn0T58bg@eR8nrzk227c*iFc{=KD49oH z0e$)WSi5gzB-6@IB{_;AS|RDsH&wMgKXH(2h4uo_#$9Va{t2IT&4g%4f9Si3*%a0` z1(wCxEzI^w)4-!pfS4CnUUCmWMGYL?V04XXoMLu3N5c&H7RWZzvp8AuPdsJq$KHmw z-C{R})^7t+HDo|&lC3AdriGtyq%*x#L|fBCQ3t#KIA{$-O6mhZo7tsUr>d@DY7;Q% zzk&ByNH{GuRXHSF=L~F_>t>terVwRa~mGyZCPZybNt3atHsq)^7B+VER+4Ed${3;f=f|@4HO27%PCq>P zgOx|r^gr_tGe}Aa>6=;(Kdp$uQuX!OE4R#X6En$yd#Bk|(_M};{AX8!STm=!_cXTU zSEkcQ&uiwh@8Y``MGdftR#3YS$^t+pFX|Q&t)lML^f@5LM)Sh8_Cs<5Elw{3GZ@1~ zWH+sQg*#>p#yqa3{qX(<+EO&_k(K`BTexX$?Xdp9t8jqUn`*zHQ3qFXW~rK|>S@#t z(#=;oE~Yx!>Z~|yji1Fn2AE9u+Jb+@$rk(P^bbKnXQVks(TkwAq7#Xijcw29|9&|Q z!U5r3pQl=56KCk`H^uPI{tUr(7EmjzMAOu;fzWwm--oZSFS?uWY;0jYWUWZ zqPeU88{a|8+5hf4NOtp&ZVXyGLEU> z*32Dxv>QZABJl&clo37Ip)ja7c$eBBOzh9ZHXGO?_TL&|AP3%BM>;9@QKbxa3SHJA&+K{!MiV%J_y(hgpD*KE?t z(GLs-%o=)}G?Xx%moIfZUCs+TIT9j)MCwsr`^W0ZPnTFa5jq)^S0r(yJXeD4nV}(u-Wd^^~FNGE?8Zl*95lm*iTjf z%gANnb9j!m1g7<@C1v+}9^D`229mWcD0-Bhhl3R#bxV~s9+ah_>1pB44AUKf$42_L z0uxamH&H>bmIZyvlQoN~%804H{)VTzM{f~LAh^E^vP(7&e{s(V() z@tUkJ?Gy8`|1wzVK>C=Ksh)J_pG?N;;u_Pu+}LrY3XO>wROlz$lo~U2D~EtQl$_~% zY5Lxt757sqlptdU&OiMKB4dyf0UVOHwCw7lnd7mo$q;u1*#{`(U*4Pe96A)x?0~U9 z5HxpuwP>U!nD$UVCZt5eK8$w%5KM%QYfha83dB>;;-Gt~G@2;Ae%iqHd2N^`P`3)G z8m~~)=uT3kp#iFkd!A!*;IImPa|5@G=t7M^k zKdvp<^kY4$;r`;pviNy4gto z_fOTCLpUr4#4H6>zYk$+sp9*8kA7W$)|p)Z_L_zu={>KUX(b0cZ;7 z&rFFwn9%Sf^yC3^Xe=Y^qiN<7WMY}llhLyt_&5cRTYlPzkZshHvsLz@iSZ!mnEsl5 z!)kob(&QzDrJ+K5zu_Om#3@XM1)|?;}nkrVu7Tq%f=iTMyCilmNO3u1924Ij$!Hd zWc*3@u`PWGQ4f!Z@P#0rfq{W^&2SBa1-b}`P}UtC-r9XftwD7QfV=>*1TKwmK$u)) z4DE4niN6sW(~=*FDSEvOB{8VKD7tIwc8wj+Xq6R4#JC(r<=Pi*->VIMI^5uSa9IHH z4l|I|VaL0C=aQYcUwCH~ObD}_F|_`0*u<*Yp2r?4lzb-hj!9<0-;4?W#?}yvx%fv= z!>O|bJes$|4-v+|$lDXmQ)IZn<3!vO_A98V?uHBc$O1HyurgkJKjPL)NLM=Q@ipT} zn`dLtY**9%?zWdnZy28ZcH+cYl9x>qiJShhv0O2$yhRZah;f5WZcC3vPpK}|bgqt! zi-j)^5t8(euaiU;WcPAqk_F5HXn3&UBCr}kCFc!t8-X^Io>_%-(1yGAJo!E-e*}9W;eTL3 zbl;qdZ=FG_gSJ7fYxrxizDaIY<`t8lyfQiQM~<=sp$zH~XcnultBaJdI9tE|R|-^| zv$4d#WI#z@dDuX|<%C$!j^DUDr^GhH$KdWrrvL6k@QpZC5*Zh_1Nf}snZYt7g$NWZ z8#yNm3RfA~&!;IEK?3R(t}N?74QHectQ2*l-8(fhX{`ydD1uZBZ2z-Xhdx8j{9dXd z~i@ z)HN=f$hqY8W;c?{i$t6NRFCK%z{(2TI2V%Uw6sJ=`3SfsF$thS&J8iz>Gbj$A)4RT zPOoPFWKUP`LlN^X4?qMB)}Q+w-5KX+3h}!RZQP>cNc1D*pZq3JZaJZ+pAHSm^G`>_ z7Uk1OsD0d*Eunbu*u-5@M7tco(LK!tP$JZ=6yXSM^ruxgb8Rir4As+R-jAjtdAg(H z5)*f$tcS|?F1&xq-+{LVnIK@R2Td66z=4Lg^|)NOuKX` z+A;sQ=cW&ljtaRWO21jacjXfO^5s_8HEjfFk%D~Lv9YmFmfdGJu}g9;F0SmQ9_MDO zBP0mU3tJ~VxIyo3HK9<%`HL6Ms~J0R|f?+J{2h_pU&(0nmdQ?NX>1Oe{kv3v9V!itfI-2%(ur;pTGdjjP`0x0b$lm|P$7IN> zYyLpic6i9==jU~orn<)(1@vOEAO6;7(Ix+9pM^qyMPNCr9RKk{yz52dG6Hly8xx!{ z|5`68pfy_+U?K?Rq6cR25>P$Rm4W;BXN?$yvAn(V=7Wgb>M&^huP>ZJ6|#;K_n&^; z+SBFtj^*Ai=m9JN+9~$Mu`uzw43NiA6n>;zL$RPXG;y^0ZRDCfg33;_I0fXr*=Cs18K%w-KF?_k7C~0zfcwPiP5wjj#P@K7!P>Ql_D>qd?j~+VZYFlsc8> zM)G>#UFOM|ArLvOlvFms+o;qeG2yB;1{B&Pa*P!v4=K7_)w!9KFt$ z3m9L;M-3n|b;ZQy9TC{LBf?@^35ri$i&fMzvJ^;t2ftoi>ShywrAU*oYzj!-SD>Q? zVZdpYaW5jt=0SHnfPS`UaQ&ET=ThZl4S}efy7hL5{wLnB8X7TZ8##86y@MrS7DV}| zLIB)-Aw3xC8N|~*R^?G6-54Q^^d{(bUPP6jK;=*F>K&$%r)MK&um zuH`F4b0RZv@Ne%Ok!4TP?}o0yV}?&B+EPe;eSPEKzgLNnviz8y(OSleO$1{ovLQEj zCJ;yqk1k22DQ5O}4nxi;aco=r>bq8h>56>#0;xO9D9h|ovciXJHzCR_Sb3Oqy7A?d zyqvmaF!2bD9S7LL;Fq|t$G=qlR!F*9|AhTE)W$fw4rxP@kDC=B&Yv8$+*yHpujK3a zk5Y|UaoP+HmW)b&hCe@{3f?+vDc2s~U>6tAjrpt3uaFN(btjB&m?gAGt-vWk)kYB4 zHOr(Ci;J)--^q(EX{)&)rB!(Ey_{f_tbKqXX ziDZ7I6e(neYV>(aijsheCgP0z4-=)xs7hfVX2BiN>;fY2?Fc-sH_D?xYTC^AE4qrN zbkiuY$`7ag8Jg3=5qZ!3%hqcJP?A&MZgkD$i{Z;OU`s%{5hm=Txpd90-`nGe*y4$A zz?Jk3sxow~QKC8mIH{10UHP}OVp5iW{B;^#pyd5wQjJIO`7+Mk^Vnna>6~>?qlWk# zw+wjvKkspd`p>+DRR=WrNTLHM2w6IXcqiPupg-eS7}B4y=M#Jy`ZF$mF1+^G>P@gZ z6A~PzHxp#h_yOz^?i+TA{Lvr~pWK`KPEzJ zCj!)I?2y>Vstb=afOr&0d54yb^;Y<$()#q99~1m%xL$5GYlLn!YXCfD-kC{t_3dR6 zfC1%~E>+e9uQw33S|A3*V;&tKT;GK3NKtV3CPvyvF7-Gn3Gn9uZ~yX)Ybdsk8ij1( zjMx?ZI`^!tlK!fOT`(McIeeph8zo2F}0d^IyqUTS-=|7SO$*G zcqP(pldaM3{ajeK zmcX4UZ3iqFOcIE}1LhhyG^t;&nrQ^4Ahfh7A=Ov+KlwdAR|(>dMM0bav1E^9g|ix)F2FWo#uU5w0cjBebPpnKE0bO`cuR zNwOaBxM1#fC5K?shmC<7j}%&PAIc<3T)ZpFHaq*W&Dajk;BqqABRS8zybsZd^#d| zf0}B6c>61{xdgF+Op}PuJlQ!$Lze_H)h{#~K9J<6-)r2UO6O23yQZ=g;aQ`hllPNT~tvIMG{} zgXj+jkmof)mjw_yKx-22+Cv8ajIKc&NnZN=X>>;N@BEoN8{cRwnCv&x>?CO z)xb?+EXjyMvJDY)BzRD6QCU(Q57Fo)CgtZG(pI-B0>-Xx&A%sdIbd4m%szfxdKFV# z7D2XD8fh_xnX137-{AZ(jX3sr{5cTEx*QzEz6u|wEJB)A5F<LSGNUh@ z(|~AQg&>7>4i6GBH!nKLBYuEL#}z|lsiTc}90^%do8IaY-@j)~oz~#~vJW~mwnC=# z+A$5F+L6&EE7 zT{~qD{*#S4ILb^-uBD}A-6#2T*Yz!?Az?44z?0~25~b8A<9kY@dJjOB`_qw_-lUXOp~Uu|(M#`B-% z7Z#`ve@T3|`m%Q9Y8a)kG~l8#CP!E}hW6XHzDIw5hnD*NHbyRs{?yC{3CJTzp(HXpelrbfxu~^K zJzqMfOtaz&^&>f3EYL4*XkZsy?~UIKXhN{m*!XygK^gS|*KgwIS6Ta=M9@Hi`Rm8n z7}yOq|2dd}#1^Hr8RS9Dv_sb&a_}OYMPB2&DCziwgsY59^#8BpsGw*#l{NSX)cHoE z{c-lpAQ_9~rQVWW{JkmT@p*jt--4!~XQO;UsKKp%`SjnIA|_;H{lIWP(>4LO&L@a4p;|Ui~g`06xtaK6ldx-FzK|TeAn}z5>P&_^0K|_nI zC{3lKCj?Xxf#pW(A8BFnfZGd(#WnOa5*CkMH+zaMU}IO^XbpWrV+bxX-z#~X90w5J z?CPqMd3)-P($Z4k{=NcM#CGs$_CYX!NCV6Qvzrg{r4d))66FLm%d2v0%YO< zl?0ps8*ZCP23ONU^NECJxTQ~pqbG&;MVv~KplaScbN;GmP)J&SShOnhs+py}w#+f@ zube6OqKoqXAbor=n^{t2z0T>l6DC1-b)FaK-nG|`IeVW11<8(bP%Lu=q<8fWo-nxC zw=NDKNyVhmPCp2)zAZ{oJnM#tDC}#N;YEQ%e#Us6qZaQ3Y@1^qfypdXn2R}c9plVz95u6Qz95C?Tb^8EOMjHhvAlpP)Ll&HOs_Yme zB6osPwYepuKZ-6Us?0cUlEV0fq(4GQALt3+im>|qaVG)!-)zvR&VvO#x}#%IM%34fSL|)F0ql#m>^tYlQ(kjU%UcV$K|OorurF24Y)czAc|-Z>c)`p zj4LjOljL8b1?LNUSl6fb!}}>S)ArdR?DPIT(TP<&ieve1Cmioyi2aXk;Zf5Gkv+Yw z#ss>KyC$lav9s+#I4NqG)9Y4ip6OaGzz_|;jvLp?Vc${9@H8ga|8$R}sGC@g;TQKzm_dVGo>431z(-QB(gTvs3x?e{!BwbG}YN9u)1|Y8-v9 zF%%SHSUAc!qt%Gk!y4%iO>xF9UzzF`VR`(Ms!?+}3OVrJ>Oj}94px63`HDm|d>U7( zw5ayW=S!m7onc`fi&SM)mJnUUJ_o);UK@~vg@%S&fB$x1!Q{xhTK2y1(3v)Tmq>Ne zkNI5-YqAM$pN}qRnN$^|u~HE-Zk}Er{;agwoH2%O6Zwj3IAf41Dk`nPxz#-*ux4oT zJQ=EjsL$xMJ7u^LH6d;Z=y;Ql!A(_v5el7k5telHAgG4EAW6uZX1O=C_ll0}{TA1f zTeIR{o18vBSi4zUxqXwPxz8s2*<%o4MgDW3R377vK3%Tu<3Q6Si2tT(-gk0TCN2xm zZn{La0udvlJ|+ji)vI;Xk0l(PIba;WF1%5cTI~n>jqevokBZi>X9<8sDHbBGUb)o1 zQ-slV^RHGiPEKMK zegH?0#1# zZd}e+S=JrofFPQ8czTj8m^7BI zF0r$(gx`Ww{bP>D(xpVOllGP8K0(C8(4jGa$WdWwhJI;EkUIi>{Nx8tfv$WLLXy$&SCp5dAfaiYzg~`2#>wey z*cDFDXe%o#yT1{0usJHY%P^z{BsgKJmajNA`!XO`dc{BFUkbf9y6{D^{wb$72oUQ)OBjGo=LwN%rNEZ!H77{PLZ}wm zNC6Bh|D^e4gK;f+W4o3DGEfL?Bqz*VJq@bJU$K2iZq(>v9N)#IJ*yq91)iAo*^rHP zsW^oYeZuMjAd@n1yQlJ(bQU`03juflY0?hZk`C%9uV<{@AE7RUrw`;r_IaO40SD`U z#a0{Hx411#JTAY|h$y(G0&YFfz<)vl2w-Jy>CUAF)e0o6#N4_FuGr5AvW*WB#O+39 z*WEk6*;oRe=FR?v=` zIDuLH1jEwZJ4Z`?(N6)1*-g@a@lTwC5!ScLd)F6*OYM~rI%7Op0V~9p+;Z#=0-vkr z??(MBTSb#m4P*#s4ZfEPmx9JUL_Wa9PGO|fQdxKjsYcVKnH3F(yrwWux^4?Cq3N!KU? zj`Q)6qliln9raqK6^e$O{VSG^(n3uI8kUO{%u*z5O((MC1DBzfs|3+2=rCGiDj3&! zc0Df_ zl8f(bOE(H69_bYv2iZQ-T7vcJpo^bdC@-kWO&3N z{cl|nC#lbnC7;+ig5NP}_S^+?g2&JzDHI;m2M@N*FD?$mh3Ke8u$(a@6vXnB@KRms z{nfzzZ2IC>|Mn(%kajATViZV+Hcsh6jkk)&suP!n4aSztf++FV3BA6Y5iYY7sKaP9 z#&uUtPJ{YQRxCbcm5wTE(^#=cgJRvZ(m=c+a#>OC;82PZ$yy&>XmhsVJHhf%nVH<3 z$?`J^zcu!K)WZ!DV$SE|7fqPOAuxB{>s;L{n4png+8l+>qwI|+I^+&O!7K$TyXQ{+ zYB~gFq78L7uY3#=E2I&NEZL+o`yyrzKVS6nR=N;H^xe7P-}rOQPBB$VmtZv*-ZWN> zus)-_oBTE+$-W;BtuuWCeF0ySuLO`ytg{%Jok`17C)79;kfI#dCbQ}r8)GEI&A+X> za%uLt)`ABBDS~{)`8+U?jGsr)u};$pPg}YRT325Kdr>Qy)P3-6TinZa?bkDhC@+i| zxk0a|a+9sO*0zz}rs0g97+yxluHE>>18hl2Nho&!&!fP$f<=&q-sP{t?t2nWU(|-6 zNl5gQ21*jbUi8eG)w@XxH}kDa0{O(Bz;li86tEn7pF)bvQRUpEKBo?-ZkPos5+NakSRsg-1O-P^h@We4*IEGoO8TENY!KGxo1O%qW|9#P9^*R>H|2Ot+&elROUu(SBf&1kJ(mzaX=_1l1S ztuM9oMy8dt9afN)C3~wBLbj@NZbq^)3zw!rWr#$iAAQP-bhG}$ zn!){iJmDQdcA)XED(=maiDXU*>H4cUb&ULHa6J6gZ znXrj-gP@Wxj?{F^J)l7@HsgGdRd#D5&wQj%#BB1@(S;5YVr7}~9r8E-mOX$lP8>w$ z>_yV=fJA`29AXC8wzUW&!-Hc6vu02Nj74|^2+U!b6RV>|tRilOW|*}` zr=;u!ZWF;X?CsAWQ#l&nPou&bn;i=FCwlGJ3YvvW5B|LoB(fLI!vE0-B2I;ZMD)Lv zQqUujZFP-qBSaAdifGfJ@v!*NtI2v=(z!a;j4p+p<~vydG4x{Va+TaZ^o-}9Hjn4y z+#PQDGY69AGcm^`*haD9t&9&4m(NE2RP+qjrF4Q}y4?JnKzQ7htpuw4S-DWycfh9P z<(c)h@Lt6LUn4L#CE5m3S9FWNBwd4ewv7-f)Ap?pDvzbL-Cb@|p>&gI%jUT?Syi-5 zNcb|kG2C4aD@YAf_Jw4HgHOX5_7F1`q6Q<52hRh2_`78rtRNlSWk3SFhgAHBAY+YA z>pW397)t`;_5C&vzy@{n!K%z?#g>Nna)Zy2r);q!NDlJkEkSqI^57`Nme38mue=|MaN*vQo&>C}1$X zg+QXNil8K2yTAfcQ!z3eAuSFqZY~m-x;s$!1&d*FE7QD|8`yD?3NVQIT*)pQRCzJu zcy75@8|zWy_uai^yzKuvZVH>U&WLnoL(QGM88Y|GgiFy8$651qzeCJ#u5RmNca4~f~w|CJ~8S3L!Eu_3RShDOLA zVN}lgru+u}Ghe^TE*w!ruh#o-;4}SutDmlKcmID{I`MB&eqLs)=mjRk1J}XAHeCG_ zK$Jlk@)3~5r->D5`uQC(WpzwKW{eRut+E6Cf3uB5Ahr?WG%eM?m^>2xX7bofAI+OR z#JO2~t)Rk8n}k02->W5hodF3u4Jy~gsxj%%4-Ur$FFSA3jYP{){#hu2luVGIXn5^o zZrS4uvEEZKsw>j3J3ID;|3&m7_k*f0Pn;2~cHyu(l) zQt=Eic*n)b%seAM3acl2jDx>g6;O51#0WrwiLUh?q)Qs)6>3ml4X0naVJLHrU%5*K z$-8V25Dm3hNTwcGeF4_j%(Y00c8LVe6iMe}=^n}bl{ZAT77q<|mbq(ZK%@!!baf20 zYOmYQx^wStN!IwIG-6r_YAQhWbW$s4Cv33WgBT%QX?4)|$F$ioiQ8HNMfg+df5t>5 zTsxz-R+7)DMwofO*2tKNMb43iDsqxkm90yh3;{8qVDBf&g=u`0cX z_QSek5rPg2JXS(-!*0hfpH{^k4_GWu?}_n)2vt%r1(BeTTxTY=nH*@=g2Irw{}Ku% z{YTBUKQtB< zw7`DqD8pu4^N>j1@mD;G^Wx6@T*oD*^9hvAVqflpV|K7x@w%cwEDE^j{2_!bbA6J_M4f}*+?yOO{Wcy{ty6NhT7KI9%=PQnLCp;@ zyeqZX;3-SstA6qKknAy5rM&f$8j3r9^_BuUE|qg>Q$y8kAwH5e*JBYy5D0D&=Nc z?-q}5igs0xS}i%cB$rcIH=82YbMB})aq@d_@!ir#yPahVWk!rsXPRf)R%MUcuXCxS z=daLO8cKe;eI=+N*HskQ(odQv!IwtiTpBFMIPg=ldAqsG-Mk4^yGys*$sWB5!>&oX ziru>PohfHJV?=^-HRERFHMa(6czbd|A}t!vdFfk@Z*F<3%@Jzy*PbCd7Hw#1-Yk;F zhWykt_8`?pw_{^IV~_So>3ehu3FerYMQzWu7jCF!6ZaZm6`Xy?RKFc(HxYvICY~Vn zI8X0DoRAMQ&NVH_PZj8$TW2v)&F{Wnrde^B;&r!Yj?edELq-~2FP{wb$r-$^;W*db zCC@_?3Tyb(yBN&6RytuZy7PWikt(ssfd|8<#Y|ppvb3M6oU}}Z^VNm$WH}Bbq zhl9aU;IPU4BHGYsbis%w08J~1$cgE$SaD?^c+r1CCl6lI$b~8O1p~@9DK0|pw1AS?5#rcD%bJ!7b!DfAn z2u$Y3VevcRMk9u#s2akwXuW;QVn$!NZQuIrTL0&PVvNq3k6l(`z-)Cy=weK@JTAEb zKQFgH|2TtS{E?4+BqW2l{vw@~JH9}~X@t{kEperyLxQ_yefjEhn!&)FVF|vQ+1nfG zXoJ;Hmfj?~F=kET*-?@W+gB(j>z_{B#1CKPb{qH_+|1j*5@NPWYACurCe~GG*REaA z|5exC{scy&QOoWbh0=>g7B#81Wy6g=MdX)CM8hAJ^ag&r*S@Ev&-xR7_XvJp@ug`O zLzxw&;v&pY?mQn`A_rgPl&!%XiIBm`n>VJ8`EZJ!(zC!!uSPo^dAMhv$r!p@zRkwg zRxd>prFBVN(011d3e|DNC&YTt$hoUv$o}Qqmk%dpxV^UpPX(G~r$9QW{(_vV{y z+9hsDfiW%Eb9TE(+ZYKAV z+4~ASVXNs6{H}z;t;xPG>R@eg%(2jdA0NOQlJlF-AN7QY`|Y$~y@lvz$H_;neNzr> z*gF#H5?QJTPn=RMm}$ynwUAwPy*@{)hB*R{VC*<|*BsLaVqGM`SZYCLf&Qa1;r#v; zYuz#uW;X)=A}$qesIjNKVlmRCLI_o8=2ccfo%&|^7>kkE7eQ*L)u$rOmDMNurWM%b zF0Ppdy?6oLwywg<6CLu|lMGWVH;N2R9@?IJ(pJqdrTJ#<@=cxh6}161d`C=Wjz(Np zS*I0RBnXkL`E&Fwe7!?bm1KJU;#xpF-v>siokwCStQW?v0U+jh)o%1mL@lTJ9QHf( zIpokN<``|94!O+-F*MZF(Da~ZZLRFcvotZ|$S)%DxTxs-W{i{GYhoI)mbf5A`k6OF z%D1UWZ8N}WvC~Sy!R)B8Fyrep7TZwgmis&moH*Y0lr;v76n+>{KVqW44}Nr3a(m`y zp4){S>TkSg4K9I)zKr1o&-M=Xxg|J=e(SawqiZsprKXlky}o^-2yFAmi*ewH`x z-lWe|I;HfW-PCj3n-bYNnhBsqk_#sd(&i>XB`_vY?@xyhWL&;_xy{~~38IE$Idtn7 z^}fG;zIa{5m8+~HLU+b##3*}G&dl|E|H`5F#HiyY5j&bgY!V3+49N~|o}KIRD+ess z5@pAfj@zs#6KsSg1SduCt9ldNpEc-kdP`)t+5~Scy^nHm9lqtPyz-do;uDFy9uaD1 zrm~CDQd(iPJl*!|&-W^|a4I->b-NvhvBz;`IHbO}*B^Y9-36R@8%6ZnIOmiF-wS!R zHbd7LMcY{txd&%I+Zm)rpTE*0UnbZx8c^$%sY8OYTi9Pe&C+98P)|O03wq>9&pPi; zExW4d=4tCz(RPYq_7(jwu`Nzcf;e)5k@+fl3ek9*{rbgo*Pav2gF4^QnXSd##HjHF z#K=j|N`1|2vJ-QgQ4<{)9Nf#u=(W7;SYL}zt2e%I<3`xeXO@BoeT&VAM(cX~`%#kf z9mYcvtg=qud#i{iU8zE!91u-^k$9#uoL73d<rP<=xfCGW*+xEsFW z?-nB`Mo-n-qq2uvv{8qq9OyrwZ61`a^=6$Y4SulO+4E=L^sAuL0u%=pcOUV4#4zcl zwR**8v3U#zff^PFU^48iZs^v7PPlYdi{cemkKuo_5Iq><=GU2qF^!;%EJuk_3*;we z`_nRO-4CY;T3y0Xpnfi0#fD6IpH-sEP5C%6_L$U$m{a*kT06P#i9T*G?ntlVpy7VJ zw4uqFxXFaO)A>u=P!jN{#;=C+H#FQa_2;A*!uF=AB``KNc(LNe%b)LaeHqLml6K9) z&Ckw_LWO(Z#$fR&yRCHiao5;36LsEq#Ga3Co<|k_ddqwzERH@5eop1jR(t=m>)mop zm_Izi=I`609Z_wkOCLtl%e3KJ3}f3=>$>ZGVHu|@{psP@p40xR-J;kY9_hxpY@E~Q z`%VV_?CQaINccC)Zn0%j@}2u0X+H* z)tXuHnKQdH0&TgM zR*841X{1tNYAn?+0_8Lb$|`>$*v{dCZ@L}x_{^~)WV!P>!BHu3uy@3;IvjWFOSJcs zV&~%O&6Uj89-63~p(o3#PPv;Vf$L|nFLNcfcz__-mHN@|y@zHP+9i3U@^;sb^CP#V z>*6p$L!1i8;~u#&laQo`CGO6DH-b@8sE~R$czx0Cz%1hkDE`H-xQyae4?ghs$DTa6 zUuUK3(&g6@irJ61qpIaXXTB%*?0%WA8>%nWoSXprFNr7FA(EYGoL5-Id{>1QqL+Ry zv(KU)GRNN;#Nf3f&_bM(^OYTrL6!?8)2Q z-LI=8u6*rq6NxVvN|`4=F)(Z#6j5~C1buLfJ8Ui?me`+O>piBxqJWJ&s^h1=a^UIn z#h@W0{!1N3lep*W@fGAmW(z9|#^B-|?w%cF%xJqCbjiUi3kw%gn0DA^Lr=qP(l87a zpLB^>^FhAdP1hB5%unLH)wq`q4ddCTjxwXQ`-k4mv@MT0_U9+UK&_?a4YiVkU!Krv z=GrI0N^6rU?)c-%RJg|e(CUB}KWKT-OD$rvOI@m|$lYRAm@gmET|W1Mx0>mS+X+$J z(CXgtl?kE_d)4i$>;4u_!)e%Xn4ai@ElYRadv_Y$oH?!J598sJllil+_MEb>w@JMq z1f!w0VZ!zFTTH}fH4k6k3V#Ukea4&PVAG2x-8I3^+vJ2*iD~KX!Mnz1+qN6|Uo}q4 zjbTzGf4z+ikH4;ZvapWuNlFj7_6c$6L{s1N`J34<=6hH8IAPO}sUqmbD^X=o9pU3Y zQITcc;eY0m8;1WoXLD;gL4*6RYt3o__hGPEwF8^+V#r8Db1gX*Z91zrGAEWo3?lrP z`XT$ZPBj}p5~9w?FXwUZRF+-nyk5bbWf~#p)u-_$`~ANz(e~w;@6iX&!Po_TWN3#l z`_?JN*mS^f+H}X@wZ`V=FQ$%eeV^1v1-re0d*0w<23Z>v1s<&`MPE;hz>J}v7^b+ny(j+q zvYkf^JXD;f70SD41aCxjP-gn$df(3PHIE?LOC3$h&p31l62PhjJpS|dmkfQ3dgSDo z-{Wp(rJC63G2>6OsN+#JysM3kaiUibwmBmN2Y*G3Td}~`dU$vgyAfNF|C9htI5@Mt z`#a7`S66a*1*c;y*&3%Fe_r@f3&SBLsd?!Ina6JN1v~3$ni-L+SfMGka{24NN~2T3 z%CO67#=Y&F@p)H??6BF{BET8#M3Q9duXuFJmC)YR0vx;l4@&diGrdw+eE0mIEN$2Py@ z*>QE~4gB`)vYms2!k=H!O?%Z-$Ly*0NrrO^O;@vrgSFvQh(f)2^JaOzQAtHZgOiF? zaQ)Gg9$ z!y*>Z%SBb@+0FD!ulAWGD8I5Y4O}anMh!U<2`aQ!5x2`)LvXUt%YkxFeOL7iCxS^^ z=eEGYSm!pq`{UbKGPs#2gEiB(i8FMB^qr%P4KihOU&J_(Y1u@?HqXSHVs84if0&pp zvLK^QH=QZ}Zn&|MF3Kt9g#)fMd;eyu|u52ocZOk1`GM_K14`&_=n|w^_ z*}+#}fJ&PPR}qt_mrQmstX2xfYruTBaD-tFneP^)lU>N%OIJvbe>=2CLP?wVOFxdt zdA@wwIwd{X$W=&0-#x*fWej_T? zHO^a|E^0Lnl=#BZBH=LQshV?X&bIA4nWTA8Jr9N>3$IMQ3Im0QlrK{rj&a+av#U{x zH^)qA%0?I9D;BugR)Tzj#&Mx@^onpOEi<5-y{fooQ>My`hCf{WB!Oaq#YE!gNELC; zG8VojnBhjr=hTFkt_kGOJ^p-eO%<8QTk7ZmPD=okBv%>edIj9QBeG{=+Pj>kQbP0E zG;1=f!Y4{r6l7tR2{2uVhTClF=5%e9K@s`{kBW*OfaG|J@ok1zGRbpIS7)q?g!ClU zo_u6stHJC;hlS+u1>O{wt>5v@cUVJ(-$+-@zgF|>^9a*f*4?nqTl>mxfO@9lDidG5 zOD$uy@}u!LH0KAgZ9+hZ3V7k zsKek-hNDD7R={EN>t|4f{jD^EDLef2;6+pGx_Q5`>7e>UYlThj<=(dR?$3B#}`(6J7E~I0LzfG^nep?@*`$J2$S5 zkMu&5RfiNDa3G5xctablDKwcTANum)ced){nZ)eeZLlAsP=2EKa|-uiONN;G0Nffi zc$X5VPl@cpYcYqm0M!pB$c_9^;ArEz%ie8Re|RFI57g-exNw3lVyybc- zxb;e5g;LG|3Q9vV>WS`K{XKJ~8YS431K)~SZPFOugisyte)$wY2$ce^17g%Rg1e1+ z$Ib^^D6eLIstyySMLlePY1;j4!UJ%N3Z+40iWR|LY}Y74<9oNCyIxBuz?Tev_iN34 z=Vj#4CGP*4r=i(^?odRM)oxbSockL4m=)YURABkTFjB=r2R9A`@d3A)E)+3ON%i`9 zJRw!J=%m`wzB_ujMJVx#8>X==C`oN(f7yKDc?;0;>Z-55$`F zB-2dBXVJo*N!8QvM8VoS2bncE7rZ1DqlQB;S!YB$@7ZuXZh@yN3m@G+sI8PS08dYp zn_~W_7rG~-R(Bnuc{4|QFoX5|YQv>Z>j|Qm`i-|y_6Rz|7_I3h6|;f)P{IiV)rT(| zkr^2;e=Ya$Rk(1cB}1m%Yu{wQvKHZeDRW8#w-sKa`whu1E6{|w8W#j;OHFnev0-@z z3~FyYl~(Gt#uvTauE!xY_M#BW#{3&EFKSOSipzZ!mb1r;`~!#XV8Y<-km#!?s?Hq$ zHiYjaFPZFeqI4ix>TaBg9-OPG*siB*ryjh>c(3eKFkUT?X!GC=+z9$78?fbzm$pm} z0m;Ks%+zP7`0_hGVVU9R3}^0=)tEy)PxaK*V#6#w!0JM4C3Gig6waYvwmV(w z&exMGZjiv4cf&TvV1dj3VXyl`$9ml(PS+eml@qtf(Zzqi(}CBTRUvQQ;fahICJX@~ z;ILA!iCLFDi!)uN`8r1rBdJKyz(S2u@M1G^l1Xer4t*T}fWV?~4xpZ2pAoPYVelI383K$A9=Bb?q8`rd6*W)K`J_1-o;cMfhO}Mr~K73n#9Z z6*r;HKb$e#mhBw#Gf!{H(>-pwNq^G6!Ers@w1&l~yy$X66t>TV?9)JvCxI5O+g#EnNFe4+QE$^P-We!@nr9g!| z2KE&h;t=5UbXYw9J8NoS#L^upgxxaBCKW6hgTdMl_yUQ-(!~te!AEsz;rL1gKP_AW z&4sQLDxk!JB|kz!=n$%|v7N0uj)JGdVMtULhPqdA)9J<-gdK{bS5N`?3r2#1U?FW!F3NHA=w11x0A3*Pc*=D_`w3S!<3^ zd>pShj{sZ>=kGyh#M?e_7?MdltcO{ z)RRw(mnZwJqsiG*mlfSADT0YMQpm!vcXMHA%69HS1)tns=v_MH&aRUY`4325PgPsn z2ee!RW6cRbH}QkZNB7jLpT(4Xk?HAb2e0g}zImDvz$?J!>#{ZQ5H_SEj)Ln7GYx__ zjx9F#2gM{G9;smt6XQXf=@GftRIaLeEU=HK%&okMhXp=^Ch1XH*^}5O7msUd9d`B6 zN7zWB{c08oD#F2)cjHdfa(^Rz09b;|+NI02ulDD@&t$UTE=2SbJeOAexgm0hVC z#gKKmVS#>Xg{m3bGDlAtU*I|V2ChBp3HVIJwfJ>O8Hq#}OLmy-`llR_halAdw88Ux z`#xYk$ky+giq<-rW4nlgRk7cO>F1)rOoNHAc6Lz~_SEjxYrMJMFeSk!>Xs#h1sh#r zXlmCdPQY*#=$Q~46!ZuV7$9qwZDtj#dBfr|n%zs}ff7NI_v(E1&GRu)pIM>pgbapW zIzB5o&-WEd@0H<%-n7Dgj5(m(Nc{!zg0HpVjT2FST>c9Yr(K3)B0wug_q$40_+q=k9rspJF8t@dTKCxH5dnXP4*HHhi_{Ru4 z7hj+VJQkwW3~qlDPl?WmtqxkW~;vc(oz)=PcQU&r0aWTV#BQMdqym+UUGW9+Ne z-=&yM4}KM7H7gE}P-Pp&g()L*=!O3aUZBq=XWP`{skt5I4{AqfGuO~aN^qCg+b(Er zc!Ydp1`V{pt~CO}4(y@UbtRZug(HEUsNUqq1>B&)X8^uzz4Jdwl)__r$Q-TRi)+s!5w$ntz?P{ zxVOltOp-F1Lm^Ytlz*}TZs{$Ibm6@LtE`tl&CyeT;2TCL3BaFsXAuHs1-lln`!+== z56vEF8o36$3Ig*2I@`8_zfvzDG!MNG<}@c*@33*zd$lr^Rq!r28IRMWBsKi^5~lhm zVVUDsT7(THGOf%VMpY6N?na}($*7LGE8E`bFuGb*M|dt^6$Fflgm3C9KS0Wfi6`^$ zvsFK)r{$n92|6<3j)d-9SSzonSk%3FAfz>pDUhDZM&H<;9PPYt|3l&0px+LsAwe^@ z)vM2ms;0Gk2b{l3A!icST!8e5H-;Y=j2%Yi>KgPD^xR6VdXDR*luUF7>_GcO;TwuVv~ZI{-2(+%L;`O*{#Dhxk*TZ(E;522k_$nI0JNp_ zFl<|CyP8=q9A}L#qJ`L7?%abmk~PEvRam;-#)0JC`5Zg@>QNiMGUw@hXap-FXZ>MM za+OL*p$v}l=d8tq#TL5#hm4**lLSEZIX)!jJB&>ijv+)0TJKJZPgQ`nDyi+6>dN8y z-p=M)&D`TF@@u{Z+yXn zvhjcJI)Jb5L-9{f-HWajhow4g`X$wF0*O+3CD5I)HSDk@LqN|ou`=>Q&%|afo@2On z`GxE0g4*g!=dcxzW$0-iExF9lFEyJKU8YHV+h0@&FVT0RJ5!yln-HEc))b_q{kcWj zR{8ARhg42(+?bO**`6UEZpddi)i)ae(KNPjLD4OB2*(^er?AtfzGeje2nZ&kI{0Bt zhL}YCXg1=LBXReVoaiQzkoVMO_|(*c$hp)bKN^xR%?8F1>Ob-+=kJk{|3+ayd3oyK zYocH+`pPPcNnTfN!(x*%unR==51c=SC75`9)#oP-k^S~cn{HM4Dj#PR5eUB3Q+Ith~IY)B}J{4 zx>{@{YE4F%8F`I0ofVXgqcy!(Y4EiAkwl7)%KTi~rDRbbIR zn)ls+(2D~o-1uIy%wrXwe=rj@9&t|C({-&7qOaiMTS`j z_5(oTzTkod|7if$uiXjS!%8ha=7VXVhk6I9R7N_bjIaJ8%4J!$>(5ov=e2?@_SCLF zWs)2UF(f_w&GN^XK(x!%K2?j8&_9;~g??coceX(`PtX*#0$?&U-4)$)yQI@Zfu)Nc z9_ewCTMyU16yld~!=65?`_%Do>nQga)>4DoBe$2@ystS8*@9+7FbuEZgaB+UbM3_Z zOTkrd@vNQm;F3HihOIb$vfF#_>=hHY4;H-k8$U zLV|>VFKtL&UyG|MzZ9`DY#@-1=f=HAEYjU09$Qsj$-~5CF6P?t^m&?5?ZEqY;l)pA zIe%6Q_a27h(yLdmkh|Vr;+0}peQ;F!vD9x~BPMXrfr5YDPMc}SIAU&XBou^y$F7DVfu-> z8fJFJlxq^FRj-Wc55vR}Sd-@Bgg@}DIA*+9#PGzeyk{^Y2F-g3v7Xfu`()CL=ywhh zdgsZ%w2HHcEm;aHeGk48DDh303{QBgZzMMGX-atT&TOOOd~UW+NMl3Jbx+@E&d9fV zdGkEqHjbu>id_>odAgsSl;F7dq$}ko#%;>;*2-Xv-Ka>Tuf#FVJER|x@37I{mpO3& z5(h6hC$1#VJ7cpM}{yOPwEys$DO6M0PUmv49dT`kNT4> zwR{T^U(UX+_RP#Y!z>axA(8Wo+bGwRV-%pMe<@VG3uU~Pt@xRn<6pn?^XJbSxu+>9 zDxZBeITxv&IlKt%VmIsWhm{vDrTfjAY;iWUzxaTMPpJ@=(eo-eq?6_;pNon(!9K^$fkqSlJtBwC09A|m^LP7u?eIihu(K77T( zg&FzHUbh}q;x15t>>?QaZ^#jqobLi(N=uJONU+Sz%oNwcOc5R7E6WC|ghxhhxO(H= zE9U(Bbx+&avacW?-%aN6qo_MkEPM zw8)Y*`@S2-%=0-1E!TG6_w#!_&+GTsb+x?6e3$b)KgV&rkKM?l6?V;hVVkKYLyK9m zw@9u$nJWS=qD>AE~I_&EO_btyAP;;T!OLa$r&*& zE`F;qfdo5}hCU5V9BKC$4@3^H?5Yk}<*_1Swe<2R+QM@#ZG7?|U+a!H~1)faT z5O|biXHUsD@4mm0$?x;`vUA7iMlaxL1Qq@1F!I_1DqsYN0{Q;-WW}j6+gE1kh%Q_F zp{xpe$E>fLoxIJ?i0gSp;^a-x&mDF$Xi*DOkmd*wH*sQW(cIvBai^<%zI)Kjgc;Bx z?g}xf!uy|DjEDX@ZrWLXN;;VOxpzw17Nviu#HQ#dr(Ssi?y`&xj}CF#d=Knr+vpsuW!g% zGOM**ZkJneWOS{Jw^XDDK~1;gz!oNI_xY{KjQ8L?JMgr(ymWb;FHOx6Fp5ft zpD+I?U+*`5Hwa$En?Ls*fZO8}Y2vAnxAm)C@^g}o1>-N!q<~i}=h}<8rZ~5qJHtJX z-KKElz4avDnrSPjVqya=#(Hmrm4y^_U#;EmZzgk6#D)KJ-}=sOkaylz@a`^GEomTI zEgCA-KqHO+9_z=u9}o$9>!iT)=_V$B@shn=pU>ORQ zCoq>>?a*^{T@DW#4Tk6Zvh$Y&yvbhUp=KJFKrP#2l3F;zCE;9j)gBRA9Og9kM^WqX2iX%{^D#b{m|KbXLPcb3Nh*Qfb84q z;waGFz_nfD0lP8TS?vNAe1Xd{am?+ly#96Qr?_3thG7 z-cM~(PN`X(4T&^vT-oKoKI_7BXw_SS-%!EUi*($(218Up>x7rSf7pi>Lw}1G85uOl zlDmF>`2}-x{=-qNDa57CgW#84&@!z)c_;J* zu17E7#Rv7%S`=j1u@br0YEGKO&W`sqsKRZq&%;(uI^6E{r44lZ-xmj+;WpV2l48Hb ztUKm)Wt23oq974>)%*iJMr6BpMAqh1*}yMW&E zX}*z;znfu``l6XspsVSP(RW)=X0B+KYNSdJ@S*zw#uWASx745fa=r~B^(OgD@J5hT z8rW^{VH7Xv#MH#b_!F+K+0JW=X4)Bhx5oMWqofiIp5;GDDyx2%RBCBXfH-nf>?IxM zM+`wAnlC5ocY$Qe!}@ApAazOuYaLgAWs6$3j%MNG3W8N!5=DgAYoE}O$_5ue2irE=I@P^wy%x=H>N|~<*O3F=+gQfoN&@$50T*qB6#-xHQ9&T6rb!9{2}R$bq5nm6tE<(FRGoO$8X`pS(N=W{vVb(5!~tmJIx^c}wMcEAzm zL1JnXPn|!IC%5#oDutbgCCMgzO4S;M zG8GNpnV;EhaZb3`-=4O@fL1Ls;u;KqM&H%wq)iT{=pMtX++z?`C6GAJy%LKXo%VDx zmKNgjG>3b9-#!|+$KkbJ^YyFHx0HO>!&_T>R7b&eUM5~Q(E*DC_%k~2-b0r`%q7P& z@bmh?d7pP%!3wxfDdd<|+N3QvPZHTgD8xieVuq7teeS+qE%EK#^n%I^g~(%pWuU`_ z4%gy?(jp3k@(DM}h=#%0u8z64MWVmI^?m78xD*w6LUHClG*cfw-E^KA>PyoKp)cgv zqr;PdTiWg&lcmFaaM3UD<;FI4ObKKMt{4FG!*Y>tf}fikf?+Hu>op){sACAzMpKAA z>|af~;fvlpy~jS%U=$uG)EY&6h(m5>*jL=tL(bScU(xCtXK@nGs83{G>VvUvSZ8fm1U^{-|L5RwSv#jzpPp^hpc==TM( zKgG5jrbuI2Z73(u95&hdq-V|C@~V@P7FCg#B8&j|yf1|0A4a6SVH!F}S6_>-uGa7A zJ27?V`YuJo0|yQie;5?ne5R7uu44E24aId;oO@x(m&NZi{bv8h+`dEBT2>;nz_8xS zjsz~{FL#W}z-^H{cjJY?*$Ro2F;QJ|B}^~rE6KIBKFS(P0zrN^lWE0enq=L9)w=B` z7}Xm>lowwAoSJQ3C2Pu{PWlGujDQhro5oWVP)8>o@LsxUrZn%PcJng{ZinsKe=XKT zzbtN~yz@pbL~v9LczO%=)qOG_RI+UwaNG>Gbx4e;wZw6tH#c!#B_Ut&E?8aI22mr+ zPK}m*@l$v1Mayge*C%WhSFaMatPrmd^b_#zJTI(mY_J-f6kwV7;F-XAyXy9l`J=l6 zPC8t<1%8*sOhxE(@h{`tc7?w02)Znwrx6*}m&Yte-)w2-cJOK+VaxayOfl3SjO2^r zmCC-Yf4u#9NqB%LJg_kKru%*+nz)w1^*wKKrn5Mljhhv>Ml-lUl)`iFQOQ2+ml=oC zzeg^nA3uQ^$$G3~DGZ=Tz3eQKh$?*1^YtfSn6{M(Fp6(^Uf)_y>u{(uJWu1L+f{+? z>rVRL4ITp{%5{$@liI|Rs77!3CXw~m>oajsQvH3jLZD@g7n`W4D9ozM0l)1Cyu4(+ zj1@91o|2e{i2@GN?AmW&N;&qf6XS!GChag~NsWI=E3Pok3Wutz;PCga@RxO+<>}*1 zy|U|0J~KDYMA{f8m^9P-2EZ{MBZXUrnK|6$sywHQc45YLk>QzExP}R9pQ>8d50AYB z{w1}sQsVVp1*2Nj%8|6J+tHb2eK2r}-^k=B1P0|OqZexmbq$(rUsd3v{~(DK%npAP z#;F*A9tK8H1vZg)>Q z@rBiLU!KJl7^n8!$Hmn3m$kM&9Lb>cL-3=9z#Bpb*mWqGjGN~T5$qXf#5Y}fu933e zL@yyJ$qZWJsCa*aJcDCUqX4F2(b>7V(GEU}Zl1@X4|8sN#(0qQ45Ppjvd)ySu{(=W zhROe^@m!+|0x9`_)OfB7uNV2L@$8eb3W{ZvhQnHoa~cD3E;c+`@n^y3a#V{$pFkAp zI1D#;e8 zD_ax_zJX@iRiOx?obwb17?xf=Bs5d9ViJH7S? zw=ZRg?H|PbD*7-gXuh@?Gt<$;V$dk;y-QFb4HO^mj`Bo$&O&sAoPQ#3hhEJ_Y0k)h z)^=!#gu{QY?K~0G*$BfJn8R#>c}slHZV-A@;@42;GV?L>d>B&+4&OR3t=3$@@rBq2 zT1s$OZME2<2Ub$jNa@yGv?D3K44VIdGwtZ!(zcd^3>${o9JU6N2Z+b zTghRXoccw5RzolMXTII9+BaNW-PXO%U?q4GO0M87PeQx^k~O}vY#?FVP*ZBp;Ft=N zaEwpnxu#XUNB%7E)a=2xeYcdNe?)mTwl?04G=H@(gzBt8)`YyG1PF$BPj9J?ir)53 zAd)%sEuR9+D&D~95z-2zVc|PAlVnS%+C2f zyCWcpUP9UI*)z~ESYi;>J7n%wxgHM3%$zId{ko| z(nvw%F?se5jxCRop98lAWKS4QB}ArYnmv*D(By98wpGSf9&06!WSVK11l{v0KWo~v z%qlbPM<67jKX8)t;){kXk&~&Um!gJNB`lBnY=?cqf}FPS=A*@Iu*_Y*%%Ww7fph3* zEZ=)6=9Wk=sc}_ixI3kePb1?j3~Jq6x@R8JI>FGW9C98nz(Sv^=hrRHnf}-;4xSCz z;B^sVm@#hsDcK46s-M|S98K1bjSogZNTARhmK0NALR&1YVtcbp*gZOtz|Hr#ixvF`|OPN~yg>u-wd$r}4~zWt-31+SrspC5+To^1D48 zNT7MWkt)z^%=s6ACgkMCVh@1q#{|y0>?lMuh4hDplO`f>!UO?B z9o;t$NTXp97)VNLFO5{jz^vli;8w8Bu&VCe*nI9h@3B;#43#+`91Mwlt3+E2A9*xtzcL=^W(*whA3se(f@C*xA3^OejO5TOf0w{6w9MD_$uipty}oIq0JXuRkNM%(o^#|qKWf5wh4*DC5Z`?_qg3P z%?)DuL(EEEHjmHI=ghp~YN=_sr1?y`Z6f_+4gjSR6D;{5i+6P-aU(fc>Zh48HWvDK7JCsrF7P+-Hr16R*b@$eKwjBBiz#P({f zmxCE*DGM>u(7lp7&U`S*vg&u2izc0A6txr%+6v-H>}-JOC(76Tlj{v2mD1_{Ok5x! zFfiSzQ$6$L%h-ab$U7QlvID?g_7e6OJ)PkVbi3m;#|%*>2W9Y`z^9ILK}g!t81tuqT!iD#+AcV!c?+^bf! zy~0a#A)tHP;y%63_)aUlsI;WQ;vMqbOX?x-l?^x? zEYxEw$4xaeHkU?Ug2O+5k?J;h52Hv-s-^b}NVraxp{)7i8PDSysk2~?XjRQn$T`=y z@fK_D@ODx5c87^lw}SIK_i?R$RuR~kw7R|DoA$6LE3ARhGlkwX;NXk=jIESsJS)GhCH|%jp7gk{kd3`= zOm{3-lmT8O36bUz#>6TRPRC4oi2`*Yy4A?CS4USk1~8{?=7$olduQa&!8i~`D}QXl zmzLF14XdmhCaNs=zx}E_{d&tGfI*DTwNQ9r)nFG>3r5a9VV&nd+~#U%X!y|B$OsfQ z%}D7@FqY@?Hrn>9;3Cxj|C!)2LvtLmB~QQ```G&lmte#@e4wWXx|i_kJ5TKwT*7g3|#Z+z$U)y!w* zvRz`Pef|Piy>XL4z$u7AS_qB2>W~3ScR=OoXW@5*3ukmfZ!0(jhrqP!Cm7{GmG(~S z+AUyLK~d4i&!4Lp7(_}bZxI$|1pN$#>W$g)AhR$l&TKp!B};>Go2XG07|tpB`r<6c zr!tiV*|dqfKrnOf6;Wfp|9H+=`5LDXLX4&Wb-G-5DFasxLY zcvx`F^Ohjch`XP~S>#IvF`)A{jj4LyI!y81_u>Z{U&c{ov>{ho%;5rt}|8yztQTy?_|O_?RCy6?;4w(lpFtNA9_SM)Dio1&NpD>X}8rtwLkrR>$ zHF7f3IAC~qY=+SsGNjB8D1lC3VEzNLDL8uGUwZLLdU#+i^r`qsIKyCyi6Ml*U`nV=2)$&P zUDh{|vvfWneh0uKjAZq6XMPy^uuMuyTwHnz7ey9+LEVLi@CUo;U_r9pxL{Ki-n#cv z26MHHlSbTwxwGF>5Bw&fG);isxe}HwU_M4Ec%00OWU!?W&Chq4@wm@k3n8E|i^UlT zvzTv(z3(~;Z}Q-kP>RvcAnN1xY+U2|(WO!U?rcYPqCV&|rXNRYpE1pqqbPxXo{mda z!qFcCe_!Q>w=s6gYm+swnh*A@$2hc=EU%dYCEeKtN*ujMuJB!-GP3_Z#QmmYc*oYy zjT_u}!>YnyPJA!l%C7kALkCa=K@*8OtB^Rsb#2>b@LEj1oD{eIM$0O%+e@IWAo#Z#AN3nVW8~d7lX{^<&m>-C;h6 z#j?1Me;8Q37+QJuk&-j2QSSXsJbJlPd2-t;-7kuU!_;gF!QGpI;qITZDKXXxUMkL0 z4l$Pi=!BKj)|_+yvVhl7i?H*qAZ}DQ zW*lhc0Uk?CYZE1U?K#VHCXBGs4~gUXzAiWL+i?Uzz#tqqHWU^T@_`T&j2XDN zxfAm*OhZ_TXI_XG2x2px5#DG90`GlN9l^*Um+31`YM*n{Orm*WhCHYuf%jsJ6KD>z z!7(w7WCPq5zxK=2?uMkb@Q~If&~?37D$3eyrWYDgo(Mj>&Sc98O=;QftezhD5&%zuyWI6d|vf- zAr}ErVF-{0fPSP6EAWQyJ>W=7@_E(lFdMH*R$lp;T`z*7b*EZb7DB_w>d z9Y#z%0;B3!KJzjvGb(|-2B{%JJ$*Ocrz(RK0%k+i5OvoZ5uzSB0^LG2nP@ zCB5^xfaeS;ywQ=+Mg!4f39YUb=GNQvq^X~^--_9*+5g1S` z`5aabuMG}b8R7V(s_DS_&{G5-7?a=dD8r?Aw|=IDXA(5)%aEvz1;4QI?%9=2LshSG zKaORvAnXnteNh|~hMxX_ve2FTpbv{1%5`2&Twa?ETSVB6df%jsKPMoU%7HnkIN5tM zaRA~#{=FAJYR@=q0wPH92d8ins|Weh1W0xMe>_b+WixgOP%bcW(pmF=^5c-V z3>>RrEtZ7CH*$ckOKDv(dJ)7A4CZ5!R_SmSY4v(normDAFxZ|2*sJ9kpLsrbXU5NR zB~e)<3H=%nA^I-luLBD!<4}|WlAB?cTHtl4z_|gaN9_&RQl5#AN^l<8DJhBC+l}&F z4!VX!ygQ?#4Q>?>K#=Xg?4JEZTYZdC8JJvZM=<9feLVWY#yT`6c8re;lAB>%H>e9` zCd>OE4S}#sEZ1W2>eeS*NvL*)ZJij(u@w({Ps>Tk$Y{9Uj@4WKOY|i7-=ZgqXGvc5 z3(*tyr~fH>@&ZxL{#mbB_b3VL-bJvApN*R}D|7O$gb>@1Q7($Sz^(+v4Pcvu+ylxK znRyhiKIMNHhfE21*{4A*UF`{x@Ag!9eVwSgp{r;F{g`1^9y5hI~^Ki~cd?5IxpYk^T3Gqf$2j@!ka zg_op|W(TMs^#AR8SAqGYQGc~j@fnPS9KKicqwEmoriYH$*{QZOt6vU;oFq!>16!`+ zWfk4-Hb8w%c4`fglC(O)TjZyvcAVng!v1aNBg=p(n&SIilC_%q=SXL(t$^&uK_yCo z@Li`iA8K}kuXlV$#P8H70Gn8@2VdMiJe?h1F{s&$%w*nR>yv!mxk)BtV)F=-2FY(I zzFi!QYN~8^r5Wq-Yv1=VT9N^5KAco96ji(I{M2?SRAMA)ckE+`9km8 z^QKc9GA_k33KaxrH0^u>Net0EtM4sEO(NA+`zF`RFL1Qr<39eF{FZZDbm#aEF1SAd zxD*1?B1{n5!SQuv_1oW2O`DL{6Gr&8*?sT8>q#aNF)THDPz_tA)1*_jTv7pIm~>cR zMBSs%+I{#$TrXpwyc$0C=m^s33Y?V#oKI||#_CPrfQwRsOrPiDnx<3%Hi?GxQ?U?7 zf+2%=ynb#_{>Gkyv-Eir&u)Qf6(_X-K2=Kq-I9I!(QYMA#Ttzo=~UO5(s$kC42{GX zFU1&^4oVevMwdL<+PV>_=PT&w4m8ftQ5rf%=?RK3n2QM6z`?;%_`GFyd!E=6?$ZY~ zHOnS?oA$Oe+T%sPrKsE4iSc?(Xt!N}rvS=9Y5L0!d}V-2|7R58Fz0WY1;^jZ7_KR6v=J37;yhzn@Xm&=13qrhw0 zz2A!Vlnwe_`BTyZ_Esb?_Z%!Z855%3qiq8DXl)5UZfJ#&ehaM-HaD1eAECp$EHG0} zpYm7?Ye+&^V-wf|;qF>lnO8V@c*Nu6w!iYIbmwB0qy!^`y~_dEQ5TwNdwv`l9ld*d z@KxSUF+X*gts%tw_ZCtew|7xWcjHf=1yk@;H>G(|QLQvTN;bhRg*)iMpmM6qJgwkL z2}zk_aPH$%$g{`!850lDbLJoYIH-GU^cXUy1I-@vPZ*o30vj)_+Dd9OD5M~Pel5px z-%!~Uj;prsfY=*t5Y?YP(%ON!9zAb919Mb8yScAqY0d*%H6wf>CfgPoRpnLuC^3~c{4r>QK^cumby92La+uYQx$6 zi>5;tmQ>h9d{Qv>gJ~joJg-W_6#_|PTMtG8qkA-mu^O&>ty_#)^)zqgJG=dY(ue8CKZQk8<@$6K&#ROXVymiEc<_wViO5jV)Z zP`E+MJL|yXda;_I|Kp&Cz%uXYi-EiTin@Alkr4~19lF)8-v{X|jm4F<(BS-r-p6E& zPgY1{LcZCu$r$AfT`d0R7f62g?3vQVi@U!`UtUUNaPCK%Mg?{cdDFLb$NmE3`Z1p0 zDg6P3K|X-B40fTtUHA6Q3ohnP7Qe~TKLqr$QpomtlDQY(n03MpZ|u8q5cb#~M3JPl zniCQEYJ}*?!NareTnAN};Fq6+ziq4N0uZc;Jn#NzJ$awDPuyMpzsM000Wq7wO8~VH z*8>BUJU!(>nD9LZ)`A65qC}Al{HvAeBwKH83N`Y<1?Wj%IzGC+69asuST_>EsnHq$ zWlMU`;?KV2Df-D5e&KHhP#oygD9$wt@8!F?3dSb|d2S$eh)sMXjR$evHVVs)5&&LBbLVi?pT#`B+|sSa>)z ze%iN1z^UZ~8d3H5jki} zj@9r`hF!CT?CQT|KP-P_Kd8Vf-ZK1fJBemp*J}E~Y{ToNIEvOX&^N@HHb}zj`iJIm z#ewu2e(SWhye(OEbIiesz|ZLPhVz2-$BvaTu8{RWu+y4-KeHZNfJKX^%nzg7VB6)> z;A^joMALtONQ0vvl9MlhNCl@_Az*vMf%?EG%ovZ)=dA>P5D?Bl=?#XlJ{&5LNyE0U z?t1(D1&B`+zBHQX=^Y5Yw&N6FmgTPnYhOIK8>neV@-)^`&G_$mAEkxxIb3}=b!R(B z8+~`5qIp7_+a5S?rze^M?kWv@7!#t)a$ELAFeei^&jEsPEA}E_%z^iv_C~3j`By{UkkBY;@2*Gh-a9%QO9b>Hu7*^Rap4ySeptbJ#H3yJ5-xh+WbbnJT z$AjPV??LZ2DkU_VsJ!YPh9ROHs+mEFf%Nsf{ote%( zFbY?eyRvK)-pl~3LL`oe7~}P2w#WuhQBfg#zUz=Ky9Dg;zMl9Pg6IUaaj_$KdoX>% z75ynH>>>BRd%jsPQches_eY4t*&O%q-b(&F5$uzrk|0mKgL}0O4AOw~siC47hp9omnCUjoqcROZaLHdttaqZ_W#ivsC+CU}?Fr$|U8|c>3 z22+$=jn|s_@08KYi6XZ@Yr`wAzP5|Pe~0jWHqnxbJ8SzeH-7k+c`W06^&P7&I8&B{ z;7I1lM)_>j)j;}%%zmoOq-|f#kw%|FgXw@Q+({Ub2SV7D-i3{4vZZ|f{wSIX&srj0nU%Sd&f~%uSBctRgyVn7REr&1bit_o zhvB-wt-nbLuV&37%$8xIC^H2;Gkh1vuS=XC2X1l6lx}M3uN1862&_LX=8y(EL9wY( zcJ-acTWR3vgd_$|bk8*Bv?Sh;i{QyWJqz&+ZG^;<6+eIF+LL1{(QR+z;5lOpTndr2CtKHqwb{{epp;rg$en79zSccqe zor&r=zjNIeQi!tR?f%HcNxIT7L2lPVKn{gt&wbaDiDUSZ7z39@)oGfkV|1G1cHiJ? z`RD2u>M(Id@i!@heT-|w)JMV$KBK22|xwY%mmE3|Ox!H>AmR{>w8UPH(ma3f8SwkwcZDoCp_ zt$=b?Zk$sbF2#z^uf>ea>$R{C2EuOj2Q}-YN%DM~c!K`NM`9F(0P7aaTe^Tnk?+S)&U zl^mnwjW>*Pj-1$qKbPQVSWsK{eYV8J_a8GF59>w#_(B%C(LMYGqJ}G0J-4|85sfGL zixCY7IsIcq!+_p+xLOO>#zP2A`w_R0szXdncT%}v2pz^S&w&BfHZ(NP zC&SLWk*I<3*+O2ayef9Kz2`wpGTIlUPjy3#6&+C_5QcJd1 zyW65)`0as%yTM~8f7Fc$=1Y`$Y&%WSf68P$6<_ym+wanZ>W!vtfcqLRXLdK9y}Je$ z9awzQWn&ChrxpfsHyvWrn%%f*WO@r6D1Gnfyc)x0j^8(IS(tFf_C`Z_ovX9y?6&?*nE0^MnDqJU2J zKwG$}WJ`|{EXokb@EI4T{W5Q{kf-%aeEgUm<1o>q-TPd7lsdI3X`<29EM*tH%Vx-^ zYje17=pwD|3sa0RTRv@g0sp%MT%_C^qrx_?Gt74=@%Q0HFTH>~wAu%+5P_e`yo3?O zHhTZf=h>?dTvMP0MNDdFJq60Cb(ql&1dChNhK6f^LwD=!5q_I1N!NWi&{A~dzZ55C z>>uH{F(Vi2x~WN-`GOMpy%xQ4R-cMkVV)Kbg&tom8!p9mPR$4q6H2Q6ju1H+_fN*` z!p6QDU3C?$&Pzi?-S_B1um?((eE)@|B>=d3OxjrP9oP-}<+t2`V>Wsg;4qHdA_s(X z0#7@=QTO@=%`_mU!LihB?jEVuT5=~{`sr5~o@2R*^+!dGn|5e;KTLC~KLJ(_Ch+Kk z&-Fe7kbc~zEOpW|TO*_lUjoDDw1q`nb~byy%iygc-t~Bj!7@-Rj;0txmR42i0v54K zx(FjdIcE)JC6CZ|TQE-RR8Ur#A8}70@uhffJ-rZ&t-0JB1`o2SKI)v>(+b!?gt1uz@nyh=vXZ5*-W&j=<&zjSRvSIz|Ic z1Y%p3!!}n_w^r0}QRQHYGLqAO@ACRorL8}x94OleO(pLQuPbSmy0sPQlDu9d{8Fd! zLQ=ott;(J^{G8h;s**7bHF8wZE~RJwBGBJ|2F2!l`L_hX2K|3hE=mw)**^3$h!-RI z_F;dkTx9%7xoG)&<)Zk^>dv4rX7zDN{cVF-4ex6^Ye$d69#sUM0#txu;6-F~@zx8b zeD)rS+YjA4;9l~BUD!$uGo);cIeT@mw#P#?7D6gPBL+lO`6vBS{Q(BO_S`i7@q^t8 z$G$3t_X!I&UU{e5qy~FXpl`^2T_^i&?^9SiuV^wnwr;gK4cgJ$7mgW{G#mNv%n^}r z@%o2w@!&&c^7c^R$wfu+AdgW>b~8KUzxN?Sn$19gPMDaa)CT*Fa3 ziqEO4#+TZ#J5F@++y&yk0;BqI52WgSe-L|9heKqUhjMndJci23J4;Wa?qcZL=nc%X40#f&N5^z#vxdZ^zH(i>`{M^h4?s70r=SO(a2OTcnoM%#8;pdOa0~(Mla{ z-t~iKxBl09i#X1U@Onz>)`UF?P%_gL76Jt`u-i#H`(Udg z2%kT=D`5xIYXN(h?W?4+qixn_Wpsgk{bx8q@=xJ}wy2iSU@S(8f~&@00CGJvJDu-4 zC>&#e_=_+>tzj+GFgfbAJY*pXSvyHx0Y(zXH5PaPiqqglt12>=mYATEFM$0$q)LGx z1(;_H9F4)c<@uIo_p=JdXWJZ(qz))%ON?~mhRel^+Kcvx-s@dcC=QPX5!xrh zcI@XDx+3?mI7N)ICtDI0#v6&t>qd^=VFVNcibpuc%%~U*$Fzyr>`7W}=13lS;dG}m zhvq1_IzA+hT>t8?)sCVP1Mv{m3$Fq*x5(3bLIr-iD60H146lSbGw?qdS7#{P%n&Y4 za!?!&qqbsbFY<4yVGfvM-?Jc{*e*#Y%oHy&f#jW9CtT1qeX-DZ)#}v&(Zm>{-^9xW z=8J-dJnyL(O23I+qyKY_Qua-{)XbN&-NWI*?3VDMlL9bj2~nJVJhDerlnF)z05?*` zVY8DPQ+IW974g?yUZ|`hpZ-Rpv(9U$b;D8qvEp7*(zw+r+_tm%xrb=7Uxzo4+Z z@y{s3lrM7a9(D-h*=WbPPONWPaZN~jdiRl5g^Z26>0k_Ws;EY=0FL+mah;astdJ+; zAale}87`&7HxZQhP{J1JGBd@wah!b`W$4I)g7OkJ8)IuvWe#gS18TWH?++}Nxn`Nx zLZi@(PdC&GaokX;?}qXN_%Dbl49pai9{Xw`1@m2p7-o`feCS+}&@_yEecf`Qh{3p3 zMk_Ax;O(tI5KXUs$$MGuPy0koOyf7{k?2yAxV_X4x34(D-J-P@S_RJ5 zOBzot+lu+6PDHNxwpYpM@tv*enXy}_uZ)_@w>+m@e{i(o>Lrp@`}-Mp+cB?LY_c?@;>qP~PgB3{pAP|XKK&{vE6=lMkH+QXa3GgA z^o6{u%+<@?B7H=W%E}57fW-qfkNBp=-G?#@J^zDE^OwGd(+4g8sf8@{hWrpyeDO{4 zOSAu-Y-r~H|83(4EwpGT(;=dd)!oN}wg?pAi=Uv;l7Tvs^d4v-O2 zDdZ<4@h$z6D^rPHkdy^QB@XUw@+PmrQMcAf_XCiiRsGscnZ4WS5(n9i4<>BR@u$z# zjBY`R4&NTXzCf1wBVM71E%xK{LQO53d{5ZqZLr<$9RN?%>+*6sd8iX9wUTC7>G@D)lvE z!t#egv?xA3x2&zWUK^80c=i1AD5(Won`Qcas^VNnuhWkR$aU%ew-qGeV$-iDTFUWL zc)>2JI&V^3D3Lf_Jb{0AS{~IA+ooNmlMn!X&hm)lzc|7Jgf}ul}$!{T8dGkRe6SxR5$a+o; zA4kS1YgshufDM~7q|)KV0@NQ38Oc+FArWqKB63AVq+M`2qQM|1444NaCQYp8JPr?z zdRRKZfD!H#3`e6*DR2&Z9vx7N2?xr)VDs)vfZbOsy+3|w@^6V;{iBvCCNEJH)Q{QbaT5J&-y|Fu!}@V}=; zaw(Q|x1f+~=v)4!*ueYXW2t2+19S=7&j?8iija7ml~`xuS&p%&R{-ArV!sI&Z)nF_ zCeUWSbW}u87UiGsxU_MN=gjF5XeO4*3~K@gLY8|^4f%{*Y=9P97!NV*_x1}+q@Ilg z_VnCG0lsa!z6A^F-1Q&2RMGNr=cY~jobejuHa>n=twY|x+Qji`TzR!IPjxGWYv0ff zhKiJ}^Npjbk~>rnfk7O!R73@K9ne>hLv+`qt@0=tUh^pK z=RV;)rMAd=QYwE84o6_X2?4B|+LHlg6<@ot8=ofqTiMBWufV-Spc!0QYBKqY#&dUa z#_t%u#s{SopmyOiHKd?tqCQv3hoiW2_Rd_1owv&P*9-~GD3CJ)WwfRkMt=otVT3?$ zLopN8j9i@g?^%-HdQGI(!M1dv$Yigq;&1ZLog#tF<(4AmyQ7ndgcuVFi4Q2RtgHWz zqa>#rGC_33g3WSfGz1qkHs*wCBV`@i|G+#z|^yfqbI!kOmUZ(K9QOrD~_6i+FP`WR9b zpVpM0iciPiC_X&1mvi;?Gwm}PscldN|Do#S$x@RE^a?GqxcW!y^1UZj7FAO?V4j;? zpN#!;xrAwH%>dw_zzyJc(bq-gH1b8!f20J9br1Li|5_y3~4aT7n@u-ac;s}(!sQPILb?!MKv zMS>R>vg1kfQ1SS~(@DP7cBP_raiqOBwb{3_8vu}N68Nq7g}Ve~XC6@kxNJrn-|kh-HO)+bMKUlX&7NU;Fh zzw$h^cyLvGEB7yN8Lw!mUu{?XzQs3oXISKux8kMlUHe<-CW=#woMuK&^@>@LX+uQZ z@$^xj*PKl%x8jRQ51w>;@g0l(;00Nd4U1V4Tb*9K#&y=Ev3-^3#g0rT+)JxGD zC|gy^zi3~Y-(>VycgQrm@k=;|9AdrB_uB5iWNLjnlNJhk&9)_^*1zgC#kZK%2|CFS zmo%62Ug^NvEjJ0SoxK6WP-=I{!lwikk37H(1dD$$${B(RgNjS4pL4+n=HNDbN*k-! z7_vTAOkEw(I@Q{CfjgcwO}S1tGvlGWTb%p23Cn5irGk?8H*rmmWymwc4v<@98pVWgM!w5T3Y`&5nRtOLrbfXBJZXWEeJH++mD?%B5oup~q z=g4qq+m9(0jPcz3?Et1~TNEwEN=~%sZ6#qU$E#wnq}B!lm{cLtUd1O17B}QNLmkba z89a+N5U}y1;&nbg0+TGN8Kb5VU}^+Js*M>^V1^Y26b3jbwgF#61#A$`QT@fBk1ShZ zKfkSl4$3eVD%2M$N}%TVi~?DH*CcoKkKz&yuTh|bU;yR!_qh-%SyjGRZLs_@6?*06 zuI(MZ7esIns77O+86sXLLRSpQT+(=+1mz_Tb)V(-n8XJBXbI<9Z{k@tAN@-y30vAH zp3M%PZ}y}FTRtYWyznzP`T-a*kPSf*k@u;qbf+U1HgJcp+rar7c2oXrL(wum0*out z%+lpd{dGize!5_{T%Bf6RXG7@G?agUa^dV|ca6NcJmee&-!-`4_jeeNnmprko5Y~0 zKiEzhW6wQq)bY~^F1id|dJaRGq~y!C`TK6yICwFCQOslmQw+*dnp$6) z5Dh?L7`d^xWd+8wc`}z;&W=r$V5WaTy%IYV?DwqX6Z7>-+5l{U5R;u+0Rnuw1Rarw zKeHSQ!+&0lc@;Uxi!6yS2+)Fo3T;;C1ag?pM{owX;dg-S1y0m>tL3htB4MEoAuhim zt?4R;}a_DyT214w|vNcg0uzFO;j9`4(14TiyiT3s7`m zem4r8vJ$v!sxI|8HS&sew4%Y?YDAOVf$d<5xmI~@Z^vBIA#U)A%Fksy)75v-DH{4?9Qhs?K~bs;lYf6S^VT@1?lpgVDkPYD3bNBK@n||SNuXy z#1$=mp0!ogm*@WuYz1+gUKGcH;{|F0MubmPl9n^~4Q*M$W*l~HXD4kxF~9{0E6G%u zt2_OZJs39u>!S0Rj7~BC&b(sHdF5+^Z9pl7B42J@kHL|ghZ+wC&++&Hm|r_@2Xv`z zEdf>pKwY-qHCkUbI(@l)m?`lQbX#MJ^M_UJruxC-dG?~{8aS??j~$%&_Zc0bG*#R~ z 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 W@6Gf6<`i-(y<_{X@3~v|pZH&wcJep? literal 0 HcmV?d00001 diff --git a/docs/developer-docs/endpoint-ids.md b/docs/developer-docs/endpoint-ids.md index 466fd15c..fc0723dd 100644 --- a/docs/developer-docs/endpoint-ids.md +++ b/docs/developer-docs/endpoint-ids.md @@ -10,15 +10,20 @@ has_children: false The Endpoint Device Id (also referred to as a Device Id) is the way we identify individual devices and interfaces in Windows. Example for one of the built-in loopback endpoints: -`\\?\SWD#MIDISRV#MIDIU_LOOPBACK_A#{e7cce071-3c03-423f-88d3-f1045d02552b}` + +`\\?\SWD#MIDISRV#MIDIU_DIAG_LOOPBACK_A#{e7cce071-3c03-423f-88d3-f1045d02552b}` | Part | Description | | ----- | -- | -| SWD | Software device | -| MIDISRV | The name of the enumerator. For Windows MIDI Services, this is the MidiSrv Windows Service | -| MIDIU_LOOPBACK_A | Arbitrary unique identification string provided by the transport. Typically includes a unique identifier. | -| GUID | The interface Id. For Windows MIDI Services, every interface is a bidirectional interface, even if the connected device is MIDI 1.0 with a single unidirectional interface. For MIDI 1.0 devices, you can look at the group terminal blocks to identify active groups/directions. For MIDI 2.0 devices, you can look at the function blocks for the same information and more.| +| `SWD` | Software device. This is any device that is not a physical device connected to the PC, and which is created using the Software Device APIs. All MIDI endpoints are software devices and may or may not have a physical connected device as a parent. | +| `MIDISRV` | The name of the enumerator. For Windows MIDI Services, this is the MidiSrv Windows Service | +| `MIDIU` | Indicates a MIDI UMP interface. | +| `DIAG` | Mnemonic for the transport which created this device interface. | +| `LOOPBACK_A` | Arbitrary unique identification string provided by the transport. Typically includes a unique identifier like a serial number. It may also contain other information like the pin pairs used to provide the bidirectional communication. | +| `MIDIU_DIAG_LOOPBACK_A` | The entire string here is controlled by the transport. By convention it breaks down into the fields mentioned above, but that is not something you should count on. In general, parsing these strings is not recommended. | +| `GUID` | The interface Id. For Windows MIDI Services, every interface is a bidirectional interface, even if the connected device is MIDI 1.0 with a single unidirectional interface. For MIDI 1.0 devices, you can look at the group terminal blocks to identify active groups/directions. For MIDI 2.0 devices, you can look at the function blocks for the same information and more.| + -If you look at the device in Device Manager, and look at Details/Device Instance Path, you'll see all of the information here except for the interface Id. When you enumerate devices through Windows::Devices::Enumeration, the interface Id is included and required. +If you look at the device in Device Manager, and look at Details/Device Instance Path, you'll see all of the information here except for the interface Id. When you enumerate devices through `Windows::Devices::Enumeration` or through Windows MIDI Services, the interface Id is included and required. > Tip: Although it was required in the past, we don't recommend parsing these strings. If there's information you need about the device which is not contained in the enumerated properties, please let us know and we'll look into whether or not we can create a custom property to hold that. diff --git a/src/api/Client/Midi2Client-Projection/nuget/Windows.Devices.Midi2.nuspec b/src/api/Client/Midi2Client-Projection/nuget/Windows.Devices.Midi2.nuspec index 3fa37bd7..95fa84df 100644 --- a/src/api/Client/Midi2Client-Projection/nuget/Windows.Devices.Midi2.nuspec +++ b/src/api/Client/Midi2Client-Projection/nuget/Windows.Devices.Midi2.nuspec @@ -2,7 +2,7 @@ Windows.Devices.Midi2 - 1.0.0-preview.3-0143 + 1.0.0-preview.3-0144 Microsoft Corporation Windows MIDI Services API. Minimum package necessary to use Windows MIDI Services from an app on a PC that has Windows MIDI Services installed. MIT diff --git a/src/api/Client/Midi2Client/MidiGroupEndpointListener.idl b/src/api/Client/Midi2Client/MidiGroupEndpointListener.idl index 4b330abc..e7e66f34 100644 --- a/src/api/Client/Midi2Client/MidiGroupEndpointListener.idl +++ b/src/api/Client/Midi2Client/MidiGroupEndpointListener.idl @@ -29,6 +29,8 @@ namespace Windows.Devices.Midi2 MidiGroupEndpointListener(); IVector IncludeGroups{ get; }; - + + Boolean PreventCallingFurtherListeners{ get; set; }; + Boolean PreventFiringMainMessageReceivedEvent{ get; set; }; } } \ No newline at end of file diff --git a/src/api/Client/Midi2Client/MidiMessageTypeEndpointListener.idl b/src/api/Client/Midi2Client/MidiMessageTypeEndpointListener.idl index 628eeb8b..d9b82cc4 100644 --- a/src/api/Client/Midi2Client/MidiMessageTypeEndpointListener.idl +++ b/src/api/Client/Midi2Client/MidiMessageTypeEndpointListener.idl @@ -30,5 +30,8 @@ namespace Windows.Devices.Midi2 MidiMessageTypeEndpointListener(); IVector IncludeMessageTypes{ get; }; + + Boolean PreventCallingFurtherListeners{ get; set; }; + Boolean PreventFiringMainMessageReceivedEvent{ get; set; }; } } \ No newline at end of file