diff --git a/samples/ChatApp/ChatApp.Unity/.gitignore b/samples/ChatApp/ChatApp.Unity/.gitignore index ea7c5897c..4c1463048 100644 --- a/samples/ChatApp/ChatApp.Unity/.gitignore +++ b/samples/ChatApp/ChatApp.Unity/.gitignore @@ -54,3 +54,18 @@ sysinfo.txt # Crashlytics generated file crashlytics-build.properties + +# gRPC Plugins +# https://packages.grpc.io/ +[Aa]ssets/Plugins/Google.Protobuf/ +[Aa]ssets/Plugins/Google.Protobuf.meta +[Aa]ssets/Plugins/Grpc.Core/ +[Aa]ssets/Plugins/Grpc.Core.meta +[Aa]ssets/Plugins/Grpc.Core.Api/ +[Aa]ssets/Plugins/Grpc.Core.Api.meta +[Aa]ssets/Plugins/System.Buffers/ +[Aa]ssets/Plugins/System.Buffers.meta +[Aa]ssets/Plugins/System.Memory/ +[Aa]ssets/Plugins/System.Memory.meta +[Aa]ssets/Plugins/System.Runtime.CompilerServices.Unsafe/ +[Aa]ssets/Plugins/System.Runtime.CompilerServices.Unsafe.meta \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions.meta similarity index 77% rename from samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll.meta rename to samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions.meta index afbfc4e34..8710ad10d 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a92779ef1fc382642824da79d6112a17 +guid: f3f8be61e41745a45a255e2bd3c6bbac folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api/lib.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions/lib.meta similarity index 77% rename from samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api/lib.meta rename to samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions/lib.meta index 985a9269d..1d3109ba8 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api/lib.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions/lib.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5ab1abd8b5b29ca4888d5c62f8e7249c +guid: 943e13d8bc53e714dbb8e7445c7d255a folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api/lib/net45.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions/lib/net45.meta similarity index 77% rename from samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api/lib/net45.meta rename to samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions/lib/net45.meta index 15daa1f16..c293841b0 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api/lib/net45.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions/lib/net45.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 993567c626a06344fbd3fe354f6c562e +guid: ae164409aecbc0746aeb5604ddc760d1 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions/lib/net45/System.Threading.Tasks.Extensions.dll b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions/lib/net45/System.Threading.Tasks.Extensions.dll new file mode 100644 index 000000000..a99c9077b Binary files /dev/null and b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions/lib/net45/System.Threading.Tasks.Extensions.dll differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api.dll.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions/lib/net45/System.Threading.Tasks.Extensions.dll.meta similarity index 93% rename from samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api.dll.meta rename to samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions/lib/net45/System.Threading.Tasks.Extensions.dll.meta index ded26efbd..7aa0b924f 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api.dll.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/System.Threading.Tasks.Extensions/lib/net45/System.Threading.Tasks.Extensions.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d131af712e306d64bbfe6a54a9a44dc5 +guid: 6ab57ed387abdcf4c8e8f4d08e2e0017 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf.meta deleted file mode 100644 index c9d3ca96b..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4b6ebd913ac610041b63fc847ee96302 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf/lib.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf/lib.meta deleted file mode 100644 index d415abf6d..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf/lib.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e4ab5b3f8a676a84a9eb3ffcf1e8138d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf/lib/net45.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf/lib/net45.meta deleted file mode 100644 index b7670b6f7..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf/lib/net45.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4c50e24955a9a294b99ad097ae2e252a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf/lib/net45/Google.Protobuf.dll b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf/lib/net45/Google.Protobuf.dll deleted file mode 100644 index 53c3b64df..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf/lib/net45/Google.Protobuf.dll and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf/lib/net45/Google.Protobuf.dll.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf/lib/net45/Google.Protobuf.dll.meta deleted file mode 100644 index d6a537838..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Google.Protobuf/lib/net45/Google.Protobuf.dll.meta +++ /dev/null @@ -1,30 +0,0 @@ -fileFormatVersion: 2 -guid: 286edf5aec6aae64697e5e8b7ab9b60e -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - - first: - Any: - second: - enabled: 1 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api.dll b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api.dll deleted file mode 100644 index 7b32fe5f2..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api.dll and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api.meta deleted file mode 100644 index 00e8e63e3..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e4d1287c8e9a5dc449db4da624149ab7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api/lib/net45/Grpc.Core.Api.xml b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api/lib/net45/Grpc.Core.Api.xml deleted file mode 100644 index b0400cbe9..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api/lib/net45/Grpc.Core.Api.xml +++ /dev/null @@ -1,1067 +0,0 @@ - - - - Grpc.Core.Api - - - - - Authentication context for a call. - AuthContext is the only reliable source of truth when it comes to authenticating calls. - Using any other call/context properties for authentication purposes is wrong and inherently unsafe. - Note: experimental API that can change or be removed without any prior notice. - - - - - Initializes a new instance of the class. - - Peer identity property name. - Multimap of auth properties by name. - - - - Returns true if the peer is authenticated. - - - - - Gets the name of the property that indicates the peer identity. Returns null - if the peer is not authenticated. - - - - - Gets properties that represent the peer identity (there can be more than one). Returns an empty collection - if the peer is not authenticated. - - - - - Gets the auth properties of this context. - - - - - Returns the auth properties with given name (there can be more than one). - If no properties of given name exist, an empty collection will be returned. - - - - - A property of an . - Note: experimental API that can change or be removed without any prior notice. - - - - - Gets the name of the property. - - - - - Gets the string value of the property. - - - - - Gets the binary value of the property. - - - - - Creates an instance of AuthProperty. - - the name - the binary value of the property - - - - Gets the binary value of the property (without making a defensive copy). - - - - - Creates and instance of AuthProperty without making a defensive copy of valueBytes. - - - - - Options for . - - - - - The context propagation options that will be used by default. - - - - - Creates new context propagation options. - - If set to true parent call's deadline will be propagated to the child call. - If set to true parent call's cancellation token will be propagated to the child call. - - - true if parent call's deadline should be propagated to the child call. - - - true if parent call's cancellation token should be propagated to the child call. - - - - Token for propagating context of server side handlers to child calls. - In situations when a backend is making calls to another backend, - it makes sense to propagate properties like deadline and cancellation - token of the server call to the child call. - Underlying gRPC implementation may provide other "opaque" contexts (like tracing context) that - are not explicitly accesible via the public C# API, but this token still allows propagating them. - - - - - Provides access to the payload being deserialized when deserializing messages. - - - - - Get the total length of the payload in bytes. - - - - - Gets the entire payload as a newly allocated byte array. - Once the byte array is returned, the byte array becomes owned by the caller and won't be ever accessed or reused by gRPC again. - NOTE: Obtaining the buffer as a newly allocated byte array is the simplest way of accessing the payload, - but it can have important consequences in high-performance scenarios. - In particular, using this method usually requires copying of the entire buffer one extra time. - Also, allocating a new buffer each time can put excessive pressure on GC, especially if - the payload is more than 86700 bytes large (which means the newly allocated buffer will be placed in LOH, - and LOH object can only be garbage collected via a full ("stop the world") GC run). - NOTE: Deserializers are expected not to call this method more than once per received message - (as there is no practical reason for doing so) and DeserializationContext implementations are free to assume so. - - byte array containing the entire payload. - - - - A stream of messages to be read. - Messages can be awaited await reader.MoveNext(), that returns true - if there is a message available and false if there are no more messages - (i.e. the stream has been closed). - - On the client side, the last invocation of MoveNext() either returns false - if the call has finished successfully or throws RpcException if call finished - with an error. Once the call finishes, subsequent invocations of MoveNext() will - continue yielding the same result (returning false or throwing an exception). - - - On the server side, MoveNext() does not throw exceptions. - In case of a failure, the request stream will appear to be finished - (MoveNext will return false) and the CancellationToken - associated with the call will be cancelled to signal the failure. - - - MoveNext() operations can be cancelled via a cancellation token. Cancelling - an individual read operation has the same effect as cancelling the entire call - (which will also result in the read operation returning prematurely), but the per-read cancellation - tokens passed to MoveNext() only result in cancelling the call if the read operation haven't finished - yet. - - - The message type. - - - - A writable stream of messages. - - The message type. - - - - Writes a single asynchronously. Only one write can be pending at a time. - - the message to be written. Cannot be null. - - - - Write options that will be used for the next write. - If null, default options will be used. - Once set, this property maintains its value across subsequent - writes. - - - - - A writable stream of messages that is used in server-side handlers. - - - - - Encapsulates the logic for serializing and deserializing messages. - - - - - Initializes a new marshaller from simple serialize/deserialize functions. - - Function that will be used to serialize messages. - Function that will be used to deserialize messages. - - - - Initializes a new marshaller from serialize/deserialize fuctions that can access serialization and deserialization - context. Compared to the simple serializer/deserializer functions, using the contextual version provides more - flexibility and can lead to increased efficiency (and better performance). - Note: This constructor is part of an experimental API that can change or be removed without any prior notice. - - Function that will be used to serialize messages. - Function that will be used to deserialize messages. - - - - Gets the serializer function. - - - - - Gets the deserializer function. - - - - - Gets the serializer function. - Note: experimental API that can change or be removed without any prior notice. - - - - - Gets the serializer function. - Note: experimental API that can change or be removed without any prior notice. - - - - - Utilities for creating marshallers. - - - - - Creates a marshaller from specified serializer and deserializer. - - - - - Creates a marshaller from specified contextual serializer and deserializer. - Note: This method is part of an experimental API that can change or be removed without any prior notice. - - - - - Returns a marshaller for string type. This is useful for testing. - - - - - A collection of metadata entries that can be exchanged during a call. - gRPC supports these types of metadata: - - Request headersare sent by the client at the beginning of a remote call before any request messages are sent. - Response headersare sent by the server at the beginning of a remote call handler before any response messages are sent. - Response trailersare sent by the server at the end of a remote call along with resulting call status. - - - - - - All binary headers should have this suffix. - - - - - An read-only instance of metadata containing no entries. - - - - - To be used in initial metadata to request specific compression algorithm - for given call. Direct selection of compression algorithms is an internal - feature and is not part of public API. - - - - - Initializes a new instance of Metadata. - - - - - Makes this object read-only. - - this object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Adds a new ASCII-valued metadata entry. See Metadata.Entry constructor for params. - - - - - Adds a new binary-valued metadata entry. See Metadata.Entry constructor for params. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Metadata entry - - - - - Initializes a new instance of the struct with a binary value. - - Metadata key. Gets converted to lowercase. Needs to have suffix indicating a binary valued metadata entry. Can only contain lowercase alphanumeric characters, underscores, hyphens and dots. - Value bytes. - - - - Initializes a new instance of the struct with an ASCII value. - - Metadata key. Gets converted to lowercase. Must not use suffix indicating a binary valued metadata entry. Can only contain lowercase alphanumeric characters, underscores, hyphens and dots. - Value string. Only ASCII characters are allowed. - - - - Gets the metadata entry key. - - - - - Gets the binary value of this metadata entry. - - - - - Gets the string value of this metadata entry. - - - - - Returns true if this entry is a binary-value entry. - - - - - Returns a that represents the current . - - - - - Gets the serialized value for this entry. For binary metadata entries, this leaks - the internal valueBytes byte array and caller must not change contents of it. - - - - - Creates a binary value or ascii value metadata entry from data received from the native layer. - We trust C core to give us well-formed data, so we don't perform any checks or defensive copying. - - - - - Returns true if the key has "-bin" binary header suffix. - - - - - Method types supported by gRPC. - - - - Single request sent from client, single response received from server. - - - Stream of request sent from client, single response received from server. - - - Single request sent from client, stream of responses received from server. - - - Both server and client can stream arbitrary number of requests and responses simultaneously. - - - - A non-generic representation of a remote method. - - - - - Gets the type of the method. - - - - - Gets the name of the service to which this method belongs. - - - - - Gets the unqualified name of the method. - - - - - Gets the fully qualified name of the method. On the server side, methods are dispatched - based on this name. - - - - - A description of a remote method. - - Request message type for this method. - Response message type for this method. - - - - Initializes a new instance of the Method class. - - Type of method. - Name of service this method belongs to. - Unqualified name of the method. - Marshaller used for request messages. - Marshaller used for response messages. - - - - Gets the type of the method. - - - - - Gets the name of the service to which this method belongs. - - - - - Gets the unqualified name of the method. - - - - - Gets the marshaller used for request messages. - - - - - Gets the marshaller used for response messages. - - - - - Gets the fully qualified name of the method. On the server side, methods are dispatched - based on this name. - - - - - Gets full name of the method including the service name. - - - - - Thrown when remote procedure call fails. Every RpcException is associated with a resulting of the call. - - - - - Creates a new RpcException associated with given status. - - Resulting status of a call. - - - - Creates a new RpcException associated with given status and message. - - Resulting status of a call. - The exception message. - - - - Creates a new RpcException associated with given status and trailing response metadata. - - Resulting status of a call. - Response trailing metadata. - - - - Creates a new RpcException associated with given status, message and trailing response metadata. - - Resulting status of a call. - Response trailing metadata. - The exception message. - - - - Resulting status of the call. - - - - - Returns the status code of the call, as a convenient alternative to Status.StatusCode. - - - - - Gets the call trailing metadata. - Trailers only have meaningful content for client-side calls (in which case they represent the trailing metadata sent by the server when closing the call). - Instances of RpcException thrown by the server-side part of the stack will have trailers always set to empty. - - - - - Provides storage for payload when serializing a message. - - - - - Use the byte array as serialized form of current message and mark serialization process as complete. - Complete() can only be called once. By calling this method the caller gives up the ownership of the - payload which must not be accessed afterwards. - - the serialized form of current message - - - - Context for a server-side call. - - - - - Creates a new instance of ServerCallContext. - - - - - Asynchronously sends response headers for the current call to the client. This method may only be invoked once for each call and needs to be invoked - before any response messages are written. Writing the first response message implicitly sends empty response headers if WriteResponseHeadersAsync haven't - been called yet. - - The response headers to send. - The task that finished once response headers have been written. - - - - Creates a propagation token to be used to propagate call context to a child call. - - - - Name of method called in this RPC. - - - Name of host called in this RPC. - - - Address of the remote endpoint in URI format. - - - Deadline for this RPC. - - - Initial metadata sent by client. - - - Cancellation token signals when call is cancelled. - - - Trailers to send back to client after RPC finishes. - - - Status to send back to client after RPC finishes. - - - - Allows setting write options for the following write. - For streaming response calls, this property is also exposed as on IServerStreamWriter for convenience. - Both properties are backed by the same underlying value. - - - - - Gets the AuthContext associated with this call. - Note: Access to AuthContext is an experimental API that can change without any prior notice. - - - - - Gets a dictionary that can be used by the various interceptors and handlers of this - call to store arbitrary state. - - - - Provides implementation of a non-virtual public member. - - - Provides implementation of a non-virtual public member. - - - Provides implementation of a non-virtual public member. - - - Provides implementation of a non-virtual public member. - - - Provides implementation of a non-virtual public member. - - - Provides implementation of a non-virtual public member. - - - Provides implementation of a non-virtual public member. - - - Provides implementation of a non-virtual public member. - - - Provides implementation of a non-virtual public member. - - - Provides implementation of a non-virtual public member. - - - Provides implementation of a non-virtual public member. - - - Provides implementation of a non-virtual public member. - - - Provides implementation of a non-virtual public member. - - - - Server-side handler for unary call. - - Request message type for this method. - Response message type for this method. - - - - Server-side handler for client streaming call. - - Request message type for this method. - Response message type for this method. - - - - Server-side handler for server streaming call. - - Request message type for this method. - Response message type for this method. - - - - Server-side handler for bidi streaming call. - - Request message type for this method. - Response message type for this method. - - - - Stores mapping of methods to server call handlers. - Normally, the ServerServiceDefinition objects will be created by the BindService factory method - that is part of the autogenerated code for a protocol buffers service definition. - - - - - Forwards all the previously stored AddMethod calls to the service binder. - - - - - Creates a new builder object for ServerServiceDefinition. - - The builder object. - - - - Builder class for . - - - - - Creates a new instance of builder. - - - - - Adds a definition for a single request - single response method. - - The request message class. - The response message class. - The method. - The method handler. - This builder instance. - - - - Adds a definition for a client streaming method. - - The request message class. - The response message class. - The method. - The method handler. - This builder instance. - - - - Adds a definition for a server streaming method. - - The request message class. - The response message class. - The method. - The method handler. - This builder instance. - - - - Adds a definition for a bidirectional streaming method. - - The request message class. - The response message class. - The method. - The method handler. - This builder instance. - - - - Creates an immutable ServerServiceDefinition from this builder. - - The ServerServiceDefinition object. - - - - Allows binding server-side method implementations in alternative serving stacks. - Instances of this class are usually populated by the BindService method - that is part of the autogenerated code for a protocol buffers service definition. - - - - - Adds a definition for a single request - single response method. - - The request message class. - The response message class. - The method. - The method handler. - - - - Adds a definition for a client streaming method. - - The request message class. - The response message class. - The method. - The method handler. - - - - Adds a definition for a server streaming method. - - The request message class. - The response message class. - The method. - The method handler. - - - - Adds a definition for a bidirectional streaming method. - - The request message class. - The response message class. - The method. - The method handler. - - - - Represents RPC result, which consists of and an optional detail string. - - - - - Default result of a successful RPC. StatusCode=OK, empty details message. - - - - - Default result of a cancelled RPC. StatusCode=Cancelled, empty details message. - - - - - Creates a new instance of Status. - - Status code. - Detail. - - - - Gets the gRPC status code. OK indicates success, all other values indicate an error. - - - - - Gets the detail. - - - - - Returns a that represents the current . - - - - - Result of a remote procedure call. - Based on grpc_status_code from grpc/status.h - - - - Not an error; returned on success. - - - The operation was cancelled (typically by the caller). - - - - Unknown error. An example of where this error may be returned is - if a Status value received from another address space belongs to - an error-space that is not known in this address space. Also - errors raised by APIs that do not return enough error information - may be converted to this error. - - - - - Client specified an invalid argument. Note that this differs - from FAILED_PRECONDITION. INVALID_ARGUMENT indicates arguments - that are problematic regardless of the state of the system - (e.g., a malformed file name). - - - - - Deadline expired before operation could complete. For operations - that change the state of the system, this error may be returned - even if the operation has completed successfully. For example, a - successful response from a server could have been delayed long - enough for the deadline to expire. - - - - Some requested entity (e.g., file or directory) was not found. - - - Some entity that we attempted to create (e.g., file or directory) already exists. - - - - The caller does not have permission to execute the specified - operation. PERMISSION_DENIED must not be used for rejections - caused by exhausting some resource (use RESOURCE_EXHAUSTED - instead for those errors). PERMISSION_DENIED must not be - used if the caller can not be identified (use UNAUTHENTICATED - instead for those errors). - - - - The request does not have valid authentication credentials for the operation. - - - - Some resource has been exhausted, perhaps a per-user quota, or - perhaps the entire file system is out of space. - - - - - Operation was rejected because the system is not in a state - required for the operation's execution. For example, directory - to be deleted may be non-empty, an rmdir operation is applied to - a non-directory, etc. - - - - - The operation was aborted, typically due to a concurrency issue - like sequencer check failures, transaction aborts, etc. - - - - - Operation was attempted past the valid range. E.g., seeking or - reading past end of file. - - - - Operation is not implemented or not supported/enabled in this service. - - - - Internal errors. Means some invariants expected by underlying - system has been broken. If you see one of these errors, - something is very broken. - - - - - The service is currently unavailable. This is a most likely a - transient condition and may be corrected by retrying with - a backoff. - - - - Unrecoverable data loss or corruption. - - - - Utility methods to simplify checking preconditions in the code. - - - - - Throws if condition is false. - - The condition. - - - - Throws with given message if condition is false. - - The condition. - The error message. - - - - Throws if reference is null. - - The reference. - - - - Throws if reference is null. - - The reference. - The parameter name. - - - - Throws if condition is false. - - The condition. - - - - Throws with given message if condition is false. - - The condition. - The error message. - - - - Flags for write operations. - - - - - Hint that the write may be buffered and need not go out on the wire immediately. - gRPC is free to buffer the message until the next non-buffered - write, or until write stream completion, but it need not buffer completely or at all. - - - - - Force compression to be disabled for a particular write. - - - - - Options for write operations. - - - - - Default write options. - - - - - Initializes a new instance of WriteOptions class. - - The write flags. - - - - Gets the write flags. - - - - diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api/lib/net45/Grpc.Core.Api.xml.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api/lib/net45/Grpc.Core.Api.xml.meta deleted file mode 100644 index 99d838802..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.Api/lib/net45/Grpc.Core.Api.xml.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a4bc46817d2da2c44892a8694b28cbae -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.dll b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.dll deleted file mode 100644 index bb2aa6452..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.dll and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.dll.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.dll.meta deleted file mode 100644 index 28327f779..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.dll.meta +++ /dev/null @@ -1,32 +0,0 @@ -fileFormatVersion: 2 -guid: d69fb9c98159f174abc0ab3acbf0faaa -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - Any: - second: - enabled: 1 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.meta deleted file mode 100644 index d5da6069b..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cec97935215440549a638f37a905a159 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/lib.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/lib.meta deleted file mode 100644 index 3c4d17f44..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/lib.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c9999db9d714f7142b693f5b254424f2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/lib/net45.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/lib/net45.meta deleted file mode 100644 index 4ed6a6964..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/lib/net45.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b06d1a5d4e0798e438b47589132d089e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/lib/net45/Grpc.Core.xml b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/lib/net45/Grpc.Core.xml deleted file mode 100644 index 45eec3036..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/lib/net45/Grpc.Core.xml +++ /dev/null @@ -1,3322 +0,0 @@ - - - - Grpc.Core - - - - - Asynchronous authentication interceptor for . - - The interceptor context. - Metadata to populate with entries that will be added to outgoing call's headers. - - - - - Context for an RPC being intercepted by . - - - - - Initializes a new instance of AuthInterceptorContext. - - - - - The fully qualified service URL for the RPC being called. - - - - - The method name of the RPC being called. - - - - - Return type for client streaming calls. - - Request message type for this call. - Response message type for this call. - - - - Creates a new AsyncClientStreamingCall object with the specified properties. - - Stream of request values. - The response of the asynchronous call. - Response headers of the asynchronous call. - Delegate returning the status of the call. - Delegate returning the trailing metadata of the call. - Delegate to invoke when Dispose is called on the call object. - - - - Asynchronous call result. - - - - - Asynchronous access to response headers. - - - - - Async stream to send streaming requests. - - - - - Allows awaiting this object directly. - - - - - - Gets the call status if the call has already finished. - Throws InvalidOperationException otherwise. - - - - - Gets the call trailing metadata if the call has already finished. - Throws InvalidOperationException otherwise. - - - - - Provides means to cleanup after the call. - If the call has already finished normally (request stream has been completed and call result has been received), doesn't do anything. - Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call. - As a result, all resources being used by the call should be released eventually. - - - Normally, there is no need for you to dispose the call unless you want to utilize the - "Cancel" semantics of invoking Dispose. - - - - - Return type for bidirectional streaming calls. - - Request message type for this call. - Response message type for this call. - - - - Creates a new AsyncDuplexStreamingCall object with the specified properties. - - Stream of request values. - Stream of response values. - Response headers of the asynchronous call. - Delegate returning the status of the call. - Delegate returning the trailing metadata of the call. - Delegate to invoke when Dispose is called on the call object. - - - - Async stream to read streaming responses. - - - - - Async stream to send streaming requests. - - - - - Asynchronous access to response headers. - - - - - Gets the call status if the call has already finished. - Throws InvalidOperationException otherwise. - - - - - Gets the call trailing metadata if the call has already finished. - Throws InvalidOperationException otherwise. - - - - - Provides means to cleanup after the call. - If the call has already finished normally (request stream has been completed and response stream has been fully read), doesn't do anything. - Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call. - As a result, all resources being used by the call should be released eventually. - - - Normally, there is no need for you to dispose the call unless you want to utilize the - "Cancel" semantics of invoking Dispose. - - - - - Return type for server streaming calls. - - Response message type for this call. - - - - Creates a new AsyncDuplexStreamingCall object with the specified properties. - - Stream of response values. - Response headers of the asynchronous call. - Delegate returning the status of the call. - Delegate returning the trailing metadata of the call. - Delegate to invoke when Dispose is called on the call object. - - - - Async stream to read streaming responses. - - - - - Asynchronous access to response headers. - - - - - Gets the call status if the call has already finished. - Throws InvalidOperationException otherwise. - - - - - Gets the call trailing metadata if the call has already finished. - Throws InvalidOperationException otherwise. - - - - - Provides means to cleanup after the call. - If the call has already finished normally (response stream has been fully read), doesn't do anything. - Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call. - As a result, all resources being used by the call should be released eventually. - - - Normally, there is no need for you to dispose the call unless you want to utilize the - "Cancel" semantics of invoking Dispose. - - - - - Return type for single request - single response call. - - Response message type for this call. - - - - Creates a new AsyncUnaryCall object with the specified properties. - - The response of the asynchronous call. - Response headers of the asynchronous call. - Delegate returning the status of the call. - Delegate returning the trailing metadata of the call. - Delegate to invoke when Dispose is called on the call object. - - - - Asynchronous call result. - - - - - Asynchronous access to response headers. - - - - - Allows awaiting this object directly. - - - - - Gets the call status if the call has already finished. - Throws InvalidOperationException otherwise. - - - - - Gets the call trailing metadata if the call has already finished. - Throws InvalidOperationException otherwise. - - - - - Provides means to cleanup after the call. - If the call has already finished normally (request stream has been completed and call result has been received), doesn't do anything. - Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call. - As a result, all resources being used by the call should be released eventually. - - - Normally, there is no need for you to dispose the call unless you want to utilize the - "Cancel" semantics of invoking Dispose. - - - - - Client-side call credentials. Provide authorization with per-call granularity. - - - - - Composes multiple multiple CallCredentials objects into - a single CallCredentials object. - - credentials to compose - The new CompositeCallCredentials - - - - Creates a new instance of CallCredentials class from an - interceptor that can attach metadata to outgoing calls. - - authentication interceptor - - - - Creates native object for the credentials. - - The native credentials. - - - - Client-side credentials that delegate metadata based auth to an interceptor. - The interceptor is automatically invoked for each remote call that uses MetadataCredentials. - - - - - Initializes a new instance of MetadataCredentials class. - - authentication interceptor - - - - Credentials that allow composing multiple credentials objects into one object. - - - - - Initializes a new instance of CompositeCallCredentials class. - The resulting credentials object will be composite of all the credentials specified as parameters. - - credentials to compose - - - - Details about a client-side call to be invoked. - - Request message type for the call. - Response message type for the call. - - - - Initializes a new instance of the struct. - - Channel to use for this call. - Method to call. - Call options. - - - - Initializes a new instance of the struct. - - Channel to use for this call. - Method to call. - Host that contains the method. if null, default host will be used. - Call options. - - - - Initializes a new instance of the struct. - - Channel to use for this call. - Qualified method name. - Host that contains the method. - Request marshaller. - Response marshaller. - Call options. - - - - Get channel associated with this call. - - - - - Gets name of method to be called. - - - - - Get name of host. - - - - - Gets marshaller used to serialize requests. - - - - - Gets marshaller used to deserialized responses. - - - - - Gets the call options. - - - - - Returns new instance of with - Options set to the value provided. Values of all other fields are preserved. - - - - - Abstraction of client-side RPC invocation. - - - - - - Invokes a simple remote call in a blocking fashion. - - - - - Invokes a simple remote call asynchronously. - - - - - Invokes a server streaming call asynchronously. - In server streaming scenario, client sends on request and server responds with a stream of responses. - - - - - Invokes a client streaming call asynchronously. - In client streaming scenario, client sends a stream of requests and server responds with a single response. - - - - - Invokes a duplex streaming call asynchronously. - In duplex streaming scenario, client sends a stream of requests and server responds with a stream of responses. - The response stream is completely independent and both side can be sending messages at the same time. - - - - - Options for calls made by client. - - - - - Creates a new instance of CallOptions struct. - - Headers to be sent with the call. - Deadline for the call to finish. null means no deadline. - Can be used to request cancellation of the call. - Write options that will be used for this call. - Context propagation token obtained from . - Credentials to use for this call. - - - - Headers to send at the beginning of the call. - - - - - Call deadline. - - - - - Token that can be used for cancelling the call on the client side. - Cancelling the token will request cancellation - of the remote call. Best effort will be made to deliver the cancellation - notification to the server and interaction of the call with the server side - will be terminated. Unless the call finishes before the cancellation could - happen (there is an inherent race), - the call will finish with StatusCode.Cancelled status. - - - - - Write options that will be used for this call. - - - - - Token for propagating parent call context. - - - - - Credentials to use for this call. - - - - - If true and and channel is in ChannelState.TransientFailure, the call will attempt waiting for the channel to recover - instead of failing immediately (which is the default "FailFast" semantics). - Note: experimental API that can change or be removed without any prior notice. - - - - - Flags to use for this call. - - - - - Returns new instance of with - Headers set to the value provided. Values of all other fields are preserved. - - The headers. - - - - Returns new instance of with - Deadline set to the value provided. Values of all other fields are preserved. - - The deadline. - - - - Returns new instance of with - CancellationToken set to the value provided. Values of all other fields are preserved. - - The cancellation token. - - - - Returns new instance of with - WriteOptions set to the value provided. Values of all other fields are preserved. - - The write options. - - - - Returns new instance of with - PropagationToken set to the value provided. Values of all other fields are preserved. - - The context propagation token. - - - - Returns new instance of with - Credentials set to the value provided. Values of all other fields are preserved. - - The call credentials. - - - - Returns new instance of with "WaitForReady" semantics enabled/disabled. - . - Note: experimental API that can change or be removed without any prior notice. - - - - - Returns new instance of with - Flags set to the value provided. Values of all other fields are preserved. - - The call flags. - - - - Returns a new instance of with - all previously unset values set to their defaults and deadline and cancellation - token propagated when appropriate. - - - - - Helper methods for generated clients to make RPC calls. - Most users will use this class only indirectly and will be - making calls using client object generated from protocol - buffer definition files. - - - - - Invokes a simple remote call in a blocking fashion. - - The response. - The call defintion. - Request message. - Type of request message. - The of response message. - - - - Invokes a simple remote call asynchronously. - - An awaitable call object providing access to the response. - The call defintion. - Request message. - Type of request message. - The of response message. - - - - Invokes a server streaming call asynchronously. - In server streaming scenario, client sends on request and server responds with a stream of responses. - - A call object providing access to the asynchronous response stream. - The call defintion. - Request message. - Type of request message. - The of response messages. - - - - Invokes a client streaming call asynchronously. - In client streaming scenario, client sends a stream of requests and server responds with a single response. - - The call defintion. - An awaitable call object providing access to the response. - Type of request messages. - The of response message. - - - - Invokes a duplex streaming call asynchronously. - In duplex streaming scenario, client sends a stream of requests and server responds with a stream of responses. - The response stream is completely independent and both side can be sending messages at the same time. - - A call object providing access to the asynchronous request and response streams. - The call definition. - Type of request messages. - Type of reponse messages. - - - - Represents a gRPC channel. Channels are an abstraction of long-lived connections to remote servers. - More client objects can reuse the same channel. Creating a channel is an expensive operation compared to invoking - a remote call so in general you should reuse a single channel for as many calls as possible. - - - - - Creates a channel that connects to a specific host. - Port will default to 80 for an unsecure channel and to 443 for a secure channel. - - Target of the channel. - Credentials to secure the channel. - - - - Creates a channel that connects to a specific host. - Port will default to 80 for an unsecure channel and to 443 for a secure channel. - - Target of the channel. - Credentials to secure the channel. - Channel options. - - - - Creates a channel that connects to a specific host and port. - - The name or IP address of the host. - The port. - Credentials to secure the channel. - - - - Creates a channel that connects to a specific host and port. - - The name or IP address of the host. - The port. - Credentials to secure the channel. - Channel options. - - - - Gets current connectivity state of this channel. - After channel is has been shutdown, ChannelState.Shutdown will be returned. - - - - - Returned tasks completes once channel state has become different from - given lastObservedState. - If deadline is reached or and error occurs, returned task is cancelled. - - - - - Returned tasks completes once channel state has become different from - given lastObservedState (true is returned) or if the wait has timed out (false is returned). - - - - Resolved address of the remote endpoint in URI format. - - - The original target used to create the channel. - - - - Returns a token that gets cancelled once ShutdownAsync is invoked. - - - - - Allows explicitly requesting channel to connect without starting an RPC. - Returned task completes once state Ready was seen. If the deadline is reached, - or channel enters the Shutdown state, the task is cancelled. - There is no need to call this explicitly unless your use case requires that. - Starting an RPC on a new channel will request connection implicitly. - - The deadline. null indicates no deadline. - - - - Shuts down the channel cleanly. It is strongly recommended to shutdown - all previously created channels before exiting from the process. - - - This method doesn't wait for all calls on this channel to finish (nor does - it explicitly cancel all outstanding calls). It is user's responsibility to make sure - all the calls on this channel have finished (successfully or with an error) - before shutting down the channel to ensure channel shutdown won't impact - the outcome of those remote calls. - - - - - Client-side channel credentials. Used for creation of a secure channel. - - - - - Creates a new instance of channel credentials - - - - - Returns instance of credentials that provides no security and - will result in creating an unsecure channel with no encryption whatsoever. - - - - - Creates a new instance of ChannelCredentials class by composing - given channel credentials with call credentials. - - Channel credentials. - Call credentials. - The new composite ChannelCredentials - - - - Gets native object for the credentials, creating one if it already doesn't exist. May return null if insecure channel - should be created. Caller must not call Dispose() on the returned native credentials as their lifetime - is managed by this class (and instances of native credentials are cached). - - The native credentials. - - - - Creates a new native object for the credentials. May return null if insecure channel - should be created. For internal use only, use instead. - - The native credentials. - - - - Returns true if this credential type allows being composed by CompositeCredentials. - - - - - Client-side SSL credentials. - - - - - Creates client-side SSL credentials loaded from - disk file pointed to by the GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment variable. - If that fails, gets the roots certificates from a well known place on disk. - - - - - Creates client-side SSL credentials from - a string containing PEM encoded root certificates. - - - - - Creates client-side SSL credentials. - - string containing PEM encoded server root certificates. - a key certificate pair. - - - - PEM encoding of the server root certificates. - - - - - Client side key and certificate pair. - If null, client will not use key and certificate pair. - - - - - Credentials that allow composing one object and - one or more objects into a single . - - - - - Initializes a new instance of CompositeChannelCredentials class. - The resulting credentials object will be composite of all the credentials specified as parameters. - - channelCredentials to compose - channelCredentials to compose - - - - Channel option specified when creating a channel. - Corresponds to grpc_channel_args from grpc/grpc.h. - Commonly used channel option names are defined in ChannelOptions, - but any of the GRPC_ARG_* channel options names defined in grpc_types.h can be used. - - - - - Type of ChannelOption. - - - - - Channel option with integer value. - - - - - Channel option with string value. - - - - - Creates a channel option with a string value. - - Name. - String value. - - - - Creates a channel option with an integer value. - - Name. - Integer value. - - - - Gets the type of the ChannelOption. - - - - - Gets the name of the ChannelOption. - - - - - Gets the integer value the ChannelOption. - - - - - Gets the string value the ChannelOption. - - - - - Determines whether the specified object is equal to the current object. - - - - - Determines whether the specified object is equal to the current object. - - - - - A hash code for the current object. - - - - - Equality operator. - - - - - Inequality operator. - - - - - Defines names of most commonly used channel options. - Other supported options names can be found in grpc_types.h (GRPC_ARG_* definitions) - - - - Override SSL target check. Only to be used for testing. - - - Enable census for tracing and stats collection - - - Maximum number of concurrent incoming streams to allow on a http2 connection - - - Maximum message length that the channel can receive - - - Maximum message length that the channel can send - - - Obsolete, for backward compatibility only. - - - Initial sequence number for http2 transports - - - Default authority for calls. - - - Primary user agent: goes at the start of the user-agent metadata - - - Secondary user agent: goes at the end of the user-agent metadata - - - If non-zero, allow the use of SO_REUSEPORT for server if it's available (default 1) - - - - Creates native object for a collection of channel options. - - The native channel arguments. - - - - Connectivity state of a channel. - Based on grpc_connectivity_state from grpc/grpc.h - - - - - Channel is idle - - - - - Channel is connecting - - - - - Channel is ready for work - - - - - Channel has seen a failure but expects to recover - - - - - Channel has seen a failure that it cannot recover from - - - - - Generic base class for client-side stubs. - - - - - Initializes a new instance of ClientBase class that - throws NotImplementedException upon invocation of any RPC. - This constructor is only provided to allow creation of test doubles - for client classes (e.g. mocking requires a parameterless constructor). - - - - - Initializes a new instance of ClientBase class. - - The configuration. - - - - Initializes a new instance of ClientBase class. - - The channel to use for remote call invocation. - - - - Initializes a new instance of ClientBase class. - - The CallInvoker for remote call invocation. - - - - Creates a new client that sets host field for calls explicitly. - gRPC supports multiple "hosts" being served by a single server. - By default (if a client was not created by calling this method), - host null with the meaning "use default host" is used. - - - - - Creates a new instance of client from given ClientBaseConfiguration. - - - - - Base class for client-side stubs. - - - - - Initializes a new instance of ClientBase class that - throws NotImplementedException upon invocation of any RPC. - This constructor is only provided to allow creation of test doubles - for client classes (e.g. mocking requires a parameterless constructor). - - - - - Initializes a new instance of ClientBase class. - - The configuration. - - - - Initializes a new instance of ClientBase class. - - The channel to use for remote call invocation. - - - - Initializes a new instance of ClientBase class. - - The CallInvoker for remote call invocation. - - - - Gets the call invoker. - - - - - Gets the configuration. - - - - - Represents configuration of ClientBase. The class itself is visible to - subclasses, but contents are marked as internal to make the instances opaque. - The verbose name of this class was chosen to make name clash in generated code - less likely. - - - - - Creates a new instance of ClientBaseConfigurationInterceptor given the specified header and host interceptor function. - - - - - Compression level based on grpc_compression_level from grpc/compression.h - - - - - No compression. - - - - - Low compression. - - - - - Medium compression. - - - - - High compression. - - - - - Invokes client RPCs using . - - - - - Initializes a new instance of the class. - - Channel to use. - - - - Invokes a simple remote call in a blocking fashion. - - - - - Invokes a simple remote call asynchronously. - - - - - Invokes a server streaming call asynchronously. - In server streaming scenario, client sends on request and server responds with a stream of responses. - - - - - Invokes a client streaming call asynchronously. - In client streaming scenario, client sends a stream of requests and server responds with a single response. - - - - - Invokes a duplex streaming call asynchronously. - In duplex streaming scenario, client sends a stream of requests and server responds with a stream of responses. - The response stream is completely independent and both side can be sending messages at the same time. - - - - Creates call invocation details for given method. - - - - Encapsulates initialization and shutdown of gRPC library. - - - - - Returns a reference-counted instance of initialized gRPC environment. - Subsequent invocations return the same instance unless reference count has dropped to zero previously. - - - - - Decrements the reference count for currently active environment and asynchronously shuts down the gRPC environment if reference count drops to zero. - - - - - Requests shutdown of all channels created by the current process. - - - - - Requests immediate shutdown of all servers created by the current process. - - - - - Gets application-wide logger used by gRPC. - - The logger. - - - - Sets the application-wide logger that should be used by gRPC. - - - - - Sets the number of threads in the gRPC thread pool that polls for internal RPC events. - Can be only invoked before the GrpcEnviroment is started and cannot be changed afterwards. - Setting thread pool size is an advanced setting and you should only use it if you know what you are doing. - Most users should rely on the default value provided by gRPC library. - Note: this method is part of an experimental API that can change or be removed without any prior notice. - - - - - Sets the number of completion queues in the gRPC thread pool that polls for internal RPC events. - Can be only invoked before the GrpcEnviroment is started and cannot be changed afterwards. - Setting the number of completions queues is an advanced setting and you should only use it if you know what you are doing. - Most users should rely on the default value provided by gRPC library. - Note: this method is part of an experimental API that can change or be removed without any prior notice. - - - - - By default, gRPC's internal event handlers get offloaded to .NET default thread pool thread (inlineHandlers=false). - Setting inlineHandlers to true will allow scheduling the event handlers directly to - GrpcThreadPool internal threads. That can lead to significant performance gains in some situations, - but requires user to never block in async code (incorrectly written code can easily lead to deadlocks). - Inlining handlers is an advanced setting and you should only use it if you know what you are doing. - Most users should rely on the default value provided by gRPC library. - Note: this method is part of an experimental API that can change or be removed without any prior notice. - Note: inlineHandlers=true was the default in gRPC C# v1.4.x and earlier. - - - - - Sets the parameters for a pool that caches batch context instances. Reusing batch context instances - instead of creating a new one for every C core operation helps reducing the GC pressure. - Can be only invoked before the GrpcEnviroment is started and cannot be changed afterwards. - This is an advanced setting and you should only use it if you know what you are doing. - Most users should rely on the default value provided by gRPC library. - Note: this method is part of an experimental API that can change or be removed without any prior notice. - - - - - Sets the parameters for a pool that caches request call context instances. Reusing request call context instances - instead of creating a new one for every requested call in C core helps reducing the GC pressure. - Can be only invoked before the GrpcEnviroment is started and cannot be changed afterwards. - This is an advanced setting and you should only use it if you know what you are doing. - Most users should rely on the default value provided by gRPC library. - Note: this method is part of an experimental API that can change or be removed without any prior notice. - - - - - Occurs when GrpcEnvironment is about the start the shutdown logic. - If GrpcEnvironment is later initialized and shutdown, the event will be fired again (unless unregistered first). - - - - - Creates gRPC environment. - - - - - Gets the completion queues used by this gRPC environment. - - - - - Picks a completion queue in a round-robin fashion. - Shouldn't be invoked on a per-call basis (used at per-channel basis). - - - - - Gets the completion queue used by this gRPC environment. - - - - - Gets version of gRPC C core. - - - - - Shuts down this environment. - - - - - Handler for AppDomain.DomainUnload, AppDomain.ProcessExit and AssemblyLoadContext.Unloading hooks. - - - - - Client-side writable stream of messages with Close capability. - - The message type. - - - - Completes/closes the stream. Can only be called once there is no pending write. No writes should follow calling this. - - - - - Extends the CallInvoker class to provide the interceptor facility on the client side. - - - - - Returns a instance that intercepts - the invoker with the given interceptor. - - The underlying invoker to intercept. - The interceptor to intercept calls to the invoker with. - - Multiple interceptors can be added on top of each other by calling - "invoker.Intercept(a, b, c)". The order of invocation will be "a", "b", and then "c". - Interceptors can be later added to an existing intercepted CallInvoker, effectively - building a chain like "invoker.Intercept(c).Intercept(b).Intercept(a)". Note that - in this case, the last interceptor added will be the first to take control. - - - - - Returns a instance that intercepts - the invoker with the given interceptors. - - The channel to intercept. - - An array of interceptors to intercept the calls to the invoker with. - Control is passed to the interceptors in the order specified. - - - Multiple interceptors can be added on top of each other by calling - "invoker.Intercept(a, b, c)". The order of invocation will be "a", "b", and then "c". - Interceptors can be later added to an existing intercepted CallInvoker, effectively - building a chain like "invoker.Intercept(c).Intercept(b).Intercept(a)". Note that - in this case, the last interceptor added will be the first to take control. - - - - - Returns a instance that intercepts - the invoker with the given interceptor. - - The underlying invoker to intercept. - - An interceptor delegate that takes the request metadata to be sent with an outgoing call - and returns a instance that will replace the existing - invocation metadata. - - - Multiple interceptors can be added on top of each other by - building a chain like "invoker.Intercept(c).Intercept(b).Intercept(a)". Note that - in this case, the last interceptor added will be the first to take control. - - - - - Creates a new instance of MetadataInterceptor given the specified interceptor function. - - - - - Provides extension methods to make it easy to register interceptors on Channel objects. - - - - - Returns a instance that intercepts - the channel with the given interceptor. - - The channel to intercept. - The interceptor to intercept the channel with. - - Multiple interceptors can be added on top of each other by calling - "channel.Intercept(a, b, c)". The order of invocation will be "a", "b", and then "c". - Interceptors can be later added to an existing intercepted channel, effectively - building a chain like "channel.Intercept(c).Intercept(b).Intercept(a)". Note that - in this case, the last interceptor added will be the first to take control. - - - - - Returns a instance that intercepts - the channel with the given interceptors. - - The channel to intercept. - - An array of interceptors to intercept the channel with. - Control is passed to the interceptors in the order specified. - - - Multiple interceptors can be added on top of each other by calling - "channel.Intercept(a, b, c)". The order of invocation will be "a", "b", and then "c". - Interceptors can be later added to an existing intercepted channel, effectively - building a chain like "channel.Intercept(c).Intercept(b).Intercept(a)". Note that - in this case, the last interceptor added will be the first to take control. - - - - - Returns a instance that intercepts - the invoker with the given interceptor. - - The channel to intercept. - - An interceptor delegate that takes the request metadata to be sent with an outgoing call - and returns a instance that will replace the existing - invocation metadata. - - - Multiple interceptors can be added on top of each other by - building a chain like "channel.Intercept(c).Intercept(b).Intercept(a)". Note that - in this case, the last interceptor added will be the first to take control. - - - - - Carries along the context associated with intercepted invocations on the client side. - - - - - Creates a new instance of - with the specified method, host, and call options. - - A object representing the method to be invoked. - The host to dispatch the current call to. - A instance containing the call options of the current call. - - - - Gets the instance - representing the method to be invoked. - - - - - Gets the host that the currect invocation will be dispatched to. - - - - - Gets the structure representing the - call options associated with the current invocation. - - - - - Decorates an underlying to - intercept calls through a given interceptor. - - - - - Creates a new instance of - with the given underlying invoker and interceptor instances. - - - - - Intercepts a simple blocking call with the registered interceptor. - - - - - Intercepts a simple asynchronous call with the registered interceptor. - - - - - Intercepts an asynchronous server streaming call with the registered interceptor. - - - - - Intercepts an asynchronous client streaming call with the registered interceptor. - - - - - Intercepts an asynchronous duplex streaming call with the registered interceptor. - - - - - Serves as the base class for gRPC interceptors. - - - - - Represents a continuation for intercepting simple blocking invocations. - A delegate of this type is passed to the BlockingUnaryCall method - when an outgoing invocation is being intercepted and calling the - delegate will invoke the next interceptor in the chain, or the underlying - call invoker if called from the last interceptor. The interceptor is - allowed to call it zero, one, or multiple times, passing it the appropriate - context and request values as it sees fit. - - Request message type for this invocation. - Response message type for this invocation. - The request value to continue the invocation with. - - The - instance to pass to the next step in the invocation process. - - - The response value of the invocation to return to the caller. - The interceptor can choose to return the return value of the - continuation delegate or an arbitrary value as it sees fit. - - - - - Represents a continuation for intercepting simple asynchronous invocations. - A delegate of this type is passed to the AsyncUnaryCall method - when an outgoing invocation is being intercepted and calling the - delegate will invoke the next interceptor in the chain, or the underlying - call invoker if called from the last interceptor. The interceptor is - allowed to call it zero, one, or multiple times, passing it the appropriate - request value and context as it sees fit. - - Request message type for this invocation. - Response message type for this invocation. - The request value to continue the invocation with. - - The - instance to pass to the next step in the invocation process. - - - An instance of - representing an asynchronous invocation of a unary RPC. - The interceptor can choose to return the same object returned from - the continuation delegate or an arbitrarily constructed instance as it sees fit. - - - - - Represents a continuation for intercepting asynchronous server-streaming invocations. - A delegate of this type is passed to the AsyncServerStreamingCall method - when an outgoing invocation is being intercepted and calling the - delegate will invoke the next interceptor in the chain, or the underlying - call invoker if called from the last interceptor. The interceptor is - allowed to call it zero, one, or multiple times, passing it the appropriate - request value and context as it sees fit. - - Request message type for this invocation. - Response message type for this invocation. - The request value to continue the invocation with. - - The - instance to pass to the next step in the invocation process. - - - An instance of - representing an asynchronous invocation of a server-streaming RPC. - The interceptor can choose to return the same object returned from - the continuation delegate or an arbitrarily constructed instance as it sees fit. - - - - - Represents a continuation for intercepting asynchronous client-streaming invocations. - A delegate of this type is passed to the AsyncClientStreamingCall method - when an outgoing invocation is being intercepted and calling the - delegate will invoke the next interceptor in the chain, or the underlying - call invoker if called from the last interceptor. The interceptor is - allowed to call it zero, one, or multiple times, passing it the appropriate - request value and context as it sees fit. - - Request message type for this invocation. - Response message type for this invocation. - - The - instance to pass to the next step in the invocation process. - - - An instance of - representing an asynchronous invocation of a client-streaming RPC. - The interceptor can choose to return the same object returned from - the continuation delegate or an arbitrarily constructed instance as it sees fit. - - - - - Represents a continuation for intercepting asynchronous duplex invocations. - A delegate of this type is passed to the AsyncDuplexStreamingCall method - when an outgoing invocation is being intercepted and calling the - delegate will invoke the next interceptor in the chain, or the underlying - call invoker if called from the last interceptor. The interceptor is - allowed to call it zero, one, or multiple times, passing it the appropriate - request value and context as it sees fit. - - - The - instance to pass to the next step in the invocation process. - - - An instance of - representing an asynchronous invocation of a duplex-streaming RPC. - The interceptor can choose to return the same object returned from - the continuation delegate or an arbitrarily constructed instance as it sees fit. - - - - - Intercepts a blocking invocation of a simple remote call. - - The request message of the invocation. - - The - associated with the current invocation. - - - The callback that continues the invocation process. - This can be invoked zero or more times by the interceptor. - The interceptor can invoke the continuation passing the given - request value and context arguments, or substitute them as it sees fit. - - - The response message of the current invocation. - The interceptor can simply return the return value of the - continuation delegate passed to it intact, or an arbitrary - value as it sees fit. - - - - - Intercepts an asynchronous invocation of a simple remote call. - - The request message of the invocation. - - The - associated with the current invocation. - - - The callback that continues the invocation process. - This can be invoked zero or more times by the interceptor. - The interceptor can invoke the continuation passing the given - request value and context arguments, or substitute them as it sees fit. - - - An instance of - representing an asynchronous unary invocation. - The interceptor can simply return the return value of the - continuation delegate passed to it intact, or construct its - own substitute as it sees fit. - - - - - Intercepts an asynchronous invocation of a streaming remote call. - - The request message of the invocation. - - The - associated with the current invocation. - - - The callback that continues the invocation process. - This can be invoked zero or more times by the interceptor. - The interceptor can invoke the continuation passing the given - request value and context arguments, or substitute them as it sees fit. - - - An instance of - representing an asynchronous server-streaming invocation. - The interceptor can simply return the return value of the - continuation delegate passed to it intact, or construct its - own substitute as it sees fit. - - - - - Intercepts an asynchronous invocation of a client streaming call. - - - The - associated with the current invocation. - - - The callback that continues the invocation process. - This can be invoked zero or more times by the interceptor. - The interceptor can invoke the continuation passing the given - context argument, or substitute as it sees fit. - - - An instance of - representing an asynchronous client-streaming invocation. - The interceptor can simply return the return value of the - continuation delegate passed to it intact, or construct its - own substitute as it sees fit. - - - - - Intercepts an asynchronous invocation of a duplex streaming call. - - - The - associated with the current invocation. - - - The callback that continues the invocation process. - This can be invoked zero or more times by the interceptor. - The interceptor can invoke the continuation passing the given - context argument, or substitute as it sees fit. - - - An instance of - representing an asynchronous duplex-streaming invocation. - The interceptor can simply return the return value of the - continuation delegate passed to it intact, or construct its - own substitute as it sees fit. - - - - - Server-side handler for intercepting and incoming unary call. - - Request message type for this method. - Response message type for this method. - The request value of the incoming invocation. - - An instance of representing - the context of the invocation. - - - A delegate that asynchronously proceeds with the invocation, calling - the next interceptor in the chain, or the service request handler, - in case of the last interceptor and return the response value of - the RPC. The interceptor can choose to call it zero or more times - at its discretion. - - - A future representing the response value of the RPC. The interceptor - can simply return the return value from the continuation intact, - or an arbitrary response value as it sees fit. - - - - - Server-side handler for intercepting client streaming call. - - Request message type for this method. - Response message type for this method. - The request stream of the incoming invocation. - - An instance of representing - the context of the invocation. - - - A delegate that asynchronously proceeds with the invocation, calling - the next interceptor in the chain, or the service request handler, - in case of the last interceptor and return the response value of - the RPC. The interceptor can choose to call it zero or more times - at its discretion. - - - A future representing the response value of the RPC. The interceptor - can simply return the return value from the continuation intact, - or an arbitrary response value as it sees fit. The interceptor has - the ability to wrap or substitute the request stream when calling - the continuation. - - - - - Server-side handler for intercepting server streaming call. - - Request message type for this method. - Response message type for this method. - The request value of the incoming invocation. - The response stream of the incoming invocation. - - An instance of representing - the context of the invocation. - - - A delegate that asynchronously proceeds with the invocation, calling - the next interceptor in the chain, or the service request handler, - in case of the last interceptor and the interceptor can choose to - call it zero or more times at its discretion. The interceptor has - the ability to wrap or substitute the request value and the response stream - when calling the continuation. - - - - - Server-side handler for intercepting bidirectional streaming calls. - - Request message type for this method. - Response message type for this method. - The request stream of the incoming invocation. - The response stream of the incoming invocation. - - An instance of representing - the context of the invocation. - - - A delegate that asynchronously proceeds with the invocation, calling - the next interceptor in the chain, or the service request handler, - in case of the last interceptor and the interceptor can choose to - call it zero or more times at its discretion. The interceptor has - the ability to wrap or substitute the request and response streams - when calling the continuation. - - - - - Extends the ServerServiceDefinition class to add methods used to register interceptors on the server side. - - - - - Returns a instance that - intercepts incoming calls to the underlying service handler through the given interceptor. - - The instance to register interceptors on. - The interceptor to intercept the incoming invocations with. - - Multiple interceptors can be added on top of each other by calling - "serverServiceDefinition.Intercept(a, b, c)". The order of invocation will be "a", "b", and then "c". - Interceptors can be later added to an existing intercepted service definition, effectively - building a chain like "serverServiceDefinition.Intercept(c).Intercept(b).Intercept(a)". Note that - in this case, the last interceptor added will be the first to take control. - - - - - Returns a instance that - intercepts incoming calls to the underlying service handler through the given interceptors. - - The instance to register interceptors on. - - An array of interceptors to intercept the incoming invocations with. - Control is passed to the interceptors in the order specified. - - - Multiple interceptors can be added on top of each other by calling - "serverServiceDefinition.Intercept(a, b, c)". The order of invocation will be "a", "b", and then "c". - Interceptors can be later added to an existing intercepted service definition, effectively - building a chain like "serverServiceDefinition.Intercept(c).Intercept(b).Intercept(a)". Note that - in this case, the last interceptor added will be the first to take control. - - - - - Helper for creating ServerServiceDefinition with intercepted handlers. - - - - - Manages client side native call lifecycle. - - - - - This constructor should only be used for testing. - - - - - Blocking unary request - unary response call. - - - - - Starts a unary request - unary response call. - - - - - Starts a streamed request - unary response call. - Use StartSendMessage and StartSendCloseFromClient to stream requests. - - - - - Starts a unary request - streamed response call. - - - - - Starts a streaming request - streaming response call. - Use StartSendMessage and StartSendCloseFromClient to stream requests. - - - - - Sends a streaming request. Only one pending send action is allowed at any given time. - - - - - Receives a streaming response. Only one pending read action is allowed at any given time. - - - - - Sends halfclose, indicating client is done with streaming requests. - Only one pending send action is allowed at any given time. - - - - - Get the task that completes once if streaming response call finishes with ok status and throws RpcException with given status otherwise. - - - - - Get the task that completes once response headers are received. - - - - - Gets the resulting status if the call has already finished. - Throws InvalidOperationException otherwise. - - - - - Gets the trailing metadata if the call has already finished. - Throws InvalidOperationException otherwise. - - - - - Gets WriteFlags set in callDetails.Options.WriteOptions - - - - - Handles receive status completion for calls with streaming response. - - - - - Handler for unary response completion. - - - - - Handles receive status completion for calls with streaming response. - - - - - Base for handling both client side and server side calls. - Manages native call lifecycle and provides convenience methods. - - - - - Requests cancelling the call. - - - - - Requests cancelling the call with given status. - - - - - Initiates sending a message. Only one send operation can be active at a time. - - - - - Initiates reading a message. Only one read operation can be active at a time. - - - - - If there are no more pending actions and no new actions can be started, releases - the underlying native resources. - - - - - Returns an exception to throw for a failed send operation. - It is only allowed to call this method for a call that has already finished. - - - - - Checks if sending is allowed and possibly returns a Task that allows short-circuiting the send - logic by directly returning the write operation result task. Normally, null is returned. - - - - - Handles send completion (including SendCloseFromClient). - - - - - Handles send status from server completion. - - - - - Handles streaming read completion. - - - - - Manages server side native call lifecycle. - - - - - Only for testing purposes. - - - - - Starts a server side call. - - - - - Sends a streaming response. Only one pending send action is allowed at any given time. - - - - - Receives a streaming request. Only one pending read action is allowed at any given time. - - - - - Initiates sending a initial metadata. - Even though C-core allows sending metadata in parallel to sending messages, we will treat sending metadata as a send message operation - to make things simpler. - - - - - Sends call result status, indicating we are done with writes. - Sending a status different from StatusCode.OK will also implicitly cancel the call. - - - - - Gets cancellation token that gets cancelled once close completion - is received and the cancelled flag is set. - - - - - Handles the server side close completion. - - - - - grpc_auth_context - - - - - Copies contents of the native auth context into a new AuthContext instance. - - - - - grpc_auth_property - - - - - grpc_auth_property_iterator - - - - - grpcsharp_batch_context - - - - - grpc_call_credentials from grpc/grpc_security.h - - - - - grpc_call_error from grpc/grpc.h - - - - - Checks the call API invocation's result is OK. - - - - - Flags to enable special call behaviors (client-side only). - - - - - The call is idempotent (retrying the call doesn't change the outcome of the operation). - - - - - If channel is in ChannelState.TransientFailure, attempt waiting for the channel to recover - instead of failing the call immediately. - - - - - The call is cacheable. gRPC is free to use GET verb */ - - - - - grpc_call from grpc/grpc.h - - - - - Only for testing. - - - - - grpc_channel_args from grpc/grpc.h - - - - - grpc_channel_credentials from grpc/grpc_security.h - - - - - grpc_channel from grpc/grpc.h - - - - - Writes requests asynchronously to an underlying AsyncCall object. - - - - - Status + metadata received on client side when call finishes. - (when receive_status_on_client operation finishes). - - - - - gpr_clock_type from grpc/support/time.h - - - - - grpc_event from grpc/grpc.h - - - - - grpc_completion_type from grpc/grpc.h - - - - - grpc_completion_queue from grpc/grpc.h - - - - - Create a completion queue that can only be used for Pluck operations. - - - - - Create a completion queue that can only be used for Next operations. - - - - - Creates a new usage scope for this completion queue. Once successfully created, - the completion queue won't be shutdown before scope.Dispose() is called. - - - - - Completion registry associated with this completion queue. - Doesn't need to be set if only using Pluck() operations. - - - - - For testing purposes only. NOT threadsafe. - - - - - IntPtr doesn't implement IEquatable{IntPtr} so we need to use custom comparer to avoid boxing. - - - - - Context propagation flags from grpc/grpc.h. - - - - - Implementation of ContextPropagationToken that carries - all fields needed for context propagation by C-core based implementation of gRPC. - Instances of ContextPropagationToken that are not of this - type will be recognized as "foreign" and will be silently ignored - (treated as if null). - - - - - Default propagation mask used by C core. - - - - - Default propagation mask used by C# - we want to propagate deadline - and cancellation token by our own means, everything else will be propagated - by C core automatically (according to DefaultCoreMask). - - - - - Gets the native handle of the parent call. - - - - - Gets the parent call's deadline. - - - - - Gets the parent call's cancellation token. - - - - - Get the context propagation options. - - - - - Converts given ContextPropagationToken to ContextPropagationTokenImpl - if possible or returns null. - Being able to convert means that the context propagation token is recognized as - "ours" (was created by this implementation). - - - - - Owned char* object. - - - - - Checks the debug stats and take action for any inconsistency found. - - - - - Pool of objects that combines a shared pool and a thread local pool. - - - - - Initializes a new instance of DefaultObjectPool with given shared capacity and thread local capacity. - Thread local capacity should be significantly smaller than the shared capacity as we don't guarantee immediately - disposing the objects in the thread local pool after this pool is disposed (they will eventually be garbage collected - after the thread that owns them has finished). - On average, the shared pool will only be accessed approx. once for every threadLocalCapacity / 2 rent or lease - operations. - - - - - Leases an item from the pool or creates a new instance if the pool is empty. - Attempts to retrieve the item from the thread local pool first. - If the thread local pool is empty, the item is taken from the shared pool - along with more items that are moved to the thread local pool to avoid - prevent acquiring the lock for shared pool too often. - The methods should not be called after the pool is disposed, but it won't - results in an error to do so (after depleting the items potentially left - in the thread local pool, it will continue returning new objects created by the factory). - - - - - Returns an item to the pool. - Attempts to add the item to the thread local pool first. - If the thread local pool is full, item is added to a shared pool, - along with half of the items for the thread local pool, which - should prevent acquiring the lock for shared pool too often. - If called after the pool is disposed, we make best effort not to - add anything to the thread local pool and we guarantee not to add - anything to the shared pool (items will be disposed instead). - - - - - Overrides the content of default SSL roots. - - - - - Overrides C core's default roots with roots.pem loaded as embedded resource. - - - - - Pool of threads polling on a set of completions queues. - - - - - Creates a thread pool threads polling on a set of completions queues. - - Environment. - Pool size. - Completion queue count. - Handler inlining. - - - - Returns true if there is at least one thread pool thread that hasn't - already stopped. - Threads can either stop because all completion queues shut down or - because all foreground threads have already shutdown and process is - going to exit. - - - - - Body of the polling thread. - - - - - Abstraction of a native call object. - - - - - Pool of objects. - - - - - An object that can be pooled in IObjectPool. - - - - - - Set the action that will be invoked to return a leased object to the pool. - - - - - Exposes non-generic members of ServerReponseStream. - - - - - Asynchronously sends response headers for the current call to the client. See ServerCallContext.WriteResponseHeadersAsync for exact semantics. - - - - - Gets or sets the write options. - - - - - Useful methods for native/managed marshalling. - - - - - Converts IntPtr pointing to a UTF-8 encoded byte array to string. - - - - - Returns byte array containing UTF-8 encoding of given string. - - - - - Get string from a UTF8 encoded byte array. - - - - - grpc_metadata_array from grpc/grpc.h - - - - - Reads metadata from pointer to grpc_metadata_array - - - - - Takes care of loading C# native extension and provides access to PInvoke calls the library exports. - - - - - Gets singleton instance of this class. - The native extension is loaded when called for the first time. - - - - - Provides access to the exported native methods. - - - - - Detects which configuration of native extension to load and load it. - - - - - Loads native extension and return native methods delegates. - - - - - Return native method delegates when running on Unity platform. - Unity does not use standard NuGet packages and the native library is treated - there as a "native plugin" which is (provided it has the right metadata) - automatically made available to [DllImport] loading logic. - WARNING: Unity support is experimental and work-in-progress. Don't expect it to work. - - - - - Return native method delegates when running on the Xamarin platform. - WARNING: Xamarin support is experimental and work-in-progress. Don't expect it to work. - - - - - Logs from gRPC C core library can get lost if your application is not a console app. - This class allows redirection of logs to gRPC logger. - - - - - Redirects logs from native gRPC C core library to a general logger. - - - - - Use this attribute to mark methods that will be called back from P/Invoke calls. - iOS (and probably other AOT platforms) needs to have delegates registered. - Instead of depending on Xamarin.iOS for this, we can just create our own, - the iOS runtime just checks for the type name. - See: https://docs.microsoft.com/en-gb/xamarin/ios/internals/limitations#reverse-callbacks - - - - - Provides access to all native methods provided by NativeExtension. - An extra level of indirection is added to P/Invoke calls to allow intelligent loading - of the right configuration of the native extension based on current platform, architecture etc. - - - - - Gets singleton instance of this class. - - - - - Delegate types for all published native methods. Declared under inner class to prevent scope pollution. - - - - - grpc_csharp_ext used as a static library (e.g Unity iOS). - - - - - grpc_csharp_ext used a shared library (e.g on Unity Standalone and Android). - - - - - Utility methods for detecting platform and architecture. - - - - - true if running on Unity platform. - - - - - true if running on Unity iOS, false otherwise. - - - - - true if running on a Xamarin platform (either Xamarin.Android or Xamarin.iOS), - false otherwise. - - - - - true if running on Xamarin.iOS, false otherwise. - - - - - true if running on Xamarin.Android, false otherwise. - - - - - true if running on .NET Core (CoreCLR), false otherwise. - - - - - Returns UnityEngine.Application.platform as a string. - See https://docs.unity3d.com/ScriptReference/Application-platform.html for possible values. - Value is obtained via reflection to avoid compile-time dependency on Unity. - This method should only be called if IsUnity is true. - - - - - grpcsharp_request_call_context - - - - - Safe handle to wrap native objects. - - - - - Handler used for unimplemented method. - - - - - grpc_server_credentials from grpc/grpc_security.h - - - - - Writes responses asynchronously to an underlying AsyncCallServer object. - - - - - Details of a newly received RPC. - - - - - grpc_server from grpc/grpc.h - - - - - Maps methods from ServerServiceDefinition to server call handlers. - - - - - Helper for converting ServerServiceDefinition to server call handlers. - - - - - gpr_timespec from grpc/support/time.h - - - - - Timespec a long time in the future. - - - - - Timespec a long time in the past. - - - - - Return Timespec representing the current time. - - - - - Seconds since unix epoch. - - - - - The nanoseconds part of timeval. - - - - - Converts the timespec to desired clock type. - - - - - Converts Timespec to DateTime. - Timespec needs to be of type GPRClockType.Realtime and needs to represent a legal value. - DateTime has lower resolution (100ns), so rounding can occurs. - Value are always rounded up to the nearest DateTime value in the future. - - For Timespec.InfFuture or if timespec is after the largest representable DateTime, DateTime.MaxValue is returned. - For Timespec.InfPast or if timespec is before the lowest representable DateTime, DateTime.MinValue is returned. - - Unless DateTime.MaxValue or DateTime.MinValue is returned, the resulting DateTime is always in UTC - (DateTimeKind.Utc) - - - - - Creates DateTime to Timespec. - DateTime has to be in UTC (DateTimeKind.Utc) unless it's DateTime.MaxValue or DateTime.MinValue. - For DateTime.MaxValue of date time after the largest representable Timespec, Timespec.InfFuture is returned. - For DateTime.MinValue of date time before the lowest representable Timespec, Timespec.InfPast is returned. - - The date time. - Date time. - - - - Gets current timestamp using GPRClockType.Precise. - Only available internally because core needs to be compiled with - GRPC_TIMERS_RDTSC support for this to use RDTSC. - - - - - Call invoker that throws NotImplementedException for all requests. - - - - - Represents a dynamically loaded unmanaged library in a (partially) platform independent manner. - First, the native library is loaded using dlopen (on Unix systems) or using LoadLibrary (on Windows). - dlsym or GetProcAddress are then used to obtain symbol addresses. Marshal.GetDelegateForFunctionPointer - transforms the addresses into delegates to native methods. - See http://stackoverflow.com/questions/13461989/p-invoke-to-dynamically-loaded-library-on-mono. - - - - - Loads symbol in a platform specific way. - - - - - - - Loads library in a platform specific way. - - - - - On Linux systems, using using dlopen and dlsym results in - DllNotFoundException("libdl.so not found") if libc6-dev - is not installed. As a workaround, we load symbols for - dlopen and dlsym from the current process as on Linux - Mono sure is linked against these symbols. - - - - - Similarly as for Mono on Linux, we load symbols for - dlopen and dlsym from the "libcoreclr.so", - to avoid the dependency on libc-dev Linux. - - - - - Default implementation of ServerCallContext. - - - - - Creates a new instance of ServerCallContext. - To allow reuse of ServerCallContext API by different gRPC implementations, the implementation of some members is provided externally. - To provide state, this ServerCallContext instance and extraData will be passed to the member implementations. - - - - - Key certificate pair (in PEM encoding). - - - - - Creates a new certificate chain - private key pair. - - PEM encoded certificate chain. - PEM encoded private key. - - - - PEM encoded certificate chain. - - - - - PEM encoded private key. - - - - Logger that logs to System.Console. - - - Creates a console logger not associated to any specific type. - - - Creates a console logger that logs messsage specific for given type. - - - - Returns a logger associated with the specified type. - - - - For logging messages. - - - Returns a logger associated with the specified type. - - - Logs a message with severity Debug. - - - Logs a formatted message with severity Debug. - - - Logs a message with severity Info. - - - Logs a formatted message with severity Info. - - - Logs a message with severity Warning. - - - Logs a formatted message with severity Warning. - - - Logs a message and an associated exception with severity Warning. - - - Logs a message with severity Error. - - - Logs a formatted message with severity Error. - - - Logs a message and an associated exception with severity Error. - - - Standard logging levels. - - - - Debug severity. - - - - - Info severity. - - - - - Warning severity. - - - - - Error severity. - - - - - Logging is off. - - - - Logger that filters out messages below certain log level. - - - - Creates and instance of LogLevelFilter. - - - - - Creates and instance of LogLevelFilter. - The fromEnvironmentVariable parameter allows looking up "GRPC_VERBOSITY" setting provided by C-core - and uses the same log level for C# logs. Using this setting is recommended as it can prevent unintentionally hiding - C core logs requested by "GRPC_VERBOSITY" environment variable (which could happen if C# logger's log level was set to a more restrictive value). - - the logger to forward filtered logs to. - the default log level, unless overriden by env variable. - if true, override log level with setting from environment variable. - - - - Returns a logger associated with the specified type. - - - - Logs a message with severity Debug. - - - Logs a formatted message with severity Debug. - - - Logs a message with severity Info. - - - Logs a formatted message with severity Info. - - - Logs a message with severity Warning. - - - Logs a formatted message with severity Warning. - - - Logs a message and an associated exception with severity Warning. - - - Logs a message with severity Error. - - - Logs a formatted message with severity Error. - - - Logs a message and an associated exception with severity Error. - - - Get log level based on a default and lookup of GRPC_VERBOSITY environment variable. - - - - Logger which doesn't log any information anywhere. - - - - - As with all logging calls on this logger, this method is a no-op. - - - - - As with all logging calls on this logger, this method is a no-op. - - - - - As with all logging calls on this logger, this method is a no-op. - - - - - As with all logging calls on this logger, this method is a no-op. - - - - - As with all logging calls on this logger, this method is a no-op. - - - - - Returns a reference to the instance on which the method is called, as - instances aren't associated with specific types. - - - - - As with all logging calls on this logger, this method is a no-op. - - - - - As with all logging calls on this logger, this method is a no-op. - - - - - As with all logging calls on this logger, this method is a no-op. - - - - - As with all logging calls on this logger, this method is a no-op. - - - - - As with all logging calls on this logger, this method is a no-op. - - - - Logger that logs to an arbitrary System.IO.TextWriter. - - - - Creates a console logger not associated to any specific type and writes to given System.IO.TextWriter. - User is responsible for providing an instance of TextWriter that is thread-safe. - - - - - Creates a console logger not associated to any specific type and writes to a System.IO.TextWriter obtained from given provider. - User is responsible for providing an instance of TextWriter that is thread-safe. - - - - Creates a console logger that logs messsage specific for given type. - - - - Returns a logger associated with the specified type. - - - - Logs a message with severity Debug. - - - Logs a formatted message with severity Debug. - - - Logs a message with severity Info. - - - Logs a formatted message with severity Info. - - - Logs a message with severity Warning. - - - Logs a formatted message with severity Warning. - - - Logs a message and an associated exception with severity Warning. - - - Logs a message with severity Error. - - - Logs a formatted message with severity Error. - - - Logs a message and an associated exception with severity Error. - - - Gets the type associated with this logger. - - - - gRPC server. A single server can serve an arbitrary number of services and can listen on more than one port. - - - - - Creates a new server. - - - - - Creates a new server. - - Channel options. - - - - Services that will be exported by the server once started. Register a service with this - server by adding its definition to this collection. - - - - - Ports on which the server will listen once started. Register a port with this - server by adding its definition to this collection. - - - - - To allow awaiting termination of the server. - - - - - Experimental API. Might anytime change without prior notice. - Number or calls requested via grpc_server_request_call at any given time for each completion queue. - - - - - Starts the server. - Throws IOException if not successful. - - - - - Requests server shutdown and when there are no more calls being serviced, - cleans up used resources. The returned task finishes when shutdown procedure - is complete. - - - It is strongly recommended to shutdown all previously created servers before exiting from the process. - - - - - Requests server shutdown while cancelling all the in-progress calls. - The returned task finishes when shutdown procedure is complete. - - - It is strongly recommended to shutdown all previously created servers before exiting from the process. - - - - - Shuts down the server. - - - - - In case the environment's threadpool becomes dead, the shutdown completion will - never be delivered, but we need to release the environment's handle anyway. - - - - - Adds a service definition. - - - - - Adds a listening port. - - - - - Allows one new RPC call to be received by server. - - - - - Checks that all ports have been bound successfully. - - - - - Selects corresponding handler for given call and handles the call. - - - - - Handles the native callback. - - - - - Handles native callback. - - - - - Collection of service definitions. - - - - - Adds a service definition to the server. This is how you register - handlers for a service with the server. Only call this before Start(). - - - - - Gets enumerator for this collection. - - - - - Collection of server ports. - - - - - Adds a new port on which server should listen. - Only call this before Start(). - The port on which server will be listening. - - - - - Adds a new port on which server should listen. - The port on which server will be listening. - - the host - the port. If zero, an unused port is chosen automatically. - credentials to use to secure this port. - - - - Gets enumerator for this collection. - - - - - Server side credentials. - - - - - Returns instance of credential that provides no security and - will result in creating an unsecure server port with no encryption whatsoever. - - - - - Creates native object for the credentials. - - The native credentials. - - - - Modes of requesting client's SSL certificate by the server. - Corresponds to grpc_ssl_client_certificate_request_type. - - - - - Server does not request client certificate. - The certificate presented by the client is not checked by the server at - all. (A client may present a self signed or signed certificate or not - present a certificate at all and any of those option would be accepted) - - - - - Server requests client certificate but does not enforce that the client - presents a certificate. - If the client presents a certificate, the client authentication is left to - the application (the necessary metadata will be available to the - application via authentication context properties, see grpc_auth_context). - The client's key certificate pair must be valid for the SSL connection to - be established. - - - - - Server requests client certificate but does not enforce that the client - presents a certificate. - If the client presents a certificate, the client authentication is done by - the gRPC framework. (For a successful connection the client needs to either - present a certificate that can be verified against the root certificate - configured by the server or not present a certificate at all) - The client's key certificate pair must be valid for the SSL connection to - be established. - - - - - Server requests client certificate and enforces that the client presents a - certificate. - If the client presents a certificate, the client authentication is left to - the application (the necessary metadata will be available to the - application via authentication context properties, see grpc_auth_context). - The client's key certificate pair must be valid for the SSL connection to - be established. - - - - - Server requests client certificate and enforces that the client presents a - certificate. - The cerificate presented by the client is verified by the gRPC framework. - (For a successful connection the client needs to present a certificate that - can be verified against the root certificate configured by the server) - The client's key certificate pair must be valid for the SSL connection to - be established. - - - - - Server-side SSL credentials. - - - - - Creates server-side SSL credentials. - - Key-certificates to use. - PEM encoded client root certificates used to authenticate client. - Deprecated, use clientCertificateRequest overload instead. - - - - Creates server-side SSL credentials. - - Key-certificates to use. - PEM encoded client root certificates used to authenticate client. - Options for requesting and verifying client certificate. - - - - Creates server-side SSL credentials. - This constructor should be used if you do not wish to authenticate the client. - (client certificate won't be requested and checked by the server at all). - - Key-certificates to use. - - - - Key-certificate pairs. - - - - - PEM encoded client root certificates. - - - - - Deprecated. If true, the authenticity of client check will be enforced. - - - - - Mode of requesting certificate from client by the server. - - - - - A port exposed by a server. - - - - - Pass this value as port to have the server choose an unused listening port for you. - Ports added to a server will contain the bound port in their property. - - - - - Creates a new port on which server should listen. - - The port on which server will be listening. - the host - the port. If zero, an unused port is chosen automatically. - credentials to use to secure this port. - - - - Creates a port from an existing ServerPort instance and boundPort value. - - - - The host. - - - The port. - - - The server credentials. - - - - The port actually bound by the server. This is useful if you let server - pick port automatically. - - - - - Extension methods that simplify work with gRPC streaming calls. - - - - - Reads the entire stream and executes an async action for each element. - - - - - Reads the entire stream and creates a list containing all the elements read. - - - - - Writes all elements from given enumerable to the stream. - Completes the stream afterwards unless close = false. - - - - - Writes all elements from given enumerable to the stream. - - - - - Utility methods to run microbenchmarks. - - - - - Runs a simple benchmark preceded by warmup phase. - - - - - Utility methods for task parallel library. - - - - - Framework independent equivalent of Task.CompletedTask. - - - - - Provides info about current version of gRPC. - See https://codingforsmarties.wordpress.com/2016/01/21/how-to-version-assemblies-destined-for-nuget/ - for rationale about assembly versioning. - - - - - Current AssemblyVersion attribute of gRPC C# assemblies - - - - - Current AssemblyFileVersion of gRPC C# assemblies - - - - - Current version of gRPC C# - - - - diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/lib/net45/Grpc.Core.xml.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/lib/net45/Grpc.Core.xml.meta deleted file mode 100644 index 7caa6a471..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/lib/net45/Grpc.Core.xml.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ae507c463b7e9bd41a873710bd117c77 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes.meta deleted file mode 100644 index 26ff25e39..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 719cb7390a2334340899d033be0c9ed7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android.meta deleted file mode 100644 index 552f3cfc3..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 19085da10af75c34eb5b773541b324c7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/arm64-v8a.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/arm64-v8a.meta deleted file mode 100644 index 0167658f5..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/arm64-v8a.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fc6c36e6a88065c4ba3d152d213099f1 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/arm64-v8a/libgrpc_csharp_ext.so b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/arm64-v8a/libgrpc_csharp_ext.so deleted file mode 100644 index b3594dfff..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/arm64-v8a/libgrpc_csharp_ext.so and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/arm64-v8a/libgrpc_csharp_ext.so.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/arm64-v8a/libgrpc_csharp_ext.so.meta deleted file mode 100644 index a146d550c..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/arm64-v8a/libgrpc_csharp_ext.so.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 4b1915f388989e647a1598ca39c65b1d -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 0 - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 1 - settings: - CPU: ARM64 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/armeabi-v7a.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/armeabi-v7a.meta deleted file mode 100644 index c42533552..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/armeabi-v7a.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 03083ac0c369abb44816d6c1119818ee -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/armeabi-v7a/libgrpc_csharp_ext.so b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/armeabi-v7a/libgrpc_csharp_ext.so deleted file mode 100644 index bb80fb120..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/armeabi-v7a/libgrpc_csharp_ext.so and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/armeabi-v7a/libgrpc_csharp_ext.so.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/armeabi-v7a/libgrpc_csharp_ext.so.meta deleted file mode 100644 index a6616ec5a..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/armeabi-v7a/libgrpc_csharp_ext.so.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: e136233e2c34ebe4b94981c327eea6d6 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 0 - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 1 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/x86.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/x86.meta deleted file mode 100644 index b09468fdb..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/x86.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4cdd72fe80daa704db3ab9d526e4e21c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/x86/libgrpc_csharp_ext.so b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/x86/libgrpc_csharp_ext.so deleted file mode 100644 index 1115dd21f..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/x86/libgrpc_csharp_ext.so and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/x86/libgrpc_csharp_ext.so.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/x86/libgrpc_csharp_ext.so.meta deleted file mode 100644 index 32596dcb9..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/android/x86/libgrpc_csharp_ext.so.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 292548348aa559f479129bc725447242 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 0 - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 1 - settings: - CPU: x86 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/grpc_csharp_ext_dummy_stubs.c b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/grpc_csharp_ext_dummy_stubs.c deleted file mode 100644 index 200dd022b..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/grpc_csharp_ext_dummy_stubs.c +++ /dev/null @@ -1,404 +0,0 @@ - -// Copyright 2019 The gRPC Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// When building for Unity Android with il2cpp backend, Unity tries to link -// the __Internal PInvoke definitions (which are required by iOS) even though -// the .so/.dll will be actually used. This file provides dummy stubs to -// make il2cpp happy. -// See https://github.com/grpc/grpc/issues/16012 - -#include -#include - -void grpcsharp_init() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_shutdown() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_version_string() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_batch_context_create() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_batch_context_recv_initial_metadata() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_batch_context_recv_message_length() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_batch_context_recv_message_to_buffer() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_batch_context_recv_status_on_client_status() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_batch_context_recv_status_on_client_details() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_batch_context_recv_status_on_client_trailing_metadata() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_batch_context_recv_close_on_server_cancelled() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_batch_context_reset() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_batch_context_destroy() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_request_call_context_create() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_request_call_context_call() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_request_call_context_method() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_request_call_context_host() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_request_call_context_deadline() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_request_call_context_request_metadata() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_request_call_context_reset() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_request_call_context_destroy() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_composite_call_credentials_create() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_credentials_release() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_cancel() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_cancel_with_status() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_start_unary() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_start_client_streaming() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_start_server_streaming() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_start_duplex_streaming() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_send_message() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_send_close_from_client() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_send_status_from_server() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_recv_message() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_recv_initial_metadata() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_start_serverside() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_send_initial_metadata() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_set_credentials() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_get_peer() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_destroy() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_channel_args_create() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_channel_args_set_string() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_channel_args_set_integer() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_channel_args_destroy() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_override_default_ssl_roots() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_ssl_credentials_create() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_composite_channel_credentials_create() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_channel_credentials_release() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_insecure_channel_create() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_secure_channel_create() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_channel_create_call() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_channel_check_connectivity_state() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_channel_watch_connectivity_state() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_channel_get_target() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_channel_destroy() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_sizeof_grpc_event() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_completion_queue_create_async() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_completion_queue_create_sync() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_completion_queue_shutdown() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_completion_queue_next() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_completion_queue_pluck() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_completion_queue_destroy() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void gprsharp_free() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_metadata_array_create() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_metadata_array_add() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_metadata_array_count() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_metadata_array_get_key() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_metadata_array_get_value() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_metadata_array_destroy_full() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_redirect_log() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_metadata_credentials_create_from_plugin() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_metadata_credentials_notify_from_plugin() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_ssl_server_credentials_create() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_server_credentials_release() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_server_create() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_server_register_completion_queue() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_server_add_insecure_http2_port() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_server_add_secure_http2_port() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_server_start() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_server_request_call() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_server_cancel_all_calls() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_server_shutdown_and_notify_callback() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_server_destroy() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_call_auth_context() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_auth_context_peer_identity_property_name() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_auth_context_property_iterator() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_auth_property_iterator_next() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_auth_context_release() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void gprsharp_now() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void gprsharp_inf_future() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void gprsharp_inf_past() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void gprsharp_convert_clock_type() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void gprsharp_sizeof_timespec() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_test_callback() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_test_nop() { - fprintf(stderr, "Should never reach here"); - abort(); -} -void grpcsharp_test_override_method() { - fprintf(stderr, "Should never reach here"); - abort(); -} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/grpc_csharp_ext_dummy_stubs.c.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/grpc_csharp_ext_dummy_stubs.c.meta deleted file mode 100644 index 0519606d4..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/grpc_csharp_ext_dummy_stubs.c.meta +++ /dev/null @@ -1,95 +0,0 @@ -fileFormatVersion: 2 -guid: 21d341064c060fa43862a04ac37aa796 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 0 - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXUniversal: 1 - Exclude Win: 0 - Exclude Win64: 0 - - first: - Android: Android - second: - enabled: 1 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 1 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios.meta deleted file mode 100644 index 0e5396370..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 34b113123c549d34ba33e6becf161057 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios/libgrpc.a b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios/libgrpc.a deleted file mode 100644 index 8f90134b8..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios/libgrpc.a and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios/libgrpc.a.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios/libgrpc.a.meta deleted file mode 100644 index e0937dc83..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios/libgrpc.a.meta +++ /dev/null @@ -1,97 +0,0 @@ -fileFormatVersion: 2 -guid: 368c9eb93ebf14b45a96d9a85f6a11fe -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 0 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 1 - settings: - AddToEmbeddedBinaries: false - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios/libgrpc_csharp_ext.a b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios/libgrpc_csharp_ext.a deleted file mode 100644 index 6ea8964a3..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios/libgrpc_csharp_ext.a and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios/libgrpc_csharp_ext.a.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios/libgrpc_csharp_ext.a.meta deleted file mode 100644 index 83359daa2..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/ios/libgrpc_csharp_ext.a.meta +++ /dev/null @@ -1,117 +0,0 @@ -fileFormatVersion: 2 -guid: 1fd84527c3c9a8b489519a60578eb8ff -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXIntel: 1 - Exclude OSXIntel64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 0 - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXIntel - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: OSXIntel64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 1 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux.meta deleted file mode 100644 index a513f6039..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7e570af7dbc37e241a64522a1e149a0a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x64.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x64.meta deleted file mode 100644 index d03e08690..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x64.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 28e7ea4803dd9c849ae171aea5cdc18c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x64/libgrpc_csharp_ext.so b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x64/libgrpc_csharp_ext.so deleted file mode 100644 index b1e7d0094..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x64/libgrpc_csharp_ext.so and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x64/libgrpc_csharp_ext.so.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x64/libgrpc_csharp_ext.so.meta deleted file mode 100644 index 60ad2cf74..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x64/libgrpc_csharp_ext.so.meta +++ /dev/null @@ -1,117 +0,0 @@ -fileFormatVersion: 2 -guid: 03ed9ecb1cd4c594a818db4649654bf3 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 0 - Exclude Linux: 1 - Exclude Linux64: 0 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 1 - Exclude OSXIntel64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 0 - Exclude Win64: 0 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: Linux - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Linux64 - second: - enabled: 1 - settings: - CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 1 - settings: - CPU: x86_64 - - first: - Standalone: OSXIntel - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXIntel64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x86.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x86.meta deleted file mode 100644 index d247ed2ee..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x86.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4e89bb4e1ff292c46b57bd0f56815910 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x86/libgrpc_csharp_ext.so b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x86/libgrpc_csharp_ext.so deleted file mode 100644 index b99e4e80b..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x86/libgrpc_csharp_ext.so and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x86/libgrpc_csharp_ext.so.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x86/libgrpc_csharp_ext.so.meta deleted file mode 100644 index cefe1ee16..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/linux/x86/libgrpc_csharp_ext.so.meta +++ /dev/null @@ -1,117 +0,0 @@ -fileFormatVersion: 2 -guid: 4fa53034236b6c74f8652de3c8866f76 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 0 - Exclude Linux: 0 - Exclude Linux64: 1 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 1 - Exclude OSXIntel64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 0 - Exclude Win64: 0 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86 - DefaultValueInitialized: true - OS: Linux - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 1 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: LinuxUniversal - second: - enabled: 1 - settings: - CPU: x86 - - first: - Standalone: OSXIntel - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXIntel64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx.meta deleted file mode 100644 index 4d009de9f..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0395c85e391d96546b5607bcce9f6301 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x64.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x64.meta deleted file mode 100644 index fcea2c3c7..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x64.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bb4375411690b4442bd9f2a5563bad7a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x64/grpc_csharp_ext.bundle b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x64/grpc_csharp_ext.bundle deleted file mode 100644 index b783c90f5..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x64/grpc_csharp_ext.bundle and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x64/grpc_csharp_ext.bundle.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x64/grpc_csharp_ext.bundle.meta deleted file mode 100644 index 04873fde8..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x64/grpc_csharp_ext.bundle.meta +++ /dev/null @@ -1,117 +0,0 @@ -fileFormatVersion: 2 -guid: ff19aadd8cbe8924c96ab2720f69d96f -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 0 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXIntel: 1 - Exclude OSXIntel64: 0 - Exclude OSXUniversal: 0 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: OSX - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXIntel - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXIntel64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 1 - settings: - CPU: x86_64 - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x86.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x86.meta deleted file mode 100644 index 67be91db2..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x86.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b99c57e9974576942ac2b6cbcd1168b7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x86/grpc_csharp_ext.bundle b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x86/grpc_csharp_ext.bundle deleted file mode 100644 index 4cc955fc5..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x86/grpc_csharp_ext.bundle and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x86/grpc_csharp_ext.bundle.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x86/grpc_csharp_ext.bundle.meta deleted file mode 100644 index 34e20d9e2..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/osx/x86/grpc_csharp_ext.bundle.meta +++ /dev/null @@ -1,117 +0,0 @@ -fileFormatVersion: 2 -guid: f742c99b4f3134e4983fa90ad7d15950 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 0 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXIntel: 0 - Exclude OSXIntel64: 1 - Exclude OSXUniversal: 0 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86 - DefaultValueInitialized: true - OS: OSX - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXIntel - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: OSXIntel64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 1 - settings: - CPU: x86 - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win.meta deleted file mode 100644 index 84f6d2b1f..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1cb8ba24abfe2e34e8ac3cbfe3ca2598 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x64.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x64.meta deleted file mode 100644 index 6c7c7790b..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x64.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8b136e2c5cde8cb4e9b25ae33b1a0766 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x64/grpc_csharp_ext.dll b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x64/grpc_csharp_ext.dll deleted file mode 100644 index bad909062..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x64/grpc_csharp_ext.dll and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x64/grpc_csharp_ext.dll.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x64/grpc_csharp_ext.dll.meta deleted file mode 100644 index d5eeeced9..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x64/grpc_csharp_ext.dll.meta +++ /dev/null @@ -1,117 +0,0 @@ -fileFormatVersion: 2 -guid: bffe8c93e47c91e40b441a26e674bbf1 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 0 - Exclude Linux: 0 - Exclude Linux64: 0 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 0 - Exclude OSXIntel64: 0 - Exclude OSXUniversal: 0 - Exclude Win: 1 - Exclude Win64: 0 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: Windows - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 1 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 1 - settings: - CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: OSXIntel - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: OSXIntel64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x86.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x86.meta deleted file mode 100644 index 80da79c63..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x86.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4a0ea55e4ca1b394ca133956a8fa9958 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x86/grpc_csharp_ext.dll b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x86/grpc_csharp_ext.dll deleted file mode 100644 index 34acadb0f..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x86/grpc_csharp_ext.dll and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x86/grpc_csharp_ext.dll.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x86/grpc_csharp_ext.dll.meta deleted file mode 100644 index 139e998a3..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/Grpc.Core/runtimes/win/x86/grpc_csharp_ext.dll.meta +++ /dev/null @@ -1,117 +0,0 @@ -fileFormatVersion: 2 -guid: 852fa75b7275f344f8b9b5fa27cf134b -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 0 - Exclude Linux: 0 - Exclude Linux64: 0 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 0 - Exclude OSXIntel64: 0 - Exclude OSXUniversal: 0 - Exclude Win: 0 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86 - DefaultValueInitialized: true - OS: Windows - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Linux - second: - enabled: 1 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 1 - settings: - CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: OSXIntel - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: OSXIntel64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/System.Interactive.Async.dll b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/System.Interactive.Async.dll deleted file mode 100644 index 5a6652740..000000000 Binary files a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/System.Interactive.Async.dll and /dev/null differ diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/System.Interactive.Async.dll.meta b/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/System.Interactive.Async.dll.meta deleted file mode 100644 index 1f39ba250..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Plugins/dll/System.Interactive.Async.dll.meta +++ /dev/null @@ -1,32 +0,0 @@ -fileFormatVersion: 2 -guid: 9605e098e1d8a8542a187bcf3edb89d6 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - platformData: - - first: - Any: - second: - enabled: 1 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/ChatComponent.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/ChatComponent.cs index b7679f82f..cce2fa9ed 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/ChatComponent.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/ChatComponent.cs @@ -179,7 +179,7 @@ public async void GenerateException() await this.streamingClient.GenerateException("client exception(streaminghub)!"); } - public async void SampleMethod() + public void SampleMethod() { throw new System.NotImplementedException(); } diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/Generated/MagicOnion.Generated.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/Generated/MagicOnion.Generated.cs index 692b6f85c..ca8319ded 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/Generated/MagicOnion.Generated.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/Generated/MagicOnion.Generated.cs @@ -1,9 +1,9 @@ -#pragma warning disable 618 -#pragma warning disable 612 -#pragma warning disable 414 -#pragma warning disable 219 -#pragma warning disable 168 - +#pragma warning disable 618 +#pragma warning disable 612 +#pragma warning disable 414 +#pragma warning disable 219 +#pragma warning disable 168 + namespace MagicOnion { using global::System; @@ -16,39 +16,39 @@ public static partial class MagicOnionInitializer { static bool isRegistered = false; - [UnityEngine.RuntimeInitializeOnLoadMethod(UnityEngine.RuntimeInitializeLoadType.BeforeSceneLoad)] - public static void Register() - { - if(isRegistered) return; - isRegistered = true; - - MagicOnionClientRegistry.Register((x, y) => new ChatApp.Shared.Services.IChatServiceClient(x, y)); - - StreamingHubClientRegistry.Register((a, _, b, c, d, e) => new ChatApp.Shared.Hubs.IChatHubClient(a, b, c, d, e)); - } - } -} - -#pragma warning restore 168 -#pragma warning restore 219 -#pragma warning restore 414 -#pragma warning restore 612 -#pragma warning restore 618 -#pragma warning disable 618 -#pragma warning disable 612 -#pragma warning disable 414 -#pragma warning disable 219 -#pragma warning disable 168 - -namespace MagicOnion.Resolvers -{ - using System; - using MessagePack; - - public class MagicOnionResolver : global::MessagePack.IFormatterResolver - { - public static readonly global::MessagePack.IFormatterResolver Instance = new MagicOnionResolver(); - + [UnityEngine.RuntimeInitializeOnLoadMethod(UnityEngine.RuntimeInitializeLoadType.BeforeSceneLoad)] + public static void Register() + { + if(isRegistered) return; + isRegistered = true; + + MagicOnionClientRegistry.Register((x, y, z) => new ChatApp.Shared.Services.IChatServiceClient(x, y, z)); + + StreamingHubClientRegistry.Register((a, _, b, c, d, e) => new ChatApp.Shared.Hubs.IChatHubClient(a, b, c, d, e)); + } + } +} + +#pragma warning restore 168 +#pragma warning restore 219 +#pragma warning restore 414 +#pragma warning restore 612 +#pragma warning restore 618 +#pragma warning disable 618 +#pragma warning disable 612 +#pragma warning disable 414 +#pragma warning disable 219 +#pragma warning disable 168 + +namespace MagicOnion.Resolvers +{ + using System; + using MessagePack; + + public class MagicOnionResolver : global::MessagePack.IFormatterResolver + { + public static readonly global::MessagePack.IFormatterResolver Instance = new MagicOnionResolver(); + MagicOnionResolver() { @@ -74,17 +74,17 @@ static FormatterCache() } } - internal static class MagicOnionResolverGetFormatterHelper - { - static readonly global::System.Collections.Generic.Dictionary lookup; - - static MagicOnionResolverGetFormatterHelper() - { - lookup = new global::System.Collections.Generic.Dictionary(3) - { - {typeof(global::MagicOnion.DynamicArgumentTuple, global::System.Collections.Generic.Dictionary>), 0 }, - {typeof(global::System.Collections.Generic.Dictionary), 1 }, - {typeof(global::System.Collections.Generic.List), 2 }, + internal static class MagicOnionResolverGetFormatterHelper + { + static readonly global::System.Collections.Generic.Dictionary lookup; + + static MagicOnionResolverGetFormatterHelper() + { + lookup = new global::System.Collections.Generic.Dictionary(3) + { + {typeof(global::MagicOnion.DynamicArgumentTuple, global::System.Collections.Generic.Dictionary>), 0 }, + {typeof(global::System.Collections.Generic.Dictionary), 1 }, + {typeof(global::System.Collections.Generic.List), 2 }, }; } @@ -98,162 +98,174 @@ internal static object GetFormatter(Type t) switch (key) { - case 0: return new global::MagicOnion.DynamicArgumentTupleFormatter, global::System.Collections.Generic.Dictionary>(default(global::System.Collections.Generic.List), default(global::System.Collections.Generic.Dictionary)); - case 1: return new global::MessagePack.Formatters.DictionaryFormatter(); - case 2: return new global::MessagePack.Formatters.ListFormatter(); - default: return null; - } - } - } -} - -#pragma warning restore 168 -#pragma warning restore 219 -#pragma warning restore 414 -#pragma warning restore 612 -#pragma warning restore 618 -#pragma warning disable 618 -#pragma warning disable 612 -#pragma warning disable 414 -#pragma warning disable 219 -#pragma warning disable 168 - -namespace ChatApp.Shared.Services { - using MagicOnion; - using MagicOnion.Client; - using Grpc.Core; - using MessagePack; - - public class IChatServiceClient : MagicOnionClientBase, global::ChatApp.Shared.Services.IChatService - { - static readonly Method GenerateExceptionMethod; - static readonly Method SendReportAsyncMethod; - - static IChatServiceClient() - { - GenerateExceptionMethod = new Method(MethodType.Unary, "IChatService", "GenerateException", MagicOnionMarshallers.ThroughMarshaller, MagicOnionMarshallers.ThroughMarshaller); - SendReportAsyncMethod = new Method(MethodType.Unary, "IChatService", "SendReportAsync", MagicOnionMarshallers.ThroughMarshaller, MagicOnionMarshallers.ThroughMarshaller); - } - - IChatServiceClient() - { - } - - public IChatServiceClient(CallInvoker callInvoker, IFormatterResolver resolver) - : base(callInvoker, resolver) - { - } - - protected override MagicOnionClientBase Clone() - { + case 0: return new global::MagicOnion.DynamicArgumentTupleFormatter, global::System.Collections.Generic.Dictionary>(default(global::System.Collections.Generic.List), default(global::System.Collections.Generic.Dictionary)); + case 1: return new global::MessagePack.Formatters.DictionaryFormatter(); + case 2: return new global::MessagePack.Formatters.ListFormatter(); + default: return null; + } + } + } +} + +#pragma warning restore 168 +#pragma warning restore 219 +#pragma warning restore 414 +#pragma warning restore 612 +#pragma warning restore 618 +#pragma warning disable 618 +#pragma warning disable 612 +#pragma warning disable 414 +#pragma warning disable 219 +#pragma warning disable 168 + +namespace ChatApp.Shared.Services { + using System; + using MagicOnion; + using MagicOnion.Client; + using Grpc.Core; + using MessagePack; + + public class IChatServiceClient : MagicOnionClientBase, global::ChatApp.Shared.Services.IChatService + { + static readonly Method GenerateExceptionMethod; + static readonly Func GenerateExceptionDelegate; + static readonly Method SendReportAsyncMethod; + static readonly Func SendReportAsyncDelegate; + + static IChatServiceClient() + { + GenerateExceptionMethod = new Method(MethodType.Unary, "IChatService", "GenerateException", MagicOnionMarshallers.ThroughMarshaller, MagicOnionMarshallers.ThroughMarshaller); + GenerateExceptionDelegate = _GenerateException; + SendReportAsyncMethod = new Method(MethodType.Unary, "IChatService", "SendReportAsync", MagicOnionMarshallers.ThroughMarshaller, MagicOnionMarshallers.ThroughMarshaller); + SendReportAsyncDelegate = _SendReportAsync; + } + + IChatServiceClient() + { + } + + public IChatServiceClient(CallInvoker callInvoker, IFormatterResolver resolver, IClientFilter[] filters) + : base(callInvoker, resolver, filters) + { + } + + protected override MagicOnionClientBase Clone() + { var clone = new IChatServiceClient(); clone.host = this.host; clone.option = this.option; clone.callInvoker = this.callInvoker; clone.resolver = this.resolver; + clone.filters = filters; return clone; } - public new IChatService WithHeaders(Metadata headers) - { - return base.WithHeaders(headers); - } - - public new IChatService WithCancellationToken(System.Threading.CancellationToken cancellationToken) - { - return base.WithCancellationToken(cancellationToken); - } - - public new IChatService WithDeadline(System.DateTime deadline) - { - return base.WithDeadline(deadline); - } - - public new IChatService WithHost(string host) - { - return base.WithHost(host); - } - - public new IChatService WithOptions(CallOptions option) - { - return base.WithOptions(option); - } - - public global::MagicOnion.UnaryResult GenerateException(string message) - { - var __request = LZ4MessagePackSerializer.Serialize(message, base.resolver); - var __callResult = callInvoker.AsyncUnaryCall(GenerateExceptionMethod, base.host, base.option, __request); - return new UnaryResult(__callResult, base.resolver); - } - public global::MagicOnion.UnaryResult SendReportAsync(string message) - { - var __request = LZ4MessagePackSerializer.Serialize(message, base.resolver); - var __callResult = callInvoker.AsyncUnaryCall(SendReportAsyncMethod, base.host, base.option, __request); - return new UnaryResult(__callResult, base.resolver); - } - } -} - -#pragma warning restore 168 -#pragma warning restore 219 -#pragma warning restore 414 -#pragma warning restore 618 -#pragma warning restore 612 -#pragma warning disable 618 -#pragma warning disable 612 -#pragma warning disable 414 -#pragma warning disable 219 -#pragma warning disable 168 - -namespace ChatApp.Shared.Hubs { - using Grpc.Core; - using Grpc.Core.Logging; - using MagicOnion; - using MagicOnion.Client; - using MessagePack; - using System; - using System.Threading.Tasks; - - public class IChatHubClient : StreamingHubClientBase, global::ChatApp.Shared.Hubs.IChatHub - { - static readonly Method method = new Method(MethodType.DuplexStreaming, "IChatHub", "Connect", MagicOnionMarshallers.ThroughMarshaller, MagicOnionMarshallers.ThroughMarshaller); - - protected override Method DuplexStreamingAsyncMethod { get { return method; } } - - readonly global::ChatApp.Shared.Hubs.IChatHub __fireAndForgetClient; - + public new IChatService WithHeaders(Metadata headers) + { + return base.WithHeaders(headers); + } + + public new IChatService WithCancellationToken(System.Threading.CancellationToken cancellationToken) + { + return base.WithCancellationToken(cancellationToken); + } + + public new IChatService WithDeadline(System.DateTime deadline) + { + return base.WithDeadline(deadline); + } + + public new IChatService WithHost(string host) + { + return base.WithHost(host); + } + + public new IChatService WithOptions(CallOptions option) + { + return base.WithOptions(option); + } + + static ResponseContext _GenerateException(RequestContext __context) + { + return CreateResponseContext(__context, GenerateExceptionMethod); + } + + public global::MagicOnion.UnaryResult GenerateException(string message) + { + return InvokeAsync("IChatService/GenerateException", message, GenerateExceptionDelegate); + } + static ResponseContext _SendReportAsync(RequestContext __context) + { + return CreateResponseContext(__context, SendReportAsyncMethod); + } + + public global::MagicOnion.UnaryResult SendReportAsync(string message) + { + return InvokeAsync("IChatService/SendReportAsync", message, SendReportAsyncDelegate); + } + } +} + +#pragma warning restore 168 +#pragma warning restore 219 +#pragma warning restore 414 +#pragma warning restore 612 +#pragma warning restore 618 +#pragma warning disable 618 +#pragma warning disable 612 +#pragma warning disable 414 +#pragma warning disable 219 +#pragma warning disable 168 + +namespace ChatApp.Shared.Hubs { + using Grpc.Core; + using Grpc.Core.Logging; + using MagicOnion; + using MagicOnion.Client; + using MessagePack; + using System; + using System.Threading.Tasks; + + public class IChatHubClient : StreamingHubClientBase, global::ChatApp.Shared.Hubs.IChatHub + { + static readonly Method method = new Method(MethodType.DuplexStreaming, "IChatHub", "Connect", MagicOnionMarshallers.ThroughMarshaller, MagicOnionMarshallers.ThroughMarshaller); + + protected override Method DuplexStreamingAsyncMethod { get { return method; } } + + readonly global::ChatApp.Shared.Hubs.IChatHub __fireAndForgetClient; + public IChatHubClient(CallInvoker callInvoker, string host, CallOptions option, IFormatterResolver resolver, ILogger logger) : base(callInvoker, host, option, resolver, logger) { this.__fireAndForgetClient = new FireAndForgetClient(this); } - public global::ChatApp.Shared.Hubs.IChatHub FireAndForget() - { - return __fireAndForgetClient; - } - - protected override Task OnBroadcastEvent(int methodId, ArraySegment data) - { - switch (methodId) - { - case -1297457280: // OnJoin - { - var result = LZ4MessagePackSerializer.Deserialize(data, resolver); - receiver.OnJoin(result); return Task.CompletedTask; - } - case 532410095: // OnLeave - { - var result = LZ4MessagePackSerializer.Deserialize(data, resolver); - receiver.OnLeave(result); return Task.CompletedTask; - } - case -552695459: // OnSendMessage - { - var result = LZ4MessagePackSerializer.Deserialize(data, resolver); - receiver.OnSendMessage(result); return Task.CompletedTask; - } + public global::ChatApp.Shared.Hubs.IChatHub FireAndForget() + { + return __fireAndForgetClient; + } + + protected override void OnBroadcastEvent(int methodId, ArraySegment data) + { + switch (methodId) + { + case -1297457280: // OnJoin + { + var result = LZ4MessagePackSerializer.Deserialize(data, resolver); + receiver.OnJoin(result); break; + } + case 532410095: // OnLeave + { + var result = LZ4MessagePackSerializer.Deserialize(data, resolver); + receiver.OnLeave(result); break; + } + case -552695459: // OnSendMessage + { + var result = LZ4MessagePackSerializer.Deserialize(data, resolver); + receiver.OnSendMessage(result); break; + } default: - return Task.CompletedTask; + break; } } @@ -261,76 +273,76 @@ protected override void OnResponseEvent(int methodId, object taskCompletionSourc { switch (methodId) { - case -733403293: // JoinAsync - { - var result = LZ4MessagePackSerializer.Deserialize(data, resolver); - ((TaskCompletionSource)taskCompletionSource).TrySetResult(result); - break; - } - case 1368362116: // LeaveAsync - { - var result = LZ4MessagePackSerializer.Deserialize(data, resolver); - ((TaskCompletionSource)taskCompletionSource).TrySetResult(result); - break; - } - case -601690414: // SendMessageAsync - { - var result = LZ4MessagePackSerializer.Deserialize(data, resolver); - ((TaskCompletionSource)taskCompletionSource).TrySetResult(result); - break; - } - case 517938971: // GenerateException - { - var result = LZ4MessagePackSerializer.Deserialize(data, resolver); - ((TaskCompletionSource)taskCompletionSource).TrySetResult(result); - break; - } - case -852153394: // SampleMethod - { - var result = LZ4MessagePackSerializer.Deserialize(data, resolver); - ((TaskCompletionSource)taskCompletionSource).TrySetResult(result); - break; - } - default: - break; - } - } - - public global::System.Threading.Tasks.Task JoinAsync(global::ChatApp.Shared.MessagePackObjects.JoinRequest request) - { - return WriteMessageWithResponseAsync(-733403293, request); - } - - public global::System.Threading.Tasks.Task LeaveAsync() - { - return WriteMessageWithResponseAsync(1368362116, Nil.Default); - } - - public global::System.Threading.Tasks.Task SendMessageAsync(string message) - { - return WriteMessageWithResponseAsync(-601690414, message); - } - - public global::System.Threading.Tasks.Task GenerateException(string message) - { - return WriteMessageWithResponseAsync(517938971, message); - } - - public global::System.Threading.Tasks.Task SampleMethod(global::System.Collections.Generic.List sampleList, global::System.Collections.Generic.Dictionary sampleDictionary) - { - return WriteMessageWithResponseAsync, global::System.Collections.Generic.Dictionary>, Nil>(-852153394, new DynamicArgumentTuple, global::System.Collections.Generic.Dictionary>(sampleList, sampleDictionary)); - } - - - class FireAndForgetClient : global::ChatApp.Shared.Hubs.IChatHub - { - readonly IChatHubClient __parent; - - public FireAndForgetClient(IChatHubClient parentClient) - { - this.__parent = parentClient; - } - + case -733403293: // JoinAsync + { + var result = LZ4MessagePackSerializer.Deserialize(data, resolver); + ((TaskCompletionSource)taskCompletionSource).TrySetResult(result); + break; + } + case 1368362116: // LeaveAsync + { + var result = LZ4MessagePackSerializer.Deserialize(data, resolver); + ((TaskCompletionSource)taskCompletionSource).TrySetResult(result); + break; + } + case -601690414: // SendMessageAsync + { + var result = LZ4MessagePackSerializer.Deserialize(data, resolver); + ((TaskCompletionSource)taskCompletionSource).TrySetResult(result); + break; + } + case 517938971: // GenerateException + { + var result = LZ4MessagePackSerializer.Deserialize(data, resolver); + ((TaskCompletionSource)taskCompletionSource).TrySetResult(result); + break; + } + case -852153394: // SampleMethod + { + var result = LZ4MessagePackSerializer.Deserialize(data, resolver); + ((TaskCompletionSource)taskCompletionSource).TrySetResult(result); + break; + } + default: + break; + } + } + + public global::System.Threading.Tasks.Task JoinAsync(global::ChatApp.Shared.MessagePackObjects.JoinRequest request) + { + return WriteMessageWithResponseAsync(-733403293, request); + } + + public global::System.Threading.Tasks.Task LeaveAsync() + { + return WriteMessageWithResponseAsync(1368362116, Nil.Default); + } + + public global::System.Threading.Tasks.Task SendMessageAsync(string message) + { + return WriteMessageWithResponseAsync(-601690414, message); + } + + public global::System.Threading.Tasks.Task GenerateException(string message) + { + return WriteMessageWithResponseAsync(517938971, message); + } + + public global::System.Threading.Tasks.Task SampleMethod(global::System.Collections.Generic.List sampleList, global::System.Collections.Generic.Dictionary sampleDictionary) + { + return WriteMessageWithResponseAsync, global::System.Collections.Generic.Dictionary>, Nil>(-852153394, new DynamicArgumentTuple, global::System.Collections.Generic.Dictionary>(sampleList, sampleDictionary)); + } + + + class FireAndForgetClient : global::ChatApp.Shared.Hubs.IChatHub + { + readonly IChatHubClient __parent; + + public FireAndForgetClient(IChatHubClient parentClient) + { + this.__parent = parentClient; + } + public global::ChatApp.Shared.Hubs.IChatHub FireAndForget() { throw new NotSupportedException(); @@ -346,37 +358,37 @@ public Task WaitForDisconnect() throw new NotSupportedException(); } - public global::System.Threading.Tasks.Task JoinAsync(global::ChatApp.Shared.MessagePackObjects.JoinRequest request) - { - return __parent.WriteMessageAsync(-733403293, request); - } - - public global::System.Threading.Tasks.Task LeaveAsync() - { - return __parent.WriteMessageAsync(1368362116, Nil.Default); - } - - public global::System.Threading.Tasks.Task SendMessageAsync(string message) - { - return __parent.WriteMessageAsync(-601690414, message); - } - - public global::System.Threading.Tasks.Task GenerateException(string message) - { - return __parent.WriteMessageAsync(517938971, message); - } - - public global::System.Threading.Tasks.Task SampleMethod(global::System.Collections.Generic.List sampleList, global::System.Collections.Generic.Dictionary sampleDictionary) - { - return __parent.WriteMessageAsync, global::System.Collections.Generic.Dictionary>>(-852153394, new DynamicArgumentTuple, global::System.Collections.Generic.Dictionary>(sampleList, sampleDictionary)); - } - - } - } -} - -#pragma warning restore 168 -#pragma warning restore 219 -#pragma warning restore 414 -#pragma warning restore 618 -#pragma warning restore 612 + public global::System.Threading.Tasks.Task JoinAsync(global::ChatApp.Shared.MessagePackObjects.JoinRequest request) + { + return __parent.WriteMessageAsync(-733403293, request); + } + + public global::System.Threading.Tasks.Task LeaveAsync() + { + return __parent.WriteMessageAsync(1368362116, Nil.Default); + } + + public global::System.Threading.Tasks.Task SendMessageAsync(string message) + { + return __parent.WriteMessageAsync(-601690414, message); + } + + public global::System.Threading.Tasks.Task GenerateException(string message) + { + return __parent.WriteMessageAsync(517938971, message); + } + + public global::System.Threading.Tasks.Task SampleMethod(global::System.Collections.Generic.List sampleList, global::System.Collections.Generic.Dictionary sampleDictionary) + { + return __parent.WriteMessageAsync, global::System.Collections.Generic.Dictionary>>(-852153394, new DynamicArgumentTuple, global::System.Collections.Generic.Dictionary>(sampleList, sampleDictionary)); + } + + } + } +} + +#pragma warning restore 168 +#pragma warning restore 219 +#pragma warning restore 414 +#pragma warning restore 618 +#pragma warning restore 612 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/Generated/MessagePack.Generated.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/Generated/MessagePack.Generated.cs index a56999270..2e626ec35 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/Generated/MessagePack.Generated.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/Generated/MessagePack.Generated.cs @@ -1,202 +1,202 @@ -#pragma warning disable 618 -#pragma warning disable 612 -#pragma warning disable 414 -#pragma warning disable 168 - -namespace MessagePack.Resolvers -{ - using System; - using MessagePack; - - public class GeneratedResolver : global::MessagePack.IFormatterResolver - { - public static readonly global::MessagePack.IFormatterResolver Instance = new GeneratedResolver(); - - GeneratedResolver() - { - - } - - public global::MessagePack.Formatters.IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly global::MessagePack.Formatters.IMessagePackFormatter formatter; - - static FormatterCache() - { - var f = GeneratedResolverGetFormatterHelper.GetFormatter(typeof(T)); - if (f != null) - { - formatter = (global::MessagePack.Formatters.IMessagePackFormatter)f; - } - } - } - } - - internal static class GeneratedResolverGetFormatterHelper - { - static readonly global::System.Collections.Generic.Dictionary lookup; - - static GeneratedResolverGetFormatterHelper() - { - lookup = new global::System.Collections.Generic.Dictionary(2) - { - {typeof(global::ChatApp.Shared.MessagePackObjects.JoinRequest), 0 }, - {typeof(global::ChatApp.Shared.MessagePackObjects.MessageResponse), 1 }, - }; - } - - internal static object GetFormatter(Type t) - { - int key; - if (!lookup.TryGetValue(t, out key)) return null; - - switch (key) - { - case 0: return new MessagePack.Formatters.ChatApp.Shared.MessagePackObjects.JoinRequestFormatter(); - case 1: return new MessagePack.Formatters.ChatApp.Shared.MessagePackObjects.MessageResponseFormatter(); - default: return null; - } - } - } -} - -#pragma warning restore 168 -#pragma warning restore 414 -#pragma warning restore 618 -#pragma warning restore 612 - - - -#pragma warning disable 618 -#pragma warning disable 612 -#pragma warning disable 414 -#pragma warning disable 168 - -namespace MessagePack.Formatters.ChatApp.Shared.MessagePackObjects -{ - using System; - using MessagePack; - - - public sealed class JoinRequestFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::ChatApp.Shared.MessagePackObjects.JoinRequest value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.RoomName, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.UserName, formatterResolver); - return offset - startOffset; - } - - public global::ChatApp.Shared.MessagePackObjects.JoinRequest Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __RoomName__ = default(string); - var __UserName__ = default(string); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __RoomName__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - case 1: - __UserName__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::ChatApp.Shared.MessagePackObjects.JoinRequest(); - ____result.RoomName = __RoomName__; - ____result.UserName = __UserName__; - return ____result; - } - } - - - public sealed class MessageResponseFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::ChatApp.Shared.MessagePackObjects.MessageResponse value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.UserName, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Message, formatterResolver); - return offset - startOffset; - } - - public global::ChatApp.Shared.MessagePackObjects.MessageResponse Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __UserName__ = default(string); - var __Message__ = default(string); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __UserName__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - case 1: - __Message__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::ChatApp.Shared.MessagePackObjects.MessageResponse(); - ____result.UserName = __UserName__; - ____result.Message = __Message__; - return ____result; - } - } - -} - -#pragma warning restore 168 -#pragma warning restore 414 -#pragma warning restore 618 -#pragma warning restore 612 +#pragma warning disable 618 +#pragma warning disable 612 +#pragma warning disable 414 +#pragma warning disable 168 + +namespace MessagePack.Resolvers +{ + using System; + using MessagePack; + + public class GeneratedResolver : global::MessagePack.IFormatterResolver + { + public static readonly global::MessagePack.IFormatterResolver Instance = new GeneratedResolver(); + + GeneratedResolver() + { + + } + + public global::MessagePack.Formatters.IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly global::MessagePack.Formatters.IMessagePackFormatter formatter; + + static FormatterCache() + { + var f = GeneratedResolverGetFormatterHelper.GetFormatter(typeof(T)); + if (f != null) + { + formatter = (global::MessagePack.Formatters.IMessagePackFormatter)f; + } + } + } + } + + internal static class GeneratedResolverGetFormatterHelper + { + static readonly global::System.Collections.Generic.Dictionary lookup; + + static GeneratedResolverGetFormatterHelper() + { + lookup = new global::System.Collections.Generic.Dictionary(2) + { + {typeof(global::ChatApp.Shared.MessagePackObjects.JoinRequest), 0 }, + {typeof(global::ChatApp.Shared.MessagePackObjects.MessageResponse), 1 }, + }; + } + + internal static object GetFormatter(Type t) + { + int key; + if (!lookup.TryGetValue(t, out key)) return null; + + switch (key) + { + case 0: return new MessagePack.Formatters.ChatApp.Shared.MessagePackObjects.JoinRequestFormatter(); + case 1: return new MessagePack.Formatters.ChatApp.Shared.MessagePackObjects.MessageResponseFormatter(); + default: return null; + } + } + } +} + +#pragma warning restore 168 +#pragma warning restore 414 +#pragma warning restore 618 +#pragma warning restore 612 + + + +#pragma warning disable 618 +#pragma warning disable 612 +#pragma warning disable 414 +#pragma warning disable 168 + +namespace MessagePack.Formatters.ChatApp.Shared.MessagePackObjects +{ + using System; + using MessagePack; + + + public sealed class JoinRequestFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::ChatApp.Shared.MessagePackObjects.JoinRequest value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.RoomName, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.UserName, formatterResolver); + return offset - startOffset; + } + + public global::ChatApp.Shared.MessagePackObjects.JoinRequest Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __RoomName__ = default(string); + var __UserName__ = default(string); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __RoomName__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + case 1: + __UserName__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::ChatApp.Shared.MessagePackObjects.JoinRequest(); + ____result.RoomName = __RoomName__; + ____result.UserName = __UserName__; + return ____result; + } + } + + + public sealed class MessageResponseFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::ChatApp.Shared.MessagePackObjects.MessageResponse value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.UserName, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Message, formatterResolver); + return offset - startOffset; + } + + public global::ChatApp.Shared.MessagePackObjects.MessageResponse Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __UserName__ = default(string); + var __Message__ = default(string); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __UserName__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + case 1: + __Message__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::ChatApp.Shared.MessagePackObjects.MessageResponse(); + ____result.UserName = __UserName__; + ____result.Message = __Message__; + return ____result; + } + } + +} + +#pragma warning restore 168 +#pragma warning restore 414 +#pragma warning restore 618 +#pragma warning restore 612 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/AsyncStreamReaderExtensions.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/AsyncStreamReaderExtensions.cs index 654f6aa0d..b5e519973 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/AsyncStreamReaderExtensions.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/AsyncStreamReaderExtensions.cs @@ -12,9 +12,9 @@ public static class AsyncStreamReaderExtensions { public static async Task ForEachAsync(this IAsyncStreamReader stream, Action action, CancellationToken cancellation = default(CancellationToken)) { - using (stream) + using (stream as IDisposable) { - while (!cancellation.IsCancellationRequested && await stream.MoveNext()) + while (!cancellation.IsCancellationRequested && await stream.MoveNext(cancellation)) { action(stream.Current); } @@ -23,33 +23,13 @@ public static class AsyncStreamReaderExtensions public static async Task ForEachAsync(this IAsyncStreamReader stream, Func asyncAction, CancellationToken cancellation = default(CancellationToken)) { - using (stream) + using (stream as IDisposable) { - while (!cancellation.IsCancellationRequested && await stream.MoveNext()) + while (!cancellation.IsCancellationRequested && await stream.MoveNext(cancellation)) { await asyncAction(stream.Current); } } } - - public static IAsyncEnumerable AsAsyncEnumerable(this IAsyncStreamReader stream) - { - return new EnumerableAsyncStreamReader(stream); - } - - class EnumerableAsyncStreamReader : IAsyncEnumerable - { - readonly IAsyncStreamReader stream; - - public EnumerableAsyncStreamReader(IAsyncStreamReader stream) - { - this.stream = stream; - } - - public IAsyncEnumerator GetEnumerator() - { - return this.stream; - } - } } } diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/ClientFilter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/ClientFilter.cs new file mode 100644 index 000000000..76d0bfd5e --- /dev/null +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/ClientFilter.cs @@ -0,0 +1,213 @@ +using Grpc.Core; +using MessagePack; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace MagicOnion.Client +{ + public interface IClientFilter + { + ValueTask SendAsync(RequestContext context, Func> next); + } + + public abstract class RequestContext + { + static readonly Func DefaultMutator = xs => xs; + + public string MethodPath { get; } + public CallOptions CallOptions { get; } + public Type ResponseType { get; } + public abstract Type RequestType { get; } + public Func RequestMutator { get; private set; } + public Func ResponseMutator { get; private set; } + + Dictionary items; + public IDictionary Items + { + get + { + if (items == null) + { + items = new Dictionary(); + } + return items; + } + } + + // internal use to avoid lambda capture. + internal MagicOnionClientBase Client { get; } + internal IClientFilter[] Filters { get; } + internal Func RequestMethod { get; } + + internal RequestContext(MagicOnionClientBase client, string methodPath, CallOptions callOptions, Type responseType, IClientFilter[] filters, Func requestMethod) + { + this.Client = client; + this.MethodPath = methodPath; + this.CallOptions = callOptions; + this.ResponseType = responseType; + this.Filters = filters; + this.RequestMethod = requestMethod; + this.RequestMutator = DefaultMutator; + this.ResponseMutator = DefaultMutator; + } + + public void SetRequestMutator(Func mutator) + { + this.RequestMutator = mutator; + } + + public void SetResponseMutator(Func mutator) + { + this.ResponseMutator = mutator; + } + } + + public class RequestContext : RequestContext + { + public T Request { get; } + public override Type RequestType => typeof(T); + + public RequestContext(T request, MagicOnionClientBase client, string methodPath, CallOptions callOptions, Type responseType, IClientFilter[] filters, Func requestMethod) + : base(client, methodPath, callOptions, responseType, filters, requestMethod) + { + this.Request = request; + } + } + + public abstract class ResponseContext : IDisposable + { + static readonly Func DefaultMutator = xs => xs; + + public abstract Task ResponseHeadersAsync { get; } + public abstract Status GetStatus(); + public abstract Metadata GetTrailers(); + public abstract void Dispose(); + public abstract Type ResponseType { get; } + public Func ResponseMutator { get; private set; } + + public abstract Task WaitResponseAsync(); + + public ResponseContext As() + { + return this as ResponseContext; + } + + public Task GetResponseAs() + { + var t = this as ResponseContext; + if (t == null) return Task.FromResult(default(T)); + + return t.ResponseAsync; + } + + public ResponseContext() + { + this.ResponseMutator = DefaultMutator; + } + + public void SetResponseMutator(Func mutator) + { + this.ResponseMutator = mutator; + } + } + + public sealed class ResponseContext : ResponseContext + { + readonly AsyncUnaryCall inner; + readonly IFormatterResolver resolver; + readonly bool isMock; + bool deserialized; + + T responseObject; // cache value. + + // mock + readonly Metadata trailers; + readonly Metadata responseHeaders; + readonly Status status; + + public ResponseContext(AsyncUnaryCall inner, IFormatterResolver resolver) + : base() + { + this.isMock = false; + this.inner = inner; + this.resolver = resolver; + } + + public ResponseContext(T responseObject) + : this(responseObject, new Metadata(), new Metadata(), Status.DefaultSuccess) + { + } + + public ResponseContext(T responseObject, Metadata trailers, Metadata responseHeaders, Status status) + : base() + { + this.isMock = true; + this.responseObject = responseObject; + this.trailers = trailers; + this.responseHeaders = responseHeaders; + this.status = status; + } + + async Task Deserialize() + { + if (deserialized) + { + return responseObject; + } + else + { + var bytes = await inner.ResponseAsync.ConfigureAwait(false); + responseObject = LZ4MessagePackSerializer.Deserialize(this.ResponseMutator(bytes), resolver); + deserialized = true; + return responseObject; + } + } + + public Task ResponseAsync => !isMock ? Deserialize() : Task.FromResult(responseObject); + + public override async Task WaitResponseAsync() + { + await ResponseAsync; + return this; + } + + public override Type ResponseType => typeof(T); + + public override Task ResponseHeadersAsync => !isMock ? inner.ResponseHeadersAsync : Task.FromResult(responseHeaders); + + public override void Dispose() + { + if (!isMock) + { + inner.Dispose(); + } + } + + public override Status GetStatus() + { + return !isMock ? inner.GetStatus() : status; + } + + public override Metadata GetTrailers() + { + return !isMock ? inner.GetTrailers() : trailers; + } + + public ResponseContext WithNewResult(T result) + { + if (isMock) + { + return new ResponseContext(result, trailers, responseHeaders, status); + } + else + { + var newContext = new ResponseContext(inner, resolver); + newContext.deserialized = true; + newContext.responseObject = result; + return newContext; + } + } + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/AsyncStreamReaderExtensions.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/ClientFilter.cs.meta similarity index 83% rename from samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/AsyncStreamReaderExtensions.cs.meta rename to samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/ClientFilter.cs.meta index d3b3ea268..043460c04 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/AsyncStreamReaderExtensions.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/ClientFilter.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 291e91a7a9253524e80e4bcfefb18d7a +guid: d0190394f8c415b4b84aa1b95b993369 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/DynamicClientBuilder.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/DynamicClientBuilder.cs index 21e13a56d..34d0b7d2d 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/DynamicClientBuilder.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/DynamicClientBuilder.cs @@ -12,7 +12,12 @@ namespace MagicOnion.Client { - internal static class DynamicClientAssemblyHolder +#if ENABLE_SAVE_ASSEMBLY + public +#else + internal +#endif + static class DynamicClientAssemblyHolder { public const string ModuleName = "MagicOnion.Client.DynamicClient"; @@ -34,7 +39,13 @@ public static AssemblyBuilder Save() #endif } - internal static class DynamicClientBuilder +#if ENABLE_SAVE_ASSEMBLY + public +#else + internal +#endif + static class DynamicClientBuilder + where T : IService { public static readonly Type ClientType; static readonly Type bytesMethod = typeof(Method<,>).MakeGenericType(new[] { typeof(byte[]), typeof(byte[]) }); @@ -130,11 +141,52 @@ static void DefineStaticConstructor(TypeBuilder typeBuilder, Type interfaceType, il.Emit(OpCodes.Ldsfld, throughMarshaller); il.Emit(OpCodes.Newobj, bytesMethod.GetConstructors()[0]); il.Emit(OpCodes.Stsfld, def.FieldMethod); + + if (def.MethodType == MethodType.Unary) + { + DefineUnaryRequestDelegate(il, typeBuilder, interfaceType, def); + } } il.Emit(OpCodes.Ret); } + static void DefineUnaryRequestDelegate(ILGenerator staticContructorGenerator, TypeBuilder typeBuilder, Type interfaceType, MethodDefinition definition) + { + // static ResponseContext _Method(RequestContext context); + MethodBuilder method; + { + method = typeBuilder.DefineMethod("_" + definition.MethodInfo.Name, MethodAttributes.Private | MethodAttributes.Static, + typeof(ResponseContext), + new[] { typeof(RequestContext) }); + var il = method.GetILGenerator(); + + // CreateResponseContext(Context, Method); + var createMethod = typeof(MagicOnionClientBase) + .GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static) + .Where(x => x.Name == "CreateResponseContext") + .OrderByDescending(x => x.GetGenericArguments().Length) + .First() + .MakeGenericMethod(definition.RequestType, definition.ResponseType); + + il.Emit(OpCodes.Ldarg_0); // context + il.Emit(OpCodes.Ldsfld, definition.FieldMethod); // method + il.Emit(OpCodes.Call, createMethod); + il.Emit(OpCodes.Ret); + } + + // static readonly Func methodDelegate = _Method; + { + definition.UnaryRequestDelegate = typeBuilder.DefineField(definition.MethodInfo.Name + "Delegate", typeof(Func), FieldAttributes.Private | FieldAttributes.Static); + + var il = staticContructorGenerator; + il.Emit(OpCodes.Ldnull); + il.Emit(OpCodes.Ldftn, method); + il.Emit(OpCodes.Newobj, typeof(Func).GetConstructors()[0]); + il.Emit(OpCodes.Stsfld, definition.UnaryRequestDelegate); + } + } + static ConstructorInfo DefineConstructors(TypeBuilder typeBuilder, MethodDefinition[] definitions) { ConstructorInfo emptyCtor; @@ -150,15 +202,16 @@ static ConstructorInfo DefineConstructors(TypeBuilder typeBuilder, MethodDefinit emptyCtor = ctor; } - // .ctor(CallInvoker, IFormatterResolver):base(callInvoker, resolver) + // .ctor(CallInvoker, IFormatterResolver, IClientFilter[]):base(callInvoker, resolver, clientFilters) { - var ctor = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, new[] { typeof(CallInvoker), typeof(IFormatterResolver) }); + var ctor = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, new[] { typeof(CallInvoker), typeof(IFormatterResolver), typeof(IClientFilter[]) }); var il = ctor.GetILGenerator(); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldarg_1); il.Emit(OpCodes.Ldarg_2); - il.Emit(OpCodes.Call, typeBuilder.BaseType.GetConstructor(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(CallInvoker), typeof(IFormatterResolver) }, null)); + il.Emit(OpCodes.Ldarg_3); + il.Emit(OpCodes.Call, typeBuilder.BaseType.GetConstructor(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(CallInvoker), typeof(IFormatterResolver), typeof(IClientFilter[]) }, null)); il.Emit(OpCodes.Ret); } @@ -167,11 +220,13 @@ static ConstructorInfo DefineConstructors(TypeBuilder typeBuilder, MethodDefinit static void DefineMethods(TypeBuilder typeBuilder, Type interfaceType, MethodDefinition[] definitions, ConstructorInfo emptyCtor) { + var filedHolderType = typeof(MagicOnionClientBase); var baseType = typeof(MagicOnionClientBase<>).MakeGenericType(interfaceType); - var hostField = baseType.GetField("host", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); - var optionField = baseType.GetField("option", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); - var invokerField = baseType.GetField("callInvoker", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); - var resolverField = baseType.GetField("resolver", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + var hostField = filedHolderType.GetField("host", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + var optionField = filedHolderType.GetField("option", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + var invokerField = filedHolderType.GetField("callInvoker", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + var resolverField = filedHolderType.GetField("resolver", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + var filtersField = filedHolderType.GetField("filters", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); // Clone { @@ -202,6 +257,11 @@ static void DefineMethods(TypeBuilder typeBuilder, Type interfaceType, MethodDef il.Emit(OpCodes.Ldfld, resolverField); il.Emit(OpCodes.Stfld, resolverField); + il.Emit(OpCodes.Dup); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldfld, filtersField); + il.Emit(OpCodes.Stfld, filtersField); + il.Emit(OpCodes.Ret); } // Overrides @@ -281,81 +341,101 @@ static void DefineMethods(TypeBuilder typeBuilder, Type interfaceType, MethodDef switch (def.MethodType) { case MethodType.Unary: - case MethodType.ServerStreaming: - il.DeclareLocal(typeof(byte[])); // request - if (def.MethodType == MethodType.Unary) { - il.DeclareLocal(typeof(AsyncUnaryCall)); // callResult + // base.InvokeAsync/InvokeTaskAsync(string path, TRequest request, Func requestMethod) + + // this. + il.Emit(OpCodes.Ldarg_0); + + // path + il.Emit(OpCodes.Ldstr, def.Path); + + // create request + for (int j = 0; j < parameters.Length; j++) + { + il.Emit(OpCodes.Ldarg, j + 1); + } + if (parameters.Length == 0) + { + // use empty byte[0] + il.Emit(OpCodes.Ldsfld, nilBytes); + } + else if (parameters.Length == 1) + { + // already loaded parameter. + } + else + { + // call new DynamicArgumentTuple + il.Emit(OpCodes.Newobj, def.RequestType.GetConstructors()[0]); + } + + // requestMethod + il.Emit(OpCodes.Ldsfld, def.UnaryRequestDelegate); + + // InvokeAsync/InvokeTaskAsync + var invokeMethod = def.ResponseIsTask + ? baseType.GetMethod("InvokeTaskAsync", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy | BindingFlags.Instance) + : baseType.GetMethod("InvokeAsync", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy | BindingFlags.Instance); + invokeMethod = invokeMethod.MakeGenericMethod(def.RequestType, def.ResponseType); + il.Emit(OpCodes.Callvirt, invokeMethod); } - else + + break; + case MethodType.ServerStreaming: { + il.DeclareLocal(typeof(byte[])); // request il.DeclareLocal(typeof(AsyncServerStreamingCall)); - } - // create request - for (int j = 0; j < parameters.Length; j++) - { - il.Emit(OpCodes.Ldarg, j + 1); - } - if (parameters.Length == 0) - { - // use empty byte[0] - il.Emit(OpCodes.Ldsfld, nilBytes); - } - else if (parameters.Length == 1) - { - // already loaded parameter. + // create request + for (int j = 0; j < parameters.Length; j++) + { + il.Emit(OpCodes.Ldarg, j + 1); + } + if (parameters.Length == 0) + { + // use empty byte[0] + il.Emit(OpCodes.Ldsfld, nilBytes); + } + else if (parameters.Length == 1) + { + // already loaded parameter. + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldfld, resolverField); + il.Emit(OpCodes.Call, callMessagePackSerialize.MakeGenericMethod(def.RequestType)); + } + else + { + // call new DynamicArgumentTuple + il.Emit(OpCodes.Newobj, def.RequestType.GetConstructors()[0]); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldfld, resolverField); + il.Emit(OpCodes.Call, callMessagePackSerialize.MakeGenericMethod(def.RequestType)); + } + il.Emit(OpCodes.Stloc_0); + + // create ***Result il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldfld, resolverField); - il.Emit(OpCodes.Call, callMessagePackSerialize.MakeGenericMethod(def.RequestType)); - } - else - { - // call new DynamicArgumentTuple - il.Emit(OpCodes.Newobj, def.RequestType.GetConstructors()[0]); + il.Emit(OpCodes.Ldfld, invokerField); + il.Emit(OpCodes.Ldsfld, def.FieldMethod); il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldfld, resolverField); - il.Emit(OpCodes.Call, callMessagePackSerialize.MakeGenericMethod(def.RequestType)); - } - il.Emit(OpCodes.Stloc_0); - - // create ***Result - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldfld, invokerField); - il.Emit(OpCodes.Ldsfld, def.FieldMethod); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldfld, hostField); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldfld, optionField); - il.Emit(OpCodes.Ldloc_0); - if (def.MethodType == MethodType.Unary) - { - il.Emit(OpCodes.Callvirt, typeof(CallInvoker).GetMethod("AsyncUnaryCall").MakeGenericMethod(typeof(byte[]), typeof(byte[]))); - } - else - { + il.Emit(OpCodes.Ldfld, hostField); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldfld, optionField); + il.Emit(OpCodes.Ldloc_0); il.Emit(OpCodes.Callvirt, typeof(CallInvoker).GetMethod("AsyncServerStreamingCall").MakeGenericMethod(typeof(byte[]), typeof(byte[]))); - } - il.Emit(OpCodes.Stloc_1); + il.Emit(OpCodes.Stloc_1); - // create return result - il.Emit(OpCodes.Ldloc_1); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldfld, resolverField); - Type resultType; - if (def.MethodType == MethodType.Unary) - { - resultType = typeof(UnaryResult<>).MakeGenericType(def.ResponseType); - il.Emit(OpCodes.Newobj, resultType.GetConstructors().OrderBy(x => x.GetParameters().Length).Last()); - } - else - { - resultType = typeof(ServerStreamingResult<>).MakeGenericType(def.ResponseType); + // create return result + il.Emit(OpCodes.Ldloc_1); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldfld, resolverField); + var resultType = typeof(ServerStreamingResult<>).MakeGenericType(def.ResponseType); il.Emit(OpCodes.Newobj, resultType.GetConstructors()[0]); - } - if (def.ResponseIsTask) - { - il.Emit(OpCodes.Call, typeof(Task).GetMethod("FromResult").MakeGenericMethod(resultType)); + if (def.ResponseIsTask) + { + il.Emit(OpCodes.Call, typeof(Task).GetMethod("FromResult").MakeGenericMethod(resultType)); + } } break; case MethodType.ClientStreaming: @@ -481,6 +561,9 @@ class MethodDefinition public FieldInfo FieldMethod; public Type RequestType; public Type ResponseType; + + // unary only, set after define static fields + public FieldInfo UnaryRequestDelegate; } } } diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/DynamicClientBuilder.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/DynamicClientBuilder.cs.meta index 32eb010cf..8b24b90bf 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/DynamicClientBuilder.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/DynamicClientBuilder.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4756b0967dbdbae4fb4cb2afb87f4101 +guid: 208a388fa997a3248820f7b2141a6517 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/HeartbeatClient.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/HeartbeatClient.cs index cdb829706..1b55c9653 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/HeartbeatClient.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/HeartbeatClient.cs @@ -1,6 +1,7 @@ using Grpc.Core; using MagicOnion.Server.EmbeddedServices; using MessagePack; +using System; using System.Threading.Tasks; #if !NON_UNITY @@ -38,7 +39,7 @@ public HeartbeatClient(Channel channel) } public HeartbeatClient(CallInvoker callInvoker) - : base(callInvoker, null) + : base(callInvoker, null, Array.Empty()) { } diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/HeartbeatClient.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/HeartbeatClient.cs.meta index d4874e8ef..3b5e89d95 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/HeartbeatClient.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/HeartbeatClient.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3f573b388e1de364eb3cf8671cf58926 +guid: 23372752e8f03804e967e1401e3e3ab4 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/PingClient.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/PingClient.cs index d2249d4bb..d2440a7f1 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/PingClient.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/PingClient.cs @@ -1,6 +1,7 @@ using Grpc.Core; using MagicOnion.Server.EmbeddedServices; using MessagePack; +using System; #if !NON_UNITY @@ -37,7 +38,7 @@ public PingClient(Channel channel) } public PingClient(CallInvoker callInvoker) - : base(callInvoker, null) + : base(callInvoker, null, Array.Empty()) { } @@ -53,8 +54,13 @@ protected override MagicOnionClientBase Clone() public UnaryResult Ping() { - var __callResult = callInvoker.AsyncUnaryCall(Method, base.host, base.option, MagicOnionMarshallers.UnsafeNilBytes); - return new UnaryResult(__callResult, MessagePack.Resolvers.BuiltinResolver.Instance); + return InvokeAsync("IMagicOnionEmbeddedPing/Ping", MagicOnionMarshallers.UnsafeNilBytes, __ctx => + { + var __self = (PingClient)__ctx.Client; + var __request = MagicOnionMarshallers.UnsafeNilBytes; + var __callResult = __self.callInvoker.AsyncUnaryCall(PingClient.Method, __self.host, __ctx.CallOptions, __request); + return new ResponseContext(__callResult, MessagePack.Resolvers.BuiltinResolver.Instance); + }); } } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/PingClient.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/PingClient.cs.meta index 9af00d4a2..d26097bb6 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/PingClient.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/EmbeddedServices/PingClient.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 978917e6032944a4bbc7585e1d78f8ea +guid: 6914b68b52e42bc44a3c16fd54147eac MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/InterceptInvokeHelper.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/InterceptInvokeHelper.cs new file mode 100644 index 000000000..870155e54 --- /dev/null +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/InterceptInvokeHelper.cs @@ -0,0 +1,158 @@ +using System.Threading.Tasks; + +namespace MagicOnion.Client +{ + internal static class InterceptInvokeHelper + { + public static ValueTask InvokeWithFilter(RequestContext context) + { + switch (context.Filters.Length) + { + case 0: + return new ValueTask(context.RequestMethod(context)); + case 1: + return InvokeWithFilter1(context); + case 2: + return InvokeWithFilter2(context); + case 3: + return InvokeWithFilter3(context); + case 4: + return InvokeWithFilter4(context); + case 5: + return InvokeWithFilter5(context); + case 6: + return InvokeWithFilter6(context); + case 7: + return InvokeWithFilter7(context); + case 8: + return InvokeWithFilter8(context); + case 9: + return InvokeWithFilter9(context); + case 10: + return InvokeWithFilter10(context); + default: + return InvokeRecursive(-1, context); + } + } + + static ValueTask InvokeWithFilter1(RequestContext context) + { + return context.Filters[0].SendAsync(context, + ctx => new ValueTask(ctx.RequestMethod(ctx).WaitResponseAsync())); + } + + static ValueTask InvokeWithFilter2(RequestContext context) + { + return context.Filters[0].SendAsync(context, + x1 => x1.Filters[1].SendAsync(x1, + ctx => new ValueTask(ctx.RequestMethod(ctx).WaitResponseAsync()))); + } + + static ValueTask InvokeWithFilter3(RequestContext context) + { + return context.Filters[0].SendAsync(context, + x1 => x1.Filters[1].SendAsync(x1, + x2 => x2.Filters[2].SendAsync(x2, + ctx => new ValueTask(ctx.RequestMethod(ctx).WaitResponseAsync())))); + } + + static ValueTask InvokeWithFilter4(RequestContext context) + { + return context.Filters[0].SendAsync(context, + x1 => x1.Filters[1].SendAsync(x1, + x2 => x2.Filters[2].SendAsync(x2, + x3 => x3.Filters[3].SendAsync(x3, + ctx => new ValueTask(ctx.RequestMethod(ctx).WaitResponseAsync()))))); + } + + static ValueTask InvokeWithFilter5(RequestContext context) + { + return context.Filters[0].SendAsync(context, + x1 => x1.Filters[1].SendAsync(x1, + x2 => x2.Filters[2].SendAsync(x2, + x3 => x3.Filters[3].SendAsync(x3, + x4 => x4.Filters[4].SendAsync(x4, + ctx => new ValueTask(ctx.RequestMethod(ctx).WaitResponseAsync())))))); + } + + static ValueTask InvokeWithFilter6(RequestContext context) + { + return context.Filters[0].SendAsync(context, + x1 => x1.Filters[1].SendAsync(x1, + x2 => x2.Filters[2].SendAsync(x2, + x3 => x3.Filters[3].SendAsync(x3, + x4 => x4.Filters[4].SendAsync(x4, + x5 => x5.Filters[5].SendAsync(x5, + ctx => new ValueTask(ctx.RequestMethod(ctx).WaitResponseAsync()))))))); + } + + static ValueTask InvokeWithFilter7(RequestContext context) + { + return context.Filters[0].SendAsync(context, + x1 => x1.Filters[1].SendAsync(x1, + x2 => x2.Filters[2].SendAsync(x2, + x3 => x3.Filters[3].SendAsync(x3, + x4 => x4.Filters[4].SendAsync(x4, + x5 => x5.Filters[5].SendAsync(x5, + x6 => x6.Filters[6].SendAsync(x6, + ctx => new ValueTask(ctx.RequestMethod(ctx).WaitResponseAsync())))))))); + } + + static ValueTask InvokeWithFilter8(RequestContext context) + { + return context.Filters[0].SendAsync(context, + x1 => x1.Filters[1].SendAsync(x1, + x2 => x2.Filters[2].SendAsync(x2, + x3 => x3.Filters[3].SendAsync(x3, + x4 => x4.Filters[4].SendAsync(x4, + x5 => x5.Filters[5].SendAsync(x5, + x6 => x6.Filters[6].SendAsync(x6, + x7 => x7.Filters[7].SendAsync(x7, + ctx => new ValueTask(ctx.RequestMethod(ctx).WaitResponseAsync()))))))))); + } + + static ValueTask InvokeWithFilter9(RequestContext context) + { + return context.Filters[0].SendAsync(context, + x1 => x1.Filters[1].SendAsync(x1, + x2 => x2.Filters[2].SendAsync(x2, + x3 => x3.Filters[3].SendAsync(x3, + x4 => x4.Filters[4].SendAsync(x4, + x5 => x5.Filters[5].SendAsync(x5, + x6 => x6.Filters[6].SendAsync(x6, + x7 => x7.Filters[7].SendAsync(x7, + x8 => x8.Filters[8].SendAsync(x8, + ctx => new ValueTask(ctx.RequestMethod(ctx).WaitResponseAsync())))))))))); + } + + static ValueTask InvokeWithFilter10(RequestContext context) + { + return context.Filters[0].SendAsync(context, + x1 => x1.Filters[1].SendAsync(x1, + x2 => x2.Filters[2].SendAsync(x2, + x3 => x3.Filters[3].SendAsync(x3, + x4 => x4.Filters[4].SendAsync(x4, + x5 => x5.Filters[5].SendAsync(x5, + x6 => x6.Filters[6].SendAsync(x6, + x7 => x7.Filters[7].SendAsync(x7, + x8 => x8.Filters[8].SendAsync(x8, + x9 => x9.Filters[9].SendAsync(x9, + ctx => new ValueTask(ctx.RequestMethod(ctx).WaitResponseAsync()))))))))))); + } + + // for invoke N filters(slow path). + + static ValueTask InvokeRecursive(int index, RequestContext context) + { + index += 1; // start from -1 + if (index != context.Filters.Length) + { + return context.Filters[index].SendAsync(context, ctx => InvokeRecursive(index, ctx)); + } + else + { + return new ValueTask(context.RequestMethod(context).WaitResponseAsync()); + } + } + } +} \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/AsyncMethodBuilderAttribute.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/InterceptInvokeHelper.cs.meta similarity index 69% rename from samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/AsyncMethodBuilderAttribute.cs.meta rename to samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/InterceptInvokeHelper.cs.meta index 6fb79912f..e1c983c5b 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/AsyncMethodBuilderAttribute.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/InterceptInvokeHelper.cs.meta @@ -1,8 +1,7 @@ fileFormatVersion: 2 -guid: ae14fd23ed18c984e8959b1d12824b67 -timeCreated: 1544664808 -licenseType: Pro +guid: 4a428b894e3ddac4a80496efd076633c MonoImporter: + externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClient.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClient.cs index 7d5356bcb..b65b28f8b 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClient.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClient.cs @@ -6,26 +6,46 @@ namespace MagicOnion.Client { public static class MagicOnionClient { + static readonly IClientFilter[] emptyFilters = Array.Empty(); + public static T Create(Channel channel) where T : IService { - return Create(new DefaultCallInvoker(channel), MessagePackSerializer.DefaultResolver); + return Create(new DefaultCallInvoker(channel), MessagePackSerializer.DefaultResolver, emptyFilters); } public static T Create(CallInvoker invoker) where T : IService { - return Create(invoker, MessagePackSerializer.DefaultResolver); + return Create(invoker, MessagePackSerializer.DefaultResolver, emptyFilters); + } + + public static T Create(Channel channel, IClientFilter[] clientFilters) + where T : IService + { + return Create(new DefaultCallInvoker(channel), MessagePackSerializer.DefaultResolver, clientFilters); + } + + public static T Create(CallInvoker invoker, IClientFilter[] clientFilters) + where T : IService + { + return Create(invoker, MessagePackSerializer.DefaultResolver, clientFilters); } public static T Create(Channel channel, IFormatterResolver resolver) where T : IService { - return Create(new DefaultCallInvoker(channel), resolver); + return Create(new DefaultCallInvoker(channel), resolver, emptyFilters); } public static T Create(CallInvoker invoker, IFormatterResolver resolver) where T : IService + { + return Create(invoker, resolver, emptyFilters); + } + + public static T Create(CallInvoker invoker, IFormatterResolver resolver, IClientFilter[] clientFilters) + where T : IService { if (invoker == null) throw new ArgumentNullException(nameof(invoker)); @@ -36,12 +56,12 @@ public static T Create(CallInvoker invoker, IFormatterResolver resolver) throw new InvalidOperationException("Does not registered client factory, dynamic code generation is not supported on IL2CPP. Please use code generator(moc)."); #else var t = DynamicClientBuilder.ClientType; - return (T)Activator.CreateInstance(t, invoker, resolver); + return (T)Activator.CreateInstance(t, invoker, resolver, clientFilters); #endif } else { - return ctor(invoker, resolver); + return ctor(invoker, resolver, clientFilters); } } } @@ -49,9 +69,9 @@ public static T Create(CallInvoker invoker, IFormatterResolver resolver) public static class MagicOnionClientRegistry where T : IService { - public static Func consturtor; + public static Func consturtor; - public static void Register(Func ctor) + public static void Register(Func ctor) { consturtor = ctor; } diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClient.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClient.cs.meta index 42a80eef1..0ca77dc98 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClient.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClient.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5cd0a981f86ef1843bf6b375b2d9b5dd +guid: 84c0fff7a7cd05b498dc79dd4a786b5a MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClientBase.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClientBase.cs index edfbccf21..567eb3ffa 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClientBase.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClientBase.cs @@ -1,27 +1,99 @@ using Grpc.Core; -using MagicOnion.Server; using MessagePack; using System; using System.Threading; +using System.Threading.Tasks; namespace MagicOnion.Client { - public abstract class MagicOnionClientBase where T : IService + public abstract class MagicOnionClientBase { protected string host; protected CallOptions option; protected CallInvoker callInvoker; protected IFormatterResolver resolver; + protected IClientFilter[] filters; - protected MagicOnionClientBase() + static protected ResponseContext CreateResponseContext(RequestContext context, Method method) { + var self = context.Client; + var callResult = self.callInvoker.AsyncUnaryCall(method, self.host, context.CallOptions, context.RequestMutator(MagicOnionMarshallers.UnsafeNilBytes)); + var response = new ResponseContext(callResult, self.resolver); + response.SetResponseMutator(context.ResponseMutator); + return response; + } + + static protected ResponseContext CreateResponseContext(RequestContext context, Method method) + { + var self = context.Client; + var message = LZ4MessagePackSerializer.Serialize(((RequestContext)context).Request, self.resolver); + var callResult = self.callInvoker.AsyncUnaryCall(method, self.host, context.CallOptions, context.RequestMutator(message)); + var response = new ResponseContext(callResult, self.resolver); + response.SetResponseMutator(context.ResponseMutator); + return response; + } + } + public abstract class MagicOnionClientBase : MagicOnionClientBase + where T : IService + { + protected MagicOnionClientBase() + { } - protected MagicOnionClientBase(CallInvoker callInvoker, IFormatterResolver resolver) + protected MagicOnionClientBase(CallInvoker callInvoker, IFormatterResolver resolver, IClientFilter[] filters) { this.callInvoker = callInvoker; this.resolver = resolver; + this.filters = filters; + } + + protected UnaryResult InvokeAsync(string path, TRequest request, Func requestMethod) + { + var future = InvokeAsyncCore(path, request, requestMethod); + return new UnaryResult(future); + } + + async Task> InvokeAsyncCore(string path, TRequest request, Func requestMethod) + { + if (this.option.Headers == null && filters.Length != 0) + { + // always creating new Metadata is bad manner for performance + this.option = this.option.WithHeaders(new Metadata()); + } + + var requestContext = new RequestContext(request, this, path, option, typeof(TResponse), filters, requestMethod); + var response = await InterceptInvokeHelper.InvokeWithFilter(requestContext); + var result = response as ResponseContext; + if (result != null) + { + return result; + } + else + { + throw new InvalidOperationException("ResponseContext is null."); + } + } + + protected async Task> InvokeTaskAsync(string path, TRequest request, Func requestMethod) + { + if (this.option.Headers == null && filters.Length != 0) + { + // always creating new Metadata is bad manner for performance + this.option = this.option.WithHeaders(new Metadata()); + } + + var requestContext = new RequestContext(request, this, path, option, typeof(TResponse), filters, requestMethod); + var response = await InterceptInvokeHelper.InvokeWithFilter(requestContext); + var result = response as ResponseContext; + if (result != null) + { + return new UnaryResult(Task.FromResult(result)); + } + else + { + throw new InvalidOperationException("ResponseContext is null."); + } } protected abstract MagicOnionClientBase Clone(); diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClientBase.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClientBase.cs.meta index 0a4bed78f..fd1a138c3 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClientBase.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/MagicOnionClientBase.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d469b4f1a615e4f4f8bf51459e9e5d50 +guid: 9c4ad3608bb5abb4ab8dd9669098d222 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClient.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClient.cs.meta index b7c2a041c..e90a9f505 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClient.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClient.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d74d1bafd22f5794fa60ad8963e9be64 +guid: 21bfe989a12ddc0469ac1552273e160b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBase.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBase.cs index 41f1af8b5..225b57d64 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBase.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBase.cs @@ -57,14 +57,15 @@ public void __ConnectAndSubscribe(TReceiver receiver) } protected abstract void OnResponseEvent(int methodId, object taskCompletionSource, ArraySegment data); - protected abstract Task OnBroadcastEvent(int methodId, ArraySegment data); + protected abstract void OnBroadcastEvent(int methodId, ArraySegment data); async Task StartSubscribe() { + var syncContext = SynchronizationContext.Current; // capture SynchronizationContext. var reader = connection.RawStreamingCall.ResponseStream; try { - while (await reader.MoveNext(cts.Token)) + while (await reader.MoveNext(cts.Token).ConfigureAwait(false)) // avoid Post to SyncContext(it losts one-frame per operation) { try { @@ -73,23 +74,19 @@ async Task StartSubscribe() // broadcast: [methodId, [argument]] // response: [messageId, methodId, response] // error-response: [messageId, statusCode, detail, StringMessage] - var readSize = 0; var offset = 0; var arrayLength = MessagePackBinary.ReadArrayHeader(data, offset, out readSize); offset += readSize; - if (arrayLength == 3) { var messageId = MessagePackBinary.ReadInt32(data, offset, out readSize); offset += readSize; - object future; if (responseFutures.TryRemove(messageId, out future)) { var methodId = MessagePackBinary.ReadInt32(data, offset, out readSize); offset += readSize; - try { OnResponseEvent(methodId, future, new ArraySegment(data, offset, data.Length - offset)); @@ -107,18 +104,14 @@ async Task StartSubscribe() { var messageId = MessagePackBinary.ReadInt32(data, offset, out readSize); offset += readSize; - object future; if (responseFutures.TryRemove(messageId, out future)) { var statusCode = MessagePackBinary.ReadInt32(data, offset, out readSize); offset += readSize; - var detail = MessagePackBinary.ReadString(data, offset, out readSize); offset += readSize; - var error = LZ4MessagePackSerializer.Deserialize(new ArraySegment(data, offset, data.Length - offset)); - (future as ITaskCompletion).TrySetException(new RpcException(new Status((StatusCode)statusCode, detail), error)); } } @@ -126,13 +119,33 @@ async Task StartSubscribe() { var methodId = MessagePackBinary.ReadInt32(data, offset, out readSize); offset += readSize; - - await OnBroadcastEvent(methodId, new ArraySegment(data, offset, data.Length - offset)); + if (syncContext != null) + { + var tuple = Tuple.Create(methodId, data, offset, data.Length - offset); + syncContext.Post(state => + { + var t = (Tuple)state; + OnBroadcastEvent(t.Item1, new ArraySegment(t.Item2, t.Item3, t.Item4)); + }, tuple); + } + else + { + OnBroadcastEvent(methodId, new ArraySegment(data, offset, data.Length - offset)); + } } } catch (Exception ex) { - logger?.Error(ex, "Error on consume received message, but keep subscribe."); + const string msg = "Error on consume received message, but keep subscribe."; + // log post on main thread. + if (syncContext != null) + { + syncContext.Post(state => logger.Error((Exception)state, msg), ex); + } + else + { + logger.Error(ex, msg); + } } } } @@ -142,13 +155,26 @@ async Task StartSubscribe() { return; } - - logger?.Error(ex, "Error on subscribing message."); + const string msg = "Error on subscribing message."; + // log post on main thread. + if (syncContext != null) + { + syncContext.Post(state => logger.Error((Exception)state, msg), ex); + } + else + { + logger.Error(ex, msg); + } } finally { try { + // set syncContext before await + if (syncContext != null && SynchronizationContext.Current == null) + { + SynchronizationContext.SetSynchronizationContext(syncContext); + } await DisposeAsyncCore(false); } finally @@ -158,6 +184,7 @@ async Task StartSubscribe() } } + protected async Task WriteMessageAsync(int methodId, T message) { ThrowIfDisposed(); diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBase.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBase.cs.meta index 466360cca..886cb9c4f 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBase.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBase.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d3ca190a4e3a9184ea0ba8b8c5e88b2f +guid: 198b20d8041b3f641af9b974bd9893fb MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBuilder.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBuilder.cs index 573e0b55f..2bca06338 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBuilder.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBuilder.cs @@ -72,7 +72,7 @@ static StreamingHubClientBuilder() var parentType = typeof(StreamingHubClientBase<,>).MakeGenericType(typeof(TStreamingHub), typeof(TReceiver)); var typeBuilder = asm.DefineType($"{DynamicClientAssemblyHolder.ModuleName}.{ti.FullName}StreamingHubClient_{Guid.NewGuid().ToString()}", TypeAttributes.Public, parentType, new Type[] { t }); - VerifyMethodDefinitions(typeBuilder, methodDefinitions); + VerifyMethodDefinitions(methodDefinitions); { // Create FireAndForgetType first as nested type. @@ -127,7 +127,7 @@ static MethodDefinition[] SearchDefinitions(Type interfaceType) .ToArray(); } - static void VerifyMethodDefinitions(TypeBuilder typeBuilder, MethodDefinition[] definitions) + static void VerifyMethodDefinitions(MethodDefinition[] definitions) { var map = new Dictionary(definitions.Length); foreach (var item in definitions) @@ -135,14 +135,14 @@ static void VerifyMethodDefinitions(TypeBuilder typeBuilder, MethodDefinition[] var methodId = item.MethodInfo.GetCustomAttribute()?.MethodId ?? FNV1A32.GetHashCode(item.MethodInfo.Name); if (map.ContainsKey(methodId)) { - throw new Exception($"TReceiver does not allows duplicate methodId(hash code). Please change name or use MethodIdAttribute. {map[methodId].MethodInfo.Name} and {item.MethodInfo.Name}"); + throw new Exception($"TStreamingHub does not allows duplicate methodId(hash code). Please change name or use MethodIdAttribute. {map[methodId].MethodInfo.Name} and {item.MethodInfo.Name}"); } map.Add(methodId, item); if (!(item.MethodInfo.ReturnType.IsGenericType && item.MethodInfo.ReturnType.GetGenericTypeDefinition() == typeof(Task<>)) && item.MethodInfo.ReturnType != typeof(Task)) { - throw new Exception($"Invalid definition, TReceiver's return type must only be `Task` or `Task`. {item.MethodInfo.Name}."); + throw new Exception($"Invalid definition, TStreamingHub's return type must only be `Task` or `Task`. {item.MethodInfo.Name}."); } item.MethodId = methodId; @@ -335,13 +335,13 @@ static void DefineMethods(TypeBuilder typeBuilder, Type interfaceType, Type rece il.Emit(OpCodes.Ret); } } - // protected abstract Task OnBroadcastEvent(int methodId, ArraySegment data); + // protected abstract void OnBroadcastEvent(int methodId, ArraySegment data); { var methodDefinitions = BroadcasterHelper.SearchDefinitions(receiverType); BroadcasterHelper.VerifyMethodDefinitions(methodDefinitions); var method = typeBuilder.DefineMethod("OnBroadcastEvent", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, - typeof(Task), new[] { typeof(int), typeof(ArraySegment) }); + typeof(void), new[] { typeof(int), typeof(ArraySegment) }); var il = method.GetILGenerator(); var labels = methodDefinitions @@ -356,7 +356,6 @@ static void DefineMethods(TypeBuilder typeBuilder, Type interfaceType, Type rece il.Emit(OpCodes.Beq, item.label); } // else - il.Emit(OpCodes.Call, typeof(Task).GetProperty("CompletedTask").GetGetMethod()); il.Emit(OpCodes.Ret); foreach (var item in labels) @@ -372,10 +371,6 @@ static void DefineMethods(TypeBuilder typeBuilder, Type interfaceType, Type rece il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldfld, receiverField); il.Emit(OpCodes.Callvirt, item.def.MethodInfo); - if (item.def.MethodInfo.ReturnType == typeof(void)) - { - il.Emit(OpCodes.Call, completedTask.GetGetMethod()); - } il.Emit(OpCodes.Ret); } else if (parameters.Length == 1) @@ -387,10 +382,6 @@ static void DefineMethods(TypeBuilder typeBuilder, Type interfaceType, Type rece il.Emit(OpCodes.Ldfld, resolverField); il.Emit(OpCodes.Call, callMessagePackDesrialize.MakeGenericMethod(parameters[0].ParameterType)); il.Emit(OpCodes.Callvirt, item.def.MethodInfo); - if (item.def.MethodInfo.ReturnType == typeof(void)) - { - il.Emit(OpCodes.Call, completedTask.GetGetMethod()); - } il.Emit(OpCodes.Ret); } else @@ -413,10 +404,6 @@ static void DefineMethods(TypeBuilder typeBuilder, Type interfaceType, Type rece } il.Emit(OpCodes.Callvirt, item.def.MethodInfo); - if (item.def.MethodInfo.ReturnType == typeof(void)) - { - il.Emit(OpCodes.Call, completedTask.GetGetMethod()); - } il.Emit(OpCodes.Ret); } } diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBuilder.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBuilder.cs.meta index d24d573a4..931d24905 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBuilder.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Client/StreamingHubClientBuilder.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 88e3748798a988c4482dafe8624b1400 +guid: 974aaab83ffceaa46b195374990a2cd6 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/CompilerServices/AsyncUnaryResultMethodBuilder.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/CompilerServices/AsyncUnaryResultMethodBuilder.cs.meta index 8181dc4a2..37c399ebc 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/CompilerServices/AsyncUnaryResultMethodBuilder.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/CompilerServices/AsyncUnaryResultMethodBuilder.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0b477812ed1bec0498697f6414846b7a +guid: f8cafc9c0c5247b42a892b99c7920677 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/MagicOnionMarshallers.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/MagicOnionMarshallers.cs index 32f48dd31..0f5c07925 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/MagicOnionMarshallers.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/MagicOnionMarshallers.cs @@ -9,7 +9,7 @@ namespace MagicOnion { - internal class MarshallingAsyncStreamReader : IAsyncStreamReader + internal class MarshallingAsyncStreamReader : IAsyncStreamReader, IDisposable { readonly IAsyncStreamReader inner; readonly IFormatterResolver resolver; @@ -37,7 +37,7 @@ public async Task MoveNext(CancellationToken cancellationToken) public void Dispose() { - inner.Dispose(); + (inner as IDisposable)?.Dispose(); } } diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Server/Hubs/BroadcasterHelper.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Server/Hubs/BroadcasterHelper.cs index 0ed5ae4ee..6afcc563d 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Server/Hubs/BroadcasterHelper.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Server/Hubs/BroadcasterHelper.cs @@ -36,6 +36,7 @@ internal static MethodDefinition[] SearchDefinitions(Type interfaceType) { return false; } + return true; }) .Where(x => !x.IsSpecialName) @@ -60,9 +61,9 @@ internal static void VerifyMethodDefinitions(MethodDefinition[] definitions) } map.Add(methodId, item); - if (!(item.MethodInfo.ReturnType == typeof(void) || item.MethodInfo.ReturnType == typeof(Task))) + if (!(item.MethodInfo.ReturnType == typeof(void))) { - throw new Exception($"Invalid definition, TReceiver's return type must only be `void` or `Task`. {item.MethodInfo.Name}."); + throw new Exception($"Invalid definition, TReceiver's return type must only be `void`. {item.MethodInfo.Name}."); } item.MethodId = methodId; diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/UnaryResult.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/UnaryResult.cs index 28b05d41b..2c00d4946 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/UnaryResult.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/UnaryResult.cs @@ -1,6 +1,7 @@ using Grpc.Core; +using MagicOnion.Client; using MagicOnion.CompilerServices; // require this using in AsyncMethodBuilder -using MessagePack; +using System; using System.Runtime.CompilerServices; using System.Threading.Tasks; @@ -18,16 +19,14 @@ public struct UnaryResult internal readonly TResponse rawValue; // internal internal readonly Task rawTaskValue; // internal - readonly AsyncUnaryCall inner; - readonly IFormatterResolver resolver; + readonly Task> response; public UnaryResult(TResponse rawValue) { this.hasRawValue = true; this.rawValue = rawValue; this.rawTaskValue = null; - this.inner = null; - this.resolver = null; + this.response = null; } public UnaryResult(Task rawTaskValue) @@ -35,23 +34,15 @@ public UnaryResult(Task rawTaskValue) this.hasRawValue = true; this.rawValue = default(TResponse); this.rawTaskValue = rawTaskValue; - this.inner = null; - this.resolver = null; + this.response = null; } - public UnaryResult(AsyncUnaryCall inner, IFormatterResolver resolver) + public UnaryResult(Task> response) { this.hasRawValue = false; this.rawValue = default(TResponse); this.rawTaskValue = null; - this.inner = inner; - this.resolver = resolver; - } - - async Task Deserialize() - { - var bytes = await inner.ResponseAsync.ConfigureAwait(false); - return LZ4MessagePackSerializer.Deserialize(bytes, resolver); + this.response = response; } /// @@ -63,7 +54,7 @@ public Task ResponseAsync { if (!hasRawValue) { - return Deserialize(); + return UnwrapResponse(); } else if (rawTaskValue != null) { @@ -83,10 +74,44 @@ public Task ResponseHeadersAsync { get { - return inner.ResponseHeadersAsync; + return UnwrapResponseHeaders(); + } + } + + async Task UnwrapResponse() + { + var ctx = await response.ConfigureAwait(false); + return await ctx.ResponseAsync.ConfigureAwait(false); + } + + async Task UnwrapResponseHeaders() + { + var ctx = await response.ConfigureAwait(false); + return await ctx.ResponseHeadersAsync.ConfigureAwait(false); + } + + async void UnwrapDispose() + { + try + { + var ctx = await response.ConfigureAwait(false); + ctx.Dispose(); + } + catch + { } } + ResponseContext TryUnwrap() + { + if (!response.IsCompleted) + { + throw new InvalidOperationException("UnaryResult request is not yet completed, please await before call this."); + } + + return response.Result; + } + /// /// Allows awaiting this object directly. /// @@ -101,7 +126,7 @@ public TaskAwaiter GetAwaiter() /// public Status GetStatus() { - return inner.GetStatus(); + return TryUnwrap().GetStatus(); } /// @@ -110,7 +135,7 @@ public Status GetStatus() /// public Metadata GetTrailers() { - return inner.GetTrailers(); + return TryUnwrap().GetTrailers(); } /// @@ -125,7 +150,14 @@ public Metadata GetTrailers() /// public void Dispose() { - inner.Dispose(); + if (!response.IsCompleted) + { + UnwrapDispose(); + } + else + { + response.Result.Dispose(); + } } } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/AsyncMethodBuilderAttribute.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/AsyncMethodBuilderAttribute.cs deleted file mode 100644 index bd06a0204..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/AsyncMethodBuilderAttribute.cs +++ /dev/null @@ -1,16 +0,0 @@ -#if CSHARP_7_OR_LATER || (UNITY_2018_3_OR_NEWER && (NET_STANDARD_2_0 || NET_4_6)) - -namespace System.Runtime.CompilerServices -{ - public sealed class AsyncMethodBuilderAttribute : Attribute - { - public Type BuilderType { get; } - - public AsyncMethodBuilderAttribute(Type builderType) - { - BuilderType = builderType; - } - } -} - -#endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/AsyncStreamReaderExtensions.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/AsyncStreamReaderExtensions.cs deleted file mode 100644 index 4a916f695..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/AsyncStreamReaderExtensions.cs +++ /dev/null @@ -1,298 +0,0 @@ -//using Grpc.Core; -//using System; -//using System.Threading; -//using UniRx; - -//namespace MagicOnion -//{ -// public static class AsyncStreamReaderExtensions -// { -// public static IDisposable Subscribe(this IAsyncStreamReader stream, Action onNext, bool observeOnMainThread = true, IDisposable streamingResult = null) -// { -// if (observeOnMainThread) -// { -// return AsObservable(stream, observeOnMainThread, streamingResult).Subscribe(onNext); -// } - -// var subscription = ForEachAsync(stream, onNext).Subscribe(); - -// if (streamingResult == null) return subscription; - -// return StableCompositeDisposable.Create(subscription, streamingResult); -// } - -// public static IDisposable Subscribe(this IAsyncStreamReader stream, IObserver observer, bool observeOnMainThread = true, IDisposable streamingResult = null) -// { -// var subscription = AsObservable(stream, observeOnMainThread).Subscribe(observer); - -// if (streamingResult == null) return subscription; -// return StableCompositeDisposable.Create(subscription, streamingResult); -// } - -// public static IObservable ForEachAsync(this IAsyncStreamReader stream, Action action) -// { -// return Observable.CreateWithState, Action>>(Tuple.Create(stream, action), (state0, observer) => -// { -// var disp = new MultipleAssignmentDisposable(); - -// var worker = new AsyncStreamReaderForEachAsync_(disp, state0.Item1, state0.Item2, observer); -// worker.ConsumeNext(); - -// return disp; -// }); -// } - -// class AsyncStreamReaderForEachAsync_ : IObserver -// { -// readonly MultipleAssignmentDisposable disp; -// readonly IAsyncStreamReader stream; -// readonly Action action; -// readonly IObserver rootObserver; - -// int isStopped = 0; - -// public AsyncStreamReaderForEachAsync_(MultipleAssignmentDisposable disp, IAsyncStreamReader stream, Action action, IObserver rootObserver) -// { -// this.disp = disp; -// this.stream = stream; -// this.action = action; -// this.rootObserver = rootObserver; -// } - -// public void ConsumeNext() -// { -// try -// { -// disp.Disposable = stream.MoveNext().Subscribe(this); -// } -// catch (Exception ex) -// { -// stream.Dispose(); -// rootObserver.OnError(ex); -// } -// } - -// public void OnNext(bool value) -// { -// if (isStopped == 0) -// { -// if (value == true) -// { -// try -// { -// action(stream.Current); -// } -// catch (Exception ex) -// { -// stream.Dispose(); -// rootObserver.OnError(ex); -// return; -// } - -// ConsumeNext(); // recursive next -// } -// else -// { -// rootObserver.OnCompleted(); -// } -// } -// } - -// public void OnError(Exception error) -// { -// if (Interlocked.Increment(ref isStopped) == 1) -// { -// stream.Dispose(); -// rootObserver.OnError(error); -// } -// } - -// public void OnCompleted() -// { -// // re-use observer. -// } -// } - -// public static IObservable ForEachAsync(this IAsyncStreamReader stream, Func> asyncAction) -// { -// return Observable.CreateWithState, Func>>>(Tuple.Create(stream, asyncAction), (state0, observer) => -// { -// var disp = new MultipleAssignmentDisposable(); - -// var worker = new AsyncStreamReaderForEachAsync__(disp, state0.Item1, state0.Item2, observer); -// worker.ConsumeNext(); - -// return disp; -// }); -// } - -// class AsyncStreamReaderForEachAsync__ : IObserver -// { -// readonly MultipleAssignmentDisposable disp; -// readonly IAsyncStreamReader stream; -// readonly Func> asyncAction; -// readonly IObserver rootObserver; - -// int isStopped = 0; - -// public AsyncStreamReaderForEachAsync__(MultipleAssignmentDisposable disp, IAsyncStreamReader stream, Func> asyncAction, IObserver rootObserver) -// { -// this.disp = disp; -// this.stream = stream; -// this.asyncAction = asyncAction; -// this.rootObserver = rootObserver; -// } - -// public void ConsumeNext() -// { -// try -// { -// disp.Disposable = stream.MoveNext().Subscribe(this); -// } -// catch (Exception ex) -// { -// stream.Dispose(); -// rootObserver.OnError(ex); -// } -// } - -// public void OnNext(bool value) -// { -// if (isStopped == 0) -// { -// if (value == true) -// { -// try -// { -// this.disp.Disposable = asyncAction(stream.Current) -// .Subscribe(_ => -// { -// ConsumeNext(); -// }, ex => OnError(ex)); -// } -// catch (Exception ex) -// { -// stream.Dispose(); -// rootObserver.OnError(ex); -// return; -// } - -// ConsumeNext(); // recursive next -// } -// else -// { -// rootObserver.OnCompleted(); -// } -// } -// } - -// public void OnError(Exception error) -// { -// if (Interlocked.Increment(ref isStopped) == 1) -// { -// stream.Dispose(); -// rootObserver.OnError(error); -// } -// } - -// public void OnCompleted() -// { -// } -// } - -// public static IObservable AsObservable(this IAsyncStreamReader stream, bool observeOnMainThread = true, IDisposable streamingResult = null) -// { -// var seq = Observable.CreateWithState, IDisposable>>(Tuple.Create(stream, streamingResult), (state, observer) => -// { -// var disp = new MultipleAssignmentDisposable(); -// var b = new AsyncStreamReaderAsObservable_(disp, state.Item1, observer, state.Item2); -// b.ConsumeNext(); - -// if (state.Item2 == null) -// { -// return disp; -// } -// else -// { -// return StableCompositeDisposable.Create(disp, state.Item2); -// } -// }); - -// return (observeOnMainThread) ? seq.ObserveOnMainThread() : seq; -// } - -// class AsyncStreamReaderAsObservable_ : IObserver -// { -// readonly MultipleAssignmentDisposable disp; -// readonly IAsyncStreamReader stream; -// readonly IObserver rootObserver; -// IDisposable streamingResult; - -// int isStopped = 0; - -// public AsyncStreamReaderAsObservable_(MultipleAssignmentDisposable disp, IAsyncStreamReader stream, IObserver rootObserver, IDisposable streamingResult) -// { -// this.disp = disp; -// this.stream = stream; -// this.rootObserver = rootObserver; -// this.streamingResult = streamingResult ?? Disposable.Empty; -// } - -// public void ConsumeNext() -// { -// try -// { -// disp.Disposable = stream.MoveNext().Subscribe(this); -// } -// catch (Exception ex) -// { -// stream.Dispose(); -// streamingResult.Dispose(); -// rootObserver.OnError(ex); -// } -// } - -// public void OnNext(bool value) -// { -// if (isStopped == 0) -// { -// if (value == true) -// { -// try -// { -// rootObserver.OnNext(stream.Current); -// } -// catch (Exception ex) -// { -// stream.Dispose(); -// streamingResult.Dispose(); -// rootObserver.OnError(ex); -// return; -// } - -// ConsumeNext(); // recursive next -// } -// else -// { -// rootObserver.OnCompleted(); -// } -// } -// } - -// public void OnError(Exception error) -// { -// if (Interlocked.Increment(ref isStopped) == 1) -// { -// stream.Dispose(); -// streamingResult.Dispose(); -// rootObserver.OnError(error); -// } -// } - -// public void OnCompleted() -// { -// // re-use observer. -// } -// } -// } -//} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/CompileStopperDuringPlayMode.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/CompileStopperDuringPlayMode.cs deleted file mode 100644 index 229e19a43..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/CompileStopperDuringPlayMode.cs +++ /dev/null @@ -1,39 +0,0 @@ -#if UNITY_EDITOR -using UnityEditor; - -namespace MagicOnion -{ - //[InitializeOnLoad] - //public class CompileStopperDuringPlayMode - //{ - // static bool isStopped = false; - - // static CompileStopperDuringPlayMode() - // { - // EditorApplication.update += OnEditorUpdate; - // } - - // static void OnEditorUpdate() - // { - // if (!isStopped - // && EditorApplication.isCompiling - // && EditorApplication.isPlaying) - // { - // EditorApplication.LockReloadAssemblies(); - // EditorApplication.playmodeStateChanged += PlayModeChanged; - // isStopped = true; - // } - // } - - // static void PlayModeChanged() - // { - // if (EditorApplication.isPlaying) - // return; - - // EditorApplication.UnlockReloadAssemblies(); - // EditorApplication.playmodeStateChanged -= PlayModeChanged; - // isStopped = false; - // } - //} -} -#endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/CompileStopperDuringPlayMode.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/CompileStopperDuringPlayMode.cs.meta deleted file mode 100644 index 7d7c29cba..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/CompileStopperDuringPlayMode.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f09ae5a1c2ff04a1186ae8f9e0021612 -timeCreated: 1505189122 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/EditorWindowSupportsCallInvoker.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/EditorWindowSupportsCallInvoker.cs deleted file mode 100644 index 6c43c9b06..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/EditorWindowSupportsCallInvoker.cs +++ /dev/null @@ -1,183 +0,0 @@ -#if UNITY_EDITOR - -using Grpc.Core; -using Grpc.Core.Internal; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace MagicOnion -{ - //public class EditorWindowSupportsCallInvoker : CallInvoker - //{ - // readonly CallInvoker unaryInvoker; - // readonly Channel channel; - - // public EditorWindowSupportsCallInvoker(Channel channel) - // { - // this.channel = channel; - // this.unaryInvoker = null; - // } - - // public EditorWindowSupportsCallInvoker(CallInvoker unaryInvoker, Channel channel) - // { - // this.channel = channel; - // this.unaryInvoker = unaryInvoker; - // } - - // /// - // /// Invokes a simple remote call asynchronously. - // /// - // public override AsyncUnaryCall AsyncUnaryCall(Method method, string host, CallOptions options, TRequest request) - // { - // if (unaryInvoker == null) - // { - // var call = CreateCall(method, host, options); - // return Calls.AsyncUnaryCall(call, request); - // } - // else - // { - // return unaryInvoker.AsyncUnaryCall(method, host, options, request); - // } - // } - - // /// - // /// Invokes a server streaming call asynchronously. - // /// In server streaming scenario, client sends on request and server responds with a stream of responses. - // /// - // public override AsyncServerStreamingCall AsyncServerStreamingCall(Method method, string host, CallOptions options, TRequest request) - // { - // var id = MagicOnionWindow.AddSubscription(channel, method.FullName); - - // var call = CreateCall(method, host, options); - // return CustomCalls.AsyncServerStreamingCall(call, request, () => MagicOnionWindow.RemoveSubscription(id), id); - // } - - // /// - // /// Invokes a client streaming call asynchronously. - // /// In client streaming scenario, client sends a stream of requests and server responds with a single response. - // /// - // public override AsyncClientStreamingCall AsyncClientStreamingCall(Method method, string host, CallOptions options) - // { - // var id = MagicOnionWindow.AddSubscription(channel, method.FullName); - - // var call = CreateCall(method, host, options); - // return CustomCalls.AsyncClientStreamingCall(call, () => MagicOnionWindow.RemoveSubscription(id)); - // } - - // /// - // /// Invokes a duplex streaming call asynchronously. - // /// In duplex streaming scenario, client sends a stream of requests and server responds with a stream of responses. - // /// The response stream is completely independent and both side can be sending messages at the same time. - // /// - // public override AsyncDuplexStreamingCall AsyncDuplexStreamingCall(Method method, string host, CallOptions options) - // { - // var id = MagicOnionWindow.AddSubscription(channel, method.FullName); - - // var call = CreateCall(method, host, options); - // return CustomCalls.AsyncDuplexStreamingCall(call, () => MagicOnionWindow.RemoveSubscription(id)); - // } - - // protected virtual CallInvocationDetails CreateCall(Method method, string host, CallOptions options) - // where TRequest : class - // where TResponse : class - // { - // return new CallInvocationDetails(channel, method, host, options); - // } - //} - - //public static class CustomCalls - //{ - // public static AsyncUnaryCall AsyncUnaryCall(CallInvocationDetails call, TRequest req, Action customDisposeAction) - // where TRequest : class - // where TResponse : class - // { - // var asyncCall = new AsyncCall(call); - // var asyncResult = asyncCall.UnaryCallAsync(req); - - // var token = asyncCall.Details.Options.CancellationToken; - // if (token.CanBeCanceled) - // { - // token.Register(() => customDisposeAction()); - // return new AsyncUnaryCall(asyncResult, asyncCall.ResponseHeadersAsync, asyncCall.GetStatus, asyncCall.GetTrailers, asyncCall.Cancel); - // } - // else - // { - // return new AsyncUnaryCall(asyncResult, asyncCall.ResponseHeadersAsync, asyncCall.GetStatus, asyncCall.GetTrailers, () => - // { - // customDisposeAction(); - // asyncCall.Cancel(); - // }); - // } - // } - - // public static AsyncServerStreamingCall AsyncServerStreamingCall(CallInvocationDetails call, TRequest req, Action customDisposeAction, string id) - // where TRequest : class - // where TResponse : class - // { - // var asyncCall = new AsyncCall(call); - // asyncCall.StartServerStreamingCall(req); - // var responseStream = new ClientResponseStream(asyncCall); - - // var token = asyncCall.Details.Options.CancellationToken; - // if (token.CanBeCanceled) - // { - // token.Register(() => - // { - // customDisposeAction(); - // }); - - // return new AsyncServerStreamingCall(responseStream, asyncCall.ResponseHeadersAsync, asyncCall.GetStatus, asyncCall.GetTrailers, asyncCall.Cancel); - // } - // else - // { - // return new AsyncServerStreamingCall(responseStream, asyncCall.ResponseHeadersAsync, asyncCall.GetStatus, asyncCall.GetTrailers, () => { asyncCall.Cancel(); customDisposeAction(); }); - // } - // } - - // public static AsyncClientStreamingCall AsyncClientStreamingCall(CallInvocationDetails call, Action customDisposeAction) - // where TRequest : class - // where TResponse : class - // { - // var asyncCall = new AsyncCall(call); - // var resultTask = asyncCall.ClientStreamingCallAsync(); - // var requestStream = new ClientRequestStream(asyncCall); - - // var token = asyncCall.Details.Options.CancellationToken; - // if (token.CanBeCanceled) - // { - // token.Register(() => customDisposeAction()); - // return new AsyncClientStreamingCall(requestStream, resultTask, asyncCall.ResponseHeadersAsync, asyncCall.GetStatus, asyncCall.GetTrailers, asyncCall.Cancel); - // } - // else - // { - // return new AsyncClientStreamingCall(requestStream, resultTask, asyncCall.ResponseHeadersAsync, asyncCall.GetStatus, asyncCall.GetTrailers, () => { asyncCall.Cancel(); customDisposeAction(); }); - // } - - // } - - // public static AsyncDuplexStreamingCall AsyncDuplexStreamingCall(CallInvocationDetails call, Action customDisposeAction) - // where TRequest : class - // where TResponse : class - // { - // var asyncCall = new AsyncCall(call); - // asyncCall.StartDuplexStreamingCall(); - // var requestStream = new ClientRequestStream(asyncCall); - // var responseStream = new ClientResponseStream(asyncCall); - - // var token = asyncCall.Details.Options.CancellationToken; - // if (token.CanBeCanceled) - // { - // token.Register(() => customDisposeAction()); - // return new AsyncDuplexStreamingCall(requestStream, responseStream, asyncCall.ResponseHeadersAsync, asyncCall.GetStatus, asyncCall.GetTrailers, asyncCall.Cancel); - // } - // else - // { - // return new AsyncDuplexStreamingCall(requestStream, responseStream, asyncCall.ResponseHeadersAsync, asyncCall.GetStatus, asyncCall.GetTrailers, () => { asyncCall.Cancel(); customDisposeAction(); }); - // } - // } - //} -} - -#endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/EditorWindowSupportsCallInvoker.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/EditorWindowSupportsCallInvoker.cs.meta deleted file mode 100644 index b305c4336..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/EditorWindowSupportsCallInvoker.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f6f9d286ef2588246917d9da07401dee -timeCreated: 1490604045 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/MagicOnionWindow.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/MagicOnionWindow.cs deleted file mode 100644 index 645aa1120..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/MagicOnionWindow.cs +++ /dev/null @@ -1,171 +0,0 @@ -//#if UNITY_EDITOR - -//using Grpc.Core; -//using System; -//using System.Collections.Generic; -//using UnityEditor; -//using UnityEngine; - -//namespace MagicOnion -//{ -// public class MagicOnionWindow : EditorWindow -// { -// [MenuItem("Window/MagicOnion")] -// public static void OpenWindow() -// { -// var window = EditorWindow.GetWindow("MagicOnion"); -// window.Show(); -// } - -// static List connectionInfos = new List(); -// static List unregistredSubscriptions = new List(); -// static Dictionary> subscriptions = new Dictionary>(); - -// Vector2 scrollPosition = Vector2.zero; -// long updateCallCount = 0; - -// void Update() -// { -// if (updateCallCount++ % 100 == 0) -// { -// Repaint(); // call OnGUI -// } -// } - -// public static string AddSubscription(Channel channel, string method) -// { -// lock (subscriptions) -// { -// var key = System.Guid.NewGuid().ToString(); - -// var channelRef = new WeakReference(channel); -// subscriptions.Add(key, new KeyValuePair(channelRef, method)); - -// return key; -// } -// } - -// public static void RemoveSubscription(string id) -// { -// lock (subscriptions) -// { -// subscriptions.Remove(id); -// } -// } - -// private void OnGUI() -// { -// var count = GrpcEnvironment.GetCurrentChannels(connectionInfos); - -// scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); -// { -// EditorGUILayout.Space(); -// EditorGUILayout.LabelField("gRPC Channels(" + count + ")", EditorStyles.boldLabel); - -// for (int i = 0; i < count; i++) -// { -// var channel = connectionInfos[i]; - -// using (new EditorGUILayout.HorizontalScope()) -// { -// EditorGUILayout.LabelField(channel.Target); -// if (GUILayout.Button("Shutdown")) -// { -// channel.ShutdownAsync().Subscribe(); -// } -// } - -// EditorGUI.indentLevel += 1; -// { -// using (new EditorGUILayout.HorizontalScope()) -// { -// EditorGUILayout.PrefixLabel("State"); -// EditorGUILayout.LabelField(ChannelStateToString(channel.State)); -// } -// } - -// lock (subscriptions) -// { -// foreach (var item in subscriptions) -// { -// var c = item.Value.Key.Target; -// if (channel == c) -// { -// EditorGUILayout.LabelField(item.Value.Value); -// } -// } -// } - -// EditorGUI.indentLevel -= 1; -// } - -// lock (subscriptions) -// { -// foreach (var item in subscriptions) -// { -// var c = item.Value.Key.Target; -// if (c != null) -// { -// for (int i = 0; i < count; i++) -// { -// var channel = connectionInfos[i]; -// //channel -// if (c == channel) -// { -// goto next; -// } -// } - -// unregistredSubscriptions.Add(item.Value.Value); -// continue; -// } - -// next: -// continue; -// } -// } - -// if (unregistredSubscriptions.Count != 0) -// { -// EditorGUILayout.Space(); -// EditorGUILayout.LabelField("Unfinished Subscriptions", EditorStyles.boldLabel); - -// for (int i = 0; i < unregistredSubscriptions.Count; i++) -// { -// var m = unregistredSubscriptions[i]; -// EditorGUILayout.LabelField(m); -// } - -// unregistredSubscriptions.Clear(); -// } -// } -// EditorGUILayout.EndScrollView(); - -// for (int i = 0; i < connectionInfos.Count; i++) -// { -// connectionInfos[i] = null; // null clear -// } -// } - -// string ChannelStateToString(ChannelState state) -// { -// switch (state) -// { -// case ChannelState.Idle: -// return "Idle"; -// case ChannelState.Connecting: -// return "Connecting"; -// case ChannelState.Ready: -// return "Ready"; -// case ChannelState.TransientFailure: -// return "TransientFailure"; -// case ChannelState.Shutdown: -// return "Shutdown"; -// default: -// return state.ToString(); -// } -// } -// } -//} - -//#endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/MagicOnionWindow.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/MagicOnionWindow.cs.meta deleted file mode 100644 index ece987b9b..000000000 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Unity/MagicOnionWindow.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 5e18c27861d1f334e9e56dfff98f56a1 -timeCreated: 1490604045 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/AsyncLocalShim.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/AsyncLocalShim.cs.meta index ce7afb1c9..74978c567 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/AsyncLocalShim.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/AsyncLocalShim.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5f2f78a24284fca4ca80d432dd73a748 +guid: dca9e0a0d2088cd47b918c6f54739b95 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/DynamicAssembly.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/DynamicAssembly.cs index dc83b8e0a..ebc5cfd57 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/DynamicAssembly.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/DynamicAssembly.cs @@ -6,7 +6,12 @@ namespace MagicOnion.Utils { - internal class DynamicAssembly +#if ENABLE_SAVE_ASSEMBLY + public +#else + internal +#endif + class DynamicAssembly { readonly object gate = new object(); diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/DynamicAssembly.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/DynamicAssembly.cs.meta index c5421f6de..d39cd5f93 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/DynamicAssembly.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/DynamicAssembly.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 32e524a9a7c35ef41b8749104a0e7aa4 +guid: 9d0b2ee1dc31faa43811b3a203a3fc16 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/FNV1A32.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/FNV1A32.cs.meta index a8502aed2..81f53b141 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/FNV1A32.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/FNV1A32.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 30ed9fa60f808fd41a398512b3bf70c8 +guid: 4257d32e13eee874493c07bf4d4bfc8f MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/ILGeneratorExtensions.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/ILGeneratorExtensions.cs.meta index 168b3ac53..259c9140b 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/ILGeneratorExtensions.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/ILGeneratorExtensions.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9b7817e29b9e7f04a9b1e5d0809f5837 +guid: 8d05c89a473ec164b8dc9a918d5c57d5 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/ReflectionExtensions.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/ReflectionExtensions.cs.meta index 97a0ed9f2..8a7359719 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/ReflectionExtensions.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/ReflectionExtensions.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 467fb2ac0b5de594d9ce55739910026e +guid: 251abd13d00009a44979847381ea168f MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/ReservedWhenAllPromise.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/ReservedWhenAllPromise.cs.meta index d2a66e2fa..3a2d39e67 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/ReservedWhenAllPromise.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/ReservedWhenAllPromise.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 10066d7336ec11840b429c9c840e536e +guid: 9446850abcb2fa44e9499655da1e0cbb MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/TaskCompletionSourceEx.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/TaskCompletionSourceEx.cs.meta index f7e8f1704..d186f7d1c 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/TaskCompletionSourceEx.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/TaskCompletionSourceEx.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 56f003934417e734488d218e385b72c7 +guid: 1035ff4255061dd45be4535ae9d8931f MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/TaskEx.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/TaskEx.cs.meta index d2eae5aa6..32560da4b 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/TaskEx.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/TaskEx.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 495485d799d097f4885d9e70337a685c +guid: 536fcbe91a4c2dc4a81b84a43e4b3bab MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/UniqueHashDictionary.cs.meta b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/UniqueHashDictionary.cs.meta index 874e2d685..ae113b201 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/UniqueHashDictionary.cs.meta +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MagicOnion/Utils/UniqueHashDictionary.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1491530b3f8aafb42ac95d9781083d7e +guid: ea92a6bb508a8d744897743fe5741f4b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Attributes.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Attributes.cs index 069ab2737..8a9d8705b 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Attributes.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Attributes.cs @@ -1,75 +1,75 @@ -using System; - -namespace MessagePack -{ - [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = true)] - public class MessagePackObjectAttribute : Attribute - { - public bool KeyAsPropertyName { get; private set; } - - public MessagePackObjectAttribute(bool keyAsPropertyName = false) - { - this.KeyAsPropertyName = keyAsPropertyName; - } - } - - [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = true)] - public class KeyAttribute : Attribute - { - public int? IntKey { get; private set; } - public string StringKey { get; private set; } - - public KeyAttribute(int x) - { - this.IntKey = x; - } - - public KeyAttribute(string x) - { - this.StringKey = x; - } - } - - [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = true)] - public class IgnoreMemberAttribute : Attribute - { - } - - [AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class, AllowMultiple = true, Inherited = false)] - public class UnionAttribute : Attribute - { - public int Key { get; private set; } - public Type SubType { get; private set; } - - public UnionAttribute(int key, Type subType) - { - this.Key = key; - this.SubType = subType; - } - } - - [AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = true)] - public class SerializationConstructorAttribute : Attribute - { - - } - - - [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface | AttributeTargets.Enum | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)] - public class MessagePackFormatterAttribute : Attribute - { - public Type FormatterType { get; private set; } - public object[] Arguments { get; private set; } - - public MessagePackFormatterAttribute(Type formatterType) - { - this.FormatterType = formatterType; - } - - public MessagePackFormatterAttribute(Type formatterType, params object[] arguments) - { - this.FormatterType = formatterType; - this.Arguments = arguments; - } - } +using System; + +namespace MessagePack +{ + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = true)] + public class MessagePackObjectAttribute : Attribute + { + public bool KeyAsPropertyName { get; private set; } + + public MessagePackObjectAttribute(bool keyAsPropertyName = false) + { + this.KeyAsPropertyName = keyAsPropertyName; + } + } + + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class KeyAttribute : Attribute + { + public int? IntKey { get; private set; } + public string StringKey { get; private set; } + + public KeyAttribute(int x) + { + this.IntKey = x; + } + + public KeyAttribute(string x) + { + this.StringKey = x; + } + } + + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class IgnoreMemberAttribute : Attribute + { + } + + [AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class, AllowMultiple = true, Inherited = false)] + public class UnionAttribute : Attribute + { + public int Key { get; private set; } + public Type SubType { get; private set; } + + public UnionAttribute(int key, Type subType) + { + this.Key = key; + this.SubType = subType; + } + } + + [AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = true)] + public class SerializationConstructorAttribute : Attribute + { + + } + + + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface | AttributeTargets.Enum | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)] + public class MessagePackFormatterAttribute : Attribute + { + public Type FormatterType { get; private set; } + public object[] Arguments { get; private set; } + + public MessagePackFormatterAttribute(Type formatterType) + { + this.FormatterType = formatterType; + } + + public MessagePackFormatterAttribute(Type formatterType, params object[] arguments) + { + this.FormatterType = formatterType; + this.Arguments = arguments; + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/FloatBits.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/FloatBits.cs index 46dee4dd3..814ea9d3d 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/FloatBits.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/FloatBits.cs @@ -1,118 +1,118 @@ -using System; -using System.Runtime.InteropServices; - -namespace MessagePack -{ - // safe accessor of Single/Double's underlying byte. - // This code is borrowed from MsgPack-Cli https://github.com/msgpack/msgpack-cli - - [StructLayout(LayoutKind.Explicit)] - internal struct Float32Bits - { - [FieldOffset(0)] - public readonly float Value; - - [FieldOffset(0)] - public readonly Byte Byte0; - - [FieldOffset(1)] - public readonly Byte Byte1; - - [FieldOffset(2)] - public readonly Byte Byte2; - - [FieldOffset(3)] - public readonly Byte Byte3; - - public Float32Bits(float value) - { - this = default(Float32Bits); - this.Value = value; - } - - public Float32Bits(byte[] bigEndianBytes, int offset) - { - this = default(Float32Bits); - - if (BitConverter.IsLittleEndian) - { - this.Byte0 = bigEndianBytes[offset + 3]; - this.Byte1 = bigEndianBytes[offset + 2]; - this.Byte2 = bigEndianBytes[offset + 1]; - this.Byte3 = bigEndianBytes[offset]; - } - else - { - this.Byte0 = bigEndianBytes[offset]; - this.Byte1 = bigEndianBytes[offset + 1]; - this.Byte2 = bigEndianBytes[offset + 2]; - this.Byte3 = bigEndianBytes[offset + 3]; - } - } - } - - [StructLayout(LayoutKind.Explicit)] - internal struct Float64Bits - { - [FieldOffset(0)] - public readonly double Value; - - [FieldOffset(0)] - public readonly Byte Byte0; - - [FieldOffset(1)] - public readonly Byte Byte1; - - [FieldOffset(2)] - public readonly Byte Byte2; - - [FieldOffset(3)] - public readonly Byte Byte3; - - [FieldOffset(4)] - public readonly Byte Byte4; - - [FieldOffset(5)] - public readonly Byte Byte5; - - [FieldOffset(6)] - public readonly Byte Byte6; - - [FieldOffset(7)] - public readonly Byte Byte7; - - public Float64Bits(double value) - { - this = default(Float64Bits); - this.Value = value; - } - - public Float64Bits(byte[] bigEndianBytes, int offset) - { - this = default(Float64Bits); - - if (BitConverter.IsLittleEndian) - { - this.Byte0 = bigEndianBytes[offset + 7]; - this.Byte1 = bigEndianBytes[offset + 6]; - this.Byte2 = bigEndianBytes[offset + 5]; - this.Byte3 = bigEndianBytes[offset + 4]; - this.Byte4 = bigEndianBytes[offset + 3]; - this.Byte5 = bigEndianBytes[offset + 2]; - this.Byte6 = bigEndianBytes[offset + 1]; - this.Byte7 = bigEndianBytes[offset]; - } - else - { - this.Byte0 = bigEndianBytes[offset]; - this.Byte1 = bigEndianBytes[offset + 1]; - this.Byte2 = bigEndianBytes[offset + 2]; - this.Byte3 = bigEndianBytes[offset + 3]; - this.Byte4 = bigEndianBytes[offset + 4]; - this.Byte5 = bigEndianBytes[offset + 5]; - this.Byte6 = bigEndianBytes[offset + 6]; - this.Byte7 = bigEndianBytes[offset + 7]; - } - } - } -} +using System; +using System.Runtime.InteropServices; + +namespace MessagePack +{ + // safe accessor of Single/Double's underlying byte. + // This code is borrowed from MsgPack-Cli https://github.com/msgpack/msgpack-cli + + [StructLayout(LayoutKind.Explicit)] + internal struct Float32Bits + { + [FieldOffset(0)] + public readonly float Value; + + [FieldOffset(0)] + public readonly Byte Byte0; + + [FieldOffset(1)] + public readonly Byte Byte1; + + [FieldOffset(2)] + public readonly Byte Byte2; + + [FieldOffset(3)] + public readonly Byte Byte3; + + public Float32Bits(float value) + { + this = default(Float32Bits); + this.Value = value; + } + + public Float32Bits(byte[] bigEndianBytes, int offset) + { + this = default(Float32Bits); + + if (BitConverter.IsLittleEndian) + { + this.Byte0 = bigEndianBytes[offset + 3]; + this.Byte1 = bigEndianBytes[offset + 2]; + this.Byte2 = bigEndianBytes[offset + 1]; + this.Byte3 = bigEndianBytes[offset]; + } + else + { + this.Byte0 = bigEndianBytes[offset]; + this.Byte1 = bigEndianBytes[offset + 1]; + this.Byte2 = bigEndianBytes[offset + 2]; + this.Byte3 = bigEndianBytes[offset + 3]; + } + } + } + + [StructLayout(LayoutKind.Explicit)] + internal struct Float64Bits + { + [FieldOffset(0)] + public readonly double Value; + + [FieldOffset(0)] + public readonly Byte Byte0; + + [FieldOffset(1)] + public readonly Byte Byte1; + + [FieldOffset(2)] + public readonly Byte Byte2; + + [FieldOffset(3)] + public readonly Byte Byte3; + + [FieldOffset(4)] + public readonly Byte Byte4; + + [FieldOffset(5)] + public readonly Byte Byte5; + + [FieldOffset(6)] + public readonly Byte Byte6; + + [FieldOffset(7)] + public readonly Byte Byte7; + + public Float64Bits(double value) + { + this = default(Float64Bits); + this.Value = value; + } + + public Float64Bits(byte[] bigEndianBytes, int offset) + { + this = default(Float64Bits); + + if (BitConverter.IsLittleEndian) + { + this.Byte0 = bigEndianBytes[offset + 7]; + this.Byte1 = bigEndianBytes[offset + 6]; + this.Byte2 = bigEndianBytes[offset + 5]; + this.Byte3 = bigEndianBytes[offset + 4]; + this.Byte4 = bigEndianBytes[offset + 3]; + this.Byte5 = bigEndianBytes[offset + 2]; + this.Byte6 = bigEndianBytes[offset + 1]; + this.Byte7 = bigEndianBytes[offset]; + } + else + { + this.Byte0 = bigEndianBytes[offset]; + this.Byte1 = bigEndianBytes[offset + 1]; + this.Byte2 = bigEndianBytes[offset + 2]; + this.Byte3 = bigEndianBytes[offset + 3]; + this.Byte4 = bigEndianBytes[offset + 4]; + this.Byte5 = bigEndianBytes[offset + 5]; + this.Byte6 = bigEndianBytes[offset + 6]; + this.Byte7 = bigEndianBytes[offset + 7]; + } + } + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/CollectionFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/CollectionFormatter.cs index 870e94729..1317adf69 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/CollectionFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/CollectionFormatter.cs @@ -1,1072 +1,1072 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; - -#if NETSTANDARD -using System.Collections.Concurrent; -#endif - -namespace MessagePack.Formatters -{ - public sealed class ArrayFormatter : IMessagePackFormatter - { - public int Serialize(ref byte[] bytes, int offset, T[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - - for (int i = 0; i < value.Length; i++) - { - offset += formatter.Serialize(ref bytes, offset, value[i], formatterResolver); - } - - return offset - startOffset; - } - } - - public T[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new T[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class ByteArraySegmentFormatter : IMessagePackFormatter> - { - public static readonly ByteArraySegmentFormatter Instance = new ByteArraySegmentFormatter(); - - ByteArraySegmentFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, ArraySegment value, IFormatterResolver formatterResolver) - { - if (value.Array == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteBytes(ref bytes, offset, value.Array, value.Offset, value.Count); - } - } - - public ArraySegment Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return default(ArraySegment); - } - else - { - // use ReadBytesSegment? But currently straem api uses memory pool so can't save arraysegment... - var binary = MessagePackBinary.ReadBytes(bytes, offset, out readSize); - return new ArraySegment(binary, 0, binary.Length); - } - } - } - - public sealed class ArraySegmentFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, ArraySegment value, IFormatterResolver formatterResolver) - { - if (value.Array == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Count); - - var array = value.Array; - for (int i = 0; i < value.Count; i++) - { - var item = array[value.Offset + i]; - offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); - } - - return offset - startOffset; - } - } - - public ArraySegment Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return default(ArraySegment); - } - else - { - var array = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - return new ArraySegment(array, 0, array.Length); - } - } - } - - // List is popular format, should avoid abstraction. - public sealed class ListFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, List value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - var c = value.Count; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, c); - - for (int i = 0; i < c; i++) - { - offset += formatter.Serialize(ref bytes, offset, value[i], formatterResolver); - } - - return offset - startOffset; - } - } - - public List Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var list = new List(len); - for (int i = 0; i < len; i++) - { - list.Add(formatter.Deserialize(bytes, offset, formatterResolver, out readSize)); - offset += readSize; - } - readSize = offset - startOffset; - return list; - } - } - } - - public abstract class CollectionFormatterBase : IMessagePackFormatter - where TCollection : IEnumerable - where TEnumerator : IEnumerator - { - public int Serialize(ref byte[] bytes, int offset, TCollection value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - // Optimize iteration(array is fastest) - var array = value as TElement[]; - if (array != null) - { - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, array.Length); - - foreach (var item in array) - { - offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); - } - - return offset - startOffset; - } - else - { - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - // knows count or not. - var seqCount = GetCount(value); - if (seqCount != null) - { - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, seqCount.Value); - - // Unity's foreach struct enumerator causes boxing so iterate manually. - var e = GetSourceEnumerator(value); - try - { - while (e.MoveNext()) - { -#if NETSTANDARD - offset += formatter.Serialize(ref bytes, offset, e.Current, formatterResolver); -#else - offset += formatter.Serialize(ref bytes, (int)offset, (TElement)e.Current, (IFormatterResolver)formatterResolver); -#endif - } - } - finally - { - e.Dispose(); - } - - return offset - startOffset; - } - else - { - // write message first -> open header space -> write header - var writeStarOffset = offset; - - var count = 0; - var moveCount = 0; - - // count = 16 <= 65535, header len is "3" so choose default space. - offset += 3; - - var e = GetSourceEnumerator(value); - try - { - while (e.MoveNext()) - { - count++; -#if NETSTANDARD - var writeSize = formatter.Serialize(ref bytes, offset, e.Current, formatterResolver); -#else - var writeSize = formatter.Serialize(ref bytes, (int)offset, (TElement)e.Current, (IFormatterResolver)formatterResolver); -#endif - moveCount += writeSize; - offset += writeSize; - } - } - finally - { - e.Dispose(); - } - - var headerLength = MessagePackBinary.GetArrayHeaderLength(count); - if (headerLength != 3) - { - if (headerLength == 1) offset -= 2; // 1 - else offset += 2; // 5 - - MessagePackBinary.EnsureCapacity(ref bytes, offset, headerLength); - Buffer.BlockCopy(bytes, writeStarOffset + 3, bytes, writeStarOffset + headerLength, moveCount); - } - MessagePackBinary.WriteArrayHeader(ref bytes, writeStarOffset, count); - - return offset - startOffset; - } - } - } - } - - public TCollection Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return default(TCollection); - } - else - { - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var list = Create(len); - for (int i = 0; i < len; i++) - { - Add(list, i, formatter.Deserialize(bytes, offset, formatterResolver, out readSize)); - offset += readSize; - } - readSize = offset - startOffset; - - return Complete(list); - } - } - - // abstraction for serialize - protected virtual int? GetCount(TCollection sequence) - { - var collection = sequence as ICollection; - if (collection != null) - { - return collection.Count; - } -#if NETSTANDARD - else - { - var c2 = sequence as IReadOnlyCollection; - if (c2 != null) - { - return c2.Count; - } - } -#endif - - return null; - } - - // Some collections can use struct iterator, this is optimization path - protected abstract TEnumerator GetSourceEnumerator(TCollection source); - - // abstraction for deserialize - protected abstract TIntermediate Create(int count); - protected abstract void Add(TIntermediate collection, int index, TElement value); - protected abstract TCollection Complete(TIntermediate intermediateCollection); - } - - public abstract class CollectionFormatterBase : CollectionFormatterBase, TCollection> - where TCollection : IEnumerable - { - protected override IEnumerator GetSourceEnumerator(TCollection source) - { - return source.GetEnumerator(); - } - } - - public abstract class CollectionFormatterBase : CollectionFormatterBase - where TCollection : IEnumerable - { - protected sealed override TCollection Complete(TCollection intermediateCollection) - { - return intermediateCollection; - } - } - - public sealed class GenericCollectionFormatter : CollectionFormatterBase - where TCollection : ICollection, new() - { - protected override TCollection Create(int count) - { - return new TCollection(); - } - - protected override void Add(TCollection collection, int index, TElement value) - { - collection.Add(value); - } - } - - public sealed class LinkedListFormatter : CollectionFormatterBase, LinkedList.Enumerator, LinkedList> - { - protected override void Add(LinkedList collection, int index, T value) - { - collection.AddLast(value); - } - - protected override LinkedList Complete(LinkedList intermediateCollection) - { - return intermediateCollection; - } - - protected override LinkedList Create(int count) - { - return new LinkedList(); - } - - protected override LinkedList.Enumerator GetSourceEnumerator(LinkedList source) - { - return source.GetEnumerator(); - } - } - - public sealed class QeueueFormatter : CollectionFormatterBase, Queue.Enumerator, Queue> - { - protected override int? GetCount(Queue sequence) - { - return sequence.Count; - } - - protected override void Add(Queue collection, int index, T value) - { - collection.Enqueue(value); - } - - protected override Queue Create(int count) - { - return new Queue(count); - } - - protected override Queue.Enumerator GetSourceEnumerator(Queue source) - { - return source.GetEnumerator(); - } - - protected override Queue Complete(Queue intermediateCollection) - { - return intermediateCollection; - } - } - - // should deserialize reverse order. - public sealed class StackFormatter : CollectionFormatterBase.Enumerator, Stack> - { - protected override int? GetCount(Stack sequence) - { - return sequence.Count; - } - - protected override void Add(T[] collection, int index, T value) - { - // add reverse - collection[collection.Length - 1 - index] = value; - } - - protected override T[] Create(int count) - { - return new T[count]; - } - - protected override Stack.Enumerator GetSourceEnumerator(Stack source) - { - return source.GetEnumerator(); - } - - protected override Stack Complete(T[] intermediateCollection) - { - return new Stack(intermediateCollection); - } - } - - public sealed class HashSetFormatter : CollectionFormatterBase, HashSet.Enumerator, HashSet> - { - protected override int? GetCount(HashSet sequence) - { - return sequence.Count; - } - - protected override void Add(HashSet collection, int index, T value) - { - collection.Add(value); - } - - protected override HashSet Complete(HashSet intermediateCollection) - { - return intermediateCollection; - } - - protected override HashSet Create(int count) - { - return new HashSet(); - } - - protected override HashSet.Enumerator GetSourceEnumerator(HashSet source) - { - return source.GetEnumerator(); - } - } - - public sealed class ReadOnlyCollectionFormatter : CollectionFormatterBase> - { - protected override void Add(T[] collection, int index, T value) - { - collection[index] = value; - } - - protected override ReadOnlyCollection Complete(T[] intermediateCollection) - { - return new ReadOnlyCollection(intermediateCollection); - } - - protected override T[] Create(int count) - { - return new T[count]; - } - } - - public sealed class InterfaceListFormatter : CollectionFormatterBase> - { - protected override void Add(T[] collection, int index, T value) - { - collection[index] = value; - } - - protected override T[] Create(int count) - { - return new T[count]; - } - - protected override IList Complete(T[] intermediateCollection) - { - return intermediateCollection; - } - } - - public sealed class InterfaceCollectionFormatter : CollectionFormatterBase> - { - protected override void Add(T[] collection, int index, T value) - { - collection[index] = value; - } - - protected override T[] Create(int count) - { - return new T[count]; - } - - protected override ICollection Complete(T[] intermediateCollection) - { - return intermediateCollection; - } - } - - public sealed class InterfaceEnumerableFormatter : CollectionFormatterBase> - { - protected override void Add(T[] collection, int index, T value) - { - collection[index] = value; - } - - protected override T[] Create(int count) - { - return new T[count]; - } - - protected override IEnumerable Complete(T[] intermediateCollection) - { - return intermediateCollection; - } - } - - // [Key, [Array]] - public sealed class InterfaceGroupingFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, IGrouping value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Key, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify>().Serialize(ref bytes, offset, value, formatterResolver); - return offset - startOffset; - } - } - - public IGrouping Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - if (count != 2) throw new InvalidOperationException("Invalid Grouping format."); - - var key = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - var value = formatterResolver.GetFormatterWithVerify>().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new Grouping(key, value); - } - } - } - - public sealed class InterfaceLookupFormatter : CollectionFormatterBase, Dictionary>, ILookup> - { - protected override void Add(Dictionary> collection, int index, IGrouping value) - { - collection.Add(value.Key, value); - } - - protected override ILookup Complete(Dictionary> intermediateCollection) - { - return new Lookup(intermediateCollection); - } - - protected override Dictionary> Create(int count) - { - return new Dictionary>(count); - } - } - - class Grouping : IGrouping - { - readonly TKey key; - readonly IEnumerable elements; - - public Grouping(TKey key, IEnumerable elements) - { - this.key = key; - this.elements = elements; - } - - public TKey Key - { - get - { - return key; - } - } - - public IEnumerator GetEnumerator() - { - return elements.GetEnumerator(); - } - - IEnumerator IEnumerable.GetEnumerator() - { - return elements.GetEnumerator(); - } - } - - class Lookup : ILookup - { - readonly Dictionary> groupings; - - public Lookup(Dictionary> groupings) - { - this.groupings = groupings; - } - - public IEnumerable this[TKey key] - { - get - { - return groupings[key]; - } - } - - public int Count - { - get - { - return groupings.Count; - } - } - - public bool Contains(TKey key) - { - return groupings.ContainsKey(key); - } - - public IEnumerator> GetEnumerator() - { - return groupings.Values.GetEnumerator(); - } - - IEnumerator IEnumerable.GetEnumerator() - { - return groupings.Values.GetEnumerator(); - } - } - - // NonGenerics - - public sealed class NonGenericListFormatter : IMessagePackFormatter - where T : class, IList, new() - { - public int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver) - { - if (value == null) - { - MessagePackBinary.WriteNil(ref bytes, offset); - return 1; - } - - var formatter = formatterResolver.GetFormatterWithVerify(); - var startOffset = offset; - - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Count); - foreach (var item in value) - { - offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); - } - - return offset - startOffset; - } - - public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return default(T); - } - - var formatter = formatterResolver.GetFormatterWithVerify(); - var startOffset = offset; - - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var list = new T(); - for (int i = 0; i < count; i++) - { - list.Add(formatter.Deserialize(bytes, offset, formatterResolver, out readSize)); - offset += readSize; - } - - readSize = offset - startOffset; - return list; - } - } - - public sealed class NonGenericInterfaceListFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new NonGenericInterfaceListFormatter(); - - NonGenericInterfaceListFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, IList value, IFormatterResolver formatterResolver) - { - if (value == null) - { - MessagePackBinary.WriteNil(ref bytes, offset); - return 1; - } - - var formatter = formatterResolver.GetFormatterWithVerify(); - var startOffset = offset; - - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Count); - foreach (var item in value) - { - offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); - } - - return offset - startOffset; - } - - public IList Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return default(IList); - } - - var formatter = formatterResolver.GetFormatterWithVerify(); - var startOffset = offset; - - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var list = new object[count]; - for (int i = 0; i < count; i++) - { - list[i] = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - } - - readSize = offset - startOffset; - return list; - } - } - - public sealed class NonGenericDictionaryFormatter : IMessagePackFormatter - where T : class, IDictionary, new() - { - public int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver) - { - if (value == null) - { - MessagePackBinary.WriteNil(ref bytes, offset); - return 1; - } - - var formatter = formatterResolver.GetFormatterWithVerify(); - var startOffset = offset; - - offset += MessagePackBinary.WriteMapHeader(ref bytes, offset, value.Count); - foreach (DictionaryEntry item in value) - { - offset += formatter.Serialize(ref bytes, offset, item.Key, formatterResolver); - offset += formatter.Serialize(ref bytes, offset, item.Value, formatterResolver); - } - - return offset - startOffset; - } - - public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - - var formatter = formatterResolver.GetFormatterWithVerify(); - var startOffset = offset; - - var count = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); - offset += readSize; - - var dict = new T(); - for (int i = 0; i < count; i++) - { - var key = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var value = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - dict.Add(key, value); - } - - readSize = offset - startOffset; - return dict; - } - } - - public sealed class NonGenericInterfaceDictionaryFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new NonGenericInterfaceDictionaryFormatter(); - - NonGenericInterfaceDictionaryFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, IDictionary value, IFormatterResolver formatterResolver) - { - if (value == null) - { - MessagePackBinary.WriteNil(ref bytes, offset); - return 1; - } - - var formatter = formatterResolver.GetFormatterWithVerify(); - var startOffset = offset; - - offset += MessagePackBinary.WriteMapHeader(ref bytes, offset, value.Count); - foreach (DictionaryEntry item in value) - { - offset += formatter.Serialize(ref bytes, offset, item.Key, formatterResolver); - offset += formatter.Serialize(ref bytes, offset, item.Value, formatterResolver); - } - - return offset - startOffset; - } - - public IDictionary Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - - var formatter = formatterResolver.GetFormatterWithVerify(); - var startOffset = offset; - - var count = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); - offset += readSize; - - var dict = new Dictionary(count); - for (int i = 0; i < count; i++) - { - var key = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var value = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - dict.Add(key, value); - } - - readSize = offset - startOffset; - return dict; - } - } - -#if NETSTANDARD - - public sealed class ObservableCollectionFormatter : CollectionFormatterBase> - { - protected override void Add(ObservableCollection collection, int index, T value) - { - collection.Add(value); - } - - protected override ObservableCollection Create(int count) - { - return new ObservableCollection(); - } - } - - public sealed class ReadOnlyObservableCollectionFormatter : CollectionFormatterBase, ReadOnlyObservableCollection> - { - protected override void Add(ObservableCollection collection, int index, T value) - { - collection.Add(value); - } - - protected override ObservableCollection Create(int count) - { - return new ObservableCollection(); - } - - protected override ReadOnlyObservableCollection Complete(ObservableCollection intermediateCollection) - { - return new ReadOnlyObservableCollection(intermediateCollection); - } - } - - public sealed class InterfaceReadOnlyListFormatter : CollectionFormatterBase> - { - protected override void Add(T[] collection, int index, T value) - { - collection[index] = value; - } - - protected override T[] Create(int count) - { - return new T[count]; - } - - protected override IReadOnlyList Complete(T[] intermediateCollection) - { - return intermediateCollection; - } - } - - public sealed class InterfaceReadOnlyCollectionFormatter : CollectionFormatterBase> - { - protected override void Add(T[] collection, int index, T value) - { - collection[index] = value; - } - - protected override T[] Create(int count) - { - return new T[count]; - } - - protected override IReadOnlyCollection Complete(T[] intermediateCollection) - { - return intermediateCollection; - } - } - - public sealed class InterfaceSetFormatter : CollectionFormatterBase, ISet> - { - protected override void Add(HashSet collection, int index, T value) - { - collection.Add(value); - } - - protected override ISet Complete(HashSet intermediateCollection) - { - return intermediateCollection; - } - - protected override HashSet Create(int count) - { - return new HashSet(); - } - } - - public sealed class ConcurrentBagFormatter : CollectionFormatterBase> - { - protected override int? GetCount(ConcurrentBag sequence) - { - return sequence.Count; - } - - protected override void Add(ConcurrentBag collection, int index, T value) - { - collection.Add(value); - } - - protected override ConcurrentBag Create(int count) - { - return new ConcurrentBag(); - } - } - - public sealed class ConcurrentQueueFormatter : CollectionFormatterBase> - { - protected override int? GetCount(ConcurrentQueue sequence) - { - return sequence.Count; - } - - protected override void Add(ConcurrentQueue collection, int index, T value) - { - collection.Enqueue(value); - } - - protected override ConcurrentQueue Create(int count) - { - return new ConcurrentQueue(); - } - } - - public sealed class ConcurrentStackFormatter : CollectionFormatterBase> - { - protected override int? GetCount(ConcurrentStack sequence) - { - return sequence.Count; - } - - protected override void Add(T[] collection, int index, T value) - { - // add reverse - collection[collection.Length - 1 - index] = value; - } - - protected override T[] Create(int count) - { - return new T[count]; - } - - protected override ConcurrentStack Complete(T[] intermediateCollection) - { - return new ConcurrentStack(intermediateCollection); - } - } - -#endif -} +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; + +#if NETSTANDARD +using System.Collections.Concurrent; +#endif + +namespace MessagePack.Formatters +{ + public sealed class ArrayFormatter : IMessagePackFormatter + { + public int Serialize(ref byte[] bytes, int offset, T[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + + for (int i = 0; i < value.Length; i++) + { + offset += formatter.Serialize(ref bytes, offset, value[i], formatterResolver); + } + + return offset - startOffset; + } + } + + public T[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new T[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class ByteArraySegmentFormatter : IMessagePackFormatter> + { + public static readonly ByteArraySegmentFormatter Instance = new ByteArraySegmentFormatter(); + + ByteArraySegmentFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, ArraySegment value, IFormatterResolver formatterResolver) + { + if (value.Array == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteBytes(ref bytes, offset, value.Array, value.Offset, value.Count); + } + } + + public ArraySegment Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return default(ArraySegment); + } + else + { + // use ReadBytesSegment? But currently straem api uses memory pool so can't save arraysegment... + var binary = MessagePackBinary.ReadBytes(bytes, offset, out readSize); + return new ArraySegment(binary, 0, binary.Length); + } + } + } + + public sealed class ArraySegmentFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, ArraySegment value, IFormatterResolver formatterResolver) + { + if (value.Array == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Count); + + var array = value.Array; + for (int i = 0; i < value.Count; i++) + { + var item = array[value.Offset + i]; + offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); + } + + return offset - startOffset; + } + } + + public ArraySegment Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return default(ArraySegment); + } + else + { + var array = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + return new ArraySegment(array, 0, array.Length); + } + } + } + + // List is popular format, should avoid abstraction. + public sealed class ListFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, List value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + var c = value.Count; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, c); + + for (int i = 0; i < c; i++) + { + offset += formatter.Serialize(ref bytes, offset, value[i], formatterResolver); + } + + return offset - startOffset; + } + } + + public List Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var list = new List(len); + for (int i = 0; i < len; i++) + { + list.Add(formatter.Deserialize(bytes, offset, formatterResolver, out readSize)); + offset += readSize; + } + readSize = offset - startOffset; + return list; + } + } + } + + public abstract class CollectionFormatterBase : IMessagePackFormatter + where TCollection : IEnumerable + where TEnumerator : IEnumerator + { + public int Serialize(ref byte[] bytes, int offset, TCollection value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + // Optimize iteration(array is fastest) + var array = value as TElement[]; + if (array != null) + { + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, array.Length); + + foreach (var item in array) + { + offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); + } + + return offset - startOffset; + } + else + { + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + // knows count or not. + var seqCount = GetCount(value); + if (seqCount != null) + { + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, seqCount.Value); + + // Unity's foreach struct enumerator causes boxing so iterate manually. + var e = GetSourceEnumerator(value); + try + { + while (e.MoveNext()) + { +#if NETSTANDARD + offset += formatter.Serialize(ref bytes, offset, e.Current, formatterResolver); +#else + offset += formatter.Serialize(ref bytes, (int)offset, (TElement)e.Current, (IFormatterResolver)formatterResolver); +#endif + } + } + finally + { + e.Dispose(); + } + + return offset - startOffset; + } + else + { + // write message first -> open header space -> write header + var writeStarOffset = offset; + + var count = 0; + var moveCount = 0; + + // count = 16 <= 65535, header len is "3" so choose default space. + offset += 3; + + var e = GetSourceEnumerator(value); + try + { + while (e.MoveNext()) + { + count++; +#if NETSTANDARD + var writeSize = formatter.Serialize(ref bytes, offset, e.Current, formatterResolver); +#else + var writeSize = formatter.Serialize(ref bytes, (int)offset, (TElement)e.Current, (IFormatterResolver)formatterResolver); +#endif + moveCount += writeSize; + offset += writeSize; + } + } + finally + { + e.Dispose(); + } + + var headerLength = MessagePackBinary.GetArrayHeaderLength(count); + if (headerLength != 3) + { + if (headerLength == 1) offset -= 2; // 1 + else offset += 2; // 5 + + MessagePackBinary.EnsureCapacity(ref bytes, offset, headerLength); + Buffer.BlockCopy(bytes, writeStarOffset + 3, bytes, writeStarOffset + headerLength, moveCount); + } + MessagePackBinary.WriteArrayHeader(ref bytes, writeStarOffset, count); + + return offset - startOffset; + } + } + } + } + + public TCollection Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return default(TCollection); + } + else + { + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var list = Create(len); + for (int i = 0; i < len; i++) + { + Add(list, i, formatter.Deserialize(bytes, offset, formatterResolver, out readSize)); + offset += readSize; + } + readSize = offset - startOffset; + + return Complete(list); + } + } + + // abstraction for serialize + protected virtual int? GetCount(TCollection sequence) + { + var collection = sequence as ICollection; + if (collection != null) + { + return collection.Count; + } +#if NETSTANDARD + else + { + var c2 = sequence as IReadOnlyCollection; + if (c2 != null) + { + return c2.Count; + } + } +#endif + + return null; + } + + // Some collections can use struct iterator, this is optimization path + protected abstract TEnumerator GetSourceEnumerator(TCollection source); + + // abstraction for deserialize + protected abstract TIntermediate Create(int count); + protected abstract void Add(TIntermediate collection, int index, TElement value); + protected abstract TCollection Complete(TIntermediate intermediateCollection); + } + + public abstract class CollectionFormatterBase : CollectionFormatterBase, TCollection> + where TCollection : IEnumerable + { + protected override IEnumerator GetSourceEnumerator(TCollection source) + { + return source.GetEnumerator(); + } + } + + public abstract class CollectionFormatterBase : CollectionFormatterBase + where TCollection : IEnumerable + { + protected sealed override TCollection Complete(TCollection intermediateCollection) + { + return intermediateCollection; + } + } + + public sealed class GenericCollectionFormatter : CollectionFormatterBase + where TCollection : ICollection, new() + { + protected override TCollection Create(int count) + { + return new TCollection(); + } + + protected override void Add(TCollection collection, int index, TElement value) + { + collection.Add(value); + } + } + + public sealed class LinkedListFormatter : CollectionFormatterBase, LinkedList.Enumerator, LinkedList> + { + protected override void Add(LinkedList collection, int index, T value) + { + collection.AddLast(value); + } + + protected override LinkedList Complete(LinkedList intermediateCollection) + { + return intermediateCollection; + } + + protected override LinkedList Create(int count) + { + return new LinkedList(); + } + + protected override LinkedList.Enumerator GetSourceEnumerator(LinkedList source) + { + return source.GetEnumerator(); + } + } + + public sealed class QeueueFormatter : CollectionFormatterBase, Queue.Enumerator, Queue> + { + protected override int? GetCount(Queue sequence) + { + return sequence.Count; + } + + protected override void Add(Queue collection, int index, T value) + { + collection.Enqueue(value); + } + + protected override Queue Create(int count) + { + return new Queue(count); + } + + protected override Queue.Enumerator GetSourceEnumerator(Queue source) + { + return source.GetEnumerator(); + } + + protected override Queue Complete(Queue intermediateCollection) + { + return intermediateCollection; + } + } + + // should deserialize reverse order. + public sealed class StackFormatter : CollectionFormatterBase.Enumerator, Stack> + { + protected override int? GetCount(Stack sequence) + { + return sequence.Count; + } + + protected override void Add(T[] collection, int index, T value) + { + // add reverse + collection[collection.Length - 1 - index] = value; + } + + protected override T[] Create(int count) + { + return new T[count]; + } + + protected override Stack.Enumerator GetSourceEnumerator(Stack source) + { + return source.GetEnumerator(); + } + + protected override Stack Complete(T[] intermediateCollection) + { + return new Stack(intermediateCollection); + } + } + + public sealed class HashSetFormatter : CollectionFormatterBase, HashSet.Enumerator, HashSet> + { + protected override int? GetCount(HashSet sequence) + { + return sequence.Count; + } + + protected override void Add(HashSet collection, int index, T value) + { + collection.Add(value); + } + + protected override HashSet Complete(HashSet intermediateCollection) + { + return intermediateCollection; + } + + protected override HashSet Create(int count) + { + return new HashSet(); + } + + protected override HashSet.Enumerator GetSourceEnumerator(HashSet source) + { + return source.GetEnumerator(); + } + } + + public sealed class ReadOnlyCollectionFormatter : CollectionFormatterBase> + { + protected override void Add(T[] collection, int index, T value) + { + collection[index] = value; + } + + protected override ReadOnlyCollection Complete(T[] intermediateCollection) + { + return new ReadOnlyCollection(intermediateCollection); + } + + protected override T[] Create(int count) + { + return new T[count]; + } + } + + public sealed class InterfaceListFormatter : CollectionFormatterBase> + { + protected override void Add(T[] collection, int index, T value) + { + collection[index] = value; + } + + protected override T[] Create(int count) + { + return new T[count]; + } + + protected override IList Complete(T[] intermediateCollection) + { + return intermediateCollection; + } + } + + public sealed class InterfaceCollectionFormatter : CollectionFormatterBase> + { + protected override void Add(T[] collection, int index, T value) + { + collection[index] = value; + } + + protected override T[] Create(int count) + { + return new T[count]; + } + + protected override ICollection Complete(T[] intermediateCollection) + { + return intermediateCollection; + } + } + + public sealed class InterfaceEnumerableFormatter : CollectionFormatterBase> + { + protected override void Add(T[] collection, int index, T value) + { + collection[index] = value; + } + + protected override T[] Create(int count) + { + return new T[count]; + } + + protected override IEnumerable Complete(T[] intermediateCollection) + { + return intermediateCollection; + } + } + + // [Key, [Array]] + public sealed class InterfaceGroupingFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, IGrouping value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Key, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify>().Serialize(ref bytes, offset, value, formatterResolver); + return offset - startOffset; + } + } + + public IGrouping Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + if (count != 2) throw new InvalidOperationException("Invalid Grouping format."); + + var key = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + var value = formatterResolver.GetFormatterWithVerify>().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new Grouping(key, value); + } + } + } + + public sealed class InterfaceLookupFormatter : CollectionFormatterBase, Dictionary>, ILookup> + { + protected override void Add(Dictionary> collection, int index, IGrouping value) + { + collection.Add(value.Key, value); + } + + protected override ILookup Complete(Dictionary> intermediateCollection) + { + return new Lookup(intermediateCollection); + } + + protected override Dictionary> Create(int count) + { + return new Dictionary>(count); + } + } + + class Grouping : IGrouping + { + readonly TKey key; + readonly IEnumerable elements; + + public Grouping(TKey key, IEnumerable elements) + { + this.key = key; + this.elements = elements; + } + + public TKey Key + { + get + { + return key; + } + } + + public IEnumerator GetEnumerator() + { + return elements.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return elements.GetEnumerator(); + } + } + + class Lookup : ILookup + { + readonly Dictionary> groupings; + + public Lookup(Dictionary> groupings) + { + this.groupings = groupings; + } + + public IEnumerable this[TKey key] + { + get + { + return groupings[key]; + } + } + + public int Count + { + get + { + return groupings.Count; + } + } + + public bool Contains(TKey key) + { + return groupings.ContainsKey(key); + } + + public IEnumerator> GetEnumerator() + { + return groupings.Values.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return groupings.Values.GetEnumerator(); + } + } + + // NonGenerics + + public sealed class NonGenericListFormatter : IMessagePackFormatter + where T : class, IList, new() + { + public int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver) + { + if (value == null) + { + MessagePackBinary.WriteNil(ref bytes, offset); + return 1; + } + + var formatter = formatterResolver.GetFormatterWithVerify(); + var startOffset = offset; + + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Count); + foreach (var item in value) + { + offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); + } + + return offset - startOffset; + } + + public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return default(T); + } + + var formatter = formatterResolver.GetFormatterWithVerify(); + var startOffset = offset; + + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var list = new T(); + for (int i = 0; i < count; i++) + { + list.Add(formatter.Deserialize(bytes, offset, formatterResolver, out readSize)); + offset += readSize; + } + + readSize = offset - startOffset; + return list; + } + } + + public sealed class NonGenericInterfaceListFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new NonGenericInterfaceListFormatter(); + + NonGenericInterfaceListFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, IList value, IFormatterResolver formatterResolver) + { + if (value == null) + { + MessagePackBinary.WriteNil(ref bytes, offset); + return 1; + } + + var formatter = formatterResolver.GetFormatterWithVerify(); + var startOffset = offset; + + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Count); + foreach (var item in value) + { + offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); + } + + return offset - startOffset; + } + + public IList Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return default(IList); + } + + var formatter = formatterResolver.GetFormatterWithVerify(); + var startOffset = offset; + + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var list = new object[count]; + for (int i = 0; i < count; i++) + { + list[i] = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + } + + readSize = offset - startOffset; + return list; + } + } + + public sealed class NonGenericDictionaryFormatter : IMessagePackFormatter + where T : class, IDictionary, new() + { + public int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver) + { + if (value == null) + { + MessagePackBinary.WriteNil(ref bytes, offset); + return 1; + } + + var formatter = formatterResolver.GetFormatterWithVerify(); + var startOffset = offset; + + offset += MessagePackBinary.WriteMapHeader(ref bytes, offset, value.Count); + foreach (DictionaryEntry item in value) + { + offset += formatter.Serialize(ref bytes, offset, item.Key, formatterResolver); + offset += formatter.Serialize(ref bytes, offset, item.Value, formatterResolver); + } + + return offset - startOffset; + } + + public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var formatter = formatterResolver.GetFormatterWithVerify(); + var startOffset = offset; + + var count = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); + offset += readSize; + + var dict = new T(); + for (int i = 0; i < count; i++) + { + var key = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var value = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + dict.Add(key, value); + } + + readSize = offset - startOffset; + return dict; + } + } + + public sealed class NonGenericInterfaceDictionaryFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new NonGenericInterfaceDictionaryFormatter(); + + NonGenericInterfaceDictionaryFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, IDictionary value, IFormatterResolver formatterResolver) + { + if (value == null) + { + MessagePackBinary.WriteNil(ref bytes, offset); + return 1; + } + + var formatter = formatterResolver.GetFormatterWithVerify(); + var startOffset = offset; + + offset += MessagePackBinary.WriteMapHeader(ref bytes, offset, value.Count); + foreach (DictionaryEntry item in value) + { + offset += formatter.Serialize(ref bytes, offset, item.Key, formatterResolver); + offset += formatter.Serialize(ref bytes, offset, item.Value, formatterResolver); + } + + return offset - startOffset; + } + + public IDictionary Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var formatter = formatterResolver.GetFormatterWithVerify(); + var startOffset = offset; + + var count = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); + offset += readSize; + + var dict = new Dictionary(count); + for (int i = 0; i < count; i++) + { + var key = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var value = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + dict.Add(key, value); + } + + readSize = offset - startOffset; + return dict; + } + } + +#if NETSTANDARD + + public sealed class ObservableCollectionFormatter : CollectionFormatterBase> + { + protected override void Add(ObservableCollection collection, int index, T value) + { + collection.Add(value); + } + + protected override ObservableCollection Create(int count) + { + return new ObservableCollection(); + } + } + + public sealed class ReadOnlyObservableCollectionFormatter : CollectionFormatterBase, ReadOnlyObservableCollection> + { + protected override void Add(ObservableCollection collection, int index, T value) + { + collection.Add(value); + } + + protected override ObservableCollection Create(int count) + { + return new ObservableCollection(); + } + + protected override ReadOnlyObservableCollection Complete(ObservableCollection intermediateCollection) + { + return new ReadOnlyObservableCollection(intermediateCollection); + } + } + + public sealed class InterfaceReadOnlyListFormatter : CollectionFormatterBase> + { + protected override void Add(T[] collection, int index, T value) + { + collection[index] = value; + } + + protected override T[] Create(int count) + { + return new T[count]; + } + + protected override IReadOnlyList Complete(T[] intermediateCollection) + { + return intermediateCollection; + } + } + + public sealed class InterfaceReadOnlyCollectionFormatter : CollectionFormatterBase> + { + protected override void Add(T[] collection, int index, T value) + { + collection[index] = value; + } + + protected override T[] Create(int count) + { + return new T[count]; + } + + protected override IReadOnlyCollection Complete(T[] intermediateCollection) + { + return intermediateCollection; + } + } + + public sealed class InterfaceSetFormatter : CollectionFormatterBase, ISet> + { + protected override void Add(HashSet collection, int index, T value) + { + collection.Add(value); + } + + protected override ISet Complete(HashSet intermediateCollection) + { + return intermediateCollection; + } + + protected override HashSet Create(int count) + { + return new HashSet(); + } + } + + public sealed class ConcurrentBagFormatter : CollectionFormatterBase> + { + protected override int? GetCount(ConcurrentBag sequence) + { + return sequence.Count; + } + + protected override void Add(ConcurrentBag collection, int index, T value) + { + collection.Add(value); + } + + protected override ConcurrentBag Create(int count) + { + return new ConcurrentBag(); + } + } + + public sealed class ConcurrentQueueFormatter : CollectionFormatterBase> + { + protected override int? GetCount(ConcurrentQueue sequence) + { + return sequence.Count; + } + + protected override void Add(ConcurrentQueue collection, int index, T value) + { + collection.Enqueue(value); + } + + protected override ConcurrentQueue Create(int count) + { + return new ConcurrentQueue(); + } + } + + public sealed class ConcurrentStackFormatter : CollectionFormatterBase> + { + protected override int? GetCount(ConcurrentStack sequence) + { + return sequence.Count; + } + + protected override void Add(T[] collection, int index, T value) + { + // add reverse + collection[collection.Length - 1 - index] = value; + } + + protected override T[] Create(int count) + { + return new T[count]; + } + + protected override ConcurrentStack Complete(T[] intermediateCollection) + { + return new ConcurrentStack(intermediateCollection); + } + } + +#endif +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/DictionaryFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/DictionaryFormatter.cs index 1035a7f10..c236b473c 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/DictionaryFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/DictionaryFormatter.cs @@ -1,449 +1,449 @@ - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; - -#if NETSTANDARD -using System.Collections.Concurrent; -#endif - -namespace MessagePack.Formatters -{ -#if NETSTANDARD - - // unfortunately, can't use IDictionary because supports IReadOnlyDictionary. - public abstract class DictionaryFormatterBase : IMessagePackFormatter - where TDictionary : IEnumerable> - where TEnumerator : IEnumerator> - { - public int Serialize(ref byte[] bytes, int offset, TDictionary value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - var keyFormatter = formatterResolver.GetFormatterWithVerify(); - var valueFormatter = formatterResolver.GetFormatterWithVerify(); - - int count; - { - var col = value as ICollection>; - if (col != null) - { - count = col.Count; - } - else - { - var col2 = value as IReadOnlyCollection>; - if (col2 != null) - { - count = col2.Count; - } - else - { - throw new InvalidOperationException("DictionaryFormatterBase's TDictionary supports only ICollection or IReadOnlyCollection"); - } - } - } - - offset += MessagePackBinary.WriteMapHeader(ref bytes, offset, count); - - var e = GetSourceEnumerator(value); - try - { - while (e.MoveNext()) - { - var item = e.Current; - offset += keyFormatter.Serialize(ref bytes, offset, item.Key, formatterResolver); - offset += valueFormatter.Serialize(ref bytes, offset, item.Value, formatterResolver); - } - } - finally - { - e.Dispose(); - } - - return offset - startOffset; - } - } - - public TDictionary Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return default(TDictionary); - } - else - { - var startOffset = offset; - var keyFormatter = formatterResolver.GetFormatterWithVerify(); - var valueFormatter = formatterResolver.GetFormatterWithVerify(); - - var len = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); - offset += readSize; - - var dict = Create(len); - for (int i = 0; i < len; i++) - { - var key = keyFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - var value = valueFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - Add(dict, i, key, value); - } - readSize = offset - startOffset; - - return Complete(dict); - } - } - - // abstraction for serialize - - // Some collections can use struct iterator, this is optimization path - protected abstract TEnumerator GetSourceEnumerator(TDictionary source); - - // abstraction for deserialize - protected abstract TIntermediate Create(int count); - protected abstract void Add(TIntermediate collection, int index, TKey key, TValue value); - protected abstract TDictionary Complete(TIntermediate intermediateCollection); - } - - public abstract class DictionaryFormatterBase : DictionaryFormatterBase>, TDictionary> - where TDictionary : IEnumerable> - { - protected override IEnumerator> GetSourceEnumerator(TDictionary source) - { - return source.GetEnumerator(); - } - } - - public abstract class DictionaryFormatterBase : DictionaryFormatterBase - where TDictionary : IDictionary - { - protected override TDictionary Complete(TDictionary intermediateCollection) - { - return intermediateCollection; - } - } - - - public sealed class DictionaryFormatter : DictionaryFormatterBase, Dictionary.Enumerator, Dictionary> - { - protected override void Add(Dictionary collection, int index, TKey key, TValue value) - { - collection.Add(key, value); - } - - protected override Dictionary Complete(Dictionary intermediateCollection) - { - return intermediateCollection; - } - - protected override Dictionary Create(int count) - { - return new Dictionary(count); - } - - protected override Dictionary.Enumerator GetSourceEnumerator(Dictionary source) - { - return source.GetEnumerator(); - } - } - - public sealed class GenericDictionaryFormatter : DictionaryFormatterBase - where TDictionary : IDictionary, new() - { - protected override void Add(TDictionary collection, int index, TKey key, TValue value) - { - collection.Add(key, value); - } - - protected override TDictionary Create(int count) - { - return new TDictionary(); - } - } - - public sealed class InterfaceDictionaryFormatter : DictionaryFormatterBase, IDictionary> - { - protected override void Add(Dictionary collection, int index, TKey key, TValue value) - { - collection.Add(key, value); - } - - protected override Dictionary Create(int count) - { - return new Dictionary(count); - } - - protected override IDictionary Complete(Dictionary intermediateCollection) - { - return intermediateCollection; - } - } - - public sealed class SortedListFormatter : DictionaryFormatterBase> - { - protected override void Add(SortedList collection, int index, TKey key, TValue value) - { - collection.Add(key, value); - } - - protected override SortedList Create(int count) - { - return new SortedList(count); - } - } - - public sealed class SortedDictionaryFormatter : DictionaryFormatterBase, SortedDictionary.Enumerator, SortedDictionary> - { - protected override void Add(SortedDictionary collection, int index, TKey key, TValue value) - { - collection.Add(key, value); - } - - protected override SortedDictionary Complete(SortedDictionary intermediateCollection) - { - return intermediateCollection; - } - - protected override SortedDictionary Create(int count) - { - return new SortedDictionary(); - } - - protected override SortedDictionary.Enumerator GetSourceEnumerator(SortedDictionary source) - { - return source.GetEnumerator(); - } - } - - public sealed class ReadOnlyDictionaryFormatter : DictionaryFormatterBase, ReadOnlyDictionary> - { - protected override void Add(Dictionary collection, int index, TKey key, TValue value) - { - collection.Add(key, value); - } - - protected override ReadOnlyDictionary Complete(Dictionary intermediateCollection) - { - return new ReadOnlyDictionary(intermediateCollection); - } - - protected override Dictionary Create(int count) - { - return new Dictionary(count); - } - } - - public sealed class InterfaceReadOnlyDictionaryFormatter : DictionaryFormatterBase, IReadOnlyDictionary> - { - protected override void Add(Dictionary collection, int index, TKey key, TValue value) - { - collection.Add(key, value); - } - - protected override IReadOnlyDictionary Complete(Dictionary intermediateCollection) - { - return intermediateCollection; - } - - protected override Dictionary Create(int count) - { - return new Dictionary(count); - } - } - - public sealed class ConcurrentDictionaryFormatter : DictionaryFormatterBase> - { - protected override void Add(ConcurrentDictionary collection, int index, TKey key, TValue value) - { - collection.TryAdd(key, value); - } - - protected override ConcurrentDictionary Create(int count) - { - // concurrent dictionary can't access defaultConcurrecyLevel so does not use count overload. - return new ConcurrentDictionary(); - } - } - -#else - - public abstract class DictionaryFormatterBase : IMessagePackFormatter - where TDictionary : IDictionary - { - public int Serialize(ref byte[] bytes, int offset, TDictionary value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - var keyFormatter = formatterResolver.GetFormatterWithVerify(); - var valueFormatter = formatterResolver.GetFormatterWithVerify(); - - var count = value.Count; - - offset += MessagePackBinary.WriteMapHeader(ref bytes, offset, count); - - var e = value.GetEnumerator(); - try - { - while (e.MoveNext()) - { - var item = e.Current; - offset += keyFormatter.Serialize(ref bytes, offset, item.Key, formatterResolver); - offset += valueFormatter.Serialize(ref bytes, offset, item.Value, formatterResolver); - } - } - finally - { - e.Dispose(); - } - - return offset - startOffset; - } - } - - public TDictionary Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return default(TDictionary); - } - else - { - var startOffset = offset; - var keyFormatter = formatterResolver.GetFormatterWithVerify(); - var valueFormatter = formatterResolver.GetFormatterWithVerify(); - - var len = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); - offset += readSize; - - var dict = Create(len); - for (int i = 0; i < len; i++) - { - var key = keyFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - var value = valueFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - Add(dict, i, key, value); - } - readSize = offset - startOffset; - - return Complete(dict); - } - } - - // abstraction for deserialize - protected abstract TIntermediate Create(int count); - protected abstract void Add(TIntermediate collection, int index, TKey key, TValue value); - protected abstract TDictionary Complete(TIntermediate intermediateCollection); - } - - public sealed class DictionaryFormatter : DictionaryFormatterBase, Dictionary> - { - protected override void Add(Dictionary collection, int index, TKey key, TValue value) - { - collection.Add(key, value); - } - - protected override Dictionary Complete(Dictionary intermediateCollection) - { - return intermediateCollection; - } - - protected override Dictionary Create(int count) - { - return new Dictionary(count); - } - } - - public sealed class GenericDictionaryFormatter : DictionaryFormatterBase - where TDictionary : IDictionary, new() - { - protected override void Add(TDictionary collection, int index, TKey key, TValue value) - { - collection.Add(key, value); - } - - protected override TDictionary Complete(TDictionary intermediateCollection) - { - return intermediateCollection; - } - - protected override TDictionary Create(int count) - { - return new TDictionary(); - } - } - - public sealed class InterfaceDictionaryFormatter : DictionaryFormatterBase, IDictionary> - { - protected override void Add(Dictionary collection, int index, TKey key, TValue value) - { - collection.Add(key, value); - } - - protected override Dictionary Create(int count) - { - return new Dictionary(count); - } - - protected override IDictionary Complete(Dictionary intermediateCollection) - { - return intermediateCollection; - } - } - - public sealed class SortedListFormatter : DictionaryFormatterBase, SortedList> - { - protected override void Add(SortedList collection, int index, TKey key, TValue value) - { - collection.Add(key, value); - } - - protected override SortedList Complete(SortedList intermediateCollection) - { - return intermediateCollection; - } - - protected override SortedList Create(int count) - { - return new SortedList(count); - } - } - - public sealed class SortedDictionaryFormatter : DictionaryFormatterBase, SortedDictionary> - { - protected override void Add(SortedDictionary collection, int index, TKey key, TValue value) - { - collection.Add(key, value); - } - - protected override SortedDictionary Complete(SortedDictionary intermediateCollection) - { - return intermediateCollection; - } - - protected override SortedDictionary Create(int count) - { - return new SortedDictionary(); - } - } - -#endif - + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; + +#if NETSTANDARD +using System.Collections.Concurrent; +#endif + +namespace MessagePack.Formatters +{ +#if NETSTANDARD + + // unfortunately, can't use IDictionary because supports IReadOnlyDictionary. + public abstract class DictionaryFormatterBase : IMessagePackFormatter + where TDictionary : IEnumerable> + where TEnumerator : IEnumerator> + { + public int Serialize(ref byte[] bytes, int offset, TDictionary value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + var keyFormatter = formatterResolver.GetFormatterWithVerify(); + var valueFormatter = formatterResolver.GetFormatterWithVerify(); + + int count; + { + var col = value as ICollection>; + if (col != null) + { + count = col.Count; + } + else + { + var col2 = value as IReadOnlyCollection>; + if (col2 != null) + { + count = col2.Count; + } + else + { + throw new InvalidOperationException("DictionaryFormatterBase's TDictionary supports only ICollection or IReadOnlyCollection"); + } + } + } + + offset += MessagePackBinary.WriteMapHeader(ref bytes, offset, count); + + var e = GetSourceEnumerator(value); + try + { + while (e.MoveNext()) + { + var item = e.Current; + offset += keyFormatter.Serialize(ref bytes, offset, item.Key, formatterResolver); + offset += valueFormatter.Serialize(ref bytes, offset, item.Value, formatterResolver); + } + } + finally + { + e.Dispose(); + } + + return offset - startOffset; + } + } + + public TDictionary Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return default(TDictionary); + } + else + { + var startOffset = offset; + var keyFormatter = formatterResolver.GetFormatterWithVerify(); + var valueFormatter = formatterResolver.GetFormatterWithVerify(); + + var len = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); + offset += readSize; + + var dict = Create(len); + for (int i = 0; i < len; i++) + { + var key = keyFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + var value = valueFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + Add(dict, i, key, value); + } + readSize = offset - startOffset; + + return Complete(dict); + } + } + + // abstraction for serialize + + // Some collections can use struct iterator, this is optimization path + protected abstract TEnumerator GetSourceEnumerator(TDictionary source); + + // abstraction for deserialize + protected abstract TIntermediate Create(int count); + protected abstract void Add(TIntermediate collection, int index, TKey key, TValue value); + protected abstract TDictionary Complete(TIntermediate intermediateCollection); + } + + public abstract class DictionaryFormatterBase : DictionaryFormatterBase>, TDictionary> + where TDictionary : IEnumerable> + { + protected override IEnumerator> GetSourceEnumerator(TDictionary source) + { + return source.GetEnumerator(); + } + } + + public abstract class DictionaryFormatterBase : DictionaryFormatterBase + where TDictionary : IDictionary + { + protected override TDictionary Complete(TDictionary intermediateCollection) + { + return intermediateCollection; + } + } + + + public sealed class DictionaryFormatter : DictionaryFormatterBase, Dictionary.Enumerator, Dictionary> + { + protected override void Add(Dictionary collection, int index, TKey key, TValue value) + { + collection.Add(key, value); + } + + protected override Dictionary Complete(Dictionary intermediateCollection) + { + return intermediateCollection; + } + + protected override Dictionary Create(int count) + { + return new Dictionary(count); + } + + protected override Dictionary.Enumerator GetSourceEnumerator(Dictionary source) + { + return source.GetEnumerator(); + } + } + + public sealed class GenericDictionaryFormatter : DictionaryFormatterBase + where TDictionary : IDictionary, new() + { + protected override void Add(TDictionary collection, int index, TKey key, TValue value) + { + collection.Add(key, value); + } + + protected override TDictionary Create(int count) + { + return new TDictionary(); + } + } + + public sealed class InterfaceDictionaryFormatter : DictionaryFormatterBase, IDictionary> + { + protected override void Add(Dictionary collection, int index, TKey key, TValue value) + { + collection.Add(key, value); + } + + protected override Dictionary Create(int count) + { + return new Dictionary(count); + } + + protected override IDictionary Complete(Dictionary intermediateCollection) + { + return intermediateCollection; + } + } + + public sealed class SortedListFormatter : DictionaryFormatterBase> + { + protected override void Add(SortedList collection, int index, TKey key, TValue value) + { + collection.Add(key, value); + } + + protected override SortedList Create(int count) + { + return new SortedList(count); + } + } + + public sealed class SortedDictionaryFormatter : DictionaryFormatterBase, SortedDictionary.Enumerator, SortedDictionary> + { + protected override void Add(SortedDictionary collection, int index, TKey key, TValue value) + { + collection.Add(key, value); + } + + protected override SortedDictionary Complete(SortedDictionary intermediateCollection) + { + return intermediateCollection; + } + + protected override SortedDictionary Create(int count) + { + return new SortedDictionary(); + } + + protected override SortedDictionary.Enumerator GetSourceEnumerator(SortedDictionary source) + { + return source.GetEnumerator(); + } + } + + public sealed class ReadOnlyDictionaryFormatter : DictionaryFormatterBase, ReadOnlyDictionary> + { + protected override void Add(Dictionary collection, int index, TKey key, TValue value) + { + collection.Add(key, value); + } + + protected override ReadOnlyDictionary Complete(Dictionary intermediateCollection) + { + return new ReadOnlyDictionary(intermediateCollection); + } + + protected override Dictionary Create(int count) + { + return new Dictionary(count); + } + } + + public sealed class InterfaceReadOnlyDictionaryFormatter : DictionaryFormatterBase, IReadOnlyDictionary> + { + protected override void Add(Dictionary collection, int index, TKey key, TValue value) + { + collection.Add(key, value); + } + + protected override IReadOnlyDictionary Complete(Dictionary intermediateCollection) + { + return intermediateCollection; + } + + protected override Dictionary Create(int count) + { + return new Dictionary(count); + } + } + + public sealed class ConcurrentDictionaryFormatter : DictionaryFormatterBase> + { + protected override void Add(ConcurrentDictionary collection, int index, TKey key, TValue value) + { + collection.TryAdd(key, value); + } + + protected override ConcurrentDictionary Create(int count) + { + // concurrent dictionary can't access defaultConcurrecyLevel so does not use count overload. + return new ConcurrentDictionary(); + } + } + +#else + + public abstract class DictionaryFormatterBase : IMessagePackFormatter + where TDictionary : IDictionary + { + public int Serialize(ref byte[] bytes, int offset, TDictionary value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + var keyFormatter = formatterResolver.GetFormatterWithVerify(); + var valueFormatter = formatterResolver.GetFormatterWithVerify(); + + var count = value.Count; + + offset += MessagePackBinary.WriteMapHeader(ref bytes, offset, count); + + var e = value.GetEnumerator(); + try + { + while (e.MoveNext()) + { + var item = e.Current; + offset += keyFormatter.Serialize(ref bytes, offset, item.Key, formatterResolver); + offset += valueFormatter.Serialize(ref bytes, offset, item.Value, formatterResolver); + } + } + finally + { + e.Dispose(); + } + + return offset - startOffset; + } + } + + public TDictionary Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return default(TDictionary); + } + else + { + var startOffset = offset; + var keyFormatter = formatterResolver.GetFormatterWithVerify(); + var valueFormatter = formatterResolver.GetFormatterWithVerify(); + + var len = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); + offset += readSize; + + var dict = Create(len); + for (int i = 0; i < len; i++) + { + var key = keyFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + var value = valueFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + Add(dict, i, key, value); + } + readSize = offset - startOffset; + + return Complete(dict); + } + } + + // abstraction for deserialize + protected abstract TIntermediate Create(int count); + protected abstract void Add(TIntermediate collection, int index, TKey key, TValue value); + protected abstract TDictionary Complete(TIntermediate intermediateCollection); + } + + public sealed class DictionaryFormatter : DictionaryFormatterBase, Dictionary> + { + protected override void Add(Dictionary collection, int index, TKey key, TValue value) + { + collection.Add(key, value); + } + + protected override Dictionary Complete(Dictionary intermediateCollection) + { + return intermediateCollection; + } + + protected override Dictionary Create(int count) + { + return new Dictionary(count); + } + } + + public sealed class GenericDictionaryFormatter : DictionaryFormatterBase + where TDictionary : IDictionary, new() + { + protected override void Add(TDictionary collection, int index, TKey key, TValue value) + { + collection.Add(key, value); + } + + protected override TDictionary Complete(TDictionary intermediateCollection) + { + return intermediateCollection; + } + + protected override TDictionary Create(int count) + { + return new TDictionary(); + } + } + + public sealed class InterfaceDictionaryFormatter : DictionaryFormatterBase, IDictionary> + { + protected override void Add(Dictionary collection, int index, TKey key, TValue value) + { + collection.Add(key, value); + } + + protected override Dictionary Create(int count) + { + return new Dictionary(count); + } + + protected override IDictionary Complete(Dictionary intermediateCollection) + { + return intermediateCollection; + } + } + + public sealed class SortedListFormatter : DictionaryFormatterBase, SortedList> + { + protected override void Add(SortedList collection, int index, TKey key, TValue value) + { + collection.Add(key, value); + } + + protected override SortedList Complete(SortedList intermediateCollection) + { + return intermediateCollection; + } + + protected override SortedList Create(int count) + { + return new SortedList(count); + } + } + + public sealed class SortedDictionaryFormatter : DictionaryFormatterBase, SortedDictionary> + { + protected override void Add(SortedDictionary collection, int index, TKey key, TValue value) + { + collection.Add(key, value); + } + + protected override SortedDictionary Complete(SortedDictionary intermediateCollection) + { + return intermediateCollection; + } + + protected override SortedDictionary Create(int count) + { + return new SortedDictionary(); + } + } + +#endif + } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/DynamicObjectTypeFallbackFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/DynamicObjectTypeFallbackFormatter.cs index 48e2209f2..685008676 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/DynamicObjectTypeFallbackFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/DynamicObjectTypeFallbackFormatter.cs @@ -1,98 +1,98 @@ -#if NETSTANDARD - -using MessagePack.Resolvers; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Reflection; - -namespace MessagePack.Formatters -{ - public sealed class DynamicObjectTypeFallbackFormatter : IMessagePackFormatter - { - delegate int SerializeMethod(object dynamicFormatter, ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver); - - readonly MessagePack.Internal.ThreadsafeTypeKeyHashTable> serializers = new Internal.ThreadsafeTypeKeyHashTable>(); - - readonly IFormatterResolver[] innerResolvers; - - public DynamicObjectTypeFallbackFormatter(params IFormatterResolver[] innerResolvers) - { - this.innerResolvers = innerResolvers; - } - - public int Serialize(ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - - var type = value.GetType(); - var ti = type.GetTypeInfo(); - - if (type == typeof(object)) - { - // serialize to empty map - return MessagePackBinary.WriteMapHeader(ref bytes, offset, 0); - } - - KeyValuePair formatterAndDelegate; - if (!serializers.TryGetValue(type, out formatterAndDelegate)) - { - lock (serializers) - { - if (!serializers.TryGetValue(type, out formatterAndDelegate)) - { - object formatter = null; - foreach (var innerResolver in innerResolvers) - { - formatter = innerResolver.GetFormatterDynamic(type); - if (formatter != null) break; - } - if (formatter == null) - { - throw new FormatterNotRegisteredException(type.FullName + " is not registered in this resolver. resolvers:" + string.Join(", ", innerResolvers.Select(x => x.GetType().Name).ToArray())); - } - - var t = type; - { - var formatterType = typeof(IMessagePackFormatter<>).MakeGenericType(t); - var param0 = Expression.Parameter(typeof(object), "formatter"); - var param1 = Expression.Parameter(typeof(byte[]).MakeByRefType(), "bytes"); - var param2 = Expression.Parameter(typeof(int), "offset"); - var param3 = Expression.Parameter(typeof(object), "value"); - var param4 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); - - var serializeMethodInfo = formatterType.GetRuntimeMethod("Serialize", new[] { typeof(byte[]).MakeByRefType(), typeof(int), t, typeof(IFormatterResolver) }); - - var body = Expression.Call( - Expression.Convert(param0, formatterType), - serializeMethodInfo, - param1, - param2, - ti.IsValueType ? Expression.Unbox(param3, t) : Expression.Convert(param3, t), - param4); - - var lambda = Expression.Lambda(body, param0, param1, param2, param3, param4).Compile(); - - formatterAndDelegate = new KeyValuePair(formatter, lambda); - } - - serializers.TryAdd(t, formatterAndDelegate); - } - } - } - - return formatterAndDelegate.Value(formatterAndDelegate.Key, ref bytes, offset, value, formatterResolver); - } - - public object Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return PrimitiveObjectFormatter.Instance.Deserialize(bytes, offset, formatterResolver, out readSize); - } - } -} - +#if NETSTANDARD + +using MessagePack.Resolvers; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; + +namespace MessagePack.Formatters +{ + public sealed class DynamicObjectTypeFallbackFormatter : IMessagePackFormatter + { + delegate int SerializeMethod(object dynamicFormatter, ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver); + + readonly MessagePack.Internal.ThreadsafeTypeKeyHashTable> serializers = new Internal.ThreadsafeTypeKeyHashTable>(); + + readonly IFormatterResolver[] innerResolvers; + + public DynamicObjectTypeFallbackFormatter(params IFormatterResolver[] innerResolvers) + { + this.innerResolvers = innerResolvers; + } + + public int Serialize(ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + + var type = value.GetType(); + var ti = type.GetTypeInfo(); + + if (type == typeof(object)) + { + // serialize to empty map + return MessagePackBinary.WriteMapHeader(ref bytes, offset, 0); + } + + KeyValuePair formatterAndDelegate; + if (!serializers.TryGetValue(type, out formatterAndDelegate)) + { + lock (serializers) + { + if (!serializers.TryGetValue(type, out formatterAndDelegate)) + { + object formatter = null; + foreach (var innerResolver in innerResolvers) + { + formatter = innerResolver.GetFormatterDynamic(type); + if (formatter != null) break; + } + if (formatter == null) + { + throw new FormatterNotRegisteredException(type.FullName + " is not registered in this resolver. resolvers:" + string.Join(", ", innerResolvers.Select(x => x.GetType().Name).ToArray())); + } + + var t = type; + { + var formatterType = typeof(IMessagePackFormatter<>).MakeGenericType(t); + var param0 = Expression.Parameter(typeof(object), "formatter"); + var param1 = Expression.Parameter(typeof(byte[]).MakeByRefType(), "bytes"); + var param2 = Expression.Parameter(typeof(int), "offset"); + var param3 = Expression.Parameter(typeof(object), "value"); + var param4 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); + + var serializeMethodInfo = formatterType.GetRuntimeMethod("Serialize", new[] { typeof(byte[]).MakeByRefType(), typeof(int), t, typeof(IFormatterResolver) }); + + var body = Expression.Call( + Expression.Convert(param0, formatterType), + serializeMethodInfo, + param1, + param2, + ti.IsValueType ? Expression.Unbox(param3, t) : Expression.Convert(param3, t), + param4); + + var lambda = Expression.Lambda(body, param0, param1, param2, param3, param4).Compile(); + + formatterAndDelegate = new KeyValuePair(formatter, lambda); + } + + serializers.TryAdd(t, formatterAndDelegate); + } + } + } + + return formatterAndDelegate.Value(formatterAndDelegate.Key, ref bytes, offset, value, formatterResolver); + } + + public object Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return PrimitiveObjectFormatter.Instance.Deserialize(bytes, offset, formatterResolver, out readSize); + } + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/EnumAsStringFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/EnumAsStringFormatter.cs index f40f092fc..0b6a1022e 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/EnumAsStringFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/EnumAsStringFormatter.cs @@ -1,50 +1,50 @@ -using System; -using System.Collections.Generic; - -namespace MessagePack.Formatters -{ - // Note:This implemenataion is 'not' fastest, should more improve. - public sealed class EnumAsStringFormatter : IMessagePackFormatter - { - readonly Dictionary nameValueMapping; - readonly Dictionary valueNameMapping; - - public EnumAsStringFormatter() - { - var names = Enum.GetNames(typeof(T)); - var values = Enum.GetValues(typeof(T)); - - nameValueMapping = new Dictionary(names.Length); - valueNameMapping = new Dictionary(names.Length); - - for (int i = 0; i < names.Length; i++) - { - nameValueMapping[names[i]] = (T)values.GetValue(i); - valueNameMapping[(T)values.GetValue(i)] = names[i]; - } - } - - public int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver) - { - string name; - if (!valueNameMapping.TryGetValue(value, out name)) - { - name = value.ToString(); // fallback for flags etc, But Enum.ToString is too slow. - } - - return MessagePackBinary.WriteString(ref bytes, offset, name); - } - - public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - var name = MessagePackBinary.ReadString(bytes, offset, out readSize); - - T value; - if (!nameValueMapping.TryGetValue(name, out value)) - { - value = (T)Enum.Parse(typeof(T), name); // Enum.Parse is too slow - } - return value; - } - } -} +using System; +using System.Collections.Generic; + +namespace MessagePack.Formatters +{ + // Note:This implemenataion is 'not' fastest, should more improve. + public sealed class EnumAsStringFormatter : IMessagePackFormatter + { + readonly Dictionary nameValueMapping; + readonly Dictionary valueNameMapping; + + public EnumAsStringFormatter() + { + var names = Enum.GetNames(typeof(T)); + var values = Enum.GetValues(typeof(T)); + + nameValueMapping = new Dictionary(names.Length); + valueNameMapping = new Dictionary(names.Length); + + for (int i = 0; i < names.Length; i++) + { + nameValueMapping[names[i]] = (T)values.GetValue(i); + valueNameMapping[(T)values.GetValue(i)] = names[i]; + } + } + + public int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver) + { + string name; + if (!valueNameMapping.TryGetValue(value, out name)) + { + name = value.ToString(); // fallback for flags etc, But Enum.ToString is too slow. + } + + return MessagePackBinary.WriteString(ref bytes, offset, name); + } + + public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + var name = MessagePackBinary.ReadString(bytes, offset, out readSize); + + T value; + if (!nameValueMapping.TryGetValue(name, out value)) + { + value = (T)Enum.Parse(typeof(T), name); // Enum.Parse is too slow + } + return value; + } + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/ForceSizePrimitiveFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/ForceSizePrimitiveFormatter.cs index d3d1e870d..b49c99984 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/ForceSizePrimitiveFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/ForceSizePrimitiveFormatter.cs @@ -1,801 +1,801 @@ -using System; - -namespace MessagePack.Formatters -{ - public sealed class ForceInt16BlockFormatter : IMessagePackFormatter - { - public static readonly ForceInt16BlockFormatter Instance = new ForceInt16BlockFormatter(); - - ForceInt16BlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Int16 value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteInt16ForceInt16Block(ref bytes, offset, value); - } - - public Int16 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadInt16(bytes, offset, out readSize); - } - } - - public sealed class NullableForceInt16BlockFormatter : IMessagePackFormatter - { - public static readonly NullableForceInt16BlockFormatter Instance = new NullableForceInt16BlockFormatter(); - - NullableForceInt16BlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Int16? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteInt16ForceInt16Block(ref bytes, offset, value.Value); - } - } - - public Int16? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadInt16(bytes, offset, out readSize); - } - } - } - - public sealed class ForceInt16BlockArrayFormatter : IMessagePackFormatter - { - public static readonly ForceInt16BlockArrayFormatter Instance = new ForceInt16BlockArrayFormatter(); - - ForceInt16BlockArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Int16[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteInt16ForceInt16Block(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public Int16[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new Int16[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadInt16(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class ForceInt32BlockFormatter : IMessagePackFormatter - { - public static readonly ForceInt32BlockFormatter Instance = new ForceInt32BlockFormatter(); - - ForceInt32BlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Int32 value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteInt32ForceInt32Block(ref bytes, offset, value); - } - - public Int32 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadInt32(bytes, offset, out readSize); - } - } - - public sealed class NullableForceInt32BlockFormatter : IMessagePackFormatter - { - public static readonly NullableForceInt32BlockFormatter Instance = new NullableForceInt32BlockFormatter(); - - NullableForceInt32BlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Int32? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteInt32ForceInt32Block(ref bytes, offset, value.Value); - } - } - - public Int32? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadInt32(bytes, offset, out readSize); - } - } - } - - public sealed class ForceInt32BlockArrayFormatter : IMessagePackFormatter - { - public static readonly ForceInt32BlockArrayFormatter Instance = new ForceInt32BlockArrayFormatter(); - - ForceInt32BlockArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Int32[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteInt32ForceInt32Block(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public Int32[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new Int32[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class ForceInt64BlockFormatter : IMessagePackFormatter - { - public static readonly ForceInt64BlockFormatter Instance = new ForceInt64BlockFormatter(); - - ForceInt64BlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Int64 value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteInt64ForceInt64Block(ref bytes, offset, value); - } - - public Int64 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadInt64(bytes, offset, out readSize); - } - } - - public sealed class NullableForceInt64BlockFormatter : IMessagePackFormatter - { - public static readonly NullableForceInt64BlockFormatter Instance = new NullableForceInt64BlockFormatter(); - - NullableForceInt64BlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Int64? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteInt64ForceInt64Block(ref bytes, offset, value.Value); - } - } - - public Int64? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadInt64(bytes, offset, out readSize); - } - } - } - - public sealed class ForceInt64BlockArrayFormatter : IMessagePackFormatter - { - public static readonly ForceInt64BlockArrayFormatter Instance = new ForceInt64BlockArrayFormatter(); - - ForceInt64BlockArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Int64[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteInt64ForceInt64Block(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public Int64[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new Int64[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadInt64(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class ForceUInt16BlockFormatter : IMessagePackFormatter - { - public static readonly ForceUInt16BlockFormatter Instance = new ForceUInt16BlockFormatter(); - - ForceUInt16BlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, UInt16 value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteUInt16ForceUInt16Block(ref bytes, offset, value); - } - - public UInt16 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadUInt16(bytes, offset, out readSize); - } - } - - public sealed class NullableForceUInt16BlockFormatter : IMessagePackFormatter - { - public static readonly NullableForceUInt16BlockFormatter Instance = new NullableForceUInt16BlockFormatter(); - - NullableForceUInt16BlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, UInt16? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteUInt16ForceUInt16Block(ref bytes, offset, value.Value); - } - } - - public UInt16? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadUInt16(bytes, offset, out readSize); - } - } - } - - public sealed class ForceUInt16BlockArrayFormatter : IMessagePackFormatter - { - public static readonly ForceUInt16BlockArrayFormatter Instance = new ForceUInt16BlockArrayFormatter(); - - ForceUInt16BlockArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, UInt16[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteUInt16ForceUInt16Block(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public UInt16[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new UInt16[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadUInt16(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class ForceUInt32BlockFormatter : IMessagePackFormatter - { - public static readonly ForceUInt32BlockFormatter Instance = new ForceUInt32BlockFormatter(); - - ForceUInt32BlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, UInt32 value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteUInt32ForceUInt32Block(ref bytes, offset, value); - } - - public UInt32 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadUInt32(bytes, offset, out readSize); - } - } - - public sealed class NullableForceUInt32BlockFormatter : IMessagePackFormatter - { - public static readonly NullableForceUInt32BlockFormatter Instance = new NullableForceUInt32BlockFormatter(); - - NullableForceUInt32BlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, UInt32? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteUInt32ForceUInt32Block(ref bytes, offset, value.Value); - } - } - - public UInt32? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadUInt32(bytes, offset, out readSize); - } - } - } - - public sealed class ForceUInt32BlockArrayFormatter : IMessagePackFormatter - { - public static readonly ForceUInt32BlockArrayFormatter Instance = new ForceUInt32BlockArrayFormatter(); - - ForceUInt32BlockArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, UInt32[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteUInt32ForceUInt32Block(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public UInt32[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new UInt32[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadUInt32(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class ForceUInt64BlockFormatter : IMessagePackFormatter - { - public static readonly ForceUInt64BlockFormatter Instance = new ForceUInt64BlockFormatter(); - - ForceUInt64BlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, UInt64 value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteUInt64ForceUInt64Block(ref bytes, offset, value); - } - - public UInt64 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadUInt64(bytes, offset, out readSize); - } - } - - public sealed class NullableForceUInt64BlockFormatter : IMessagePackFormatter - { - public static readonly NullableForceUInt64BlockFormatter Instance = new NullableForceUInt64BlockFormatter(); - - NullableForceUInt64BlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, UInt64? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteUInt64ForceUInt64Block(ref bytes, offset, value.Value); - } - } - - public UInt64? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadUInt64(bytes, offset, out readSize); - } - } - } - - public sealed class ForceUInt64BlockArrayFormatter : IMessagePackFormatter - { - public static readonly ForceUInt64BlockArrayFormatter Instance = new ForceUInt64BlockArrayFormatter(); - - ForceUInt64BlockArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, UInt64[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteUInt64ForceUInt64Block(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public UInt64[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new UInt64[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadUInt64(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class ForceByteBlockFormatter : IMessagePackFormatter - { - public static readonly ForceByteBlockFormatter Instance = new ForceByteBlockFormatter(); - - ForceByteBlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Byte value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteByteForceByteBlock(ref bytes, offset, value); - } - - public Byte Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadByte(bytes, offset, out readSize); - } - } - - public sealed class NullableForceByteBlockFormatter : IMessagePackFormatter - { - public static readonly NullableForceByteBlockFormatter Instance = new NullableForceByteBlockFormatter(); - - NullableForceByteBlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Byte? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteByteForceByteBlock(ref bytes, offset, value.Value); - } - } - - public Byte? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadByte(bytes, offset, out readSize); - } - } - } - - - public sealed class ForceSByteBlockFormatter : IMessagePackFormatter - { - public static readonly ForceSByteBlockFormatter Instance = new ForceSByteBlockFormatter(); - - ForceSByteBlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, SByte value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteSByteForceSByteBlock(ref bytes, offset, value); - } - - public SByte Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadSByte(bytes, offset, out readSize); - } - } - - public sealed class NullableForceSByteBlockFormatter : IMessagePackFormatter - { - public static readonly NullableForceSByteBlockFormatter Instance = new NullableForceSByteBlockFormatter(); - - NullableForceSByteBlockFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, SByte? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteSByteForceSByteBlock(ref bytes, offset, value.Value); - } - } - - public SByte? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadSByte(bytes, offset, out readSize); - } - } - } - - public sealed class ForceSByteBlockArrayFormatter : IMessagePackFormatter - { - public static readonly ForceSByteBlockArrayFormatter Instance = new ForceSByteBlockArrayFormatter(); - - ForceSByteBlockArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, SByte[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteSByteForceSByteBlock(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public SByte[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new SByte[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadSByte(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - +using System; + +namespace MessagePack.Formatters +{ + public sealed class ForceInt16BlockFormatter : IMessagePackFormatter + { + public static readonly ForceInt16BlockFormatter Instance = new ForceInt16BlockFormatter(); + + ForceInt16BlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Int16 value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteInt16ForceInt16Block(ref bytes, offset, value); + } + + public Int16 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadInt16(bytes, offset, out readSize); + } + } + + public sealed class NullableForceInt16BlockFormatter : IMessagePackFormatter + { + public static readonly NullableForceInt16BlockFormatter Instance = new NullableForceInt16BlockFormatter(); + + NullableForceInt16BlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Int16? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteInt16ForceInt16Block(ref bytes, offset, value.Value); + } + } + + public Int16? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadInt16(bytes, offset, out readSize); + } + } + } + + public sealed class ForceInt16BlockArrayFormatter : IMessagePackFormatter + { + public static readonly ForceInt16BlockArrayFormatter Instance = new ForceInt16BlockArrayFormatter(); + + ForceInt16BlockArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Int16[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteInt16ForceInt16Block(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public Int16[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new Int16[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadInt16(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class ForceInt32BlockFormatter : IMessagePackFormatter + { + public static readonly ForceInt32BlockFormatter Instance = new ForceInt32BlockFormatter(); + + ForceInt32BlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Int32 value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteInt32ForceInt32Block(ref bytes, offset, value); + } + + public Int32 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadInt32(bytes, offset, out readSize); + } + } + + public sealed class NullableForceInt32BlockFormatter : IMessagePackFormatter + { + public static readonly NullableForceInt32BlockFormatter Instance = new NullableForceInt32BlockFormatter(); + + NullableForceInt32BlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Int32? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteInt32ForceInt32Block(ref bytes, offset, value.Value); + } + } + + public Int32? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadInt32(bytes, offset, out readSize); + } + } + } + + public sealed class ForceInt32BlockArrayFormatter : IMessagePackFormatter + { + public static readonly ForceInt32BlockArrayFormatter Instance = new ForceInt32BlockArrayFormatter(); + + ForceInt32BlockArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Int32[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteInt32ForceInt32Block(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public Int32[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new Int32[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class ForceInt64BlockFormatter : IMessagePackFormatter + { + public static readonly ForceInt64BlockFormatter Instance = new ForceInt64BlockFormatter(); + + ForceInt64BlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Int64 value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteInt64ForceInt64Block(ref bytes, offset, value); + } + + public Int64 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadInt64(bytes, offset, out readSize); + } + } + + public sealed class NullableForceInt64BlockFormatter : IMessagePackFormatter + { + public static readonly NullableForceInt64BlockFormatter Instance = new NullableForceInt64BlockFormatter(); + + NullableForceInt64BlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Int64? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteInt64ForceInt64Block(ref bytes, offset, value.Value); + } + } + + public Int64? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadInt64(bytes, offset, out readSize); + } + } + } + + public sealed class ForceInt64BlockArrayFormatter : IMessagePackFormatter + { + public static readonly ForceInt64BlockArrayFormatter Instance = new ForceInt64BlockArrayFormatter(); + + ForceInt64BlockArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Int64[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteInt64ForceInt64Block(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public Int64[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new Int64[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadInt64(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class ForceUInt16BlockFormatter : IMessagePackFormatter + { + public static readonly ForceUInt16BlockFormatter Instance = new ForceUInt16BlockFormatter(); + + ForceUInt16BlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, UInt16 value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteUInt16ForceUInt16Block(ref bytes, offset, value); + } + + public UInt16 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadUInt16(bytes, offset, out readSize); + } + } + + public sealed class NullableForceUInt16BlockFormatter : IMessagePackFormatter + { + public static readonly NullableForceUInt16BlockFormatter Instance = new NullableForceUInt16BlockFormatter(); + + NullableForceUInt16BlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, UInt16? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteUInt16ForceUInt16Block(ref bytes, offset, value.Value); + } + } + + public UInt16? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadUInt16(bytes, offset, out readSize); + } + } + } + + public sealed class ForceUInt16BlockArrayFormatter : IMessagePackFormatter + { + public static readonly ForceUInt16BlockArrayFormatter Instance = new ForceUInt16BlockArrayFormatter(); + + ForceUInt16BlockArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, UInt16[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteUInt16ForceUInt16Block(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public UInt16[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new UInt16[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadUInt16(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class ForceUInt32BlockFormatter : IMessagePackFormatter + { + public static readonly ForceUInt32BlockFormatter Instance = new ForceUInt32BlockFormatter(); + + ForceUInt32BlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, UInt32 value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteUInt32ForceUInt32Block(ref bytes, offset, value); + } + + public UInt32 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadUInt32(bytes, offset, out readSize); + } + } + + public sealed class NullableForceUInt32BlockFormatter : IMessagePackFormatter + { + public static readonly NullableForceUInt32BlockFormatter Instance = new NullableForceUInt32BlockFormatter(); + + NullableForceUInt32BlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, UInt32? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteUInt32ForceUInt32Block(ref bytes, offset, value.Value); + } + } + + public UInt32? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadUInt32(bytes, offset, out readSize); + } + } + } + + public sealed class ForceUInt32BlockArrayFormatter : IMessagePackFormatter + { + public static readonly ForceUInt32BlockArrayFormatter Instance = new ForceUInt32BlockArrayFormatter(); + + ForceUInt32BlockArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, UInt32[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteUInt32ForceUInt32Block(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public UInt32[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new UInt32[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadUInt32(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class ForceUInt64BlockFormatter : IMessagePackFormatter + { + public static readonly ForceUInt64BlockFormatter Instance = new ForceUInt64BlockFormatter(); + + ForceUInt64BlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, UInt64 value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteUInt64ForceUInt64Block(ref bytes, offset, value); + } + + public UInt64 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadUInt64(bytes, offset, out readSize); + } + } + + public sealed class NullableForceUInt64BlockFormatter : IMessagePackFormatter + { + public static readonly NullableForceUInt64BlockFormatter Instance = new NullableForceUInt64BlockFormatter(); + + NullableForceUInt64BlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, UInt64? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteUInt64ForceUInt64Block(ref bytes, offset, value.Value); + } + } + + public UInt64? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadUInt64(bytes, offset, out readSize); + } + } + } + + public sealed class ForceUInt64BlockArrayFormatter : IMessagePackFormatter + { + public static readonly ForceUInt64BlockArrayFormatter Instance = new ForceUInt64BlockArrayFormatter(); + + ForceUInt64BlockArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, UInt64[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteUInt64ForceUInt64Block(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public UInt64[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new UInt64[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadUInt64(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class ForceByteBlockFormatter : IMessagePackFormatter + { + public static readonly ForceByteBlockFormatter Instance = new ForceByteBlockFormatter(); + + ForceByteBlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Byte value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteByteForceByteBlock(ref bytes, offset, value); + } + + public Byte Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadByte(bytes, offset, out readSize); + } + } + + public sealed class NullableForceByteBlockFormatter : IMessagePackFormatter + { + public static readonly NullableForceByteBlockFormatter Instance = new NullableForceByteBlockFormatter(); + + NullableForceByteBlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Byte? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteByteForceByteBlock(ref bytes, offset, value.Value); + } + } + + public Byte? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadByte(bytes, offset, out readSize); + } + } + } + + + public sealed class ForceSByteBlockFormatter : IMessagePackFormatter + { + public static readonly ForceSByteBlockFormatter Instance = new ForceSByteBlockFormatter(); + + ForceSByteBlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, SByte value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteSByteForceSByteBlock(ref bytes, offset, value); + } + + public SByte Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadSByte(bytes, offset, out readSize); + } + } + + public sealed class NullableForceSByteBlockFormatter : IMessagePackFormatter + { + public static readonly NullableForceSByteBlockFormatter Instance = new NullableForceSByteBlockFormatter(); + + NullableForceSByteBlockFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, SByte? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteSByteForceSByteBlock(ref bytes, offset, value.Value); + } + } + + public SByte? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadSByte(bytes, offset, out readSize); + } + } + } + + public sealed class ForceSByteBlockArrayFormatter : IMessagePackFormatter + { + public static readonly ForceSByteBlockArrayFormatter Instance = new ForceSByteBlockArrayFormatter(); + + ForceSByteBlockArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, SByte[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteSByteForceSByteBlock(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public SByte[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new SByte[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadSByte(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/IMessagePackFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/IMessagePackFormatter.cs index 2ae40a150..ceb19edae 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/IMessagePackFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/IMessagePackFormatter.cs @@ -1,15 +1,15 @@ - -namespace MessagePack.Formatters -{ - // marker - public interface IMessagePackFormatter - { - - } - - public interface IMessagePackFormatter : IMessagePackFormatter - { - int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver); - T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize); - } -} + +namespace MessagePack.Formatters +{ + // marker + public interface IMessagePackFormatter + { + + } + + public interface IMessagePackFormatter : IMessagePackFormatter + { + int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver); + T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize); + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/IgnoreFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/IgnoreFormatter.cs index cbf38bacb..d4a15e41c 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/IgnoreFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/IgnoreFormatter.cs @@ -1,16 +1,16 @@ -namespace MessagePack.Formatters -{ - public sealed class IgnoreFormatter : IMessagePackFormatter - { - public int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - - public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - readSize = MessagePackBinary.ReadNextBlock(bytes, offset); - return default(T); - } - } +namespace MessagePack.Formatters +{ + public sealed class IgnoreFormatter : IMessagePackFormatter + { + public int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + + public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + readSize = MessagePackBinary.ReadNextBlock(bytes, offset); + return default(T); + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/MultiDimentionalArrayFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/MultiDimentionalArrayFormatter.cs index 8e8ec0f12..12ef9b158 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/MultiDimentionalArrayFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/MultiDimentionalArrayFormatter.cs @@ -1,294 +1,294 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace MessagePack.Formatters -{ - // multi dimentional array serialize to [i, j, [seq]] - - public sealed class TwoDimentionalArrayFormatter : IMessagePackFormatter - { - const int ArrayLength = 3; - - public int Serialize(ref byte[] bytes, int offset, T[,] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var i = value.GetLength(0); - var j = value.GetLength(1); - - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, ArrayLength); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, i); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, j); - - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - foreach (var item in value) - { - offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); - } - - return offset - startOffset; - } - } - - public T[,] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - if (len != ArrayLength) throw new InvalidOperationException("Invalid T[,] format"); - - var iLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - - var jLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - - var maxLen = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var array = new T[iLength, jLength]; - - var i = 0; - var j = -1; - for (int loop = 0; loop < maxLen; loop++) - { - if (j < jLength - 1) - { - j++; - } - else - { - j = 0; - i++; - } - - array[i, j] = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - } - - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class ThreeDimentionalArrayFormatter : IMessagePackFormatter - { - const int ArrayLength = 4; - - public int Serialize(ref byte[] bytes, int offset, T[,,] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var i = value.GetLength(0); - var j = value.GetLength(1); - var k = value.GetLength(2); - - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, ArrayLength); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, i); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, j); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, k); - - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - foreach (var item in value) - { - offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); - } - - return offset - startOffset; - } - } - - public T[,,] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - if (len != ArrayLength) throw new InvalidOperationException("Invalid T[,,] format"); - - var iLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - - var jLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - - var kLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - - var maxLen = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var array = new T[iLength, jLength, kLength]; - - var i = 0; - var j = 0; - var k = -1; - for (int loop = 0; loop < maxLen; loop++) - { - if (k < kLength - 1) - { - k++; - } - else if (j < jLength - 1) - { - k = 0; - j++; - } - else - { - k = 0; - j = 0; - i++; - } - - array[i, j, k] = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - } - - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class FourDimentionalArrayFormatter : IMessagePackFormatter - { - const int ArrayLength = 5; - - public int Serialize(ref byte[] bytes, int offset, T[,,,] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var i = value.GetLength(0); - var j = value.GetLength(1); - var k = value.GetLength(2); - var l = value.GetLength(3); - - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, ArrayLength); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, i); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, j); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, k); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, l); - - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - foreach (var item in value) - { - offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); - } - - return offset - startOffset; - } - } - - public T[,,,] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var formatter = formatterResolver.GetFormatterWithVerify(); - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - if (len != ArrayLength) throw new InvalidOperationException("Invalid T[,,,] format"); - - var iLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - - var jLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - - var kLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - - var lLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - - var maxLen = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var array = new T[iLength, jLength, kLength, lLength]; - - var i = 0; - var j = 0; - var k = 0; - var l = -1; - for (int loop = 0; loop < maxLen; loop++) - { - if (l < lLength - 1) - { - l++; - } - else if (k < kLength - 1) - { - l = 0; - k++; - } - else if (j < jLength - 1) - { - l = 0; - k = 0; - j++; - } - else - { - l = 0; - k = 0; - j = 0; - i++; - } - - array[i, j, k, l] = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - } - - readSize = offset - startOffset; - return array; - } - } - } +using System; +using System.Collections.Generic; +using System.Text; + +namespace MessagePack.Formatters +{ + // multi dimentional array serialize to [i, j, [seq]] + + public sealed class TwoDimentionalArrayFormatter : IMessagePackFormatter + { + const int ArrayLength = 3; + + public int Serialize(ref byte[] bytes, int offset, T[,] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var i = value.GetLength(0); + var j = value.GetLength(1); + + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, ArrayLength); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, i); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, j); + + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + foreach (var item in value) + { + offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); + } + + return offset - startOffset; + } + } + + public T[,] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + if (len != ArrayLength) throw new InvalidOperationException("Invalid T[,] format"); + + var iLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + var jLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + var maxLen = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var array = new T[iLength, jLength]; + + var i = 0; + var j = -1; + for (int loop = 0; loop < maxLen; loop++) + { + if (j < jLength - 1) + { + j++; + } + else + { + j = 0; + i++; + } + + array[i, j] = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + } + + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class ThreeDimentionalArrayFormatter : IMessagePackFormatter + { + const int ArrayLength = 4; + + public int Serialize(ref byte[] bytes, int offset, T[,,] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var i = value.GetLength(0); + var j = value.GetLength(1); + var k = value.GetLength(2); + + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, ArrayLength); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, i); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, j); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, k); + + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + foreach (var item in value) + { + offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); + } + + return offset - startOffset; + } + } + + public T[,,] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + if (len != ArrayLength) throw new InvalidOperationException("Invalid T[,,] format"); + + var iLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + var jLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + var kLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + var maxLen = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var array = new T[iLength, jLength, kLength]; + + var i = 0; + var j = 0; + var k = -1; + for (int loop = 0; loop < maxLen; loop++) + { + if (k < kLength - 1) + { + k++; + } + else if (j < jLength - 1) + { + k = 0; + j++; + } + else + { + k = 0; + j = 0; + i++; + } + + array[i, j, k] = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + } + + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class FourDimentionalArrayFormatter : IMessagePackFormatter + { + const int ArrayLength = 5; + + public int Serialize(ref byte[] bytes, int offset, T[,,,] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var i = value.GetLength(0); + var j = value.GetLength(1); + var k = value.GetLength(2); + var l = value.GetLength(3); + + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, ArrayLength); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, i); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, j); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, k); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, l); + + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + foreach (var item in value) + { + offset += formatter.Serialize(ref bytes, offset, item, formatterResolver); + } + + return offset - startOffset; + } + } + + public T[,,,] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var formatter = formatterResolver.GetFormatterWithVerify(); + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + if (len != ArrayLength) throw new InvalidOperationException("Invalid T[,,,] format"); + + var iLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + var jLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + var kLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + var lLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + var maxLen = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var array = new T[iLength, jLength, kLength, lLength]; + + var i = 0; + var j = 0; + var k = 0; + var l = -1; + for (int loop = 0; loop < maxLen; loop++) + { + if (l < lLength - 1) + { + l++; + } + else if (k < kLength - 1) + { + l = 0; + k++; + } + else if (j < jLength - 1) + { + l = 0; + k = 0; + j++; + } + else + { + l = 0; + k = 0; + j = 0; + i++; + } + + array[i, j, k, l] = formatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + } + + readSize = offset - startOffset; + return array; + } + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/NullableFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/NullableFormatter.cs index 8d0088565..df82579e4 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/NullableFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/NullableFormatter.cs @@ -1,71 +1,71 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace MessagePack.Formatters -{ - public sealed class NullableFormatter : IMessagePackFormatter - where T : struct - { - public int Serialize(ref byte[] bytes, int offset, T? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Value, formatterResolver); - } - } - - public T? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - } - } - } - - public sealed class StaticNullableFormatter : IMessagePackFormatter - where T : struct - { - readonly IMessagePackFormatter underlyingFormatter; - - public StaticNullableFormatter(IMessagePackFormatter underlyingFormatter) - { - this.underlyingFormatter = underlyingFormatter; - } - - public int Serialize(ref byte[] bytes, int offset, T? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return underlyingFormatter.Serialize(ref bytes, offset, value.Value, formatterResolver); - } - } - - public T? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return underlyingFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); - } - } - } +using System; +using System.Collections.Generic; +using System.Text; + +namespace MessagePack.Formatters +{ + public sealed class NullableFormatter : IMessagePackFormatter + where T : struct + { + public int Serialize(ref byte[] bytes, int offset, T? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Value, formatterResolver); + } + } + + public T? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + } + } + } + + public sealed class StaticNullableFormatter : IMessagePackFormatter + where T : struct + { + readonly IMessagePackFormatter underlyingFormatter; + + public StaticNullableFormatter(IMessagePackFormatter underlyingFormatter) + { + this.underlyingFormatter = underlyingFormatter; + } + + public int Serialize(ref byte[] bytes, int offset, T? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return underlyingFormatter.Serialize(ref bytes, offset, value.Value, formatterResolver); + } + } + + public T? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return underlyingFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); + } + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/OldSpecFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/OldSpecFormatter.cs index 4531de6eb..abfd7abcc 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/OldSpecFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/OldSpecFormatter.cs @@ -1,260 +1,260 @@ -using System; - -namespace MessagePack.Formatters -{ - /// - /// Serialize by .NET native DateTime binary format. - /// - public sealed class NativeDateTimeFormatter : IMessagePackFormatter - { - public static readonly NativeDateTimeFormatter Instance = new NativeDateTimeFormatter(); - - public int Serialize(ref byte[] bytes, int offset, DateTime value, IFormatterResolver formatterResolver) - { - var dateData = value.ToBinary(); - return MessagePackBinary.WriteInt64(ref bytes, offset, dateData); - } - - public DateTime Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.GetMessagePackType(bytes, offset) == MessagePackType.Extension) - { - return DateTimeFormatter.Instance.Deserialize(bytes, offset, formatterResolver, out readSize); - } - - var dateData = MessagePackBinary.ReadInt64(bytes, offset, out readSize); - return DateTime.FromBinary(dateData); - } - } - - public sealed class NativeDateTimeArrayFormatter : IMessagePackFormatter - { - public static readonly NativeDateTimeArrayFormatter Instance = new NativeDateTimeArrayFormatter(); - - public int Serialize(ref byte[] bytes, int offset, DateTime[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteInt64(ref bytes, offset, value[i].ToBinary()); - } - - return offset - startOffset; - } - } - - public DateTime[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new DateTime[len]; - for (int i = 0; i < array.Length; i++) - { - var dateData = MessagePackBinary.ReadInt64(bytes, offset, out readSize); - array[i] = DateTime.FromBinary(dateData); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - // Old-Spec - // bin 8, bin 16, bin 32, str 8, str 16, str 32 -> fixraw or raw 16 or raw 32 - // fixraw -> fixstr, raw16 -> str16, raw32 -> str32 - // https://github.com/msgpack/msgpack/blob/master/spec-old.md - - /// - /// Old-MessagePack spec's string formatter. - /// - public sealed class OldSpecStringFormatter : IMessagePackFormatter - { - public static readonly OldSpecStringFormatter Instance = new OldSpecStringFormatter(); - - // Old spec does not exists str 8 format. - public int Serialize(ref byte[] bytes, int offset, string value, IFormatterResolver formatterResolver) - { - if (value == null) return MessagePackBinary.WriteNil(ref bytes, offset); - - MessagePackBinary.EnsureCapacity(ref bytes, offset, StringEncoding.UTF8.GetMaxByteCount(value.Length) + 5); - - int useOffset; - if (value.Length <= MessagePackRange.MaxFixStringLength) - { - useOffset = 1; - } - else if (value.Length <= ushort.MaxValue) - { - useOffset = 3; - } - else - { - useOffset = 5; - } - - // skip length area - var writeBeginOffset = offset + useOffset; - var byteCount = StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, writeBeginOffset); - - // move body and write prefix - if (byteCount <= MessagePackRange.MaxFixStringLength) - { - if (useOffset != 1) - { - Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 1, byteCount); - } - bytes[offset] = (byte)(MessagePackCode.MinFixStr | byteCount); - return byteCount + 1; - } - else if (byteCount <= ushort.MaxValue) - { - if (useOffset != 3) - { - Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 3, byteCount); - } - - bytes[offset] = MessagePackCode.Str16; - bytes[offset + 1] = unchecked((byte)(byteCount >> 8)); - bytes[offset + 2] = unchecked((byte)byteCount); - return byteCount + 3; - } - else - { - if (useOffset != 5) - { - Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 5, byteCount); - } - - bytes[offset] = MessagePackCode.Str32; - bytes[offset + 1] = unchecked((byte)(byteCount >> 24)); - bytes[offset + 2] = unchecked((byte)(byteCount >> 16)); - bytes[offset + 3] = unchecked((byte)(byteCount >> 8)); - bytes[offset + 4] = unchecked((byte)byteCount); - return byteCount + 5; - } - } - - public string Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadString(bytes, offset, out readSize); - } - } - - /// - /// Old-MessagePack spec's binary formatter. - /// - public sealed class OldSpecBinaryFormatter : IMessagePackFormatter - { - public static readonly OldSpecBinaryFormatter Instance = new OldSpecBinaryFormatter(); - - public int Serialize(ref byte[] bytes, int offset, byte[] value, IFormatterResolver formatterResolver) - { - if (value == null) return MessagePackBinary.WriteNil(ref bytes, offset); - - var byteCount = value.Length; - - if (byteCount <= MessagePackRange.MaxFixStringLength) - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, byteCount + 1); - - bytes[offset] = (byte)(MessagePackCode.MinFixStr | byteCount); - Buffer.BlockCopy(value, 0, bytes, offset + 1, byteCount); - return byteCount + 1; - } - else if (byteCount <= ushort.MaxValue) - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, byteCount + 3); - - bytes[offset] = MessagePackCode.Str16; - bytes[offset + 1] = unchecked((byte)(byteCount >> 8)); - bytes[offset + 2] = unchecked((byte)byteCount); - Buffer.BlockCopy(value, 0, bytes, offset + 3, byteCount); - return byteCount + 3; - } - else - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, byteCount + 5); - - bytes[offset] = MessagePackCode.Str32; - bytes[offset + 1] = unchecked((byte)(byteCount >> 24)); - bytes[offset + 2] = unchecked((byte)(byteCount >> 16)); - bytes[offset + 3] = unchecked((byte)(byteCount >> 8)); - bytes[offset + 4] = unchecked((byte)byteCount); - Buffer.BlockCopy(value, 0, bytes, offset + 5, byteCount); - return byteCount + 5; - } - } - - public byte[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - var type = MessagePackBinary.GetMessagePackType(bytes, offset); - if (type == MessagePackType.Nil) - { - readSize = 1; - return null; - } - else if (type == MessagePackType.Binary) - { - return MessagePackBinary.ReadBytes(bytes, offset, out readSize); - } - else if (type == MessagePackType.String) - { - var code = bytes[offset]; - unchecked - { - if (MessagePackCode.MinFixStr <= code && code <= MessagePackCode.MaxFixStr) - { - var length = bytes[offset] & 0x1F; - readSize = length + 1; - var result = new byte[length]; - Buffer.BlockCopy(bytes, offset + 1, result, 0, result.Length); - return result; - } - else if (code == MessagePackCode.Str8) - { - var length = (int)bytes[offset + 1]; - readSize = length + 2; - var result = new byte[length]; - Buffer.BlockCopy(bytes, offset + 2, result, 0, result.Length); - return result; - } - else if (code == MessagePackCode.Str16) - { - var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); - readSize = length + 3; - var result = new byte[length]; - Buffer.BlockCopy(bytes, offset + 3, result, 0, result.Length); - return result; - } - else if (code == MessagePackCode.Str32) - { - var length = (int)((uint)(bytes[offset + 1] << 24) | (uint)(bytes[offset + 2] << 16) | (uint)(bytes[offset + 3] << 8) | (uint)bytes[offset + 4]); - readSize = length + 5; - var result = new byte[length]; - Buffer.BlockCopy(bytes, offset + 5, result, 0, result.Length); - return result; - } - } - } - - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } -} +using System; + +namespace MessagePack.Formatters +{ + /// + /// Serialize by .NET native DateTime binary format. + /// + public sealed class NativeDateTimeFormatter : IMessagePackFormatter + { + public static readonly NativeDateTimeFormatter Instance = new NativeDateTimeFormatter(); + + public int Serialize(ref byte[] bytes, int offset, DateTime value, IFormatterResolver formatterResolver) + { + var dateData = value.ToBinary(); + return MessagePackBinary.WriteInt64(ref bytes, offset, dateData); + } + + public DateTime Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.GetMessagePackType(bytes, offset) == MessagePackType.Extension) + { + return DateTimeFormatter.Instance.Deserialize(bytes, offset, formatterResolver, out readSize); + } + + var dateData = MessagePackBinary.ReadInt64(bytes, offset, out readSize); + return DateTime.FromBinary(dateData); + } + } + + public sealed class NativeDateTimeArrayFormatter : IMessagePackFormatter + { + public static readonly NativeDateTimeArrayFormatter Instance = new NativeDateTimeArrayFormatter(); + + public int Serialize(ref byte[] bytes, int offset, DateTime[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteInt64(ref bytes, offset, value[i].ToBinary()); + } + + return offset - startOffset; + } + } + + public DateTime[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new DateTime[len]; + for (int i = 0; i < array.Length; i++) + { + var dateData = MessagePackBinary.ReadInt64(bytes, offset, out readSize); + array[i] = DateTime.FromBinary(dateData); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + // Old-Spec + // bin 8, bin 16, bin 32, str 8, str 16, str 32 -> fixraw or raw 16 or raw 32 + // fixraw -> fixstr, raw16 -> str16, raw32 -> str32 + // https://github.com/msgpack/msgpack/blob/master/spec-old.md + + /// + /// Old-MessagePack spec's string formatter. + /// + public sealed class OldSpecStringFormatter : IMessagePackFormatter + { + public static readonly OldSpecStringFormatter Instance = new OldSpecStringFormatter(); + + // Old spec does not exists str 8 format. + public int Serialize(ref byte[] bytes, int offset, string value, IFormatterResolver formatterResolver) + { + if (value == null) return MessagePackBinary.WriteNil(ref bytes, offset); + + MessagePackBinary.EnsureCapacity(ref bytes, offset, StringEncoding.UTF8.GetMaxByteCount(value.Length) + 5); + + int useOffset; + if (value.Length <= MessagePackRange.MaxFixStringLength) + { + useOffset = 1; + } + else if (value.Length <= ushort.MaxValue) + { + useOffset = 3; + } + else + { + useOffset = 5; + } + + // skip length area + var writeBeginOffset = offset + useOffset; + var byteCount = StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, writeBeginOffset); + + // move body and write prefix + if (byteCount <= MessagePackRange.MaxFixStringLength) + { + if (useOffset != 1) + { + Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 1, byteCount); + } + bytes[offset] = (byte)(MessagePackCode.MinFixStr | byteCount); + return byteCount + 1; + } + else if (byteCount <= ushort.MaxValue) + { + if (useOffset != 3) + { + Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 3, byteCount); + } + + bytes[offset] = MessagePackCode.Str16; + bytes[offset + 1] = unchecked((byte)(byteCount >> 8)); + bytes[offset + 2] = unchecked((byte)byteCount); + return byteCount + 3; + } + else + { + if (useOffset != 5) + { + Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 5, byteCount); + } + + bytes[offset] = MessagePackCode.Str32; + bytes[offset + 1] = unchecked((byte)(byteCount >> 24)); + bytes[offset + 2] = unchecked((byte)(byteCount >> 16)); + bytes[offset + 3] = unchecked((byte)(byteCount >> 8)); + bytes[offset + 4] = unchecked((byte)byteCount); + return byteCount + 5; + } + } + + public string Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadString(bytes, offset, out readSize); + } + } + + /// + /// Old-MessagePack spec's binary formatter. + /// + public sealed class OldSpecBinaryFormatter : IMessagePackFormatter + { + public static readonly OldSpecBinaryFormatter Instance = new OldSpecBinaryFormatter(); + + public int Serialize(ref byte[] bytes, int offset, byte[] value, IFormatterResolver formatterResolver) + { + if (value == null) return MessagePackBinary.WriteNil(ref bytes, offset); + + var byteCount = value.Length; + + if (byteCount <= MessagePackRange.MaxFixStringLength) + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, byteCount + 1); + + bytes[offset] = (byte)(MessagePackCode.MinFixStr | byteCount); + Buffer.BlockCopy(value, 0, bytes, offset + 1, byteCount); + return byteCount + 1; + } + else if (byteCount <= ushort.MaxValue) + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, byteCount + 3); + + bytes[offset] = MessagePackCode.Str16; + bytes[offset + 1] = unchecked((byte)(byteCount >> 8)); + bytes[offset + 2] = unchecked((byte)byteCount); + Buffer.BlockCopy(value, 0, bytes, offset + 3, byteCount); + return byteCount + 3; + } + else + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, byteCount + 5); + + bytes[offset] = MessagePackCode.Str32; + bytes[offset + 1] = unchecked((byte)(byteCount >> 24)); + bytes[offset + 2] = unchecked((byte)(byteCount >> 16)); + bytes[offset + 3] = unchecked((byte)(byteCount >> 8)); + bytes[offset + 4] = unchecked((byte)byteCount); + Buffer.BlockCopy(value, 0, bytes, offset + 5, byteCount); + return byteCount + 5; + } + } + + public byte[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + var type = MessagePackBinary.GetMessagePackType(bytes, offset); + if (type == MessagePackType.Nil) + { + readSize = 1; + return null; + } + else if (type == MessagePackType.Binary) + { + return MessagePackBinary.ReadBytes(bytes, offset, out readSize); + } + else if (type == MessagePackType.String) + { + var code = bytes[offset]; + unchecked + { + if (MessagePackCode.MinFixStr <= code && code <= MessagePackCode.MaxFixStr) + { + var length = bytes[offset] & 0x1F; + readSize = length + 1; + var result = new byte[length]; + Buffer.BlockCopy(bytes, offset + 1, result, 0, result.Length); + return result; + } + else if (code == MessagePackCode.Str8) + { + var length = (int)bytes[offset + 1]; + readSize = length + 2; + var result = new byte[length]; + Buffer.BlockCopy(bytes, offset + 2, result, 0, result.Length); + return result; + } + else if (code == MessagePackCode.Str16) + { + var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); + readSize = length + 3; + var result = new byte[length]; + Buffer.BlockCopy(bytes, offset + 3, result, 0, result.Length); + return result; + } + else if (code == MessagePackCode.Str32) + { + var length = (int)((uint)(bytes[offset + 1] << 24) | (uint)(bytes[offset + 2] << 16) | (uint)(bytes[offset + 3] << 8) | (uint)bytes[offset + 4]); + readSize = length + 5; + var result = new byte[length]; + Buffer.BlockCopy(bytes, offset + 5, result, 0, result.Length); + return result; + } + } + } + + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/PrimitiveFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/PrimitiveFormatter.cs index cd72e1fd9..85452ca49 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/PrimitiveFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/PrimitiveFormatter.cs @@ -1,1331 +1,1331 @@ -using System; - -namespace MessagePack.Formatters -{ - public sealed class Int16Formatter : IMessagePackFormatter - { - public static readonly Int16Formatter Instance = new Int16Formatter(); - - Int16Formatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Int16 value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteInt16(ref bytes, offset, value); - } - - public Int16 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadInt16(bytes, offset, out readSize); - } - } - - public sealed class NullableInt16Formatter : IMessagePackFormatter - { - public static readonly NullableInt16Formatter Instance = new NullableInt16Formatter(); - - NullableInt16Formatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Int16? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteInt16(ref bytes, offset, value.Value); - } - } - - public Int16? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadInt16(bytes, offset, out readSize); - } - } - } - - public sealed class Int16ArrayFormatter : IMessagePackFormatter - { - public static readonly Int16ArrayFormatter Instance = new Int16ArrayFormatter(); - - Int16ArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Int16[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteInt16(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public Int16[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new Int16[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadInt16(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class Int32Formatter : IMessagePackFormatter - { - public static readonly Int32Formatter Instance = new Int32Formatter(); - - Int32Formatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Int32 value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteInt32(ref bytes, offset, value); - } - - public Int32 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadInt32(bytes, offset, out readSize); - } - } - - public sealed class NullableInt32Formatter : IMessagePackFormatter - { - public static readonly NullableInt32Formatter Instance = new NullableInt32Formatter(); - - NullableInt32Formatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Int32? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteInt32(ref bytes, offset, value.Value); - } - } - - public Int32? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadInt32(bytes, offset, out readSize); - } - } - } - - public sealed class Int32ArrayFormatter : IMessagePackFormatter - { - public static readonly Int32ArrayFormatter Instance = new Int32ArrayFormatter(); - - Int32ArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Int32[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public Int32[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new Int32[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class Int64Formatter : IMessagePackFormatter - { - public static readonly Int64Formatter Instance = new Int64Formatter(); - - Int64Formatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Int64 value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteInt64(ref bytes, offset, value); - } - - public Int64 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadInt64(bytes, offset, out readSize); - } - } - - public sealed class NullableInt64Formatter : IMessagePackFormatter - { - public static readonly NullableInt64Formatter Instance = new NullableInt64Formatter(); - - NullableInt64Formatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Int64? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteInt64(ref bytes, offset, value.Value); - } - } - - public Int64? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadInt64(bytes, offset, out readSize); - } - } - } - - public sealed class Int64ArrayFormatter : IMessagePackFormatter - { - public static readonly Int64ArrayFormatter Instance = new Int64ArrayFormatter(); - - Int64ArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Int64[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteInt64(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public Int64[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new Int64[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadInt64(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class UInt16Formatter : IMessagePackFormatter - { - public static readonly UInt16Formatter Instance = new UInt16Formatter(); - - UInt16Formatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, UInt16 value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteUInt16(ref bytes, offset, value); - } - - public UInt16 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadUInt16(bytes, offset, out readSize); - } - } - - public sealed class NullableUInt16Formatter : IMessagePackFormatter - { - public static readonly NullableUInt16Formatter Instance = new NullableUInt16Formatter(); - - NullableUInt16Formatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, UInt16? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteUInt16(ref bytes, offset, value.Value); - } - } - - public UInt16? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadUInt16(bytes, offset, out readSize); - } - } - } - - public sealed class UInt16ArrayFormatter : IMessagePackFormatter - { - public static readonly UInt16ArrayFormatter Instance = new UInt16ArrayFormatter(); - - UInt16ArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, UInt16[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteUInt16(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public UInt16[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new UInt16[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadUInt16(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class UInt32Formatter : IMessagePackFormatter - { - public static readonly UInt32Formatter Instance = new UInt32Formatter(); - - UInt32Formatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, UInt32 value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteUInt32(ref bytes, offset, value); - } - - public UInt32 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadUInt32(bytes, offset, out readSize); - } - } - - public sealed class NullableUInt32Formatter : IMessagePackFormatter - { - public static readonly NullableUInt32Formatter Instance = new NullableUInt32Formatter(); - - NullableUInt32Formatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, UInt32? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteUInt32(ref bytes, offset, value.Value); - } - } - - public UInt32? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadUInt32(bytes, offset, out readSize); - } - } - } - - public sealed class UInt32ArrayFormatter : IMessagePackFormatter - { - public static readonly UInt32ArrayFormatter Instance = new UInt32ArrayFormatter(); - - UInt32ArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, UInt32[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteUInt32(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public UInt32[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new UInt32[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadUInt32(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class UInt64Formatter : IMessagePackFormatter - { - public static readonly UInt64Formatter Instance = new UInt64Formatter(); - - UInt64Formatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, UInt64 value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteUInt64(ref bytes, offset, value); - } - - public UInt64 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadUInt64(bytes, offset, out readSize); - } - } - - public sealed class NullableUInt64Formatter : IMessagePackFormatter - { - public static readonly NullableUInt64Formatter Instance = new NullableUInt64Formatter(); - - NullableUInt64Formatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, UInt64? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteUInt64(ref bytes, offset, value.Value); - } - } - - public UInt64? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadUInt64(bytes, offset, out readSize); - } - } - } - - public sealed class UInt64ArrayFormatter : IMessagePackFormatter - { - public static readonly UInt64ArrayFormatter Instance = new UInt64ArrayFormatter(); - - UInt64ArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, UInt64[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteUInt64(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public UInt64[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new UInt64[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadUInt64(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class SingleFormatter : IMessagePackFormatter - { - public static readonly SingleFormatter Instance = new SingleFormatter(); - - SingleFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Single value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteSingle(ref bytes, offset, value); - } - - public Single Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadSingle(bytes, offset, out readSize); - } - } - - public sealed class NullableSingleFormatter : IMessagePackFormatter - { - public static readonly NullableSingleFormatter Instance = new NullableSingleFormatter(); - - NullableSingleFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Single? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteSingle(ref bytes, offset, value.Value); - } - } - - public Single? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadSingle(bytes, offset, out readSize); - } - } - } - - public sealed class SingleArrayFormatter : IMessagePackFormatter - { - public static readonly SingleArrayFormatter Instance = new SingleArrayFormatter(); - - SingleArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Single[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public Single[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new Single[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class DoubleFormatter : IMessagePackFormatter - { - public static readonly DoubleFormatter Instance = new DoubleFormatter(); - - DoubleFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Double value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteDouble(ref bytes, offset, value); - } - - public Double Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadDouble(bytes, offset, out readSize); - } - } - - public sealed class NullableDoubleFormatter : IMessagePackFormatter - { - public static readonly NullableDoubleFormatter Instance = new NullableDoubleFormatter(); - - NullableDoubleFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Double? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteDouble(ref bytes, offset, value.Value); - } - } - - public Double? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadDouble(bytes, offset, out readSize); - } - } - } - - public sealed class DoubleArrayFormatter : IMessagePackFormatter - { - public static readonly DoubleArrayFormatter Instance = new DoubleArrayFormatter(); - - DoubleArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Double[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteDouble(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public Double[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new Double[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadDouble(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class BooleanFormatter : IMessagePackFormatter - { - public static readonly BooleanFormatter Instance = new BooleanFormatter(); - - BooleanFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Boolean value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteBoolean(ref bytes, offset, value); - } - - public Boolean Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadBoolean(bytes, offset, out readSize); - } - } - - public sealed class NullableBooleanFormatter : IMessagePackFormatter - { - public static readonly NullableBooleanFormatter Instance = new NullableBooleanFormatter(); - - NullableBooleanFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Boolean? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteBoolean(ref bytes, offset, value.Value); - } - } - - public Boolean? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadBoolean(bytes, offset, out readSize); - } - } - } - - public sealed class BooleanArrayFormatter : IMessagePackFormatter - { - public static readonly BooleanArrayFormatter Instance = new BooleanArrayFormatter(); - - BooleanArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Boolean[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteBoolean(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public Boolean[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new Boolean[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadBoolean(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class ByteFormatter : IMessagePackFormatter - { - public static readonly ByteFormatter Instance = new ByteFormatter(); - - ByteFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Byte value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteByte(ref bytes, offset, value); - } - - public Byte Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadByte(bytes, offset, out readSize); - } - } - - public sealed class NullableByteFormatter : IMessagePackFormatter - { - public static readonly NullableByteFormatter Instance = new NullableByteFormatter(); - - NullableByteFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Byte? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteByte(ref bytes, offset, value.Value); - } - } - - public Byte? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadByte(bytes, offset, out readSize); - } - } - } - - - public sealed class SByteFormatter : IMessagePackFormatter - { - public static readonly SByteFormatter Instance = new SByteFormatter(); - - SByteFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, SByte value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteSByte(ref bytes, offset, value); - } - - public SByte Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadSByte(bytes, offset, out readSize); - } - } - - public sealed class NullableSByteFormatter : IMessagePackFormatter - { - public static readonly NullableSByteFormatter Instance = new NullableSByteFormatter(); - - NullableSByteFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, SByte? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteSByte(ref bytes, offset, value.Value); - } - } - - public SByte? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadSByte(bytes, offset, out readSize); - } - } - } - - public sealed class SByteArrayFormatter : IMessagePackFormatter - { - public static readonly SByteArrayFormatter Instance = new SByteArrayFormatter(); - - SByteArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, SByte[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteSByte(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public SByte[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new SByte[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadSByte(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class CharFormatter : IMessagePackFormatter - { - public static readonly CharFormatter Instance = new CharFormatter(); - - CharFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Char value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteChar(ref bytes, offset, value); - } - - public Char Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadChar(bytes, offset, out readSize); - } - } - - public sealed class NullableCharFormatter : IMessagePackFormatter - { - public static readonly NullableCharFormatter Instance = new NullableCharFormatter(); - - NullableCharFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, Char? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteChar(ref bytes, offset, value.Value); - } - } - - public Char? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadChar(bytes, offset, out readSize); - } - } - } - - public sealed class CharArrayFormatter : IMessagePackFormatter - { - public static readonly CharArrayFormatter Instance = new CharArrayFormatter(); - - CharArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Char[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteChar(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public Char[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new Char[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadChar(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class DateTimeFormatter : IMessagePackFormatter - { - public static readonly DateTimeFormatter Instance = new DateTimeFormatter(); - - DateTimeFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, DateTime value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteDateTime(ref bytes, offset, value); - } - - public DateTime Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadDateTime(bytes, offset, out readSize); - } - } - - public sealed class NullableDateTimeFormatter : IMessagePackFormatter - { - public static readonly NullableDateTimeFormatter Instance = new NullableDateTimeFormatter(); - - NullableDateTimeFormatter() - { - } - - public int Serialize(ref byte[] bytes, int offset, DateTime? value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteDateTime(ref bytes, offset, value.Value); - } - } - - public DateTime? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return MessagePackBinary.ReadDateTime(bytes, offset, out readSize); - } - } - } - - public sealed class DateTimeArrayFormatter : IMessagePackFormatter - { - public static readonly DateTimeArrayFormatter Instance = new DateTimeArrayFormatter(); - - DateTimeArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, DateTime[] value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteDateTime(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public DateTime[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new DateTime[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadDateTime(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - +using System; + +namespace MessagePack.Formatters +{ + public sealed class Int16Formatter : IMessagePackFormatter + { + public static readonly Int16Formatter Instance = new Int16Formatter(); + + Int16Formatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Int16 value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteInt16(ref bytes, offset, value); + } + + public Int16 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadInt16(bytes, offset, out readSize); + } + } + + public sealed class NullableInt16Formatter : IMessagePackFormatter + { + public static readonly NullableInt16Formatter Instance = new NullableInt16Formatter(); + + NullableInt16Formatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Int16? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteInt16(ref bytes, offset, value.Value); + } + } + + public Int16? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadInt16(bytes, offset, out readSize); + } + } + } + + public sealed class Int16ArrayFormatter : IMessagePackFormatter + { + public static readonly Int16ArrayFormatter Instance = new Int16ArrayFormatter(); + + Int16ArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Int16[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteInt16(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public Int16[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new Int16[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadInt16(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class Int32Formatter : IMessagePackFormatter + { + public static readonly Int32Formatter Instance = new Int32Formatter(); + + Int32Formatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Int32 value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteInt32(ref bytes, offset, value); + } + + public Int32 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadInt32(bytes, offset, out readSize); + } + } + + public sealed class NullableInt32Formatter : IMessagePackFormatter + { + public static readonly NullableInt32Formatter Instance = new NullableInt32Formatter(); + + NullableInt32Formatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Int32? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteInt32(ref bytes, offset, value.Value); + } + } + + public Int32? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadInt32(bytes, offset, out readSize); + } + } + } + + public sealed class Int32ArrayFormatter : IMessagePackFormatter + { + public static readonly Int32ArrayFormatter Instance = new Int32ArrayFormatter(); + + Int32ArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Int32[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public Int32[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new Int32[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class Int64Formatter : IMessagePackFormatter + { + public static readonly Int64Formatter Instance = new Int64Formatter(); + + Int64Formatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Int64 value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteInt64(ref bytes, offset, value); + } + + public Int64 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadInt64(bytes, offset, out readSize); + } + } + + public sealed class NullableInt64Formatter : IMessagePackFormatter + { + public static readonly NullableInt64Formatter Instance = new NullableInt64Formatter(); + + NullableInt64Formatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Int64? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteInt64(ref bytes, offset, value.Value); + } + } + + public Int64? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadInt64(bytes, offset, out readSize); + } + } + } + + public sealed class Int64ArrayFormatter : IMessagePackFormatter + { + public static readonly Int64ArrayFormatter Instance = new Int64ArrayFormatter(); + + Int64ArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Int64[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteInt64(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public Int64[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new Int64[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadInt64(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class UInt16Formatter : IMessagePackFormatter + { + public static readonly UInt16Formatter Instance = new UInt16Formatter(); + + UInt16Formatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, UInt16 value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteUInt16(ref bytes, offset, value); + } + + public UInt16 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadUInt16(bytes, offset, out readSize); + } + } + + public sealed class NullableUInt16Formatter : IMessagePackFormatter + { + public static readonly NullableUInt16Formatter Instance = new NullableUInt16Formatter(); + + NullableUInt16Formatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, UInt16? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteUInt16(ref bytes, offset, value.Value); + } + } + + public UInt16? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadUInt16(bytes, offset, out readSize); + } + } + } + + public sealed class UInt16ArrayFormatter : IMessagePackFormatter + { + public static readonly UInt16ArrayFormatter Instance = new UInt16ArrayFormatter(); + + UInt16ArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, UInt16[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteUInt16(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public UInt16[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new UInt16[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadUInt16(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class UInt32Formatter : IMessagePackFormatter + { + public static readonly UInt32Formatter Instance = new UInt32Formatter(); + + UInt32Formatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, UInt32 value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteUInt32(ref bytes, offset, value); + } + + public UInt32 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadUInt32(bytes, offset, out readSize); + } + } + + public sealed class NullableUInt32Formatter : IMessagePackFormatter + { + public static readonly NullableUInt32Formatter Instance = new NullableUInt32Formatter(); + + NullableUInt32Formatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, UInt32? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteUInt32(ref bytes, offset, value.Value); + } + } + + public UInt32? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadUInt32(bytes, offset, out readSize); + } + } + } + + public sealed class UInt32ArrayFormatter : IMessagePackFormatter + { + public static readonly UInt32ArrayFormatter Instance = new UInt32ArrayFormatter(); + + UInt32ArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, UInt32[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteUInt32(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public UInt32[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new UInt32[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadUInt32(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class UInt64Formatter : IMessagePackFormatter + { + public static readonly UInt64Formatter Instance = new UInt64Formatter(); + + UInt64Formatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, UInt64 value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteUInt64(ref bytes, offset, value); + } + + public UInt64 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadUInt64(bytes, offset, out readSize); + } + } + + public sealed class NullableUInt64Formatter : IMessagePackFormatter + { + public static readonly NullableUInt64Formatter Instance = new NullableUInt64Formatter(); + + NullableUInt64Formatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, UInt64? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteUInt64(ref bytes, offset, value.Value); + } + } + + public UInt64? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadUInt64(bytes, offset, out readSize); + } + } + } + + public sealed class UInt64ArrayFormatter : IMessagePackFormatter + { + public static readonly UInt64ArrayFormatter Instance = new UInt64ArrayFormatter(); + + UInt64ArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, UInt64[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteUInt64(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public UInt64[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new UInt64[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadUInt64(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class SingleFormatter : IMessagePackFormatter + { + public static readonly SingleFormatter Instance = new SingleFormatter(); + + SingleFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Single value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteSingle(ref bytes, offset, value); + } + + public Single Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadSingle(bytes, offset, out readSize); + } + } + + public sealed class NullableSingleFormatter : IMessagePackFormatter + { + public static readonly NullableSingleFormatter Instance = new NullableSingleFormatter(); + + NullableSingleFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Single? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteSingle(ref bytes, offset, value.Value); + } + } + + public Single? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadSingle(bytes, offset, out readSize); + } + } + } + + public sealed class SingleArrayFormatter : IMessagePackFormatter + { + public static readonly SingleArrayFormatter Instance = new SingleArrayFormatter(); + + SingleArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Single[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public Single[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new Single[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class DoubleFormatter : IMessagePackFormatter + { + public static readonly DoubleFormatter Instance = new DoubleFormatter(); + + DoubleFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Double value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteDouble(ref bytes, offset, value); + } + + public Double Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadDouble(bytes, offset, out readSize); + } + } + + public sealed class NullableDoubleFormatter : IMessagePackFormatter + { + public static readonly NullableDoubleFormatter Instance = new NullableDoubleFormatter(); + + NullableDoubleFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Double? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteDouble(ref bytes, offset, value.Value); + } + } + + public Double? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadDouble(bytes, offset, out readSize); + } + } + } + + public sealed class DoubleArrayFormatter : IMessagePackFormatter + { + public static readonly DoubleArrayFormatter Instance = new DoubleArrayFormatter(); + + DoubleArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Double[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteDouble(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public Double[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new Double[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadDouble(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class BooleanFormatter : IMessagePackFormatter + { + public static readonly BooleanFormatter Instance = new BooleanFormatter(); + + BooleanFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Boolean value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteBoolean(ref bytes, offset, value); + } + + public Boolean Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadBoolean(bytes, offset, out readSize); + } + } + + public sealed class NullableBooleanFormatter : IMessagePackFormatter + { + public static readonly NullableBooleanFormatter Instance = new NullableBooleanFormatter(); + + NullableBooleanFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Boolean? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteBoolean(ref bytes, offset, value.Value); + } + } + + public Boolean? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadBoolean(bytes, offset, out readSize); + } + } + } + + public sealed class BooleanArrayFormatter : IMessagePackFormatter + { + public static readonly BooleanArrayFormatter Instance = new BooleanArrayFormatter(); + + BooleanArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Boolean[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteBoolean(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public Boolean[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new Boolean[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadBoolean(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class ByteFormatter : IMessagePackFormatter + { + public static readonly ByteFormatter Instance = new ByteFormatter(); + + ByteFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Byte value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteByte(ref bytes, offset, value); + } + + public Byte Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadByte(bytes, offset, out readSize); + } + } + + public sealed class NullableByteFormatter : IMessagePackFormatter + { + public static readonly NullableByteFormatter Instance = new NullableByteFormatter(); + + NullableByteFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Byte? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteByte(ref bytes, offset, value.Value); + } + } + + public Byte? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadByte(bytes, offset, out readSize); + } + } + } + + + public sealed class SByteFormatter : IMessagePackFormatter + { + public static readonly SByteFormatter Instance = new SByteFormatter(); + + SByteFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, SByte value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteSByte(ref bytes, offset, value); + } + + public SByte Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadSByte(bytes, offset, out readSize); + } + } + + public sealed class NullableSByteFormatter : IMessagePackFormatter + { + public static readonly NullableSByteFormatter Instance = new NullableSByteFormatter(); + + NullableSByteFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, SByte? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteSByte(ref bytes, offset, value.Value); + } + } + + public SByte? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadSByte(bytes, offset, out readSize); + } + } + } + + public sealed class SByteArrayFormatter : IMessagePackFormatter + { + public static readonly SByteArrayFormatter Instance = new SByteArrayFormatter(); + + SByteArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, SByte[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteSByte(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public SByte[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new SByte[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadSByte(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class CharFormatter : IMessagePackFormatter + { + public static readonly CharFormatter Instance = new CharFormatter(); + + CharFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Char value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteChar(ref bytes, offset, value); + } + + public Char Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadChar(bytes, offset, out readSize); + } + } + + public sealed class NullableCharFormatter : IMessagePackFormatter + { + public static readonly NullableCharFormatter Instance = new NullableCharFormatter(); + + NullableCharFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, Char? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteChar(ref bytes, offset, value.Value); + } + } + + public Char? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadChar(bytes, offset, out readSize); + } + } + } + + public sealed class CharArrayFormatter : IMessagePackFormatter + { + public static readonly CharArrayFormatter Instance = new CharArrayFormatter(); + + CharArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Char[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteChar(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public Char[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new Char[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadChar(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class DateTimeFormatter : IMessagePackFormatter + { + public static readonly DateTimeFormatter Instance = new DateTimeFormatter(); + + DateTimeFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, DateTime value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteDateTime(ref bytes, offset, value); + } + + public DateTime Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadDateTime(bytes, offset, out readSize); + } + } + + public sealed class NullableDateTimeFormatter : IMessagePackFormatter + { + public static readonly NullableDateTimeFormatter Instance = new NullableDateTimeFormatter(); + + NullableDateTimeFormatter() + { + } + + public int Serialize(ref byte[] bytes, int offset, DateTime? value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteDateTime(ref bytes, offset, value.Value); + } + } + + public DateTime? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return MessagePackBinary.ReadDateTime(bytes, offset, out readSize); + } + } + } + + public sealed class DateTimeArrayFormatter : IMessagePackFormatter + { + public static readonly DateTimeArrayFormatter Instance = new DateTimeArrayFormatter(); + + DateTimeArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, DateTime[] value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteDateTime(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public DateTime[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new DateTime[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadDateTime(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/PrimitiveObjectFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/PrimitiveObjectFormatter.cs index dfeb15090..e0604a92f 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/PrimitiveObjectFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/PrimitiveObjectFormatter.cs @@ -1,246 +1,246 @@ -using System; -using System.Reflection; -using System.Collections.Generic; - -namespace MessagePack.Formatters -{ - public sealed class PrimitiveObjectFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new PrimitiveObjectFormatter(); - - static readonly Dictionary typeToJumpCode = new Dictionary() - { - { typeof(Boolean), 0 }, - { typeof(Char), 1 }, - { typeof(SByte), 2 }, - { typeof(Byte), 3 }, - { typeof(Int16), 4 }, - { typeof(UInt16), 5 }, - { typeof(Int32), 6 }, - { typeof(UInt32), 7 }, - { typeof(Int64), 8 }, - { typeof(UInt64),9 }, - { typeof(Single), 10 }, - { typeof(Double), 11 }, - { typeof(DateTime), 12 }, - { typeof(string), 13 }, - { typeof(byte[]), 14 } - }; - - PrimitiveObjectFormatter() - { - - } - -#if !UNITY_WSA - - public static bool IsSupportedType(Type type, TypeInfo typeInfo, object value) - { - if (value == null) return true; - if (typeToJumpCode.ContainsKey(type)) return true; - if (typeInfo.IsEnum) return true; - - if (value is System.Collections.IDictionary) return true; - if (value is System.Collections.ICollection) return true; - - return false; - } - -#endif - - public int Serialize(ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - - var t = value.GetType(); - - int code; - if (typeToJumpCode.TryGetValue(t, out code)) - { - switch (code) - { - case 0: - return MessagePackBinary.WriteBoolean(ref bytes, offset, (bool)value); - case 1: - return MessagePackBinary.WriteChar(ref bytes, offset, (char)value); - case 2: - return MessagePackBinary.WriteSByteForceSByteBlock(ref bytes, offset, (sbyte)value); - case 3: - return MessagePackBinary.WriteByteForceByteBlock(ref bytes, offset, (byte)value); - case 4: - return MessagePackBinary.WriteInt16ForceInt16Block(ref bytes, offset, (Int16)value); - case 5: - return MessagePackBinary.WriteUInt16ForceUInt16Block(ref bytes, offset, (UInt16)value); - case 6: - return MessagePackBinary.WriteInt32ForceInt32Block(ref bytes, offset, (Int32)value); - case 7: - return MessagePackBinary.WriteUInt32ForceUInt32Block(ref bytes, offset, (UInt32)value); - case 8: - return MessagePackBinary.WriteInt64ForceInt64Block(ref bytes, offset, (Int64)value); - case 9: - return MessagePackBinary.WriteUInt64ForceUInt64Block(ref bytes, offset, (UInt64)value); - case 10: - return MessagePackBinary.WriteSingle(ref bytes, offset, (Single)value); - case 11: - return MessagePackBinary.WriteDouble(ref bytes, offset, (double)value); - case 12: - return MessagePackBinary.WriteDateTime(ref bytes, offset, (DateTime)value); - case 13: - return MessagePackBinary.WriteString(ref bytes, offset, (string)value); - case 14: - return MessagePackBinary.WriteBytes(ref bytes, offset, (byte[])value); - default: - throw new InvalidOperationException("Not supported primitive object resolver. type:" + t.Name); - } - } - else - { -#if UNITY_WSA && !NETFX_CORE - if (t.IsEnum) -#else - if (t.GetTypeInfo().IsEnum) -#endif - { - var underlyingType = Enum.GetUnderlyingType(t); - var code2 = typeToJumpCode[underlyingType]; - switch (code2) - { - case 2: - return MessagePackBinary.WriteSByteForceSByteBlock(ref bytes, offset, (sbyte)value); - case 3: - return MessagePackBinary.WriteByteForceByteBlock(ref bytes, offset, (byte)value); - case 4: - return MessagePackBinary.WriteInt16ForceInt16Block(ref bytes, offset, (Int16)value); - case 5: - return MessagePackBinary.WriteUInt16ForceUInt16Block(ref bytes, offset, (UInt16)value); - case 6: - return MessagePackBinary.WriteInt32ForceInt32Block(ref bytes, offset, (Int32)value); - case 7: - return MessagePackBinary.WriteUInt32ForceUInt32Block(ref bytes, offset, (UInt32)value); - case 8: - return MessagePackBinary.WriteInt64ForceInt64Block(ref bytes, offset, (Int64)value); - case 9: - return MessagePackBinary.WriteUInt64ForceUInt64Block(ref bytes, offset, (UInt64)value); - default: - break; - } - } - else if (value is System.Collections.IDictionary) // check IDictionary first - { - var d = value as System.Collections.IDictionary; - var startOffset = offset; - offset += MessagePackBinary.WriteMapHeader(ref bytes, offset, d.Count); - foreach (System.Collections.DictionaryEntry item in d) - { - offset += Serialize(ref bytes, offset, item.Key, formatterResolver); - offset += Serialize(ref bytes, offset, item.Value, formatterResolver); - } - return offset - startOffset; - } - else if (value is System.Collections.ICollection) - { - var c = value as System.Collections.ICollection; - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, c.Count); - foreach (var item in c) - { - offset += Serialize(ref bytes, offset, item, formatterResolver); - } - return offset - startOffset; - } - } - - throw new InvalidOperationException("Not supported primitive object resolver. type:" + t.Name); - } - - public object Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - var type = MessagePackBinary.GetMessagePackType(bytes, offset); - switch (type) - { - case MessagePackType.Integer: - var code = bytes[offset]; - if (MessagePackCode.MinNegativeFixInt <= code && code <= MessagePackCode.MaxNegativeFixInt) return MessagePackBinary.ReadSByte(bytes, offset, out readSize); - else if (MessagePackCode.MinFixInt <= code && code <= MessagePackCode.MaxFixInt) return MessagePackBinary.ReadByte(bytes, offset, out readSize); - else if (code == MessagePackCode.Int8) return MessagePackBinary.ReadSByte(bytes, offset, out readSize); - else if (code == MessagePackCode.Int16) return MessagePackBinary.ReadInt16(bytes, offset, out readSize); - else if (code == MessagePackCode.Int32) return MessagePackBinary.ReadInt32(bytes, offset, out readSize); - else if (code == MessagePackCode.Int64) return MessagePackBinary.ReadInt64(bytes, offset, out readSize); - else if (code == MessagePackCode.UInt8) return MessagePackBinary.ReadByte(bytes, offset, out readSize); - else if (code == MessagePackCode.UInt16) return MessagePackBinary.ReadUInt16(bytes, offset, out readSize); - else if (code == MessagePackCode.UInt32) return MessagePackBinary.ReadUInt32(bytes, offset, out readSize); - else if (code == MessagePackCode.UInt64) return MessagePackBinary.ReadUInt64(bytes, offset, out readSize); - throw new InvalidOperationException("Invalid primitive bytes."); - case MessagePackType.Boolean: - return MessagePackBinary.ReadBoolean(bytes, offset, out readSize); - case MessagePackType.Float: - if (MessagePackCode.Float32 == bytes[offset]) - { - return MessagePackBinary.ReadSingle(bytes, offset, out readSize); - } - else - { - return MessagePackBinary.ReadDouble(bytes, offset, out readSize); - } - case MessagePackType.String: - return MessagePackBinary.ReadString(bytes, offset, out readSize); - case MessagePackType.Binary: - return MessagePackBinary.ReadBytes(bytes, offset, out readSize); - case MessagePackType.Extension: - var ext = MessagePackBinary.ReadExtensionFormatHeader(bytes, offset, out readSize); - if (ext.TypeCode == ReservedMessagePackExtensionTypeCode.DateTime) - { - return MessagePackBinary.ReadDateTime(bytes, offset, out readSize); - } - throw new InvalidOperationException("Invalid primitive bytes."); - case MessagePackType.Array: - { - var length = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - var startOffset = offset; - offset += readSize; - - var objectFormatter = formatterResolver.GetFormatter(); - var array = new object[length]; - for (int i = 0; i < length; i++) - { - array[i] = objectFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - } - - readSize = offset - startOffset; - return array; - } - case MessagePackType.Map: - { - var length = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); - var startOffset = offset; - offset += readSize; - - var objectFormatter = formatterResolver.GetFormatter(); - var hash = new Dictionary(length); - for (int i = 0; i < length; i++) - { - var key = objectFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - var value = objectFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - hash.Add(key, value); - } - - readSize = offset - startOffset; - return hash; - } - case MessagePackType.Nil: - readSize = 1; - return null; - default: - throw new InvalidOperationException("Invalid primitive bytes."); - } - } - } -} +using System; +using System.Reflection; +using System.Collections.Generic; + +namespace MessagePack.Formatters +{ + public sealed class PrimitiveObjectFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new PrimitiveObjectFormatter(); + + static readonly Dictionary typeToJumpCode = new Dictionary() + { + { typeof(Boolean), 0 }, + { typeof(Char), 1 }, + { typeof(SByte), 2 }, + { typeof(Byte), 3 }, + { typeof(Int16), 4 }, + { typeof(UInt16), 5 }, + { typeof(Int32), 6 }, + { typeof(UInt32), 7 }, + { typeof(Int64), 8 }, + { typeof(UInt64),9 }, + { typeof(Single), 10 }, + { typeof(Double), 11 }, + { typeof(DateTime), 12 }, + { typeof(string), 13 }, + { typeof(byte[]), 14 } + }; + + PrimitiveObjectFormatter() + { + + } + +#if !UNITY_WSA + + public static bool IsSupportedType(Type type, TypeInfo typeInfo, object value) + { + if (value == null) return true; + if (typeToJumpCode.ContainsKey(type)) return true; + if (typeInfo.IsEnum) return true; + + if (value is System.Collections.IDictionary) return true; + if (value is System.Collections.ICollection) return true; + + return false; + } + +#endif + + public int Serialize(ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + + var t = value.GetType(); + + int code; + if (typeToJumpCode.TryGetValue(t, out code)) + { + switch (code) + { + case 0: + return MessagePackBinary.WriteBoolean(ref bytes, offset, (bool)value); + case 1: + return MessagePackBinary.WriteChar(ref bytes, offset, (char)value); + case 2: + return MessagePackBinary.WriteSByteForceSByteBlock(ref bytes, offset, (sbyte)value); + case 3: + return MessagePackBinary.WriteByteForceByteBlock(ref bytes, offset, (byte)value); + case 4: + return MessagePackBinary.WriteInt16ForceInt16Block(ref bytes, offset, (Int16)value); + case 5: + return MessagePackBinary.WriteUInt16ForceUInt16Block(ref bytes, offset, (UInt16)value); + case 6: + return MessagePackBinary.WriteInt32ForceInt32Block(ref bytes, offset, (Int32)value); + case 7: + return MessagePackBinary.WriteUInt32ForceUInt32Block(ref bytes, offset, (UInt32)value); + case 8: + return MessagePackBinary.WriteInt64ForceInt64Block(ref bytes, offset, (Int64)value); + case 9: + return MessagePackBinary.WriteUInt64ForceUInt64Block(ref bytes, offset, (UInt64)value); + case 10: + return MessagePackBinary.WriteSingle(ref bytes, offset, (Single)value); + case 11: + return MessagePackBinary.WriteDouble(ref bytes, offset, (double)value); + case 12: + return MessagePackBinary.WriteDateTime(ref bytes, offset, (DateTime)value); + case 13: + return MessagePackBinary.WriteString(ref bytes, offset, (string)value); + case 14: + return MessagePackBinary.WriteBytes(ref bytes, offset, (byte[])value); + default: + throw new InvalidOperationException("Not supported primitive object resolver. type:" + t.Name); + } + } + else + { +#if UNITY_WSA && !NETFX_CORE + if (t.IsEnum) +#else + if (t.GetTypeInfo().IsEnum) +#endif + { + var underlyingType = Enum.GetUnderlyingType(t); + var code2 = typeToJumpCode[underlyingType]; + switch (code2) + { + case 2: + return MessagePackBinary.WriteSByteForceSByteBlock(ref bytes, offset, (sbyte)value); + case 3: + return MessagePackBinary.WriteByteForceByteBlock(ref bytes, offset, (byte)value); + case 4: + return MessagePackBinary.WriteInt16ForceInt16Block(ref bytes, offset, (Int16)value); + case 5: + return MessagePackBinary.WriteUInt16ForceUInt16Block(ref bytes, offset, (UInt16)value); + case 6: + return MessagePackBinary.WriteInt32ForceInt32Block(ref bytes, offset, (Int32)value); + case 7: + return MessagePackBinary.WriteUInt32ForceUInt32Block(ref bytes, offset, (UInt32)value); + case 8: + return MessagePackBinary.WriteInt64ForceInt64Block(ref bytes, offset, (Int64)value); + case 9: + return MessagePackBinary.WriteUInt64ForceUInt64Block(ref bytes, offset, (UInt64)value); + default: + break; + } + } + else if (value is System.Collections.IDictionary) // check IDictionary first + { + var d = value as System.Collections.IDictionary; + var startOffset = offset; + offset += MessagePackBinary.WriteMapHeader(ref bytes, offset, d.Count); + foreach (System.Collections.DictionaryEntry item in d) + { + offset += Serialize(ref bytes, offset, item.Key, formatterResolver); + offset += Serialize(ref bytes, offset, item.Value, formatterResolver); + } + return offset - startOffset; + } + else if (value is System.Collections.ICollection) + { + var c = value as System.Collections.ICollection; + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, c.Count); + foreach (var item in c) + { + offset += Serialize(ref bytes, offset, item, formatterResolver); + } + return offset - startOffset; + } + } + + throw new InvalidOperationException("Not supported primitive object resolver. type:" + t.Name); + } + + public object Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + var type = MessagePackBinary.GetMessagePackType(bytes, offset); + switch (type) + { + case MessagePackType.Integer: + var code = bytes[offset]; + if (MessagePackCode.MinNegativeFixInt <= code && code <= MessagePackCode.MaxNegativeFixInt) return MessagePackBinary.ReadSByte(bytes, offset, out readSize); + else if (MessagePackCode.MinFixInt <= code && code <= MessagePackCode.MaxFixInt) return MessagePackBinary.ReadByte(bytes, offset, out readSize); + else if (code == MessagePackCode.Int8) return MessagePackBinary.ReadSByte(bytes, offset, out readSize); + else if (code == MessagePackCode.Int16) return MessagePackBinary.ReadInt16(bytes, offset, out readSize); + else if (code == MessagePackCode.Int32) return MessagePackBinary.ReadInt32(bytes, offset, out readSize); + else if (code == MessagePackCode.Int64) return MessagePackBinary.ReadInt64(bytes, offset, out readSize); + else if (code == MessagePackCode.UInt8) return MessagePackBinary.ReadByte(bytes, offset, out readSize); + else if (code == MessagePackCode.UInt16) return MessagePackBinary.ReadUInt16(bytes, offset, out readSize); + else if (code == MessagePackCode.UInt32) return MessagePackBinary.ReadUInt32(bytes, offset, out readSize); + else if (code == MessagePackCode.UInt64) return MessagePackBinary.ReadUInt64(bytes, offset, out readSize); + throw new InvalidOperationException("Invalid primitive bytes."); + case MessagePackType.Boolean: + return MessagePackBinary.ReadBoolean(bytes, offset, out readSize); + case MessagePackType.Float: + if (MessagePackCode.Float32 == bytes[offset]) + { + return MessagePackBinary.ReadSingle(bytes, offset, out readSize); + } + else + { + return MessagePackBinary.ReadDouble(bytes, offset, out readSize); + } + case MessagePackType.String: + return MessagePackBinary.ReadString(bytes, offset, out readSize); + case MessagePackType.Binary: + return MessagePackBinary.ReadBytes(bytes, offset, out readSize); + case MessagePackType.Extension: + var ext = MessagePackBinary.ReadExtensionFormatHeader(bytes, offset, out readSize); + if (ext.TypeCode == ReservedMessagePackExtensionTypeCode.DateTime) + { + return MessagePackBinary.ReadDateTime(bytes, offset, out readSize); + } + throw new InvalidOperationException("Invalid primitive bytes."); + case MessagePackType.Array: + { + var length = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + var startOffset = offset; + offset += readSize; + + var objectFormatter = formatterResolver.GetFormatter(); + var array = new object[length]; + for (int i = 0; i < length; i++) + { + array[i] = objectFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + } + + readSize = offset - startOffset; + return array; + } + case MessagePackType.Map: + { + var length = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); + var startOffset = offset; + offset += readSize; + + var objectFormatter = formatterResolver.GetFormatter(); + var hash = new Dictionary(length); + for (int i = 0; i < length; i++) + { + var key = objectFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + var value = objectFormatter.Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + hash.Add(key, value); + } + + readSize = offset - startOffset; + return hash; + } + case MessagePackType.Nil: + readSize = 1; + return null; + default: + throw new InvalidOperationException("Invalid primitive bytes."); + } + } + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/StandardClassLibraryFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/StandardClassLibraryFormatter.cs index 84aba7dce..629999f01 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/StandardClassLibraryFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/StandardClassLibraryFormatter.cs @@ -1,578 +1,578 @@ -using MessagePack.Internal; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Globalization; -using System.Text; - -#if NETSTANDARD -using System.Threading.Tasks; -#endif - -namespace MessagePack.Formatters -{ - // NET40 -> BigInteger, Complex, Tuple - - // byte[] is special. represents bin type. - public sealed class ByteArrayFormatter : IMessagePackFormatter - { - public static readonly ByteArrayFormatter Instance = new ByteArrayFormatter(); - - ByteArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, byte[] value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteBytes(ref bytes, offset, value); - } - - public byte[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return MessagePackBinary.ReadBytes(bytes, offset, out readSize); - } - } - - public sealed class NullableStringFormatter : IMessagePackFormatter - { - public static readonly NullableStringFormatter Instance = new NullableStringFormatter(); - - NullableStringFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, String value, IFormatterResolver typeResolver) - { - return MessagePackBinary.WriteString(ref bytes, offset, value); - } - - public String Deserialize(byte[] bytes, int offset, IFormatterResolver typeResolver, out int readSize) - { - return MessagePackBinary.ReadString(bytes, offset, out readSize); - } - } - - public sealed class NullableStringArrayFormatter : IMessagePackFormatter - { - public static readonly NullableStringArrayFormatter Instance = new NullableStringArrayFormatter(); - - NullableStringArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, String[] value, IFormatterResolver typeResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); - for (int i = 0; i < value.Length; i++) - { - offset += MessagePackBinary.WriteString(ref bytes, offset, value[i]); - } - - return offset - startOffset; - } - } - - public String[] Deserialize(byte[] bytes, int offset, IFormatterResolver typeResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - var array = new String[len]; - for (int i = 0; i < array.Length; i++) - { - array[i] = MessagePackBinary.ReadString(bytes, offset, out readSize); - offset += readSize; - } - readSize = offset - startOffset; - return array; - } - } - } - - public sealed class DecimalFormatter : IMessagePackFormatter - { - public static readonly DecimalFormatter Instance = new DecimalFormatter(); - - DecimalFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, decimal value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteString(ref bytes, offset, value.ToString(CultureInfo.InvariantCulture)); - } - - public decimal Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return decimal.Parse(MessagePackBinary.ReadString(bytes, offset, out readSize), CultureInfo.InvariantCulture); - } - } - - public sealed class TimeSpanFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new TimeSpanFormatter(); - - TimeSpanFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, TimeSpan value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteInt64(ref bytes, offset, value.Ticks); - } - - public TimeSpan Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return new TimeSpan(MessagePackBinary.ReadInt64(bytes, offset, out readSize)); - } - } - - public sealed class DateTimeOffsetFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new DateTimeOffsetFormatter(); - - DateTimeOffsetFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, DateTimeOffset value, IFormatterResolver formatterResolver) - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2); - offset += MessagePackBinary.WriteDateTime(ref bytes, offset, new DateTime(value.Ticks, DateTimeKind.Utc)); // current ticks as is - offset += MessagePackBinary.WriteInt16(ref bytes, offset, (short)value.Offset.TotalMinutes); // offset is normalized in minutes - return offset - startOffset; - } - - public DateTimeOffset Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - if (count != 2) throw new InvalidOperationException("Invalid DateTimeOffset format."); - - var utc = MessagePackBinary.ReadDateTime(bytes, offset, out readSize); - offset += readSize; - - var dtOffsetMinutes = MessagePackBinary.ReadInt16(bytes, offset, out readSize); - offset += readSize; - - readSize = offset - startOffset; - - return new DateTimeOffset(utc.Ticks, TimeSpan.FromMinutes(dtOffsetMinutes)); - } - } - - public sealed class GuidFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new GuidFormatter(); - - - GuidFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Guid value, IFormatterResolver formatterResolver) - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, 38); - - bytes[offset] = MessagePackCode.Str8; - bytes[offset + 1] = unchecked((byte)36); - new GuidBits(ref value).Write(bytes, offset + 2); - return 38; - } - - public Guid Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - var segment = MessagePackBinary.ReadStringSegment(bytes, offset, out readSize); - return new GuidBits(segment).Value; - } - } - - public sealed class UriFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new UriFormatter(); - - - UriFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Uri value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteString(ref bytes, offset, value.ToString()); - } - } - - public Uri Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return new Uri(MessagePackBinary.ReadString(bytes, offset, out readSize), UriKind.RelativeOrAbsolute); - } - } - } - - public sealed class VersionFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new VersionFormatter(); - - VersionFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Version value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteString(ref bytes, offset, value.ToString()); - } - } - - public Version Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return new Version(MessagePackBinary.ReadString(bytes, offset, out readSize)); - } - } - } - - public sealed class KeyValuePairFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, KeyValuePair value, IFormatterResolver formatterResolver) - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Key, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Value, formatterResolver); - return offset - startOffset; - } - - public KeyValuePair Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - if (count != 2) throw new InvalidOperationException("Invalid KeyValuePair format."); - - var key = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - var value = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new KeyValuePair(key, value); - } - } - - public sealed class StringBuilderFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new StringBuilderFormatter(); - - StringBuilderFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, StringBuilder value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return MessagePackBinary.WriteString(ref bytes, offset, value.ToString()); - } - } - - public StringBuilder Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - return new StringBuilder(MessagePackBinary.ReadString(bytes, offset, out readSize)); - } - } - } - - public sealed class BitArrayFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new BitArrayFormatter(); - - BitArrayFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, BitArray value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - var len = value.Length; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, len); - for (int i = 0; i < len; i++) - { - offset += MessagePackBinary.WriteBoolean(ref bytes, offset, value.Get(i)); - } - - return offset - startOffset; - } - } - - public BitArray Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - - var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var array = new BitArray(len); - for (int i = 0; i < len; i++) - { - array[i] = MessagePackBinary.ReadBoolean(bytes, offset, out readSize); - offset += readSize; - } - - readSize = offset - startOffset; - return array; - } - } - } - -#if NETSTANDARD - - public sealed class BigIntegerFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new BigIntegerFormatter(); - - BigIntegerFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, System.Numerics.BigInteger value, IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteBytes(ref bytes, offset, value.ToByteArray()); - } - - public System.Numerics.BigInteger Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - return new System.Numerics.BigInteger(MessagePackBinary.ReadBytes(bytes, offset, out readSize)); - } - } - - public sealed class ComplexFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new ComplexFormatter(); - - ComplexFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, System.Numerics.Complex value, IFormatterResolver formatterResolver) - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2); - offset += MessagePackBinary.WriteDouble(ref bytes, offset, value.Real); - offset += MessagePackBinary.WriteDouble(ref bytes, offset, value.Imaginary); - return offset - startOffset; - } - - public System.Numerics.Complex Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - if (count != 2) throw new InvalidOperationException("Invalid Complex format."); - - var real = MessagePackBinary.ReadDouble(bytes, offset, out readSize); - offset += readSize; - - var imaginary = MessagePackBinary.ReadDouble(bytes, offset, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new System.Numerics.Complex(real, imaginary); - } - } - - public sealed class LazyFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, Lazy value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - return formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Value, formatterResolver); - } - } - - public Lazy Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - // deserialize immediately(no delay, because capture byte[] causes memory leak) - var v = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - return new Lazy(() => v); - } - } - } - - public sealed class TaskUnitFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new TaskUnitFormatter(); - static readonly Task CompletedTask = Task.FromResult(null); - - TaskUnitFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Task value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - value.Wait(); // wait...! - return MessagePackBinary.WriteNil(ref bytes, offset); - } - } - - public Task Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (!MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("Invalid input"); - } - else - { - readSize = 1; - return CompletedTask; - } - } - } - - public sealed class TaskValueFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, Task value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - // value.Result -> wait...! - return formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Result, formatterResolver); - } - } - - public Task Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var v = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - return Task.FromResult(v); - } - } - } - - public sealed class ValueTaskFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, ValueTask value, IFormatterResolver formatterResolver) - { - return formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Result, formatterResolver); - } - - public ValueTask Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - var v = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - return new ValueTask(v); - } - } - -#endif +using MessagePack.Internal; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +#if NETSTANDARD +using System.Threading.Tasks; +#endif + +namespace MessagePack.Formatters +{ + // NET40 -> BigInteger, Complex, Tuple + + // byte[] is special. represents bin type. + public sealed class ByteArrayFormatter : IMessagePackFormatter + { + public static readonly ByteArrayFormatter Instance = new ByteArrayFormatter(); + + ByteArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, byte[] value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteBytes(ref bytes, offset, value); + } + + public byte[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return MessagePackBinary.ReadBytes(bytes, offset, out readSize); + } + } + + public sealed class NullableStringFormatter : IMessagePackFormatter + { + public static readonly NullableStringFormatter Instance = new NullableStringFormatter(); + + NullableStringFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, String value, IFormatterResolver typeResolver) + { + return MessagePackBinary.WriteString(ref bytes, offset, value); + } + + public String Deserialize(byte[] bytes, int offset, IFormatterResolver typeResolver, out int readSize) + { + return MessagePackBinary.ReadString(bytes, offset, out readSize); + } + } + + public sealed class NullableStringArrayFormatter : IMessagePackFormatter + { + public static readonly NullableStringArrayFormatter Instance = new NullableStringArrayFormatter(); + + NullableStringArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, String[] value, IFormatterResolver typeResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length); + for (int i = 0; i < value.Length; i++) + { + offset += MessagePackBinary.WriteString(ref bytes, offset, value[i]); + } + + return offset - startOffset; + } + } + + public String[] Deserialize(byte[] bytes, int offset, IFormatterResolver typeResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + var array = new String[len]; + for (int i = 0; i < array.Length; i++) + { + array[i] = MessagePackBinary.ReadString(bytes, offset, out readSize); + offset += readSize; + } + readSize = offset - startOffset; + return array; + } + } + } + + public sealed class DecimalFormatter : IMessagePackFormatter + { + public static readonly DecimalFormatter Instance = new DecimalFormatter(); + + DecimalFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, decimal value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteString(ref bytes, offset, value.ToString(CultureInfo.InvariantCulture)); + } + + public decimal Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return decimal.Parse(MessagePackBinary.ReadString(bytes, offset, out readSize), CultureInfo.InvariantCulture); + } + } + + public sealed class TimeSpanFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new TimeSpanFormatter(); + + TimeSpanFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, TimeSpan value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteInt64(ref bytes, offset, value.Ticks); + } + + public TimeSpan Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return new TimeSpan(MessagePackBinary.ReadInt64(bytes, offset, out readSize)); + } + } + + public sealed class DateTimeOffsetFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new DateTimeOffsetFormatter(); + + DateTimeOffsetFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, DateTimeOffset value, IFormatterResolver formatterResolver) + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2); + offset += MessagePackBinary.WriteDateTime(ref bytes, offset, new DateTime(value.Ticks, DateTimeKind.Utc)); // current ticks as is + offset += MessagePackBinary.WriteInt16(ref bytes, offset, (short)value.Offset.TotalMinutes); // offset is normalized in minutes + return offset - startOffset; + } + + public DateTimeOffset Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + if (count != 2) throw new InvalidOperationException("Invalid DateTimeOffset format."); + + var utc = MessagePackBinary.ReadDateTime(bytes, offset, out readSize); + offset += readSize; + + var dtOffsetMinutes = MessagePackBinary.ReadInt16(bytes, offset, out readSize); + offset += readSize; + + readSize = offset - startOffset; + + return new DateTimeOffset(utc.Ticks, TimeSpan.FromMinutes(dtOffsetMinutes)); + } + } + + public sealed class GuidFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new GuidFormatter(); + + + GuidFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Guid value, IFormatterResolver formatterResolver) + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, 38); + + bytes[offset] = MessagePackCode.Str8; + bytes[offset + 1] = unchecked((byte)36); + new GuidBits(ref value).Write(bytes, offset + 2); + return 38; + } + + public Guid Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + var segment = MessagePackBinary.ReadStringSegment(bytes, offset, out readSize); + return new GuidBits(segment).Value; + } + } + + public sealed class UriFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new UriFormatter(); + + + UriFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Uri value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteString(ref bytes, offset, value.ToString()); + } + } + + public Uri Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return new Uri(MessagePackBinary.ReadString(bytes, offset, out readSize), UriKind.RelativeOrAbsolute); + } + } + } + + public sealed class VersionFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new VersionFormatter(); + + VersionFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Version value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteString(ref bytes, offset, value.ToString()); + } + } + + public Version Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return new Version(MessagePackBinary.ReadString(bytes, offset, out readSize)); + } + } + } + + public sealed class KeyValuePairFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, KeyValuePair value, IFormatterResolver formatterResolver) + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Key, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Value, formatterResolver); + return offset - startOffset; + } + + public KeyValuePair Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + if (count != 2) throw new InvalidOperationException("Invalid KeyValuePair format."); + + var key = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + var value = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new KeyValuePair(key, value); + } + } + + public sealed class StringBuilderFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new StringBuilderFormatter(); + + StringBuilderFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, StringBuilder value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return MessagePackBinary.WriteString(ref bytes, offset, value.ToString()); + } + } + + public StringBuilder Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + return new StringBuilder(MessagePackBinary.ReadString(bytes, offset, out readSize)); + } + } + } + + public sealed class BitArrayFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new BitArrayFormatter(); + + BitArrayFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, BitArray value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + var len = value.Length; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, len); + for (int i = 0; i < len; i++) + { + offset += MessagePackBinary.WriteBoolean(ref bytes, offset, value.Get(i)); + } + + return offset - startOffset; + } + } + + public BitArray Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + + var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var array = new BitArray(len); + for (int i = 0; i < len; i++) + { + array[i] = MessagePackBinary.ReadBoolean(bytes, offset, out readSize); + offset += readSize; + } + + readSize = offset - startOffset; + return array; + } + } + } + +#if NETSTANDARD + + public sealed class BigIntegerFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new BigIntegerFormatter(); + + BigIntegerFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, System.Numerics.BigInteger value, IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteBytes(ref bytes, offset, value.ToByteArray()); + } + + public System.Numerics.BigInteger Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + return new System.Numerics.BigInteger(MessagePackBinary.ReadBytes(bytes, offset, out readSize)); + } + } + + public sealed class ComplexFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new ComplexFormatter(); + + ComplexFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, System.Numerics.Complex value, IFormatterResolver formatterResolver) + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2); + offset += MessagePackBinary.WriteDouble(ref bytes, offset, value.Real); + offset += MessagePackBinary.WriteDouble(ref bytes, offset, value.Imaginary); + return offset - startOffset; + } + + public System.Numerics.Complex Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + if (count != 2) throw new InvalidOperationException("Invalid Complex format."); + + var real = MessagePackBinary.ReadDouble(bytes, offset, out readSize); + offset += readSize; + + var imaginary = MessagePackBinary.ReadDouble(bytes, offset, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new System.Numerics.Complex(real, imaginary); + } + } + + public sealed class LazyFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, Lazy value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + return formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Value, formatterResolver); + } + } + + public Lazy Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + // deserialize immediately(no delay, because capture byte[] causes memory leak) + var v = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + return new Lazy(() => v); + } + } + } + + public sealed class TaskUnitFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new TaskUnitFormatter(); + static readonly Task CompletedTask = Task.FromResult(null); + + TaskUnitFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Task value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + value.Wait(); // wait...! + return MessagePackBinary.WriteNil(ref bytes, offset); + } + } + + public Task Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (!MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("Invalid input"); + } + else + { + readSize = 1; + return CompletedTask; + } + } + } + + public sealed class TaskValueFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, Task value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + // value.Result -> wait...! + return formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Result, formatterResolver); + } + } + + public Task Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var v = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + return Task.FromResult(v); + } + } + } + + public sealed class ValueTaskFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, ValueTask value, IFormatterResolver formatterResolver) + { + return formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Result, formatterResolver); + } + + public ValueTask Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + var v = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + return new ValueTask(v); + } + } + +#endif } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/TupleFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/TupleFormatter.cs index 545b9ae0e..6473b5b2f 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/TupleFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/TupleFormatter.cs @@ -1,437 +1,437 @@ -#if NETSTANDARD - -using System; - -namespace MessagePack.Formatters -{ - - public sealed class TupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 1); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - - return offset - startOffset; - } - } - - public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 1) throw new InvalidOperationException("Invalid Tuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new Tuple(item1); - } - } - } - - - public sealed class TupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - - return offset - startOffset; - } - } - - public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 2) throw new InvalidOperationException("Invalid Tuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new Tuple(item1, item2); - } - } - } - - - public sealed class TupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 3); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); - - return offset - startOffset; - } - } - - public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 3) throw new InvalidOperationException("Invalid Tuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new Tuple(item1, item2, item3); - } - } - } - - - public sealed class TupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 4); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); - - return offset - startOffset; - } - } - - public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 4) throw new InvalidOperationException("Invalid Tuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new Tuple(item1, item2, item3, item4); - } - } - } - - - public sealed class TupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 5); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); - - return offset - startOffset; - } - } - - public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 5) throw new InvalidOperationException("Invalid Tuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new Tuple(item1, item2, item3, item4, item5); - } - } - } - - - public sealed class TupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 6); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item6, formatterResolver); - - return offset - startOffset; - } - } - - public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 6) throw new InvalidOperationException("Invalid Tuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item6 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new Tuple(item1, item2, item3, item4, item5, item6); - } - } - } - - - public sealed class TupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 7); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item6, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item7, formatterResolver); - - return offset - startOffset; - } - } - - public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 7) throw new InvalidOperationException("Invalid Tuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item6 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item7 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new Tuple(item1, item2, item3, item4, item5, item6, item7); - } - } - } - - - public sealed class TupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - else - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 8); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item6, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item7, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Rest, formatterResolver); - - return offset - startOffset; - } - } - - public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 8) throw new InvalidOperationException("Invalid Tuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item6 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item7 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item8 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new Tuple(item1, item2, item3, item4, item5, item6, item7, item8); - } - } - } - -} - +#if NETSTANDARD + +using System; + +namespace MessagePack.Formatters +{ + + public sealed class TupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 1); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + + return offset - startOffset; + } + } + + public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 1) throw new InvalidOperationException("Invalid Tuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new Tuple(item1); + } + } + } + + + public sealed class TupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + + return offset - startOffset; + } + } + + public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 2) throw new InvalidOperationException("Invalid Tuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new Tuple(item1, item2); + } + } + } + + + public sealed class TupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 3); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); + + return offset - startOffset; + } + } + + public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 3) throw new InvalidOperationException("Invalid Tuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new Tuple(item1, item2, item3); + } + } + } + + + public sealed class TupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 4); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); + + return offset - startOffset; + } + } + + public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 4) throw new InvalidOperationException("Invalid Tuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new Tuple(item1, item2, item3, item4); + } + } + } + + + public sealed class TupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 5); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); + + return offset - startOffset; + } + } + + public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 5) throw new InvalidOperationException("Invalid Tuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new Tuple(item1, item2, item3, item4, item5); + } + } + } + + + public sealed class TupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 6); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item6, formatterResolver); + + return offset - startOffset; + } + } + + public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 6) throw new InvalidOperationException("Invalid Tuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item6 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new Tuple(item1, item2, item3, item4, item5, item6); + } + } + } + + + public sealed class TupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 7); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item6, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item7, formatterResolver); + + return offset - startOffset; + } + } + + public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 7) throw new InvalidOperationException("Invalid Tuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item6 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item7 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new Tuple(item1, item2, item3, item4, item5, item6, item7); + } + } + } + + + public sealed class TupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, Tuple value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + else + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 8); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item6, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item7, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Rest, formatterResolver); + + return offset - startOffset; + } + } + + public Tuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 8) throw new InvalidOperationException("Invalid Tuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item6 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item7 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item8 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new Tuple(item1, item2, item3, item4, item5, item6, item7, item8); + } + } + } + +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/TypelessFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/TypelessFormatter.cs index f946f39c1..032c088b0 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/TypelessFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/TypelessFormatter.cs @@ -1,334 +1,334 @@ -#if NETSTANDARD - -using MessagePack.Internal; -using System; -using System.Collections; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Linq.Expressions; -using System.Reflection; -using System.Text.RegularExpressions; - -namespace MessagePack.Formatters -{ - /// - /// For `object` field that holds derived from `object` value, ex: var arr = new object[] { 1, "a", new Model() }; - /// - public sealed class TypelessFormatter : IMessagePackFormatter - { - public const sbyte ExtensionTypeCode = 100; - - static readonly Regex SubtractFullNameRegex = new Regex(@", Version=\d+.\d+.\d+.\d+, Culture=\w+, PublicKeyToken=\w+", RegexOptions.Compiled); - - delegate int SerializeMethod(object dynamicContractlessFormatter, ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver); - delegate object DeserializeMethod(object dynamicContractlessFormatter, byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize); - - public static readonly IMessagePackFormatter Instance = new TypelessFormatter(); - - static readonly ThreadsafeTypeKeyHashTable> serializers = new ThreadsafeTypeKeyHashTable>(); - static readonly ThreadsafeTypeKeyHashTable> deserializers = new ThreadsafeTypeKeyHashTable>(); - static readonly ThreadsafeTypeKeyHashTable typeNameCache = new ThreadsafeTypeKeyHashTable(); - static readonly AsymmetricKeyHashTable, Type> typeCache = new AsymmetricKeyHashTable, Type>(new StringArraySegmentByteAscymmetricEqualityComparer()); - - static readonly HashSet blacklistCheck; - static readonly HashSet useBuiltinTypes = new HashSet() - { - typeof(Boolean), - // typeof(Char), - typeof(SByte), - typeof(Byte), - typeof(Int16), - typeof(UInt16), - typeof(Int32), - typeof(UInt32), - typeof(Int64), - typeof(UInt64), - typeof(Single), - typeof(Double), - typeof(string), - typeof(byte[]), - - // array should save there types. - //typeof(Boolean[]), - //typeof(Char[]), - //typeof(SByte[]), - //typeof(Int16[]), - //typeof(UInt16[]), - //typeof(Int32[]), - //typeof(UInt32[]), - //typeof(Int64[]), - //typeof(UInt64[]), - //typeof(Single[]), - //typeof(Double[]), - //typeof(string[]), - - typeof(Boolean?), - // typeof(Char?), - typeof(SByte?), - typeof(Byte?), - typeof(Int16?), - typeof(UInt16?), - typeof(Int32?), - typeof(UInt32?), - typeof(Int64?), - typeof(UInt64?), - typeof(Single?), - typeof(Double?), - }; - - public static Func BindToType { get; set; } - - static Type DefaultBindToType(string typeName) - { - return Type.GetType(typeName, false); - } - - // mscorlib or System.Private.CoreLib - static bool isMscorlib = typeof(int).AssemblyQualifiedName.Contains("mscorlib"); - - /// - /// When type name does not have Version, Culture, Public token - sometimes can not find type, example - ExpandoObject - /// In that can set to `false` - /// - public static volatile bool RemoveAssemblyVersion = true; - - static TypelessFormatter() - { - blacklistCheck = new HashSet() - { - "System.CodeDom.Compiler.TempFileCollection", - "System.IO.FileSystemInfo", - "System.Management.IWbemClassObjectFreeThreaded" - }; - - serializers.TryAdd(typeof(object), _ => new KeyValuePair(null, (object p1, ref byte[] p2, int p3, object p4, IFormatterResolver p5) => 0)); - deserializers.TryAdd(typeof(object), _ => new KeyValuePair(null, (object p1, byte[] p2, int p3, IFormatterResolver p4, out int p5) => - { - p5 = 0; - return new object(); - })); - - BindToType = DefaultBindToType; - } - - // see:http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx - // subtract Version, Culture and PublicKeyToken from AssemblyQualifiedName - static string BuildTypeName(Type type) - { - if (RemoveAssemblyVersion) - { - string full = type.AssemblyQualifiedName; - - var shortened = SubtractFullNameRegex.Replace(full, ""); - if (Type.GetType(shortened, false) == null) - { - // if type cannot be found with shortened name - use full name - shortened = full; - } - - return shortened; - } - else - { - return type.AssemblyQualifiedName; - } - } - - public int Serialize(ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver) - { - if (value == null) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - - var type = value.GetType(); - - byte[] typeName; - if (!typeNameCache.TryGetValue(type, out typeName)) - { - if (blacklistCheck.Contains(type.FullName)) - { - throw new InvalidOperationException("Type is in blacklist:" + type.FullName); - } - - var ti = type.GetTypeInfo(); - if (ti.IsAnonymous() || useBuiltinTypes.Contains(type)) - { - typeName = null; - } - else - { - typeName = StringEncoding.UTF8.GetBytes(BuildTypeName(type)); - } - typeNameCache.TryAdd(type, typeName); - } - - if (typeName == null) - { - return Resolvers.TypelessFormatterFallbackResolver.Instance.GetFormatter().Serialize(ref bytes, offset, value, formatterResolver); - } - - // don't use GetOrAdd for avoid closure capture. - KeyValuePair formatterAndDelegate; - if (!serializers.TryGetValue(type, out formatterAndDelegate)) - { - lock (serializers) // double check locking... - { - if (!serializers.TryGetValue(type, out formatterAndDelegate)) - { - var ti = type.GetTypeInfo(); - - var formatter = formatterResolver.GetFormatterDynamic(type); - if (formatter == null) - { - throw new FormatterNotRegisteredException(type.FullName + " is not registered in this resolver. resolver:" + formatterResolver.GetType().Name); - } - - var formatterType = typeof(IMessagePackFormatter<>).MakeGenericType(type); - var param0 = Expression.Parameter(typeof(object), "formatter"); - var param1 = Expression.Parameter(typeof(byte[]).MakeByRefType(), "bytes"); - var param2 = Expression.Parameter(typeof(int), "offset"); - var param3 = Expression.Parameter(typeof(object), "value"); - var param4 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); - - var serializeMethodInfo = formatterType.GetRuntimeMethod("Serialize", new[] { typeof(byte[]).MakeByRefType(), typeof(int), type, typeof(IFormatterResolver) }); - - var body = Expression.Call( - Expression.Convert(param0, formatterType), - serializeMethodInfo, - param1, - param2, - ti.IsValueType ? Expression.Unbox(param3, type) : Expression.Convert(param3, type), - param4); - - var lambda = Expression.Lambda(body, param0, param1, param2, param3, param4).Compile(); - - formatterAndDelegate = new KeyValuePair(formatter, lambda); - serializers.TryAdd(type, formatterAndDelegate); - } - } - } - - // mark as extension with code 100 - var startOffset = offset; - offset += 6; // mark will be written at the end, when size is known - offset += MessagePackBinary.WriteStringBytes(ref bytes, offset, typeName); - offset += formatterAndDelegate.Value(formatterAndDelegate.Key, ref bytes, offset, value, formatterResolver); - MessagePackBinary.WriteExtensionFormatHeaderForceExt32Block(ref bytes, startOffset, (sbyte)TypelessFormatter.ExtensionTypeCode, offset - startOffset - 6); - return offset - startOffset; - } - - public object Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - - int startOffset = offset; - var packType = MessagePackBinary.GetMessagePackType(bytes, offset); - if (packType == MessagePackType.Extension) - { - var ext = MessagePackBinary.ReadExtensionFormatHeader(bytes, offset, out readSize); - if (ext.TypeCode == TypelessFormatter.ExtensionTypeCode) - { - // it has type name serialized - offset += readSize; - var typeName = MessagePackBinary.ReadStringSegment(bytes, offset, out readSize); - offset += readSize; - var result = DeserializeByTypeName(typeName, bytes, offset, formatterResolver, out readSize); - offset += readSize; - readSize = offset - startOffset; - return result; - } - } - - // fallback - return Resolvers.TypelessFormatterFallbackResolver.Instance.GetFormatter().Deserialize(bytes, startOffset, formatterResolver, out readSize); - } - - /// - /// Does not support deserializing of anonymous types - /// Type should be covered by preceeding resolvers in complex/standard resolver - /// - private object DeserializeByTypeName(ArraySegment typeName, byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - // try get type with assembly name, throw if not found - Type type; - if (!typeCache.TryGetValue(typeName, out type)) - { - var buffer = new byte[typeName.Count]; - Buffer.BlockCopy(typeName.Array, typeName.Offset, buffer, 0, buffer.Length); - var str = StringEncoding.UTF8.GetString(buffer); - type = BindToType(str); - if (type == null) - { - if (isMscorlib && str.Contains("System.Private.CoreLib")) - { - str = str.Replace("System.Private.CoreLib", "mscorlib"); - type = Type.GetType(str, true); // throw - } - else if (!isMscorlib && str.Contains("mscorlib")) - { - str = str.Replace("mscorlib", "System.Private.CoreLib"); - type = Type.GetType(str, true); // throw - } - else - { - type = Type.GetType(str, true); // re-throw - } - } - typeCache.TryAdd(buffer, type); - } - - KeyValuePair formatterAndDelegate; - if (!deserializers.TryGetValue(type, out formatterAndDelegate)) - { - lock (deserializers) - { - if (!deserializers.TryGetValue(type, out formatterAndDelegate)) - { - var ti = type.GetTypeInfo(); - - var formatter = formatterResolver.GetFormatterDynamic(type); - if (formatter == null) - { - throw new FormatterNotRegisteredException(type.FullName + " is not registered in this resolver. resolver:" + formatterResolver.GetType().Name); - } - - var formatterType = typeof(IMessagePackFormatter<>).MakeGenericType(type); - var param0 = Expression.Parameter(typeof(object), "formatter"); - var param1 = Expression.Parameter(typeof(byte[]), "bytes"); - var param2 = Expression.Parameter(typeof(int), "offset"); - var param3 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); - var param4 = Expression.Parameter(typeof(int).MakeByRefType(), "readSize"); - - var deserializeMethodInfo = formatterType.GetRuntimeMethod("Deserialize", new[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), typeof(int).MakeByRefType() }); - - var deserialize = Expression.Call( - Expression.Convert(param0, formatterType), - deserializeMethodInfo, - param1, - param2, - param3, - param4); - - Expression body = deserialize; - if (ti.IsValueType) - body = Expression.Convert(deserialize, typeof(object)); - var lambda = Expression.Lambda(body, param0, param1, param2, param3, param4).Compile(); - - formatterAndDelegate = new KeyValuePair(formatter, lambda); - deserializers.TryAdd(type, formatterAndDelegate); - } - } - } - - return formatterAndDelegate.Value(formatterAndDelegate.Key, bytes, offset, formatterResolver, out readSize); - } - } - -} - +#if NETSTANDARD + +using MessagePack.Internal; +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Reflection; +using System.Text.RegularExpressions; + +namespace MessagePack.Formatters +{ + /// + /// For `object` field that holds derived from `object` value, ex: var arr = new object[] { 1, "a", new Model() }; + /// + public sealed class TypelessFormatter : IMessagePackFormatter + { + public const sbyte ExtensionTypeCode = 100; + + static readonly Regex SubtractFullNameRegex = new Regex(@", Version=\d+.\d+.\d+.\d+, Culture=\w+, PublicKeyToken=\w+", RegexOptions.Compiled); + + delegate int SerializeMethod(object dynamicContractlessFormatter, ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver); + delegate object DeserializeMethod(object dynamicContractlessFormatter, byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize); + + public static readonly IMessagePackFormatter Instance = new TypelessFormatter(); + + static readonly ThreadsafeTypeKeyHashTable> serializers = new ThreadsafeTypeKeyHashTable>(); + static readonly ThreadsafeTypeKeyHashTable> deserializers = new ThreadsafeTypeKeyHashTable>(); + static readonly ThreadsafeTypeKeyHashTable typeNameCache = new ThreadsafeTypeKeyHashTable(); + static readonly AsymmetricKeyHashTable, Type> typeCache = new AsymmetricKeyHashTable, Type>(new StringArraySegmentByteAscymmetricEqualityComparer()); + + static readonly HashSet blacklistCheck; + static readonly HashSet useBuiltinTypes = new HashSet() + { + typeof(Boolean), + // typeof(Char), + typeof(SByte), + typeof(Byte), + typeof(Int16), + typeof(UInt16), + typeof(Int32), + typeof(UInt32), + typeof(Int64), + typeof(UInt64), + typeof(Single), + typeof(Double), + typeof(string), + typeof(byte[]), + + // array should save there types. + //typeof(Boolean[]), + //typeof(Char[]), + //typeof(SByte[]), + //typeof(Int16[]), + //typeof(UInt16[]), + //typeof(Int32[]), + //typeof(UInt32[]), + //typeof(Int64[]), + //typeof(UInt64[]), + //typeof(Single[]), + //typeof(Double[]), + //typeof(string[]), + + typeof(Boolean?), + // typeof(Char?), + typeof(SByte?), + typeof(Byte?), + typeof(Int16?), + typeof(UInt16?), + typeof(Int32?), + typeof(UInt32?), + typeof(Int64?), + typeof(UInt64?), + typeof(Single?), + typeof(Double?), + }; + + public static Func BindToType { get; set; } + + static Type DefaultBindToType(string typeName) + { + return Type.GetType(typeName, false); + } + + // mscorlib or System.Private.CoreLib + static bool isMscorlib = typeof(int).AssemblyQualifiedName.Contains("mscorlib"); + + /// + /// When type name does not have Version, Culture, Public token - sometimes can not find type, example - ExpandoObject + /// In that can set to `false` + /// + public static volatile bool RemoveAssemblyVersion = true; + + static TypelessFormatter() + { + blacklistCheck = new HashSet() + { + "System.CodeDom.Compiler.TempFileCollection", + "System.IO.FileSystemInfo", + "System.Management.IWbemClassObjectFreeThreaded" + }; + + serializers.TryAdd(typeof(object), _ => new KeyValuePair(null, (object p1, ref byte[] p2, int p3, object p4, IFormatterResolver p5) => 0)); + deserializers.TryAdd(typeof(object), _ => new KeyValuePair(null, (object p1, byte[] p2, int p3, IFormatterResolver p4, out int p5) => + { + p5 = 0; + return new object(); + })); + + BindToType = DefaultBindToType; + } + + // see:http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx + // subtract Version, Culture and PublicKeyToken from AssemblyQualifiedName + static string BuildTypeName(Type type) + { + if (RemoveAssemblyVersion) + { + string full = type.AssemblyQualifiedName; + + var shortened = SubtractFullNameRegex.Replace(full, ""); + if (Type.GetType(shortened, false) == null) + { + // if type cannot be found with shortened name - use full name + shortened = full; + } + + return shortened; + } + else + { + return type.AssemblyQualifiedName; + } + } + + public int Serialize(ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver) + { + if (value == null) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + + var type = value.GetType(); + + byte[] typeName; + if (!typeNameCache.TryGetValue(type, out typeName)) + { + if (blacklistCheck.Contains(type.FullName)) + { + throw new InvalidOperationException("Type is in blacklist:" + type.FullName); + } + + var ti = type.GetTypeInfo(); + if (ti.IsAnonymous() || useBuiltinTypes.Contains(type)) + { + typeName = null; + } + else + { + typeName = StringEncoding.UTF8.GetBytes(BuildTypeName(type)); + } + typeNameCache.TryAdd(type, typeName); + } + + if (typeName == null) + { + return Resolvers.TypelessFormatterFallbackResolver.Instance.GetFormatter().Serialize(ref bytes, offset, value, formatterResolver); + } + + // don't use GetOrAdd for avoid closure capture. + KeyValuePair formatterAndDelegate; + if (!serializers.TryGetValue(type, out formatterAndDelegate)) + { + lock (serializers) // double check locking... + { + if (!serializers.TryGetValue(type, out formatterAndDelegate)) + { + var ti = type.GetTypeInfo(); + + var formatter = formatterResolver.GetFormatterDynamic(type); + if (formatter == null) + { + throw new FormatterNotRegisteredException(type.FullName + " is not registered in this resolver. resolver:" + formatterResolver.GetType().Name); + } + + var formatterType = typeof(IMessagePackFormatter<>).MakeGenericType(type); + var param0 = Expression.Parameter(typeof(object), "formatter"); + var param1 = Expression.Parameter(typeof(byte[]).MakeByRefType(), "bytes"); + var param2 = Expression.Parameter(typeof(int), "offset"); + var param3 = Expression.Parameter(typeof(object), "value"); + var param4 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); + + var serializeMethodInfo = formatterType.GetRuntimeMethod("Serialize", new[] { typeof(byte[]).MakeByRefType(), typeof(int), type, typeof(IFormatterResolver) }); + + var body = Expression.Call( + Expression.Convert(param0, formatterType), + serializeMethodInfo, + param1, + param2, + ti.IsValueType ? Expression.Unbox(param3, type) : Expression.Convert(param3, type), + param4); + + var lambda = Expression.Lambda(body, param0, param1, param2, param3, param4).Compile(); + + formatterAndDelegate = new KeyValuePair(formatter, lambda); + serializers.TryAdd(type, formatterAndDelegate); + } + } + } + + // mark as extension with code 100 + var startOffset = offset; + offset += 6; // mark will be written at the end, when size is known + offset += MessagePackBinary.WriteStringBytes(ref bytes, offset, typeName); + offset += formatterAndDelegate.Value(formatterAndDelegate.Key, ref bytes, offset, value, formatterResolver); + MessagePackBinary.WriteExtensionFormatHeaderForceExt32Block(ref bytes, startOffset, (sbyte)TypelessFormatter.ExtensionTypeCode, offset - startOffset - 6); + return offset - startOffset; + } + + public object Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + int startOffset = offset; + var packType = MessagePackBinary.GetMessagePackType(bytes, offset); + if (packType == MessagePackType.Extension) + { + var ext = MessagePackBinary.ReadExtensionFormatHeader(bytes, offset, out readSize); + if (ext.TypeCode == TypelessFormatter.ExtensionTypeCode) + { + // it has type name serialized + offset += readSize; + var typeName = MessagePackBinary.ReadStringSegment(bytes, offset, out readSize); + offset += readSize; + var result = DeserializeByTypeName(typeName, bytes, offset, formatterResolver, out readSize); + offset += readSize; + readSize = offset - startOffset; + return result; + } + } + + // fallback + return Resolvers.TypelessFormatterFallbackResolver.Instance.GetFormatter().Deserialize(bytes, startOffset, formatterResolver, out readSize); + } + + /// + /// Does not support deserializing of anonymous types + /// Type should be covered by preceeding resolvers in complex/standard resolver + /// + private object DeserializeByTypeName(ArraySegment typeName, byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + // try get type with assembly name, throw if not found + Type type; + if (!typeCache.TryGetValue(typeName, out type)) + { + var buffer = new byte[typeName.Count]; + Buffer.BlockCopy(typeName.Array, typeName.Offset, buffer, 0, buffer.Length); + var str = StringEncoding.UTF8.GetString(buffer); + type = BindToType(str); + if (type == null) + { + if (isMscorlib && str.Contains("System.Private.CoreLib")) + { + str = str.Replace("System.Private.CoreLib", "mscorlib"); + type = Type.GetType(str, true); // throw + } + else if (!isMscorlib && str.Contains("mscorlib")) + { + str = str.Replace("mscorlib", "System.Private.CoreLib"); + type = Type.GetType(str, true); // throw + } + else + { + type = Type.GetType(str, true); // re-throw + } + } + typeCache.TryAdd(buffer, type); + } + + KeyValuePair formatterAndDelegate; + if (!deserializers.TryGetValue(type, out formatterAndDelegate)) + { + lock (deserializers) + { + if (!deserializers.TryGetValue(type, out formatterAndDelegate)) + { + var ti = type.GetTypeInfo(); + + var formatter = formatterResolver.GetFormatterDynamic(type); + if (formatter == null) + { + throw new FormatterNotRegisteredException(type.FullName + " is not registered in this resolver. resolver:" + formatterResolver.GetType().Name); + } + + var formatterType = typeof(IMessagePackFormatter<>).MakeGenericType(type); + var param0 = Expression.Parameter(typeof(object), "formatter"); + var param1 = Expression.Parameter(typeof(byte[]), "bytes"); + var param2 = Expression.Parameter(typeof(int), "offset"); + var param3 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); + var param4 = Expression.Parameter(typeof(int).MakeByRefType(), "readSize"); + + var deserializeMethodInfo = formatterType.GetRuntimeMethod("Deserialize", new[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), typeof(int).MakeByRefType() }); + + var deserialize = Expression.Call( + Expression.Convert(param0, formatterType), + deserializeMethodInfo, + param1, + param2, + param3, + param4); + + Expression body = deserialize; + if (ti.IsValueType) + body = Expression.Convert(deserialize, typeof(object)); + var lambda = Expression.Lambda(body, param0, param1, param2, param3, param4).Compile(); + + formatterAndDelegate = new KeyValuePair(formatter, lambda); + deserializers.TryAdd(type, formatterAndDelegate); + } + } + } + + return formatterAndDelegate.Value(formatterAndDelegate.Key, bytes, offset, formatterResolver, out readSize); + } + } + +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/UnsafeBinaryFormatters.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/UnsafeBinaryFormatters.cs index 7c6cabd8e..679c511a2 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/UnsafeBinaryFormatters.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/UnsafeBinaryFormatters.cs @@ -1,126 +1,126 @@ -#if NETSTANDARD - -using System; - -namespace MessagePack.Formatters -{ - public sealed class BinaryGuidFormatter : IMessagePackFormatter - { - /// - /// Unsafe binary Guid formatter. this is only allows on LittleEndian environment. - /// - public static readonly IMessagePackFormatter Instance = new BinaryGuidFormatter(); - - BinaryGuidFormatter() - { - } - - // Guid's underlying _a,...,_k field is sequential and same layuout as .NET Framework and Mono(Unity). - // But target machines must be same endian so restrict only for little endian. - - public unsafe int Serialize(ref byte[] bytes, int offset, Guid value, IFormatterResolver formatterResolver) - { - if (!BitConverter.IsLittleEndian) throw new Exception("BinaryGuidFormatter only allows on little endian env."); - - MessagePackBinary.EnsureCapacity(ref bytes, offset, 18); - fixed (byte* dst = &bytes[offset]) - { - var src = &value; - - dst[0] = MessagePackCode.Bin8; - dst[1] = 16; - - *(Guid*)(dst + 2) = *src; - } - - return 18; - } - - public unsafe Guid Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (!BitConverter.IsLittleEndian) throw new Exception("BinaryGuidFormatter only allows on little endian env."); - - if (!(offset + 18 <= bytes.Length)) - { - throw new ArgumentOutOfRangeException(); - } - - fixed (byte* src = &bytes[offset]) - { - if (src[0] != MessagePackCode.Bin8) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - if (src[1] != 16) - { - throw new InvalidOperationException("Invalid Guid Size."); - } - - var target = *(Guid*)(src + 2); - readSize = 18; - return target; - } - } - } - - public sealed class BinaryDecimalFormatter : IMessagePackFormatter - { - /// - /// Unsafe binary Decimal formatter. this is only allows on LittleEndian environment. - /// - public static readonly IMessagePackFormatter Instance = new BinaryDecimalFormatter(); - - BinaryDecimalFormatter() - { - } - - // decimal underlying "flags, hi, lo, mid" fields are sequential and same layuout with .NET Framework and Mono(Unity) - // But target machines must be same endian so restrict only for little endian. - - public unsafe int Serialize(ref byte[] bytes, int offset, Decimal value, IFormatterResolver formatterResolver) - { - if (!BitConverter.IsLittleEndian) throw new Exception("BinaryGuidFormatter only allows on little endian env."); - - MessagePackBinary.EnsureCapacity(ref bytes, offset, 18); - fixed (byte* dst = &bytes[offset]) - { - var src = &value; - - dst[0] = MessagePackCode.Bin8; - dst[1] = 16; - - *(Decimal*)(dst + 2) = *src; - } - - return 18; - } - - public unsafe Decimal Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (!BitConverter.IsLittleEndian) throw new Exception("BinaryDecimalFormatter only allows on little endian env."); - - if (!(offset + 18 <= bytes.Length)) - { - throw new ArgumentOutOfRangeException(); - } - - fixed (byte* src = &bytes[offset]) - { - if (src[0] != MessagePackCode.Bin8) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - if (src[1] != 16) - { - throw new InvalidOperationException("Invalid Guid Size."); - } - - var target = *(Decimal*)(src + 2); - readSize = 18; - return target; - } - } - } -} - +#if NETSTANDARD + +using System; + +namespace MessagePack.Formatters +{ + public sealed class BinaryGuidFormatter : IMessagePackFormatter + { + /// + /// Unsafe binary Guid formatter. this is only allows on LittleEndian environment. + /// + public static readonly IMessagePackFormatter Instance = new BinaryGuidFormatter(); + + BinaryGuidFormatter() + { + } + + // Guid's underlying _a,...,_k field is sequential and same layuout as .NET Framework and Mono(Unity). + // But target machines must be same endian so restrict only for little endian. + + public unsafe int Serialize(ref byte[] bytes, int offset, Guid value, IFormatterResolver formatterResolver) + { + if (!BitConverter.IsLittleEndian) throw new Exception("BinaryGuidFormatter only allows on little endian env."); + + MessagePackBinary.EnsureCapacity(ref bytes, offset, 18); + fixed (byte* dst = &bytes[offset]) + { + var src = &value; + + dst[0] = MessagePackCode.Bin8; + dst[1] = 16; + + *(Guid*)(dst + 2) = *src; + } + + return 18; + } + + public unsafe Guid Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (!BitConverter.IsLittleEndian) throw new Exception("BinaryGuidFormatter only allows on little endian env."); + + if (!(offset + 18 <= bytes.Length)) + { + throw new ArgumentOutOfRangeException(); + } + + fixed (byte* src = &bytes[offset]) + { + if (src[0] != MessagePackCode.Bin8) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + if (src[1] != 16) + { + throw new InvalidOperationException("Invalid Guid Size."); + } + + var target = *(Guid*)(src + 2); + readSize = 18; + return target; + } + } + } + + public sealed class BinaryDecimalFormatter : IMessagePackFormatter + { + /// + /// Unsafe binary Decimal formatter. this is only allows on LittleEndian environment. + /// + public static readonly IMessagePackFormatter Instance = new BinaryDecimalFormatter(); + + BinaryDecimalFormatter() + { + } + + // decimal underlying "flags, hi, lo, mid" fields are sequential and same layuout with .NET Framework and Mono(Unity) + // But target machines must be same endian so restrict only for little endian. + + public unsafe int Serialize(ref byte[] bytes, int offset, Decimal value, IFormatterResolver formatterResolver) + { + if (!BitConverter.IsLittleEndian) throw new Exception("BinaryGuidFormatter only allows on little endian env."); + + MessagePackBinary.EnsureCapacity(ref bytes, offset, 18); + fixed (byte* dst = &bytes[offset]) + { + var src = &value; + + dst[0] = MessagePackCode.Bin8; + dst[1] = 16; + + *(Decimal*)(dst + 2) = *src; + } + + return 18; + } + + public unsafe Decimal Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (!BitConverter.IsLittleEndian) throw new Exception("BinaryDecimalFormatter only allows on little endian env."); + + if (!(offset + 18 <= bytes.Length)) + { + throw new ArgumentOutOfRangeException(); + } + + fixed (byte* src = &bytes[offset]) + { + if (src[0] != MessagePackCode.Bin8) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + if (src[1] != 16) + { + throw new InvalidOperationException("Invalid Guid Size."); + } + + var target = *(Decimal*)(src + 2); + readSize = 18; + return target; + } + } + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/ValueTupleFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/ValueTupleFormatter.cs index 9ec96c12c..c8e09af2b 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/ValueTupleFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Formatters/ValueTupleFormatter.cs @@ -1,371 +1,371 @@ -#if NETSTANDARD -using System; - -namespace MessagePack.Formatters -{ - - public sealed class ValueTupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 1); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - - return offset - startOffset; - } - - public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 1) throw new InvalidOperationException("Invalid ValueTuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new ValueTuple(item1); - } - } - } - - - public sealed class ValueTupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - - return offset - startOffset; - } - - public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 2) throw new InvalidOperationException("Invalid ValueTuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new ValueTuple(item1, item2); - } - } - } - - - public sealed class ValueTupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 3); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); - - return offset - startOffset; - } - - public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 3) throw new InvalidOperationException("Invalid ValueTuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new ValueTuple(item1, item2, item3); - } - } - } - - - public sealed class ValueTupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 4); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); - - return offset - startOffset; - } - - public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 4) throw new InvalidOperationException("Invalid ValueTuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new ValueTuple(item1, item2, item3, item4); - } - } - } - - - public sealed class ValueTupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 5); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); - - return offset - startOffset; - } - - public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 5) throw new InvalidOperationException("Invalid ValueTuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new ValueTuple(item1, item2, item3, item4, item5); - } - } - } - - - public sealed class ValueTupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 6); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item6, formatterResolver); - - return offset - startOffset; - } - - public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 6) throw new InvalidOperationException("Invalid ValueTuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item6 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new ValueTuple(item1, item2, item3, item4, item5, item6); - } - } - } - - - public sealed class ValueTupleFormatter : IMessagePackFormatter> - { - public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 7); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item6, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item7, formatterResolver); - - return offset - startOffset; - } - - public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 7) throw new InvalidOperationException("Invalid ValueTuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item6 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item7 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new ValueTuple(item1, item2, item3, item4, item5, item6, item7); - } - } - } - - - public sealed class ValueTupleFormatter : IMessagePackFormatter> where TRest : struct - { - public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) - { - var startOffset = offset; - offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 8); - - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item6, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item7, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Rest, formatterResolver); - - return offset - startOffset; - } - - public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); - } - else - { - var startOffset = offset; - var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - if (count != 8) throw new InvalidOperationException("Invalid ValueTuple count"); - offset += readSize; - - var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item6 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item7 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - var item8 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - offset += readSize; - - readSize = offset - startOffset; - return new ValueTuple(item1, item2, item3, item4, item5, item6, item7, item8); - } - } - } - -} +#if NETSTANDARD +using System; + +namespace MessagePack.Formatters +{ + + public sealed class ValueTupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 1); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + + return offset - startOffset; + } + + public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 1) throw new InvalidOperationException("Invalid ValueTuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new ValueTuple(item1); + } + } + } + + + public sealed class ValueTupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + + return offset - startOffset; + } + + public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 2) throw new InvalidOperationException("Invalid ValueTuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new ValueTuple(item1, item2); + } + } + } + + + public sealed class ValueTupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 3); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); + + return offset - startOffset; + } + + public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 3) throw new InvalidOperationException("Invalid ValueTuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new ValueTuple(item1, item2, item3); + } + } + } + + + public sealed class ValueTupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 4); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); + + return offset - startOffset; + } + + public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 4) throw new InvalidOperationException("Invalid ValueTuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new ValueTuple(item1, item2, item3, item4); + } + } + } + + + public sealed class ValueTupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 5); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); + + return offset - startOffset; + } + + public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 5) throw new InvalidOperationException("Invalid ValueTuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new ValueTuple(item1, item2, item3, item4, item5); + } + } + } + + + public sealed class ValueTupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 6); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item6, formatterResolver); + + return offset - startOffset; + } + + public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 6) throw new InvalidOperationException("Invalid ValueTuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item6 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new ValueTuple(item1, item2, item3, item4, item5, item6); + } + } + } + + + public sealed class ValueTupleFormatter : IMessagePackFormatter> + { + public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 7); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item6, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item7, formatterResolver); + + return offset - startOffset; + } + + public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 7) throw new InvalidOperationException("Invalid ValueTuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item6 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item7 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new ValueTuple(item1, item2, item3, item4, item5, item6, item7); + } + } + } + + + public sealed class ValueTupleFormatter : IMessagePackFormatter> where TRest : struct + { + public int Serialize(ref byte[] bytes, int offset, ValueTuple value, IFormatterResolver formatterResolver) + { + var startOffset = offset; + offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 8); + + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item1, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item2, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item3, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item4, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item5, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item6, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Item7, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.Rest, formatterResolver); + + return offset - startOffset; + } + + public ValueTuple Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("Data is Nil, ValueTuple can not be null."); + } + else + { + var startOffset = offset; + var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + if (count != 8) throw new InvalidOperationException("Invalid ValueTuple count"); + offset += readSize; + + var item1 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item2 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item3 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item4 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item5 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item6 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item7 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + var item8 = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + + readSize = offset - startOffset; + return new ValueTuple(item1, item2, item3, item4, item5, item6, item7, item8); + } + } + } + +} #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/IFormatterResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/IFormatterResolver.cs index 31aa440e7..4babd847b 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/IFormatterResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/IFormatterResolver.cs @@ -1,60 +1,60 @@ - -using MessagePack.Formatters; -using System; -using System.Reflection; - -namespace MessagePack -{ - public interface IFormatterResolver - { - IMessagePackFormatter GetFormatter(); - } - - public static class FormatterResolverExtensions - { - public static IMessagePackFormatter GetFormatterWithVerify(this IFormatterResolver resolver) - { - IMessagePackFormatter formatter; - try - { - formatter = resolver.GetFormatter(); - } - catch (TypeInitializationException ex) - { - Exception inner = ex; - while (inner.InnerException != null) - { - inner = inner.InnerException; - } - - throw inner; - } - - if (formatter == null) - { - throw new FormatterNotRegisteredException(typeof(T).FullName + " is not registered in this resolver. resolver:" + resolver.GetType().Name); - } - - return formatter; - } - -#if !UNITY_WSA - - public static object GetFormatterDynamic(this IFormatterResolver resolver, Type type) - { - var methodInfo = typeof(IFormatterResolver).GetRuntimeMethod("GetFormatter", Type.EmptyTypes); - - var formatter = methodInfo.MakeGenericMethod(type).Invoke(resolver, null); - return formatter; - } - -#endif - } - - public class FormatterNotRegisteredException : Exception - { - public FormatterNotRegisteredException(string message) : base(message) - { - } - } + +using MessagePack.Formatters; +using System; +using System.Reflection; + +namespace MessagePack +{ + public interface IFormatterResolver + { + IMessagePackFormatter GetFormatter(); + } + + public static class FormatterResolverExtensions + { + public static IMessagePackFormatter GetFormatterWithVerify(this IFormatterResolver resolver) + { + IMessagePackFormatter formatter; + try + { + formatter = resolver.GetFormatter(); + } + catch (TypeInitializationException ex) + { + Exception inner = ex; + while (inner.InnerException != null) + { + inner = inner.InnerException; + } + + throw inner; + } + + if (formatter == null) + { + throw new FormatterNotRegisteredException(typeof(T).FullName + " is not registered in this resolver. resolver:" + resolver.GetType().Name); + } + + return formatter; + } + +#if !UNITY_WSA + + public static object GetFormatterDynamic(this IFormatterResolver resolver, Type type) + { + var methodInfo = typeof(IFormatterResolver).GetRuntimeMethod("GetFormatter", Type.EmptyTypes); + + var formatter = methodInfo.MakeGenericMethod(type).Invoke(resolver, null); + return formatter; + } + +#endif + } + + public class FormatterNotRegisteredException : Exception + { + public FormatterNotRegisteredException(string message) : base(message) + { + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/IMessagePackSerializationCallbackReceiver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/IMessagePackSerializationCallbackReceiver.cs index f00e161da..5e7bada37 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/IMessagePackSerializationCallbackReceiver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/IMessagePackSerializationCallbackReceiver.cs @@ -1,12 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace MessagePack -{ - public interface IMessagePackSerializationCallbackReceiver - { - void OnBeforeSerialize(); - void OnAfterDeserialize(); - } -} +using System; +using System.Collections.Generic; +using System.Text; + +namespace MessagePack +{ + public interface IMessagePackSerializationCallbackReceiver + { + void OnBeforeSerialize(); + void OnAfterDeserialize(); + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ArrayPool.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ArrayPool.cs index bb0e76d42..0ffba1c8a 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ArrayPool.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ArrayPool.cs @@ -1,67 +1,67 @@ -using System; - -namespace MessagePack.Internal -{ - internal sealed class BufferPool : ArrayPool - { - public static readonly BufferPool Default = new BufferPool(65535); - - public BufferPool(int bufferLength) - : base(bufferLength) - { - } - } - - internal class ArrayPool - { - readonly int bufferLength; - readonly object gate; - int index; - T[][] buffers; - - public ArrayPool(int bufferLength) - { - this.bufferLength = bufferLength; - this.buffers = new T[4][]; - this.gate = new object(); - } - - public T[] Rent() - { - lock (gate) - { - if (index >= buffers.Length) - { - Array.Resize(ref buffers, buffers.Length * 2); - } - - if (buffers[index] == null) - { - buffers[index] = new T[bufferLength]; - } - - var buffer = buffers[index]; - buffers[index] = null; - index++; - - return buffer; - } - } - - public void Return(T[] array) - { - if (array.Length != bufferLength) - { - throw new InvalidOperationException("return buffer is not from pool"); - } - - lock (gate) - { - if (index != 0) - { - buffers[--index] = array; - } - } - } - } -} +using System; + +namespace MessagePack.Internal +{ + internal sealed class BufferPool : ArrayPool + { + public static readonly BufferPool Default = new BufferPool(65535); + + public BufferPool(int bufferLength) + : base(bufferLength) + { + } + } + + internal class ArrayPool + { + readonly int bufferLength; + readonly object gate; + int index; + T[][] buffers; + + public ArrayPool(int bufferLength) + { + this.bufferLength = bufferLength; + this.buffers = new T[4][]; + this.gate = new object(); + } + + public T[] Rent() + { + lock (gate) + { + if (index >= buffers.Length) + { + Array.Resize(ref buffers, buffers.Length * 2); + } + + if (buffers[index] == null) + { + buffers[index] = new T[bufferLength]; + } + + var buffer = buffers[index]; + buffers[index] = null; + index++; + + return buffer; + } + } + + public void Return(T[] array) + { + if (array.Length != bufferLength) + { + throw new InvalidOperationException("return buffer is not from pool"); + } + + lock (gate) + { + if (index != 0) + { + buffers[--index] = array; + } + } + } + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/AsymmetricKeyHashTable.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/AsymmetricKeyHashTable.cs index 9b18d8eca..99eb35403 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/AsymmetricKeyHashTable.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/AsymmetricKeyHashTable.cs @@ -1,277 +1,277 @@ -#if NETSTANDARD - -using System; - -namespace MessagePack.Internal -{ - // Safe for multiple-read, single-write. - - // Add and Get Key is asymmetric. - - internal interface IAsymmetricEqualityComparer - { - int GetHashCode(TKey1 key1); - int GetHashCode(TKey2 key2); - bool Equals(TKey1 x, TKey1 y); // when used rehash - bool Equals(TKey1 x, TKey2 y); // when used get - } - - internal class StringArraySegmentByteAscymmetricEqualityComparer : IAsymmetricEqualityComparer> - { - static readonly bool Is32Bit = (IntPtr.Size == 4); - - public bool Equals(byte[] x, byte[] y) - { - if (x.Length != y.Length) return false; - - for (int i = 0; i < x.Length; i++) - { - if (x[i] != y[i]) return false; - } - - return true; - } - - public bool Equals(byte[] x, ArraySegment y) - { - return ByteArrayComparer.Equals(y.Array, y.Offset, y.Count, x); - } - - public int GetHashCode(byte[] key1) - { - return GetHashCode(new ArraySegment(key1, 0, key1.Length)); - } - - public int GetHashCode(ArraySegment key2) - { - unchecked - { - if (Is32Bit) - { - return (int)FarmHash.Hash32(key2.Array, key2.Offset, key2.Count); - } - else - { - return (int)FarmHash.Hash64(key2.Array, key2.Offset, key2.Count); - } - } - } - } - - internal sealed class AsymmetricKeyHashTable - { - Entry[] buckets; - int size; // only use in writer lock - - readonly object writerLock = new object(); - readonly float loadFactor; - readonly IAsymmetricEqualityComparer comparer; - - public AsymmetricKeyHashTable(IAsymmetricEqualityComparer comparer) - : this(4, 0.72f, comparer) - { - } - - public AsymmetricKeyHashTable(int capacity, float loadFactor, IAsymmetricEqualityComparer comparer) - { - var tableSize = CalculateCapacity(capacity, loadFactor); - this.buckets = new Entry[tableSize]; - this.loadFactor = loadFactor; - this.comparer = comparer; - } - - public TValue AddOrGet(TKey1 key1, Func valueFactory) - { - TValue v; - TryAddInternal(key1, valueFactory, out v); - return v; - } - - public bool TryAdd(TKey1 key, TValue value) - { - return TryAdd(key, _ => value); // closure capture - } - - public bool TryAdd(TKey1 key, Func valueFactory) - { - TValue _; - return TryAddInternal(key, valueFactory, out _); - } - - bool TryAddInternal(TKey1 key, Func valueFactory, out TValue resultingValue) - { - lock (writerLock) - { - var nextCapacity = CalculateCapacity(size + 1, loadFactor); - - if (buckets.Length < nextCapacity) - { - // rehash - var nextBucket = new Entry[nextCapacity]; - for (int i = 0; i < buckets.Length; i++) - { - var e = buckets[i]; - while (e != null) - { - var newEntry = new Entry { Key = e.Key, Value = e.Value, Hash = e.Hash }; - AddToBuckets(nextBucket, key, newEntry, null, out resultingValue); - e = e.Next; - } - } - - // add entry(if failed to add, only do resize) - var successAdd = AddToBuckets(nextBucket, key, null, valueFactory, out resultingValue); - - // replace field(threadsafe for read) - VolatileWrite(ref buckets, nextBucket); - - if (successAdd) size++; - return successAdd; - } - else - { - // add entry(insert last is thread safe for read) - var successAdd = AddToBuckets(buckets, key, null, valueFactory, out resultingValue); - if (successAdd) size++; - return successAdd; - } - } - } - - bool AddToBuckets(Entry[] buckets, TKey1 newKey, Entry newEntryOrNull, Func valueFactory, out TValue resultingValue) - { - var h = (newEntryOrNull != null) ? newEntryOrNull.Hash : comparer.GetHashCode(newKey); - if (buckets[h & (buckets.Length - 1)] == null) - { - if (newEntryOrNull != null) - { - resultingValue = newEntryOrNull.Value; - VolatileWrite(ref buckets[h & (buckets.Length - 1)], newEntryOrNull); - } - else - { - resultingValue = valueFactory(newKey); - VolatileWrite(ref buckets[h & (buckets.Length - 1)], new Entry { Key = newKey, Value = resultingValue, Hash = h }); - } - } - else - { - var searchLastEntry = buckets[h & (buckets.Length - 1)]; - while (true) - { - if (comparer.Equals(searchLastEntry.Key, newKey)) - { - resultingValue = searchLastEntry.Value; - return false; - } - - if (searchLastEntry.Next == null) - { - if (newEntryOrNull != null) - { - resultingValue = newEntryOrNull.Value; - VolatileWrite(ref searchLastEntry.Next, newEntryOrNull); - } - else - { - resultingValue = valueFactory(newKey); - VolatileWrite(ref searchLastEntry.Next, new Entry { Key = newKey, Value = resultingValue, Hash = h }); - } - break; - } - searchLastEntry = searchLastEntry.Next; - } - } - - return true; - } - - public bool TryGetValue(TKey2 key, out TValue value) - { - var table = buckets; - var hash = comparer.GetHashCode(key); - var entry = table[hash & table.Length - 1]; - - if (entry == null) goto NOT_FOUND; - - if (comparer.Equals(entry.Key, key)) - { - value = entry.Value; - return true; - } - - var next = entry.Next; - while (next != null) - { - if (comparer.Equals(next.Key, key)) - { - value = next.Value; - return true; - } - next = next.Next; - } - - NOT_FOUND: - value = default(TValue); - return false; - } - - static int CalculateCapacity(int collectionSize, float loadFactor) - { - var initialCapacity = (int)(((float)collectionSize) / loadFactor); - var capacity = 1; - while (capacity < initialCapacity) - { - capacity <<= 1; - } - - if (capacity < 8) - { - return 8; - } - - return capacity; - } - - static void VolatileWrite(ref Entry location, Entry value) - { - System.Threading.Volatile.Write(ref location, value); - } - - static void VolatileWrite(ref Entry[] location, Entry[] value) - { - System.Threading.Volatile.Write(ref location, value); - } - - class Entry - { - public TKey1 Key; - public TValue Value; - public int Hash; - public Entry Next; - - // from debugger only - public override string ToString() - { - return "Count:" + Count; - } - - internal int Count - { - get - { - var count = 1; - var n = this; - while (n.Next != null) - { - count++; - n = n.Next; - } - return count; - } - } - } - } -} - +#if NETSTANDARD + +using System; + +namespace MessagePack.Internal +{ + // Safe for multiple-read, single-write. + + // Add and Get Key is asymmetric. + + internal interface IAsymmetricEqualityComparer + { + int GetHashCode(TKey1 key1); + int GetHashCode(TKey2 key2); + bool Equals(TKey1 x, TKey1 y); // when used rehash + bool Equals(TKey1 x, TKey2 y); // when used get + } + + internal class StringArraySegmentByteAscymmetricEqualityComparer : IAsymmetricEqualityComparer> + { + static readonly bool Is32Bit = (IntPtr.Size == 4); + + public bool Equals(byte[] x, byte[] y) + { + if (x.Length != y.Length) return false; + + for (int i = 0; i < x.Length; i++) + { + if (x[i] != y[i]) return false; + } + + return true; + } + + public bool Equals(byte[] x, ArraySegment y) + { + return ByteArrayComparer.Equals(y.Array, y.Offset, y.Count, x); + } + + public int GetHashCode(byte[] key1) + { + return GetHashCode(new ArraySegment(key1, 0, key1.Length)); + } + + public int GetHashCode(ArraySegment key2) + { + unchecked + { + if (Is32Bit) + { + return (int)FarmHash.Hash32(key2.Array, key2.Offset, key2.Count); + } + else + { + return (int)FarmHash.Hash64(key2.Array, key2.Offset, key2.Count); + } + } + } + } + + internal sealed class AsymmetricKeyHashTable + { + Entry[] buckets; + int size; // only use in writer lock + + readonly object writerLock = new object(); + readonly float loadFactor; + readonly IAsymmetricEqualityComparer comparer; + + public AsymmetricKeyHashTable(IAsymmetricEqualityComparer comparer) + : this(4, 0.72f, comparer) + { + } + + public AsymmetricKeyHashTable(int capacity, float loadFactor, IAsymmetricEqualityComparer comparer) + { + var tableSize = CalculateCapacity(capacity, loadFactor); + this.buckets = new Entry[tableSize]; + this.loadFactor = loadFactor; + this.comparer = comparer; + } + + public TValue AddOrGet(TKey1 key1, Func valueFactory) + { + TValue v; + TryAddInternal(key1, valueFactory, out v); + return v; + } + + public bool TryAdd(TKey1 key, TValue value) + { + return TryAdd(key, _ => value); // closure capture + } + + public bool TryAdd(TKey1 key, Func valueFactory) + { + TValue _; + return TryAddInternal(key, valueFactory, out _); + } + + bool TryAddInternal(TKey1 key, Func valueFactory, out TValue resultingValue) + { + lock (writerLock) + { + var nextCapacity = CalculateCapacity(size + 1, loadFactor); + + if (buckets.Length < nextCapacity) + { + // rehash + var nextBucket = new Entry[nextCapacity]; + for (int i = 0; i < buckets.Length; i++) + { + var e = buckets[i]; + while (e != null) + { + var newEntry = new Entry { Key = e.Key, Value = e.Value, Hash = e.Hash }; + AddToBuckets(nextBucket, key, newEntry, null, out resultingValue); + e = e.Next; + } + } + + // add entry(if failed to add, only do resize) + var successAdd = AddToBuckets(nextBucket, key, null, valueFactory, out resultingValue); + + // replace field(threadsafe for read) + VolatileWrite(ref buckets, nextBucket); + + if (successAdd) size++; + return successAdd; + } + else + { + // add entry(insert last is thread safe for read) + var successAdd = AddToBuckets(buckets, key, null, valueFactory, out resultingValue); + if (successAdd) size++; + return successAdd; + } + } + } + + bool AddToBuckets(Entry[] buckets, TKey1 newKey, Entry newEntryOrNull, Func valueFactory, out TValue resultingValue) + { + var h = (newEntryOrNull != null) ? newEntryOrNull.Hash : comparer.GetHashCode(newKey); + if (buckets[h & (buckets.Length - 1)] == null) + { + if (newEntryOrNull != null) + { + resultingValue = newEntryOrNull.Value; + VolatileWrite(ref buckets[h & (buckets.Length - 1)], newEntryOrNull); + } + else + { + resultingValue = valueFactory(newKey); + VolatileWrite(ref buckets[h & (buckets.Length - 1)], new Entry { Key = newKey, Value = resultingValue, Hash = h }); + } + } + else + { + var searchLastEntry = buckets[h & (buckets.Length - 1)]; + while (true) + { + if (comparer.Equals(searchLastEntry.Key, newKey)) + { + resultingValue = searchLastEntry.Value; + return false; + } + + if (searchLastEntry.Next == null) + { + if (newEntryOrNull != null) + { + resultingValue = newEntryOrNull.Value; + VolatileWrite(ref searchLastEntry.Next, newEntryOrNull); + } + else + { + resultingValue = valueFactory(newKey); + VolatileWrite(ref searchLastEntry.Next, new Entry { Key = newKey, Value = resultingValue, Hash = h }); + } + break; + } + searchLastEntry = searchLastEntry.Next; + } + } + + return true; + } + + public bool TryGetValue(TKey2 key, out TValue value) + { + var table = buckets; + var hash = comparer.GetHashCode(key); + var entry = table[hash & table.Length - 1]; + + if (entry == null) goto NOT_FOUND; + + if (comparer.Equals(entry.Key, key)) + { + value = entry.Value; + return true; + } + + var next = entry.Next; + while (next != null) + { + if (comparer.Equals(next.Key, key)) + { + value = next.Value; + return true; + } + next = next.Next; + } + + NOT_FOUND: + value = default(TValue); + return false; + } + + static int CalculateCapacity(int collectionSize, float loadFactor) + { + var initialCapacity = (int)(((float)collectionSize) / loadFactor); + var capacity = 1; + while (capacity < initialCapacity) + { + capacity <<= 1; + } + + if (capacity < 8) + { + return 8; + } + + return capacity; + } + + static void VolatileWrite(ref Entry location, Entry value) + { + System.Threading.Volatile.Write(ref location, value); + } + + static void VolatileWrite(ref Entry[] location, Entry[] value) + { + System.Threading.Volatile.Write(ref location, value); + } + + class Entry + { + public TKey1 Key; + public TValue Value; + public int Hash; + public Entry Next; + + // from debugger only + public override string ToString() + { + return "Count:" + Count; + } + + internal int Count + { + get + { + var count = 1; + var n = this; + while (n.Next != null) + { + count++; + n = n.Next; + } + return count; + } + } + } + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/AutomataDictionary.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/AutomataDictionary.cs index aa3c82539..927ea8cbd 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/AutomataDictionary.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/AutomataDictionary.cs @@ -1,924 +1,924 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.Linq; -using System.Reflection.Emit; -using System.Reflection; - -namespace MessagePack.Internal -{ - // Key = long, Value = int for UTF8String Dictionary - - public class AutomataDictionary : IEnumerable> - { - readonly AutomataNode root; - - public AutomataDictionary() - { - root = new AutomataNode(0); - } - -#if NETSTANDARD - public unsafe void Add(string str, int value) - { - var bytes = Encoding.UTF8.GetBytes(str); - fixed (byte* buffer = &bytes[0]) - { - var node = root; - - var p = buffer; - var rest = bytes.Length; - while (rest != 0) - { - var key = AutomataKeyGen.GetKey(ref p, ref rest); - - if (rest == 0) - { - node = node.Add(key, value, str); - } - else - { - node = node.Add(key); - } - } - } - } - - public unsafe bool TryGetValue(byte[] bytes, int offset, int count, out int value) - { - fixed (byte* p = &bytes[0]) - { - var p1 = p; - var node = root; - var rest = count; - - while (rest != 0 && node != null) - { - node = node.SearchNext(ref p1, ref rest); - } - - if (node == null) - { - value = -1; - return false; - } - else - { - value = node.Value; - return true; - } - } - } -#else - // for Unity, use safe only. - - public void Add(string str, int value) - { - var bytes = Encoding.UTF8.GetBytes(str); - var offset = 0; - - var node = root; - - var rest = bytes.Length; - while (rest != 0) - { - var key = AutomataKeyGen.GetKeySafe(bytes, ref offset, ref rest); - - if (rest == 0) - { - node = node.Add(key, value, str); - } - else - { - node = node.Add(key); - } - } - } - -#endif - - - public bool TryGetValueSafe(ArraySegment key, out int value) - { - var node = root; - var bytes = key.Array; - var offset = key.Offset; - var rest = key.Count; - - while (rest != 0 && node != null) - { - node = node.SearchNextSafe(bytes, ref offset, ref rest); - } - - if (node == null) - { - value = -1; - return false; - } - else - { - value = node.Value; - return true; - } - } - - // for debugging - public override string ToString() - { - var sb = new StringBuilder(); - ToStringCore(root.YieldChildren(), sb, 0); - return sb.ToString(); - } - - static void ToStringCore(IEnumerable nexts, StringBuilder sb, int depth) - { - foreach (var item in nexts) - { - if (depth != 0) - { - sb.Append(' ', depth * 2); - } - sb.Append("[" + item.Key + "]"); - if (item.Value != -1) - { - sb.Append("(" + item.originalKey + ")"); - sb.Append(" = "); - sb.Append(item.Value); - } - sb.AppendLine(); - ToStringCore(item.YieldChildren(), sb, depth + 1); - } - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public IEnumerator> GetEnumerator() - { - return YieldCore(this.root.YieldChildren()).GetEnumerator(); - } - - static IEnumerable> YieldCore(IEnumerable nexts) - { - foreach (var item in nexts) - { - if (item.Value != -1) yield return new KeyValuePair(item.originalKey, item.Value); - foreach (var x in YieldCore(item.YieldChildren())) yield return x; - } - } - - // IL Emit - -#if !NET_STANDARD_2_0 - - public void EmitMatch(ILGenerator il, LocalBuilder p, LocalBuilder rest, LocalBuilder key, Action> onFound, Action onNotFound) - { - root.EmitSearchNext(il, p, rest, key, onFound, onNotFound); - } - -#endif - - class AutomataNode : IComparable - { - static readonly AutomataNode[] emptyNodes = new AutomataNode[0]; - static readonly ulong[] emptyKeys = new ulong[0]; - - public ulong Key; - public int Value; - public string originalKey; - - AutomataNode[] nexts; - ulong[] nextKeys; - int count; - - public bool HasChildren { get { return count != 0; } } - - public AutomataNode(ulong key) - { - this.Key = key; - this.Value = -1; - this.nexts = emptyNodes; - this.nextKeys = emptyKeys; - this.count = 0; - this.originalKey = null; - } - - public AutomataNode Add(ulong key) - { - var index = Array.BinarySearch(nextKeys, 0, count, key); - if (index < 0) - { - if (nexts.Length == count) - { - Array.Resize(ref nexts, (count == 0) ? 4 : (count * 2)); - Array.Resize(ref nextKeys, (count == 0) ? 4 : (count * 2)); - } - count++; - - var nextNode = new AutomataNode(key); - nexts[count - 1] = nextNode; - nextKeys[count - 1] = key; - Array.Sort(nexts, 0, count); - Array.Sort(nextKeys, 0, count); - return nextNode; - } - else - { - return nexts[index]; - } - } - - public AutomataNode Add(ulong key, int value, string originalKey) - { - var v = Add(key); - v.Value = value; - v.originalKey = originalKey; - return v; - } - -#if NETSTANDARD - - public unsafe AutomataNode SearchNext(ref byte* p, ref int rest) - { - var key = AutomataKeyGen.GetKey(ref p, ref rest); - if (count < 4) - { - // linear search - for (int i = 0; i < count; i++) - { - if (nextKeys[i] == key) - { - return nexts[i]; - } - } - } - else - { - // binary search - var index = BinarySearch(nextKeys, 0, count, key); - if (index >= 0) - { - return nexts[index]; - } - } - - return null; - } - -#endif - - public AutomataNode SearchNextSafe(byte[] p, ref int offset, ref int rest) - { - var key = AutomataKeyGen.GetKeySafe(p, ref offset, ref rest); - if (count < 4) - { - // linear search - for (int i = 0; i < count; i++) - { - if (nextKeys[i] == key) - { - return nexts[i]; - } - } - } - else - { - // binary search - var index = BinarySearch(nextKeys, 0, count, key); - if (index >= 0) - { - return nexts[index]; - } - } - - return null; - } - - internal static int BinarySearch(ulong[] array, int index, int length, ulong value) - { - int lo = index; - int hi = index + length - 1; - while (lo <= hi) - { - int i = lo + ((hi - lo) >> 1); - - var arrayValue = array[i]; - int order; - if (arrayValue < value) order = -1; - else if (arrayValue > value) order = 1; - else order = 0; - - if (order == 0) return i; - if (order < 0) - { - lo = i + 1; - } - else - { - hi = i - 1; - } - } - - return ~lo; - } - - public int CompareTo(AutomataNode other) - { - return this.Key.CompareTo(other.Key); - } - - public IEnumerable YieldChildren() - { - for (int i = 0; i < count; i++) - { - yield return nexts[i]; - } - } - -#if !NET_STANDARD_2_0 - - // SearchNext(ref byte* p, ref int rest, ref ulong key) - public void EmitSearchNext(ILGenerator il, LocalBuilder p, LocalBuilder rest, LocalBuilder key, Action> onFound, Action onNotFound) - { - // key = AutomataKeyGen.GetKey(ref p, ref rest); - il.EmitLdloca(p); - il.EmitLdloca(rest); -#if NETSTANDARD - il.EmitCall(AutomataKeyGen.GetKeyMethod); -#else - il.EmitCall(AutomataKeyGen.GetGetKeyMethod()); -#endif - il.EmitStloc(key); - - // match children. - EmitSearchNextCore(il, p, rest, key, onFound, onNotFound, nexts, count); - } - - static void EmitSearchNextCore(ILGenerator il, LocalBuilder p, LocalBuilder rest, LocalBuilder key, Action> onFound, Action onNotFound, AutomataNode[] nexts, int count) - { - if (count < 4) - { - // linear-search - var valueExists = nexts.Take(count).Where(x => x.Value != -1).ToArray(); - var childrenExists = nexts.Take(count).Where(x => x.HasChildren).ToArray(); - var gotoSearchNext = il.DefineLabel(); - var gotoNotFound = il.DefineLabel(); - - { - il.EmitLdloc(rest); - if (childrenExists.Length != 0 && valueExists.Length == 0) - { - - il.Emit(OpCodes.Brfalse, gotoNotFound); // if(rest == 0) - } - else - { - il.Emit(OpCodes.Brtrue, gotoSearchNext); // if(rest != 0) - } - } - { - var ifValueNexts = Enumerable.Range(0, Math.Max(valueExists.Length - 1, 0)).Select(_ => il.DefineLabel()).ToArray(); - for (int i = 0; i < valueExists.Length; i++) - { - var notFoundLabel = il.DefineLabel(); - if (i != 0) - { - il.MarkLabel(ifValueNexts[i - 1]); - } - - il.EmitLdloc(key); - il.EmitULong(valueExists[i].Key); - il.Emit(OpCodes.Bne_Un, notFoundLabel); - // found - onFound(new KeyValuePair(valueExists[i].originalKey, valueExists[i].Value)); - - // notfound - il.MarkLabel(notFoundLabel); - if (i != valueExists.Length - 1) - { - il.Emit(OpCodes.Br, ifValueNexts[i]); - } - else - { - onNotFound(); - } - } - } - - il.MarkLabel(gotoSearchNext); - var ifRecNext = Enumerable.Range(0, Math.Max(childrenExists.Length - 1, 0)).Select(_ => il.DefineLabel()).ToArray(); - for (int i = 0; i < childrenExists.Length; i++) - { - var notFoundLabel = il.DefineLabel(); - if (i != 0) - { - il.MarkLabel(ifRecNext[i - 1]); - } - - il.EmitLdloc(key); - il.EmitULong(childrenExists[i].Key); - il.Emit(OpCodes.Bne_Un, notFoundLabel); - // found - childrenExists[i].EmitSearchNext(il, p, rest, key, onFound, onNotFound); - // notfound - il.MarkLabel(notFoundLabel); - if (i != childrenExists.Length - 1) - { - il.Emit(OpCodes.Br, ifRecNext[i]); - } - else - { - onNotFound(); - } - } - - il.MarkLabel(gotoNotFound); - onNotFound(); - } - else - { - // binary-search - var midline = count / 2; - var mid = nexts[midline].Key; - var l = nexts.Take(count).Take(midline).ToArray(); - var r = nexts.Take(count).Skip(midline).ToArray(); - - var gotoRight = il.DefineLabel(); - - // if(key < mid) - il.EmitLdloc(key); - il.EmitULong(mid); - il.Emit(OpCodes.Bge, gotoRight); - EmitSearchNextCore(il, p, rest, key, onFound, onNotFound, l, l.Length); - - // else - il.MarkLabel(gotoRight); - EmitSearchNextCore(il, p, rest, key, onFound, onNotFound, r, r.Length); - } - } - -#endif - } - } - - public static class AutomataKeyGen - { - public delegate ulong PointerDelegate(ref T p, ref int rest); - -#if NETSTANDARD - public static readonly MethodInfo GetKeyMethod = typeof(AutomataKeyGen).GetRuntimeMethod("GetKey", new[] { typeof(byte).MakePointerType().MakeByRefType(), typeof(int).MakeByRefType() }); -#endif - -#if !NETSTANDARD - -#if !NET_STANDARD_2_0 - - static MethodInfo dynamicGetKeyMethod; - static readonly object gate = new object(); - static DynamicAssembly dynamicAssembly; - - public static MethodInfo GetGetKeyMethod() - { - if (dynamicGetKeyMethod == null) - { - lock (gate) - { - if (dynamicGetKeyMethod == null) - { - dynamicAssembly = new DynamicAssembly("AutomataKeyGenHelper"); - var helperType = dynamicAssembly.DefineType("AutomataKeyGen", TypeAttributes.Class | TypeAttributes.Public | TypeAttributes.Sealed | TypeAttributes.Abstract, null); - - var dm = helperType.DefineMethod("GetKey", MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig, typeof(ulong), new[] { typeof(byte).MakePointerType().MakeByRefType(), typeof(int).MakeByRefType() }); - - var il = dm.GetILGenerator(); - - il.DeclareLocal(typeof(int)); // var readSize - il.DeclareLocal(typeof(ulong)); // var key = - il.DeclareLocal(typeof(int)); // var _local = - - var elseLabel = il.DefineLabel(); - var endLabel = il.DefineLabel(); - var case0 = il.DefineLabel(); - var case1 = il.DefineLabel(); - var case2 = il.DefineLabel(); - var case3 = il.DefineLabel(); - var case4 = il.DefineLabel(); - var case5 = il.DefineLabel(); - var case6 = il.DefineLabel(); - var case7 = il.DefineLabel(); - - il.Emit(OpCodes.Ldarg_1); - il.Emit(OpCodes.Ldind_I4); - il.Emit(OpCodes.Ldc_I4_8); - il.Emit(OpCodes.Blt_S, elseLabel); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldind_I8); - il.Emit(OpCodes.Stloc_1); - il.Emit(OpCodes.Ldc_I4_8); - il.Emit(OpCodes.Stloc_0); - il.Emit(OpCodes.Br, endLabel); - - il.MarkLabel(elseLabel); - il.Emit(OpCodes.Ldarg_1); - il.Emit(OpCodes.Ldind_I4); - il.Emit(OpCodes.Stloc_2); - il.Emit(OpCodes.Ldloc_2); - il.Emit(OpCodes.Switch, new[] { case0, case1, case2, case3, case4, case5, case6, case7 }); - il.Emit(OpCodes.Br, case0); // default - - il.MarkLabel(case1); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldind_U1); - il.Emit(OpCodes.Conv_U8); - il.Emit(OpCodes.Stloc_1); - il.Emit(OpCodes.Ldc_I4_1); - il.Emit(OpCodes.Stloc_0); - il.Emit(OpCodes.Br, endLabel); - - il.MarkLabel(case2); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldind_U2); - il.Emit(OpCodes.Conv_U8); - il.Emit(OpCodes.Stloc_1); - il.Emit(OpCodes.Ldc_I4_2); - il.Emit(OpCodes.Stloc_0); - il.Emit(OpCodes.Br, endLabel); - - il.MarkLabel(case3); - il.DeclareLocal(typeof(ushort)); // _3 - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldind_U1); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldc_I4_1); - il.Emit(OpCodes.Add); - il.Emit(OpCodes.Ldind_U2); - il.Emit(OpCodes.Stloc_3); - il.Emit(OpCodes.Conv_U8); - il.Emit(OpCodes.Ldloc_3); - il.Emit(OpCodes.Conv_U8); - il.Emit(OpCodes.Ldc_I4_8); - il.Emit(OpCodes.Shl); - il.Emit(OpCodes.Or); - il.Emit(OpCodes.Stloc_1); - il.Emit(OpCodes.Ldc_I4_3); - il.Emit(OpCodes.Stloc_0); - il.Emit(OpCodes.Br, endLabel); - - il.MarkLabel(case4); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldind_U4); - il.Emit(OpCodes.Conv_U8); - il.Emit(OpCodes.Stloc_1); - il.Emit(OpCodes.Ldc_I4_4); - il.Emit(OpCodes.Stloc_0); - il.Emit(OpCodes.Br, endLabel); - - il.MarkLabel(case5); - il.DeclareLocal(typeof(uint)); // _4 - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldind_U1); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldc_I4_1); - il.Emit(OpCodes.Add); - il.Emit(OpCodes.Ldind_U4); - il.Emit(OpCodes.Stloc_S, 4); - il.Emit(OpCodes.Conv_U8); - il.Emit(OpCodes.Ldloc_S, 4); - il.Emit(OpCodes.Conv_U8); - il.Emit(OpCodes.Ldc_I4_8); - il.Emit(OpCodes.Shl); - il.Emit(OpCodes.Or); - il.Emit(OpCodes.Stloc_1); - il.Emit(OpCodes.Ldc_I4_5); - il.Emit(OpCodes.Stloc_0); - il.Emit(OpCodes.Br, endLabel); - - il.MarkLabel(case6); - il.DeclareLocal(typeof(ulong)); // _5 - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldind_U2); - il.Emit(OpCodes.Conv_U8); // [x] - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldc_I4_2); - il.Emit(OpCodes.Add); // [x, y] - il.Emit(OpCodes.Ldind_U4); - il.Emit(OpCodes.Conv_U8); - il.Emit(OpCodes.Stloc_S, 5); // [x] - il.Emit(OpCodes.Ldloc_S, 5); - il.Emit(OpCodes.Ldc_I4_S, 16); - il.Emit(OpCodes.Shl); - il.Emit(OpCodes.Or); - il.Emit(OpCodes.Stloc_1); - il.Emit(OpCodes.Ldc_I4_6); - il.Emit(OpCodes.Stloc_0); - il.Emit(OpCodes.Br, endLabel); - - il.MarkLabel(case7); - il.DeclareLocal(typeof(ushort)); // _6 - il.DeclareLocal(typeof(uint)); // _7 - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldind_U1); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldc_I4_1); - il.Emit(OpCodes.Add); - il.Emit(OpCodes.Ldind_U2); - il.Emit(OpCodes.Stloc_S, 6); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldc_I4_3); - il.Emit(OpCodes.Add); - il.Emit(OpCodes.Ldind_U4); - il.Emit(OpCodes.Stloc_S, 7); - il.Emit(OpCodes.Conv_U8); - il.Emit(OpCodes.Ldloc_S, 6); - il.Emit(OpCodes.Conv_U8); - il.Emit(OpCodes.Ldc_I4_8); - il.Emit(OpCodes.Shl); - il.Emit(OpCodes.Or); - il.Emit(OpCodes.Ldloc_S, 7); - il.Emit(OpCodes.Conv_U8); - il.Emit(OpCodes.Ldc_I4_S, 24); - il.Emit(OpCodes.Shl); - il.Emit(OpCodes.Or); - il.Emit(OpCodes.Stloc_1); - il.Emit(OpCodes.Ldc_I4_7); - il.Emit(OpCodes.Stloc_0); - il.Emit(OpCodes.Br, endLabel); - - il.MarkLabel(case0); - il.Emit(OpCodes.Ldstr, "Not Supported Length"); - il.Emit(OpCodes.Newobj, typeof(InvalidOperationException).GetConstructor(new[] { typeof(string) })); - il.Emit(OpCodes.Throw); - - il.MarkLabel(endLabel); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldind_I); - il.Emit(OpCodes.Ldloc_0); - il.Emit(OpCodes.Add); - il.Emit(OpCodes.Stind_I); - il.Emit(OpCodes.Ldarg_1); - il.Emit(OpCodes.Ldarg_1); - il.Emit(OpCodes.Ldind_I4); - il.Emit(OpCodes.Ldloc_0); - il.Emit(OpCodes.Sub); - il.Emit(OpCodes.Stind_I4); - il.Emit(OpCodes.Ldloc_1); - il.Emit(OpCodes.Ret); - - var genereatedType = helperType.CreateTypeInfo().AsType(); - dynamicGetKeyMethod = genereatedType.GetMethods().First(); - } - } - } - - return dynamicGetKeyMethod; - } - -#endif - -#endif - -#if NETSTANDARD - - public static unsafe ulong GetKey(ref byte* p, ref int rest) - { - int readSize; - ulong key; - - unchecked - { - if (rest >= 8) - { - key = *(ulong*)p; - readSize = 8; - } - else - { - switch (rest) - { - case 1: - { - key = *(byte*)p; - readSize = 1; - break; - } - case 2: - { - key = *(ushort*)p; - readSize = 2; - break; - } - case 3: - { - var a = *p; - var b = *(ushort*)(p + 1); - key = ((ulong)a | (ulong)b << 8); - readSize = 3; - break; - } - case 4: - { - key = *(uint*)p; - readSize = 4; - break; - } - case 5: - { - var a = *p; - var b = *(uint*)(p + 1); - key = ((ulong)a | (ulong)b << 8); - readSize = 5; - break; - } - case 6: - { - ulong a = *(ushort*)p; - ulong b = *(uint*)(p + 2); - key = (a | (b << 16)); - readSize = 6; - break; - } - case 7: - { - var a = *(byte*)p; - var b = *(ushort*)(p + 1); - var c = *(uint*)(p + 3); - key = ((ulong)a | (ulong)b << 8 | (ulong)c << 24); - readSize = 7; - break; - } - default: - throw new InvalidOperationException("Not Supported Length"); - } - } - - p += readSize; - rest -= readSize; - return key; - } - } - -#endif - - public static ulong GetKeySafe(byte[] bytes, ref int offset, ref int rest) - { - int readSize; - ulong key; - - if (BitConverter.IsLittleEndian) - { - unchecked - { - if (rest >= 8) - { - key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 16 | (ulong)bytes[offset + 3] << 24 - | (ulong)bytes[offset + 4] << 32 | (ulong)bytes[offset + 5] << 40 | (ulong)bytes[offset + 6] << 48 | (ulong)bytes[offset + 7] << 56; - readSize = 8; - } - else - { - switch (rest) - { - case 1: - { - key = bytes[offset]; - readSize = 1; - break; - } - case 2: - { - key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8; - readSize = 2; - break; - } - case 3: - { - key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 16; - readSize = 3; - break; - } - case 4: - { - key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 16 | (ulong)bytes[offset + 3] << 24; - readSize = 4; - break; - } - case 5: - { - key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 16 | (ulong)bytes[offset + 3] << 24 - | (ulong)bytes[offset + 4] << 32; - readSize = 5; - break; - } - case 6: - { - key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 16 | (ulong)bytes[offset + 3] << 24 - | (ulong)bytes[offset + 4] << 32 | (ulong)bytes[offset + 5] << 40; - readSize = 6; - break; - } - case 7: - { - key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 16 | (ulong)bytes[offset + 3] << 24 - | (ulong)bytes[offset + 4] << 32 | (ulong)bytes[offset + 5] << 40 | (ulong)bytes[offset + 6] << 48; - readSize = 7; - break; - } - default: - throw new InvalidOperationException("Not Supported Length"); - } - } - - offset += readSize; - rest -= readSize; - return key; - } - } - else - { - unchecked - { - if (rest >= 8) - { - key = (ulong)bytes[offset] << 56 | (ulong)bytes[offset + 1] << 48 | (ulong)bytes[offset + 2] << 40 | (ulong)bytes[offset + 3] << 32 - | (ulong)bytes[offset + 4] << 24 | (ulong)bytes[offset + 5] << 16 | (ulong)bytes[offset + 6] << 8 | (ulong)bytes[offset + 7]; - readSize = 8; - } - else - { - switch (rest) - { - case 1: - { - key = bytes[offset]; - readSize = 1; - break; - } - case 2: - { - key = (ulong)bytes[offset] << 8 | (ulong)bytes[offset + 1] << 0; - readSize = 2; - break; - } - case 3: - { - key = (ulong)bytes[offset] << 16 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 0; - readSize = 3; - break; - } - case 4: - { - key = (ulong)bytes[offset] << 24 | (ulong)bytes[offset + 1] << 16 | (ulong)bytes[offset + 2] << 8 | (ulong)bytes[offset + 3] << 0; - readSize = 4; - break; - } - case 5: - { - key = (ulong)bytes[offset] << 32 | (ulong)bytes[offset + 1] << 24 | (ulong)bytes[offset + 2] << 16 | (ulong)bytes[offset + 3] << 8 - | (ulong)bytes[offset + 4] << 0; - readSize = 5; - break; - } - case 6: - { - key = (ulong)bytes[offset] << 40 | (ulong)bytes[offset + 1] << 32 | (ulong)bytes[offset + 2] << 24 | (ulong)bytes[offset + 3] << 16 - | (ulong)bytes[offset + 4] << 8 | (ulong)bytes[offset + 5] << 0; - readSize = 6; - break; - } - case 7: - { - key = (ulong)bytes[offset] << 48 | (ulong)bytes[offset + 1] << 40 | (ulong)bytes[offset + 2] << 32 | (ulong)bytes[offset + 3] << 24 - | (ulong)bytes[offset + 4] << 16 | (ulong)bytes[offset + 5] << 8 | (ulong)bytes[offset + 6] << 0; - readSize = 7; - break; - } - default: - throw new InvalidOperationException("Not Supported Length"); - } - } - - offset += readSize; - rest -= readSize; - return key; - } - } - } - } +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Linq; +using System.Reflection.Emit; +using System.Reflection; + +namespace MessagePack.Internal +{ + // Key = long, Value = int for UTF8String Dictionary + + public class AutomataDictionary : IEnumerable> + { + readonly AutomataNode root; + + public AutomataDictionary() + { + root = new AutomataNode(0); + } + +#if NETSTANDARD + public unsafe void Add(string str, int value) + { + var bytes = Encoding.UTF8.GetBytes(str); + fixed (byte* buffer = &bytes[0]) + { + var node = root; + + var p = buffer; + var rest = bytes.Length; + while (rest != 0) + { + var key = AutomataKeyGen.GetKey(ref p, ref rest); + + if (rest == 0) + { + node = node.Add(key, value, str); + } + else + { + node = node.Add(key); + } + } + } + } + + public unsafe bool TryGetValue(byte[] bytes, int offset, int count, out int value) + { + fixed (byte* p = &bytes[0]) + { + var p1 = p; + var node = root; + var rest = count; + + while (rest != 0 && node != null) + { + node = node.SearchNext(ref p1, ref rest); + } + + if (node == null) + { + value = -1; + return false; + } + else + { + value = node.Value; + return true; + } + } + } +#else + // for Unity, use safe only. + + public void Add(string str, int value) + { + var bytes = Encoding.UTF8.GetBytes(str); + var offset = 0; + + var node = root; + + var rest = bytes.Length; + while (rest != 0) + { + var key = AutomataKeyGen.GetKeySafe(bytes, ref offset, ref rest); + + if (rest == 0) + { + node = node.Add(key, value, str); + } + else + { + node = node.Add(key); + } + } + } + +#endif + + + public bool TryGetValueSafe(ArraySegment key, out int value) + { + var node = root; + var bytes = key.Array; + var offset = key.Offset; + var rest = key.Count; + + while (rest != 0 && node != null) + { + node = node.SearchNextSafe(bytes, ref offset, ref rest); + } + + if (node == null) + { + value = -1; + return false; + } + else + { + value = node.Value; + return true; + } + } + + // for debugging + public override string ToString() + { + var sb = new StringBuilder(); + ToStringCore(root.YieldChildren(), sb, 0); + return sb.ToString(); + } + + static void ToStringCore(IEnumerable nexts, StringBuilder sb, int depth) + { + foreach (var item in nexts) + { + if (depth != 0) + { + sb.Append(' ', depth * 2); + } + sb.Append("[" + item.Key + "]"); + if (item.Value != -1) + { + sb.Append("(" + item.originalKey + ")"); + sb.Append(" = "); + sb.Append(item.Value); + } + sb.AppendLine(); + ToStringCore(item.YieldChildren(), sb, depth + 1); + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public IEnumerator> GetEnumerator() + { + return YieldCore(this.root.YieldChildren()).GetEnumerator(); + } + + static IEnumerable> YieldCore(IEnumerable nexts) + { + foreach (var item in nexts) + { + if (item.Value != -1) yield return new KeyValuePair(item.originalKey, item.Value); + foreach (var x in YieldCore(item.YieldChildren())) yield return x; + } + } + + // IL Emit + +#if !NET_STANDARD_2_0 + + public void EmitMatch(ILGenerator il, LocalBuilder p, LocalBuilder rest, LocalBuilder key, Action> onFound, Action onNotFound) + { + root.EmitSearchNext(il, p, rest, key, onFound, onNotFound); + } + +#endif + + class AutomataNode : IComparable + { + static readonly AutomataNode[] emptyNodes = new AutomataNode[0]; + static readonly ulong[] emptyKeys = new ulong[0]; + + public ulong Key; + public int Value; + public string originalKey; + + AutomataNode[] nexts; + ulong[] nextKeys; + int count; + + public bool HasChildren { get { return count != 0; } } + + public AutomataNode(ulong key) + { + this.Key = key; + this.Value = -1; + this.nexts = emptyNodes; + this.nextKeys = emptyKeys; + this.count = 0; + this.originalKey = null; + } + + public AutomataNode Add(ulong key) + { + var index = Array.BinarySearch(nextKeys, 0, count, key); + if (index < 0) + { + if (nexts.Length == count) + { + Array.Resize(ref nexts, (count == 0) ? 4 : (count * 2)); + Array.Resize(ref nextKeys, (count == 0) ? 4 : (count * 2)); + } + count++; + + var nextNode = new AutomataNode(key); + nexts[count - 1] = nextNode; + nextKeys[count - 1] = key; + Array.Sort(nexts, 0, count); + Array.Sort(nextKeys, 0, count); + return nextNode; + } + else + { + return nexts[index]; + } + } + + public AutomataNode Add(ulong key, int value, string originalKey) + { + var v = Add(key); + v.Value = value; + v.originalKey = originalKey; + return v; + } + +#if NETSTANDARD + + public unsafe AutomataNode SearchNext(ref byte* p, ref int rest) + { + var key = AutomataKeyGen.GetKey(ref p, ref rest); + if (count < 4) + { + // linear search + for (int i = 0; i < count; i++) + { + if (nextKeys[i] == key) + { + return nexts[i]; + } + } + } + else + { + // binary search + var index = BinarySearch(nextKeys, 0, count, key); + if (index >= 0) + { + return nexts[index]; + } + } + + return null; + } + +#endif + + public AutomataNode SearchNextSafe(byte[] p, ref int offset, ref int rest) + { + var key = AutomataKeyGen.GetKeySafe(p, ref offset, ref rest); + if (count < 4) + { + // linear search + for (int i = 0; i < count; i++) + { + if (nextKeys[i] == key) + { + return nexts[i]; + } + } + } + else + { + // binary search + var index = BinarySearch(nextKeys, 0, count, key); + if (index >= 0) + { + return nexts[index]; + } + } + + return null; + } + + internal static int BinarySearch(ulong[] array, int index, int length, ulong value) + { + int lo = index; + int hi = index + length - 1; + while (lo <= hi) + { + int i = lo + ((hi - lo) >> 1); + + var arrayValue = array[i]; + int order; + if (arrayValue < value) order = -1; + else if (arrayValue > value) order = 1; + else order = 0; + + if (order == 0) return i; + if (order < 0) + { + lo = i + 1; + } + else + { + hi = i - 1; + } + } + + return ~lo; + } + + public int CompareTo(AutomataNode other) + { + return this.Key.CompareTo(other.Key); + } + + public IEnumerable YieldChildren() + { + for (int i = 0; i < count; i++) + { + yield return nexts[i]; + } + } + +#if !NET_STANDARD_2_0 + + // SearchNext(ref byte* p, ref int rest, ref ulong key) + public void EmitSearchNext(ILGenerator il, LocalBuilder p, LocalBuilder rest, LocalBuilder key, Action> onFound, Action onNotFound) + { + // key = AutomataKeyGen.GetKey(ref p, ref rest); + il.EmitLdloca(p); + il.EmitLdloca(rest); +#if NETSTANDARD + il.EmitCall(AutomataKeyGen.GetKeyMethod); +#else + il.EmitCall(AutomataKeyGen.GetGetKeyMethod()); +#endif + il.EmitStloc(key); + + // match children. + EmitSearchNextCore(il, p, rest, key, onFound, onNotFound, nexts, count); + } + + static void EmitSearchNextCore(ILGenerator il, LocalBuilder p, LocalBuilder rest, LocalBuilder key, Action> onFound, Action onNotFound, AutomataNode[] nexts, int count) + { + if (count < 4) + { + // linear-search + var valueExists = nexts.Take(count).Where(x => x.Value != -1).ToArray(); + var childrenExists = nexts.Take(count).Where(x => x.HasChildren).ToArray(); + var gotoSearchNext = il.DefineLabel(); + var gotoNotFound = il.DefineLabel(); + + { + il.EmitLdloc(rest); + if (childrenExists.Length != 0 && valueExists.Length == 0) + { + + il.Emit(OpCodes.Brfalse, gotoNotFound); // if(rest == 0) + } + else + { + il.Emit(OpCodes.Brtrue, gotoSearchNext); // if(rest != 0) + } + } + { + var ifValueNexts = Enumerable.Range(0, Math.Max(valueExists.Length - 1, 0)).Select(_ => il.DefineLabel()).ToArray(); + for (int i = 0; i < valueExists.Length; i++) + { + var notFoundLabel = il.DefineLabel(); + if (i != 0) + { + il.MarkLabel(ifValueNexts[i - 1]); + } + + il.EmitLdloc(key); + il.EmitULong(valueExists[i].Key); + il.Emit(OpCodes.Bne_Un, notFoundLabel); + // found + onFound(new KeyValuePair(valueExists[i].originalKey, valueExists[i].Value)); + + // notfound + il.MarkLabel(notFoundLabel); + if (i != valueExists.Length - 1) + { + il.Emit(OpCodes.Br, ifValueNexts[i]); + } + else + { + onNotFound(); + } + } + } + + il.MarkLabel(gotoSearchNext); + var ifRecNext = Enumerable.Range(0, Math.Max(childrenExists.Length - 1, 0)).Select(_ => il.DefineLabel()).ToArray(); + for (int i = 0; i < childrenExists.Length; i++) + { + var notFoundLabel = il.DefineLabel(); + if (i != 0) + { + il.MarkLabel(ifRecNext[i - 1]); + } + + il.EmitLdloc(key); + il.EmitULong(childrenExists[i].Key); + il.Emit(OpCodes.Bne_Un, notFoundLabel); + // found + childrenExists[i].EmitSearchNext(il, p, rest, key, onFound, onNotFound); + // notfound + il.MarkLabel(notFoundLabel); + if (i != childrenExists.Length - 1) + { + il.Emit(OpCodes.Br, ifRecNext[i]); + } + else + { + onNotFound(); + } + } + + il.MarkLabel(gotoNotFound); + onNotFound(); + } + else + { + // binary-search + var midline = count / 2; + var mid = nexts[midline].Key; + var l = nexts.Take(count).Take(midline).ToArray(); + var r = nexts.Take(count).Skip(midline).ToArray(); + + var gotoRight = il.DefineLabel(); + + // if(key < mid) + il.EmitLdloc(key); + il.EmitULong(mid); + il.Emit(OpCodes.Bge, gotoRight); + EmitSearchNextCore(il, p, rest, key, onFound, onNotFound, l, l.Length); + + // else + il.MarkLabel(gotoRight); + EmitSearchNextCore(il, p, rest, key, onFound, onNotFound, r, r.Length); + } + } + +#endif + } + } + + public static class AutomataKeyGen + { + public delegate ulong PointerDelegate(ref T p, ref int rest); + +#if NETSTANDARD + public static readonly MethodInfo GetKeyMethod = typeof(AutomataKeyGen).GetRuntimeMethod("GetKey", new[] { typeof(byte).MakePointerType().MakeByRefType(), typeof(int).MakeByRefType() }); +#endif + +#if !NETSTANDARD + +#if !NET_STANDARD_2_0 + + static MethodInfo dynamicGetKeyMethod; + static readonly object gate = new object(); + static DynamicAssembly dynamicAssembly; + + public static MethodInfo GetGetKeyMethod() + { + if (dynamicGetKeyMethod == null) + { + lock (gate) + { + if (dynamicGetKeyMethod == null) + { + dynamicAssembly = new DynamicAssembly("AutomataKeyGenHelper"); + var helperType = dynamicAssembly.DefineType("AutomataKeyGen", TypeAttributes.Class | TypeAttributes.Public | TypeAttributes.Sealed | TypeAttributes.Abstract, null); + + var dm = helperType.DefineMethod("GetKey", MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig, typeof(ulong), new[] { typeof(byte).MakePointerType().MakeByRefType(), typeof(int).MakeByRefType() }); + + var il = dm.GetILGenerator(); + + il.DeclareLocal(typeof(int)); // var readSize + il.DeclareLocal(typeof(ulong)); // var key = + il.DeclareLocal(typeof(int)); // var _local = + + var elseLabel = il.DefineLabel(); + var endLabel = il.DefineLabel(); + var case0 = il.DefineLabel(); + var case1 = il.DefineLabel(); + var case2 = il.DefineLabel(); + var case3 = il.DefineLabel(); + var case4 = il.DefineLabel(); + var case5 = il.DefineLabel(); + var case6 = il.DefineLabel(); + var case7 = il.DefineLabel(); + + il.Emit(OpCodes.Ldarg_1); + il.Emit(OpCodes.Ldind_I4); + il.Emit(OpCodes.Ldc_I4_8); + il.Emit(OpCodes.Blt_S, elseLabel); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldind_I8); + il.Emit(OpCodes.Stloc_1); + il.Emit(OpCodes.Ldc_I4_8); + il.Emit(OpCodes.Stloc_0); + il.Emit(OpCodes.Br, endLabel); + + il.MarkLabel(elseLabel); + il.Emit(OpCodes.Ldarg_1); + il.Emit(OpCodes.Ldind_I4); + il.Emit(OpCodes.Stloc_2); + il.Emit(OpCodes.Ldloc_2); + il.Emit(OpCodes.Switch, new[] { case0, case1, case2, case3, case4, case5, case6, case7 }); + il.Emit(OpCodes.Br, case0); // default + + il.MarkLabel(case1); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldind_U1); + il.Emit(OpCodes.Conv_U8); + il.Emit(OpCodes.Stloc_1); + il.Emit(OpCodes.Ldc_I4_1); + il.Emit(OpCodes.Stloc_0); + il.Emit(OpCodes.Br, endLabel); + + il.MarkLabel(case2); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldind_U2); + il.Emit(OpCodes.Conv_U8); + il.Emit(OpCodes.Stloc_1); + il.Emit(OpCodes.Ldc_I4_2); + il.Emit(OpCodes.Stloc_0); + il.Emit(OpCodes.Br, endLabel); + + il.MarkLabel(case3); + il.DeclareLocal(typeof(ushort)); // _3 + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldind_U1); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldc_I4_1); + il.Emit(OpCodes.Add); + il.Emit(OpCodes.Ldind_U2); + il.Emit(OpCodes.Stloc_3); + il.Emit(OpCodes.Conv_U8); + il.Emit(OpCodes.Ldloc_3); + il.Emit(OpCodes.Conv_U8); + il.Emit(OpCodes.Ldc_I4_8); + il.Emit(OpCodes.Shl); + il.Emit(OpCodes.Or); + il.Emit(OpCodes.Stloc_1); + il.Emit(OpCodes.Ldc_I4_3); + il.Emit(OpCodes.Stloc_0); + il.Emit(OpCodes.Br, endLabel); + + il.MarkLabel(case4); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldind_U4); + il.Emit(OpCodes.Conv_U8); + il.Emit(OpCodes.Stloc_1); + il.Emit(OpCodes.Ldc_I4_4); + il.Emit(OpCodes.Stloc_0); + il.Emit(OpCodes.Br, endLabel); + + il.MarkLabel(case5); + il.DeclareLocal(typeof(uint)); // _4 + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldind_U1); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldc_I4_1); + il.Emit(OpCodes.Add); + il.Emit(OpCodes.Ldind_U4); + il.Emit(OpCodes.Stloc_S, 4); + il.Emit(OpCodes.Conv_U8); + il.Emit(OpCodes.Ldloc_S, 4); + il.Emit(OpCodes.Conv_U8); + il.Emit(OpCodes.Ldc_I4_8); + il.Emit(OpCodes.Shl); + il.Emit(OpCodes.Or); + il.Emit(OpCodes.Stloc_1); + il.Emit(OpCodes.Ldc_I4_5); + il.Emit(OpCodes.Stloc_0); + il.Emit(OpCodes.Br, endLabel); + + il.MarkLabel(case6); + il.DeclareLocal(typeof(ulong)); // _5 + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldind_U2); + il.Emit(OpCodes.Conv_U8); // [x] + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldc_I4_2); + il.Emit(OpCodes.Add); // [x, y] + il.Emit(OpCodes.Ldind_U4); + il.Emit(OpCodes.Conv_U8); + il.Emit(OpCodes.Stloc_S, 5); // [x] + il.Emit(OpCodes.Ldloc_S, 5); + il.Emit(OpCodes.Ldc_I4_S, 16); + il.Emit(OpCodes.Shl); + il.Emit(OpCodes.Or); + il.Emit(OpCodes.Stloc_1); + il.Emit(OpCodes.Ldc_I4_6); + il.Emit(OpCodes.Stloc_0); + il.Emit(OpCodes.Br, endLabel); + + il.MarkLabel(case7); + il.DeclareLocal(typeof(ushort)); // _6 + il.DeclareLocal(typeof(uint)); // _7 + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldind_U1); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldc_I4_1); + il.Emit(OpCodes.Add); + il.Emit(OpCodes.Ldind_U2); + il.Emit(OpCodes.Stloc_S, 6); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldc_I4_3); + il.Emit(OpCodes.Add); + il.Emit(OpCodes.Ldind_U4); + il.Emit(OpCodes.Stloc_S, 7); + il.Emit(OpCodes.Conv_U8); + il.Emit(OpCodes.Ldloc_S, 6); + il.Emit(OpCodes.Conv_U8); + il.Emit(OpCodes.Ldc_I4_8); + il.Emit(OpCodes.Shl); + il.Emit(OpCodes.Or); + il.Emit(OpCodes.Ldloc_S, 7); + il.Emit(OpCodes.Conv_U8); + il.Emit(OpCodes.Ldc_I4_S, 24); + il.Emit(OpCodes.Shl); + il.Emit(OpCodes.Or); + il.Emit(OpCodes.Stloc_1); + il.Emit(OpCodes.Ldc_I4_7); + il.Emit(OpCodes.Stloc_0); + il.Emit(OpCodes.Br, endLabel); + + il.MarkLabel(case0); + il.Emit(OpCodes.Ldstr, "Not Supported Length"); + il.Emit(OpCodes.Newobj, typeof(InvalidOperationException).GetConstructor(new[] { typeof(string) })); + il.Emit(OpCodes.Throw); + + il.MarkLabel(endLabel); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldind_I); + il.Emit(OpCodes.Ldloc_0); + il.Emit(OpCodes.Add); + il.Emit(OpCodes.Stind_I); + il.Emit(OpCodes.Ldarg_1); + il.Emit(OpCodes.Ldarg_1); + il.Emit(OpCodes.Ldind_I4); + il.Emit(OpCodes.Ldloc_0); + il.Emit(OpCodes.Sub); + il.Emit(OpCodes.Stind_I4); + il.Emit(OpCodes.Ldloc_1); + il.Emit(OpCodes.Ret); + + var genereatedType = helperType.CreateTypeInfo().AsType(); + dynamicGetKeyMethod = genereatedType.GetMethods().First(); + } + } + } + + return dynamicGetKeyMethod; + } + +#endif + +#endif + +#if NETSTANDARD + + public static unsafe ulong GetKey(ref byte* p, ref int rest) + { + int readSize; + ulong key; + + unchecked + { + if (rest >= 8) + { + key = *(ulong*)p; + readSize = 8; + } + else + { + switch (rest) + { + case 1: + { + key = *(byte*)p; + readSize = 1; + break; + } + case 2: + { + key = *(ushort*)p; + readSize = 2; + break; + } + case 3: + { + var a = *p; + var b = *(ushort*)(p + 1); + key = ((ulong)a | (ulong)b << 8); + readSize = 3; + break; + } + case 4: + { + key = *(uint*)p; + readSize = 4; + break; + } + case 5: + { + var a = *p; + var b = *(uint*)(p + 1); + key = ((ulong)a | (ulong)b << 8); + readSize = 5; + break; + } + case 6: + { + ulong a = *(ushort*)p; + ulong b = *(uint*)(p + 2); + key = (a | (b << 16)); + readSize = 6; + break; + } + case 7: + { + var a = *(byte*)p; + var b = *(ushort*)(p + 1); + var c = *(uint*)(p + 3); + key = ((ulong)a | (ulong)b << 8 | (ulong)c << 24); + readSize = 7; + break; + } + default: + throw new InvalidOperationException("Not Supported Length"); + } + } + + p += readSize; + rest -= readSize; + return key; + } + } + +#endif + + public static ulong GetKeySafe(byte[] bytes, ref int offset, ref int rest) + { + int readSize; + ulong key; + + if (BitConverter.IsLittleEndian) + { + unchecked + { + if (rest >= 8) + { + key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 16 | (ulong)bytes[offset + 3] << 24 + | (ulong)bytes[offset + 4] << 32 | (ulong)bytes[offset + 5] << 40 | (ulong)bytes[offset + 6] << 48 | (ulong)bytes[offset + 7] << 56; + readSize = 8; + } + else + { + switch (rest) + { + case 1: + { + key = bytes[offset]; + readSize = 1; + break; + } + case 2: + { + key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8; + readSize = 2; + break; + } + case 3: + { + key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 16; + readSize = 3; + break; + } + case 4: + { + key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 16 | (ulong)bytes[offset + 3] << 24; + readSize = 4; + break; + } + case 5: + { + key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 16 | (ulong)bytes[offset + 3] << 24 + | (ulong)bytes[offset + 4] << 32; + readSize = 5; + break; + } + case 6: + { + key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 16 | (ulong)bytes[offset + 3] << 24 + | (ulong)bytes[offset + 4] << 32 | (ulong)bytes[offset + 5] << 40; + readSize = 6; + break; + } + case 7: + { + key = (ulong)bytes[offset] << 0 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 16 | (ulong)bytes[offset + 3] << 24 + | (ulong)bytes[offset + 4] << 32 | (ulong)bytes[offset + 5] << 40 | (ulong)bytes[offset + 6] << 48; + readSize = 7; + break; + } + default: + throw new InvalidOperationException("Not Supported Length"); + } + } + + offset += readSize; + rest -= readSize; + return key; + } + } + else + { + unchecked + { + if (rest >= 8) + { + key = (ulong)bytes[offset] << 56 | (ulong)bytes[offset + 1] << 48 | (ulong)bytes[offset + 2] << 40 | (ulong)bytes[offset + 3] << 32 + | (ulong)bytes[offset + 4] << 24 | (ulong)bytes[offset + 5] << 16 | (ulong)bytes[offset + 6] << 8 | (ulong)bytes[offset + 7]; + readSize = 8; + } + else + { + switch (rest) + { + case 1: + { + key = bytes[offset]; + readSize = 1; + break; + } + case 2: + { + key = (ulong)bytes[offset] << 8 | (ulong)bytes[offset + 1] << 0; + readSize = 2; + break; + } + case 3: + { + key = (ulong)bytes[offset] << 16 | (ulong)bytes[offset + 1] << 8 | (ulong)bytes[offset + 2] << 0; + readSize = 3; + break; + } + case 4: + { + key = (ulong)bytes[offset] << 24 | (ulong)bytes[offset + 1] << 16 | (ulong)bytes[offset + 2] << 8 | (ulong)bytes[offset + 3] << 0; + readSize = 4; + break; + } + case 5: + { + key = (ulong)bytes[offset] << 32 | (ulong)bytes[offset + 1] << 24 | (ulong)bytes[offset + 2] << 16 | (ulong)bytes[offset + 3] << 8 + | (ulong)bytes[offset + 4] << 0; + readSize = 5; + break; + } + case 6: + { + key = (ulong)bytes[offset] << 40 | (ulong)bytes[offset + 1] << 32 | (ulong)bytes[offset + 2] << 24 | (ulong)bytes[offset + 3] << 16 + | (ulong)bytes[offset + 4] << 8 | (ulong)bytes[offset + 5] << 0; + readSize = 6; + break; + } + case 7: + { + key = (ulong)bytes[offset] << 48 | (ulong)bytes[offset + 1] << 40 | (ulong)bytes[offset + 2] << 32 | (ulong)bytes[offset + 3] << 24 + | (ulong)bytes[offset + 4] << 16 | (ulong)bytes[offset + 5] << 8 | (ulong)bytes[offset + 6] << 0; + readSize = 7; + break; + } + default: + throw new InvalidOperationException("Not Supported Length"); + } + } + + offset += readSize; + rest -= readSize; + return key; + } + } + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ByteArrayComparer.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ByteArrayComparer.cs index fcf9f89b2..14c7de855 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ByteArrayComparer.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ByteArrayComparer.cs @@ -1,139 +1,139 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace MessagePack.Internal -{ - public static class ByteArrayComparer - { -#if ENABLE_UNSAFE_MSGPACK - -#if NETSTANDARD - - static readonly bool Is32Bit = (IntPtr.Size == 4); - - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] - public static int GetHashCode(byte[] bytes, int offset, int count) - { - if (Is32Bit) - { - return unchecked((int)FarmHash.Hash32(bytes, offset, count)); - } - else - { - return unchecked((int)FarmHash.Hash64(bytes, offset, count)); - } - } - -#endif - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static unsafe bool Equals(byte[] xs, int xsOffset, int xsCount, byte[] ys) - { - return Equals(xs, xsOffset, xsCount, ys, 0, ys.Length); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static unsafe bool Equals(byte[] xs, int xsOffset, int xsCount, byte[] ys, int ysOffset, int ysCount) - { - if (xs == null || ys == null || xsCount != ysCount) - { - return false; - } - - fixed (byte* p1 = &xs[xsOffset]) - fixed (byte* p2 = &ys[ysOffset]) - { - switch (xsCount) - { - case 0: - return true; - case 1: - return *p1 == *p2; - case 2: - return *(short*)p1 == *(short*)p2; - case 3: - if (*(byte*)p1 != *(byte*)p2) return false; - return *(short*)(p1 + 1) == *(short*)(p2 + 1); - case 4: - return *(int*)p1 == *(int*)p2; - case 5: - if (*(byte*)p1 != *(byte*)p2) return false; - return *(int*)(p1 + 1) == *(int*)(p2 + 1); - case 6: - if (*(short*)p1 != *(short*)p2) return false; - return *(int*)(p1 + 2) == *(int*)(p2 + 2); - case 7: - if (*(byte*)p1 != *(byte*)p2) return false; - if (*(short*)(p1 + 1) != *(short*)(p2 + 1)) return false; - return *(int*)(p1 + 3) == *(int*)(p2 + 3); - default: - { - var x1 = p1; - var x2 = p2; - - byte* xEnd = p1 + xsCount - 8; - byte* yEnd = p2 + ysCount - 8; - - while (x1 < xEnd) - { - if (*(long*)x1 != *(long*)x2) - { - return false; - } - - x1 += 8; - x2 += 8; - } - - return *(long*)xEnd == *(long*)yEnd; - } - } - } - } - -#else -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static bool Equals(byte[] xs, int xsOffset, int xsCount, byte[] ys) - { - if (xs == null || ys == null || xsCount != ys.Length) - { - return false; - } - - for (int i = 0; i < ys.Length; i++) - { - if (xs[xsOffset++] != ys[i]) return false; - } - - return true; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static bool Equals(byte[] xs, int xsOffset, int xsCount, byte[] ys, int ysOffset, int ysCount) - { - if (xs == null || ys == null || xsCount != ysCount) - { - return false; - } - - for (int i = 0; i < xsCount; i++) - { - if (xs[xsOffset++] != ys[ysOffset++]) return false; - } - - return true; - } - -#endif - - } +using System; +using System.Collections.Generic; +using System.Text; + +namespace MessagePack.Internal +{ + public static class ByteArrayComparer + { +#if ENABLE_UNSAFE_MSGPACK + +#if NETSTANDARD + + static readonly bool Is32Bit = (IntPtr.Size == 4); + + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] + public static int GetHashCode(byte[] bytes, int offset, int count) + { + if (Is32Bit) + { + return unchecked((int)FarmHash.Hash32(bytes, offset, count)); + } + else + { + return unchecked((int)FarmHash.Hash64(bytes, offset, count)); + } + } + +#endif + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static unsafe bool Equals(byte[] xs, int xsOffset, int xsCount, byte[] ys) + { + return Equals(xs, xsOffset, xsCount, ys, 0, ys.Length); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static unsafe bool Equals(byte[] xs, int xsOffset, int xsCount, byte[] ys, int ysOffset, int ysCount) + { + if (xs == null || ys == null || xsCount != ysCount) + { + return false; + } + + fixed (byte* p1 = &xs[xsOffset]) + fixed (byte* p2 = &ys[ysOffset]) + { + switch (xsCount) + { + case 0: + return true; + case 1: + return *p1 == *p2; + case 2: + return *(short*)p1 == *(short*)p2; + case 3: + if (*(byte*)p1 != *(byte*)p2) return false; + return *(short*)(p1 + 1) == *(short*)(p2 + 1); + case 4: + return *(int*)p1 == *(int*)p2; + case 5: + if (*(byte*)p1 != *(byte*)p2) return false; + return *(int*)(p1 + 1) == *(int*)(p2 + 1); + case 6: + if (*(short*)p1 != *(short*)p2) return false; + return *(int*)(p1 + 2) == *(int*)(p2 + 2); + case 7: + if (*(byte*)p1 != *(byte*)p2) return false; + if (*(short*)(p1 + 1) != *(short*)(p2 + 1)) return false; + return *(int*)(p1 + 3) == *(int*)(p2 + 3); + default: + { + var x1 = p1; + var x2 = p2; + + byte* xEnd = p1 + xsCount - 8; + byte* yEnd = p2 + ysCount - 8; + + while (x1 < xEnd) + { + if (*(long*)x1 != *(long*)x2) + { + return false; + } + + x1 += 8; + x2 += 8; + } + + return *(long*)xEnd == *(long*)yEnd; + } + } + } + } + +#else +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static bool Equals(byte[] xs, int xsOffset, int xsCount, byte[] ys) + { + if (xs == null || ys == null || xsCount != ys.Length) + { + return false; + } + + for (int i = 0; i < ys.Length; i++) + { + if (xs[xsOffset++] != ys[i]) return false; + } + + return true; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static bool Equals(byte[] xs, int xsOffset, int xsCount, byte[] ys, int ysOffset, int ysCount) + { + if (xs == null || ys == null || xsCount != ysCount) + { + return false; + } + + for (int i = 0; i < xsCount; i++) + { + if (xs[xsOffset++] != ys[ysOffset++]) return false; + } + + return true; + } + +#endif + + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ByteArrayStringHashTable.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ByteArrayStringHashTable.cs index 1373b4184..4a22aae96 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ByteArrayStringHashTable.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ByteArrayStringHashTable.cs @@ -1,209 +1,209 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; - -namespace MessagePack.Internal -{ - // like ArraySegment hashtable. - // Add is safe for construction phase only and requires capacity(does not do rehash) - // and specialized for internal use(nongenerics, TValue is int) - - // internal, but code generator requires this class - public class ByteArrayStringHashTable : IEnumerable> - { - readonly Entry[][] buckets; // immutable array(faster than linkedlist) - readonly ulong indexFor; - - public ByteArrayStringHashTable(int capacity) - : this(capacity, 0.42f) // default: 0.75f -> 0.42f - { - } - - public ByteArrayStringHashTable(int capacity, float loadFactor) - { - var tableSize = CalculateCapacity(capacity, loadFactor); - this.buckets = new Entry[tableSize][]; - this.indexFor = (ulong)buckets.Length - 1; - } - - public void Add(string key, int value) - { - if (!TryAddInternal(Encoding.UTF8.GetBytes(key), value)) - { - throw new ArgumentException("Key was already exists. Key:" + key); - } - } - - public void Add(byte[] key, int value) - { - if (!TryAddInternal(key, value)) - { - throw new ArgumentException("Key was already exists. Key:" + key); - } - } - - bool TryAddInternal(byte[] key, int value) - { - var h = ByteArrayGetHashCode(key, 0, key.Length); - var entry = new Entry { Key = key, Value = value }; - - var array = buckets[h & (indexFor)]; - if (array == null) - { - buckets[h & (indexFor)] = new[] { entry }; - } - else - { - // check duplicate - for (int i = 0; i < array.Length; i++) - { - var e = array[i].Key; - if (ByteArrayComparer.Equals(key, 0, key.Length, e)) - { - return false; - } - } - - var newArray = new Entry[array.Length + 1]; - Array.Copy(array, newArray, array.Length); - array = newArray; - array[array.Length - 1] = entry; - buckets[h & (indexFor)] = array; - } - - return true; - } - - public bool TryGetValue(ArraySegment key, out int value) - { - var table = buckets; - var hash = ByteArrayGetHashCode(key.Array, key.Offset, key.Count); - var entry = table[hash & indexFor]; - - if (entry == null) goto NOT_FOUND; - - { -#if NETSTANDARD - ref var v = ref entry[0]; -#else - var v = entry[0]; -#endif - if (ByteArrayComparer.Equals(key.Array, key.Offset, key.Count, v.Key)) - { - value = v.Value; - return true; - } - } - - for (int i = 1; i < entry.Length; i++) - { -#if NETSTANDARD - ref var v = ref entry[i]; -#else - var v = entry[i]; -#endif - if (ByteArrayComparer.Equals(key.Array, key.Offset, key.Count, v.Key)) - { - value = v.Value; - return true; - } - } - - NOT_FOUND: - value = default(int); - return false; - } - -#if NETSTANDARD - static readonly bool Is32Bit = (IntPtr.Size == 4); -#endif - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - static ulong ByteArrayGetHashCode(byte[] x, int offset, int count) - { -#if NETSTANDARD - // FarmHash https://github.com/google/farmhash - if (x == null) return 0; - - if (Is32Bit) - { - return (ulong)FarmHash.Hash32(x, offset, count); - } - else - { - return FarmHash.Hash64(x, offset, count); - } - -#else - - // FNV1-1a 32bit https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function - uint hash = 0; - if (x != null) - { - var max = offset + count; - - hash = 2166136261; - for (int i = offset; i < max; i++) - { - hash = unchecked((x[i] ^ hash) * 16777619); - } - } - - return (ulong)hash; - -#endif - } - - static int CalculateCapacity(int collectionSize, float loadFactor) - { - var initialCapacity = (int)(((float)collectionSize) / loadFactor); - var capacity = 1; - while (capacity < initialCapacity) - { - capacity <<= 1; - } - - if (capacity < 8) - { - return 8; - } - - return capacity; - } - - // only for Debug use - public IEnumerator> GetEnumerator() - { - var b = this.buckets; - - foreach (var item in b) - { - if (item == null) continue; - foreach (var item2 in item) - { - yield return new KeyValuePair(Encoding.UTF8.GetString(item2.Key), item2.Value); - } - } - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - struct Entry - { - public byte[] Key; - public int Value; - - // for debugging - public override string ToString() - { - return "(" + Encoding.UTF8.GetString(Key) + ", " + Value + ")"; - } - } - } -} +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +namespace MessagePack.Internal +{ + // like ArraySegment hashtable. + // Add is safe for construction phase only and requires capacity(does not do rehash) + // and specialized for internal use(nongenerics, TValue is int) + + // internal, but code generator requires this class + public class ByteArrayStringHashTable : IEnumerable> + { + readonly Entry[][] buckets; // immutable array(faster than linkedlist) + readonly ulong indexFor; + + public ByteArrayStringHashTable(int capacity) + : this(capacity, 0.42f) // default: 0.75f -> 0.42f + { + } + + public ByteArrayStringHashTable(int capacity, float loadFactor) + { + var tableSize = CalculateCapacity(capacity, loadFactor); + this.buckets = new Entry[tableSize][]; + this.indexFor = (ulong)buckets.Length - 1; + } + + public void Add(string key, int value) + { + if (!TryAddInternal(Encoding.UTF8.GetBytes(key), value)) + { + throw new ArgumentException("Key was already exists. Key:" + key); + } + } + + public void Add(byte[] key, int value) + { + if (!TryAddInternal(key, value)) + { + throw new ArgumentException("Key was already exists. Key:" + key); + } + } + + bool TryAddInternal(byte[] key, int value) + { + var h = ByteArrayGetHashCode(key, 0, key.Length); + var entry = new Entry { Key = key, Value = value }; + + var array = buckets[h & (indexFor)]; + if (array == null) + { + buckets[h & (indexFor)] = new[] { entry }; + } + else + { + // check duplicate + for (int i = 0; i < array.Length; i++) + { + var e = array[i].Key; + if (ByteArrayComparer.Equals(key, 0, key.Length, e)) + { + return false; + } + } + + var newArray = new Entry[array.Length + 1]; + Array.Copy(array, newArray, array.Length); + array = newArray; + array[array.Length - 1] = entry; + buckets[h & (indexFor)] = array; + } + + return true; + } + + public bool TryGetValue(ArraySegment key, out int value) + { + var table = buckets; + var hash = ByteArrayGetHashCode(key.Array, key.Offset, key.Count); + var entry = table[hash & indexFor]; + + if (entry == null) goto NOT_FOUND; + + { +#if NETSTANDARD + ref var v = ref entry[0]; +#else + var v = entry[0]; +#endif + if (ByteArrayComparer.Equals(key.Array, key.Offset, key.Count, v.Key)) + { + value = v.Value; + return true; + } + } + + for (int i = 1; i < entry.Length; i++) + { +#if NETSTANDARD + ref var v = ref entry[i]; +#else + var v = entry[i]; +#endif + if (ByteArrayComparer.Equals(key.Array, key.Offset, key.Count, v.Key)) + { + value = v.Value; + return true; + } + } + + NOT_FOUND: + value = default(int); + return false; + } + +#if NETSTANDARD + static readonly bool Is32Bit = (IntPtr.Size == 4); +#endif + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + static ulong ByteArrayGetHashCode(byte[] x, int offset, int count) + { +#if NETSTANDARD + // FarmHash https://github.com/google/farmhash + if (x == null) return 0; + + if (Is32Bit) + { + return (ulong)FarmHash.Hash32(x, offset, count); + } + else + { + return FarmHash.Hash64(x, offset, count); + } + +#else + + // FNV1-1a 32bit https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function + uint hash = 0; + if (x != null) + { + var max = offset + count; + + hash = 2166136261; + for (int i = offset; i < max; i++) + { + hash = unchecked((x[i] ^ hash) * 16777619); + } + } + + return (ulong)hash; + +#endif + } + + static int CalculateCapacity(int collectionSize, float loadFactor) + { + var initialCapacity = (int)(((float)collectionSize) / loadFactor); + var capacity = 1; + while (capacity < initialCapacity) + { + capacity <<= 1; + } + + if (capacity < 8) + { + return 8; + } + + return capacity; + } + + // only for Debug use + public IEnumerator> GetEnumerator() + { + var b = this.buckets; + + foreach (var item in b) + { + if (item == null) continue; + foreach (var item2 in item) + { + yield return new KeyValuePair(Encoding.UTF8.GetString(item2.Key), item2.Value); + } + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + struct Entry + { + public byte[] Key; + public int Value; + + // for debugging + public override string ToString() + { + return "(" + Encoding.UTF8.GetString(Key) + ", " + Value + ")"; + } + } + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/DynamicAssembly.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/DynamicAssembly.cs index e7fd22856..7f3e5dd1a 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/DynamicAssembly.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/DynamicAssembly.cs @@ -1,79 +1,79 @@ -#if !UNITY_WSA -#if !NET_STANDARD_2_0 - -using System; -using System.Reflection; -using System.Reflection.Emit; - -namespace MessagePack.Internal -{ - internal class DynamicAssembly - { -#if NET_35 - readonly string moduleName; -#endif - readonly AssemblyBuilder assemblyBuilder; - readonly ModuleBuilder moduleBuilder; - - // don't expose ModuleBuilder - // public ModuleBuilder ModuleBuilder { get { return moduleBuilder; } } - - readonly object gate = new object(); - - public DynamicAssembly(string moduleName) - { -#if NET_35 - this.moduleName = moduleName; - this.assemblyBuilder = System.AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName(moduleName), AssemblyBuilderAccess.RunAndSave); - this.moduleBuilder = assemblyBuilder.DefineDynamicModule(moduleName, moduleName + ".dll"); -#else -#if NETSTANDARD - this.assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName(moduleName), AssemblyBuilderAccess.Run); -#else - this.assemblyBuilder = System.AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName(moduleName), AssemblyBuilderAccess.Run); -#endif - - this.moduleBuilder = assemblyBuilder.DefineDynamicModule(moduleName); -#endif - } - - // requires lock on mono environment. see: https://github.com/neuecc/MessagePack-CSharp/issues/161 - - public TypeBuilder DefineType(string name, TypeAttributes attr) - { - lock (gate) - { - return moduleBuilder.DefineType(name, attr); - } - } - - public TypeBuilder DefineType(string name, TypeAttributes attr, Type parent) - { - lock (gate) - { - return moduleBuilder.DefineType(name, attr, parent); - } - } - - public TypeBuilder DefineType(string name, TypeAttributes attr, Type parent, Type[] interfaces) - { - lock (gate) - { - return moduleBuilder.DefineType(name, attr, parent, interfaces); - } - } - -#if NET_35 - - public AssemblyBuilder Save() - { - assemblyBuilder.Save(moduleName + ".dll"); - return assemblyBuilder; - } - -#endif - } -} - -#endif +#if !UNITY_WSA +#if !NET_STANDARD_2_0 + +using System; +using System.Reflection; +using System.Reflection.Emit; + +namespace MessagePack.Internal +{ + internal class DynamicAssembly + { +#if NET_35 + readonly string moduleName; +#endif + readonly AssemblyBuilder assemblyBuilder; + readonly ModuleBuilder moduleBuilder; + + // don't expose ModuleBuilder + // public ModuleBuilder ModuleBuilder { get { return moduleBuilder; } } + + readonly object gate = new object(); + + public DynamicAssembly(string moduleName) + { +#if NET_35 + this.moduleName = moduleName; + this.assemblyBuilder = System.AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName(moduleName), AssemblyBuilderAccess.RunAndSave); + this.moduleBuilder = assemblyBuilder.DefineDynamicModule(moduleName, moduleName + ".dll"); +#else +#if NETSTANDARD + this.assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName(moduleName), AssemblyBuilderAccess.Run); +#else + this.assemblyBuilder = System.AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName(moduleName), AssemblyBuilderAccess.Run); +#endif + + this.moduleBuilder = assemblyBuilder.DefineDynamicModule(moduleName); +#endif + } + + // requires lock on mono environment. see: https://github.com/neuecc/MessagePack-CSharp/issues/161 + + public TypeBuilder DefineType(string name, TypeAttributes attr) + { + lock (gate) + { + return moduleBuilder.DefineType(name, attr); + } + } + + public TypeBuilder DefineType(string name, TypeAttributes attr, Type parent) + { + lock (gate) + { + return moduleBuilder.DefineType(name, attr, parent); + } + } + + public TypeBuilder DefineType(string name, TypeAttributes attr, Type parent, Type[] interfaces) + { + lock (gate) + { + return moduleBuilder.DefineType(name, attr, parent, interfaces); + } + } + +#if NET_35 + + public AssemblyBuilder Save() + { + assemblyBuilder.Save(moduleName + ".dll"); + return assemblyBuilder; + } + +#endif + } +} + +#endif #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ExpressionUtility.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ExpressionUtility.cs index 340812030..9aa9fd484 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ExpressionUtility.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ExpressionUtility.cs @@ -1,88 +1,88 @@ -using System; -using System.Linq.Expressions; -using System.Reflection; - -namespace MessagePack.Internal -{ - public static class ExpressionUtility - { - // Method - - static MethodInfo GetMethodInfoCore(LambdaExpression expression) - { - if (expression == null) - { - throw new ArgumentNullException("expression"); - } - - return (expression.Body as MethodCallExpression).Method; - } - - /// - /// Get MethodInfo from Expression for Static(with result) method. - /// - public static MethodInfo GetMethodInfo(Expression> expression) - { - return GetMethodInfoCore(expression); - } - - /// - /// Get MethodInfo from Expression for Static(void) method. - /// - public static MethodInfo GetMethodInfo(Expression expression) - { - return GetMethodInfoCore(expression); - } - - /// - /// Get MethodInfo from Expression for Instance(with result) method. - /// - public static MethodInfo GetMethodInfo(Expression> expression) - { - return GetMethodInfoCore(expression); - } - - /// - /// Get MethodInfo from Expression for Instance(void) method. - /// - public static MethodInfo GetMethodInfo(Expression> expression) - { - return GetMethodInfoCore(expression); - } - - // WithArgument(for ref, out) helper - - /// - /// Get MethodInfo from Expression for Instance(with result) method. - /// - public static MethodInfo GetMethodInfo(Expression> expression) - { - return GetMethodInfoCore(expression); - } - - // Property - - static MemberInfo GetMemberInfoCore(Expression source) - { - if (source == null) - { - throw new ArgumentNullException("source"); - } - - var memberExpression = source.Body as MemberExpression; - return memberExpression.Member; - } - - public static PropertyInfo GetPropertyInfo(Expression> expression) - { - return GetMemberInfoCore(expression) as PropertyInfo; - } - - // Field - - public static FieldInfo GetFieldInfo(Expression> expression) - { - return GetMemberInfoCore(expression) as FieldInfo; - } - } -} +using System; +using System.Linq.Expressions; +using System.Reflection; + +namespace MessagePack.Internal +{ + public static class ExpressionUtility + { + // Method + + static MethodInfo GetMethodInfoCore(LambdaExpression expression) + { + if (expression == null) + { + throw new ArgumentNullException("expression"); + } + + return (expression.Body as MethodCallExpression).Method; + } + + /// + /// Get MethodInfo from Expression for Static(with result) method. + /// + public static MethodInfo GetMethodInfo(Expression> expression) + { + return GetMethodInfoCore(expression); + } + + /// + /// Get MethodInfo from Expression for Static(void) method. + /// + public static MethodInfo GetMethodInfo(Expression expression) + { + return GetMethodInfoCore(expression); + } + + /// + /// Get MethodInfo from Expression for Instance(with result) method. + /// + public static MethodInfo GetMethodInfo(Expression> expression) + { + return GetMethodInfoCore(expression); + } + + /// + /// Get MethodInfo from Expression for Instance(void) method. + /// + public static MethodInfo GetMethodInfo(Expression> expression) + { + return GetMethodInfoCore(expression); + } + + // WithArgument(for ref, out) helper + + /// + /// Get MethodInfo from Expression for Instance(with result) method. + /// + public static MethodInfo GetMethodInfo(Expression> expression) + { + return GetMethodInfoCore(expression); + } + + // Property + + static MemberInfo GetMemberInfoCore(Expression source) + { + if (source == null) + { + throw new ArgumentNullException("source"); + } + + var memberExpression = source.Body as MemberExpression; + return memberExpression.Member; + } + + public static PropertyInfo GetPropertyInfo(Expression> expression) + { + return GetMemberInfoCore(expression) as PropertyInfo; + } + + // Field + + public static FieldInfo GetFieldInfo(Expression> expression) + { + return GetMemberInfoCore(expression) as FieldInfo; + } + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/FarmHash.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/FarmHash.cs index ca7e7b241..636ef4edc 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/FarmHash.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/FarmHash.cs @@ -1,604 +1,604 @@ -#if NETSTANDARD - -using System.Runtime.CompilerServices; - -namespace MessagePack.Internal -{ - public static class FarmHash - { - // entry point of 32bit - - #region Hash32 - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe uint Hash32(byte[] bytes, int offset, int count) - { - if (count <= 4) - { - return Hash32Len0to4(bytes, offset, (uint)count); - } - - fixed (byte* p = &bytes[offset]) - { - return Hash32(p, (uint)count); - } - } - - // port of farmhash.cc, 32bit only - - // Magic numbers for 32-bit hashing. Copied from Murmur3. - const uint c1 = 0xcc9e2d51; - const uint c2 = 0x1b873593; - - static unsafe uint Fetch32(byte* p) - { - return *(uint*)p; - } - - static uint Rotate32(uint val, int shift) - { - return shift == 0 ? val : ((val >> shift) | (val << (32 - shift))); - } - - // A 32-bit to 32-bit integer hash copied from Murmur3. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static uint fmix(uint h) - { - unchecked - { - h ^= h >> 16; - h *= 0x85ebca6b; - h ^= h >> 13; - h *= 0xc2b2ae35; - h ^= h >> 16; - return h; - } - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static uint Mur(uint a, uint h) - { - unchecked - { - // Helper from Murmur3 for combining two 32-bit values. - a *= c1; - a = Rotate32(a, 17); - a *= c2; - h ^= a; - h = Rotate32(h, 19); - return h * 5 + 0xe6546b64; - } - } - - // 0-4 - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe uint Hash32Len0to4(byte[] s, int offset, uint len) - { - unchecked - { - uint b = 0; - uint c = 9; - var max = offset + len; - for (int i = offset; i < max; i++) - { - b = b * c1 + s[i]; - c ^= b; - } - return fmix(Mur(b, Mur(len, c))); - } - } - - // 5-12 - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe uint Hash32Len5to12(byte* s, uint len) - { - unchecked - { - uint a = len, b = len * 5, c = 9, d = b; - a += Fetch32(s); - b += Fetch32(s + len - 4); - c += Fetch32(s + ((len >> 1) & 4)); - return fmix(Mur(c, Mur(b, Mur(a, d)))); - } - } - - // 13-24 - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe uint Hash32Len13to24(byte* s, uint len) - { - unchecked - { - uint a = Fetch32(s - 4 + (len >> 1)); - uint b = Fetch32(s + 4); - uint c = Fetch32(s + len - 8); - uint d = Fetch32(s + (len >> 1)); - uint e = Fetch32(s); - uint f = Fetch32(s + len - 4); - uint h = d * c1 + len; - a = Rotate32(a, 12) + f; - h = Mur(c, h) + a; - a = Rotate32(a, 3) + c; - h = Mur(e, h) + a; - a = Rotate32(a + f, 12) + d; - h = Mur(b, h) + a; - return fmix(h); - } - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe uint Hash32(byte* s, uint len) - { - if (len <= 24) - { - return len <= 12 ? Hash32Len5to12(s, len) : Hash32Len13to24(s, len); - } - - unchecked - { - // len > 24 - uint h = len, g = c1 * len, f = g; - uint a0 = Rotate32(Fetch32(s + len - 4) * c1, 17) * c2; - uint a1 = Rotate32(Fetch32(s + len - 8) * c1, 17) * c2; - uint a2 = Rotate32(Fetch32(s + len - 16) * c1, 17) * c2; - uint a3 = Rotate32(Fetch32(s + len - 12) * c1, 17) * c2; - uint a4 = Rotate32(Fetch32(s + len - 20) * c1, 17) * c2; - h ^= a0; - h = Rotate32(h, 19); - h = h * 5 + 0xe6546b64; - h ^= a2; - h = Rotate32(h, 19); - h = h * 5 + 0xe6546b64; - g ^= a1; - g = Rotate32(g, 19); - g = g * 5 + 0xe6546b64; - g ^= a3; - g = Rotate32(g, 19); - g = g * 5 + 0xe6546b64; - f += a4; - f = Rotate32(f, 19) + 113; - uint iters = (len - 1) / 20; - do - { - uint a = Fetch32(s); - uint b = Fetch32(s + 4); - uint c = Fetch32(s + 8); - uint d = Fetch32(s + 12); - uint e = Fetch32(s + 16); - h += a; - g += b; - f += c; - h = Mur(d, h) + e; - g = Mur(c, g) + a; - f = Mur(b + e * c1, f) + d; - f += g; - g += f; - s += 20; - } while (--iters != 0); - g = Rotate32(g, 11) * c1; - g = Rotate32(g, 17) * c1; - f = Rotate32(f, 11) * c1; - f = Rotate32(f, 17) * c1; - h = Rotate32(h + g, 19); - h = h * 5 + 0xe6546b64; - h = Rotate32(h, 17) * c1; - h = Rotate32(h + f, 19); - h = h * 5 + 0xe6546b64; - h = Rotate32(h, 17) * c1; - return h; - } - } - - #endregion - - #region hash64 - - // entry point - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe ulong Hash64(byte[] bytes, int offset, int count) - { - fixed (byte* p = &bytes[offset]) - { - return Hash64(p, (uint)count); - } - } - - // port from farmhash.cc - - struct pair - { - public ulong first; - public ulong second; - - public pair(ulong first, ulong second) - { - this.first = first; - this.second = second; - } - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static pair make_pair(ulong first, ulong second) - { - return new pair(first, second); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static void swap(ref ulong x, ref ulong z) - { - var temp = z; - z = x; - x = temp; - } - - // Some primes between 2^63 and 2^64 for various uses. - const ulong k0 = 0xc3a5c85c97cb3127UL; - const ulong k1 = 0xb492b66fbe98f273UL; - const ulong k2 = 0x9ae16a3b2f90404fUL; - - static unsafe ulong Fetch64(byte* p) - { - return *(ulong*)p; - } - - static ulong Rotate64(ulong val, int shift) - { - return shift == 0 ? val : (val >> shift) | (val << (64 - shift)); - } - - // farmhashna.cc - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static ulong ShiftMix(ulong val) - { - return val ^ (val >> 47); - } - - // farmhashna.cc - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static ulong HashLen16(ulong u, ulong v, ulong mul) - { - unchecked - { - // Murmur-inspired hashing. - ulong a = (u ^ v) * mul; - a ^= a >> 47; - ulong b = (v ^ a) * mul; - b ^= b >> 47; - b *= mul; - return b; - } - } - - // farmhashxo.cc - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe ulong Hash64(byte* s, uint len) - { - if (len <= 16) - { - // farmhashna:: - return HashLen0to16(s, len); - } - - if (len <= 32) - { - // farmhashna:: - return HashLen17to32(s, len); - } - - if (len <= 64) - { - return HashLen33to64(s, len); - } - - if (len <= 96) - { - return HashLen65to96(s, len); - } - - if (len <= 256) - { - // farmhashna:: - return Hash64NA(s, len); - } - - // farmhashuo:: - return Hash64UO(s, len); - } - - // 0-16 farmhashna.cc - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe ulong HashLen0to16(byte* s, uint len) - { - unchecked - { - if (len >= 8) - { - ulong mul = k2 + len * 2; - ulong a = Fetch64(s) + k2; - ulong b = Fetch64(s + len - 8); - ulong c = Rotate64(b, 37) * mul + a; - ulong d = (Rotate64(a, 25) + b) * mul; - return HashLen16(c, d, mul); - } - if (len >= 4) - { - ulong mul = k2 + len * 2; - ulong a = Fetch32(s); - return HashLen16(len + (a << 3), Fetch32(s + len - 4), mul); - } - if (len > 0) - { - ushort a = s[0]; - ushort b = s[len >> 1]; - ushort c = s[len - 1]; - uint y = a + ((uint)b << 8); - uint z = len + ((uint)c << 2); - return ShiftMix(y * k2 ^ z * k0) * k2; - } - return k2; - } - } - - // 17-32 farmhashna.cc - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe ulong HashLen17to32(byte* s, uint len) - { - unchecked - { - ulong mul = k2 + len * 2; - ulong a = Fetch64(s) * k1; - ulong b = Fetch64(s + 8); - ulong c = Fetch64(s + len - 8) * mul; - ulong d = Fetch64(s + len - 16) * k2; - return HashLen16(Rotate64(a + b, 43) + Rotate64(c, 30) + d, - a + Rotate64(b + k2, 18) + c, mul); - } - } - - // farmhashxo.cc - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe ulong H32(byte* s, uint len, ulong mul, ulong seed0 = 0, ulong seed1 = 0) - { - unchecked - { - ulong a = Fetch64(s) * k1; - ulong b = Fetch64(s + 8); - ulong c = Fetch64(s + len - 8) * mul; - ulong d = Fetch64(s + len - 16) * k2; - ulong u = Rotate64(a + b, 43) + Rotate64(c, 30) + d + seed0; - ulong v = a + Rotate64(b + k2, 18) + c + seed1; - a = ShiftMix((u ^ v) * mul); - b = ShiftMix((v ^ a) * mul); - return b; - } - } - - // 33-64 farmhashxo.cc - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe ulong HashLen33to64(byte* s, uint len) - { - const ulong mul0 = k2 - 30; - - unchecked - { - ulong mul1 = k2 - 30 + 2 * len; - ulong h0 = H32(s, 32, mul0); - ulong h1 = H32(s + len - 32, 32, mul1); - return (h1 * mul1 + h0) * mul1; - } - } - - // 65-96 farmhashxo.cc - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe ulong HashLen65to96(byte* s, uint len) - { - const ulong mul0 = k2 - 114; - - unchecked - { - ulong mul1 = k2 - 114 + 2 * len; - ulong h0 = H32(s, 32, mul0); - ulong h1 = H32(s + 32, 32, mul1); - ulong h2 = H32(s + len - 32, 32, mul1, h0, h1); - return (h2 * 9 + (h0 >> 17) + (h1 >> 21)) * mul1; - } - } - - // farmhashna.cc - // Return a 16-byte hash for 48 bytes. Quick and dirty. - // Callers do best to use "random-looking" values for a and b. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe pair WeakHashLen32WithSeeds(ulong w, ulong x, ulong y, ulong z, ulong a, ulong b) - { - unchecked - { - a += w; - b = Rotate64(b + a + z, 21); - ulong c = a; - a += x; - a += y; - b += Rotate64(a, 44); - return make_pair(a + z, b + c); - } - } - - // farmhashna.cc - // Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe pair WeakHashLen32WithSeeds(byte* s, ulong a, ulong b) - { - return WeakHashLen32WithSeeds(Fetch64(s), - Fetch64(s + 8), - Fetch64(s + 16), - Fetch64(s + 24), - a, - b); - } - - // na(97-256) farmhashna.cc - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe ulong Hash64NA(byte* s, uint len) - { - const ulong seed = 81; - - unchecked - { - // For strings over 64 bytes we loop. Internal state consists of - // 56 bytes: v, w, x, y, and z. - ulong x = seed; - ulong y = seed * k1 + 113; - ulong z = ShiftMix(y * k2 + 113) * k2; - var v = make_pair(0, 0); - var w = make_pair(0, 0); - x = x * k2 + Fetch64(s); - - // Set end so that after the loop we have 1 to 64 bytes left to process. - byte* end = s + ((len - 1) / 64) * 64; - byte* last64 = end + ((len - 1) & 63) - 63; - - do - { - x = Rotate64(x + y + v.first + Fetch64(s + 8), 37) * k1; - y = Rotate64(y + v.second + Fetch64(s + 48), 42) * k1; - x ^= w.second; - y += v.first + Fetch64(s + 40); - z = Rotate64(z + w.first, 33) * k1; - v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); - w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16)); - swap(ref z, ref x); - s += 64; - } while (s != end); - ulong mul = k1 + ((z & 0xff) << 1); - // Make s point to the last 64 bytes of input. - s = last64; - w.first += ((len - 1) & 63); - v.first += w.first; - w.first += v.first; - x = Rotate64(x + y + v.first + Fetch64(s + 8), 37) * mul; - y = Rotate64(y + v.second + Fetch64(s + 48), 42) * mul; - x ^= w.second * 9; - y += v.first * 9 + Fetch64(s + 40); - z = Rotate64(z + w.first, 33) * mul; - v = WeakHashLen32WithSeeds(s, v.second * mul, x + w.first); - w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16)); - swap(ref z, ref x); - return HashLen16(HashLen16(v.first, w.first, mul) + ShiftMix(y) * k0 + z, - HashLen16(v.second, w.second, mul) + x, - mul); - } - } - - // farmhashuo.cc - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static ulong H(ulong x, ulong y, ulong mul, int r) - { - unchecked - { - ulong a = (x ^ y) * mul; - a ^= (a >> 47); - ulong b = (y ^ a) * mul; - return Rotate64(b, r) * mul; - } - } - - // uo(257-) farmhashuo.cc, Hash64WithSeeds - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static unsafe ulong Hash64UO(byte* s, uint len) - { - const ulong seed0 = 81; - const ulong seed1 = 0; - - unchecked - { - // For strings over 64 bytes we loop. Internal state consists of - // 64 bytes: u, v, w, x, y, and z. - ulong x = seed0; - ulong y = seed1 * k2 + 113; - ulong z = ShiftMix(y * k2) * k2; - var v = make_pair(seed0, seed1); - var w = make_pair(0, 0); - ulong u = x - z; - x *= k2; - ulong mul = k2 + (u & 0x82); - - // Set end so that after the loop we have 1 to 64 bytes left to process. - byte* end = s + ((len - 1) / 64) * 64; - byte* last64 = end + ((len - 1) & 63) - 63; - - do - { - ulong a0 = Fetch64(s); - ulong a1 = Fetch64(s + 8); - ulong a2 = Fetch64(s + 16); - ulong a3 = Fetch64(s + 24); - ulong a4 = Fetch64(s + 32); - ulong a5 = Fetch64(s + 40); - ulong a6 = Fetch64(s + 48); - ulong a7 = Fetch64(s + 56); - x += a0 + a1; - y += a2; - z += a3; - v.first += a4; - v.second += a5 + a1; - w.first += a6; - w.second += a7; - - x = Rotate64(x, 26); - x *= 9; - y = Rotate64(y, 29); - z *= mul; - v.first = Rotate64(v.first, 33); - v.second = Rotate64(v.second, 30); - w.first ^= x; - w.first *= 9; - z = Rotate64(z, 32); - z += w.second; - w.second += z; - z *= 9; - swap(ref u, ref y); - - z += a0 + a6; - v.first += a2; - v.second += a3; - w.first += a4; - w.second += a5 + a6; - x += a1; - y += a7; - - y += v.first; - v.first += x - y; - v.second += w.first; - w.first += v.second; - w.second += x - y; - x += w.second; - w.second = Rotate64(w.second, 34); - swap(ref u, ref z); - s += 64; - } while (s != end); - // Make s point to the last 64 bytes of input. - s = last64; - u *= 9; - v.second = Rotate64(v.second, 28); - v.first = Rotate64(v.first, 20); - w.first += ((len - 1) & 63); - u += y; - y += u; - x = Rotate64(y - x + v.first + Fetch64(s + 8), 37) * mul; - y = Rotate64(y ^ v.second ^ Fetch64(s + 48), 42) * mul; - x ^= w.second * 9; - y += v.first + Fetch64(s + 40); - z = Rotate64(z + w.first, 33) * mul; - v = WeakHashLen32WithSeeds(s, v.second * mul, x + w.first); - w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16)); - return H(HashLen16(v.first + x, w.first ^ y, mul) + z - u, - H(v.second + y, w.second + z, k2, 30) ^ x, - k2, - 31); - } - } - - #endregion - } -} - +#if NETSTANDARD + +using System.Runtime.CompilerServices; + +namespace MessagePack.Internal +{ + public static class FarmHash + { + // entry point of 32bit + + #region Hash32 + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe uint Hash32(byte[] bytes, int offset, int count) + { + if (count <= 4) + { + return Hash32Len0to4(bytes, offset, (uint)count); + } + + fixed (byte* p = &bytes[offset]) + { + return Hash32(p, (uint)count); + } + } + + // port of farmhash.cc, 32bit only + + // Magic numbers for 32-bit hashing. Copied from Murmur3. + const uint c1 = 0xcc9e2d51; + const uint c2 = 0x1b873593; + + static unsafe uint Fetch32(byte* p) + { + return *(uint*)p; + } + + static uint Rotate32(uint val, int shift) + { + return shift == 0 ? val : ((val >> shift) | (val << (32 - shift))); + } + + // A 32-bit to 32-bit integer hash copied from Murmur3. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static uint fmix(uint h) + { + unchecked + { + h ^= h >> 16; + h *= 0x85ebca6b; + h ^= h >> 13; + h *= 0xc2b2ae35; + h ^= h >> 16; + return h; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static uint Mur(uint a, uint h) + { + unchecked + { + // Helper from Murmur3 for combining two 32-bit values. + a *= c1; + a = Rotate32(a, 17); + a *= c2; + h ^= a; + h = Rotate32(h, 19); + return h * 5 + 0xe6546b64; + } + } + + // 0-4 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe uint Hash32Len0to4(byte[] s, int offset, uint len) + { + unchecked + { + uint b = 0; + uint c = 9; + var max = offset + len; + for (int i = offset; i < max; i++) + { + b = b * c1 + s[i]; + c ^= b; + } + return fmix(Mur(b, Mur(len, c))); + } + } + + // 5-12 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe uint Hash32Len5to12(byte* s, uint len) + { + unchecked + { + uint a = len, b = len * 5, c = 9, d = b; + a += Fetch32(s); + b += Fetch32(s + len - 4); + c += Fetch32(s + ((len >> 1) & 4)); + return fmix(Mur(c, Mur(b, Mur(a, d)))); + } + } + + // 13-24 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe uint Hash32Len13to24(byte* s, uint len) + { + unchecked + { + uint a = Fetch32(s - 4 + (len >> 1)); + uint b = Fetch32(s + 4); + uint c = Fetch32(s + len - 8); + uint d = Fetch32(s + (len >> 1)); + uint e = Fetch32(s); + uint f = Fetch32(s + len - 4); + uint h = d * c1 + len; + a = Rotate32(a, 12) + f; + h = Mur(c, h) + a; + a = Rotate32(a, 3) + c; + h = Mur(e, h) + a; + a = Rotate32(a + f, 12) + d; + h = Mur(b, h) + a; + return fmix(h); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe uint Hash32(byte* s, uint len) + { + if (len <= 24) + { + return len <= 12 ? Hash32Len5to12(s, len) : Hash32Len13to24(s, len); + } + + unchecked + { + // len > 24 + uint h = len, g = c1 * len, f = g; + uint a0 = Rotate32(Fetch32(s + len - 4) * c1, 17) * c2; + uint a1 = Rotate32(Fetch32(s + len - 8) * c1, 17) * c2; + uint a2 = Rotate32(Fetch32(s + len - 16) * c1, 17) * c2; + uint a3 = Rotate32(Fetch32(s + len - 12) * c1, 17) * c2; + uint a4 = Rotate32(Fetch32(s + len - 20) * c1, 17) * c2; + h ^= a0; + h = Rotate32(h, 19); + h = h * 5 + 0xe6546b64; + h ^= a2; + h = Rotate32(h, 19); + h = h * 5 + 0xe6546b64; + g ^= a1; + g = Rotate32(g, 19); + g = g * 5 + 0xe6546b64; + g ^= a3; + g = Rotate32(g, 19); + g = g * 5 + 0xe6546b64; + f += a4; + f = Rotate32(f, 19) + 113; + uint iters = (len - 1) / 20; + do + { + uint a = Fetch32(s); + uint b = Fetch32(s + 4); + uint c = Fetch32(s + 8); + uint d = Fetch32(s + 12); + uint e = Fetch32(s + 16); + h += a; + g += b; + f += c; + h = Mur(d, h) + e; + g = Mur(c, g) + a; + f = Mur(b + e * c1, f) + d; + f += g; + g += f; + s += 20; + } while (--iters != 0); + g = Rotate32(g, 11) * c1; + g = Rotate32(g, 17) * c1; + f = Rotate32(f, 11) * c1; + f = Rotate32(f, 17) * c1; + h = Rotate32(h + g, 19); + h = h * 5 + 0xe6546b64; + h = Rotate32(h, 17) * c1; + h = Rotate32(h + f, 19); + h = h * 5 + 0xe6546b64; + h = Rotate32(h, 17) * c1; + return h; + } + } + + #endregion + + #region hash64 + + // entry point + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe ulong Hash64(byte[] bytes, int offset, int count) + { + fixed (byte* p = &bytes[offset]) + { + return Hash64(p, (uint)count); + } + } + + // port from farmhash.cc + + struct pair + { + public ulong first; + public ulong second; + + public pair(ulong first, ulong second) + { + this.first = first; + this.second = second; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static pair make_pair(ulong first, ulong second) + { + return new pair(first, second); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static void swap(ref ulong x, ref ulong z) + { + var temp = z; + z = x; + x = temp; + } + + // Some primes between 2^63 and 2^64 for various uses. + const ulong k0 = 0xc3a5c85c97cb3127UL; + const ulong k1 = 0xb492b66fbe98f273UL; + const ulong k2 = 0x9ae16a3b2f90404fUL; + + static unsafe ulong Fetch64(byte* p) + { + return *(ulong*)p; + } + + static ulong Rotate64(ulong val, int shift) + { + return shift == 0 ? val : (val >> shift) | (val << (64 - shift)); + } + + // farmhashna.cc + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static ulong ShiftMix(ulong val) + { + return val ^ (val >> 47); + } + + // farmhashna.cc + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static ulong HashLen16(ulong u, ulong v, ulong mul) + { + unchecked + { + // Murmur-inspired hashing. + ulong a = (u ^ v) * mul; + a ^= a >> 47; + ulong b = (v ^ a) * mul; + b ^= b >> 47; + b *= mul; + return b; + } + } + + // farmhashxo.cc + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe ulong Hash64(byte* s, uint len) + { + if (len <= 16) + { + // farmhashna:: + return HashLen0to16(s, len); + } + + if (len <= 32) + { + // farmhashna:: + return HashLen17to32(s, len); + } + + if (len <= 64) + { + return HashLen33to64(s, len); + } + + if (len <= 96) + { + return HashLen65to96(s, len); + } + + if (len <= 256) + { + // farmhashna:: + return Hash64NA(s, len); + } + + // farmhashuo:: + return Hash64UO(s, len); + } + + // 0-16 farmhashna.cc + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe ulong HashLen0to16(byte* s, uint len) + { + unchecked + { + if (len >= 8) + { + ulong mul = k2 + len * 2; + ulong a = Fetch64(s) + k2; + ulong b = Fetch64(s + len - 8); + ulong c = Rotate64(b, 37) * mul + a; + ulong d = (Rotate64(a, 25) + b) * mul; + return HashLen16(c, d, mul); + } + if (len >= 4) + { + ulong mul = k2 + len * 2; + ulong a = Fetch32(s); + return HashLen16(len + (a << 3), Fetch32(s + len - 4), mul); + } + if (len > 0) + { + ushort a = s[0]; + ushort b = s[len >> 1]; + ushort c = s[len - 1]; + uint y = a + ((uint)b << 8); + uint z = len + ((uint)c << 2); + return ShiftMix(y * k2 ^ z * k0) * k2; + } + return k2; + } + } + + // 17-32 farmhashna.cc + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe ulong HashLen17to32(byte* s, uint len) + { + unchecked + { + ulong mul = k2 + len * 2; + ulong a = Fetch64(s) * k1; + ulong b = Fetch64(s + 8); + ulong c = Fetch64(s + len - 8) * mul; + ulong d = Fetch64(s + len - 16) * k2; + return HashLen16(Rotate64(a + b, 43) + Rotate64(c, 30) + d, + a + Rotate64(b + k2, 18) + c, mul); + } + } + + // farmhashxo.cc + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe ulong H32(byte* s, uint len, ulong mul, ulong seed0 = 0, ulong seed1 = 0) + { + unchecked + { + ulong a = Fetch64(s) * k1; + ulong b = Fetch64(s + 8); + ulong c = Fetch64(s + len - 8) * mul; + ulong d = Fetch64(s + len - 16) * k2; + ulong u = Rotate64(a + b, 43) + Rotate64(c, 30) + d + seed0; + ulong v = a + Rotate64(b + k2, 18) + c + seed1; + a = ShiftMix((u ^ v) * mul); + b = ShiftMix((v ^ a) * mul); + return b; + } + } + + // 33-64 farmhashxo.cc + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe ulong HashLen33to64(byte* s, uint len) + { + const ulong mul0 = k2 - 30; + + unchecked + { + ulong mul1 = k2 - 30 + 2 * len; + ulong h0 = H32(s, 32, mul0); + ulong h1 = H32(s + len - 32, 32, mul1); + return (h1 * mul1 + h0) * mul1; + } + } + + // 65-96 farmhashxo.cc + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe ulong HashLen65to96(byte* s, uint len) + { + const ulong mul0 = k2 - 114; + + unchecked + { + ulong mul1 = k2 - 114 + 2 * len; + ulong h0 = H32(s, 32, mul0); + ulong h1 = H32(s + 32, 32, mul1); + ulong h2 = H32(s + len - 32, 32, mul1, h0, h1); + return (h2 * 9 + (h0 >> 17) + (h1 >> 21)) * mul1; + } + } + + // farmhashna.cc + // Return a 16-byte hash for 48 bytes. Quick and dirty. + // Callers do best to use "random-looking" values for a and b. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe pair WeakHashLen32WithSeeds(ulong w, ulong x, ulong y, ulong z, ulong a, ulong b) + { + unchecked + { + a += w; + b = Rotate64(b + a + z, 21); + ulong c = a; + a += x; + a += y; + b += Rotate64(a, 44); + return make_pair(a + z, b + c); + } + } + + // farmhashna.cc + // Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe pair WeakHashLen32WithSeeds(byte* s, ulong a, ulong b) + { + return WeakHashLen32WithSeeds(Fetch64(s), + Fetch64(s + 8), + Fetch64(s + 16), + Fetch64(s + 24), + a, + b); + } + + // na(97-256) farmhashna.cc + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe ulong Hash64NA(byte* s, uint len) + { + const ulong seed = 81; + + unchecked + { + // For strings over 64 bytes we loop. Internal state consists of + // 56 bytes: v, w, x, y, and z. + ulong x = seed; + ulong y = seed * k1 + 113; + ulong z = ShiftMix(y * k2 + 113) * k2; + var v = make_pair(0, 0); + var w = make_pair(0, 0); + x = x * k2 + Fetch64(s); + + // Set end so that after the loop we have 1 to 64 bytes left to process. + byte* end = s + ((len - 1) / 64) * 64; + byte* last64 = end + ((len - 1) & 63) - 63; + + do + { + x = Rotate64(x + y + v.first + Fetch64(s + 8), 37) * k1; + y = Rotate64(y + v.second + Fetch64(s + 48), 42) * k1; + x ^= w.second; + y += v.first + Fetch64(s + 40); + z = Rotate64(z + w.first, 33) * k1; + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16)); + swap(ref z, ref x); + s += 64; + } while (s != end); + ulong mul = k1 + ((z & 0xff) << 1); + // Make s point to the last 64 bytes of input. + s = last64; + w.first += ((len - 1) & 63); + v.first += w.first; + w.first += v.first; + x = Rotate64(x + y + v.first + Fetch64(s + 8), 37) * mul; + y = Rotate64(y + v.second + Fetch64(s + 48), 42) * mul; + x ^= w.second * 9; + y += v.first * 9 + Fetch64(s + 40); + z = Rotate64(z + w.first, 33) * mul; + v = WeakHashLen32WithSeeds(s, v.second * mul, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16)); + swap(ref z, ref x); + return HashLen16(HashLen16(v.first, w.first, mul) + ShiftMix(y) * k0 + z, + HashLen16(v.second, w.second, mul) + x, + mul); + } + } + + // farmhashuo.cc + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static ulong H(ulong x, ulong y, ulong mul, int r) + { + unchecked + { + ulong a = (x ^ y) * mul; + a ^= (a >> 47); + ulong b = (y ^ a) * mul; + return Rotate64(b, r) * mul; + } + } + + // uo(257-) farmhashuo.cc, Hash64WithSeeds + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static unsafe ulong Hash64UO(byte* s, uint len) + { + const ulong seed0 = 81; + const ulong seed1 = 0; + + unchecked + { + // For strings over 64 bytes we loop. Internal state consists of + // 64 bytes: u, v, w, x, y, and z. + ulong x = seed0; + ulong y = seed1 * k2 + 113; + ulong z = ShiftMix(y * k2) * k2; + var v = make_pair(seed0, seed1); + var w = make_pair(0, 0); + ulong u = x - z; + x *= k2; + ulong mul = k2 + (u & 0x82); + + // Set end so that after the loop we have 1 to 64 bytes left to process. + byte* end = s + ((len - 1) / 64) * 64; + byte* last64 = end + ((len - 1) & 63) - 63; + + do + { + ulong a0 = Fetch64(s); + ulong a1 = Fetch64(s + 8); + ulong a2 = Fetch64(s + 16); + ulong a3 = Fetch64(s + 24); + ulong a4 = Fetch64(s + 32); + ulong a5 = Fetch64(s + 40); + ulong a6 = Fetch64(s + 48); + ulong a7 = Fetch64(s + 56); + x += a0 + a1; + y += a2; + z += a3; + v.first += a4; + v.second += a5 + a1; + w.first += a6; + w.second += a7; + + x = Rotate64(x, 26); + x *= 9; + y = Rotate64(y, 29); + z *= mul; + v.first = Rotate64(v.first, 33); + v.second = Rotate64(v.second, 30); + w.first ^= x; + w.first *= 9; + z = Rotate64(z, 32); + z += w.second; + w.second += z; + z *= 9; + swap(ref u, ref y); + + z += a0 + a6; + v.first += a2; + v.second += a3; + w.first += a4; + w.second += a5 + a6; + x += a1; + y += a7; + + y += v.first; + v.first += x - y; + v.second += w.first; + w.first += v.second; + w.second += x - y; + x += w.second; + w.second = Rotate64(w.second, 34); + swap(ref u, ref z); + s += 64; + } while (s != end); + // Make s point to the last 64 bytes of input. + s = last64; + u *= 9; + v.second = Rotate64(v.second, 28); + v.first = Rotate64(v.first, 20); + w.first += ((len - 1) & 63); + u += y; + y += u; + x = Rotate64(y - x + v.first + Fetch64(s + 8), 37) * mul; + y = Rotate64(y ^ v.second ^ Fetch64(s + 48), 42) * mul; + x ^= w.second * 9; + y += v.first + Fetch64(s + 40); + z = Rotate64(z + w.first, 33) * mul; + v = WeakHashLen32WithSeeds(s, v.second * mul, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16)); + return H(HashLen16(v.first + x, w.first ^ y, mul) + z - u, + H(v.second + y, w.second + z, k2, 30) ^ x, + k2, + 31); + } + } + + #endregion + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/GuidBits.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/GuidBits.cs index 92a8b75af..6f899a202 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/GuidBits.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/GuidBits.cs @@ -1,372 +1,372 @@ -using System; -using System.Runtime.InteropServices; - -namespace MessagePack.Internal -{ - [StructLayout(LayoutKind.Explicit, Pack = 1)] - internal struct GuidBits - { - [FieldOffset(0)] - public readonly Guid Value; - - [FieldOffset(0)] - public readonly byte Byte0; - [FieldOffset(1)] - public readonly byte Byte1; - [FieldOffset(2)] - public readonly byte Byte2; - [FieldOffset(3)] - public readonly byte Byte3; - [FieldOffset(4)] - public readonly byte Byte4; - [FieldOffset(5)] - public readonly byte Byte5; - [FieldOffset(6)] - public readonly byte Byte6; - [FieldOffset(7)] - public readonly byte Byte7; - [FieldOffset(8)] - public readonly byte Byte8; - [FieldOffset(9)] - public readonly byte Byte9; - [FieldOffset(10)] - public readonly byte Byte10; - [FieldOffset(11)] - public readonly byte Byte11; - [FieldOffset(12)] - public readonly byte Byte12; - [FieldOffset(13)] - public readonly byte Byte13; - [FieldOffset(14)] - public readonly byte Byte14; - [FieldOffset(15)] - public readonly byte Byte15; - - // string.Join(", ", Enumerable.Range(0, 256).Select(x => (int)BitConverter.ToString(new byte[] { (byte)x }).ToLower()[0])) - static byte[] byteToHexStringHigh = new byte[256] { 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102 }; - - // string.Join(", ", Enumerable.Range(0, 256).Select(x => (int)BitConverter.ToString(new byte[] { (byte)x }).ToLower()[1])) - static byte[] byteToHexStringLow = new byte[256] { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102 }; - - public GuidBits(ref Guid value) - { - this = default(GuidBits); - this.Value = value; - } - - // 4-pattern, lower/upper and '-' or no - public GuidBits(ArraySegment utf8string) - { - this = default(GuidBits); - - var array = utf8string.Array; - var offset = utf8string.Offset; - - // 32 - if (utf8string.Count == 32) - { - if (BitConverter.IsLittleEndian) - { - this.Byte0 = Parse(array, offset + 6); - this.Byte1 = Parse(array, offset + 4); - this.Byte2 = Parse(array, offset + 2); - this.Byte3 = Parse(array, offset + 0); - - this.Byte4 = Parse(array, offset + 10); - this.Byte5 = Parse(array, offset + 8); - - this.Byte6 = Parse(array, offset + 14); - this.Byte7 = Parse(array, offset + 12); - } - else - { - this.Byte0 = Parse(array, offset + 0); - this.Byte1 = Parse(array, offset + 2); - this.Byte2 = Parse(array, offset + 4); - this.Byte3 = Parse(array, offset + 6); - - this.Byte4 = Parse(array, offset + 8); - this.Byte5 = Parse(array, offset + 10); - - this.Byte6 = Parse(array, offset + 12); - this.Byte7 = Parse(array, offset + 14); - } - this.Byte8 = Parse(array, offset + 16); - this.Byte9 = Parse(array, offset + 18); - - this.Byte10 = Parse(array, offset + 20); - this.Byte11 = Parse(array, offset + 22); - this.Byte12 = Parse(array, offset + 24); - this.Byte13 = Parse(array, offset + 26); - this.Byte14 = Parse(array, offset + 28); - this.Byte15 = Parse(array, offset + 30); - return; - } - else if (utf8string.Count == 36) - { - // '-' => 45 - if (BitConverter.IsLittleEndian) - { - this.Byte0 = Parse(array, offset + 6); - this.Byte1 = Parse(array, offset + 4); - this.Byte2 = Parse(array, offset + 2); - this.Byte3 = Parse(array, offset + 0); - - if (array[offset + 8] != '-') goto ERROR; - - this.Byte4 = Parse(array, offset + 11); - this.Byte5 = Parse(array, offset + 9); - - if (array[offset + 13] != '-') goto ERROR; - - this.Byte6 = Parse(array, offset + 16); - this.Byte7 = Parse(array, offset + 14); - } - else - { - this.Byte0 = Parse(array, offset + 0); - this.Byte1 = Parse(array, offset + 2); - this.Byte2 = Parse(array, offset + 4); - this.Byte3 = Parse(array, offset + 6); - - if (array[offset + 8] != '-') goto ERROR; - - this.Byte4 = Parse(array, offset + 9); - this.Byte5 = Parse(array, offset + 11); - - if (array[offset + 13] != '-') goto ERROR; - - this.Byte6 = Parse(array, offset + 14); - this.Byte7 = Parse(array, offset + 16); - } - - if (array[offset + 18] != '-') goto ERROR; - - this.Byte8 = Parse(array, offset + 19); - this.Byte9 = Parse(array, offset + 21); - - if (array[offset + 23] != '-') goto ERROR; - - this.Byte10 = Parse(array, offset + 24); - this.Byte11 = Parse(array, offset + 26); - this.Byte12 = Parse(array, offset + 28); - this.Byte13 = Parse(array, offset + 30); - this.Byte14 = Parse(array, offset + 32); - this.Byte15 = Parse(array, offset + 34); - return; - } - - ERROR: - throw new ArgumentException("Invalid Guid Pattern."); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - static byte Parse(byte[] bytes, int highOffset) - { - return unchecked((byte)(SwitchParse(bytes[highOffset]) * 16 + SwitchParse(bytes[highOffset + 1]))); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - static byte SwitchParse(byte b) - { - // '0'(48) ~ '9'(57) => -48 - // 'A'(65) ~ 'F'(70) => -55 - // 'a'(97) ~ 'f'(102) => -87 - switch (b) - { - case 48: - case 49: - case 50: - case 51: - case 52: - case 53: - case 54: - case 55: - case 56: - case 57: - return unchecked((byte)((b - 48))); - case 65: - case 66: - case 67: - case 68: - case 69: - case 70: - return unchecked((byte)((b - 55))); - case 97: - case 98: - case 99: - case 100: - case 101: - case 102: - return unchecked((byte)((b - 87))); - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - case 16: - case 17: - case 18: - case 19: - case 20: - case 21: - case 22: - case 23: - case 24: - case 25: - case 26: - case 27: - case 28: - case 29: - case 30: - case 31: - case 32: - case 33: - case 34: - case 35: - case 36: - case 37: - case 38: - case 39: - case 40: - case 41: - case 42: - case 43: - case 44: - case 45: - case 46: - case 47: - case 58: - case 59: - case 60: - case 61: - case 62: - case 63: - case 64: - case 71: - case 72: - case 73: - case 74: - case 75: - case 76: - case 77: - case 78: - case 79: - case 80: - case 81: - case 82: - case 83: - case 84: - case 85: - case 86: - case 87: - case 88: - case 89: - case 90: - case 91: - case 92: - case 93: - case 94: - case 95: - case 96: - default: - throw new ArgumentException("Invalid Guid Pattern."); - } - } - - // 4(x2) - 2(x2) - 2(x2) - 2(x2) - 6(x2) - public void Write(byte[] buffer, int offset) - { - if (BitConverter.IsLittleEndian) - { - // int(_a) - buffer[offset + 6] = byteToHexStringHigh[Byte0]; - buffer[offset + 7] = byteToHexStringLow[Byte0]; - buffer[offset + 4] = byteToHexStringHigh[Byte1]; - buffer[offset + 5] = byteToHexStringLow[Byte1]; - buffer[offset + 2] = byteToHexStringHigh[Byte2]; - buffer[offset + 3] = byteToHexStringLow[Byte2]; - buffer[offset + 0] = byteToHexStringHigh[Byte3]; - buffer[offset + 1] = byteToHexStringLow[Byte3]; - - buffer[offset + 8] = (byte)'-'; - - // short(_b) - buffer[offset + 11] = byteToHexStringHigh[Byte4]; - buffer[offset + 12] = byteToHexStringLow[Byte4]; - buffer[offset + 9] = byteToHexStringHigh[Byte5]; - buffer[offset + 10] = byteToHexStringLow[Byte5]; - - buffer[offset + 13] = (byte)'-'; - - // short(_c) - buffer[offset + 16] = byteToHexStringHigh[Byte6]; - buffer[offset + 17] = byteToHexStringLow[Byte6]; - buffer[offset + 14] = byteToHexStringHigh[Byte7]; - buffer[offset + 15] = byteToHexStringLow[Byte7]; - } - else - { - buffer[offset + 0] = byteToHexStringHigh[Byte0]; - buffer[offset + 1] = byteToHexStringLow[Byte0]; - buffer[offset + 2] = byteToHexStringHigh[Byte1]; - buffer[offset + 3] = byteToHexStringLow[Byte1]; - buffer[offset + 4] = byteToHexStringHigh[Byte2]; - buffer[offset + 5] = byteToHexStringLow[Byte2]; - buffer[offset + 6] = byteToHexStringHigh[Byte3]; - buffer[offset + 7] = byteToHexStringLow[Byte3]; - - buffer[offset + 8] = (byte)'-'; - - buffer[offset + 9] = byteToHexStringHigh[Byte4]; - buffer[offset + 10] = byteToHexStringLow[Byte4]; - buffer[offset + 11] = byteToHexStringHigh[Byte5]; - buffer[offset + 12] = byteToHexStringLow[Byte5]; - - buffer[offset + 13] = (byte)'-'; - - buffer[offset + 14] = byteToHexStringHigh[Byte6]; - buffer[offset + 15] = byteToHexStringLow[Byte6]; - buffer[offset + 16] = byteToHexStringHigh[Byte7]; - buffer[offset + 17] = byteToHexStringLow[Byte7]; - } - - buffer[offset + 18] = (byte)'-'; - - buffer[offset + 19] = byteToHexStringHigh[Byte8]; - buffer[offset + 20] = byteToHexStringLow[Byte8]; - buffer[offset + 21] = byteToHexStringHigh[Byte9]; - buffer[offset + 22] = byteToHexStringLow[Byte9]; - - buffer[offset + 23] = (byte)'-'; - - buffer[offset + 24] = byteToHexStringHigh[Byte10]; - buffer[offset + 25] = byteToHexStringLow[Byte10]; - buffer[offset + 26] = byteToHexStringHigh[Byte11]; - buffer[offset + 27] = byteToHexStringLow[Byte11]; - buffer[offset + 28] = byteToHexStringHigh[Byte12]; - buffer[offset + 29] = byteToHexStringLow[Byte12]; - buffer[offset + 30] = byteToHexStringHigh[Byte13]; - buffer[offset + 31] = byteToHexStringLow[Byte13]; - buffer[offset + 32] = byteToHexStringHigh[Byte14]; - buffer[offset + 33] = byteToHexStringLow[Byte14]; - buffer[offset + 34] = byteToHexStringHigh[Byte15]; - buffer[offset + 35] = byteToHexStringLow[Byte15]; - } - } +using System; +using System.Runtime.InteropServices; + +namespace MessagePack.Internal +{ + [StructLayout(LayoutKind.Explicit, Pack = 1)] + internal struct GuidBits + { + [FieldOffset(0)] + public readonly Guid Value; + + [FieldOffset(0)] + public readonly byte Byte0; + [FieldOffset(1)] + public readonly byte Byte1; + [FieldOffset(2)] + public readonly byte Byte2; + [FieldOffset(3)] + public readonly byte Byte3; + [FieldOffset(4)] + public readonly byte Byte4; + [FieldOffset(5)] + public readonly byte Byte5; + [FieldOffset(6)] + public readonly byte Byte6; + [FieldOffset(7)] + public readonly byte Byte7; + [FieldOffset(8)] + public readonly byte Byte8; + [FieldOffset(9)] + public readonly byte Byte9; + [FieldOffset(10)] + public readonly byte Byte10; + [FieldOffset(11)] + public readonly byte Byte11; + [FieldOffset(12)] + public readonly byte Byte12; + [FieldOffset(13)] + public readonly byte Byte13; + [FieldOffset(14)] + public readonly byte Byte14; + [FieldOffset(15)] + public readonly byte Byte15; + + // string.Join(", ", Enumerable.Range(0, 256).Select(x => (int)BitConverter.ToString(new byte[] { (byte)x }).ToLower()[0])) + static byte[] byteToHexStringHigh = new byte[256] { 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102 }; + + // string.Join(", ", Enumerable.Range(0, 256).Select(x => (int)BitConverter.ToString(new byte[] { (byte)x }).ToLower()[1])) + static byte[] byteToHexStringLow = new byte[256] { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102 }; + + public GuidBits(ref Guid value) + { + this = default(GuidBits); + this.Value = value; + } + + // 4-pattern, lower/upper and '-' or no + public GuidBits(ArraySegment utf8string) + { + this = default(GuidBits); + + var array = utf8string.Array; + var offset = utf8string.Offset; + + // 32 + if (utf8string.Count == 32) + { + if (BitConverter.IsLittleEndian) + { + this.Byte0 = Parse(array, offset + 6); + this.Byte1 = Parse(array, offset + 4); + this.Byte2 = Parse(array, offset + 2); + this.Byte3 = Parse(array, offset + 0); + + this.Byte4 = Parse(array, offset + 10); + this.Byte5 = Parse(array, offset + 8); + + this.Byte6 = Parse(array, offset + 14); + this.Byte7 = Parse(array, offset + 12); + } + else + { + this.Byte0 = Parse(array, offset + 0); + this.Byte1 = Parse(array, offset + 2); + this.Byte2 = Parse(array, offset + 4); + this.Byte3 = Parse(array, offset + 6); + + this.Byte4 = Parse(array, offset + 8); + this.Byte5 = Parse(array, offset + 10); + + this.Byte6 = Parse(array, offset + 12); + this.Byte7 = Parse(array, offset + 14); + } + this.Byte8 = Parse(array, offset + 16); + this.Byte9 = Parse(array, offset + 18); + + this.Byte10 = Parse(array, offset + 20); + this.Byte11 = Parse(array, offset + 22); + this.Byte12 = Parse(array, offset + 24); + this.Byte13 = Parse(array, offset + 26); + this.Byte14 = Parse(array, offset + 28); + this.Byte15 = Parse(array, offset + 30); + return; + } + else if (utf8string.Count == 36) + { + // '-' => 45 + if (BitConverter.IsLittleEndian) + { + this.Byte0 = Parse(array, offset + 6); + this.Byte1 = Parse(array, offset + 4); + this.Byte2 = Parse(array, offset + 2); + this.Byte3 = Parse(array, offset + 0); + + if (array[offset + 8] != '-') goto ERROR; + + this.Byte4 = Parse(array, offset + 11); + this.Byte5 = Parse(array, offset + 9); + + if (array[offset + 13] != '-') goto ERROR; + + this.Byte6 = Parse(array, offset + 16); + this.Byte7 = Parse(array, offset + 14); + } + else + { + this.Byte0 = Parse(array, offset + 0); + this.Byte1 = Parse(array, offset + 2); + this.Byte2 = Parse(array, offset + 4); + this.Byte3 = Parse(array, offset + 6); + + if (array[offset + 8] != '-') goto ERROR; + + this.Byte4 = Parse(array, offset + 9); + this.Byte5 = Parse(array, offset + 11); + + if (array[offset + 13] != '-') goto ERROR; + + this.Byte6 = Parse(array, offset + 14); + this.Byte7 = Parse(array, offset + 16); + } + + if (array[offset + 18] != '-') goto ERROR; + + this.Byte8 = Parse(array, offset + 19); + this.Byte9 = Parse(array, offset + 21); + + if (array[offset + 23] != '-') goto ERROR; + + this.Byte10 = Parse(array, offset + 24); + this.Byte11 = Parse(array, offset + 26); + this.Byte12 = Parse(array, offset + 28); + this.Byte13 = Parse(array, offset + 30); + this.Byte14 = Parse(array, offset + 32); + this.Byte15 = Parse(array, offset + 34); + return; + } + + ERROR: + throw new ArgumentException("Invalid Guid Pattern."); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + static byte Parse(byte[] bytes, int highOffset) + { + return unchecked((byte)(SwitchParse(bytes[highOffset]) * 16 + SwitchParse(bytes[highOffset + 1]))); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + static byte SwitchParse(byte b) + { + // '0'(48) ~ '9'(57) => -48 + // 'A'(65) ~ 'F'(70) => -55 + // 'a'(97) ~ 'f'(102) => -87 + switch (b) + { + case 48: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + return unchecked((byte)((b - 48))); + case 65: + case 66: + case 67: + case 68: + case 69: + case 70: + return unchecked((byte)((b - 55))); + case 97: + case 98: + case 99: + case 100: + case 101: + case 102: + return unchecked((byte)((b - 87))); + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + case 24: + case 25: + case 26: + case 27: + case 28: + case 29: + case 30: + case 31: + case 32: + case 33: + case 34: + case 35: + case 36: + case 37: + case 38: + case 39: + case 40: + case 41: + case 42: + case 43: + case 44: + case 45: + case 46: + case 47: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 71: + case 72: + case 73: + case 74: + case 75: + case 76: + case 77: + case 78: + case 79: + case 80: + case 81: + case 82: + case 83: + case 84: + case 85: + case 86: + case 87: + case 88: + case 89: + case 90: + case 91: + case 92: + case 93: + case 94: + case 95: + case 96: + default: + throw new ArgumentException("Invalid Guid Pattern."); + } + } + + // 4(x2) - 2(x2) - 2(x2) - 2(x2) - 6(x2) + public void Write(byte[] buffer, int offset) + { + if (BitConverter.IsLittleEndian) + { + // int(_a) + buffer[offset + 6] = byteToHexStringHigh[Byte0]; + buffer[offset + 7] = byteToHexStringLow[Byte0]; + buffer[offset + 4] = byteToHexStringHigh[Byte1]; + buffer[offset + 5] = byteToHexStringLow[Byte1]; + buffer[offset + 2] = byteToHexStringHigh[Byte2]; + buffer[offset + 3] = byteToHexStringLow[Byte2]; + buffer[offset + 0] = byteToHexStringHigh[Byte3]; + buffer[offset + 1] = byteToHexStringLow[Byte3]; + + buffer[offset + 8] = (byte)'-'; + + // short(_b) + buffer[offset + 11] = byteToHexStringHigh[Byte4]; + buffer[offset + 12] = byteToHexStringLow[Byte4]; + buffer[offset + 9] = byteToHexStringHigh[Byte5]; + buffer[offset + 10] = byteToHexStringLow[Byte5]; + + buffer[offset + 13] = (byte)'-'; + + // short(_c) + buffer[offset + 16] = byteToHexStringHigh[Byte6]; + buffer[offset + 17] = byteToHexStringLow[Byte6]; + buffer[offset + 14] = byteToHexStringHigh[Byte7]; + buffer[offset + 15] = byteToHexStringLow[Byte7]; + } + else + { + buffer[offset + 0] = byteToHexStringHigh[Byte0]; + buffer[offset + 1] = byteToHexStringLow[Byte0]; + buffer[offset + 2] = byteToHexStringHigh[Byte1]; + buffer[offset + 3] = byteToHexStringLow[Byte1]; + buffer[offset + 4] = byteToHexStringHigh[Byte2]; + buffer[offset + 5] = byteToHexStringLow[Byte2]; + buffer[offset + 6] = byteToHexStringHigh[Byte3]; + buffer[offset + 7] = byteToHexStringLow[Byte3]; + + buffer[offset + 8] = (byte)'-'; + + buffer[offset + 9] = byteToHexStringHigh[Byte4]; + buffer[offset + 10] = byteToHexStringLow[Byte4]; + buffer[offset + 11] = byteToHexStringHigh[Byte5]; + buffer[offset + 12] = byteToHexStringLow[Byte5]; + + buffer[offset + 13] = (byte)'-'; + + buffer[offset + 14] = byteToHexStringHigh[Byte6]; + buffer[offset + 15] = byteToHexStringLow[Byte6]; + buffer[offset + 16] = byteToHexStringHigh[Byte7]; + buffer[offset + 17] = byteToHexStringLow[Byte7]; + } + + buffer[offset + 18] = (byte)'-'; + + buffer[offset + 19] = byteToHexStringHigh[Byte8]; + buffer[offset + 20] = byteToHexStringLow[Byte8]; + buffer[offset + 21] = byteToHexStringHigh[Byte9]; + buffer[offset + 22] = byteToHexStringLow[Byte9]; + + buffer[offset + 23] = (byte)'-'; + + buffer[offset + 24] = byteToHexStringHigh[Byte10]; + buffer[offset + 25] = byteToHexStringLow[Byte10]; + buffer[offset + 26] = byteToHexStringHigh[Byte11]; + buffer[offset + 27] = byteToHexStringLow[Byte11]; + buffer[offset + 28] = byteToHexStringHigh[Byte12]; + buffer[offset + 29] = byteToHexStringLow[Byte12]; + buffer[offset + 30] = byteToHexStringHigh[Byte13]; + buffer[offset + 31] = byteToHexStringLow[Byte13]; + buffer[offset + 32] = byteToHexStringHigh[Byte14]; + buffer[offset + 33] = byteToHexStringLow[Byte14]; + buffer[offset + 34] = byteToHexStringHigh[Byte15]; + buffer[offset + 35] = byteToHexStringLow[Byte15]; + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ILGeneratorExtensions.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ILGeneratorExtensions.cs index 2ce4f963c..428c7d969 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ILGeneratorExtensions.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ILGeneratorExtensions.cs @@ -1,395 +1,395 @@ -#if !UNITY_WSA -#if !NET_STANDARD_2_0 - -using System; -using System.Linq; -using System.Reflection; -using System.Reflection.Emit; - -namespace MessagePack.Internal -{ - internal struct ArgumentField - { - readonly int i; - readonly bool @ref; - readonly ILGenerator il; - - public ArgumentField(ILGenerator il, int i, bool @ref = false) - { - this.il = il; - this.i = i; - this.@ref = @ref; - } - - public ArgumentField(ILGenerator il, int i, Type type) - { - this.il = il; - this.i = i; - var ti = type.GetTypeInfo(); - this.@ref = (ti.IsClass || ti.IsInterface || ti.IsAbstract) ? false : true; - } - - public void EmitLoad() - { - if (@ref) - { - il.EmitLdarga(i); - } - else - { - il.EmitLdarg(i); - } - } - - public void EmitLdarg() - { - il.EmitLdarg(i); - } - - public void EmitLdarga() - { - il.EmitLdarga(i); - } - - public void EmitStore() - { - il.EmitStarg(i); - } - } - - /// - /// Provides optimized generation code and helpers. - /// - internal static class ILGeneratorExtensions - { - /// - /// Loads the local variable at a specific index onto the evaluation stack. - /// - public static void EmitLdloc(this ILGenerator il, int index) - { - switch (index) - { - case 0: - il.Emit(OpCodes.Ldloc_0); - break; - case 1: - il.Emit(OpCodes.Ldloc_1); - break; - case 2: - il.Emit(OpCodes.Ldloc_2); - break; - case 3: - il.Emit(OpCodes.Ldloc_3); - break; - default: - if (index <= 255) - { - il.Emit(OpCodes.Ldloc_S, (byte)index); - } - else - { - il.Emit(OpCodes.Ldloc, (short)index); - } - break; - } - } - - public static void EmitLdloc(this ILGenerator il, LocalBuilder local) - { - EmitLdloc(il, local.LocalIndex); - } - - /// - /// Pops the current value from the top of the evaluation stack and stores it in a the local variable list at a specified index. - /// - public static void EmitStloc(this ILGenerator il, int index) - { - switch (index) - { - case 0: - il.Emit(OpCodes.Stloc_0); - break; - case 1: - il.Emit(OpCodes.Stloc_1); - break; - case 2: - il.Emit(OpCodes.Stloc_2); - break; - case 3: - il.Emit(OpCodes.Stloc_3); - break; - default: - if (index <= 255) - { - il.Emit(OpCodes.Stloc_S, (byte)index); - } - else - { - il.Emit(OpCodes.Stloc, (short)index); - } - break; - } - } - - public static void EmitStloc(this ILGenerator il, LocalBuilder local) - { - EmitStloc(il, local.LocalIndex); - } - - /// - /// Loads the address of the local variable at a specific index onto the evaluation statck. - /// - public static void EmitLdloca(this ILGenerator il, int index) - { - if (index <= 255) - { - il.Emit(OpCodes.Ldloca_S, (byte)index); - } - else - { - il.Emit(OpCodes.Ldloca, (short)index); - } - } - - public static void EmitLdloca(this ILGenerator il, LocalBuilder local) - { - EmitLdloca(il, local.LocalIndex); - } - - public static void EmitTrue(this ILGenerator il) - { - EmitBoolean(il, true); - } - - public static void EmitFalse(this ILGenerator il) - { - EmitBoolean(il, false); - } - - public static void EmitBoolean(this ILGenerator il, bool value) - { - EmitLdc_I4(il, value ? 1 : 0); - } - - /// - /// Pushes a supplied value of type int32 onto the evaluation stack as an int32. - /// - public static void EmitLdc_I4(this ILGenerator il, int value) - { - switch (value) - { - case -1: - il.Emit(OpCodes.Ldc_I4_M1); - break; - case 0: - il.Emit(OpCodes.Ldc_I4_0); - break; - case 1: - il.Emit(OpCodes.Ldc_I4_1); - break; - case 2: - il.Emit(OpCodes.Ldc_I4_2); - break; - case 3: - il.Emit(OpCodes.Ldc_I4_3); - break; - case 4: - il.Emit(OpCodes.Ldc_I4_4); - break; - case 5: - il.Emit(OpCodes.Ldc_I4_5); - break; - case 6: - il.Emit(OpCodes.Ldc_I4_6); - break; - case 7: - il.Emit(OpCodes.Ldc_I4_7); - break; - case 8: - il.Emit(OpCodes.Ldc_I4_8); - break; - default: - if (value >= -128 && value <= 127) - { - il.Emit(OpCodes.Ldc_I4_S, (sbyte)value); - } - else - { - il.Emit(OpCodes.Ldc_I4, value); - } - break; - } - } - - public static void EmitUnboxOrCast(this ILGenerator il, Type type) - { - if (type.GetTypeInfo().IsValueType) - { - il.Emit(OpCodes.Unbox_Any, type); - } - else - { - il.Emit(OpCodes.Castclass, type); - } - } - - public static void EmitBoxOrDoNothing(this ILGenerator il, Type type) - { - if (type.GetTypeInfo().IsValueType) - { - il.Emit(OpCodes.Box, type); - } - } - - public static void EmitLdarg(this ILGenerator il, int index) - { - switch (index) - { - case 0: - il.Emit(OpCodes.Ldarg_0); - break; - case 1: - il.Emit(OpCodes.Ldarg_1); - break; - case 2: - il.Emit(OpCodes.Ldarg_2); - break; - case 3: - il.Emit(OpCodes.Ldarg_3); - break; - default: - if (index <= 255) - { - il.Emit(OpCodes.Ldarg_S, (byte)index); - } - else - { - il.Emit(OpCodes.Ldarg, index); - } - break; - } - } - - public static void EmitLoadThis(this ILGenerator il) - { - EmitLdarg(il, 0); - } - - public static void EmitLdarga(this ILGenerator il, int index) - { - if (index <= 255) - { - il.Emit(OpCodes.Ldarga_S, (byte)index); - } - else - { - il.Emit(OpCodes.Ldarga, index); - } - } - - public static void EmitStarg(this ILGenerator il, int index) - { - if (index <= 255) - { - il.Emit(OpCodes.Starg_S, (byte)index); - } - else - { - il.Emit(OpCodes.Starg, index); - } - } - - /// - /// Helper for Pop op. - /// - public static void EmitPop(this ILGenerator il, int count) - { - for (int i = 0; i < count; i++) - { - il.Emit(OpCodes.Pop); - } - } - - public static void EmitCall(this ILGenerator il, MethodInfo methodInfo) - { - if (methodInfo.IsFinal || !methodInfo.IsVirtual) - { - il.Emit(OpCodes.Call, methodInfo); - } - else - { - il.Emit(OpCodes.Callvirt, methodInfo); - } - } - - public static void EmitLdfld(this ILGenerator il, FieldInfo fieldInfo) - { - il.Emit(OpCodes.Ldfld, fieldInfo); - } - - public static void EmitLdsfld(this ILGenerator il, FieldInfo fieldInfo) - { - il.Emit(OpCodes.Ldsfld, fieldInfo); - } - - public static void EmitRet(this ILGenerator il) - { - il.Emit(OpCodes.Ret); - } - - public static void EmitIntZeroReturn(this ILGenerator il) - { - il.EmitLdc_I4(0); - il.Emit(OpCodes.Ret); - } - - public static void EmitNullReturn(this ILGenerator il) - { - il.Emit(OpCodes.Ldnull); - il.Emit(OpCodes.Ret); - } - - public static void EmitULong(this ILGenerator il, ulong value) - { - il.Emit(OpCodes.Ldc_I8, unchecked((long)value)); - } - - public static void EmitThrowNotimplemented(this ILGenerator il) - { - il.Emit(OpCodes.Newobj, typeof(System.NotImplementedException).GetTypeInfo().DeclaredConstructors.First(x => x.GetParameters().Length == 0)); - il.Emit(OpCodes.Throw); - } - - /// for var i = 0, i ..., i++ - public static void EmitIncrementFor(this ILGenerator il, LocalBuilder conditionGreater, Action emitBody) - { - var loopBegin = il.DefineLabel(); - var condtionLabel = il.DefineLabel(); - - // var i = 0 - var forI = il.DeclareLocal(typeof(int)); - il.EmitLdc_I4(0); - il.EmitStloc(forI); - il.Emit(OpCodes.Br, condtionLabel); - - il.MarkLabel(loopBegin); - emitBody(forI); - - // i++ - il.EmitLdloc(forI); - il.EmitLdc_I4(1); - il.Emit(OpCodes.Add); - il.EmitStloc(forI); - - //// i < *** - il.MarkLabel(condtionLabel); - il.EmitLdloc(forI); - il.EmitLdloc(conditionGreater); - il.Emit(OpCodes.Blt, loopBegin); - } - } - -} - -#endif +#if !UNITY_WSA +#if !NET_STANDARD_2_0 + +using System; +using System.Linq; +using System.Reflection; +using System.Reflection.Emit; + +namespace MessagePack.Internal +{ + internal struct ArgumentField + { + readonly int i; + readonly bool @ref; + readonly ILGenerator il; + + public ArgumentField(ILGenerator il, int i, bool @ref = false) + { + this.il = il; + this.i = i; + this.@ref = @ref; + } + + public ArgumentField(ILGenerator il, int i, Type type) + { + this.il = il; + this.i = i; + var ti = type.GetTypeInfo(); + this.@ref = (ti.IsClass || ti.IsInterface || ti.IsAbstract) ? false : true; + } + + public void EmitLoad() + { + if (@ref) + { + il.EmitLdarga(i); + } + else + { + il.EmitLdarg(i); + } + } + + public void EmitLdarg() + { + il.EmitLdarg(i); + } + + public void EmitLdarga() + { + il.EmitLdarga(i); + } + + public void EmitStore() + { + il.EmitStarg(i); + } + } + + /// + /// Provides optimized generation code and helpers. + /// + internal static class ILGeneratorExtensions + { + /// + /// Loads the local variable at a specific index onto the evaluation stack. + /// + public static void EmitLdloc(this ILGenerator il, int index) + { + switch (index) + { + case 0: + il.Emit(OpCodes.Ldloc_0); + break; + case 1: + il.Emit(OpCodes.Ldloc_1); + break; + case 2: + il.Emit(OpCodes.Ldloc_2); + break; + case 3: + il.Emit(OpCodes.Ldloc_3); + break; + default: + if (index <= 255) + { + il.Emit(OpCodes.Ldloc_S, (byte)index); + } + else + { + il.Emit(OpCodes.Ldloc, (short)index); + } + break; + } + } + + public static void EmitLdloc(this ILGenerator il, LocalBuilder local) + { + EmitLdloc(il, local.LocalIndex); + } + + /// + /// Pops the current value from the top of the evaluation stack and stores it in a the local variable list at a specified index. + /// + public static void EmitStloc(this ILGenerator il, int index) + { + switch (index) + { + case 0: + il.Emit(OpCodes.Stloc_0); + break; + case 1: + il.Emit(OpCodes.Stloc_1); + break; + case 2: + il.Emit(OpCodes.Stloc_2); + break; + case 3: + il.Emit(OpCodes.Stloc_3); + break; + default: + if (index <= 255) + { + il.Emit(OpCodes.Stloc_S, (byte)index); + } + else + { + il.Emit(OpCodes.Stloc, (short)index); + } + break; + } + } + + public static void EmitStloc(this ILGenerator il, LocalBuilder local) + { + EmitStloc(il, local.LocalIndex); + } + + /// + /// Loads the address of the local variable at a specific index onto the evaluation statck. + /// + public static void EmitLdloca(this ILGenerator il, int index) + { + if (index <= 255) + { + il.Emit(OpCodes.Ldloca_S, (byte)index); + } + else + { + il.Emit(OpCodes.Ldloca, (short)index); + } + } + + public static void EmitLdloca(this ILGenerator il, LocalBuilder local) + { + EmitLdloca(il, local.LocalIndex); + } + + public static void EmitTrue(this ILGenerator il) + { + EmitBoolean(il, true); + } + + public static void EmitFalse(this ILGenerator il) + { + EmitBoolean(il, false); + } + + public static void EmitBoolean(this ILGenerator il, bool value) + { + EmitLdc_I4(il, value ? 1 : 0); + } + + /// + /// Pushes a supplied value of type int32 onto the evaluation stack as an int32. + /// + public static void EmitLdc_I4(this ILGenerator il, int value) + { + switch (value) + { + case -1: + il.Emit(OpCodes.Ldc_I4_M1); + break; + case 0: + il.Emit(OpCodes.Ldc_I4_0); + break; + case 1: + il.Emit(OpCodes.Ldc_I4_1); + break; + case 2: + il.Emit(OpCodes.Ldc_I4_2); + break; + case 3: + il.Emit(OpCodes.Ldc_I4_3); + break; + case 4: + il.Emit(OpCodes.Ldc_I4_4); + break; + case 5: + il.Emit(OpCodes.Ldc_I4_5); + break; + case 6: + il.Emit(OpCodes.Ldc_I4_6); + break; + case 7: + il.Emit(OpCodes.Ldc_I4_7); + break; + case 8: + il.Emit(OpCodes.Ldc_I4_8); + break; + default: + if (value >= -128 && value <= 127) + { + il.Emit(OpCodes.Ldc_I4_S, (sbyte)value); + } + else + { + il.Emit(OpCodes.Ldc_I4, value); + } + break; + } + } + + public static void EmitUnboxOrCast(this ILGenerator il, Type type) + { + if (type.GetTypeInfo().IsValueType) + { + il.Emit(OpCodes.Unbox_Any, type); + } + else + { + il.Emit(OpCodes.Castclass, type); + } + } + + public static void EmitBoxOrDoNothing(this ILGenerator il, Type type) + { + if (type.GetTypeInfo().IsValueType) + { + il.Emit(OpCodes.Box, type); + } + } + + public static void EmitLdarg(this ILGenerator il, int index) + { + switch (index) + { + case 0: + il.Emit(OpCodes.Ldarg_0); + break; + case 1: + il.Emit(OpCodes.Ldarg_1); + break; + case 2: + il.Emit(OpCodes.Ldarg_2); + break; + case 3: + il.Emit(OpCodes.Ldarg_3); + break; + default: + if (index <= 255) + { + il.Emit(OpCodes.Ldarg_S, (byte)index); + } + else + { + il.Emit(OpCodes.Ldarg, index); + } + break; + } + } + + public static void EmitLoadThis(this ILGenerator il) + { + EmitLdarg(il, 0); + } + + public static void EmitLdarga(this ILGenerator il, int index) + { + if (index <= 255) + { + il.Emit(OpCodes.Ldarga_S, (byte)index); + } + else + { + il.Emit(OpCodes.Ldarga, index); + } + } + + public static void EmitStarg(this ILGenerator il, int index) + { + if (index <= 255) + { + il.Emit(OpCodes.Starg_S, (byte)index); + } + else + { + il.Emit(OpCodes.Starg, index); + } + } + + /// + /// Helper for Pop op. + /// + public static void EmitPop(this ILGenerator il, int count) + { + for (int i = 0; i < count; i++) + { + il.Emit(OpCodes.Pop); + } + } + + public static void EmitCall(this ILGenerator il, MethodInfo methodInfo) + { + if (methodInfo.IsFinal || !methodInfo.IsVirtual) + { + il.Emit(OpCodes.Call, methodInfo); + } + else + { + il.Emit(OpCodes.Callvirt, methodInfo); + } + } + + public static void EmitLdfld(this ILGenerator il, FieldInfo fieldInfo) + { + il.Emit(OpCodes.Ldfld, fieldInfo); + } + + public static void EmitLdsfld(this ILGenerator il, FieldInfo fieldInfo) + { + il.Emit(OpCodes.Ldsfld, fieldInfo); + } + + public static void EmitRet(this ILGenerator il) + { + il.Emit(OpCodes.Ret); + } + + public static void EmitIntZeroReturn(this ILGenerator il) + { + il.EmitLdc_I4(0); + il.Emit(OpCodes.Ret); + } + + public static void EmitNullReturn(this ILGenerator il) + { + il.Emit(OpCodes.Ldnull); + il.Emit(OpCodes.Ret); + } + + public static void EmitULong(this ILGenerator il, ulong value) + { + il.Emit(OpCodes.Ldc_I8, unchecked((long)value)); + } + + public static void EmitThrowNotimplemented(this ILGenerator il) + { + il.Emit(OpCodes.Newobj, typeof(System.NotImplementedException).GetTypeInfo().DeclaredConstructors.First(x => x.GetParameters().Length == 0)); + il.Emit(OpCodes.Throw); + } + + /// for var i = 0, i ..., i++ + public static void EmitIncrementFor(this ILGenerator il, LocalBuilder conditionGreater, Action emitBody) + { + var loopBegin = il.DefineLabel(); + var condtionLabel = il.DefineLabel(); + + // var i = 0 + var forI = il.DeclareLocal(typeof(int)); + il.EmitLdc_I4(0); + il.EmitStloc(forI); + il.Emit(OpCodes.Br, condtionLabel); + + il.MarkLabel(loopBegin); + emitBody(forI); + + // i++ + il.EmitLdloc(forI); + il.EmitLdc_I4(1); + il.Emit(OpCodes.Add); + il.EmitStloc(forI); + + //// i < *** + il.MarkLabel(condtionLabel); + il.EmitLdloc(forI); + il.EmitLdloc(conditionGreater); + il.Emit(OpCodes.Blt, loopBegin); + } + } + +} + +#endif #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ReflectionExtensions.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ReflectionExtensions.cs index 28b7e4888..dd05a501a 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ReflectionExtensions.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ReflectionExtensions.cs @@ -1,57 +1,57 @@ -#if !UNITY_WSA - -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Text; - -namespace MessagePack.Internal -{ - internal static class ReflectionExtensions - { - public static bool IsNullable(this System.Reflection.TypeInfo type) - { - return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(System.Nullable<>); - } - - public static bool IsPublic(this System.Reflection.TypeInfo type) - { - return type.IsPublic; - } - - public static bool IsAnonymous(this System.Reflection.TypeInfo type) - { - return type.GetCustomAttribute() != null - && type.IsGenericType && type.Name.Contains("AnonymousType") - && (type.Name.StartsWith("<>") || type.Name.StartsWith("VB$")) - && (type.Attributes & TypeAttributes.NotPublic) == TypeAttributes.NotPublic; - } - - public static bool IsIndexer(this System.Reflection.PropertyInfo propertyInfo) - { - return propertyInfo.GetIndexParameters().Length > 0; - } - -#if NETSTANDARD - - public static bool IsConstructedGenericType(this System.Reflection.TypeInfo type) - { - return type.AsType().IsConstructedGenericType; - } - - public static MethodInfo GetGetMethod(this PropertyInfo propInfo) - { - return propInfo.GetMethod; - } - - public static MethodInfo GetSetMethod(this PropertyInfo propInfo) - { - return propInfo.SetMethod; - } - -#endif - } -} - +#if !UNITY_WSA + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Text; + +namespace MessagePack.Internal +{ + internal static class ReflectionExtensions + { + public static bool IsNullable(this System.Reflection.TypeInfo type) + { + return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(System.Nullable<>); + } + + public static bool IsPublic(this System.Reflection.TypeInfo type) + { + return type.IsPublic; + } + + public static bool IsAnonymous(this System.Reflection.TypeInfo type) + { + return type.GetCustomAttribute() != null + && type.IsGenericType && type.Name.Contains("AnonymousType") + && (type.Name.StartsWith("<>") || type.Name.StartsWith("VB$")) + && (type.Attributes & TypeAttributes.NotPublic) == TypeAttributes.NotPublic; + } + + public static bool IsIndexer(this System.Reflection.PropertyInfo propertyInfo) + { + return propertyInfo.GetIndexParameters().Length > 0; + } + +#if NETSTANDARD + + public static bool IsConstructedGenericType(this System.Reflection.TypeInfo type) + { + return type.AsType().IsConstructedGenericType; + } + + public static MethodInfo GetGetMethod(this PropertyInfo propInfo) + { + return propInfo.GetMethod; + } + + public static MethodInfo GetSetMethod(this PropertyInfo propInfo) + { + return propInfo.SetMethod; + } + +#endif + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ThreadsafeTypeKeyHashTable.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ThreadsafeTypeKeyHashTable.cs index 380b1f351..402e5a39b 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ThreadsafeTypeKeyHashTable.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/ThreadsafeTypeKeyHashTable.cs @@ -1,232 +1,232 @@ -using System; - -namespace MessagePack.Internal -{ - // Safe for multiple-read, single-write. - internal class ThreadsafeTypeKeyHashTable - { - Entry[] buckets; - int size; // only use in writer lock - - readonly object writerLock = new object(); - readonly float loadFactor; - - // IEqualityComparer.Equals is overhead if key only Type, don't use it. - // readonly IEqualityComparer comparer; - - public ThreadsafeTypeKeyHashTable(int capacity = 4, float loadFactor = 0.75f) - { - var tableSize = CalculateCapacity(capacity, loadFactor); - this.buckets = new Entry[tableSize]; - this.loadFactor = loadFactor; - } - - public bool TryAdd(Type key, TValue value) - { - return TryAdd(key, _ => value); // create lambda capture - } - - public bool TryAdd(Type key, Func valueFactory) - { - TValue _; - return TryAddInternal(key, valueFactory, out _); - } - - bool TryAddInternal(Type key, Func valueFactory, out TValue resultingValue) - { - lock (writerLock) - { - var nextCapacity = CalculateCapacity(size + 1, loadFactor); - - if (buckets.Length < nextCapacity) - { - // rehash - var nextBucket = new Entry[nextCapacity]; - for (int i = 0; i < buckets.Length; i++) - { - var e = buckets[i]; - while (e != null) - { - var newEntry = new Entry { Key = e.Key, Value = e.Value, Hash = e.Hash }; - AddToBuckets(nextBucket, key, newEntry, null, out resultingValue); - e = e.Next; - } - } - - // add entry(if failed to add, only do resize) - var successAdd = AddToBuckets(nextBucket, key, null, valueFactory, out resultingValue); - - // replace field(threadsafe for read) - VolatileWrite(ref buckets, nextBucket); - - if (successAdd) size++; - return successAdd; - } - else - { - // add entry(insert last is thread safe for read) - var successAdd = AddToBuckets(buckets, key, null, valueFactory, out resultingValue); - if (successAdd) size++; - return successAdd; - } - } - } - - bool AddToBuckets(Entry[] buckets, Type newKey, Entry newEntryOrNull, Func valueFactory, out TValue resultingValue) - { - var h = (newEntryOrNull != null) ? newEntryOrNull.Hash : newKey.GetHashCode(); - if (buckets[h & (buckets.Length - 1)] == null) - { - if (newEntryOrNull != null) - { - resultingValue = newEntryOrNull.Value; - VolatileWrite(ref buckets[h & (buckets.Length - 1)], newEntryOrNull); - } - else - { - resultingValue = valueFactory(newKey); - VolatileWrite(ref buckets[h & (buckets.Length - 1)], new Entry { Key = newKey, Value = resultingValue, Hash = h }); - } - } - else - { - var searchLastEntry = buckets[h & (buckets.Length - 1)]; - while (true) - { - if (searchLastEntry.Key == newKey) - { - resultingValue = searchLastEntry.Value; - return false; - } - - if (searchLastEntry.Next == null) - { - if (newEntryOrNull != null) - { - resultingValue = newEntryOrNull.Value; - VolatileWrite(ref searchLastEntry.Next, newEntryOrNull); - } - else - { - resultingValue = valueFactory(newKey); - VolatileWrite(ref searchLastEntry.Next, new Entry { Key = newKey, Value = resultingValue, Hash = h }); - } - break; - } - searchLastEntry = searchLastEntry.Next; - } - } - - return true; - } - - public bool TryGetValue(Type key, out TValue value) - { - var table = buckets; - var hash = key.GetHashCode(); - var entry = table[hash & table.Length - 1]; - - if (entry == null) goto NOT_FOUND; - - if (entry.Key == key) - { - value = entry.Value; - return true; - } - - var next = entry.Next; - while (next != null) - { - if (next.Key == key) - { - value = next.Value; - return true; - } - next = next.Next; - } - - NOT_FOUND: - value = default(TValue); - return false; - } - - public TValue GetOrAdd(Type key, Func valueFactory) - { - TValue v; - if (TryGetValue(key, out v)) - { - return v; - } - - TryAddInternal(key, valueFactory, out v); - return v; - } - - static int CalculateCapacity(int collectionSize, float loadFactor) - { - var initialCapacity = (int)(((float)collectionSize) / loadFactor); - var capacity = 1; - while (capacity < initialCapacity) - { - capacity <<= 1; - } - - if (capacity < 8) - { - return 8; - } - - return capacity; - } - - static void VolatileWrite(ref Entry location, Entry value) - { -#if NETSTANDARD - System.Threading.Volatile.Write(ref location, value); -#elif UNITY_WSA || NET_4_6 - System.Threading.Volatile.Write(ref location, value); -#else - System.Threading.Thread.MemoryBarrier(); - location = value; -#endif - } - - static void VolatileWrite(ref Entry[] location, Entry[] value) - { -#if NETSTANDARD - System.Threading.Volatile.Write(ref location, value); -#elif UNITY_WSA || NET_4_6 - System.Threading.Volatile.Write(ref location, value); -#else - System.Threading.Thread.MemoryBarrier(); - location = value; -#endif - } - - class Entry - { - public Type Key; - public TValue Value; - public int Hash; - public Entry Next; - - // debug only - public override string ToString() - { - return Key + "(" + Count() + ")"; - } - - int Count() - { - var count = 1; - var n = this; - while (n.Next != null) - { - count++; - n = n.Next; - } - return count; - } - } - } -} +using System; + +namespace MessagePack.Internal +{ + // Safe for multiple-read, single-write. + internal class ThreadsafeTypeKeyHashTable + { + Entry[] buckets; + int size; // only use in writer lock + + readonly object writerLock = new object(); + readonly float loadFactor; + + // IEqualityComparer.Equals is overhead if key only Type, don't use it. + // readonly IEqualityComparer comparer; + + public ThreadsafeTypeKeyHashTable(int capacity = 4, float loadFactor = 0.75f) + { + var tableSize = CalculateCapacity(capacity, loadFactor); + this.buckets = new Entry[tableSize]; + this.loadFactor = loadFactor; + } + + public bool TryAdd(Type key, TValue value) + { + return TryAdd(key, _ => value); // create lambda capture + } + + public bool TryAdd(Type key, Func valueFactory) + { + TValue _; + return TryAddInternal(key, valueFactory, out _); + } + + bool TryAddInternal(Type key, Func valueFactory, out TValue resultingValue) + { + lock (writerLock) + { + var nextCapacity = CalculateCapacity(size + 1, loadFactor); + + if (buckets.Length < nextCapacity) + { + // rehash + var nextBucket = new Entry[nextCapacity]; + for (int i = 0; i < buckets.Length; i++) + { + var e = buckets[i]; + while (e != null) + { + var newEntry = new Entry { Key = e.Key, Value = e.Value, Hash = e.Hash }; + AddToBuckets(nextBucket, key, newEntry, null, out resultingValue); + e = e.Next; + } + } + + // add entry(if failed to add, only do resize) + var successAdd = AddToBuckets(nextBucket, key, null, valueFactory, out resultingValue); + + // replace field(threadsafe for read) + VolatileWrite(ref buckets, nextBucket); + + if (successAdd) size++; + return successAdd; + } + else + { + // add entry(insert last is thread safe for read) + var successAdd = AddToBuckets(buckets, key, null, valueFactory, out resultingValue); + if (successAdd) size++; + return successAdd; + } + } + } + + bool AddToBuckets(Entry[] buckets, Type newKey, Entry newEntryOrNull, Func valueFactory, out TValue resultingValue) + { + var h = (newEntryOrNull != null) ? newEntryOrNull.Hash : newKey.GetHashCode(); + if (buckets[h & (buckets.Length - 1)] == null) + { + if (newEntryOrNull != null) + { + resultingValue = newEntryOrNull.Value; + VolatileWrite(ref buckets[h & (buckets.Length - 1)], newEntryOrNull); + } + else + { + resultingValue = valueFactory(newKey); + VolatileWrite(ref buckets[h & (buckets.Length - 1)], new Entry { Key = newKey, Value = resultingValue, Hash = h }); + } + } + else + { + var searchLastEntry = buckets[h & (buckets.Length - 1)]; + while (true) + { + if (searchLastEntry.Key == newKey) + { + resultingValue = searchLastEntry.Value; + return false; + } + + if (searchLastEntry.Next == null) + { + if (newEntryOrNull != null) + { + resultingValue = newEntryOrNull.Value; + VolatileWrite(ref searchLastEntry.Next, newEntryOrNull); + } + else + { + resultingValue = valueFactory(newKey); + VolatileWrite(ref searchLastEntry.Next, new Entry { Key = newKey, Value = resultingValue, Hash = h }); + } + break; + } + searchLastEntry = searchLastEntry.Next; + } + } + + return true; + } + + public bool TryGetValue(Type key, out TValue value) + { + var table = buckets; + var hash = key.GetHashCode(); + var entry = table[hash & table.Length - 1]; + + if (entry == null) goto NOT_FOUND; + + if (entry.Key == key) + { + value = entry.Value; + return true; + } + + var next = entry.Next; + while (next != null) + { + if (next.Key == key) + { + value = next.Value; + return true; + } + next = next.Next; + } + + NOT_FOUND: + value = default(TValue); + return false; + } + + public TValue GetOrAdd(Type key, Func valueFactory) + { + TValue v; + if (TryGetValue(key, out v)) + { + return v; + } + + TryAddInternal(key, valueFactory, out v); + return v; + } + + static int CalculateCapacity(int collectionSize, float loadFactor) + { + var initialCapacity = (int)(((float)collectionSize) / loadFactor); + var capacity = 1; + while (capacity < initialCapacity) + { + capacity <<= 1; + } + + if (capacity < 8) + { + return 8; + } + + return capacity; + } + + static void VolatileWrite(ref Entry location, Entry value) + { +#if NETSTANDARD + System.Threading.Volatile.Write(ref location, value); +#elif UNITY_WSA || NET_4_6 + System.Threading.Volatile.Write(ref location, value); +#else + System.Threading.Thread.MemoryBarrier(); + location = value; +#endif + } + + static void VolatileWrite(ref Entry[] location, Entry[] value) + { +#if NETSTANDARD + System.Threading.Volatile.Write(ref location, value); +#elif UNITY_WSA || NET_4_6 + System.Threading.Volatile.Write(ref location, value); +#else + System.Threading.Thread.MemoryBarrier(); + location = value; +#endif + } + + class Entry + { + public Type Key; + public TValue Value; + public int Hash; + public Entry Next; + + // debug only + public override string ToString() + { + return Key + "(" + Count() + ")"; + } + + int Count() + { + var count = 1; + var n = this; + while (n.Next != null) + { + count++; + n = n.Next; + } + return count; + } + } + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/TinyJsonReader.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/TinyJsonReader.cs index 3f4302c8a..1e6a6bc7b 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/TinyJsonReader.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/TinyJsonReader.cs @@ -1,355 +1,355 @@ -using System; -using System.Globalization; -using System.IO; -using System.Text; - -namespace MessagePack -{ - // simple, tiny JSON reader for MessagePackSerializer.FromJson. - // this is simple, compact and enough fast but not optimized extremely. - - internal enum TinyJsonToken - { - None, - StartObject, // { - EndObject, // } - StartArray, // [ - EndArray, // ] - Number, // -0~9 - String, // "___" - True, // true - False, // false - Null, // null - } - - internal enum ValueType : byte - { - Null, - True, - False, - Double, - Long, - ULong, - Decimal, - String - } - - internal class TinyJsonException : Exception - { - public TinyJsonException(string message) : base(message) - { - - } - } - - internal class TinyJsonReader : IDisposable - { - readonly TextReader reader; - readonly bool disposeInnerReader; - StringBuilder reusableBuilder; - - public TinyJsonToken TokenType { get; private set; } - public ValueType ValueType { get; private set; } - public double DoubleValue { get; private set; } - public long LongValue { get; private set; } - public ulong ULongValue { get; private set; } - public decimal DecimalValue { get; private set; } - public string StringValue { get; private set; } - - public TinyJsonReader(TextReader reader, bool disposeInnerReader = true) - { - this.reader = reader; - this.disposeInnerReader = disposeInnerReader; - } - - public bool Read() - { - ReadNextToken(); - ReadValue(); - return TokenType != TinyJsonToken.None; - } - - public void Dispose() - { - if (reader != null && disposeInnerReader) - { - reader.Dispose(); - } - TokenType = TinyJsonToken.None; - ValueType = ValueType.Null; - } - - void SkipWhiteSpace() - { - var c = reader.Peek(); - while (c != -1 && Char.IsWhiteSpace((char)c)) - { - reader.Read(); - c = reader.Peek(); - } - } - - char ReadChar() - { - return (char)reader.Read(); - } - - static bool IsWordBreak(char c) - { - switch (c) - { - case ' ': - case '{': - case '}': - case '[': - case ']': - case ',': - case ':': - case '\"': - return true; - default: - return false; - } - } - - void ReadNextToken() - { - SkipWhiteSpace(); - - var intChar = reader.Peek(); - if (intChar == -1) - { - TokenType = TinyJsonToken.None; - return; - } - - var c = (char)intChar; - switch (c) - { - case '{': - TokenType = TinyJsonToken.StartObject; - return; - case '}': - TokenType = TinyJsonToken.EndObject; - return; - case '[': - TokenType = TinyJsonToken.StartArray; - return; - case ']': - TokenType = TinyJsonToken.EndArray; - return; - case '"': - TokenType = TinyJsonToken.String; - return; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case '-': - TokenType = TinyJsonToken.Number; - return; - case 't': - TokenType = TinyJsonToken.True; - return; - case 'f': - TokenType = TinyJsonToken.False; - return; - case 'n': - TokenType = TinyJsonToken.Null; - return; - case ',': - case ':': - reader.Read(); - ReadNextToken(); - return; - default: - throw new TinyJsonException("Invalid String:" + c); - } - } - - void ReadValue() - { - ValueType = ValueType.Null; - - switch (TokenType) - { - case TinyJsonToken.None: - break; - case TinyJsonToken.StartObject: - case TinyJsonToken.EndObject: - case TinyJsonToken.StartArray: - case TinyJsonToken.EndArray: - reader.Read(); - break; - case TinyJsonToken.Number: - ReadNumber(); - break; - case TinyJsonToken.String: - ReadString(); - break; - case TinyJsonToken.True: - if (ReadChar() != 't') throw new TinyJsonException("Invalid Token"); - if (ReadChar() != 'r') throw new TinyJsonException("Invalid Token"); - if (ReadChar() != 'u') throw new TinyJsonException("Invalid Token"); - if (ReadChar() != 'e') throw new TinyJsonException("Invalid Token"); - ValueType = ValueType.True; - break; - case TinyJsonToken.False: - if (ReadChar() != 'f') throw new TinyJsonException("Invalid Token"); - if (ReadChar() != 'a') throw new TinyJsonException("Invalid Token"); - if (ReadChar() != 'l') throw new TinyJsonException("Invalid Token"); - if (ReadChar() != 's') throw new TinyJsonException("Invalid Token"); - if (ReadChar() != 'e') throw new TinyJsonException("Invalid Token"); - ValueType = ValueType.False; - break; - case TinyJsonToken.Null: - if (ReadChar() != 'n') throw new TinyJsonException("Invalid Token"); - if (ReadChar() != 'u') throw new TinyJsonException("Invalid Token"); - if (ReadChar() != 'l') throw new TinyJsonException("Invalid Token"); - if (ReadChar() != 'l') throw new TinyJsonException("Invalid Token"); - ValueType = ValueType.Null; - break; - default: - throw new ArgumentException("InvalidTokenState:" + TokenType); - } - } - - void ReadNumber() - { - StringBuilder numberWord; - if (reusableBuilder == null) - { - reusableBuilder = new StringBuilder(); - numberWord = reusableBuilder; - } - else - { - numberWord = reusableBuilder; - numberWord.Length = 0; // Clear - } - - var isDouble = false; - var intChar = reader.Peek(); - while (intChar != -1 && !IsWordBreak((char)intChar)) - { - var c = ReadChar(); - numberWord.Append(c); - if (c == '.' || c == 'e' || c == 'E') isDouble = true; - intChar = reader.Peek(); - } - - var number = numberWord.ToString(); - if (isDouble) - { - double parsedDouble; - Double.TryParse(number, NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite | NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands | NumberStyles.AllowExponent, System.Globalization.CultureInfo.InvariantCulture, out parsedDouble); - ValueType = ValueType.Double; - DoubleValue = parsedDouble; - } - else - { - long parsedInt; - if (Int64.TryParse(number, NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out parsedInt)) - { - ValueType = ValueType.Long; - LongValue = parsedInt; - return; - } - - ulong parsedULong; - if (ulong.TryParse(number, NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out parsedULong)) - { - ValueType = ValueType.ULong; - ULongValue = parsedULong; - return; - } - - Decimal parsedDecimal; - if (decimal.TryParse(number, NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture, out parsedDecimal)) - { - ValueType = ValueType.Decimal; - DecimalValue = parsedDecimal; - return; - } - } - } - - void ReadString() - { - reader.Read(); // skip ["] - - StringBuilder sb; - if (reusableBuilder == null) - { - reusableBuilder = new StringBuilder(); - sb = reusableBuilder; - } - else - { - sb = reusableBuilder; - sb.Length = 0; // Clear - } - - while (true) - { - if (reader.Peek() == -1) throw new TinyJsonException("Invalid Json String"); - - var c = ReadChar(); - switch (c) - { - case '"': // endtoken - goto END; - case '\\': // escape character - if (reader.Peek() == -1) throw new TinyJsonException("Invalid Json String"); - - c = ReadChar(); - switch (c) - { - case '"': - case '\\': - case '/': - sb.Append(c); - break; - case 'b': - sb.Append('\b'); - break; - case 'f': - sb.Append('\f'); - break; - case 'n': - sb.Append('\n'); - break; - case 'r': - sb.Append('\r'); - break; - case 't': - sb.Append('\t'); - break; - case 'u': - var hex = new char[4]; - hex[0] = ReadChar(); - hex[1] = ReadChar(); - hex[2] = ReadChar(); - hex[3] = ReadChar(); - sb.Append((char)Convert.ToInt32(new string(hex), 16)); - break; - } - break; - default: // string - sb.Append(c); - break; - } - } - - END: - ValueType = ValueType.String; - StringValue = sb.ToString(); - } - } +using System; +using System.Globalization; +using System.IO; +using System.Text; + +namespace MessagePack +{ + // simple, tiny JSON reader for MessagePackSerializer.FromJson. + // this is simple, compact and enough fast but not optimized extremely. + + internal enum TinyJsonToken + { + None, + StartObject, // { + EndObject, // } + StartArray, // [ + EndArray, // ] + Number, // -0~9 + String, // "___" + True, // true + False, // false + Null, // null + } + + internal enum ValueType : byte + { + Null, + True, + False, + Double, + Long, + ULong, + Decimal, + String + } + + internal class TinyJsonException : Exception + { + public TinyJsonException(string message) : base(message) + { + + } + } + + internal class TinyJsonReader : IDisposable + { + readonly TextReader reader; + readonly bool disposeInnerReader; + StringBuilder reusableBuilder; + + public TinyJsonToken TokenType { get; private set; } + public ValueType ValueType { get; private set; } + public double DoubleValue { get; private set; } + public long LongValue { get; private set; } + public ulong ULongValue { get; private set; } + public decimal DecimalValue { get; private set; } + public string StringValue { get; private set; } + + public TinyJsonReader(TextReader reader, bool disposeInnerReader = true) + { + this.reader = reader; + this.disposeInnerReader = disposeInnerReader; + } + + public bool Read() + { + ReadNextToken(); + ReadValue(); + return TokenType != TinyJsonToken.None; + } + + public void Dispose() + { + if (reader != null && disposeInnerReader) + { + reader.Dispose(); + } + TokenType = TinyJsonToken.None; + ValueType = ValueType.Null; + } + + void SkipWhiteSpace() + { + var c = reader.Peek(); + while (c != -1 && Char.IsWhiteSpace((char)c)) + { + reader.Read(); + c = reader.Peek(); + } + } + + char ReadChar() + { + return (char)reader.Read(); + } + + static bool IsWordBreak(char c) + { + switch (c) + { + case ' ': + case '{': + case '}': + case '[': + case ']': + case ',': + case ':': + case '\"': + return true; + default: + return false; + } + } + + void ReadNextToken() + { + SkipWhiteSpace(); + + var intChar = reader.Peek(); + if (intChar == -1) + { + TokenType = TinyJsonToken.None; + return; + } + + var c = (char)intChar; + switch (c) + { + case '{': + TokenType = TinyJsonToken.StartObject; + return; + case '}': + TokenType = TinyJsonToken.EndObject; + return; + case '[': + TokenType = TinyJsonToken.StartArray; + return; + case ']': + TokenType = TinyJsonToken.EndArray; + return; + case '"': + TokenType = TinyJsonToken.String; + return; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + TokenType = TinyJsonToken.Number; + return; + case 't': + TokenType = TinyJsonToken.True; + return; + case 'f': + TokenType = TinyJsonToken.False; + return; + case 'n': + TokenType = TinyJsonToken.Null; + return; + case ',': + case ':': + reader.Read(); + ReadNextToken(); + return; + default: + throw new TinyJsonException("Invalid String:" + c); + } + } + + void ReadValue() + { + ValueType = ValueType.Null; + + switch (TokenType) + { + case TinyJsonToken.None: + break; + case TinyJsonToken.StartObject: + case TinyJsonToken.EndObject: + case TinyJsonToken.StartArray: + case TinyJsonToken.EndArray: + reader.Read(); + break; + case TinyJsonToken.Number: + ReadNumber(); + break; + case TinyJsonToken.String: + ReadString(); + break; + case TinyJsonToken.True: + if (ReadChar() != 't') throw new TinyJsonException("Invalid Token"); + if (ReadChar() != 'r') throw new TinyJsonException("Invalid Token"); + if (ReadChar() != 'u') throw new TinyJsonException("Invalid Token"); + if (ReadChar() != 'e') throw new TinyJsonException("Invalid Token"); + ValueType = ValueType.True; + break; + case TinyJsonToken.False: + if (ReadChar() != 'f') throw new TinyJsonException("Invalid Token"); + if (ReadChar() != 'a') throw new TinyJsonException("Invalid Token"); + if (ReadChar() != 'l') throw new TinyJsonException("Invalid Token"); + if (ReadChar() != 's') throw new TinyJsonException("Invalid Token"); + if (ReadChar() != 'e') throw new TinyJsonException("Invalid Token"); + ValueType = ValueType.False; + break; + case TinyJsonToken.Null: + if (ReadChar() != 'n') throw new TinyJsonException("Invalid Token"); + if (ReadChar() != 'u') throw new TinyJsonException("Invalid Token"); + if (ReadChar() != 'l') throw new TinyJsonException("Invalid Token"); + if (ReadChar() != 'l') throw new TinyJsonException("Invalid Token"); + ValueType = ValueType.Null; + break; + default: + throw new ArgumentException("InvalidTokenState:" + TokenType); + } + } + + void ReadNumber() + { + StringBuilder numberWord; + if (reusableBuilder == null) + { + reusableBuilder = new StringBuilder(); + numberWord = reusableBuilder; + } + else + { + numberWord = reusableBuilder; + numberWord.Length = 0; // Clear + } + + var isDouble = false; + var intChar = reader.Peek(); + while (intChar != -1 && !IsWordBreak((char)intChar)) + { + var c = ReadChar(); + numberWord.Append(c); + if (c == '.' || c == 'e' || c == 'E') isDouble = true; + intChar = reader.Peek(); + } + + var number = numberWord.ToString(); + if (isDouble) + { + double parsedDouble; + Double.TryParse(number, NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite | NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands | NumberStyles.AllowExponent, System.Globalization.CultureInfo.InvariantCulture, out parsedDouble); + ValueType = ValueType.Double; + DoubleValue = parsedDouble; + } + else + { + long parsedInt; + if (Int64.TryParse(number, NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out parsedInt)) + { + ValueType = ValueType.Long; + LongValue = parsedInt; + return; + } + + ulong parsedULong; + if (ulong.TryParse(number, NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out parsedULong)) + { + ValueType = ValueType.ULong; + ULongValue = parsedULong; + return; + } + + Decimal parsedDecimal; + if (decimal.TryParse(number, NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture, out parsedDecimal)) + { + ValueType = ValueType.Decimal; + DecimalValue = parsedDecimal; + return; + } + } + } + + void ReadString() + { + reader.Read(); // skip ["] + + StringBuilder sb; + if (reusableBuilder == null) + { + reusableBuilder = new StringBuilder(); + sb = reusableBuilder; + } + else + { + sb = reusableBuilder; + sb.Length = 0; // Clear + } + + while (true) + { + if (reader.Peek() == -1) throw new TinyJsonException("Invalid Json String"); + + var c = ReadChar(); + switch (c) + { + case '"': // endtoken + goto END; + case '\\': // escape character + if (reader.Peek() == -1) throw new TinyJsonException("Invalid Json String"); + + c = ReadChar(); + switch (c) + { + case '"': + case '\\': + case '/': + sb.Append(c); + break; + case 'b': + sb.Append('\b'); + break; + case 'f': + sb.Append('\f'); + break; + case 'n': + sb.Append('\n'); + break; + case 'r': + sb.Append('\r'); + break; + case 't': + sb.Append('\t'); + break; + case 'u': + var hex = new char[4]; + hex[0] = ReadChar(); + hex[1] = ReadChar(); + hex[2] = ReadChar(); + hex[3] = ReadChar(); + sb.Append((char)Convert.ToInt32(new string(hex), 16)); + break; + } + break; + default: // string + sb.Append(c); + break; + } + } + + END: + ValueType = ValueType.String; + StringValue = sb.ToString(); + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/UnsafeMemory.Low.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/UnsafeMemory.Low.cs index 2027994a7..b5184d2cc 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/UnsafeMemory.Low.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/UnsafeMemory.Low.cs @@ -1,167 +1,167 @@ -#if NETSTANDARD - -using System; -using System.Runtime.CompilerServices; - -namespace MessagePack.Internal -{ - // for string key property name write optimization. - - public static class UnsafeMemory - { - public static readonly bool Is32Bit = (IntPtr.Size == 4); - } - - public static partial class UnsafeMemory32 - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw1(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(byte*)pDst = *(byte*)pSrc; - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw2(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(short*)pDst = *(short*)pSrc; - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw3(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(byte*)pDst = *(byte*)pSrc; - *(short*)(pDst + 1) = *(short*)(pSrc + 1); - } - - return src.Length; - } - } - - public static partial class UnsafeMemory64 - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw1(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(byte*)pDst = *(byte*)pSrc; - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw2(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(short*)pDst = *(short*)pSrc; - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw3(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(byte*)pDst = *(byte*)pSrc; - *(short*)(pDst + 1) = *(short*)(pSrc + 1); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw4(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw5(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 1) = *(int*)(pSrc + 1); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw6(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 2) = *(int*)(pSrc + 2); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw7(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 3) = *(int*)(pSrc + 3); - } - - return src.Length; - } - } -} - +#if NETSTANDARD + +using System; +using System.Runtime.CompilerServices; + +namespace MessagePack.Internal +{ + // for string key property name write optimization. + + public static class UnsafeMemory + { + public static readonly bool Is32Bit = (IntPtr.Size == 4); + } + + public static partial class UnsafeMemory32 + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw1(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(byte*)pDst = *(byte*)pSrc; + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw2(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(short*)pDst = *(short*)pSrc; + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw3(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(byte*)pDst = *(byte*)pSrc; + *(short*)(pDst + 1) = *(short*)(pSrc + 1); + } + + return src.Length; + } + } + + public static partial class UnsafeMemory64 + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw1(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(byte*)pDst = *(byte*)pSrc; + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw2(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(short*)pDst = *(short*)pSrc; + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw3(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(byte*)pDst = *(byte*)pSrc; + *(short*)(pDst + 1) = *(short*)(pSrc + 1); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw4(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw5(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 1) = *(int*)(pSrc + 1); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw6(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 2) = *(int*)(pSrc + 2); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw7(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 3) = *(int*)(pSrc + 3); + } + + return src.Length; + } + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/UnsafeMemory.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/UnsafeMemory.cs index 9f2a82afd..5557218b9 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/UnsafeMemory.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Internal/UnsafeMemory.cs @@ -1,894 +1,894 @@ -#if NETSTANDARD - -using System.Runtime.CompilerServices; - -namespace MessagePack.Internal -{ - public static partial class UnsafeMemory32 - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw4(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw5(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 1) = *(int*)(pSrc + 1); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw6(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 2) = *(int*)(pSrc + 2); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw7(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 3) = *(int*)(pSrc + 3); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw8(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw9(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 5) = *(int*)(pSrc + 5); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw10(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 6) = *(int*)(pSrc + 6); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw11(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 7) = *(int*)(pSrc + 7); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw12(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw13(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 9) = *(int*)(pSrc + 9); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw14(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 10) = *(int*)(pSrc + 10); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw15(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 11) = *(int*)(pSrc + 11); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw16(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw17(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 13) = *(int*)(pSrc + 13); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw18(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 14) = *(int*)(pSrc + 14); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw19(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 15) = *(int*)(pSrc + 15); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw20(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 16) = *(int*)(pSrc + 16); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw21(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 16) = *(int*)(pSrc + 16); - *(int*)(pDst + 17) = *(int*)(pSrc + 17); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw22(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 16) = *(int*)(pSrc + 16); - *(int*)(pDst + 18) = *(int*)(pSrc + 18); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw23(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 16) = *(int*)(pSrc + 16); - *(int*)(pDst + 19) = *(int*)(pSrc + 19); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw24(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 16) = *(int*)(pSrc + 16); - *(int*)(pDst + 20) = *(int*)(pSrc + 20); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw25(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 16) = *(int*)(pSrc + 16); - *(int*)(pDst + 20) = *(int*)(pSrc + 20); - *(int*)(pDst + 21) = *(int*)(pSrc + 21); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw26(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 16) = *(int*)(pSrc + 16); - *(int*)(pDst + 20) = *(int*)(pSrc + 20); - *(int*)(pDst + 22) = *(int*)(pSrc + 22); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw27(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 16) = *(int*)(pSrc + 16); - *(int*)(pDst + 20) = *(int*)(pSrc + 20); - *(int*)(pDst + 23) = *(int*)(pSrc + 23); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw28(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 16) = *(int*)(pSrc + 16); - *(int*)(pDst + 20) = *(int*)(pSrc + 20); - *(int*)(pDst + 24) = *(int*)(pSrc + 24); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw29(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 16) = *(int*)(pSrc + 16); - *(int*)(pDst + 20) = *(int*)(pSrc + 20); - *(int*)(pDst + 24) = *(int*)(pSrc + 24); - *(int*)(pDst + 25) = *(int*)(pSrc + 25); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw30(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 16) = *(int*)(pSrc + 16); - *(int*)(pDst + 20) = *(int*)(pSrc + 20); - *(int*)(pDst + 24) = *(int*)(pSrc + 24); - *(int*)(pDst + 26) = *(int*)(pSrc + 26); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw31(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(int*)(pDst + 0) = *(int*)(pSrc + 0); - *(int*)(pDst + 4) = *(int*)(pSrc + 4); - *(int*)(pDst + 8) = *(int*)(pSrc + 8); - *(int*)(pDst + 12) = *(int*)(pSrc + 12); - *(int*)(pDst + 16) = *(int*)(pSrc + 16); - *(int*)(pDst + 20) = *(int*)(pSrc + 20); - *(int*)(pDst + 24) = *(int*)(pSrc + 24); - *(int*)(pDst + 27) = *(int*)(pSrc + 27); - } - - return src.Length; - } - - } - - public static partial class UnsafeMemory64 - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw8(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw9(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 1) = *(long*)(pSrc + 1); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw10(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 2) = *(long*)(pSrc + 2); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw11(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 3) = *(long*)(pSrc + 3); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw12(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 4) = *(long*)(pSrc + 4); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw13(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 5) = *(long*)(pSrc + 5); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw14(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 6) = *(long*)(pSrc + 6); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw15(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 7) = *(long*)(pSrc + 7); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw16(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw17(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 9) = *(long*)(pSrc + 9); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw18(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 10) = *(long*)(pSrc + 10); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw19(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 11) = *(long*)(pSrc + 11); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw20(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 12) = *(long*)(pSrc + 12); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw21(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 13) = *(long*)(pSrc + 13); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw22(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 14) = *(long*)(pSrc + 14); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw23(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 15) = *(long*)(pSrc + 15); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw24(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 16) = *(long*)(pSrc + 16); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw25(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 16) = *(long*)(pSrc + 16); - *(long*)(pDst + 17) = *(long*)(pSrc + 17); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw26(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 16) = *(long*)(pSrc + 16); - *(long*)(pDst + 18) = *(long*)(pSrc + 18); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw27(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 16) = *(long*)(pSrc + 16); - *(long*)(pDst + 19) = *(long*)(pSrc + 19); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw28(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 16) = *(long*)(pSrc + 16); - *(long*)(pDst + 20) = *(long*)(pSrc + 20); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw29(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 16) = *(long*)(pSrc + 16); - *(long*)(pDst + 21) = *(long*)(pSrc + 21); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw30(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 16) = *(long*)(pSrc + 16); - *(long*)(pDst + 22) = *(long*)(pSrc + 22); - } - - return src.Length; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe int WriteRaw31(ref byte[] dst, int dstOffset, byte[] src) - { - MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); - - fixed (byte* pSrc = &src[0]) - fixed (byte* pDst = &dst[dstOffset]) - { - *(long*)(pDst + 0) = *(long*)(pSrc + 0); - *(long*)(pDst + 8) = *(long*)(pSrc + 8); - *(long*)(pDst + 16) = *(long*)(pSrc + 16); - *(long*)(pDst + 23) = *(long*)(pSrc + 23); - } - - return src.Length; - } - - } -} - +#if NETSTANDARD + +using System.Runtime.CompilerServices; + +namespace MessagePack.Internal +{ + public static partial class UnsafeMemory32 + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw4(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw5(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 1) = *(int*)(pSrc + 1); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw6(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 2) = *(int*)(pSrc + 2); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw7(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 3) = *(int*)(pSrc + 3); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw8(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw9(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 5) = *(int*)(pSrc + 5); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw10(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 6) = *(int*)(pSrc + 6); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw11(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 7) = *(int*)(pSrc + 7); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw12(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw13(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 9) = *(int*)(pSrc + 9); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw14(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 10) = *(int*)(pSrc + 10); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw15(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 11) = *(int*)(pSrc + 11); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw16(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw17(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 13) = *(int*)(pSrc + 13); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw18(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 14) = *(int*)(pSrc + 14); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw19(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 15) = *(int*)(pSrc + 15); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw20(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 16) = *(int*)(pSrc + 16); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw21(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 16) = *(int*)(pSrc + 16); + *(int*)(pDst + 17) = *(int*)(pSrc + 17); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw22(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 16) = *(int*)(pSrc + 16); + *(int*)(pDst + 18) = *(int*)(pSrc + 18); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw23(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 16) = *(int*)(pSrc + 16); + *(int*)(pDst + 19) = *(int*)(pSrc + 19); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw24(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 16) = *(int*)(pSrc + 16); + *(int*)(pDst + 20) = *(int*)(pSrc + 20); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw25(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 16) = *(int*)(pSrc + 16); + *(int*)(pDst + 20) = *(int*)(pSrc + 20); + *(int*)(pDst + 21) = *(int*)(pSrc + 21); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw26(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 16) = *(int*)(pSrc + 16); + *(int*)(pDst + 20) = *(int*)(pSrc + 20); + *(int*)(pDst + 22) = *(int*)(pSrc + 22); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw27(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 16) = *(int*)(pSrc + 16); + *(int*)(pDst + 20) = *(int*)(pSrc + 20); + *(int*)(pDst + 23) = *(int*)(pSrc + 23); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw28(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 16) = *(int*)(pSrc + 16); + *(int*)(pDst + 20) = *(int*)(pSrc + 20); + *(int*)(pDst + 24) = *(int*)(pSrc + 24); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw29(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 16) = *(int*)(pSrc + 16); + *(int*)(pDst + 20) = *(int*)(pSrc + 20); + *(int*)(pDst + 24) = *(int*)(pSrc + 24); + *(int*)(pDst + 25) = *(int*)(pSrc + 25); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw30(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 16) = *(int*)(pSrc + 16); + *(int*)(pDst + 20) = *(int*)(pSrc + 20); + *(int*)(pDst + 24) = *(int*)(pSrc + 24); + *(int*)(pDst + 26) = *(int*)(pSrc + 26); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw31(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(int*)(pDst + 0) = *(int*)(pSrc + 0); + *(int*)(pDst + 4) = *(int*)(pSrc + 4); + *(int*)(pDst + 8) = *(int*)(pSrc + 8); + *(int*)(pDst + 12) = *(int*)(pSrc + 12); + *(int*)(pDst + 16) = *(int*)(pSrc + 16); + *(int*)(pDst + 20) = *(int*)(pSrc + 20); + *(int*)(pDst + 24) = *(int*)(pSrc + 24); + *(int*)(pDst + 27) = *(int*)(pSrc + 27); + } + + return src.Length; + } + + } + + public static partial class UnsafeMemory64 + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw8(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw9(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 1) = *(long*)(pSrc + 1); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw10(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 2) = *(long*)(pSrc + 2); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw11(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 3) = *(long*)(pSrc + 3); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw12(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 4) = *(long*)(pSrc + 4); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw13(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 5) = *(long*)(pSrc + 5); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw14(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 6) = *(long*)(pSrc + 6); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw15(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 7) = *(long*)(pSrc + 7); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw16(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw17(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 9) = *(long*)(pSrc + 9); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw18(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 10) = *(long*)(pSrc + 10); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw19(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 11) = *(long*)(pSrc + 11); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw20(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 12) = *(long*)(pSrc + 12); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw21(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 13) = *(long*)(pSrc + 13); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw22(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 14) = *(long*)(pSrc + 14); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw23(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 15) = *(long*)(pSrc + 15); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw24(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 16) = *(long*)(pSrc + 16); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw25(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 16) = *(long*)(pSrc + 16); + *(long*)(pDst + 17) = *(long*)(pSrc + 17); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw26(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 16) = *(long*)(pSrc + 16); + *(long*)(pDst + 18) = *(long*)(pSrc + 18); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw27(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 16) = *(long*)(pSrc + 16); + *(long*)(pDst + 19) = *(long*)(pSrc + 19); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw28(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 16) = *(long*)(pSrc + 16); + *(long*)(pDst + 20) = *(long*)(pSrc + 20); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw29(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 16) = *(long*)(pSrc + 16); + *(long*)(pDst + 21) = *(long*)(pSrc + 21); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw30(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 16) = *(long*)(pSrc + 16); + *(long*)(pDst + 22) = *(long*)(pSrc + 22); + } + + return src.Length; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int WriteRaw31(ref byte[] dst, int dstOffset, byte[] src) + { + MessagePackBinary.EnsureCapacity(ref dst, dstOffset, src.Length); + + fixed (byte* pSrc = &src[0]) + fixed (byte* pDst = &dst[dstOffset]) + { + *(long*)(pDst + 0) = *(long*)(pSrc + 0); + *(long*)(pDst + 8) = *(long*)(pSrc + 8); + *(long*)(pDst + 16) = *(long*)(pSrc + 16); + *(long*)(pDst + 23) = *(long*)(pSrc + 23); + } + + return src.Length; + } + + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Helper.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Helper.cs index 25b8a378d..e91bd7294 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Helper.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Helper.cs @@ -1,115 +1,115 @@ -using System; - -namespace MessagePack.LZ4 -{ - public static partial class LZ4Codec - { -#if NETSTANDARD - - public static int Encode(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) - { - if (IntPtr.Size == 4) - { - return LZ4Codec.Encode32Unsafe(input, inputOffset, inputLength, output, outputOffset, outputLength); - } - else - { - return LZ4Codec.Encode64Unsafe(input, inputOffset, inputLength, output, outputOffset, outputLength); - } - } - - public static int Decode(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) - { - if (IntPtr.Size == 4) - { - return LZ4Codec.Decode32Unsafe(input, inputOffset, inputLength, output, outputOffset, outputLength); - } - else - { - return LZ4Codec.Decode64Unsafe(input, inputOffset, inputLength, output, outputOffset, outputLength); - } - } - -#else - - // use 'Safe' code for Unity because in IL2CPP gots strange behaviour. - - public static int Encode(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) - { - if (IntPtr.Size == 4) - { - return LZ4Codec.Encode32Safe(input, inputOffset, inputLength, output, outputOffset, outputLength); - } - else - { - return LZ4Codec.Encode64Safe(input, inputOffset, inputLength, output, outputOffset, outputLength); - } - } - - public static int Decode(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) - { - if (IntPtr.Size == 4) - { - return LZ4Codec.Decode32Safe(input, inputOffset, inputLength, output, outputOffset, outputLength); - } - else - { - return LZ4Codec.Decode64Safe(input, inputOffset, inputLength, output, outputOffset, outputLength); - } - } - -#endif - - internal static class HashTablePool - { - [ThreadStatic] - static ushort[] ushortPool; - - [ThreadStatic] - static uint[] uintPool; - - [ThreadStatic] - static int[] intPool; - - public static ushort[] GetUShortHashTablePool() - { - if (ushortPool == null) - { - ushortPool = new ushort[HASH64K_TABLESIZE]; - } - else - { - Array.Clear(ushortPool, 0, ushortPool.Length); - } - return ushortPool; - } - - public static uint[] GetUIntHashTablePool() - { - if (uintPool == null) - { - uintPool = new uint[HASH_TABLESIZE]; - } - else - { - Array.Clear(uintPool, 0, uintPool.Length); - } - return uintPool; - } - - public static int[] GetIntHashTablePool() - { - if (intPool == null) - { - intPool = new int[HASH_TABLESIZE]; - } - else - { - Array.Clear(intPool, 0, intPool.Length); - } - return intPool; - } - } - } -} - +using System; + +namespace MessagePack.LZ4 +{ + public static partial class LZ4Codec + { +#if NETSTANDARD + + public static int Encode(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) + { + if (IntPtr.Size == 4) + { + return LZ4Codec.Encode32Unsafe(input, inputOffset, inputLength, output, outputOffset, outputLength); + } + else + { + return LZ4Codec.Encode64Unsafe(input, inputOffset, inputLength, output, outputOffset, outputLength); + } + } + + public static int Decode(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) + { + if (IntPtr.Size == 4) + { + return LZ4Codec.Decode32Unsafe(input, inputOffset, inputLength, output, outputOffset, outputLength); + } + else + { + return LZ4Codec.Decode64Unsafe(input, inputOffset, inputLength, output, outputOffset, outputLength); + } + } + +#else + + // use 'Safe' code for Unity because in IL2CPP gots strange behaviour. + + public static int Encode(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) + { + if (IntPtr.Size == 4) + { + return LZ4Codec.Encode32Safe(input, inputOffset, inputLength, output, outputOffset, outputLength); + } + else + { + return LZ4Codec.Encode64Safe(input, inputOffset, inputLength, output, outputOffset, outputLength); + } + } + + public static int Decode(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) + { + if (IntPtr.Size == 4) + { + return LZ4Codec.Decode32Safe(input, inputOffset, inputLength, output, outputOffset, outputLength); + } + else + { + return LZ4Codec.Decode64Safe(input, inputOffset, inputLength, output, outputOffset, outputLength); + } + } + +#endif + + internal static class HashTablePool + { + [ThreadStatic] + static ushort[] ushortPool; + + [ThreadStatic] + static uint[] uintPool; + + [ThreadStatic] + static int[] intPool; + + public static ushort[] GetUShortHashTablePool() + { + if (ushortPool == null) + { + ushortPool = new ushort[HASH64K_TABLESIZE]; + } + else + { + Array.Clear(ushortPool, 0, ushortPool.Length); + } + return ushortPool; + } + + public static uint[] GetUIntHashTablePool() + { + if (uintPool == null) + { + uintPool = new uint[HASH_TABLESIZE]; + } + else + { + Array.Clear(uintPool, 0, uintPool.Length); + } + return uintPool; + } + + public static int[] GetIntHashTablePool() + { + if (intPool == null) + { + intPool = new int[HASH_TABLESIZE]; + } + else + { + Array.Clear(intPool, 0, intPool.Length); + } + return intPool; + } + } + } +} + diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Safe.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Safe.cs index a17d8ff96..639d30ce1 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Safe.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Safe.cs @@ -1,437 +1,437 @@ -#region license - -/* -Copyright (c) 2013, Milosz Krajewski -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided -that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions - and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions - and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#endregion - -using System; -using System.Diagnostics; - -// ReSharper disable CheckNamespace -// ReSharper disable InconsistentNaming - -namespace MessagePack.LZ4 -{ - /// Safe LZ4 codec. - public static partial class LZ4Codec - { - #region Helper - - // ReSharper disable UnusedParameter.Local - - [Conditional("DEBUG")] - private static void Assert(bool condition, string errorMessage) - { - if (!condition) throw new ArgumentException(errorMessage); - Debug.Assert(condition, errorMessage); - } - - // ReSharper restore UnusedParameter.Local - - #endregion - - #region Byte manipulation - - // ReSharper disable RedundantCast - - internal static void Poke2(byte[] buffer, int offset, ushort value) - { - buffer[offset] = (byte)value; - buffer[offset + 1] = (byte)(value >> 8); - } - - internal static ushort Peek2(byte[] buffer, int offset) - { - // NOTE: It's faster than BitConverter.ToUInt16 (suprised? me too) - return (ushort)(((uint)buffer[offset]) | ((uint)buffer[offset + 1] << 8)); - } - - internal static uint Peek4(byte[] buffer, int offset) - { - // NOTE: It's faster than BitConverter.ToUInt32 (suprised? me too) - return - ((uint)buffer[offset]) | - ((uint)buffer[offset + 1] << 8) | - ((uint)buffer[offset + 2] << 16) | - ((uint)buffer[offset + 3] << 24); - } - - private static uint Xor4(byte[] buffer, int offset1, int offset2) - { - // return Peek4(buffer, offset1) ^ Peek4(buffer, offset2); - var value1 = - ((uint)buffer[offset1]) | - ((uint)buffer[offset1 + 1] << 8) | - ((uint)buffer[offset1 + 2] << 16) | - ((uint)buffer[offset1 + 3] << 24); - var value2 = - ((uint)buffer[offset2]) | - ((uint)buffer[offset2 + 1] << 8) | - ((uint)buffer[offset2 + 2] << 16) | - ((uint)buffer[offset2 + 3] << 24); - return value1 ^ value2; - } - - private static ulong Xor8(byte[] buffer, int offset1, int offset2) - { - // return Peek8(buffer, offset1) ^ Peek8(buffer, offset2); - var value1 = - ((ulong)buffer[offset1]) | - ((ulong)buffer[offset1 + 1] << 8) | - ((ulong)buffer[offset1 + 2] << 16) | - ((ulong)buffer[offset1 + 3] << 24) | - ((ulong)buffer[offset1 + 4] << 32) | - ((ulong)buffer[offset1 + 5] << 40) | - ((ulong)buffer[offset1 + 6] << 48) | - ((ulong)buffer[offset1 + 7] << 56); - var value2 = - ((ulong)buffer[offset2]) | - ((ulong)buffer[offset2 + 1] << 8) | - ((ulong)buffer[offset2 + 2] << 16) | - ((ulong)buffer[offset2 + 3] << 24) | - ((ulong)buffer[offset2 + 4] << 32) | - ((ulong)buffer[offset2 + 5] << 40) | - ((ulong)buffer[offset2 + 6] << 48) | - ((ulong)buffer[offset2 + 7] << 56); - return value1 ^ value2; - } - - private static bool Equal2(byte[] buffer, int offset1, int offset2) - { - // return Peek2(buffer, offset1) == Peek2(buffer, offset2); - if (buffer[offset1] != buffer[offset2]) return false; - return buffer[offset1 + 1] == buffer[offset2 + 1]; - } - - private static bool Equal4(byte[] buffer, int offset1, int offset2) - { - // return Peek4(buffer, offset1) == Peek4(buffer, offset2); - if (buffer[offset1] != buffer[offset2]) return false; - if (buffer[offset1 + 1] != buffer[offset2 + 1]) return false; - if (buffer[offset1 + 2] != buffer[offset2 + 2]) return false; - return buffer[offset1 + 3] == buffer[offset2 + 3]; - } - - // ReSharper restore RedundantCast - - #endregion - - #region Byte block copy - - private static void Copy4(byte[] buf, int src, int dst) - { - Assert(dst > src, "Copying backwards is not implemented"); - buf[dst + 3] = buf[src + 3]; - buf[dst + 2] = buf[src + 2]; - buf[dst + 1] = buf[src + 1]; - buf[dst] = buf[src]; - } - - private static void Copy8(byte[] buf, int src, int dst) - { - Assert(dst > src, "Copying backwards is not implemented"); - buf[dst + 7] = buf[src + 7]; - buf[dst + 6] = buf[src + 6]; - buf[dst + 5] = buf[src + 5]; - buf[dst + 4] = buf[src + 4]; - buf[dst + 3] = buf[src + 3]; - buf[dst + 2] = buf[src + 2]; - buf[dst + 1] = buf[src + 1]; - buf[dst] = buf[src]; - } - - private static void BlockCopy(byte[] src, int src_0, byte[] dst, int dst_0, int len) - { - Assert(src != dst, "BlockCopy does not handle copying to the same buffer"); - - if (len >= BLOCK_COPY_LIMIT) - { - Buffer.BlockCopy(src, src_0, dst, dst_0, len); - } - else - { - while (len >= 8) - { - dst[dst_0] = src[src_0]; - dst[dst_0 + 1] = src[src_0 + 1]; - dst[dst_0 + 2] = src[src_0 + 2]; - dst[dst_0 + 3] = src[src_0 + 3]; - dst[dst_0 + 4] = src[src_0 + 4]; - dst[dst_0 + 5] = src[src_0 + 5]; - dst[dst_0 + 6] = src[src_0 + 6]; - dst[dst_0 + 7] = src[src_0 + 7]; - len -= 8; - src_0 += 8; - dst_0 += 8; - } - - while (len >= 4) - { - dst[dst_0] = src[src_0]; - dst[dst_0 + 1] = src[src_0 + 1]; - dst[dst_0 + 2] = src[src_0 + 2]; - dst[dst_0 + 3] = src[src_0 + 3]; - len -= 4; - src_0 += 4; - dst_0 += 4; - } - - while (len-- > 0) - { - dst[dst_0++] = src[src_0++]; - } - } - } - - private static int WildCopy(byte[] src, int src_0, byte[] dst, int dst_0, int dst_end) - { - var len = dst_end - dst_0; - - Assert(src != dst, "BlockCopy does not handle copying to the same buffer"); - Assert(len > 0, "Length have to be greater than 0"); - - if (len >= BLOCK_COPY_LIMIT) - { - Buffer.BlockCopy(src, src_0, dst, dst_0, len); - } - else - { - // apparently (tested) this is an overkill - // it seems to be faster without this 8-byte loop - //while (len >= 8) - //{ - // dst[dst_0] = src[src_0]; - // dst[dst_0 + 1] = src[src_0 + 1]; - // dst[dst_0 + 2] = src[src_0 + 2]; - // dst[dst_0 + 3] = src[src_0 + 3]; - // dst[dst_0 + 4] = src[src_0 + 4]; - // dst[dst_0 + 5] = src[src_0 + 5]; - // dst[dst_0 + 6] = src[src_0 + 6]; - // dst[dst_0 + 7] = src[src_0 + 7]; - // len -= 8; src_0 += 8; dst_0 += 8; - //} - - while (len >= 4) - { - dst[dst_0] = src[src_0]; - dst[dst_0 + 1] = src[src_0 + 1]; - dst[dst_0 + 2] = src[src_0 + 2]; - dst[dst_0 + 3] = src[src_0 + 3]; - len -= 4; - src_0 += 4; - dst_0 += 4; - } - - while (len-- > 0) - { - dst[dst_0++] = src[src_0++]; - } - } - - return len; - } - - private static int SecureCopy(byte[] buffer, int src, int dst, int dst_end) - { - var diff = dst - src; - var length = dst_end - dst; - var len = length; - - Assert(diff >= 4, "Target must be at least 4 bytes further than source"); - Assert(BLOCK_COPY_LIMIT > 4, "This method requires BLOCK_COPY_LIMIT > 4"); - Assert(len > 0, "Length have to be greater than 0"); - - if (diff >= BLOCK_COPY_LIMIT) - { - if (diff >= length) - { - Buffer.BlockCopy(buffer, src, buffer, dst, length); - return length; // done - } - - do - { - Buffer.BlockCopy(buffer, src, buffer, dst, diff); - src += diff; - dst += diff; - len -= diff; - } while (len >= diff); - } - - // apparently (tested) this is an overkill - // it seems to be faster without this 8-byte loop - //while (len >= 8) - //{ - // buffer[dst] = buffer[src]; - // buffer[dst + 1] = buffer[src + 1]; - // buffer[dst + 2] = buffer[src + 2]; - // buffer[dst + 3] = buffer[src + 3]; - // buffer[dst + 4] = buffer[src + 4]; - // buffer[dst + 5] = buffer[src + 5]; - // buffer[dst + 6] = buffer[src + 6]; - // buffer[dst + 7] = buffer[src + 7]; - // dst += 8; src += 8; len -= 8; - //} - - while (len >= 4) - { - buffer[dst] = buffer[src]; - buffer[dst + 1] = buffer[src + 1]; - buffer[dst + 2] = buffer[src + 2]; - buffer[dst + 3] = buffer[src + 3]; - dst += 4; - src += 4; - len -= 4; - } - - while (len-- > 0) - { - buffer[dst++] = buffer[src++]; - } - - return length; // done - } - - #endregion - - /// Encodes the specified input. - /// The input. - /// The input offset. - /// Length of the input. - /// The output. - /// The output offset. - /// Length of the output. - /// Number of bytes written. - public static int Encode32Safe( - byte[] input, - int inputOffset, - int inputLength, - byte[] output, - int outputOffset, - int outputLength) - { - CheckArguments(input, inputOffset, inputLength, output, outputOffset, outputLength); - if (outputLength == 0) return 0; - - if (inputLength < LZ4_64KLIMIT) - { - var hashTable = HashTablePool.GetUShortHashTablePool(); - return LZ4_compress64kCtx_safe32(hashTable, input, output, inputOffset, outputOffset, inputLength, outputLength); - } - else - { - var hashTable = HashTablePool.GetIntHashTablePool(); - return LZ4_compressCtx_safe32(hashTable, input, output, inputOffset, outputOffset, inputLength, outputLength); - } - } - - /// Encodes the specified input. - /// The input. - /// The input offset. - /// Length of the input. - /// The output. - /// The output offset. - /// Length of the output. - /// Number of bytes written. - public static int Encode64Safe( - byte[] input, - int inputOffset, - int inputLength, - byte[] output, - int outputOffset, - int outputLength) - { - CheckArguments(input, inputOffset, inputLength, output, outputOffset, outputLength); - if (outputLength == 0) return 0; - - if (inputLength < LZ4_64KLIMIT) - { - var hashTable = HashTablePool.GetUShortHashTablePool(); - return LZ4_compress64kCtx_safe64(hashTable, input, output, inputOffset, outputOffset, inputLength, outputLength); - } - else - { - var hashTable = HashTablePool.GetIntHashTablePool(); - return LZ4_compressCtx_safe64(hashTable, input, output, inputOffset, outputOffset, inputLength, outputLength); - } - } - - /// Decodes the specified input. - /// The input. - /// The input offset. - /// Length of the input. - /// The output. - /// The output offset. - /// Length of the output. - /// Number of bytes written. - public static int Decode32Safe( - byte[] input, - int inputOffset, - int inputLength, - byte[] output, - int outputOffset, - int outputLength) - { - CheckArguments(input, inputOffset, inputLength, output, outputOffset, outputLength); - - if (outputLength == 0) return 0; - - var length = LZ4_uncompress_safe32(input, output, inputOffset, outputOffset, outputLength); - if (length != inputLength) - throw new ArgumentException("LZ4 block is corrupted, or invalid length has been given."); - return outputLength; - } - - /// Decodes the specified input. - /// The input. - /// The input offset. - /// Length of the input. - /// The output. - /// The output offset. - /// Length of the output. - /// Number of bytes written. - public static int Decode64Safe( - byte[] input, - int inputOffset, - int inputLength, - byte[] output, - int outputOffset, - int outputLength) - { - CheckArguments( - input, inputOffset, inputLength, - output, outputOffset, outputLength); - - if (outputLength == 0) return 0; - - var length = LZ4_uncompress_safe64(input, output, inputOffset, outputOffset, outputLength); - if (length != inputLength) - throw new ArgumentException("LZ4 block is corrupted, or invalid length has been given."); - return outputLength; - } - } -} - -// ReSharper restore InconsistentNaming +#region license + +/* +Copyright (c) 2013, Milosz Krajewski +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided +that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions + and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions + and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#endregion + +using System; +using System.Diagnostics; + +// ReSharper disable CheckNamespace +// ReSharper disable InconsistentNaming + +namespace MessagePack.LZ4 +{ + /// Safe LZ4 codec. + public static partial class LZ4Codec + { + #region Helper + + // ReSharper disable UnusedParameter.Local + + [Conditional("DEBUG")] + private static void Assert(bool condition, string errorMessage) + { + if (!condition) throw new ArgumentException(errorMessage); + Debug.Assert(condition, errorMessage); + } + + // ReSharper restore UnusedParameter.Local + + #endregion + + #region Byte manipulation + + // ReSharper disable RedundantCast + + internal static void Poke2(byte[] buffer, int offset, ushort value) + { + buffer[offset] = (byte)value; + buffer[offset + 1] = (byte)(value >> 8); + } + + internal static ushort Peek2(byte[] buffer, int offset) + { + // NOTE: It's faster than BitConverter.ToUInt16 (suprised? me too) + return (ushort)(((uint)buffer[offset]) | ((uint)buffer[offset + 1] << 8)); + } + + internal static uint Peek4(byte[] buffer, int offset) + { + // NOTE: It's faster than BitConverter.ToUInt32 (suprised? me too) + return + ((uint)buffer[offset]) | + ((uint)buffer[offset + 1] << 8) | + ((uint)buffer[offset + 2] << 16) | + ((uint)buffer[offset + 3] << 24); + } + + private static uint Xor4(byte[] buffer, int offset1, int offset2) + { + // return Peek4(buffer, offset1) ^ Peek4(buffer, offset2); + var value1 = + ((uint)buffer[offset1]) | + ((uint)buffer[offset1 + 1] << 8) | + ((uint)buffer[offset1 + 2] << 16) | + ((uint)buffer[offset1 + 3] << 24); + var value2 = + ((uint)buffer[offset2]) | + ((uint)buffer[offset2 + 1] << 8) | + ((uint)buffer[offset2 + 2] << 16) | + ((uint)buffer[offset2 + 3] << 24); + return value1 ^ value2; + } + + private static ulong Xor8(byte[] buffer, int offset1, int offset2) + { + // return Peek8(buffer, offset1) ^ Peek8(buffer, offset2); + var value1 = + ((ulong)buffer[offset1]) | + ((ulong)buffer[offset1 + 1] << 8) | + ((ulong)buffer[offset1 + 2] << 16) | + ((ulong)buffer[offset1 + 3] << 24) | + ((ulong)buffer[offset1 + 4] << 32) | + ((ulong)buffer[offset1 + 5] << 40) | + ((ulong)buffer[offset1 + 6] << 48) | + ((ulong)buffer[offset1 + 7] << 56); + var value2 = + ((ulong)buffer[offset2]) | + ((ulong)buffer[offset2 + 1] << 8) | + ((ulong)buffer[offset2 + 2] << 16) | + ((ulong)buffer[offset2 + 3] << 24) | + ((ulong)buffer[offset2 + 4] << 32) | + ((ulong)buffer[offset2 + 5] << 40) | + ((ulong)buffer[offset2 + 6] << 48) | + ((ulong)buffer[offset2 + 7] << 56); + return value1 ^ value2; + } + + private static bool Equal2(byte[] buffer, int offset1, int offset2) + { + // return Peek2(buffer, offset1) == Peek2(buffer, offset2); + if (buffer[offset1] != buffer[offset2]) return false; + return buffer[offset1 + 1] == buffer[offset2 + 1]; + } + + private static bool Equal4(byte[] buffer, int offset1, int offset2) + { + // return Peek4(buffer, offset1) == Peek4(buffer, offset2); + if (buffer[offset1] != buffer[offset2]) return false; + if (buffer[offset1 + 1] != buffer[offset2 + 1]) return false; + if (buffer[offset1 + 2] != buffer[offset2 + 2]) return false; + return buffer[offset1 + 3] == buffer[offset2 + 3]; + } + + // ReSharper restore RedundantCast + + #endregion + + #region Byte block copy + + private static void Copy4(byte[] buf, int src, int dst) + { + Assert(dst > src, "Copying backwards is not implemented"); + buf[dst + 3] = buf[src + 3]; + buf[dst + 2] = buf[src + 2]; + buf[dst + 1] = buf[src + 1]; + buf[dst] = buf[src]; + } + + private static void Copy8(byte[] buf, int src, int dst) + { + Assert(dst > src, "Copying backwards is not implemented"); + buf[dst + 7] = buf[src + 7]; + buf[dst + 6] = buf[src + 6]; + buf[dst + 5] = buf[src + 5]; + buf[dst + 4] = buf[src + 4]; + buf[dst + 3] = buf[src + 3]; + buf[dst + 2] = buf[src + 2]; + buf[dst + 1] = buf[src + 1]; + buf[dst] = buf[src]; + } + + private static void BlockCopy(byte[] src, int src_0, byte[] dst, int dst_0, int len) + { + Assert(src != dst, "BlockCopy does not handle copying to the same buffer"); + + if (len >= BLOCK_COPY_LIMIT) + { + Buffer.BlockCopy(src, src_0, dst, dst_0, len); + } + else + { + while (len >= 8) + { + dst[dst_0] = src[src_0]; + dst[dst_0 + 1] = src[src_0 + 1]; + dst[dst_0 + 2] = src[src_0 + 2]; + dst[dst_0 + 3] = src[src_0 + 3]; + dst[dst_0 + 4] = src[src_0 + 4]; + dst[dst_0 + 5] = src[src_0 + 5]; + dst[dst_0 + 6] = src[src_0 + 6]; + dst[dst_0 + 7] = src[src_0 + 7]; + len -= 8; + src_0 += 8; + dst_0 += 8; + } + + while (len >= 4) + { + dst[dst_0] = src[src_0]; + dst[dst_0 + 1] = src[src_0 + 1]; + dst[dst_0 + 2] = src[src_0 + 2]; + dst[dst_0 + 3] = src[src_0 + 3]; + len -= 4; + src_0 += 4; + dst_0 += 4; + } + + while (len-- > 0) + { + dst[dst_0++] = src[src_0++]; + } + } + } + + private static int WildCopy(byte[] src, int src_0, byte[] dst, int dst_0, int dst_end) + { + var len = dst_end - dst_0; + + Assert(src != dst, "BlockCopy does not handle copying to the same buffer"); + Assert(len > 0, "Length have to be greater than 0"); + + if (len >= BLOCK_COPY_LIMIT) + { + Buffer.BlockCopy(src, src_0, dst, dst_0, len); + } + else + { + // apparently (tested) this is an overkill + // it seems to be faster without this 8-byte loop + //while (len >= 8) + //{ + // dst[dst_0] = src[src_0]; + // dst[dst_0 + 1] = src[src_0 + 1]; + // dst[dst_0 + 2] = src[src_0 + 2]; + // dst[dst_0 + 3] = src[src_0 + 3]; + // dst[dst_0 + 4] = src[src_0 + 4]; + // dst[dst_0 + 5] = src[src_0 + 5]; + // dst[dst_0 + 6] = src[src_0 + 6]; + // dst[dst_0 + 7] = src[src_0 + 7]; + // len -= 8; src_0 += 8; dst_0 += 8; + //} + + while (len >= 4) + { + dst[dst_0] = src[src_0]; + dst[dst_0 + 1] = src[src_0 + 1]; + dst[dst_0 + 2] = src[src_0 + 2]; + dst[dst_0 + 3] = src[src_0 + 3]; + len -= 4; + src_0 += 4; + dst_0 += 4; + } + + while (len-- > 0) + { + dst[dst_0++] = src[src_0++]; + } + } + + return len; + } + + private static int SecureCopy(byte[] buffer, int src, int dst, int dst_end) + { + var diff = dst - src; + var length = dst_end - dst; + var len = length; + + Assert(diff >= 4, "Target must be at least 4 bytes further than source"); + Assert(BLOCK_COPY_LIMIT > 4, "This method requires BLOCK_COPY_LIMIT > 4"); + Assert(len > 0, "Length have to be greater than 0"); + + if (diff >= BLOCK_COPY_LIMIT) + { + if (diff >= length) + { + Buffer.BlockCopy(buffer, src, buffer, dst, length); + return length; // done + } + + do + { + Buffer.BlockCopy(buffer, src, buffer, dst, diff); + src += diff; + dst += diff; + len -= diff; + } while (len >= diff); + } + + // apparently (tested) this is an overkill + // it seems to be faster without this 8-byte loop + //while (len >= 8) + //{ + // buffer[dst] = buffer[src]; + // buffer[dst + 1] = buffer[src + 1]; + // buffer[dst + 2] = buffer[src + 2]; + // buffer[dst + 3] = buffer[src + 3]; + // buffer[dst + 4] = buffer[src + 4]; + // buffer[dst + 5] = buffer[src + 5]; + // buffer[dst + 6] = buffer[src + 6]; + // buffer[dst + 7] = buffer[src + 7]; + // dst += 8; src += 8; len -= 8; + //} + + while (len >= 4) + { + buffer[dst] = buffer[src]; + buffer[dst + 1] = buffer[src + 1]; + buffer[dst + 2] = buffer[src + 2]; + buffer[dst + 3] = buffer[src + 3]; + dst += 4; + src += 4; + len -= 4; + } + + while (len-- > 0) + { + buffer[dst++] = buffer[src++]; + } + + return length; // done + } + + #endregion + + /// Encodes the specified input. + /// The input. + /// The input offset. + /// Length of the input. + /// The output. + /// The output offset. + /// Length of the output. + /// Number of bytes written. + public static int Encode32Safe( + byte[] input, + int inputOffset, + int inputLength, + byte[] output, + int outputOffset, + int outputLength) + { + CheckArguments(input, inputOffset, inputLength, output, outputOffset, outputLength); + if (outputLength == 0) return 0; + + if (inputLength < LZ4_64KLIMIT) + { + var hashTable = HashTablePool.GetUShortHashTablePool(); + return LZ4_compress64kCtx_safe32(hashTable, input, output, inputOffset, outputOffset, inputLength, outputLength); + } + else + { + var hashTable = HashTablePool.GetIntHashTablePool(); + return LZ4_compressCtx_safe32(hashTable, input, output, inputOffset, outputOffset, inputLength, outputLength); + } + } + + /// Encodes the specified input. + /// The input. + /// The input offset. + /// Length of the input. + /// The output. + /// The output offset. + /// Length of the output. + /// Number of bytes written. + public static int Encode64Safe( + byte[] input, + int inputOffset, + int inputLength, + byte[] output, + int outputOffset, + int outputLength) + { + CheckArguments(input, inputOffset, inputLength, output, outputOffset, outputLength); + if (outputLength == 0) return 0; + + if (inputLength < LZ4_64KLIMIT) + { + var hashTable = HashTablePool.GetUShortHashTablePool(); + return LZ4_compress64kCtx_safe64(hashTable, input, output, inputOffset, outputOffset, inputLength, outputLength); + } + else + { + var hashTable = HashTablePool.GetIntHashTablePool(); + return LZ4_compressCtx_safe64(hashTable, input, output, inputOffset, outputOffset, inputLength, outputLength); + } + } + + /// Decodes the specified input. + /// The input. + /// The input offset. + /// Length of the input. + /// The output. + /// The output offset. + /// Length of the output. + /// Number of bytes written. + public static int Decode32Safe( + byte[] input, + int inputOffset, + int inputLength, + byte[] output, + int outputOffset, + int outputLength) + { + CheckArguments(input, inputOffset, inputLength, output, outputOffset, outputLength); + + if (outputLength == 0) return 0; + + var length = LZ4_uncompress_safe32(input, output, inputOffset, outputOffset, outputLength); + if (length != inputLength) + throw new ArgumentException("LZ4 block is corrupted, or invalid length has been given."); + return outputLength; + } + + /// Decodes the specified input. + /// The input. + /// The input offset. + /// Length of the input. + /// The output. + /// The output offset. + /// Length of the output. + /// Number of bytes written. + public static int Decode64Safe( + byte[] input, + int inputOffset, + int inputLength, + byte[] output, + int outputOffset, + int outputLength) + { + CheckArguments( + input, inputOffset, inputLength, + output, outputOffset, outputLength); + + if (outputLength == 0) return 0; + + var length = LZ4_uncompress_safe64(input, output, inputOffset, outputOffset, outputLength); + if (length != inputLength) + throw new ArgumentException("LZ4 block is corrupted, or invalid length has been given."); + return outputLength; + } + } +} + +// ReSharper restore InconsistentNaming // ReSharper restore CheckNamespace \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Safe32.Dirty.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Safe32.Dirty.cs index cc1197b9c..a329e44e5 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Safe32.Dirty.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Safe32.Dirty.cs @@ -1,665 +1,665 @@ -#region LZ4 original - -/* - LZ4 - Fast LZ compression algorithm - Copyright (C) 2011-2012, Yann Collet. - BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - You can contact the author at : - - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html - - LZ4 source repository : http://code.google.com/p/lz4/ -*/ - -#endregion - -#region LZ4 port - -/* -Copyright (c) 2013, Milosz Krajewski -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided -that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions - and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions - and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#endregion - -// ReSharper disable CheckNamespace -// ReSharper disable InconsistentNaming -// ReSharper disable TooWideLocalVariableScope -// ReSharper disable JoinDeclarationAndInitializer -// ReSharper disable RedundantIfElseBlock - -namespace MessagePack.LZ4 -{ - public static partial class LZ4Codec - { - #region LZ4_compressCtx - - private static int LZ4_compressCtx_safe32( - int[] hash_table, - byte[] src, - byte[] dst, - int src_0, - int dst_0, - int src_len, - int dst_maxlen) - { - unchecked - { - var debruijn32 = DEBRUIJN_TABLE_32; - int _i; - - // ---- preprocessed source start here ---- - // r93 - var src_p = src_0; - var src_base = src_0; - var src_anchor = src_p; - var src_end = src_p + src_len; - var src_mflimit = src_end - MFLIMIT; - - var dst_p = dst_0; - var dst_end = dst_p + dst_maxlen; - - var src_LASTLITERALS = src_end - LASTLITERALS; - var src_LASTLITERALS_1 = src_LASTLITERALS - 1; - - var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_32 - 1); - var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); - var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); - - int length; - - uint h, h_fwd; - - // Init - if (src_len < MINLENGTH) goto _last_literals; - - // First Byte - hash_table[(((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST)] = (src_p - src_base); - src_p++; - h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST); - - // Main Loop - while (true) - { - var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; - var src_p_fwd = src_p; - int src_ref; - int dst_token; - - // Find a match - do - { - h = h_fwd; - var step = findMatchAttempts++ >> SKIPSTRENGTH; - src_p = src_p_fwd; - src_p_fwd = src_p + step; - - if (src_p_fwd > src_mflimit) goto _last_literals; - - h_fwd = (((Peek4(src, src_p_fwd)) * 2654435761u) >> HASH_ADJUST); - src_ref = src_base + hash_table[h]; - hash_table[h] = (src_p - src_base); - } while ((src_ref < src_p - MAX_DISTANCE) || (!Equal4(src, src_ref, src_p))); - - // Catch up - while ((src_p > src_anchor) && (src_ref > src_0) && (src[src_p - 1] == src[src_ref - 1])) - { - src_p--; - src_ref--; - } - - // Encode Literal length - length = (src_p - src_anchor); - dst_token = dst_p++; - - if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit - - if (length >= RUN_MASK) - { - var len = length - RUN_MASK; - dst[dst_token] = (RUN_MASK << ML_BITS); - if (len > 254) - { - do - { - dst[dst_p++] = 255; - len -= 255; - } while (len > 254); - dst[dst_p++] = (byte)len; - BlockCopy(src, src_anchor, dst, dst_p, length); - dst_p += length; - goto _next_match; - } - else - dst[dst_p++] = (byte)len; - } - else - { - dst[dst_token] = (byte)(length << ML_BITS); - } - - // Copy Literals - if (length > 0) - { - _i = dst_p + length; - WildCopy(src, src_anchor, dst, dst_p, _i); - dst_p = _i; - } - - _next_match: - // Encode Offset - Poke2(dst, dst_p, (ushort)(src_p - src_ref)); - dst_p += 2; - - // Start Counting - src_p += MINMATCH; - src_ref += MINMATCH; // MinMatch already verified - src_anchor = src_p; - - while (src_p < src_LASTLITERALS_STEPSIZE_1) - { - var diff = (int)Xor4(src, src_ref, src_p); - if (diff == 0) - { - src_p += STEPSIZE_32; - src_ref += STEPSIZE_32; - continue; - } - src_p += debruijn32[((uint)((diff) & -(diff)) * 0x077CB531u) >> 27]; - goto _endCount; - } - - if ((src_p < src_LASTLITERALS_1) && (Equal2(src, src_ref, src_p))) - { - src_p += 2; - src_ref += 2; - } - if ((src_p < src_LASTLITERALS) && (src[src_ref] == src[src_p])) src_p++; - - _endCount: - // Encode MatchLength - length = (src_p - src_anchor); - - if (dst_p + (length >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit - - if (length >= ML_MASK) - { - dst[dst_token] += ML_MASK; - length -= ML_MASK; - for (; length > 509; length -= 510) - { - dst[dst_p++] = 255; - dst[dst_p++] = 255; - } - if (length > 254) - { - length -= 255; - dst[dst_p++] = 255; - } - dst[dst_p++] = (byte)length; - } - else - { - dst[dst_token] += (byte)length; - } - - // Test end of chunk - if (src_p > src_mflimit) - { - src_anchor = src_p; - break; - } - - // Fill table - hash_table[(((Peek4(src, src_p - 2)) * 2654435761u) >> HASH_ADJUST)] = (src_p - 2 - src_base); - - // Test next position - - h = (((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST); - src_ref = src_base + hash_table[h]; - hash_table[h] = (src_p - src_base); - - if ((src_ref > src_p - (MAX_DISTANCE + 1)) && (Equal4(src, src_ref, src_p))) - { - dst_token = dst_p++; - dst[dst_token] = 0; - goto _next_match; - } - - // Prepare next loop - src_anchor = src_p++; - h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST); - } - - _last_literals: - // Encode Last Literals - { - var lastRun = (src_end - src_anchor); - - if (dst_p + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > dst_end) return 0; - - if (lastRun >= RUN_MASK) - { - dst[dst_p++] = (RUN_MASK << ML_BITS); - lastRun -= RUN_MASK; - for (; lastRun > 254; lastRun -= 255) dst[dst_p++] = 255; - dst[dst_p++] = (byte)lastRun; - } - else dst[dst_p++] = (byte)(lastRun << ML_BITS); - BlockCopy(src, src_anchor, dst, dst_p, src_end - src_anchor); - dst_p += src_end - src_anchor; - } - - // End - return ((dst_p) - dst_0); - } - } - - #endregion - - #region LZ4_compress64kCtx - - private static int LZ4_compress64kCtx_safe32( - ushort[] hash_table, - byte[] src, - byte[] dst, - int src_0, - int dst_0, - int src_len, - int dst_maxlen) - { - unchecked - { - var debruijn32 = DEBRUIJN_TABLE_32; - int _i; - - // ---- preprocessed source start here ---- - // r93 - var src_p = src_0; - var src_anchor = src_p; - var src_base = src_p; - var src_end = src_p + src_len; - var src_mflimit = src_end - MFLIMIT; - - var dst_p = dst_0; - var dst_end = dst_p + dst_maxlen; - - var src_LASTLITERALS = src_end - LASTLITERALS; - var src_LASTLITERALS_1 = src_LASTLITERALS - 1; - - var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_32 - 1); - var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); - var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); - - int len, length; - - uint h, h_fwd; - - // Init - if (src_len < MINLENGTH) goto _last_literals; - - // First Byte - src_p++; - h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH64K_ADJUST); - - // Main Loop - while (true) - { - var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; - var src_p_fwd = src_p; - int src_ref; - int dst_token; - - // Find a match - do - { - h = h_fwd; - var step = findMatchAttempts++ >> SKIPSTRENGTH; - src_p = src_p_fwd; - src_p_fwd = src_p + step; - - if (src_p_fwd > src_mflimit) goto _last_literals; - - h_fwd = (((Peek4(src, src_p_fwd)) * 2654435761u) >> HASH64K_ADJUST); - src_ref = src_base + hash_table[h]; - hash_table[h] = (ushort)(src_p - src_base); - } while (!Equal4(src, src_ref, src_p)); - - // Catch up - while ((src_p > src_anchor) && (src_ref > src_0) && (src[src_p - 1] == src[src_ref - 1])) - { - src_p--; - src_ref--; - } - - // Encode Literal length - length = (src_p - src_anchor); - dst_token = dst_p++; - - if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit - - if (length >= RUN_MASK) - { - len = length - RUN_MASK; - dst[dst_token] = (RUN_MASK << ML_BITS); - if (len > 254) - { - do - { - dst[dst_p++] = 255; - len -= 255; - } while (len > 254); - dst[dst_p++] = (byte)len; - BlockCopy(src, src_anchor, dst, dst_p, length); - dst_p += length; - goto _next_match; - } - else - { - dst[dst_p++] = (byte)len; - } - } - else - { - dst[dst_token] = (byte)(length << ML_BITS); - } - - // Copy Literals - if (length > 0) - { - _i = dst_p + length; - WildCopy(src, src_anchor, dst, dst_p, _i); - dst_p = _i; - } - - _next_match: - // Encode Offset - Poke2(dst, dst_p, (ushort)(src_p - src_ref)); - dst_p += 2; - - // Start Counting - src_p += MINMATCH; - src_ref += MINMATCH; // MinMatch verified - src_anchor = src_p; - - while (src_p < src_LASTLITERALS_STEPSIZE_1) - { - var diff = (int)Xor4(src, src_ref, src_p); - if (diff == 0) - { - src_p += STEPSIZE_32; - src_ref += STEPSIZE_32; - continue; - } - src_p += debruijn32[((uint)((diff) & -(diff)) * 0x077CB531u) >> 27]; - goto _endCount; - } - - if ((src_p < src_LASTLITERALS_1) && (Equal2(src, src_ref, src_p))) - { - src_p += 2; - src_ref += 2; - } - if ((src_p < src_LASTLITERALS) && (src[src_ref] == src[src_p])) src_p++; - - _endCount: - - // Encode MatchLength - len = (src_p - src_anchor); - - if (dst_p + (len >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit - - if (len >= ML_MASK) - { - dst[dst_token] += ML_MASK; - len -= ML_MASK; - for (; len > 509; len -= 510) - { - dst[dst_p++] = 255; - dst[dst_p++] = 255; - } - if (len > 254) - { - len -= 255; - dst[dst_p++] = 255; - } - dst[dst_p++] = (byte)len; - } - else - { - dst[dst_token] += (byte)len; - } - - // Test end of chunk - if (src_p > src_mflimit) - { - src_anchor = src_p; - break; - } - - // Fill table - hash_table[(((Peek4(src, src_p - 2)) * 2654435761u) >> HASH64K_ADJUST)] = (ushort)(src_p - 2 - src_base); - - // Test next position - - h = (((Peek4(src, src_p)) * 2654435761u) >> HASH64K_ADJUST); - src_ref = src_base + hash_table[h]; - hash_table[h] = (ushort)(src_p - src_base); - - if (Equal4(src, src_ref, src_p)) - { - dst_token = dst_p++; - dst[dst_token] = 0; - goto _next_match; - } - - // Prepare next loop - src_anchor = src_p++; - h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH64K_ADJUST); - } - - _last_literals: - // Encode Last Literals - var lastRun = (src_end - src_anchor); - if (dst_p + lastRun + 1 + (lastRun - RUN_MASK + 255) / 255 > dst_end) return 0; - if (lastRun >= RUN_MASK) - { - dst[dst_p++] = (RUN_MASK << ML_BITS); - lastRun -= RUN_MASK; - for (; lastRun > 254; lastRun -= 255) dst[dst_p++] = 255; - dst[dst_p++] = (byte)lastRun; - } - else - { - dst[dst_p++] = (byte)(lastRun << ML_BITS); - } - BlockCopy(src, src_anchor, dst, dst_p, src_end - src_anchor); - dst_p += src_end - src_anchor; - - // End - return ((dst_p) - dst_0); - } - } - - #endregion - - #region LZ4_uncompress - - private static int LZ4_uncompress_safe32( - byte[] src, - byte[] dst, - int src_0, - int dst_0, - int dst_len) - { - unchecked - { - var dec32table = DECODER_TABLE_32; - int _i; - - // ---- preprocessed source start here ---- - // r93 - var src_p = src_0; - int dst_ref; - - var dst_p = dst_0; - var dst_end = dst_p + dst_len; - int dst_cpy; - - var dst_LASTLITERALS = dst_end - LASTLITERALS; - var dst_COPYLENGTH = dst_end - COPYLENGTH; - var dst_COPYLENGTH_STEPSIZE_4 = dst_end - COPYLENGTH - (STEPSIZE_32 - 4); - - byte token; - - // Main Loop - while (true) - { - int length; - - // get runlength - token = src[src_p++]; - if ((length = (token >> ML_BITS)) == RUN_MASK) - { - int len; - for (; (len = src[src_p++]) == 255; length += 255) - { - /* do nothing */ - } - length += len; - } - - // copy literals - dst_cpy = dst_p + length; - - if (dst_cpy > dst_COPYLENGTH) - { - if (dst_cpy != dst_end) goto _output_error; // Error : not enough place for another match (min 4) + 5 literals - BlockCopy(src, src_p, dst, dst_p, length); - src_p += length; - break; // EOF - } - if (dst_p < dst_cpy) - { - _i = WildCopy(src, src_p, dst, dst_p, dst_cpy); - src_p += _i; - dst_p += _i; - } - src_p -= (dst_p - dst_cpy); - dst_p = dst_cpy; - - // get offset - dst_ref = (dst_cpy) - Peek2(src, src_p); - src_p += 2; - if (dst_ref < dst_0) goto _output_error; // Error : offset outside destination buffer - - // get matchlength - if ((length = (token & ML_MASK)) == ML_MASK) - { - for (; src[src_p] == 255; length += 255) src_p++; - length += src[src_p++]; - } - - // copy repeated sequence - if ((dst_p - dst_ref) < STEPSIZE_32) - { - const int dec64 = 0; - dst[dst_p + 0] = dst[dst_ref + 0]; - dst[dst_p + 1] = dst[dst_ref + 1]; - dst[dst_p + 2] = dst[dst_ref + 2]; - dst[dst_p + 3] = dst[dst_ref + 3]; - dst_p += 4; - dst_ref += 4; - dst_ref -= dec32table[dst_p - dst_ref]; - Copy4(dst, dst_ref, dst_p); - dst_p += STEPSIZE_32 - 4; - dst_ref -= dec64; - } - else - { - Copy4(dst, dst_ref, dst_p); - dst_p += 4; - dst_ref += 4; - } - dst_cpy = dst_p + length - (STEPSIZE_32 - 4); - - if (dst_cpy > dst_COPYLENGTH_STEPSIZE_4) - { - if (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals - if (dst_p < dst_COPYLENGTH) - { - _i = SecureCopy(dst, dst_ref, dst_p, dst_COPYLENGTH); - dst_ref += _i; - dst_p += _i; - } - - while (dst_p < dst_cpy) dst[dst_p++] = dst[dst_ref++]; - dst_p = dst_cpy; - continue; - } - - if (dst_p < dst_cpy) - { - SecureCopy(dst, dst_ref, dst_p, dst_cpy); - } - dst_p = dst_cpy; // correction - } - - // end of decoding - return ((src_p) - src_0); - - // write overflow error detected - _output_error: - return (-((src_p) - src_0)); - } - } - - #endregion - } -} - -// ReSharper restore RedundantIfElseBlock -// ReSharper restore JoinDeclarationAndInitializer -// ReSharper restore TooWideLocalVariableScope -// ReSharper restore InconsistentNaming +#region LZ4 original + +/* + LZ4 - Fast LZ compression algorithm + Copyright (C) 2011-2012, Yann Collet. + BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + You can contact the author at : + - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html + - LZ4 source repository : http://code.google.com/p/lz4/ +*/ + +#endregion + +#region LZ4 port + +/* +Copyright (c) 2013, Milosz Krajewski +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided +that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions + and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions + and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#endregion + +// ReSharper disable CheckNamespace +// ReSharper disable InconsistentNaming +// ReSharper disable TooWideLocalVariableScope +// ReSharper disable JoinDeclarationAndInitializer +// ReSharper disable RedundantIfElseBlock + +namespace MessagePack.LZ4 +{ + public static partial class LZ4Codec + { + #region LZ4_compressCtx + + private static int LZ4_compressCtx_safe32( + int[] hash_table, + byte[] src, + byte[] dst, + int src_0, + int dst_0, + int src_len, + int dst_maxlen) + { + unchecked + { + var debruijn32 = DEBRUIJN_TABLE_32; + int _i; + + // ---- preprocessed source start here ---- + // r93 + var src_p = src_0; + var src_base = src_0; + var src_anchor = src_p; + var src_end = src_p + src_len; + var src_mflimit = src_end - MFLIMIT; + + var dst_p = dst_0; + var dst_end = dst_p + dst_maxlen; + + var src_LASTLITERALS = src_end - LASTLITERALS; + var src_LASTLITERALS_1 = src_LASTLITERALS - 1; + + var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_32 - 1); + var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); + var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); + + int length; + + uint h, h_fwd; + + // Init + if (src_len < MINLENGTH) goto _last_literals; + + // First Byte + hash_table[(((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST)] = (src_p - src_base); + src_p++; + h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST); + + // Main Loop + while (true) + { + var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; + var src_p_fwd = src_p; + int src_ref; + int dst_token; + + // Find a match + do + { + h = h_fwd; + var step = findMatchAttempts++ >> SKIPSTRENGTH; + src_p = src_p_fwd; + src_p_fwd = src_p + step; + + if (src_p_fwd > src_mflimit) goto _last_literals; + + h_fwd = (((Peek4(src, src_p_fwd)) * 2654435761u) >> HASH_ADJUST); + src_ref = src_base + hash_table[h]; + hash_table[h] = (src_p - src_base); + } while ((src_ref < src_p - MAX_DISTANCE) || (!Equal4(src, src_ref, src_p))); + + // Catch up + while ((src_p > src_anchor) && (src_ref > src_0) && (src[src_p - 1] == src[src_ref - 1])) + { + src_p--; + src_ref--; + } + + // Encode Literal length + length = (src_p - src_anchor); + dst_token = dst_p++; + + if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit + + if (length >= RUN_MASK) + { + var len = length - RUN_MASK; + dst[dst_token] = (RUN_MASK << ML_BITS); + if (len > 254) + { + do + { + dst[dst_p++] = 255; + len -= 255; + } while (len > 254); + dst[dst_p++] = (byte)len; + BlockCopy(src, src_anchor, dst, dst_p, length); + dst_p += length; + goto _next_match; + } + else + dst[dst_p++] = (byte)len; + } + else + { + dst[dst_token] = (byte)(length << ML_BITS); + } + + // Copy Literals + if (length > 0) + { + _i = dst_p + length; + WildCopy(src, src_anchor, dst, dst_p, _i); + dst_p = _i; + } + + _next_match: + // Encode Offset + Poke2(dst, dst_p, (ushort)(src_p - src_ref)); + dst_p += 2; + + // Start Counting + src_p += MINMATCH; + src_ref += MINMATCH; // MinMatch already verified + src_anchor = src_p; + + while (src_p < src_LASTLITERALS_STEPSIZE_1) + { + var diff = (int)Xor4(src, src_ref, src_p); + if (diff == 0) + { + src_p += STEPSIZE_32; + src_ref += STEPSIZE_32; + continue; + } + src_p += debruijn32[((uint)((diff) & -(diff)) * 0x077CB531u) >> 27]; + goto _endCount; + } + + if ((src_p < src_LASTLITERALS_1) && (Equal2(src, src_ref, src_p))) + { + src_p += 2; + src_ref += 2; + } + if ((src_p < src_LASTLITERALS) && (src[src_ref] == src[src_p])) src_p++; + + _endCount: + // Encode MatchLength + length = (src_p - src_anchor); + + if (dst_p + (length >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit + + if (length >= ML_MASK) + { + dst[dst_token] += ML_MASK; + length -= ML_MASK; + for (; length > 509; length -= 510) + { + dst[dst_p++] = 255; + dst[dst_p++] = 255; + } + if (length > 254) + { + length -= 255; + dst[dst_p++] = 255; + } + dst[dst_p++] = (byte)length; + } + else + { + dst[dst_token] += (byte)length; + } + + // Test end of chunk + if (src_p > src_mflimit) + { + src_anchor = src_p; + break; + } + + // Fill table + hash_table[(((Peek4(src, src_p - 2)) * 2654435761u) >> HASH_ADJUST)] = (src_p - 2 - src_base); + + // Test next position + + h = (((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST); + src_ref = src_base + hash_table[h]; + hash_table[h] = (src_p - src_base); + + if ((src_ref > src_p - (MAX_DISTANCE + 1)) && (Equal4(src, src_ref, src_p))) + { + dst_token = dst_p++; + dst[dst_token] = 0; + goto _next_match; + } + + // Prepare next loop + src_anchor = src_p++; + h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST); + } + + _last_literals: + // Encode Last Literals + { + var lastRun = (src_end - src_anchor); + + if (dst_p + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > dst_end) return 0; + + if (lastRun >= RUN_MASK) + { + dst[dst_p++] = (RUN_MASK << ML_BITS); + lastRun -= RUN_MASK; + for (; lastRun > 254; lastRun -= 255) dst[dst_p++] = 255; + dst[dst_p++] = (byte)lastRun; + } + else dst[dst_p++] = (byte)(lastRun << ML_BITS); + BlockCopy(src, src_anchor, dst, dst_p, src_end - src_anchor); + dst_p += src_end - src_anchor; + } + + // End + return ((dst_p) - dst_0); + } + } + + #endregion + + #region LZ4_compress64kCtx + + private static int LZ4_compress64kCtx_safe32( + ushort[] hash_table, + byte[] src, + byte[] dst, + int src_0, + int dst_0, + int src_len, + int dst_maxlen) + { + unchecked + { + var debruijn32 = DEBRUIJN_TABLE_32; + int _i; + + // ---- preprocessed source start here ---- + // r93 + var src_p = src_0; + var src_anchor = src_p; + var src_base = src_p; + var src_end = src_p + src_len; + var src_mflimit = src_end - MFLIMIT; + + var dst_p = dst_0; + var dst_end = dst_p + dst_maxlen; + + var src_LASTLITERALS = src_end - LASTLITERALS; + var src_LASTLITERALS_1 = src_LASTLITERALS - 1; + + var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_32 - 1); + var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); + var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); + + int len, length; + + uint h, h_fwd; + + // Init + if (src_len < MINLENGTH) goto _last_literals; + + // First Byte + src_p++; + h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH64K_ADJUST); + + // Main Loop + while (true) + { + var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; + var src_p_fwd = src_p; + int src_ref; + int dst_token; + + // Find a match + do + { + h = h_fwd; + var step = findMatchAttempts++ >> SKIPSTRENGTH; + src_p = src_p_fwd; + src_p_fwd = src_p + step; + + if (src_p_fwd > src_mflimit) goto _last_literals; + + h_fwd = (((Peek4(src, src_p_fwd)) * 2654435761u) >> HASH64K_ADJUST); + src_ref = src_base + hash_table[h]; + hash_table[h] = (ushort)(src_p - src_base); + } while (!Equal4(src, src_ref, src_p)); + + // Catch up + while ((src_p > src_anchor) && (src_ref > src_0) && (src[src_p - 1] == src[src_ref - 1])) + { + src_p--; + src_ref--; + } + + // Encode Literal length + length = (src_p - src_anchor); + dst_token = dst_p++; + + if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit + + if (length >= RUN_MASK) + { + len = length - RUN_MASK; + dst[dst_token] = (RUN_MASK << ML_BITS); + if (len > 254) + { + do + { + dst[dst_p++] = 255; + len -= 255; + } while (len > 254); + dst[dst_p++] = (byte)len; + BlockCopy(src, src_anchor, dst, dst_p, length); + dst_p += length; + goto _next_match; + } + else + { + dst[dst_p++] = (byte)len; + } + } + else + { + dst[dst_token] = (byte)(length << ML_BITS); + } + + // Copy Literals + if (length > 0) + { + _i = dst_p + length; + WildCopy(src, src_anchor, dst, dst_p, _i); + dst_p = _i; + } + + _next_match: + // Encode Offset + Poke2(dst, dst_p, (ushort)(src_p - src_ref)); + dst_p += 2; + + // Start Counting + src_p += MINMATCH; + src_ref += MINMATCH; // MinMatch verified + src_anchor = src_p; + + while (src_p < src_LASTLITERALS_STEPSIZE_1) + { + var diff = (int)Xor4(src, src_ref, src_p); + if (diff == 0) + { + src_p += STEPSIZE_32; + src_ref += STEPSIZE_32; + continue; + } + src_p += debruijn32[((uint)((diff) & -(diff)) * 0x077CB531u) >> 27]; + goto _endCount; + } + + if ((src_p < src_LASTLITERALS_1) && (Equal2(src, src_ref, src_p))) + { + src_p += 2; + src_ref += 2; + } + if ((src_p < src_LASTLITERALS) && (src[src_ref] == src[src_p])) src_p++; + + _endCount: + + // Encode MatchLength + len = (src_p - src_anchor); + + if (dst_p + (len >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit + + if (len >= ML_MASK) + { + dst[dst_token] += ML_MASK; + len -= ML_MASK; + for (; len > 509; len -= 510) + { + dst[dst_p++] = 255; + dst[dst_p++] = 255; + } + if (len > 254) + { + len -= 255; + dst[dst_p++] = 255; + } + dst[dst_p++] = (byte)len; + } + else + { + dst[dst_token] += (byte)len; + } + + // Test end of chunk + if (src_p > src_mflimit) + { + src_anchor = src_p; + break; + } + + // Fill table + hash_table[(((Peek4(src, src_p - 2)) * 2654435761u) >> HASH64K_ADJUST)] = (ushort)(src_p - 2 - src_base); + + // Test next position + + h = (((Peek4(src, src_p)) * 2654435761u) >> HASH64K_ADJUST); + src_ref = src_base + hash_table[h]; + hash_table[h] = (ushort)(src_p - src_base); + + if (Equal4(src, src_ref, src_p)) + { + dst_token = dst_p++; + dst[dst_token] = 0; + goto _next_match; + } + + // Prepare next loop + src_anchor = src_p++; + h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH64K_ADJUST); + } + + _last_literals: + // Encode Last Literals + var lastRun = (src_end - src_anchor); + if (dst_p + lastRun + 1 + (lastRun - RUN_MASK + 255) / 255 > dst_end) return 0; + if (lastRun >= RUN_MASK) + { + dst[dst_p++] = (RUN_MASK << ML_BITS); + lastRun -= RUN_MASK; + for (; lastRun > 254; lastRun -= 255) dst[dst_p++] = 255; + dst[dst_p++] = (byte)lastRun; + } + else + { + dst[dst_p++] = (byte)(lastRun << ML_BITS); + } + BlockCopy(src, src_anchor, dst, dst_p, src_end - src_anchor); + dst_p += src_end - src_anchor; + + // End + return ((dst_p) - dst_0); + } + } + + #endregion + + #region LZ4_uncompress + + private static int LZ4_uncompress_safe32( + byte[] src, + byte[] dst, + int src_0, + int dst_0, + int dst_len) + { + unchecked + { + var dec32table = DECODER_TABLE_32; + int _i; + + // ---- preprocessed source start here ---- + // r93 + var src_p = src_0; + int dst_ref; + + var dst_p = dst_0; + var dst_end = dst_p + dst_len; + int dst_cpy; + + var dst_LASTLITERALS = dst_end - LASTLITERALS; + var dst_COPYLENGTH = dst_end - COPYLENGTH; + var dst_COPYLENGTH_STEPSIZE_4 = dst_end - COPYLENGTH - (STEPSIZE_32 - 4); + + byte token; + + // Main Loop + while (true) + { + int length; + + // get runlength + token = src[src_p++]; + if ((length = (token >> ML_BITS)) == RUN_MASK) + { + int len; + for (; (len = src[src_p++]) == 255; length += 255) + { + /* do nothing */ + } + length += len; + } + + // copy literals + dst_cpy = dst_p + length; + + if (dst_cpy > dst_COPYLENGTH) + { + if (dst_cpy != dst_end) goto _output_error; // Error : not enough place for another match (min 4) + 5 literals + BlockCopy(src, src_p, dst, dst_p, length); + src_p += length; + break; // EOF + } + if (dst_p < dst_cpy) + { + _i = WildCopy(src, src_p, dst, dst_p, dst_cpy); + src_p += _i; + dst_p += _i; + } + src_p -= (dst_p - dst_cpy); + dst_p = dst_cpy; + + // get offset + dst_ref = (dst_cpy) - Peek2(src, src_p); + src_p += 2; + if (dst_ref < dst_0) goto _output_error; // Error : offset outside destination buffer + + // get matchlength + if ((length = (token & ML_MASK)) == ML_MASK) + { + for (; src[src_p] == 255; length += 255) src_p++; + length += src[src_p++]; + } + + // copy repeated sequence + if ((dst_p - dst_ref) < STEPSIZE_32) + { + const int dec64 = 0; + dst[dst_p + 0] = dst[dst_ref + 0]; + dst[dst_p + 1] = dst[dst_ref + 1]; + dst[dst_p + 2] = dst[dst_ref + 2]; + dst[dst_p + 3] = dst[dst_ref + 3]; + dst_p += 4; + dst_ref += 4; + dst_ref -= dec32table[dst_p - dst_ref]; + Copy4(dst, dst_ref, dst_p); + dst_p += STEPSIZE_32 - 4; + dst_ref -= dec64; + } + else + { + Copy4(dst, dst_ref, dst_p); + dst_p += 4; + dst_ref += 4; + } + dst_cpy = dst_p + length - (STEPSIZE_32 - 4); + + if (dst_cpy > dst_COPYLENGTH_STEPSIZE_4) + { + if (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals + if (dst_p < dst_COPYLENGTH) + { + _i = SecureCopy(dst, dst_ref, dst_p, dst_COPYLENGTH); + dst_ref += _i; + dst_p += _i; + } + + while (dst_p < dst_cpy) dst[dst_p++] = dst[dst_ref++]; + dst_p = dst_cpy; + continue; + } + + if (dst_p < dst_cpy) + { + SecureCopy(dst, dst_ref, dst_p, dst_cpy); + } + dst_p = dst_cpy; // correction + } + + // end of decoding + return ((src_p) - src_0); + + // write overflow error detected + _output_error: + return (-((src_p) - src_0)); + } + } + + #endregion + } +} + +// ReSharper restore RedundantIfElseBlock +// ReSharper restore JoinDeclarationAndInitializer +// ReSharper restore TooWideLocalVariableScope +// ReSharper restore InconsistentNaming // ReSharper restore CheckNamespace \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Safe64.Dirty.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Safe64.Dirty.cs index d6edb48a5..639a5dab2 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Safe64.Dirty.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Safe64.Dirty.cs @@ -1,678 +1,678 @@ -#region LZ4 original - -/* - LZ4 - Fast LZ compression algorithm - Copyright (C) 2011-2012, Yann Collet. - BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - You can contact the author at : - - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html - - LZ4 source repository : http://code.google.com/p/lz4/ -*/ - -#endregion - -#region LZ4 port - -/* -Copyright (c) 2013, Milosz Krajewski -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided -that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions - and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions - and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#endregion - -// ReSharper disable CheckNamespace -// ReSharper disable InconsistentNaming -// ReSharper disable TooWideLocalVariableScope -// ReSharper disable JoinDeclarationAndInitializer -// ReSharper disable RedundantIfElseBlock - -namespace MessagePack.LZ4 -{ - public static partial class LZ4Codec - { - #region LZ4_compressCtx - - private static int LZ4_compressCtx_safe64( - int[] hash_table, - byte[] src, - byte[] dst, - int src_0, - int dst_0, - int src_len, - int dst_maxlen) - { - unchecked - { - var debruijn64 = DEBRUIJN_TABLE_64; - int _i; - - // ---- preprocessed source start here ---- - // r93 - var src_p = src_0; - var src_base = src_0; - var src_anchor = src_p; - var src_end = src_p + src_len; - var src_mflimit = src_end - MFLIMIT; - - var dst_p = dst_0; - var dst_end = dst_p + dst_maxlen; - - var src_LASTLITERALS = src_end - LASTLITERALS; - var src_LASTLITERALS_1 = src_LASTLITERALS - 1; - - var src_LASTLITERALS_3 = src_LASTLITERALS - 3; - - var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_64 - 1); - var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); - var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); - - int length; - - uint h, h_fwd; - - // Init - if (src_len < MINLENGTH) goto _last_literals; - - // First Byte - hash_table[(((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST)] = (src_p - src_base); - src_p++; - h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST); - - // Main Loop - while (true) - { - var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; - var src_p_fwd = src_p; - int src_ref; - int dst_token; - - // Find a match - do - { - h = h_fwd; - var step = findMatchAttempts++ >> SKIPSTRENGTH; - src_p = src_p_fwd; - src_p_fwd = src_p + step; - - if (src_p_fwd > src_mflimit) goto _last_literals; - - h_fwd = (((Peek4(src, src_p_fwd)) * 2654435761u) >> HASH_ADJUST); - src_ref = src_base + hash_table[h]; - hash_table[h] = (src_p - src_base); - } while ((src_ref < src_p - MAX_DISTANCE) || (!Equal4(src, src_ref, src_p))); - - // Catch up - while ((src_p > src_anchor) && (src_ref > src_0) && (src[src_p - 1] == src[src_ref - 1])) - { - src_p--; - src_ref--; - } - - // Encode Literal length - length = (src_p - src_anchor); - dst_token = dst_p++; - - if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit - - if (length >= RUN_MASK) - { - var len = length - RUN_MASK; - dst[dst_token] = (RUN_MASK << ML_BITS); - if (len > 254) - { - do - { - dst[dst_p++] = 255; - len -= 255; - } while (len > 254); - dst[dst_p++] = (byte)len; - BlockCopy(src, src_anchor, dst, dst_p, length); - dst_p += length; - goto _next_match; - } - else - dst[dst_p++] = (byte)len; - } - else - { - dst[dst_token] = (byte)(length << ML_BITS); - } - - // Copy Literals - if (length > 0) - { - _i = dst_p + length; - WildCopy(src, src_anchor, dst, dst_p, _i); - dst_p = _i; - } - - _next_match: - // Encode Offset - Poke2(dst, dst_p, (ushort)(src_p - src_ref)); - dst_p += 2; - - // Start Counting - src_p += MINMATCH; - src_ref += MINMATCH; // MinMatch already verified - src_anchor = src_p; - - while (src_p < src_LASTLITERALS_STEPSIZE_1) - { - var diff = (long)Xor8(src, src_ref, src_p); - if (diff == 0) - { - src_p += STEPSIZE_64; - src_ref += STEPSIZE_64; - continue; - } - src_p += debruijn64[((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL) >> 58]; - goto _endCount; - } - - if ((src_p < src_LASTLITERALS_3) && (Equal4(src, src_ref, src_p))) - { - src_p += 4; - src_ref += 4; - } - if ((src_p < src_LASTLITERALS_1) && (Equal2(src, src_ref, src_p))) - { - src_p += 2; - src_ref += 2; - } - if ((src_p < src_LASTLITERALS) && (src[src_ref] == src[src_p])) src_p++; - - _endCount: - // Encode MatchLength - length = (src_p - src_anchor); - - if (dst_p + (length >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit - - if (length >= ML_MASK) - { - dst[dst_token] += ML_MASK; - length -= ML_MASK; - for (; length > 509; length -= 510) - { - dst[dst_p++] = 255; - dst[dst_p++] = 255; - } - if (length > 254) - { - length -= 255; - dst[dst_p++] = 255; - } - dst[dst_p++] = (byte)length; - } - else - { - dst[dst_token] += (byte)length; - } - - // Test end of chunk - if (src_p > src_mflimit) - { - src_anchor = src_p; - break; - } - - // Fill table - hash_table[(((Peek4(src, src_p - 2)) * 2654435761u) >> HASH_ADJUST)] = (src_p - 2 - src_base); - - // Test next position - - h = (((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST); - src_ref = src_base + hash_table[h]; - hash_table[h] = (src_p - src_base); - - if ((src_ref > src_p - (MAX_DISTANCE + 1)) && (Equal4(src, src_ref, src_p))) - { - dst_token = dst_p++; - dst[dst_token] = 0; - goto _next_match; - } - - // Prepare next loop - src_anchor = src_p++; - h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST); - } - - _last_literals: - // Encode Last Literals - { - var lastRun = (src_end - src_anchor); - - if (dst_p + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > dst_end) return 0; - - if (lastRun >= RUN_MASK) - { - dst[dst_p++] = (RUN_MASK << ML_BITS); - lastRun -= RUN_MASK; - for (; lastRun > 254; lastRun -= 255) dst[dst_p++] = 255; - dst[dst_p++] = (byte)lastRun; - } - else dst[dst_p++] = (byte)(lastRun << ML_BITS); - BlockCopy(src, src_anchor, dst, dst_p, src_end - src_anchor); - dst_p += src_end - src_anchor; - } - - // End - return (dst_p - dst_0); - } - } - - #endregion - - #region LZ4_compress64kCtx - - private static int LZ4_compress64kCtx_safe64( - ushort[] hash_table, - byte[] src, - byte[] dst, - int src_0, - int dst_0, - int src_len, - int dst_maxlen) - { - unchecked - { - var debruijn64 = DEBRUIJN_TABLE_64; - int _i; - - // ---- preprocessed source start here ---- - // r93 - var src_p = src_0; - var src_anchor = src_p; - var src_base = src_p; - var src_end = src_p + src_len; - var src_mflimit = src_end - MFLIMIT; - - var dst_p = dst_0; - var dst_end = dst_p + dst_maxlen; - - var src_LASTLITERALS = src_end - LASTLITERALS; - var src_LASTLITERALS_1 = src_LASTLITERALS - 1; - - var src_LASTLITERALS_3 = src_LASTLITERALS - 3; - - var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_64 - 1); - var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); - var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); - - int len, length; - - uint h, h_fwd; - - // Init - if (src_len < MINLENGTH) goto _last_literals; - - // First Byte - src_p++; - h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH64K_ADJUST); - - // Main Loop - while (true) - { - var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; - var src_p_fwd = src_p; - int src_ref; - int dst_token; - - // Find a match - do - { - h = h_fwd; - var step = findMatchAttempts++ >> SKIPSTRENGTH; - src_p = src_p_fwd; - src_p_fwd = src_p + step; - - if (src_p_fwd > src_mflimit) goto _last_literals; - - h_fwd = (((Peek4(src, src_p_fwd)) * 2654435761u) >> HASH64K_ADJUST); - src_ref = src_base + hash_table[h]; - hash_table[h] = (ushort)(src_p - src_base); - } while (!Equal4(src, src_ref, src_p)); - - // Catch up - while ((src_p > src_anchor) && (src_ref > src_0) && (src[src_p - 1] == src[src_ref - 1])) - { - src_p--; - src_ref--; - } - - // Encode Literal length - length = (src_p - src_anchor); - dst_token = dst_p++; - - if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit - - if (length >= RUN_MASK) - { - len = length - RUN_MASK; - dst[dst_token] = (RUN_MASK << ML_BITS); - if (len > 254) - { - do - { - dst[dst_p++] = 255; - len -= 255; - } while (len > 254); - dst[dst_p++] = (byte)len; - BlockCopy(src, src_anchor, dst, dst_p, length); - dst_p += length; - goto _next_match; - } - else - dst[dst_p++] = (byte)len; - } - else - { - dst[dst_token] = (byte)(length << ML_BITS); - } - - // Copy Literals - if (length > 0) /*?*/ - { - _i = dst_p + length; - WildCopy(src, src_anchor, dst, dst_p, _i); - dst_p = _i; - } - - _next_match: - // Encode Offset - Poke2(dst, dst_p, (ushort)(src_p - src_ref)); - dst_p += 2; - - // Start Counting - src_p += MINMATCH; - src_ref += MINMATCH; // MinMatch verified - src_anchor = src_p; - - while (src_p < src_LASTLITERALS_STEPSIZE_1) - { - var diff = (long)Xor8(src, src_ref, src_p); - if (diff == 0) - { - src_p += STEPSIZE_64; - src_ref += STEPSIZE_64; - continue; - } - src_p += debruijn64[((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL) >> 58]; - goto _endCount; - } - - if ((src_p < src_LASTLITERALS_3) && (Equal4(src, src_ref, src_p))) - { - src_p += 4; - src_ref += 4; - } - if ((src_p < src_LASTLITERALS_1) && (Equal2(src, src_ref, src_p))) - { - src_p += 2; - src_ref += 2; - } - if ((src_p < src_LASTLITERALS) && (src[src_ref] == src[src_p])) src_p++; - - _endCount: - - // Encode MatchLength - len = (src_p - src_anchor); - - if (dst_p + (len >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit - - if (len >= ML_MASK) - { - dst[dst_token] += ML_MASK; - len -= ML_MASK; - for (; len > 509; len -= 510) - { - dst[dst_p++] = 255; - dst[dst_p++] = 255; - } - if (len > 254) - { - len -= 255; - dst[dst_p++] = 255; - } - dst[dst_p++] = (byte)len; - } - else - { - dst[dst_token] += (byte)len; - } - - // Test end of chunk - if (src_p > src_mflimit) - { - src_anchor = src_p; - break; - } - - // Fill table - hash_table[(((Peek4(src, src_p - 2)) * 2654435761u) >> HASH64K_ADJUST)] = (ushort)(src_p - 2 - src_base); - - // Test next position - - h = (((Peek4(src, src_p)) * 2654435761u) >> HASH64K_ADJUST); - src_ref = src_base + hash_table[h]; - hash_table[h] = (ushort)(src_p - src_base); - - if (Equal4(src, src_ref, src_p)) - { - dst_token = dst_p++; - dst[dst_token] = 0; - goto _next_match; - } - - // Prepare next loop - src_anchor = src_p++; - h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH64K_ADJUST); - } - - _last_literals: - // Encode Last Literals - { - var lastRun = (src_end - src_anchor); - if (dst_p + lastRun + 1 + (lastRun - RUN_MASK + 255) / 255 > dst_end) return 0; - if (lastRun >= RUN_MASK) - { - dst[dst_p++] = (RUN_MASK << ML_BITS); - lastRun -= RUN_MASK; - for (; lastRun > 254; lastRun -= 255) dst[dst_p++] = 255; - dst[dst_p++] = (byte)lastRun; - } - else dst[dst_p++] = (byte)(lastRun << ML_BITS); - BlockCopy(src, src_anchor, dst, dst_p, src_end - src_anchor); - dst_p += src_end - src_anchor; - } - - // End - return (dst_p - dst_0); - } - } - - #endregion - - #region LZ4_uncompress - - private static int LZ4_uncompress_safe64( - byte[] src, - byte[] dst, - int src_0, - int dst_0, - int dst_len) - { - unchecked - { - var dec32table = DECODER_TABLE_32; - var dec64table = DECODER_TABLE_64; - int _i; - - // ---- preprocessed source start here ---- - // r93 - var src_p = src_0; - int dst_ref; - - var dst_p = dst_0; - var dst_end = dst_p + dst_len; - int dst_cpy; - - var dst_LASTLITERALS = dst_end - LASTLITERALS; - var dst_COPYLENGTH = dst_end - COPYLENGTH; - var dst_COPYLENGTH_STEPSIZE_4 = dst_end - COPYLENGTH - (STEPSIZE_64 - 4); - - uint token; - - // Main Loop - while (true) - { - int length; - - // get runlength - token = src[src_p++]; - if ((length = (byte)(token >> ML_BITS)) == RUN_MASK) - { - int len; - for (; (len = src[src_p++]) == 255; length += 255) - { - /* do nothing */ - } - length += len; - } - - // copy literals - dst_cpy = dst_p + length; - - if (dst_cpy > dst_COPYLENGTH) - { - if (dst_cpy != dst_end) goto _output_error; // Error : not enough place for another match (min 4) + 5 literals - BlockCopy(src, src_p, dst, dst_p, length); - src_p += length; - break; // EOF - } - if (dst_p < dst_cpy) /*?*/ - { - _i = WildCopy(src, src_p, dst, dst_p, dst_cpy); - src_p += _i; - dst_p += _i; - } - src_p -= (dst_p - dst_cpy); - dst_p = dst_cpy; - - // get offset - dst_ref = (dst_cpy) - Peek2(src, src_p); - src_p += 2; - if (dst_ref < dst_0) goto _output_error; // Error : offset outside destination buffer - - // get matchlength - if ((length = (byte)(token & ML_MASK)) == ML_MASK) - { - for (; src[src_p] == 255; length += 255) src_p++; - length += src[src_p++]; - } - - // copy repeated sequence - if ((dst_p - dst_ref) < STEPSIZE_64) - { - var dec64 = dec64table[dst_p - dst_ref]; - - dst[dst_p + 0] = dst[dst_ref + 0]; - dst[dst_p + 1] = dst[dst_ref + 1]; - dst[dst_p + 2] = dst[dst_ref + 2]; - dst[dst_p + 3] = dst[dst_ref + 3]; - dst_p += 4; - dst_ref += 4; - dst_ref -= dec32table[dst_p - dst_ref]; - Copy4(dst, dst_ref, dst_p); - dst_p += STEPSIZE_64 - 4; - dst_ref -= dec64; - } - else - { - Copy8(dst, dst_ref, dst_p); - dst_p += 8; - dst_ref += 8; - } - dst_cpy = dst_p + length - (STEPSIZE_64 - 4); - - if (dst_cpy > dst_COPYLENGTH_STEPSIZE_4) - { - if (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals - if (dst_p < dst_COPYLENGTH) - { - _i = SecureCopy(dst, dst_ref, dst_p, dst_COPYLENGTH); - dst_ref += _i; - dst_p += _i; - } - - while (dst_p < dst_cpy) dst[dst_p++] = dst[dst_ref++]; - dst_p = dst_cpy; - continue; - } - - if (dst_p < dst_cpy) - { - SecureCopy(dst, dst_ref, dst_p, dst_cpy); - } - dst_p = dst_cpy; // correction - } - - // end of decoding - return ((src_p) - src_0); - - _output_error: - // write overflow error detected - return (-((src_p) - src_0)); - } - } - - #endregion - } -} - -// ReSharper restore RedundantIfElseBlock -// ReSharper restore JoinDeclarationAndInitializer -// ReSharper restore TooWideLocalVariableScope -// ReSharper restore InconsistentNaming +#region LZ4 original + +/* + LZ4 - Fast LZ compression algorithm + Copyright (C) 2011-2012, Yann Collet. + BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + You can contact the author at : + - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html + - LZ4 source repository : http://code.google.com/p/lz4/ +*/ + +#endregion + +#region LZ4 port + +/* +Copyright (c) 2013, Milosz Krajewski +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided +that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions + and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions + and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#endregion + +// ReSharper disable CheckNamespace +// ReSharper disable InconsistentNaming +// ReSharper disable TooWideLocalVariableScope +// ReSharper disable JoinDeclarationAndInitializer +// ReSharper disable RedundantIfElseBlock + +namespace MessagePack.LZ4 +{ + public static partial class LZ4Codec + { + #region LZ4_compressCtx + + private static int LZ4_compressCtx_safe64( + int[] hash_table, + byte[] src, + byte[] dst, + int src_0, + int dst_0, + int src_len, + int dst_maxlen) + { + unchecked + { + var debruijn64 = DEBRUIJN_TABLE_64; + int _i; + + // ---- preprocessed source start here ---- + // r93 + var src_p = src_0; + var src_base = src_0; + var src_anchor = src_p; + var src_end = src_p + src_len; + var src_mflimit = src_end - MFLIMIT; + + var dst_p = dst_0; + var dst_end = dst_p + dst_maxlen; + + var src_LASTLITERALS = src_end - LASTLITERALS; + var src_LASTLITERALS_1 = src_LASTLITERALS - 1; + + var src_LASTLITERALS_3 = src_LASTLITERALS - 3; + + var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_64 - 1); + var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); + var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); + + int length; + + uint h, h_fwd; + + // Init + if (src_len < MINLENGTH) goto _last_literals; + + // First Byte + hash_table[(((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST)] = (src_p - src_base); + src_p++; + h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST); + + // Main Loop + while (true) + { + var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; + var src_p_fwd = src_p; + int src_ref; + int dst_token; + + // Find a match + do + { + h = h_fwd; + var step = findMatchAttempts++ >> SKIPSTRENGTH; + src_p = src_p_fwd; + src_p_fwd = src_p + step; + + if (src_p_fwd > src_mflimit) goto _last_literals; + + h_fwd = (((Peek4(src, src_p_fwd)) * 2654435761u) >> HASH_ADJUST); + src_ref = src_base + hash_table[h]; + hash_table[h] = (src_p - src_base); + } while ((src_ref < src_p - MAX_DISTANCE) || (!Equal4(src, src_ref, src_p))); + + // Catch up + while ((src_p > src_anchor) && (src_ref > src_0) && (src[src_p - 1] == src[src_ref - 1])) + { + src_p--; + src_ref--; + } + + // Encode Literal length + length = (src_p - src_anchor); + dst_token = dst_p++; + + if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit + + if (length >= RUN_MASK) + { + var len = length - RUN_MASK; + dst[dst_token] = (RUN_MASK << ML_BITS); + if (len > 254) + { + do + { + dst[dst_p++] = 255; + len -= 255; + } while (len > 254); + dst[dst_p++] = (byte)len; + BlockCopy(src, src_anchor, dst, dst_p, length); + dst_p += length; + goto _next_match; + } + else + dst[dst_p++] = (byte)len; + } + else + { + dst[dst_token] = (byte)(length << ML_BITS); + } + + // Copy Literals + if (length > 0) + { + _i = dst_p + length; + WildCopy(src, src_anchor, dst, dst_p, _i); + dst_p = _i; + } + + _next_match: + // Encode Offset + Poke2(dst, dst_p, (ushort)(src_p - src_ref)); + dst_p += 2; + + // Start Counting + src_p += MINMATCH; + src_ref += MINMATCH; // MinMatch already verified + src_anchor = src_p; + + while (src_p < src_LASTLITERALS_STEPSIZE_1) + { + var diff = (long)Xor8(src, src_ref, src_p); + if (diff == 0) + { + src_p += STEPSIZE_64; + src_ref += STEPSIZE_64; + continue; + } + src_p += debruijn64[((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL) >> 58]; + goto _endCount; + } + + if ((src_p < src_LASTLITERALS_3) && (Equal4(src, src_ref, src_p))) + { + src_p += 4; + src_ref += 4; + } + if ((src_p < src_LASTLITERALS_1) && (Equal2(src, src_ref, src_p))) + { + src_p += 2; + src_ref += 2; + } + if ((src_p < src_LASTLITERALS) && (src[src_ref] == src[src_p])) src_p++; + + _endCount: + // Encode MatchLength + length = (src_p - src_anchor); + + if (dst_p + (length >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit + + if (length >= ML_MASK) + { + dst[dst_token] += ML_MASK; + length -= ML_MASK; + for (; length > 509; length -= 510) + { + dst[dst_p++] = 255; + dst[dst_p++] = 255; + } + if (length > 254) + { + length -= 255; + dst[dst_p++] = 255; + } + dst[dst_p++] = (byte)length; + } + else + { + dst[dst_token] += (byte)length; + } + + // Test end of chunk + if (src_p > src_mflimit) + { + src_anchor = src_p; + break; + } + + // Fill table + hash_table[(((Peek4(src, src_p - 2)) * 2654435761u) >> HASH_ADJUST)] = (src_p - 2 - src_base); + + // Test next position + + h = (((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST); + src_ref = src_base + hash_table[h]; + hash_table[h] = (src_p - src_base); + + if ((src_ref > src_p - (MAX_DISTANCE + 1)) && (Equal4(src, src_ref, src_p))) + { + dst_token = dst_p++; + dst[dst_token] = 0; + goto _next_match; + } + + // Prepare next loop + src_anchor = src_p++; + h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH_ADJUST); + } + + _last_literals: + // Encode Last Literals + { + var lastRun = (src_end - src_anchor); + + if (dst_p + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > dst_end) return 0; + + if (lastRun >= RUN_MASK) + { + dst[dst_p++] = (RUN_MASK << ML_BITS); + lastRun -= RUN_MASK; + for (; lastRun > 254; lastRun -= 255) dst[dst_p++] = 255; + dst[dst_p++] = (byte)lastRun; + } + else dst[dst_p++] = (byte)(lastRun << ML_BITS); + BlockCopy(src, src_anchor, dst, dst_p, src_end - src_anchor); + dst_p += src_end - src_anchor; + } + + // End + return (dst_p - dst_0); + } + } + + #endregion + + #region LZ4_compress64kCtx + + private static int LZ4_compress64kCtx_safe64( + ushort[] hash_table, + byte[] src, + byte[] dst, + int src_0, + int dst_0, + int src_len, + int dst_maxlen) + { + unchecked + { + var debruijn64 = DEBRUIJN_TABLE_64; + int _i; + + // ---- preprocessed source start here ---- + // r93 + var src_p = src_0; + var src_anchor = src_p; + var src_base = src_p; + var src_end = src_p + src_len; + var src_mflimit = src_end - MFLIMIT; + + var dst_p = dst_0; + var dst_end = dst_p + dst_maxlen; + + var src_LASTLITERALS = src_end - LASTLITERALS; + var src_LASTLITERALS_1 = src_LASTLITERALS - 1; + + var src_LASTLITERALS_3 = src_LASTLITERALS - 3; + + var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_64 - 1); + var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); + var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); + + int len, length; + + uint h, h_fwd; + + // Init + if (src_len < MINLENGTH) goto _last_literals; + + // First Byte + src_p++; + h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH64K_ADJUST); + + // Main Loop + while (true) + { + var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; + var src_p_fwd = src_p; + int src_ref; + int dst_token; + + // Find a match + do + { + h = h_fwd; + var step = findMatchAttempts++ >> SKIPSTRENGTH; + src_p = src_p_fwd; + src_p_fwd = src_p + step; + + if (src_p_fwd > src_mflimit) goto _last_literals; + + h_fwd = (((Peek4(src, src_p_fwd)) * 2654435761u) >> HASH64K_ADJUST); + src_ref = src_base + hash_table[h]; + hash_table[h] = (ushort)(src_p - src_base); + } while (!Equal4(src, src_ref, src_p)); + + // Catch up + while ((src_p > src_anchor) && (src_ref > src_0) && (src[src_p - 1] == src[src_ref - 1])) + { + src_p--; + src_ref--; + } + + // Encode Literal length + length = (src_p - src_anchor); + dst_token = dst_p++; + + if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit + + if (length >= RUN_MASK) + { + len = length - RUN_MASK; + dst[dst_token] = (RUN_MASK << ML_BITS); + if (len > 254) + { + do + { + dst[dst_p++] = 255; + len -= 255; + } while (len > 254); + dst[dst_p++] = (byte)len; + BlockCopy(src, src_anchor, dst, dst_p, length); + dst_p += length; + goto _next_match; + } + else + dst[dst_p++] = (byte)len; + } + else + { + dst[dst_token] = (byte)(length << ML_BITS); + } + + // Copy Literals + if (length > 0) /*?*/ + { + _i = dst_p + length; + WildCopy(src, src_anchor, dst, dst_p, _i); + dst_p = _i; + } + + _next_match: + // Encode Offset + Poke2(dst, dst_p, (ushort)(src_p - src_ref)); + dst_p += 2; + + // Start Counting + src_p += MINMATCH; + src_ref += MINMATCH; // MinMatch verified + src_anchor = src_p; + + while (src_p < src_LASTLITERALS_STEPSIZE_1) + { + var diff = (long)Xor8(src, src_ref, src_p); + if (diff == 0) + { + src_p += STEPSIZE_64; + src_ref += STEPSIZE_64; + continue; + } + src_p += debruijn64[((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL) >> 58]; + goto _endCount; + } + + if ((src_p < src_LASTLITERALS_3) && (Equal4(src, src_ref, src_p))) + { + src_p += 4; + src_ref += 4; + } + if ((src_p < src_LASTLITERALS_1) && (Equal2(src, src_ref, src_p))) + { + src_p += 2; + src_ref += 2; + } + if ((src_p < src_LASTLITERALS) && (src[src_ref] == src[src_p])) src_p++; + + _endCount: + + // Encode MatchLength + len = (src_p - src_anchor); + + if (dst_p + (len >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit + + if (len >= ML_MASK) + { + dst[dst_token] += ML_MASK; + len -= ML_MASK; + for (; len > 509; len -= 510) + { + dst[dst_p++] = 255; + dst[dst_p++] = 255; + } + if (len > 254) + { + len -= 255; + dst[dst_p++] = 255; + } + dst[dst_p++] = (byte)len; + } + else + { + dst[dst_token] += (byte)len; + } + + // Test end of chunk + if (src_p > src_mflimit) + { + src_anchor = src_p; + break; + } + + // Fill table + hash_table[(((Peek4(src, src_p - 2)) * 2654435761u) >> HASH64K_ADJUST)] = (ushort)(src_p - 2 - src_base); + + // Test next position + + h = (((Peek4(src, src_p)) * 2654435761u) >> HASH64K_ADJUST); + src_ref = src_base + hash_table[h]; + hash_table[h] = (ushort)(src_p - src_base); + + if (Equal4(src, src_ref, src_p)) + { + dst_token = dst_p++; + dst[dst_token] = 0; + goto _next_match; + } + + // Prepare next loop + src_anchor = src_p++; + h_fwd = (((Peek4(src, src_p)) * 2654435761u) >> HASH64K_ADJUST); + } + + _last_literals: + // Encode Last Literals + { + var lastRun = (src_end - src_anchor); + if (dst_p + lastRun + 1 + (lastRun - RUN_MASK + 255) / 255 > dst_end) return 0; + if (lastRun >= RUN_MASK) + { + dst[dst_p++] = (RUN_MASK << ML_BITS); + lastRun -= RUN_MASK; + for (; lastRun > 254; lastRun -= 255) dst[dst_p++] = 255; + dst[dst_p++] = (byte)lastRun; + } + else dst[dst_p++] = (byte)(lastRun << ML_BITS); + BlockCopy(src, src_anchor, dst, dst_p, src_end - src_anchor); + dst_p += src_end - src_anchor; + } + + // End + return (dst_p - dst_0); + } + } + + #endregion + + #region LZ4_uncompress + + private static int LZ4_uncompress_safe64( + byte[] src, + byte[] dst, + int src_0, + int dst_0, + int dst_len) + { + unchecked + { + var dec32table = DECODER_TABLE_32; + var dec64table = DECODER_TABLE_64; + int _i; + + // ---- preprocessed source start here ---- + // r93 + var src_p = src_0; + int dst_ref; + + var dst_p = dst_0; + var dst_end = dst_p + dst_len; + int dst_cpy; + + var dst_LASTLITERALS = dst_end - LASTLITERALS; + var dst_COPYLENGTH = dst_end - COPYLENGTH; + var dst_COPYLENGTH_STEPSIZE_4 = dst_end - COPYLENGTH - (STEPSIZE_64 - 4); + + uint token; + + // Main Loop + while (true) + { + int length; + + // get runlength + token = src[src_p++]; + if ((length = (byte)(token >> ML_BITS)) == RUN_MASK) + { + int len; + for (; (len = src[src_p++]) == 255; length += 255) + { + /* do nothing */ + } + length += len; + } + + // copy literals + dst_cpy = dst_p + length; + + if (dst_cpy > dst_COPYLENGTH) + { + if (dst_cpy != dst_end) goto _output_error; // Error : not enough place for another match (min 4) + 5 literals + BlockCopy(src, src_p, dst, dst_p, length); + src_p += length; + break; // EOF + } + if (dst_p < dst_cpy) /*?*/ + { + _i = WildCopy(src, src_p, dst, dst_p, dst_cpy); + src_p += _i; + dst_p += _i; + } + src_p -= (dst_p - dst_cpy); + dst_p = dst_cpy; + + // get offset + dst_ref = (dst_cpy) - Peek2(src, src_p); + src_p += 2; + if (dst_ref < dst_0) goto _output_error; // Error : offset outside destination buffer + + // get matchlength + if ((length = (byte)(token & ML_MASK)) == ML_MASK) + { + for (; src[src_p] == 255; length += 255) src_p++; + length += src[src_p++]; + } + + // copy repeated sequence + if ((dst_p - dst_ref) < STEPSIZE_64) + { + var dec64 = dec64table[dst_p - dst_ref]; + + dst[dst_p + 0] = dst[dst_ref + 0]; + dst[dst_p + 1] = dst[dst_ref + 1]; + dst[dst_p + 2] = dst[dst_ref + 2]; + dst[dst_p + 3] = dst[dst_ref + 3]; + dst_p += 4; + dst_ref += 4; + dst_ref -= dec32table[dst_p - dst_ref]; + Copy4(dst, dst_ref, dst_p); + dst_p += STEPSIZE_64 - 4; + dst_ref -= dec64; + } + else + { + Copy8(dst, dst_ref, dst_p); + dst_p += 8; + dst_ref += 8; + } + dst_cpy = dst_p + length - (STEPSIZE_64 - 4); + + if (dst_cpy > dst_COPYLENGTH_STEPSIZE_4) + { + if (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals + if (dst_p < dst_COPYLENGTH) + { + _i = SecureCopy(dst, dst_ref, dst_p, dst_COPYLENGTH); + dst_ref += _i; + dst_p += _i; + } + + while (dst_p < dst_cpy) dst[dst_p++] = dst[dst_ref++]; + dst_p = dst_cpy; + continue; + } + + if (dst_p < dst_cpy) + { + SecureCopy(dst, dst_ref, dst_p, dst_cpy); + } + dst_p = dst_cpy; // correction + } + + // end of decoding + return ((src_p) - src_0); + + _output_error: + // write overflow error detected + return (-((src_p) - src_0)); + } + } + + #endregion + } +} + +// ReSharper restore RedundantIfElseBlock +// ReSharper restore JoinDeclarationAndInitializer +// ReSharper restore TooWideLocalVariableScope +// ReSharper restore InconsistentNaming // ReSharper restore CheckNamespace \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Unsafe.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Unsafe.cs index 138a2066c..38c1a085a 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Unsafe.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Unsafe.cs @@ -1,222 +1,222 @@ -#if ENABLE_UNSAFE_MSGPACK - -#region license - -/* -Copyright (c) 2013, Milosz Krajewski -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided -that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions - and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions - and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#endregion - -using System; - -namespace MessagePack.LZ4 -{ - /// Unsafe LZ4 codec. - public static partial class LZ4Codec - { - /// Copies block of memory. - /// The source. - /// The destination. - /// The length (in bytes). - private static unsafe void BlockCopy(byte* src, byte* dst, int len) - { - while (len >= 8) - { - *(ulong*)dst = *(ulong*)src; - dst += 8; - src += 8; - len -= 8; - } - if (len >= 4) - { - *(uint*)dst = *(uint*)src; - dst += 4; - src += 4; - len -= 4; - } - if (len >= 2) - { - *(ushort*)dst = *(ushort*)src; - dst += 2; - src += 2; - len -= 2; - } - if (len >= 1) - { - *dst = *src; /* d++; s++; l--; */ - } - } - - /// Encodes the specified input. - /// The input. - /// The input offset. - /// Length of the input. - /// The output. - /// The output offset. - /// Length of the output. - /// Number of bytes written. - public static unsafe int Encode32Unsafe( - byte[] input, - int inputOffset, - int inputLength, - byte[] output, - int outputOffset, - int outputLength) - { - CheckArguments(input, inputOffset, inputLength, output, outputOffset, outputLength); - - if (outputLength == 0) return 0; - - fixed (byte* inputPtr = &input[inputOffset]) - fixed (byte* outputPtr = &output[outputOffset]) - { - if (inputLength < LZ4_64KLIMIT) - { - var uHashTable = HashTablePool.GetUShortHashTablePool(); - fixed (ushort* hash1 = &uHashTable[0]) - { - return LZ4_compress64kCtx_32(hash1, inputPtr, outputPtr, inputLength, outputLength); - } - } - else - { - var bHashTable = HashTablePool.GetUIntHashTablePool(); - fixed (uint* hash2 = &bHashTable[0]) - { - return LZ4_compressCtx_32(hash2, inputPtr, outputPtr, inputLength, outputLength); - } - } - } - } - - /// Decodes the specified input. - /// The input. - /// The input offset. - /// Length of the input. - /// The output. - /// The output offset. - /// Length of the output. - /// Number of bytes written. - public static unsafe int Decode32Unsafe( - byte[] input, - int inputOffset, - int inputLength, - byte[] output, - int outputOffset, - int outputLength) - { - CheckArguments( - input, inputOffset, inputLength, - output, outputOffset, outputLength); - - if (outputLength == 0) return 0; - - fixed (byte* inputPtr = &input[inputOffset]) - fixed (byte* outputPtr = &output[outputOffset]) - { - var length = LZ4_uncompress_32(inputPtr, outputPtr, outputLength); - if (length != inputLength) - throw new ArgumentException("LZ4 block is corrupted, or invalid length has been given."); - return outputLength; - } - } - - /// Encodes the specified input. - /// The input. - /// The input offset. - /// Length of the input. - /// The output. - /// The output offset. - /// Length of the output. - /// Number of bytes written. - public static unsafe int Encode64Unsafe( - byte[] input, - int inputOffset, - int inputLength, - byte[] output, - int outputOffset, - int outputLength) - { - CheckArguments( - input, inputOffset, inputLength, - output, outputOffset, outputLength); - - if (outputLength == 0) return 0; - - fixed (byte* inputPtr = &input[inputOffset]) - fixed (byte* outputPtr = &output[outputOffset]) - { - if (inputLength < LZ4_64KLIMIT) - { - var uHashTable = HashTablePool.GetUShortHashTablePool(); - fixed (ushort* h1 = &uHashTable[0]) - { - return LZ4_compress64kCtx_64(h1, inputPtr, outputPtr, inputLength, outputLength); - } - } - else - { - var uiHashTable = HashTablePool.GetUIntHashTablePool(); - fixed (uint* h2 = &uiHashTable[0]) - { - return LZ4_compressCtx_64(h2, inputPtr, outputPtr, inputLength, outputLength); - } - } - } - } - - /// Decode64s the specified input. - /// The input. - /// The input offset. - /// Length of the input. - /// The output. - /// The output offset. - /// Length of the output. - /// Number of bytes written. - public static unsafe int Decode64Unsafe( - byte[] input, - int inputOffset, - int inputLength, - byte[] output, - int outputOffset, - int outputLength) - { - CheckArguments( - input, inputOffset, inputLength, - output, outputOffset, outputLength); - - if (outputLength == 0) return 0; - - fixed (byte* inputPtr = &input[inputOffset]) - fixed (byte* outputPtr = &output[outputOffset]) - { - var length = LZ4_uncompress_64(inputPtr, outputPtr, outputLength); - if (length != inputLength) - throw new ArgumentException("LZ4 block is corrupted, or invalid length has been given."); - return outputLength; - } - } - } -} - +#if ENABLE_UNSAFE_MSGPACK + +#region license + +/* +Copyright (c) 2013, Milosz Krajewski +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided +that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions + and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions + and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#endregion + +using System; + +namespace MessagePack.LZ4 +{ + /// Unsafe LZ4 codec. + public static partial class LZ4Codec + { + /// Copies block of memory. + /// The source. + /// The destination. + /// The length (in bytes). + private static unsafe void BlockCopy(byte* src, byte* dst, int len) + { + while (len >= 8) + { + *(ulong*)dst = *(ulong*)src; + dst += 8; + src += 8; + len -= 8; + } + if (len >= 4) + { + *(uint*)dst = *(uint*)src; + dst += 4; + src += 4; + len -= 4; + } + if (len >= 2) + { + *(ushort*)dst = *(ushort*)src; + dst += 2; + src += 2; + len -= 2; + } + if (len >= 1) + { + *dst = *src; /* d++; s++; l--; */ + } + } + + /// Encodes the specified input. + /// The input. + /// The input offset. + /// Length of the input. + /// The output. + /// The output offset. + /// Length of the output. + /// Number of bytes written. + public static unsafe int Encode32Unsafe( + byte[] input, + int inputOffset, + int inputLength, + byte[] output, + int outputOffset, + int outputLength) + { + CheckArguments(input, inputOffset, inputLength, output, outputOffset, outputLength); + + if (outputLength == 0) return 0; + + fixed (byte* inputPtr = &input[inputOffset]) + fixed (byte* outputPtr = &output[outputOffset]) + { + if (inputLength < LZ4_64KLIMIT) + { + var uHashTable = HashTablePool.GetUShortHashTablePool(); + fixed (ushort* hash1 = &uHashTable[0]) + { + return LZ4_compress64kCtx_32(hash1, inputPtr, outputPtr, inputLength, outputLength); + } + } + else + { + var bHashTable = HashTablePool.GetUIntHashTablePool(); + fixed (uint* hash2 = &bHashTable[0]) + { + return LZ4_compressCtx_32(hash2, inputPtr, outputPtr, inputLength, outputLength); + } + } + } + } + + /// Decodes the specified input. + /// The input. + /// The input offset. + /// Length of the input. + /// The output. + /// The output offset. + /// Length of the output. + /// Number of bytes written. + public static unsafe int Decode32Unsafe( + byte[] input, + int inputOffset, + int inputLength, + byte[] output, + int outputOffset, + int outputLength) + { + CheckArguments( + input, inputOffset, inputLength, + output, outputOffset, outputLength); + + if (outputLength == 0) return 0; + + fixed (byte* inputPtr = &input[inputOffset]) + fixed (byte* outputPtr = &output[outputOffset]) + { + var length = LZ4_uncompress_32(inputPtr, outputPtr, outputLength); + if (length != inputLength) + throw new ArgumentException("LZ4 block is corrupted, or invalid length has been given."); + return outputLength; + } + } + + /// Encodes the specified input. + /// The input. + /// The input offset. + /// Length of the input. + /// The output. + /// The output offset. + /// Length of the output. + /// Number of bytes written. + public static unsafe int Encode64Unsafe( + byte[] input, + int inputOffset, + int inputLength, + byte[] output, + int outputOffset, + int outputLength) + { + CheckArguments( + input, inputOffset, inputLength, + output, outputOffset, outputLength); + + if (outputLength == 0) return 0; + + fixed (byte* inputPtr = &input[inputOffset]) + fixed (byte* outputPtr = &output[outputOffset]) + { + if (inputLength < LZ4_64KLIMIT) + { + var uHashTable = HashTablePool.GetUShortHashTablePool(); + fixed (ushort* h1 = &uHashTable[0]) + { + return LZ4_compress64kCtx_64(h1, inputPtr, outputPtr, inputLength, outputLength); + } + } + else + { + var uiHashTable = HashTablePool.GetUIntHashTablePool(); + fixed (uint* h2 = &uiHashTable[0]) + { + return LZ4_compressCtx_64(h2, inputPtr, outputPtr, inputLength, outputLength); + } + } + } + } + + /// Decode64s the specified input. + /// The input. + /// The input offset. + /// Length of the input. + /// The output. + /// The output offset. + /// Length of the output. + /// Number of bytes written. + public static unsafe int Decode64Unsafe( + byte[] input, + int inputOffset, + int inputLength, + byte[] output, + int outputOffset, + int outputLength) + { + CheckArguments( + input, inputOffset, inputLength, + output, outputOffset, outputLength); + + if (outputLength == 0) return 0; + + fixed (byte* inputPtr = &input[inputOffset]) + fixed (byte* outputPtr = &output[outputOffset]) + { + var length = LZ4_uncompress_64(inputPtr, outputPtr, outputLength); + if (length != inputLength) + throw new ArgumentException("LZ4 block is corrupted, or invalid length has been given."); + return outputLength; + } + } + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Unsafe32.Dirty.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Unsafe32.Dirty.cs index 89b5847f6..68fa9e903 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Unsafe32.Dirty.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Unsafe32.Dirty.cs @@ -1,680 +1,680 @@ -#if ENABLE_UNSAFE_MSGPACK - -#region LZ4 original - -/* - LZ4 - Fast LZ compression algorithm - Copyright (C) 2011-2012, Yann Collet. - BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - You can contact the author at : - - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html - - LZ4 source repository : http://code.google.com/p/lz4/ -*/ - -#endregion - -#region LZ4 port - -/* -Copyright (c) 2013, Milosz Krajewski -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided -that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions - and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions - and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#endregion - -// ReSharper disable InconsistentNaming -// ReSharper disable TooWideLocalVariableScope -// ReSharper disable JoinDeclarationAndInitializer - -namespace MessagePack.LZ4 -{ - public static partial class LZ4Codec - { - #region LZ4_compressCtx_32 - - private static unsafe int LZ4_compressCtx_32( - uint* hash_table, - byte* src, - byte* dst, - int src_len, - int dst_maxlen) - { - unchecked - { - byte* _p; - - fixed (int* debruijn32 = &DEBRUIJN_TABLE_32[0]) - { - // r93 - var src_p = src; - var src_base = src_p; - var src_anchor = src_p; - var src_end = src_p + src_len; - var src_mflimit = src_end - MFLIMIT; - - var dst_p = dst; - var dst_end = dst_p + dst_maxlen; - - var src_LASTLITERALS = src_end - LASTLITERALS; - var src_LASTLITERALS_1 = src_LASTLITERALS - 1; - - var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_32 - 1); - var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); - var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); - - int length; - - uint h, h_fwd; - - // Init - if (src_len < MINLENGTH) goto _last_literals; - - // First Byte - hash_table[((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST)] = (uint)(src_p - src_base); - src_p++; - h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); - - // Main Loop - while (true) - { - var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; - var src_p_fwd = src_p; - byte* xxx_ref; - byte* xxx_token; - - // Find a match - do - { - h = h_fwd; - var step = findMatchAttempts++ >> SKIPSTRENGTH; - src_p = src_p_fwd; - src_p_fwd = src_p + step; - - if (src_p_fwd > src_mflimit) goto _last_literals; - - h_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH_ADJUST); - xxx_ref = src_base + hash_table[h]; - hash_table[h] = (uint)(src_p - src_base); - } while ((xxx_ref < src_p - MAX_DISTANCE) || ((*(uint*)(xxx_ref)) != (*(uint*)(src_p)))); - - // Catch up - while ((src_p > src_anchor) && (xxx_ref > src) && (src_p[-1] == xxx_ref[-1])) - { - src_p--; - xxx_ref--; - } - - // Encode Literal length - length = (int)(src_p - src_anchor); - xxx_token = dst_p++; - - if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit - - if (length >= RUN_MASK) - { - var len = length - RUN_MASK; - *xxx_token = (RUN_MASK << ML_BITS); - if (len > 254) - { - do - { - *dst_p++ = 255; - len -= 255; - } while (len > 254); - *dst_p++ = (byte)len; - BlockCopy(src_anchor, dst_p, (length)); - dst_p += length; - goto _next_match; - } - *dst_p++ = (byte)len; - } - else - { - *xxx_token = (byte)(length << ML_BITS); - } - - // Copy Literals - _p = dst_p + (length); - do - { - *(uint*)dst_p = *(uint*)src_anchor; - dst_p += 4; - src_anchor += 4; - *(uint*)dst_p = *(uint*)src_anchor; - dst_p += 4; - src_anchor += 4; - } while (dst_p < _p); - dst_p = _p; - - _next_match: - - // Encode Offset - *(ushort*)dst_p = (ushort)(src_p - xxx_ref); - dst_p += 2; - - // Start Counting - src_p += MINMATCH; - xxx_ref += MINMATCH; // MinMatch already verified - src_anchor = src_p; - - while (src_p < src_LASTLITERALS_STEPSIZE_1) - { - var diff = (*(int*)(xxx_ref)) ^ (*(int*)(src_p)); - if (diff == 0) - { - src_p += STEPSIZE_32; - xxx_ref += STEPSIZE_32; - continue; - } - src_p += debruijn32[(((uint)((diff) & -(diff)) * 0x077CB531u)) >> 27]; - goto _endCount; - } - - if ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(xxx_ref)) == (*(ushort*)(src_p)))) - { - src_p += 2; - xxx_ref += 2; - } - if ((src_p < src_LASTLITERALS) && (*xxx_ref == *src_p)) src_p++; - - _endCount: - - // Encode MatchLength - length = (int)(src_p - src_anchor); - - if (dst_p + (length >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit - - if (length >= ML_MASK) - { - *xxx_token += ML_MASK; - length -= ML_MASK; - for (; length > 509; length -= 510) - { - *dst_p++ = 255; - *dst_p++ = 255; - } - if (length > 254) - { - length -= 255; - *dst_p++ = 255; - } - *dst_p++ = (byte)length; - } - else - { - *xxx_token += (byte)length; - } - - // Test end of chunk - if (src_p > src_mflimit) - { - src_anchor = src_p; - break; - } - - // Fill table - hash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH_ADJUST)] = (uint)(src_p - 2 - src_base); - - // Test next position - - h = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); - xxx_ref = src_base + hash_table[h]; - hash_table[h] = (uint)(src_p - src_base); - - if ((xxx_ref > src_p - (MAX_DISTANCE + 1)) && ((*(uint*)(xxx_ref)) == (*(uint*)(src_p)))) - { - xxx_token = dst_p++; - *xxx_token = 0; - goto _next_match; - } - - // Prepare next loop - src_anchor = src_p++; - h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); - } - - _last_literals: - - // Encode Last Literals - { - var lastRun = (int)(src_end - src_anchor); - - if (dst_p + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > dst_end) return 0; - - if (lastRun >= RUN_MASK) - { - *dst_p++ = (RUN_MASK << ML_BITS); - lastRun -= RUN_MASK; - for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; - *dst_p++ = (byte)lastRun; - } - else *dst_p++ = (byte)(lastRun << ML_BITS); - BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); - dst_p += src_end - src_anchor; - } - - // End - return (int)((dst_p) - dst); - } - } - } - - #endregion - - #region LZ4_compress64kCtx_32 - - private static unsafe int LZ4_compress64kCtx_32( - ushort* hash_table, - byte* src, - byte* dst, - int src_len, - int dst_maxlen) - { - unchecked - { - byte* _p; - fixed (int* debruijn32 = &DEBRUIJN_TABLE_32[0]) - { - // r93 - var src_p = src; - var src_anchor = src_p; - var src_base = src_p; - var src_end = src_p + src_len; - var src_mflimit = src_end - MFLIMIT; - - var dst_p = dst; - var dst_end = dst_p + dst_maxlen; - - var src_LASTLITERALS = src_end - LASTLITERALS; - var src_LASTLITERALS_1 = src_LASTLITERALS - 1; - - var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_32 - 1); - var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); - var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); - - int len, length; - - uint h, h_fwd; - - // Init - if (src_len < MINLENGTH) goto _last_literals; - - // First Byte - src_p++; - h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); - - // Main Loop - while (true) - { - var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; - var src_p_fwd = src_p; - byte* xxx_ref; - byte* xxx_token; - - // Find a match - do - { - h = h_fwd; - var step = findMatchAttempts++ >> SKIPSTRENGTH; - src_p = src_p_fwd; - src_p_fwd = src_p + step; - - if (src_p_fwd > src_mflimit) goto _last_literals; - - h_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH64K_ADJUST); - xxx_ref = src_base + hash_table[h]; - hash_table[h] = (ushort)(src_p - src_base); - } while ((*(uint*)(xxx_ref)) != (*(uint*)(src_p))); - - // Catch up - while ((src_p > src_anchor) && (xxx_ref > src) && (src_p[-1] == xxx_ref[-1])) - { - src_p--; - xxx_ref--; - } - - // Encode Literal length - length = (int)(src_p - src_anchor); - xxx_token = dst_p++; - - if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit - - if (length >= RUN_MASK) - { - len = length - RUN_MASK; - *xxx_token = (RUN_MASK << ML_BITS); - if (len > 254) - { - do - { - *dst_p++ = 255; - len -= 255; - } while (len > 254); - *dst_p++ = (byte)len; - BlockCopy(src_anchor, dst_p, (length)); - dst_p += length; - goto _next_match; - } - *dst_p++ = (byte)len; - } - else - { - *xxx_token = (byte)(length << ML_BITS); - } - - // Copy Literals - _p = dst_p + (length); - do - { - *(uint*)dst_p = *(uint*)src_anchor; - dst_p += 4; - src_anchor += 4; - *(uint*)dst_p = *(uint*)src_anchor; - dst_p += 4; - src_anchor += 4; - } while (dst_p < _p); - dst_p = _p; - - _next_match: - - // Encode Offset - *(ushort*)dst_p = (ushort)(src_p - xxx_ref); - dst_p += 2; - - // Start Counting - src_p += MINMATCH; - xxx_ref += MINMATCH; // MinMatch verified - src_anchor = src_p; - - while (src_p < src_LASTLITERALS_STEPSIZE_1) - { - var diff = (*(int*)(xxx_ref)) ^ (*(int*)(src_p)); - if (diff == 0) - { - src_p += STEPSIZE_32; - xxx_ref += STEPSIZE_32; - continue; - } - src_p += debruijn32[(((uint)((diff) & -(diff)) * 0x077CB531u)) >> 27]; - goto _endCount; - } - - if ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(xxx_ref)) == (*(ushort*)(src_p)))) - { - src_p += 2; - xxx_ref += 2; - } - if ((src_p < src_LASTLITERALS) && (*xxx_ref == *src_p)) src_p++; - - _endCount: - - // Encode MatchLength - len = (int)(src_p - src_anchor); - - if (dst_p + (len >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit - - if (len >= ML_MASK) - { - *xxx_token += ML_MASK; - len -= ML_MASK; - for (; len > 509; len -= 510) - { - *dst_p++ = 255; - *dst_p++ = 255; - } - if (len > 254) - { - len -= 255; - *dst_p++ = 255; - } - *dst_p++ = (byte)len; - } - else *xxx_token += (byte)len; - - // Test end of chunk - if (src_p > src_mflimit) - { - src_anchor = src_p; - break; - } - - // Fill table - hash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH64K_ADJUST)] = (ushort)(src_p - 2 - src_base); - - // Test next position - - h = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); - xxx_ref = src_base + hash_table[h]; - hash_table[h] = (ushort)(src_p - src_base); - - if ((*(uint*)(xxx_ref)) == (*(uint*)(src_p))) - { - xxx_token = dst_p++; - *xxx_token = 0; - goto _next_match; - } - - // Prepare next loop - src_anchor = src_p++; - h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); - } - - _last_literals: - - // Encode Last Literals - { - var lastRun = (int)(src_end - src_anchor); - if (dst_p + lastRun + 1 + (lastRun - RUN_MASK + 255) / 255 > dst_end) return 0; - if (lastRun >= RUN_MASK) - { - *dst_p++ = (RUN_MASK << ML_BITS); - lastRun -= RUN_MASK; - for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; - *dst_p++ = (byte)lastRun; - } - else *dst_p++ = (byte)(lastRun << ML_BITS); - BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); - dst_p += src_end - src_anchor; - } - - // End - return (int)((dst_p) - dst); - } - } - } - - #endregion - - #region LZ4_uncompress_32 - - private static unsafe int LZ4_uncompress_32( - byte* src, - byte* dst, - int dst_len) - { - unchecked - { - fixed (int* dec32table = &DECODER_TABLE_32[0]) - { - // r93 - var src_p = src; - byte* xxx_ref; - - var dst_p = dst; - var dst_end = dst_p + dst_len; - byte* dst_cpy; - - var dst_LASTLITERALS = dst_end - LASTLITERALS; - var dst_COPYLENGTH = dst_end - COPYLENGTH; - var dst_COPYLENGTH_STEPSIZE_4 = dst_end - COPYLENGTH - (STEPSIZE_32 - 4); - - uint xxx_token; - - // Main Loop - while (true) - { - int length; - - // get runlength - xxx_token = *src_p++; - if ((length = (int)(xxx_token >> ML_BITS)) == RUN_MASK) - { - int len; - for (; (len = *src_p++) == 255; length += 255) - { - /* do nothing */ - } - length += len; - } - - // copy literals - dst_cpy = dst_p + length; - - if (dst_cpy > dst_COPYLENGTH) - { - if (dst_cpy != dst_end) goto _output_error; // Error : not enough place for another match (min 4) + 5 literals - BlockCopy(src_p, dst_p, (length)); - src_p += length; - break; // EOF - } - do - { - *(uint*)dst_p = *(uint*)src_p; - dst_p += 4; - src_p += 4; - *(uint*)dst_p = *(uint*)src_p; - dst_p += 4; - src_p += 4; - } while (dst_p < dst_cpy); - src_p -= (dst_p - dst_cpy); - dst_p = dst_cpy; - - // get offset - xxx_ref = (dst_cpy) - (*(ushort*)(src_p)); - src_p += 2; - if (xxx_ref < dst) goto _output_error; // Error : offset outside destination buffer - - // get matchlength - if ((length = (int)(xxx_token & ML_MASK)) == ML_MASK) - { - for (; *src_p == 255; length += 255) src_p++; - length += *src_p++; - } - - // copy repeated sequence - if ((dst_p - xxx_ref) < STEPSIZE_32) - { - const int dec64 = 0; - - dst_p[0] = xxx_ref[0]; - dst_p[1] = xxx_ref[1]; - dst_p[2] = xxx_ref[2]; - dst_p[3] = xxx_ref[3]; - dst_p += 4; - xxx_ref += 4; - xxx_ref -= dec32table[dst_p - xxx_ref]; - (*(uint*)(dst_p)) = (*(uint*)(xxx_ref)); - dst_p += STEPSIZE_32 - 4; - xxx_ref -= dec64; - } - else - { - *(uint*)dst_p = *(uint*)xxx_ref; - dst_p += 4; - xxx_ref += 4; - } - dst_cpy = dst_p + length - (STEPSIZE_32 - 4); - - if (dst_cpy > dst_COPYLENGTH_STEPSIZE_4) - { - if (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals - { - do - { - *(uint*)dst_p = *(uint*)xxx_ref; - dst_p += 4; - xxx_ref += 4; - *(uint*)dst_p = *(uint*)xxx_ref; - dst_p += 4; - xxx_ref += 4; - } while (dst_p < dst_COPYLENGTH); - } - - while (dst_p < dst_cpy) *dst_p++ = *xxx_ref++; - dst_p = dst_cpy; - continue; - } - - do - { - *(uint*)dst_p = *(uint*)xxx_ref; - dst_p += 4; - xxx_ref += 4; - *(uint*)dst_p = *(uint*)xxx_ref; - dst_p += 4; - xxx_ref += 4; - } while (dst_p < dst_cpy); - dst_p = dst_cpy; // correction - } - - // end of decoding - return (int)((src_p) - src); - - // write overflow error detected - _output_error: - return (int)(-((src_p) - src)); - } - } - } - - #endregion - } -} - -// ReSharper restore JoinDeclarationAndInitializer -// ReSharper restore TooWideLocalVariableScope -// ReSharper restore InconsistentNaming - +#if ENABLE_UNSAFE_MSGPACK + +#region LZ4 original + +/* + LZ4 - Fast LZ compression algorithm + Copyright (C) 2011-2012, Yann Collet. + BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + You can contact the author at : + - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html + - LZ4 source repository : http://code.google.com/p/lz4/ +*/ + +#endregion + +#region LZ4 port + +/* +Copyright (c) 2013, Milosz Krajewski +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided +that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions + and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions + and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#endregion + +// ReSharper disable InconsistentNaming +// ReSharper disable TooWideLocalVariableScope +// ReSharper disable JoinDeclarationAndInitializer + +namespace MessagePack.LZ4 +{ + public static partial class LZ4Codec + { + #region LZ4_compressCtx_32 + + private static unsafe int LZ4_compressCtx_32( + uint* hash_table, + byte* src, + byte* dst, + int src_len, + int dst_maxlen) + { + unchecked + { + byte* _p; + + fixed (int* debruijn32 = &DEBRUIJN_TABLE_32[0]) + { + // r93 + var src_p = src; + var src_base = src_p; + var src_anchor = src_p; + var src_end = src_p + src_len; + var src_mflimit = src_end - MFLIMIT; + + var dst_p = dst; + var dst_end = dst_p + dst_maxlen; + + var src_LASTLITERALS = src_end - LASTLITERALS; + var src_LASTLITERALS_1 = src_LASTLITERALS - 1; + + var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_32 - 1); + var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); + var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); + + int length; + + uint h, h_fwd; + + // Init + if (src_len < MINLENGTH) goto _last_literals; + + // First Byte + hash_table[((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST)] = (uint)(src_p - src_base); + src_p++; + h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); + + // Main Loop + while (true) + { + var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; + var src_p_fwd = src_p; + byte* xxx_ref; + byte* xxx_token; + + // Find a match + do + { + h = h_fwd; + var step = findMatchAttempts++ >> SKIPSTRENGTH; + src_p = src_p_fwd; + src_p_fwd = src_p + step; + + if (src_p_fwd > src_mflimit) goto _last_literals; + + h_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH_ADJUST); + xxx_ref = src_base + hash_table[h]; + hash_table[h] = (uint)(src_p - src_base); + } while ((xxx_ref < src_p - MAX_DISTANCE) || ((*(uint*)(xxx_ref)) != (*(uint*)(src_p)))); + + // Catch up + while ((src_p > src_anchor) && (xxx_ref > src) && (src_p[-1] == xxx_ref[-1])) + { + src_p--; + xxx_ref--; + } + + // Encode Literal length + length = (int)(src_p - src_anchor); + xxx_token = dst_p++; + + if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit + + if (length >= RUN_MASK) + { + var len = length - RUN_MASK; + *xxx_token = (RUN_MASK << ML_BITS); + if (len > 254) + { + do + { + *dst_p++ = 255; + len -= 255; + } while (len > 254); + *dst_p++ = (byte)len; + BlockCopy(src_anchor, dst_p, (length)); + dst_p += length; + goto _next_match; + } + *dst_p++ = (byte)len; + } + else + { + *xxx_token = (byte)(length << ML_BITS); + } + + // Copy Literals + _p = dst_p + (length); + do + { + *(uint*)dst_p = *(uint*)src_anchor; + dst_p += 4; + src_anchor += 4; + *(uint*)dst_p = *(uint*)src_anchor; + dst_p += 4; + src_anchor += 4; + } while (dst_p < _p); + dst_p = _p; + + _next_match: + + // Encode Offset + *(ushort*)dst_p = (ushort)(src_p - xxx_ref); + dst_p += 2; + + // Start Counting + src_p += MINMATCH; + xxx_ref += MINMATCH; // MinMatch already verified + src_anchor = src_p; + + while (src_p < src_LASTLITERALS_STEPSIZE_1) + { + var diff = (*(int*)(xxx_ref)) ^ (*(int*)(src_p)); + if (diff == 0) + { + src_p += STEPSIZE_32; + xxx_ref += STEPSIZE_32; + continue; + } + src_p += debruijn32[(((uint)((diff) & -(diff)) * 0x077CB531u)) >> 27]; + goto _endCount; + } + + if ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(xxx_ref)) == (*(ushort*)(src_p)))) + { + src_p += 2; + xxx_ref += 2; + } + if ((src_p < src_LASTLITERALS) && (*xxx_ref == *src_p)) src_p++; + + _endCount: + + // Encode MatchLength + length = (int)(src_p - src_anchor); + + if (dst_p + (length >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit + + if (length >= ML_MASK) + { + *xxx_token += ML_MASK; + length -= ML_MASK; + for (; length > 509; length -= 510) + { + *dst_p++ = 255; + *dst_p++ = 255; + } + if (length > 254) + { + length -= 255; + *dst_p++ = 255; + } + *dst_p++ = (byte)length; + } + else + { + *xxx_token += (byte)length; + } + + // Test end of chunk + if (src_p > src_mflimit) + { + src_anchor = src_p; + break; + } + + // Fill table + hash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH_ADJUST)] = (uint)(src_p - 2 - src_base); + + // Test next position + + h = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); + xxx_ref = src_base + hash_table[h]; + hash_table[h] = (uint)(src_p - src_base); + + if ((xxx_ref > src_p - (MAX_DISTANCE + 1)) && ((*(uint*)(xxx_ref)) == (*(uint*)(src_p)))) + { + xxx_token = dst_p++; + *xxx_token = 0; + goto _next_match; + } + + // Prepare next loop + src_anchor = src_p++; + h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); + } + + _last_literals: + + // Encode Last Literals + { + var lastRun = (int)(src_end - src_anchor); + + if (dst_p + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > dst_end) return 0; + + if (lastRun >= RUN_MASK) + { + *dst_p++ = (RUN_MASK << ML_BITS); + lastRun -= RUN_MASK; + for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; + *dst_p++ = (byte)lastRun; + } + else *dst_p++ = (byte)(lastRun << ML_BITS); + BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); + dst_p += src_end - src_anchor; + } + + // End + return (int)((dst_p) - dst); + } + } + } + + #endregion + + #region LZ4_compress64kCtx_32 + + private static unsafe int LZ4_compress64kCtx_32( + ushort* hash_table, + byte* src, + byte* dst, + int src_len, + int dst_maxlen) + { + unchecked + { + byte* _p; + fixed (int* debruijn32 = &DEBRUIJN_TABLE_32[0]) + { + // r93 + var src_p = src; + var src_anchor = src_p; + var src_base = src_p; + var src_end = src_p + src_len; + var src_mflimit = src_end - MFLIMIT; + + var dst_p = dst; + var dst_end = dst_p + dst_maxlen; + + var src_LASTLITERALS = src_end - LASTLITERALS; + var src_LASTLITERALS_1 = src_LASTLITERALS - 1; + + var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_32 - 1); + var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); + var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); + + int len, length; + + uint h, h_fwd; + + // Init + if (src_len < MINLENGTH) goto _last_literals; + + // First Byte + src_p++; + h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); + + // Main Loop + while (true) + { + var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; + var src_p_fwd = src_p; + byte* xxx_ref; + byte* xxx_token; + + // Find a match + do + { + h = h_fwd; + var step = findMatchAttempts++ >> SKIPSTRENGTH; + src_p = src_p_fwd; + src_p_fwd = src_p + step; + + if (src_p_fwd > src_mflimit) goto _last_literals; + + h_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH64K_ADJUST); + xxx_ref = src_base + hash_table[h]; + hash_table[h] = (ushort)(src_p - src_base); + } while ((*(uint*)(xxx_ref)) != (*(uint*)(src_p))); + + // Catch up + while ((src_p > src_anchor) && (xxx_ref > src) && (src_p[-1] == xxx_ref[-1])) + { + src_p--; + xxx_ref--; + } + + // Encode Literal length + length = (int)(src_p - src_anchor); + xxx_token = dst_p++; + + if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit + + if (length >= RUN_MASK) + { + len = length - RUN_MASK; + *xxx_token = (RUN_MASK << ML_BITS); + if (len > 254) + { + do + { + *dst_p++ = 255; + len -= 255; + } while (len > 254); + *dst_p++ = (byte)len; + BlockCopy(src_anchor, dst_p, (length)); + dst_p += length; + goto _next_match; + } + *dst_p++ = (byte)len; + } + else + { + *xxx_token = (byte)(length << ML_BITS); + } + + // Copy Literals + _p = dst_p + (length); + do + { + *(uint*)dst_p = *(uint*)src_anchor; + dst_p += 4; + src_anchor += 4; + *(uint*)dst_p = *(uint*)src_anchor; + dst_p += 4; + src_anchor += 4; + } while (dst_p < _p); + dst_p = _p; + + _next_match: + + // Encode Offset + *(ushort*)dst_p = (ushort)(src_p - xxx_ref); + dst_p += 2; + + // Start Counting + src_p += MINMATCH; + xxx_ref += MINMATCH; // MinMatch verified + src_anchor = src_p; + + while (src_p < src_LASTLITERALS_STEPSIZE_1) + { + var diff = (*(int*)(xxx_ref)) ^ (*(int*)(src_p)); + if (diff == 0) + { + src_p += STEPSIZE_32; + xxx_ref += STEPSIZE_32; + continue; + } + src_p += debruijn32[(((uint)((diff) & -(diff)) * 0x077CB531u)) >> 27]; + goto _endCount; + } + + if ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(xxx_ref)) == (*(ushort*)(src_p)))) + { + src_p += 2; + xxx_ref += 2; + } + if ((src_p < src_LASTLITERALS) && (*xxx_ref == *src_p)) src_p++; + + _endCount: + + // Encode MatchLength + len = (int)(src_p - src_anchor); + + if (dst_p + (len >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit + + if (len >= ML_MASK) + { + *xxx_token += ML_MASK; + len -= ML_MASK; + for (; len > 509; len -= 510) + { + *dst_p++ = 255; + *dst_p++ = 255; + } + if (len > 254) + { + len -= 255; + *dst_p++ = 255; + } + *dst_p++ = (byte)len; + } + else *xxx_token += (byte)len; + + // Test end of chunk + if (src_p > src_mflimit) + { + src_anchor = src_p; + break; + } + + // Fill table + hash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH64K_ADJUST)] = (ushort)(src_p - 2 - src_base); + + // Test next position + + h = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); + xxx_ref = src_base + hash_table[h]; + hash_table[h] = (ushort)(src_p - src_base); + + if ((*(uint*)(xxx_ref)) == (*(uint*)(src_p))) + { + xxx_token = dst_p++; + *xxx_token = 0; + goto _next_match; + } + + // Prepare next loop + src_anchor = src_p++; + h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); + } + + _last_literals: + + // Encode Last Literals + { + var lastRun = (int)(src_end - src_anchor); + if (dst_p + lastRun + 1 + (lastRun - RUN_MASK + 255) / 255 > dst_end) return 0; + if (lastRun >= RUN_MASK) + { + *dst_p++ = (RUN_MASK << ML_BITS); + lastRun -= RUN_MASK; + for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; + *dst_p++ = (byte)lastRun; + } + else *dst_p++ = (byte)(lastRun << ML_BITS); + BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); + dst_p += src_end - src_anchor; + } + + // End + return (int)((dst_p) - dst); + } + } + } + + #endregion + + #region LZ4_uncompress_32 + + private static unsafe int LZ4_uncompress_32( + byte* src, + byte* dst, + int dst_len) + { + unchecked + { + fixed (int* dec32table = &DECODER_TABLE_32[0]) + { + // r93 + var src_p = src; + byte* xxx_ref; + + var dst_p = dst; + var dst_end = dst_p + dst_len; + byte* dst_cpy; + + var dst_LASTLITERALS = dst_end - LASTLITERALS; + var dst_COPYLENGTH = dst_end - COPYLENGTH; + var dst_COPYLENGTH_STEPSIZE_4 = dst_end - COPYLENGTH - (STEPSIZE_32 - 4); + + uint xxx_token; + + // Main Loop + while (true) + { + int length; + + // get runlength + xxx_token = *src_p++; + if ((length = (int)(xxx_token >> ML_BITS)) == RUN_MASK) + { + int len; + for (; (len = *src_p++) == 255; length += 255) + { + /* do nothing */ + } + length += len; + } + + // copy literals + dst_cpy = dst_p + length; + + if (dst_cpy > dst_COPYLENGTH) + { + if (dst_cpy != dst_end) goto _output_error; // Error : not enough place for another match (min 4) + 5 literals + BlockCopy(src_p, dst_p, (length)); + src_p += length; + break; // EOF + } + do + { + *(uint*)dst_p = *(uint*)src_p; + dst_p += 4; + src_p += 4; + *(uint*)dst_p = *(uint*)src_p; + dst_p += 4; + src_p += 4; + } while (dst_p < dst_cpy); + src_p -= (dst_p - dst_cpy); + dst_p = dst_cpy; + + // get offset + xxx_ref = (dst_cpy) - (*(ushort*)(src_p)); + src_p += 2; + if (xxx_ref < dst) goto _output_error; // Error : offset outside destination buffer + + // get matchlength + if ((length = (int)(xxx_token & ML_MASK)) == ML_MASK) + { + for (; *src_p == 255; length += 255) src_p++; + length += *src_p++; + } + + // copy repeated sequence + if ((dst_p - xxx_ref) < STEPSIZE_32) + { + const int dec64 = 0; + + dst_p[0] = xxx_ref[0]; + dst_p[1] = xxx_ref[1]; + dst_p[2] = xxx_ref[2]; + dst_p[3] = xxx_ref[3]; + dst_p += 4; + xxx_ref += 4; + xxx_ref -= dec32table[dst_p - xxx_ref]; + (*(uint*)(dst_p)) = (*(uint*)(xxx_ref)); + dst_p += STEPSIZE_32 - 4; + xxx_ref -= dec64; + } + else + { + *(uint*)dst_p = *(uint*)xxx_ref; + dst_p += 4; + xxx_ref += 4; + } + dst_cpy = dst_p + length - (STEPSIZE_32 - 4); + + if (dst_cpy > dst_COPYLENGTH_STEPSIZE_4) + { + if (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals + { + do + { + *(uint*)dst_p = *(uint*)xxx_ref; + dst_p += 4; + xxx_ref += 4; + *(uint*)dst_p = *(uint*)xxx_ref; + dst_p += 4; + xxx_ref += 4; + } while (dst_p < dst_COPYLENGTH); + } + + while (dst_p < dst_cpy) *dst_p++ = *xxx_ref++; + dst_p = dst_cpy; + continue; + } + + do + { + *(uint*)dst_p = *(uint*)xxx_ref; + dst_p += 4; + xxx_ref += 4; + *(uint*)dst_p = *(uint*)xxx_ref; + dst_p += 4; + xxx_ref += 4; + } while (dst_p < dst_cpy); + dst_p = dst_cpy; // correction + } + + // end of decoding + return (int)((src_p) - src); + + // write overflow error detected + _output_error: + return (int)(-((src_p) - src)); + } + } + } + + #endregion + } +} + +// ReSharper restore JoinDeclarationAndInitializer +// ReSharper restore TooWideLocalVariableScope +// ReSharper restore InconsistentNaming + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Unsafe64.Dirty.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Unsafe64.Dirty.cs index e18c5994f..791298fc0 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Unsafe64.Dirty.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.Unsafe64.Dirty.cs @@ -1,682 +1,682 @@ -#if ENABLE_UNSAFE_MSGPACK - -#region LZ4 original - -/* - LZ4 - Fast LZ compression algorithm - Copyright (C) 2011-2012, Yann Collet. - BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - You can contact the author at : - - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html - - LZ4 source repository : http://code.google.com/p/lz4/ -*/ - -#endregion - -#region LZ4 port - -/* -Copyright (c) 2013, Milosz Krajewski -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided -that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions - and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions - and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#endregion - -// ReSharper disable InconsistentNaming -// ReSharper disable TooWideLocalVariableScope -// ReSharper disable JoinDeclarationAndInitializer - -namespace MessagePack.LZ4 -{ - public static partial class LZ4Codec - { - #region LZ4_compressCtx_64 - - private static unsafe int LZ4_compressCtx_64( - uint* hash_table, - byte* src, - byte* dst, - int src_len, - int dst_maxlen) - { - unchecked - { - byte* _p; - - fixed (int* debruijn64 = &DEBRUIJN_TABLE_64[0]) - { - // r93 - var src_p = src; - var src_base = src_p; - var src_anchor = src_p; - var src_end = src_p + src_len; - var src_mflimit = src_end - MFLIMIT; - - var dst_p = dst; - var dst_end = dst_p + dst_maxlen; - - var src_LASTLITERALS = src_end - LASTLITERALS; - var src_LASTLITERALS_1 = src_LASTLITERALS - 1; - - var src_LASTLITERALS_3 = src_LASTLITERALS - 3; - var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_64 - 1); - var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); - var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); - - int length; - uint h, h_fwd; - - // Init - if (src_len < MINLENGTH) goto _last_literals; - - // First Byte - hash_table[((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST)] = (uint)(src_p - src_base); - src_p++; - h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); - - // Main Loop - while (true) - { - var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; - var src_p_fwd = src_p; - byte* src_ref; - byte* dst_token; - - // Find a match - do - { - h = h_fwd; - var step = findMatchAttempts++ >> SKIPSTRENGTH; - src_p = src_p_fwd; - src_p_fwd = src_p + step; - - if (src_p_fwd > src_mflimit) goto _last_literals; - - h_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH_ADJUST); - src_ref = src_base + hash_table[h]; - hash_table[h] = (uint)(src_p - src_base); - } while ((src_ref < src_p - MAX_DISTANCE) || ((*(uint*)(src_ref)) != (*(uint*)(src_p)))); - - // Catch up - while ((src_p > src_anchor) && (src_ref > src) && (src_p[-1] == src_ref[-1])) - { - src_p--; - src_ref--; - } - - // Encode Literal length - length = (int)(src_p - src_anchor); - dst_token = dst_p++; - - if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit - - if (length >= RUN_MASK) - { - var len = length - RUN_MASK; - *dst_token = (RUN_MASK << ML_BITS); - if (len > 254) - { - do - { - *dst_p++ = 255; - len -= 255; - } while (len > 254); - *dst_p++ = (byte)len; - BlockCopy(src_anchor, dst_p, (length)); - dst_p += length; - goto _next_match; - } - *dst_p++ = (byte)len; - } - else - { - *dst_token = (byte)(length << ML_BITS); - } - - // Copy Literals - _p = dst_p + (length); - { - do - { - *(ulong*)dst_p = *(ulong*)src_anchor; - dst_p += 8; - src_anchor += 8; - } while (dst_p < _p); - } - dst_p = _p; - - _next_match: - - // Encode Offset - *(ushort*)dst_p = (ushort)(src_p - src_ref); - dst_p += 2; - - // Start Counting - src_p += MINMATCH; - src_ref += MINMATCH; // MinMatch already verified - src_anchor = src_p; - - while (src_p < src_LASTLITERALS_STEPSIZE_1) - { - var diff = (*(long*)(src_ref)) ^ (*(long*)(src_p)); - if (diff == 0) - { - src_p += STEPSIZE_64; - src_ref += STEPSIZE_64; - continue; - } - src_p += debruijn64[(((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL)) >> 58]; - goto _endCount; - } - - if ((src_p < src_LASTLITERALS_3) && ((*(uint*)(src_ref)) == (*(uint*)(src_p)))) - { - src_p += 4; - src_ref += 4; - } - if ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(src_ref)) == (*(ushort*)(src_p)))) - { - src_p += 2; - src_ref += 2; - } - if ((src_p < src_LASTLITERALS) && (*src_ref == *src_p)) src_p++; - - _endCount: - - // Encode MatchLength - length = (int)(src_p - src_anchor); - - if (dst_p + (length >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit - - if (length >= ML_MASK) - { - *dst_token += ML_MASK; - length -= ML_MASK; - for (; length > 509; length -= 510) - { - *dst_p++ = 255; - *dst_p++ = 255; - } - if (length > 254) - { - length -= 255; - *dst_p++ = 255; - } - *dst_p++ = (byte)length; - } - else - { - *dst_token += (byte)length; - } - - // Test end of chunk - if (src_p > src_mflimit) - { - src_anchor = src_p; - break; - } - - // Fill table - hash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH_ADJUST)] = (uint)(src_p - 2 - src_base); - - // Test next position - - h = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); - src_ref = src_base + hash_table[h]; - hash_table[h] = (uint)(src_p - src_base); - - if ((src_ref > src_p - (MAX_DISTANCE + 1)) && ((*(uint*)(src_ref)) == (*(uint*)(src_p)))) - { - dst_token = dst_p++; - *dst_token = 0; - goto _next_match; - } - - // Prepare next loop - src_anchor = src_p++; - h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); - } - - _last_literals: - - // Encode Last Literals - var lastRun = (int)(src_end - src_anchor); - if (dst_p + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > dst_end) return 0; - if (lastRun >= RUN_MASK) - { - *dst_p++ = (RUN_MASK << ML_BITS); - lastRun -= RUN_MASK; - for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; - *dst_p++ = (byte)lastRun; - } - else *dst_p++ = (byte)(lastRun << ML_BITS); - BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); - dst_p += src_end - src_anchor; - - // End - return (int)(dst_p - dst); - } - } - } - - #endregion - - #region LZ4_compress64kCtx_64 - - private static unsafe int LZ4_compress64kCtx_64( - ushort* hash_table, - byte* src, - byte* dst, - int src_len, - int dst_maxlen) - { - unchecked - { - byte* _p; - - fixed (int* debruijn64 = &DEBRUIJN_TABLE_64[0]) - { - // r93 - var src_p = src; - var src_anchor = src_p; - var src_base = src_p; - var src_end = src_p + src_len; - var src_mflimit = src_end - MFLIMIT; - - var dst_p = dst; - var dst_end = dst_p + dst_maxlen; - - var src_LASTLITERALS = src_end - LASTLITERALS; - var src_LASTLITERALS_1 = src_LASTLITERALS - 1; - - var src_LASTLITERALS_3 = src_LASTLITERALS - 3; - - var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_64 - 1); - var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); - var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); - - int len, length; - - uint h, h_fwd; - - // Init - if (src_len < MINLENGTH) goto _last_literals; - - // First Byte - src_p++; - h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); - - // Main Loop - while (true) - { - var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; - var src_p_fwd = src_p; - byte* src_ref; - byte* dst_token; - - // Find a match - do - { - h = h_fwd; - var step = findMatchAttempts++ >> SKIPSTRENGTH; - src_p = src_p_fwd; - src_p_fwd = src_p + step; - - if (src_p_fwd > src_mflimit) goto _last_literals; - - h_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH64K_ADJUST); - src_ref = src_base + hash_table[h]; - hash_table[h] = (ushort)(src_p - src_base); - } while ((*(uint*)(src_ref)) != (*(uint*)(src_p))); - - // Catch up - while ((src_p > src_anchor) && (src_ref > src) && (src_p[-1] == src_ref[-1])) - { - src_p--; - src_ref--; - } - - // Encode Literal length - length = (int)(src_p - src_anchor); - dst_token = dst_p++; - - if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit - - if (length >= RUN_MASK) - { - len = length - RUN_MASK; - *dst_token = (RUN_MASK << ML_BITS); - if (len > 254) - { - do - { - *dst_p++ = 255; - len -= 255; - } while (len > 254); - *dst_p++ = (byte)len; - BlockCopy(src_anchor, dst_p, (length)); - dst_p += length; - goto _next_match; - } - *dst_p++ = (byte)len; - } - else - { - *dst_token = (byte)(length << ML_BITS); - } - - // Copy Literals - { - _p = dst_p + (length); - { - do - { - *(ulong*)dst_p = *(ulong*)src_anchor; - dst_p += 8; - src_anchor += 8; - } while (dst_p < _p); - } - dst_p = _p; - } - - _next_match: - - // Encode Offset - *(ushort*)dst_p = (ushort)(src_p - src_ref); - dst_p += 2; - - // Start Counting - src_p += MINMATCH; - src_ref += MINMATCH; // MinMatch verified - src_anchor = src_p; - - while (src_p < src_LASTLITERALS_STEPSIZE_1) - { - var diff = (*(long*)(src_ref)) ^ (*(long*)(src_p)); - if (diff == 0) - { - src_p += STEPSIZE_64; - src_ref += STEPSIZE_64; - continue; - } - src_p += debruijn64[(((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL)) >> 58]; - goto _endCount; - } - - if ((src_p < src_LASTLITERALS_3) && ((*(uint*)(src_ref)) == (*(uint*)(src_p)))) - { - src_p += 4; - src_ref += 4; - } - if ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(src_ref)) == (*(ushort*)(src_p)))) - { - src_p += 2; - src_ref += 2; - } - if ((src_p < src_LASTLITERALS) && (*src_ref == *src_p)) src_p++; - - _endCount: - - // Encode MatchLength - len = (int)(src_p - src_anchor); - - if (dst_p + (len >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit - - if (len >= ML_MASK) - { - *dst_token += ML_MASK; - len -= ML_MASK; - for (; len > 509; len -= 510) - { - *dst_p++ = 255; - *dst_p++ = 255; - } - if (len > 254) - { - len -= 255; - *dst_p++ = 255; - } - *dst_p++ = (byte)len; - } - else - { - *dst_token += (byte)len; - } - - // Test end of chunk - if (src_p > src_mflimit) - { - src_anchor = src_p; - break; - } - - // Fill table - hash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH64K_ADJUST)] = (ushort)(src_p - 2 - src_base); - - // Test next position - - h = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); - src_ref = src_base + hash_table[h]; - hash_table[h] = (ushort)(src_p - src_base); - - if ((*(uint*)(src_ref)) == (*(uint*)(src_p))) - { - dst_token = dst_p++; - *dst_token = 0; - goto _next_match; - } - - // Prepare next loop - src_anchor = src_p++; - h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); - } - - _last_literals: - - // Encode Last Literals - var lastRun = (int)(src_end - src_anchor); - if (dst_p + lastRun + 1 + (lastRun - RUN_MASK + 255) / 255 > dst_end) return 0; - if (lastRun >= RUN_MASK) - { - *dst_p++ = (RUN_MASK << ML_BITS); - lastRun -= RUN_MASK; - for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; - *dst_p++ = (byte)lastRun; - } - else *dst_p++ = (byte)(lastRun << ML_BITS); - BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); - dst_p += src_end - src_anchor; - - // End - return (int)(dst_p - dst); - } - } - } - - #endregion - - #region LZ4_uncompress_64 - - private static unsafe int LZ4_uncompress_64( - byte* src, - byte* dst, - int dst_len) - { - unchecked - { - fixed (int* dec32table = &DECODER_TABLE_32[0]) - fixed (int* dec64table = &DECODER_TABLE_64[0]) - { - // r93 - var src_p = src; - byte* dst_ref; - - var dst_p = dst; - var dst_end = dst_p + dst_len; - byte* dst_cpy; - - var dst_LASTLITERALS = dst_end - LASTLITERALS; - var dst_COPYLENGTH = dst_end - COPYLENGTH; - var dst_COPYLENGTH_STEPSIZE_4 = dst_end - COPYLENGTH - (STEPSIZE_64 - 4); - - byte token; - - // Main Loop - while (true) - { - int length; - - // get runlength - token = *src_p++; - if ((length = (token >> ML_BITS)) == RUN_MASK) - { - int len; - for (; (len = *src_p++) == 255; length += 255) - { - /* do nothing */ - } - length += len; - } - - // copy literals - dst_cpy = dst_p + length; - - if (dst_cpy > dst_COPYLENGTH) - { - if (dst_cpy != dst_end) goto _output_error; // Error : not enough place for another match (min 4) + 5 literals - BlockCopy(src_p, dst_p, (length)); - src_p += length; - break; // EOF - } - do - { - *(ulong*)dst_p = *(ulong*)src_p; - dst_p += 8; - src_p += 8; - } while (dst_p < dst_cpy); - src_p -= (dst_p - dst_cpy); - dst_p = dst_cpy; - - // get offset - dst_ref = (dst_cpy) - (*(ushort*)(src_p)); - src_p += 2; - if (dst_ref < dst) goto _output_error; // Error : offset outside destination buffer - - // get matchlength - if ((length = (token & ML_MASK)) == ML_MASK) - { - for (; *src_p == 255; length += 255) src_p++; - length += *src_p++; - } - - // copy repeated sequence - if ((dst_p - dst_ref) < STEPSIZE_64) - { - var dec64 = dec64table[dst_p - dst_ref]; - - dst_p[0] = dst_ref[0]; - dst_p[1] = dst_ref[1]; - dst_p[2] = dst_ref[2]; - dst_p[3] = dst_ref[3]; - dst_p += 4; - dst_ref += 4; - dst_ref -= dec32table[dst_p - dst_ref]; - (*(uint*)(dst_p)) = (*(uint*)(dst_ref)); - dst_p += STEPSIZE_64 - 4; - dst_ref -= dec64; - } - else - { - *(ulong*)dst_p = *(ulong*)dst_ref; - dst_p += 8; - dst_ref += 8; - } - dst_cpy = dst_p + length - (STEPSIZE_64 - 4); - - if (dst_cpy > dst_COPYLENGTH_STEPSIZE_4) - { - if (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals - while (dst_p < dst_COPYLENGTH) - { - *(ulong*)dst_p = *(ulong*)dst_ref; - dst_p += 8; - dst_ref += 8; - } - - while (dst_p < dst_cpy) *dst_p++ = *dst_ref++; - dst_p = dst_cpy; - continue; - } - - { - do - { - *(ulong*)dst_p = *(ulong*)dst_ref; - dst_p += 8; - dst_ref += 8; - } while (dst_p < dst_cpy); - } - dst_p = dst_cpy; // correction - } - - // end of decoding - return (int)((src_p) - src); - - // write overflow error detected - _output_error: - return (int)(-((src_p) - src)); - } - } - } - - #endregion - } -} - -// ReSharper restore JoinDeclarationAndInitializer -// ReSharper restore TooWideLocalVariableScope -// ReSharper restore InconsistentNaming - +#if ENABLE_UNSAFE_MSGPACK + +#region LZ4 original + +/* + LZ4 - Fast LZ compression algorithm + Copyright (C) 2011-2012, Yann Collet. + BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + You can contact the author at : + - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html + - LZ4 source repository : http://code.google.com/p/lz4/ +*/ + +#endregion + +#region LZ4 port + +/* +Copyright (c) 2013, Milosz Krajewski +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided +that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions + and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions + and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#endregion + +// ReSharper disable InconsistentNaming +// ReSharper disable TooWideLocalVariableScope +// ReSharper disable JoinDeclarationAndInitializer + +namespace MessagePack.LZ4 +{ + public static partial class LZ4Codec + { + #region LZ4_compressCtx_64 + + private static unsafe int LZ4_compressCtx_64( + uint* hash_table, + byte* src, + byte* dst, + int src_len, + int dst_maxlen) + { + unchecked + { + byte* _p; + + fixed (int* debruijn64 = &DEBRUIJN_TABLE_64[0]) + { + // r93 + var src_p = src; + var src_base = src_p; + var src_anchor = src_p; + var src_end = src_p + src_len; + var src_mflimit = src_end - MFLIMIT; + + var dst_p = dst; + var dst_end = dst_p + dst_maxlen; + + var src_LASTLITERALS = src_end - LASTLITERALS; + var src_LASTLITERALS_1 = src_LASTLITERALS - 1; + + var src_LASTLITERALS_3 = src_LASTLITERALS - 3; + var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_64 - 1); + var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); + var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); + + int length; + uint h, h_fwd; + + // Init + if (src_len < MINLENGTH) goto _last_literals; + + // First Byte + hash_table[((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST)] = (uint)(src_p - src_base); + src_p++; + h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); + + // Main Loop + while (true) + { + var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; + var src_p_fwd = src_p; + byte* src_ref; + byte* dst_token; + + // Find a match + do + { + h = h_fwd; + var step = findMatchAttempts++ >> SKIPSTRENGTH; + src_p = src_p_fwd; + src_p_fwd = src_p + step; + + if (src_p_fwd > src_mflimit) goto _last_literals; + + h_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH_ADJUST); + src_ref = src_base + hash_table[h]; + hash_table[h] = (uint)(src_p - src_base); + } while ((src_ref < src_p - MAX_DISTANCE) || ((*(uint*)(src_ref)) != (*(uint*)(src_p)))); + + // Catch up + while ((src_p > src_anchor) && (src_ref > src) && (src_p[-1] == src_ref[-1])) + { + src_p--; + src_ref--; + } + + // Encode Literal length + length = (int)(src_p - src_anchor); + dst_token = dst_p++; + + if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit + + if (length >= RUN_MASK) + { + var len = length - RUN_MASK; + *dst_token = (RUN_MASK << ML_BITS); + if (len > 254) + { + do + { + *dst_p++ = 255; + len -= 255; + } while (len > 254); + *dst_p++ = (byte)len; + BlockCopy(src_anchor, dst_p, (length)); + dst_p += length; + goto _next_match; + } + *dst_p++ = (byte)len; + } + else + { + *dst_token = (byte)(length << ML_BITS); + } + + // Copy Literals + _p = dst_p + (length); + { + do + { + *(ulong*)dst_p = *(ulong*)src_anchor; + dst_p += 8; + src_anchor += 8; + } while (dst_p < _p); + } + dst_p = _p; + + _next_match: + + // Encode Offset + *(ushort*)dst_p = (ushort)(src_p - src_ref); + dst_p += 2; + + // Start Counting + src_p += MINMATCH; + src_ref += MINMATCH; // MinMatch already verified + src_anchor = src_p; + + while (src_p < src_LASTLITERALS_STEPSIZE_1) + { + var diff = (*(long*)(src_ref)) ^ (*(long*)(src_p)); + if (diff == 0) + { + src_p += STEPSIZE_64; + src_ref += STEPSIZE_64; + continue; + } + src_p += debruijn64[(((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL)) >> 58]; + goto _endCount; + } + + if ((src_p < src_LASTLITERALS_3) && ((*(uint*)(src_ref)) == (*(uint*)(src_p)))) + { + src_p += 4; + src_ref += 4; + } + if ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(src_ref)) == (*(ushort*)(src_p)))) + { + src_p += 2; + src_ref += 2; + } + if ((src_p < src_LASTLITERALS) && (*src_ref == *src_p)) src_p++; + + _endCount: + + // Encode MatchLength + length = (int)(src_p - src_anchor); + + if (dst_p + (length >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit + + if (length >= ML_MASK) + { + *dst_token += ML_MASK; + length -= ML_MASK; + for (; length > 509; length -= 510) + { + *dst_p++ = 255; + *dst_p++ = 255; + } + if (length > 254) + { + length -= 255; + *dst_p++ = 255; + } + *dst_p++ = (byte)length; + } + else + { + *dst_token += (byte)length; + } + + // Test end of chunk + if (src_p > src_mflimit) + { + src_anchor = src_p; + break; + } + + // Fill table + hash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH_ADJUST)] = (uint)(src_p - 2 - src_base); + + // Test next position + + h = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); + src_ref = src_base + hash_table[h]; + hash_table[h] = (uint)(src_p - src_base); + + if ((src_ref > src_p - (MAX_DISTANCE + 1)) && ((*(uint*)(src_ref)) == (*(uint*)(src_p)))) + { + dst_token = dst_p++; + *dst_token = 0; + goto _next_match; + } + + // Prepare next loop + src_anchor = src_p++; + h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); + } + + _last_literals: + + // Encode Last Literals + var lastRun = (int)(src_end - src_anchor); + if (dst_p + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > dst_end) return 0; + if (lastRun >= RUN_MASK) + { + *dst_p++ = (RUN_MASK << ML_BITS); + lastRun -= RUN_MASK; + for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; + *dst_p++ = (byte)lastRun; + } + else *dst_p++ = (byte)(lastRun << ML_BITS); + BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); + dst_p += src_end - src_anchor; + + // End + return (int)(dst_p - dst); + } + } + } + + #endregion + + #region LZ4_compress64kCtx_64 + + private static unsafe int LZ4_compress64kCtx_64( + ushort* hash_table, + byte* src, + byte* dst, + int src_len, + int dst_maxlen) + { + unchecked + { + byte* _p; + + fixed (int* debruijn64 = &DEBRUIJN_TABLE_64[0]) + { + // r93 + var src_p = src; + var src_anchor = src_p; + var src_base = src_p; + var src_end = src_p + src_len; + var src_mflimit = src_end - MFLIMIT; + + var dst_p = dst; + var dst_end = dst_p + dst_maxlen; + + var src_LASTLITERALS = src_end - LASTLITERALS; + var src_LASTLITERALS_1 = src_LASTLITERALS - 1; + + var src_LASTLITERALS_3 = src_LASTLITERALS - 3; + + var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_64 - 1); + var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); + var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); + + int len, length; + + uint h, h_fwd; + + // Init + if (src_len < MINLENGTH) goto _last_literals; + + // First Byte + src_p++; + h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); + + // Main Loop + while (true) + { + var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; + var src_p_fwd = src_p; + byte* src_ref; + byte* dst_token; + + // Find a match + do + { + h = h_fwd; + var step = findMatchAttempts++ >> SKIPSTRENGTH; + src_p = src_p_fwd; + src_p_fwd = src_p + step; + + if (src_p_fwd > src_mflimit) goto _last_literals; + + h_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH64K_ADJUST); + src_ref = src_base + hash_table[h]; + hash_table[h] = (ushort)(src_p - src_base); + } while ((*(uint*)(src_ref)) != (*(uint*)(src_p))); + + // Catch up + while ((src_p > src_anchor) && (src_ref > src) && (src_p[-1] == src_ref[-1])) + { + src_p--; + src_ref--; + } + + // Encode Literal length + length = (int)(src_p - src_anchor); + dst_token = dst_p++; + + if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit + + if (length >= RUN_MASK) + { + len = length - RUN_MASK; + *dst_token = (RUN_MASK << ML_BITS); + if (len > 254) + { + do + { + *dst_p++ = 255; + len -= 255; + } while (len > 254); + *dst_p++ = (byte)len; + BlockCopy(src_anchor, dst_p, (length)); + dst_p += length; + goto _next_match; + } + *dst_p++ = (byte)len; + } + else + { + *dst_token = (byte)(length << ML_BITS); + } + + // Copy Literals + { + _p = dst_p + (length); + { + do + { + *(ulong*)dst_p = *(ulong*)src_anchor; + dst_p += 8; + src_anchor += 8; + } while (dst_p < _p); + } + dst_p = _p; + } + + _next_match: + + // Encode Offset + *(ushort*)dst_p = (ushort)(src_p - src_ref); + dst_p += 2; + + // Start Counting + src_p += MINMATCH; + src_ref += MINMATCH; // MinMatch verified + src_anchor = src_p; + + while (src_p < src_LASTLITERALS_STEPSIZE_1) + { + var diff = (*(long*)(src_ref)) ^ (*(long*)(src_p)); + if (diff == 0) + { + src_p += STEPSIZE_64; + src_ref += STEPSIZE_64; + continue; + } + src_p += debruijn64[(((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL)) >> 58]; + goto _endCount; + } + + if ((src_p < src_LASTLITERALS_3) && ((*(uint*)(src_ref)) == (*(uint*)(src_p)))) + { + src_p += 4; + src_ref += 4; + } + if ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(src_ref)) == (*(ushort*)(src_p)))) + { + src_p += 2; + src_ref += 2; + } + if ((src_p < src_LASTLITERALS) && (*src_ref == *src_p)) src_p++; + + _endCount: + + // Encode MatchLength + len = (int)(src_p - src_anchor); + + if (dst_p + (len >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit + + if (len >= ML_MASK) + { + *dst_token += ML_MASK; + len -= ML_MASK; + for (; len > 509; len -= 510) + { + *dst_p++ = 255; + *dst_p++ = 255; + } + if (len > 254) + { + len -= 255; + *dst_p++ = 255; + } + *dst_p++ = (byte)len; + } + else + { + *dst_token += (byte)len; + } + + // Test end of chunk + if (src_p > src_mflimit) + { + src_anchor = src_p; + break; + } + + // Fill table + hash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH64K_ADJUST)] = (ushort)(src_p - 2 - src_base); + + // Test next position + + h = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); + src_ref = src_base + hash_table[h]; + hash_table[h] = (ushort)(src_p - src_base); + + if ((*(uint*)(src_ref)) == (*(uint*)(src_p))) + { + dst_token = dst_p++; + *dst_token = 0; + goto _next_match; + } + + // Prepare next loop + src_anchor = src_p++; + h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); + } + + _last_literals: + + // Encode Last Literals + var lastRun = (int)(src_end - src_anchor); + if (dst_p + lastRun + 1 + (lastRun - RUN_MASK + 255) / 255 > dst_end) return 0; + if (lastRun >= RUN_MASK) + { + *dst_p++ = (RUN_MASK << ML_BITS); + lastRun -= RUN_MASK; + for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; + *dst_p++ = (byte)lastRun; + } + else *dst_p++ = (byte)(lastRun << ML_BITS); + BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); + dst_p += src_end - src_anchor; + + // End + return (int)(dst_p - dst); + } + } + } + + #endregion + + #region LZ4_uncompress_64 + + private static unsafe int LZ4_uncompress_64( + byte* src, + byte* dst, + int dst_len) + { + unchecked + { + fixed (int* dec32table = &DECODER_TABLE_32[0]) + fixed (int* dec64table = &DECODER_TABLE_64[0]) + { + // r93 + var src_p = src; + byte* dst_ref; + + var dst_p = dst; + var dst_end = dst_p + dst_len; + byte* dst_cpy; + + var dst_LASTLITERALS = dst_end - LASTLITERALS; + var dst_COPYLENGTH = dst_end - COPYLENGTH; + var dst_COPYLENGTH_STEPSIZE_4 = dst_end - COPYLENGTH - (STEPSIZE_64 - 4); + + byte token; + + // Main Loop + while (true) + { + int length; + + // get runlength + token = *src_p++; + if ((length = (token >> ML_BITS)) == RUN_MASK) + { + int len; + for (; (len = *src_p++) == 255; length += 255) + { + /* do nothing */ + } + length += len; + } + + // copy literals + dst_cpy = dst_p + length; + + if (dst_cpy > dst_COPYLENGTH) + { + if (dst_cpy != dst_end) goto _output_error; // Error : not enough place for another match (min 4) + 5 literals + BlockCopy(src_p, dst_p, (length)); + src_p += length; + break; // EOF + } + do + { + *(ulong*)dst_p = *(ulong*)src_p; + dst_p += 8; + src_p += 8; + } while (dst_p < dst_cpy); + src_p -= (dst_p - dst_cpy); + dst_p = dst_cpy; + + // get offset + dst_ref = (dst_cpy) - (*(ushort*)(src_p)); + src_p += 2; + if (dst_ref < dst) goto _output_error; // Error : offset outside destination buffer + + // get matchlength + if ((length = (token & ML_MASK)) == ML_MASK) + { + for (; *src_p == 255; length += 255) src_p++; + length += *src_p++; + } + + // copy repeated sequence + if ((dst_p - dst_ref) < STEPSIZE_64) + { + var dec64 = dec64table[dst_p - dst_ref]; + + dst_p[0] = dst_ref[0]; + dst_p[1] = dst_ref[1]; + dst_p[2] = dst_ref[2]; + dst_p[3] = dst_ref[3]; + dst_p += 4; + dst_ref += 4; + dst_ref -= dec32table[dst_p - dst_ref]; + (*(uint*)(dst_p)) = (*(uint*)(dst_ref)); + dst_p += STEPSIZE_64 - 4; + dst_ref -= dec64; + } + else + { + *(ulong*)dst_p = *(ulong*)dst_ref; + dst_p += 8; + dst_ref += 8; + } + dst_cpy = dst_p + length - (STEPSIZE_64 - 4); + + if (dst_cpy > dst_COPYLENGTH_STEPSIZE_4) + { + if (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals + while (dst_p < dst_COPYLENGTH) + { + *(ulong*)dst_p = *(ulong*)dst_ref; + dst_p += 8; + dst_ref += 8; + } + + while (dst_p < dst_cpy) *dst_p++ = *dst_ref++; + dst_p = dst_cpy; + continue; + } + + { + do + { + *(ulong*)dst_p = *(ulong*)dst_ref; + dst_p += 8; + dst_ref += 8; + } while (dst_p < dst_cpy); + } + dst_p = dst_cpy; // correction + } + + // end of decoding + return (int)((src_p) - src); + + // write overflow error detected + _output_error: + return (int)(-((src_p) - src)); + } + } + } + + #endregion + } +} + +// ReSharper restore JoinDeclarationAndInitializer +// ReSharper restore TooWideLocalVariableScope +// ReSharper restore InconsistentNaming + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.cs index 616f19387..4f56b54eb 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/Codec/LZ4Codec.cs @@ -1,158 +1,158 @@ -#region license - -/* -Copyright (c) 2013, Milosz Krajewski -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided -that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions - and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions - and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#endregion - -using System; - -// ReSharper disable InconsistentNaming - -namespace MessagePack.LZ4 -{ - public static partial class LZ4Codec - { - #region configuration - - /// - /// Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.) - /// Increasing memory usage improves compression ratio - /// Reduced memory usage can improve speed, due to cache effect - /// Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache - /// - private const int MEMORY_USAGE = 12; // modified use 12. - - /// - /// Decreasing this value will make the algorithm skip faster data segments considered "incompressible" - /// This may decrease compression ratio dramatically, but will be faster on incompressible data - /// Increasing this value will make the algorithm search more before declaring a segment "incompressible" - /// This could improve compression a bit, but will be slower on incompressible data - /// The default value (6) is recommended - /// - private const int NOTCOMPRESSIBLE_DETECTIONLEVEL = 6; - - #endregion - - #region consts - - private const int MINMATCH = 4; - -#pragma warning disable 162, 429 - // ReSharper disable once UnreachableCode - private const int SKIPSTRENGTH = - NOTCOMPRESSIBLE_DETECTIONLEVEL > 2 - ? NOTCOMPRESSIBLE_DETECTIONLEVEL - : 2; -#pragma warning restore 162, 429 - - private const int COPYLENGTH = 8; - private const int LASTLITERALS = 5; - private const int MFLIMIT = COPYLENGTH + MINMATCH; - private const int MINLENGTH = MFLIMIT + 1; - private const int MAXD_LOG = 16; - private const int MAXD = 1 << MAXD_LOG; - private const int MAXD_MASK = MAXD - 1; - private const int MAX_DISTANCE = (1 << MAXD_LOG) - 1; - private const int ML_BITS = 4; - private const int ML_MASK = (1 << ML_BITS) - 1; - private const int RUN_BITS = 8 - ML_BITS; - private const int RUN_MASK = (1 << RUN_BITS) - 1; - private const int STEPSIZE_64 = 8; - private const int STEPSIZE_32 = 4; - - private const int LZ4_64KLIMIT = (1 << 16) + (MFLIMIT - 1); - - private const int HASH_LOG = MEMORY_USAGE - 2; - private const int HASH_TABLESIZE = 1 << HASH_LOG; - private const int HASH_ADJUST = (MINMATCH * 8) - HASH_LOG; - - private const int HASH64K_LOG = HASH_LOG + 1; - private const int HASH64K_TABLESIZE = 1 << HASH64K_LOG; - private const int HASH64K_ADJUST = (MINMATCH * 8) - HASH64K_LOG; - - private const int HASHHC_LOG = MAXD_LOG - 1; - private const int HASHHC_TABLESIZE = 1 << HASHHC_LOG; - private const int HASHHC_ADJUST = (MINMATCH * 8) - HASHHC_LOG; - //private const int HASHHC_MASK = HASHHC_TABLESIZE - 1; - - private static readonly int[] DECODER_TABLE_32 = { 0, 3, 2, 3, 0, 0, 0, 0 }; - private static readonly int[] DECODER_TABLE_64 = { 0, 0, 0, -1, 0, 1, 2, 3 }; - - private static readonly int[] DEBRUIJN_TABLE_32 = { - 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, - 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 - }; - - private static readonly int[] DEBRUIJN_TABLE_64 = { - 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, - 0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, - 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6, - 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 - }; - - private const int MAX_NB_ATTEMPTS = 256; - private const int OPTIMAL_ML = (ML_MASK - 1) + MINMATCH; - - private const int BLOCK_COPY_LIMIT = 16; - - #endregion - - #region public interface (common) - - /// Gets maximum the length of the output. - /// Length of the input. - /// Maximum number of bytes needed for compressed buffer. - public static int MaximumOutputLength(int inputLength) - { - return inputLength + (inputLength / 255) + 16; - } - - #endregion - - #region internal interface (common) - - internal static void CheckArguments( - byte[] input, int inputOffset, int inputLength, - byte[] output, int outputOffset, int outputLength) - { - if (inputLength == 0) - { - outputLength = 0; - return; - } - - if (input == null) throw new ArgumentNullException("input"); - if ((uint)inputOffset > (uint)input.Length) throw new ArgumentOutOfRangeException("inputOffset"); - if ((uint)inputLength > (uint)input.Length - (uint)inputOffset) throw new ArgumentOutOfRangeException("inputLength"); - - if (output == null) throw new ArgumentNullException("output"); - if ((uint)outputOffset > (uint)output.Length) throw new ArgumentOutOfRangeException("outputOffset"); - if ((uint)outputLength > (uint)output.Length - (uint)outputOffset) throw new ArgumentOutOfRangeException("outputLength"); - } - - #endregion - } -} - -// ReSharper restore InconsistentNaming +#region license + +/* +Copyright (c) 2013, Milosz Krajewski +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided +that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions + and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions + and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#endregion + +using System; + +// ReSharper disable InconsistentNaming + +namespace MessagePack.LZ4 +{ + public static partial class LZ4Codec + { + #region configuration + + /// + /// Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.) + /// Increasing memory usage improves compression ratio + /// Reduced memory usage can improve speed, due to cache effect + /// Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache + /// + private const int MEMORY_USAGE = 12; // modified use 12. + + /// + /// Decreasing this value will make the algorithm skip faster data segments considered "incompressible" + /// This may decrease compression ratio dramatically, but will be faster on incompressible data + /// Increasing this value will make the algorithm search more before declaring a segment "incompressible" + /// This could improve compression a bit, but will be slower on incompressible data + /// The default value (6) is recommended + /// + private const int NOTCOMPRESSIBLE_DETECTIONLEVEL = 6; + + #endregion + + #region consts + + private const int MINMATCH = 4; + +#pragma warning disable 162, 429 + // ReSharper disable once UnreachableCode + private const int SKIPSTRENGTH = + NOTCOMPRESSIBLE_DETECTIONLEVEL > 2 + ? NOTCOMPRESSIBLE_DETECTIONLEVEL + : 2; +#pragma warning restore 162, 429 + + private const int COPYLENGTH = 8; + private const int LASTLITERALS = 5; + private const int MFLIMIT = COPYLENGTH + MINMATCH; + private const int MINLENGTH = MFLIMIT + 1; + private const int MAXD_LOG = 16; + private const int MAXD = 1 << MAXD_LOG; + private const int MAXD_MASK = MAXD - 1; + private const int MAX_DISTANCE = (1 << MAXD_LOG) - 1; + private const int ML_BITS = 4; + private const int ML_MASK = (1 << ML_BITS) - 1; + private const int RUN_BITS = 8 - ML_BITS; + private const int RUN_MASK = (1 << RUN_BITS) - 1; + private const int STEPSIZE_64 = 8; + private const int STEPSIZE_32 = 4; + + private const int LZ4_64KLIMIT = (1 << 16) + (MFLIMIT - 1); + + private const int HASH_LOG = MEMORY_USAGE - 2; + private const int HASH_TABLESIZE = 1 << HASH_LOG; + private const int HASH_ADJUST = (MINMATCH * 8) - HASH_LOG; + + private const int HASH64K_LOG = HASH_LOG + 1; + private const int HASH64K_TABLESIZE = 1 << HASH64K_LOG; + private const int HASH64K_ADJUST = (MINMATCH * 8) - HASH64K_LOG; + + private const int HASHHC_LOG = MAXD_LOG - 1; + private const int HASHHC_TABLESIZE = 1 << HASHHC_LOG; + private const int HASHHC_ADJUST = (MINMATCH * 8) - HASHHC_LOG; + //private const int HASHHC_MASK = HASHHC_TABLESIZE - 1; + + private static readonly int[] DECODER_TABLE_32 = { 0, 3, 2, 3, 0, 0, 0, 0 }; + private static readonly int[] DECODER_TABLE_64 = { 0, 0, 0, -1, 0, 1, 2, 3 }; + + private static readonly int[] DEBRUIJN_TABLE_32 = { + 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, + 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 + }; + + private static readonly int[] DEBRUIJN_TABLE_64 = { + 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, + 0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, + 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6, + 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 + }; + + private const int MAX_NB_ATTEMPTS = 256; + private const int OPTIMAL_ML = (ML_MASK - 1) + MINMATCH; + + private const int BLOCK_COPY_LIMIT = 16; + + #endregion + + #region public interface (common) + + /// Gets maximum the length of the output. + /// Length of the input. + /// Maximum number of bytes needed for compressed buffer. + public static int MaximumOutputLength(int inputLength) + { + return inputLength + (inputLength / 255) + 16; + } + + #endregion + + #region internal interface (common) + + internal static void CheckArguments( + byte[] input, int inputOffset, int inputLength, + byte[] output, int outputOffset, int outputLength) + { + if (inputLength == 0) + { + outputLength = 0; + return; + } + + if (input == null) throw new ArgumentNullException("input"); + if ((uint)inputOffset > (uint)input.Length) throw new ArgumentOutOfRangeException("inputOffset"); + if ((uint)inputLength > (uint)input.Length - (uint)inputOffset) throw new ArgumentOutOfRangeException("inputLength"); + + if (output == null) throw new ArgumentNullException("output"); + if ((uint)outputOffset > (uint)output.Length) throw new ArgumentOutOfRangeException("outputOffset"); + if ((uint)outputLength > (uint)output.Length - (uint)outputOffset) throw new ArgumentOutOfRangeException("outputLength"); + } + + #endregion + } +} + +// ReSharper restore InconsistentNaming diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.JSON.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.JSON.cs index 4e6197206..fdbbf4d82 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.JSON.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.JSON.cs @@ -1,292 +1,292 @@ -using MessagePack.Formatters; -using MessagePack.Internal; -using MessagePack.LZ4; -using System; -using System.Globalization; -using System.IO; -using System.Text; - -namespace MessagePack -{ - // JSON API - public static partial class LZ4MessagePackSerializer - { - /// - /// Dump to JSON string. - /// - public static string ToJson(T obj) - { - return ToJson(Serialize(obj)); - } - - /// - /// Dump to JSON string. - /// - public static string ToJson(T obj, IFormatterResolver resolver) - { - return ToJson(Serialize(obj, resolver)); - } - - /// - /// Dump message-pack binary to JSON string. - /// - public static string ToJson(byte[] bytes) - { - if (bytes == null || bytes.Length == 0) return ""; - - int readSize; - if (MessagePackBinary.GetMessagePackType(bytes, 0) == MessagePackType.Extension) - { - var header = MessagePackBinary.ReadExtensionFormatHeader(bytes, 0, out readSize); - if (header.TypeCode == ExtensionTypeCode) - { - // decode lz4 - var offset = readSize; - var length = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - - var buffer = LZ4MemoryPool.GetBuffer(); - if (buffer.Length < length) - { - buffer = new byte[length]; - } - - // LZ4 Decode - LZ4Codec.Decode(bytes, offset, bytes.Length - offset, buffer, 0, length); - - bytes = buffer; // use LZ4 bytes - } - } - - var sb = new StringBuilder(); - ToJsonCore(bytes, 0, sb); - return sb.ToString(); - } - - public static byte[] FromJson(string str) - { - using (var sr = new StringReader(str)) - { - return FromJson(sr); - } - } - - /// - /// From Json String to LZ4MessagePack binary - /// - public static byte[] FromJson(TextReader reader) - { - var buffer = MessagePackSerializer.FromJsonUnsafe(reader); // offset is guranteed from 0 - return LZ4MessagePackSerializer.ToLZ4Binary(buffer); - } - - static int ToJsonCore(byte[] bytes, int offset, StringBuilder builder) - { - var readSize = 0; - var type = MessagePackBinary.GetMessagePackType(bytes, offset); - switch (type) - { - case MessagePackType.Integer: - var code = bytes[offset]; - if (MessagePackCode.MinNegativeFixInt <= code && code <= MessagePackCode.MaxNegativeFixInt) builder.Append(MessagePackBinary.ReadSByte(bytes, offset, out readSize)); - else if (MessagePackCode.MinFixInt <= code && code <= MessagePackCode.MaxFixInt) builder.Append(MessagePackBinary.ReadByte(bytes, offset, out readSize)); - else if (code == MessagePackCode.Int8) builder.Append(MessagePackBinary.ReadSByte(bytes, offset, out readSize)); - else if (code == MessagePackCode.Int16) builder.Append(MessagePackBinary.ReadInt16(bytes, offset, out readSize)); - else if (code == MessagePackCode.Int32) builder.Append(MessagePackBinary.ReadInt32(bytes, offset, out readSize)); - else if (code == MessagePackCode.Int64) builder.Append(MessagePackBinary.ReadInt64(bytes, offset, out readSize)); - else if (code == MessagePackCode.UInt8) builder.Append(MessagePackBinary.ReadByte(bytes, offset, out readSize)); - else if (code == MessagePackCode.UInt16) builder.Append(MessagePackBinary.ReadUInt16(bytes, offset, out readSize)); - else if (code == MessagePackCode.UInt32) builder.Append(MessagePackBinary.ReadUInt32(bytes, offset, out readSize)); - else if (code == MessagePackCode.UInt64) builder.Append(MessagePackBinary.ReadUInt64(bytes, offset, out readSize)); - break; - case MessagePackType.Boolean: - builder.Append(MessagePackBinary.ReadBoolean(bytes, offset, out readSize) ? "true" : "false"); - break; - case MessagePackType.Float: - var floatCode = bytes[offset]; - if (floatCode == MessagePackCode.Float32) - { - builder.Append(MessagePackBinary.ReadSingle(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - } - else - { - builder.Append(MessagePackBinary.ReadDouble(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - } - break; - case MessagePackType.String: - WriteJsonString(MessagePackBinary.ReadString(bytes, offset, out readSize), builder); - break; - case MessagePackType.Binary: - builder.Append("\"" + Convert.ToBase64String(MessagePackBinary.ReadBytes(bytes, offset, out readSize)) + "\""); - break; - case MessagePackType.Array: - { - var length = MessagePackBinary.ReadArrayHeaderRaw(bytes, offset, out readSize); - var totalReadSize = readSize; - offset += readSize; - builder.Append("["); - for (int i = 0; i < length; i++) - { - readSize = ToJsonCore(bytes, offset, builder); - offset += readSize; - totalReadSize += readSize; - - if (i != length - 1) - { - builder.Append(","); - } - } - builder.Append("]"); - - return totalReadSize; - } - case MessagePackType.Map: - { - var length = MessagePackBinary.ReadMapHeaderRaw(bytes, offset, out readSize); - var totalReadSize = readSize; - offset += readSize; - builder.Append("{"); - for (int i = 0; i < length; i++) - { - // write key - { - var keyType = MessagePackBinary.GetMessagePackType(bytes, offset); - if (keyType == MessagePackType.String || keyType == MessagePackType.Binary) - { - readSize = ToJsonCore(bytes, offset, builder); - } - else - { - builder.Append("\""); - readSize = ToJsonCore(bytes, offset, builder); - builder.Append("\""); - } - offset += readSize; - totalReadSize += readSize; - } - - builder.Append(":"); - - // write body - { - readSize = ToJsonCore(bytes, offset, builder); - offset += readSize; - totalReadSize += readSize; - } - - if (i != length - 1) - { - builder.Append(","); - } - } - builder.Append("}"); - - return totalReadSize; - } - case MessagePackType.Extension: - var extHeader = MessagePackBinary.ReadExtensionFormatHeader(bytes, offset, out readSize); - if (extHeader.TypeCode == ReservedMessagePackExtensionTypeCode.DateTime) - { - var dt = MessagePackBinary.ReadDateTime(bytes, offset, out readSize); - builder.Append("\""); - builder.Append(dt.ToString("o", CultureInfo.InvariantCulture)); - builder.Append("\""); - } -#if NETSTANDARD - else if (extHeader.TypeCode == TypelessFormatter.ExtensionTypeCode) - { - int startOffset = offset; - // prepare type name token - offset += 6; - var typeNameToken = new StringBuilder(); - var typeNameReadSize = ToJsonCore(bytes, offset, typeNameToken); - offset += typeNameReadSize; - int startBuilderLength = builder.Length; - if (extHeader.Length > typeNameReadSize) - { - // object map or array - var typeInside = MessagePackBinary.GetMessagePackType(bytes, offset); - if (typeInside != MessagePackType.Array && typeInside != MessagePackType.Map) - builder.Append("{"); - offset += ToJsonCore(bytes, offset, builder); - // insert type name token to start of object map or array - if (typeInside != MessagePackType.Array) - typeNameToken.Insert(0, "\"$type\":"); - if (typeInside != MessagePackType.Array && typeInside != MessagePackType.Map) - builder.Append("}"); - if (builder.Length - startBuilderLength > 2) - typeNameToken.Append(","); - builder.Insert(startBuilderLength + 1, typeNameToken.ToString()); - } - else - { - builder.Append("{\"$type\":\"" + typeNameToken.ToString() + "}"); - } - readSize = offset - startOffset; - } -#endif - else - { - var ext = MessagePackBinary.ReadExtensionFormat(bytes, offset, out readSize); - builder.Append("["); - builder.Append(ext.TypeCode); - builder.Append(","); - builder.Append("\""); - builder.Append(Convert.ToBase64String(ext.Data)); - builder.Append("\""); - builder.Append("]"); - } - break; - case MessagePackType.Unknown: - case MessagePackType.Nil: - default: - readSize = 1; - builder.Append("null"); - break; - } - - return readSize; - } - - // escape string - static void WriteJsonString(string value, StringBuilder builder) - { - builder.Append('\"'); - - var len = value.Length; - for (int i = 0; i < len; i++) - { - var c = value[i]; - switch (c) - { - case '"': - builder.Append("\\\""); - break; - case '\\': - builder.Append("\\\\"); - break; - case '\b': - builder.Append("\\b"); - break; - case '\f': - builder.Append("\\f"); - break; - case '\n': - builder.Append("\\n"); - break; - case '\r': - builder.Append("\\r"); - break; - case '\t': - builder.Append("\\t"); - break; - default: - builder.Append(c); - break; - } - } - - builder.Append('\"'); - } - } -} +using MessagePack.Formatters; +using MessagePack.Internal; +using MessagePack.LZ4; +using System; +using System.Globalization; +using System.IO; +using System.Text; + +namespace MessagePack +{ + // JSON API + public static partial class LZ4MessagePackSerializer + { + /// + /// Dump to JSON string. + /// + public static string ToJson(T obj) + { + return ToJson(Serialize(obj)); + } + + /// + /// Dump to JSON string. + /// + public static string ToJson(T obj, IFormatterResolver resolver) + { + return ToJson(Serialize(obj, resolver)); + } + + /// + /// Dump message-pack binary to JSON string. + /// + public static string ToJson(byte[] bytes) + { + if (bytes == null || bytes.Length == 0) return ""; + + int readSize; + if (MessagePackBinary.GetMessagePackType(bytes, 0) == MessagePackType.Extension) + { + var header = MessagePackBinary.ReadExtensionFormatHeader(bytes, 0, out readSize); + if (header.TypeCode == ExtensionTypeCode) + { + // decode lz4 + var offset = readSize; + var length = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + var buffer = LZ4MemoryPool.GetBuffer(); + if (buffer.Length < length) + { + buffer = new byte[length]; + } + + // LZ4 Decode + LZ4Codec.Decode(bytes, offset, bytes.Length - offset, buffer, 0, length); + + bytes = buffer; // use LZ4 bytes + } + } + + var sb = new StringBuilder(); + ToJsonCore(bytes, 0, sb); + return sb.ToString(); + } + + public static byte[] FromJson(string str) + { + using (var sr = new StringReader(str)) + { + return FromJson(sr); + } + } + + /// + /// From Json String to LZ4MessagePack binary + /// + public static byte[] FromJson(TextReader reader) + { + var buffer = MessagePackSerializer.FromJsonUnsafe(reader); // offset is guranteed from 0 + return LZ4MessagePackSerializer.ToLZ4Binary(buffer); + } + + static int ToJsonCore(byte[] bytes, int offset, StringBuilder builder) + { + var readSize = 0; + var type = MessagePackBinary.GetMessagePackType(bytes, offset); + switch (type) + { + case MessagePackType.Integer: + var code = bytes[offset]; + if (MessagePackCode.MinNegativeFixInt <= code && code <= MessagePackCode.MaxNegativeFixInt) builder.Append(MessagePackBinary.ReadSByte(bytes, offset, out readSize)); + else if (MessagePackCode.MinFixInt <= code && code <= MessagePackCode.MaxFixInt) builder.Append(MessagePackBinary.ReadByte(bytes, offset, out readSize)); + else if (code == MessagePackCode.Int8) builder.Append(MessagePackBinary.ReadSByte(bytes, offset, out readSize)); + else if (code == MessagePackCode.Int16) builder.Append(MessagePackBinary.ReadInt16(bytes, offset, out readSize)); + else if (code == MessagePackCode.Int32) builder.Append(MessagePackBinary.ReadInt32(bytes, offset, out readSize)); + else if (code == MessagePackCode.Int64) builder.Append(MessagePackBinary.ReadInt64(bytes, offset, out readSize)); + else if (code == MessagePackCode.UInt8) builder.Append(MessagePackBinary.ReadByte(bytes, offset, out readSize)); + else if (code == MessagePackCode.UInt16) builder.Append(MessagePackBinary.ReadUInt16(bytes, offset, out readSize)); + else if (code == MessagePackCode.UInt32) builder.Append(MessagePackBinary.ReadUInt32(bytes, offset, out readSize)); + else if (code == MessagePackCode.UInt64) builder.Append(MessagePackBinary.ReadUInt64(bytes, offset, out readSize)); + break; + case MessagePackType.Boolean: + builder.Append(MessagePackBinary.ReadBoolean(bytes, offset, out readSize) ? "true" : "false"); + break; + case MessagePackType.Float: + var floatCode = bytes[offset]; + if (floatCode == MessagePackCode.Float32) + { + builder.Append(MessagePackBinary.ReadSingle(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + } + else + { + builder.Append(MessagePackBinary.ReadDouble(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + } + break; + case MessagePackType.String: + WriteJsonString(MessagePackBinary.ReadString(bytes, offset, out readSize), builder); + break; + case MessagePackType.Binary: + builder.Append("\"" + Convert.ToBase64String(MessagePackBinary.ReadBytes(bytes, offset, out readSize)) + "\""); + break; + case MessagePackType.Array: + { + var length = MessagePackBinary.ReadArrayHeaderRaw(bytes, offset, out readSize); + var totalReadSize = readSize; + offset += readSize; + builder.Append("["); + for (int i = 0; i < length; i++) + { + readSize = ToJsonCore(bytes, offset, builder); + offset += readSize; + totalReadSize += readSize; + + if (i != length - 1) + { + builder.Append(","); + } + } + builder.Append("]"); + + return totalReadSize; + } + case MessagePackType.Map: + { + var length = MessagePackBinary.ReadMapHeaderRaw(bytes, offset, out readSize); + var totalReadSize = readSize; + offset += readSize; + builder.Append("{"); + for (int i = 0; i < length; i++) + { + // write key + { + var keyType = MessagePackBinary.GetMessagePackType(bytes, offset); + if (keyType == MessagePackType.String || keyType == MessagePackType.Binary) + { + readSize = ToJsonCore(bytes, offset, builder); + } + else + { + builder.Append("\""); + readSize = ToJsonCore(bytes, offset, builder); + builder.Append("\""); + } + offset += readSize; + totalReadSize += readSize; + } + + builder.Append(":"); + + // write body + { + readSize = ToJsonCore(bytes, offset, builder); + offset += readSize; + totalReadSize += readSize; + } + + if (i != length - 1) + { + builder.Append(","); + } + } + builder.Append("}"); + + return totalReadSize; + } + case MessagePackType.Extension: + var extHeader = MessagePackBinary.ReadExtensionFormatHeader(bytes, offset, out readSize); + if (extHeader.TypeCode == ReservedMessagePackExtensionTypeCode.DateTime) + { + var dt = MessagePackBinary.ReadDateTime(bytes, offset, out readSize); + builder.Append("\""); + builder.Append(dt.ToString("o", CultureInfo.InvariantCulture)); + builder.Append("\""); + } +#if NETSTANDARD + else if (extHeader.TypeCode == TypelessFormatter.ExtensionTypeCode) + { + int startOffset = offset; + // prepare type name token + offset += 6; + var typeNameToken = new StringBuilder(); + var typeNameReadSize = ToJsonCore(bytes, offset, typeNameToken); + offset += typeNameReadSize; + int startBuilderLength = builder.Length; + if (extHeader.Length > typeNameReadSize) + { + // object map or array + var typeInside = MessagePackBinary.GetMessagePackType(bytes, offset); + if (typeInside != MessagePackType.Array && typeInside != MessagePackType.Map) + builder.Append("{"); + offset += ToJsonCore(bytes, offset, builder); + // insert type name token to start of object map or array + if (typeInside != MessagePackType.Array) + typeNameToken.Insert(0, "\"$type\":"); + if (typeInside != MessagePackType.Array && typeInside != MessagePackType.Map) + builder.Append("}"); + if (builder.Length - startBuilderLength > 2) + typeNameToken.Append(","); + builder.Insert(startBuilderLength + 1, typeNameToken.ToString()); + } + else + { + builder.Append("{\"$type\":\"" + typeNameToken.ToString() + "}"); + } + readSize = offset - startOffset; + } +#endif + else + { + var ext = MessagePackBinary.ReadExtensionFormat(bytes, offset, out readSize); + builder.Append("["); + builder.Append(ext.TypeCode); + builder.Append(","); + builder.Append("\""); + builder.Append(Convert.ToBase64String(ext.Data)); + builder.Append("\""); + builder.Append("]"); + } + break; + case MessagePackType.Unknown: + case MessagePackType.Nil: + default: + readSize = 1; + builder.Append("null"); + break; + } + + return readSize; + } + + // escape string + static void WriteJsonString(string value, StringBuilder builder) + { + builder.Append('\"'); + + var len = value.Length; + for (int i = 0; i < len; i++) + { + var c = value[i]; + switch (c) + { + case '"': + builder.Append("\\\""); + break; + case '\\': + builder.Append("\\\\"); + break; + case '\b': + builder.Append("\\b"); + break; + case '\f': + builder.Append("\\f"); + break; + case '\n': + builder.Append("\\n"); + break; + case '\r': + builder.Append("\\r"); + break; + case '\t': + builder.Append("\\t"); + break; + default: + builder.Append(c); + break; + } + } + + builder.Append('\"'); + } + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.NonGeneric.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.NonGeneric.cs index e2ad66113..f4a62c676 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.NonGeneric.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.NonGeneric.cs @@ -1,277 +1,277 @@ -#if NETSTANDARD - -using System; -using System.Linq; -using System.Reflection; -using System.IO; -using System.Linq.Expressions; - -namespace MessagePack -{ - public static partial class LZ4MessagePackSerializer - { - public static class NonGeneric - { - static readonly Func CreateCompiledMethods; - static readonly MessagePack.Internal.ThreadsafeTypeKeyHashTable serializes = new MessagePack.Internal.ThreadsafeTypeKeyHashTable(capacity: 64); - - - static NonGeneric() - { - CreateCompiledMethods = t => new CompiledMethods(t); - } - - public static byte[] Serialize(Type type, object obj) - { - return GetOrAdd(type).serialize1.Invoke(obj); - } - - public static byte[] Serialize(Type type, object obj, IFormatterResolver resolver) - { - return GetOrAdd(type).serialize2.Invoke(obj, resolver); - } - - public static void Serialize(Type type, Stream stream, object obj) - { - GetOrAdd(type).serialize3.Invoke(stream, obj); - } - - public static void Serialize(Type type, Stream stream, object obj, IFormatterResolver resolver) - { - GetOrAdd(type).serialize4.Invoke(stream, obj, resolver); - } - - public static object Deserialize(Type type, byte[] bytes) - { - return GetOrAdd(type).deserialize1.Invoke(bytes); - } - - public static object Deserialize(Type type, byte[] bytes, IFormatterResolver resolver) - { - return GetOrAdd(type).deserialize2.Invoke(bytes, resolver); - } - - public static object Deserialize(Type type, Stream stream) - { - return GetOrAdd(type).deserialize3.Invoke(stream); - } - - public static object Deserialize(Type type, Stream stream, IFormatterResolver resolver) - { - return GetOrAdd(type).deserialize4.Invoke(stream, resolver); - } - - public static object Deserialize(Type type, Stream stream, bool readStrict) - { - return GetOrAdd(type).deserialize5.Invoke(stream, readStrict); - } - - public static object Deserialize(Type type, Stream stream, IFormatterResolver resolver, bool readStrict) - { - return GetOrAdd(type).deserialize6.Invoke(stream, resolver, readStrict); - } - - public static object Deserialize(Type type, ArraySegment bytes) - { - return GetOrAdd(type).deserialize7.Invoke(bytes); - } - - public static object Deserialize(Type type, ArraySegment bytes, IFormatterResolver resolver) - { - return GetOrAdd(type).deserialize8.Invoke(bytes, resolver); - } - - static CompiledMethods GetOrAdd(Type type) - { - return serializes.GetOrAdd(type, CreateCompiledMethods); - } - - class CompiledMethods - { - public readonly Func serialize1; - public readonly Func serialize2; - public readonly Action serialize3; - public readonly Action serialize4; - - public readonly Func deserialize1; - public readonly Func deserialize2; - public readonly Func deserialize3; - public readonly Func deserialize4; - public readonly Func deserialize5; - public readonly Func deserialize6; - - public readonly Func, object> deserialize7; - public readonly Func, IFormatterResolver, object> deserialize8; - - public CompiledMethods(Type type) - { - var ti = type.GetTypeInfo(); - { - // public static byte[] Serialize(T obj) - var serialize = GetMethod(type, new Type[] { null }); - - var param1 = Expression.Parameter(typeof(object), "obj"); - var body = Expression.Call(serialize, ti.IsValueType - ? Expression.Unbox(param1, type) - : Expression.Convert(param1, type)); - var lambda = Expression.Lambda>(body, param1).Compile(); - - this.serialize1 = lambda; - } - { - // public static byte[] Serialize(T obj, IFormatterResolver resolver) - var serialize = GetMethod(type, new Type[] { null, typeof(IFormatterResolver) }); - - var param1 = Expression.Parameter(typeof(object), "obj"); - var param2 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); - - var body = Expression.Call(serialize, ti.IsValueType - ? Expression.Unbox(param1, type) - : Expression.Convert(param1, type), param2); - var lambda = Expression.Lambda>(body, param1, param2).Compile(); - - this.serialize2 = lambda; - } - { - // public static void Serialize(Stream stream, T obj) - var serialize = GetMethod(type, new Type[] { typeof(Stream), null }); - - var param1 = Expression.Parameter(typeof(Stream), "stream"); - var param2 = Expression.Parameter(typeof(object), "obj"); - - var body = Expression.Call(serialize, param1, ti.IsValueType - ? Expression.Unbox(param2, type) - : Expression.Convert(param2, type)); - var lambda = Expression.Lambda>(body, param1, param2).Compile(); - - this.serialize3 = lambda; - } - { - // public static void Serialize(Stream stream, T obj, IFormatterResolver resolver) - var serialize = GetMethod(type, new Type[] { typeof(Stream), null, typeof(IFormatterResolver) }); - - var param1 = Expression.Parameter(typeof(Stream), "stream"); - var param2 = Expression.Parameter(typeof(object), "obj"); - var param3 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); - - var body = Expression.Call(serialize, param1, ti.IsValueType - ? Expression.Unbox(param2, type) - : Expression.Convert(param2, type), param3); - var lambda = Expression.Lambda>(body, param1, param2, param3).Compile(); - - this.serialize4 = lambda; - } - - { - // public static T Deserialize(byte[] bytes) - var deserialize = GetMethod(type, new Type[] { typeof(byte[]) }); - - var param1 = Expression.Parameter(typeof(byte[]), "bytes"); - var body = Expression.Convert(Expression.Call(deserialize, param1), typeof(object)); - var lambda = Expression.Lambda>(body, param1).Compile(); - - this.deserialize1 = lambda; - } - { - // public static T Deserialize(byte[] bytes, IFormatterResolver resolver) - var deserialize = GetMethod(type, new Type[] { typeof(byte[]), typeof(IFormatterResolver) }); - - var param1 = Expression.Parameter(typeof(byte[]), "bytes"); - var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); - var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); - var lambda = Expression.Lambda>(body, param1, param2).Compile(); - - this.deserialize2 = lambda; - } - { - // public static T Deserialize(Stream stream) - var deserialize = GetMethod(type, new Type[] { typeof(Stream) }); - - var param1 = Expression.Parameter(typeof(Stream), "stream"); - var body = Expression.Convert(Expression.Call(deserialize, param1), typeof(object)); - var lambda = Expression.Lambda>(body, param1).Compile(); - - this.deserialize3 = lambda; - } - { - // public static T Deserialize(Stream stream, IFormatterResolver resolver) - var deserialize = GetMethod(type, new Type[] { typeof(Stream), typeof(IFormatterResolver) }); - - var param1 = Expression.Parameter(typeof(Stream), "stream"); - var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); - var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); - var lambda = Expression.Lambda>(body, param1, param2).Compile(); - - this.deserialize4 = lambda; - } - { - // public static T Deserialize(Stream stream, bool readStrict) - var deserialize = GetMethod(type, new Type[] { typeof(Stream), typeof(bool) }); - - var param1 = Expression.Parameter(typeof(Stream), "stream"); - var param2 = Expression.Parameter(typeof(bool), "readStrict"); - var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); - var lambda = Expression.Lambda>(body, param1, param2).Compile(); - - this.deserialize5 = lambda; - } - { - // public static T Deserialize(Stream stream, IFormatterResolver resolver, bool readStrict) - var deserialize = GetMethod(type, new Type[] { typeof(Stream), typeof(IFormatterResolver), typeof(bool) }); - - var param1 = Expression.Parameter(typeof(Stream), "stream"); - var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); - var param3 = Expression.Parameter(typeof(bool), "readStrict"); - var body = Expression.Convert(Expression.Call(deserialize, param1, param2, param3), typeof(object)); - var lambda = Expression.Lambda>(body, param1, param2, param3).Compile(); - - this.deserialize6 = lambda; - } - - { - // public static T Deserialize(ArraySegment bytes) - var deserialize = GetMethod(type, new Type[] { typeof(ArraySegment) }); - - var param1 = Expression.Parameter(typeof(ArraySegment), "bytes"); - var body = Expression.Convert(Expression.Call(deserialize, param1), typeof(object)); - var lambda = Expression.Lambda, object>>(body, param1).Compile(); - - this.deserialize7 = lambda; - } - { - // public static T Deserialize(ArraySegment bytes, IFormatterResolver resolver) - var deserialize = GetMethod(type, new Type[] { typeof(ArraySegment), typeof(IFormatterResolver) }); - - var param1 = Expression.Parameter(typeof(ArraySegment), "bytes"); - var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); - var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); - var lambda = Expression.Lambda, IFormatterResolver, object>>(body, param1, param2).Compile(); - - this.deserialize8 = lambda; - } - } - - // null is generic type marker. - static MethodInfo GetMethod(Type type, Type[] parameters) - { - return typeof(LZ4MessagePackSerializer).GetRuntimeMethods().Where(x => - { - if (!(x.Name == "Serialize" || x.Name == "Deserialize")) return false; - var ps = x.GetParameters(); - if (ps.Length != parameters.Length) return false; - for (int i = 0; i < ps.Length; i++) - { - if (parameters[i] == null && ps[i].ParameterType.IsGenericParameter) continue; - if (ps[i].ParameterType != parameters[i]) return false; - } - return true; - }) - .Single() - .MakeGenericMethod(type); - } - } - } - } -} - -#endif +#if NETSTANDARD + +using System; +using System.Linq; +using System.Reflection; +using System.IO; +using System.Linq.Expressions; + +namespace MessagePack +{ + public static partial class LZ4MessagePackSerializer + { + public static class NonGeneric + { + static readonly Func CreateCompiledMethods; + static readonly MessagePack.Internal.ThreadsafeTypeKeyHashTable serializes = new MessagePack.Internal.ThreadsafeTypeKeyHashTable(capacity: 64); + + + static NonGeneric() + { + CreateCompiledMethods = t => new CompiledMethods(t); + } + + public static byte[] Serialize(Type type, object obj) + { + return GetOrAdd(type).serialize1.Invoke(obj); + } + + public static byte[] Serialize(Type type, object obj, IFormatterResolver resolver) + { + return GetOrAdd(type).serialize2.Invoke(obj, resolver); + } + + public static void Serialize(Type type, Stream stream, object obj) + { + GetOrAdd(type).serialize3.Invoke(stream, obj); + } + + public static void Serialize(Type type, Stream stream, object obj, IFormatterResolver resolver) + { + GetOrAdd(type).serialize4.Invoke(stream, obj, resolver); + } + + public static object Deserialize(Type type, byte[] bytes) + { + return GetOrAdd(type).deserialize1.Invoke(bytes); + } + + public static object Deserialize(Type type, byte[] bytes, IFormatterResolver resolver) + { + return GetOrAdd(type).deserialize2.Invoke(bytes, resolver); + } + + public static object Deserialize(Type type, Stream stream) + { + return GetOrAdd(type).deserialize3.Invoke(stream); + } + + public static object Deserialize(Type type, Stream stream, IFormatterResolver resolver) + { + return GetOrAdd(type).deserialize4.Invoke(stream, resolver); + } + + public static object Deserialize(Type type, Stream stream, bool readStrict) + { + return GetOrAdd(type).deserialize5.Invoke(stream, readStrict); + } + + public static object Deserialize(Type type, Stream stream, IFormatterResolver resolver, bool readStrict) + { + return GetOrAdd(type).deserialize6.Invoke(stream, resolver, readStrict); + } + + public static object Deserialize(Type type, ArraySegment bytes) + { + return GetOrAdd(type).deserialize7.Invoke(bytes); + } + + public static object Deserialize(Type type, ArraySegment bytes, IFormatterResolver resolver) + { + return GetOrAdd(type).deserialize8.Invoke(bytes, resolver); + } + + static CompiledMethods GetOrAdd(Type type) + { + return serializes.GetOrAdd(type, CreateCompiledMethods); + } + + class CompiledMethods + { + public readonly Func serialize1; + public readonly Func serialize2; + public readonly Action serialize3; + public readonly Action serialize4; + + public readonly Func deserialize1; + public readonly Func deserialize2; + public readonly Func deserialize3; + public readonly Func deserialize4; + public readonly Func deserialize5; + public readonly Func deserialize6; + + public readonly Func, object> deserialize7; + public readonly Func, IFormatterResolver, object> deserialize8; + + public CompiledMethods(Type type) + { + var ti = type.GetTypeInfo(); + { + // public static byte[] Serialize(T obj) + var serialize = GetMethod(type, new Type[] { null }); + + var param1 = Expression.Parameter(typeof(object), "obj"); + var body = Expression.Call(serialize, ti.IsValueType + ? Expression.Unbox(param1, type) + : Expression.Convert(param1, type)); + var lambda = Expression.Lambda>(body, param1).Compile(); + + this.serialize1 = lambda; + } + { + // public static byte[] Serialize(T obj, IFormatterResolver resolver) + var serialize = GetMethod(type, new Type[] { null, typeof(IFormatterResolver) }); + + var param1 = Expression.Parameter(typeof(object), "obj"); + var param2 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); + + var body = Expression.Call(serialize, ti.IsValueType + ? Expression.Unbox(param1, type) + : Expression.Convert(param1, type), param2); + var lambda = Expression.Lambda>(body, param1, param2).Compile(); + + this.serialize2 = lambda; + } + { + // public static void Serialize(Stream stream, T obj) + var serialize = GetMethod(type, new Type[] { typeof(Stream), null }); + + var param1 = Expression.Parameter(typeof(Stream), "stream"); + var param2 = Expression.Parameter(typeof(object), "obj"); + + var body = Expression.Call(serialize, param1, ti.IsValueType + ? Expression.Unbox(param2, type) + : Expression.Convert(param2, type)); + var lambda = Expression.Lambda>(body, param1, param2).Compile(); + + this.serialize3 = lambda; + } + { + // public static void Serialize(Stream stream, T obj, IFormatterResolver resolver) + var serialize = GetMethod(type, new Type[] { typeof(Stream), null, typeof(IFormatterResolver) }); + + var param1 = Expression.Parameter(typeof(Stream), "stream"); + var param2 = Expression.Parameter(typeof(object), "obj"); + var param3 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); + + var body = Expression.Call(serialize, param1, ti.IsValueType + ? Expression.Unbox(param2, type) + : Expression.Convert(param2, type), param3); + var lambda = Expression.Lambda>(body, param1, param2, param3).Compile(); + + this.serialize4 = lambda; + } + + { + // public static T Deserialize(byte[] bytes) + var deserialize = GetMethod(type, new Type[] { typeof(byte[]) }); + + var param1 = Expression.Parameter(typeof(byte[]), "bytes"); + var body = Expression.Convert(Expression.Call(deserialize, param1), typeof(object)); + var lambda = Expression.Lambda>(body, param1).Compile(); + + this.deserialize1 = lambda; + } + { + // public static T Deserialize(byte[] bytes, IFormatterResolver resolver) + var deserialize = GetMethod(type, new Type[] { typeof(byte[]), typeof(IFormatterResolver) }); + + var param1 = Expression.Parameter(typeof(byte[]), "bytes"); + var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); + var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); + var lambda = Expression.Lambda>(body, param1, param2).Compile(); + + this.deserialize2 = lambda; + } + { + // public static T Deserialize(Stream stream) + var deserialize = GetMethod(type, new Type[] { typeof(Stream) }); + + var param1 = Expression.Parameter(typeof(Stream), "stream"); + var body = Expression.Convert(Expression.Call(deserialize, param1), typeof(object)); + var lambda = Expression.Lambda>(body, param1).Compile(); + + this.deserialize3 = lambda; + } + { + // public static T Deserialize(Stream stream, IFormatterResolver resolver) + var deserialize = GetMethod(type, new Type[] { typeof(Stream), typeof(IFormatterResolver) }); + + var param1 = Expression.Parameter(typeof(Stream), "stream"); + var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); + var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); + var lambda = Expression.Lambda>(body, param1, param2).Compile(); + + this.deserialize4 = lambda; + } + { + // public static T Deserialize(Stream stream, bool readStrict) + var deserialize = GetMethod(type, new Type[] { typeof(Stream), typeof(bool) }); + + var param1 = Expression.Parameter(typeof(Stream), "stream"); + var param2 = Expression.Parameter(typeof(bool), "readStrict"); + var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); + var lambda = Expression.Lambda>(body, param1, param2).Compile(); + + this.deserialize5 = lambda; + } + { + // public static T Deserialize(Stream stream, IFormatterResolver resolver, bool readStrict) + var deserialize = GetMethod(type, new Type[] { typeof(Stream), typeof(IFormatterResolver), typeof(bool) }); + + var param1 = Expression.Parameter(typeof(Stream), "stream"); + var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); + var param3 = Expression.Parameter(typeof(bool), "readStrict"); + var body = Expression.Convert(Expression.Call(deserialize, param1, param2, param3), typeof(object)); + var lambda = Expression.Lambda>(body, param1, param2, param3).Compile(); + + this.deserialize6 = lambda; + } + + { + // public static T Deserialize(ArraySegment bytes) + var deserialize = GetMethod(type, new Type[] { typeof(ArraySegment) }); + + var param1 = Expression.Parameter(typeof(ArraySegment), "bytes"); + var body = Expression.Convert(Expression.Call(deserialize, param1), typeof(object)); + var lambda = Expression.Lambda, object>>(body, param1).Compile(); + + this.deserialize7 = lambda; + } + { + // public static T Deserialize(ArraySegment bytes, IFormatterResolver resolver) + var deserialize = GetMethod(type, new Type[] { typeof(ArraySegment), typeof(IFormatterResolver) }); + + var param1 = Expression.Parameter(typeof(ArraySegment), "bytes"); + var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); + var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); + var lambda = Expression.Lambda, IFormatterResolver, object>>(body, param1, param2).Compile(); + + this.deserialize8 = lambda; + } + } + + // null is generic type marker. + static MethodInfo GetMethod(Type type, Type[] parameters) + { + return typeof(LZ4MessagePackSerializer).GetRuntimeMethods().Where(x => + { + if (!(x.Name == "Serialize" || x.Name == "Deserialize")) return false; + var ps = x.GetParameters(); + if (ps.Length != parameters.Length) return false; + for (int i = 0; i < ps.Length; i++) + { + if (parameters[i] == null && ps[i].ParameterType.IsGenericParameter) continue; + if (ps[i].ParameterType != parameters[i]) return false; + } + return true; + }) + .Single() + .MakeGenericMethod(type); + } + } + } + } +} + +#endif diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.cs index 41362de6c..3b404c8b0 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.cs @@ -1,361 +1,361 @@ -using MessagePack.Internal; -using System; -using System.IO; -using MessagePack.LZ4; - -namespace MessagePack -{ - /// - /// LZ4 Compressed special serializer. - /// - public static partial class LZ4MessagePackSerializer - { - public const sbyte ExtensionTypeCode = 99; - - public const int NotCompressionSize = 64; - - /// - /// Serialize to binary with default resolver. - /// - public static byte[] Serialize(T obj) - { - return Serialize(obj, null); - } - - /// - /// Serialize to binary with specified resolver. - /// - public static byte[] Serialize(T obj, IFormatterResolver resolver) - { - if (resolver == null) resolver = MessagePackSerializer.DefaultResolver; - var buffer = SerializeCore(obj, resolver); - - return MessagePackBinary.FastCloneWithResize(buffer.Array, buffer.Count); - } - - /// - /// Serialize to stream. - /// - public static void Serialize(Stream stream, T obj) - { - Serialize(stream, obj, null); - } - - /// - /// Serialize to stream with specified resolver. - /// - public static void Serialize(Stream stream, T obj, IFormatterResolver resolver) - { - if (resolver == null) resolver = MessagePackSerializer.DefaultResolver; - var buffer = SerializeCore(obj, resolver); - - stream.Write(buffer.Array, 0, buffer.Count); - } - - public static int SerializeToBlock(ref byte[] bytes, int offset, T obj, IFormatterResolver resolver) - { - var serializedData = MessagePackSerializer.SerializeUnsafe(obj, resolver); - - if (serializedData.Count < NotCompressionSize) - { - // can't write direct, shoganai... - MessagePackBinary.EnsureCapacity(ref bytes, offset, serializedData.Count); - Buffer.BlockCopy(serializedData.Array, serializedData.Offset, bytes, offset, serializedData.Count); - return serializedData.Count; - } - else - { - var maxOutCount = LZ4Codec.MaximumOutputLength(serializedData.Count); - - MessagePackBinary.EnsureCapacity(ref bytes, offset, 6 + 5 + maxOutCount); // (ext header size + fixed length size) - - // acquire ext header position - var extHeaderOffset = offset; - offset += (6 + 5); - - // write body - var lz4Length = LZ4Codec.Encode(serializedData.Array, serializedData.Offset, serializedData.Count, bytes, offset, bytes.Length - offset); - - // write extension header(always 6 bytes) - extHeaderOffset += MessagePackBinary.WriteExtensionFormatHeaderForceExt32Block(ref bytes, extHeaderOffset, (sbyte)ExtensionTypeCode, lz4Length + 5); - - // write length(always 5 bytes) - MessagePackBinary.WriteInt32ForceInt32Block(ref bytes, extHeaderOffset, serializedData.Count); - - return 6 + 5 + lz4Length; - } - } - - public static byte[] ToLZ4Binary(ArraySegment messagePackBinary) - { - var buffer = ToLZ4BinaryCore(messagePackBinary); - return MessagePackBinary.FastCloneWithResize(buffer.Array, buffer.Count); - } - - static ArraySegment SerializeCore(T obj, IFormatterResolver resolver) - { - var serializedData = MessagePackSerializer.SerializeUnsafe(obj, resolver); - return ToLZ4BinaryCore(serializedData); - } - - static ArraySegment ToLZ4BinaryCore(ArraySegment serializedData) - { - if (serializedData.Count < NotCompressionSize) - { - return serializedData; - } - else - { - var offset = 0; - var buffer = LZ4MemoryPool.GetBuffer(); - var maxOutCount = LZ4Codec.MaximumOutputLength(serializedData.Count); - if (buffer.Length + 6 + 5 < maxOutCount) // (ext header size + fixed length size) - { - buffer = new byte[6 + 5 + maxOutCount]; - } - - // acquire ext header position - var extHeaderOffset = offset; - offset += (6 + 5); - - // write body - var lz4Length = LZ4Codec.Encode(serializedData.Array, serializedData.Offset, serializedData.Count, buffer, offset, buffer.Length - offset); - - // write extension header(always 6 bytes) - extHeaderOffset += MessagePackBinary.WriteExtensionFormatHeaderForceExt32Block(ref buffer, extHeaderOffset, (sbyte)ExtensionTypeCode, lz4Length + 5); - - // write length(always 5 bytes) - MessagePackBinary.WriteInt32ForceInt32Block(ref buffer, extHeaderOffset, serializedData.Count); - - return new ArraySegment(buffer, 0, 6 + 5 + lz4Length); - } - } - - public static T Deserialize(byte[] bytes) - { - return Deserialize(bytes, null); - } - - public static T Deserialize(byte[] bytes, IFormatterResolver resolver) - { - return DeserializeCore(new ArraySegment(bytes, 0, bytes.Length), resolver); - } - - public static T Deserialize(ArraySegment bytes) - { - return DeserializeCore(bytes, null); - } - - public static T Deserialize(ArraySegment bytes, IFormatterResolver resolver) - { - return DeserializeCore(bytes, resolver); - } - - public static T Deserialize(Stream stream) - { - return Deserialize(stream, null); - } - - public static T Deserialize(Stream stream, IFormatterResolver resolver) - { - return Deserialize(stream, resolver, false); - } - - public static T Deserialize(Stream stream, bool readStrict) - { - return Deserialize(stream, MessagePackSerializer.DefaultResolver, readStrict); - } - - public static T Deserialize(Stream stream, IFormatterResolver resolver, bool readStrict) - { - if (!readStrict) - { - var buffer = MessagePack.Internal.InternalMemoryPool.GetBuffer(); // use MessagePackSerializer.Pool! - var len = FillFromStream(stream, ref buffer); - return DeserializeCore(new ArraySegment(buffer, 0, len), resolver); - } - else - { - int blockSize; - var bytes = MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, false, out blockSize); - return DeserializeCore(new ArraySegment(bytes, 0, blockSize), resolver); - } - } - - public static byte[] Decode(Stream stream, bool readStrict = false) - { - if (!readStrict) - { - var buffer = MessagePack.Internal.InternalMemoryPool.GetBuffer(); // use MessagePackSerializer.Pool! - var len = FillFromStream(stream, ref buffer); - return Decode(new ArraySegment(buffer, 0, len)); - } - else - { - int blockSize; - var bytes = MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, false, out blockSize); - return Decode(new ArraySegment(bytes, 0, blockSize)); - } - } - - public static byte[] Decode(byte[] bytes) - { - return Decode(new ArraySegment(bytes, 0, bytes.Length)); - } - - public static byte[] Decode(ArraySegment bytes) - { - int readSize; - if (MessagePackBinary.GetMessagePackType(bytes.Array, bytes.Offset) == MessagePackType.Extension) - { - var header = MessagePackBinary.ReadExtensionFormatHeader(bytes.Array, bytes.Offset, out readSize); - if (header.TypeCode == ExtensionTypeCode) - { - // decode lz4 - var offset = bytes.Offset + readSize; - var length = MessagePackBinary.ReadInt32(bytes.Array, offset, out readSize); - offset += readSize; - - var buffer = new byte[length]; // use new buffer. - - // LZ4 Decode - var len = bytes.Count + bytes.Offset - offset; - LZ4Codec.Decode(bytes.Array, offset, len, buffer, 0, length); - - return buffer; - } - } - - if (bytes.Offset == 0 && bytes.Array.Length == bytes.Count) - { - // return same reference - return bytes.Array; - } - else - { - var result = new byte[bytes.Count]; - Buffer.BlockCopy(bytes.Array, bytes.Offset, result, 0, result.Length); - return result; - } - } - - - /// - /// Get the war memory pool byte[]. The result can not share across thread and can not hold and can not call LZ4Deserialize before use it. - /// - public static byte[] DecodeUnsafe(byte[] bytes) - { - return DecodeUnsafe(new ArraySegment(bytes, 0, bytes.Length)); - } - - /// - /// Get the war memory pool byte[]. The result can not share across thread and can not hold and can not call LZ4Deserialize before use it. - /// - public static byte[] DecodeUnsafe(ArraySegment bytes) - { - int readSize; - if (MessagePackBinary.GetMessagePackType(bytes.Array, bytes.Offset) == MessagePackType.Extension) - { - var header = MessagePackBinary.ReadExtensionFormatHeader(bytes.Array, bytes.Offset, out readSize); - if (header.TypeCode == ExtensionTypeCode) - { - // decode lz4 - var offset = bytes.Offset + readSize; - var length = MessagePackBinary.ReadInt32(bytes.Array, offset, out readSize); - offset += readSize; - - var buffer = LZ4MemoryPool.GetBuffer(); // use LZ4 Pool(Unsafe) - if (buffer.Length < length) - { - buffer = new byte[length]; - } - - // LZ4 Decode - var len = bytes.Count + bytes.Offset - offset; - LZ4Codec.Decode(bytes.Array, offset, len, buffer, 0, length); - - return buffer; // return pooled bytes. - } - } - - if (bytes.Offset == 0 && bytes.Array.Length == bytes.Count) - { - // return same reference - return bytes.Array; - } - else - { - var result = new byte[bytes.Count]; - Buffer.BlockCopy(bytes.Array, bytes.Offset, result, 0, result.Length); - return result; - } - } - - static T DeserializeCore(ArraySegment bytes, IFormatterResolver resolver) - { - if (resolver == null) resolver = MessagePackSerializer.DefaultResolver; - var formatter = resolver.GetFormatterWithVerify(); - - int readSize; - if (MessagePackBinary.GetMessagePackType(bytes.Array, bytes.Offset) == MessagePackType.Extension) - { - var header = MessagePackBinary.ReadExtensionFormatHeader(bytes.Array, bytes.Offset, out readSize); - if (header.TypeCode == ExtensionTypeCode) - { - // decode lz4 - var offset = bytes.Offset + readSize; - var length = MessagePackBinary.ReadInt32(bytes.Array, offset, out readSize); - offset += readSize; - - var buffer = LZ4MemoryPool.GetBuffer(); // use LZ4 Pool - if (buffer.Length < length) - { - buffer = new byte[length]; - } - - // LZ4 Decode - var len = bytes.Count + bytes.Offset - offset; - LZ4Codec.Decode(bytes.Array, offset, len, buffer, 0, length); - - return formatter.Deserialize(buffer, 0, resolver, out readSize); - } - } - - return formatter.Deserialize(bytes.Array, bytes.Offset, resolver, out readSize); - } - - static int FillFromStream(Stream input, ref byte[] buffer) - { - int length = 0; - int read; - while ((read = input.Read(buffer, length, buffer.Length - length)) > 0) - { - length += read; - if (length == buffer.Length) - { - MessagePackBinary.FastResize(ref buffer, length * 2); - } - } - - return length; - } - } -} - -namespace MessagePack.Internal -{ - internal static class LZ4MemoryPool - { - [ThreadStatic] - static byte[] lz4buffer = null; - - public static byte[] GetBuffer() - { - if (lz4buffer == null) - { - lz4buffer = new byte[LZ4.LZ4Codec.MaximumOutputLength(65536)]; - } - return lz4buffer; - } - } +using MessagePack.Internal; +using System; +using System.IO; +using MessagePack.LZ4; + +namespace MessagePack +{ + /// + /// LZ4 Compressed special serializer. + /// + public static partial class LZ4MessagePackSerializer + { + public const sbyte ExtensionTypeCode = 99; + + public const int NotCompressionSize = 64; + + /// + /// Serialize to binary with default resolver. + /// + public static byte[] Serialize(T obj) + { + return Serialize(obj, null); + } + + /// + /// Serialize to binary with specified resolver. + /// + public static byte[] Serialize(T obj, IFormatterResolver resolver) + { + if (resolver == null) resolver = MessagePackSerializer.DefaultResolver; + var buffer = SerializeCore(obj, resolver); + + return MessagePackBinary.FastCloneWithResize(buffer.Array, buffer.Count); + } + + /// + /// Serialize to stream. + /// + public static void Serialize(Stream stream, T obj) + { + Serialize(stream, obj, null); + } + + /// + /// Serialize to stream with specified resolver. + /// + public static void Serialize(Stream stream, T obj, IFormatterResolver resolver) + { + if (resolver == null) resolver = MessagePackSerializer.DefaultResolver; + var buffer = SerializeCore(obj, resolver); + + stream.Write(buffer.Array, 0, buffer.Count); + } + + public static int SerializeToBlock(ref byte[] bytes, int offset, T obj, IFormatterResolver resolver) + { + var serializedData = MessagePackSerializer.SerializeUnsafe(obj, resolver); + + if (serializedData.Count < NotCompressionSize) + { + // can't write direct, shoganai... + MessagePackBinary.EnsureCapacity(ref bytes, offset, serializedData.Count); + Buffer.BlockCopy(serializedData.Array, serializedData.Offset, bytes, offset, serializedData.Count); + return serializedData.Count; + } + else + { + var maxOutCount = LZ4Codec.MaximumOutputLength(serializedData.Count); + + MessagePackBinary.EnsureCapacity(ref bytes, offset, 6 + 5 + maxOutCount); // (ext header size + fixed length size) + + // acquire ext header position + var extHeaderOffset = offset; + offset += (6 + 5); + + // write body + var lz4Length = LZ4Codec.Encode(serializedData.Array, serializedData.Offset, serializedData.Count, bytes, offset, bytes.Length - offset); + + // write extension header(always 6 bytes) + extHeaderOffset += MessagePackBinary.WriteExtensionFormatHeaderForceExt32Block(ref bytes, extHeaderOffset, (sbyte)ExtensionTypeCode, lz4Length + 5); + + // write length(always 5 bytes) + MessagePackBinary.WriteInt32ForceInt32Block(ref bytes, extHeaderOffset, serializedData.Count); + + return 6 + 5 + lz4Length; + } + } + + public static byte[] ToLZ4Binary(ArraySegment messagePackBinary) + { + var buffer = ToLZ4BinaryCore(messagePackBinary); + return MessagePackBinary.FastCloneWithResize(buffer.Array, buffer.Count); + } + + static ArraySegment SerializeCore(T obj, IFormatterResolver resolver) + { + var serializedData = MessagePackSerializer.SerializeUnsafe(obj, resolver); + return ToLZ4BinaryCore(serializedData); + } + + static ArraySegment ToLZ4BinaryCore(ArraySegment serializedData) + { + if (serializedData.Count < NotCompressionSize) + { + return serializedData; + } + else + { + var offset = 0; + var buffer = LZ4MemoryPool.GetBuffer(); + var maxOutCount = LZ4Codec.MaximumOutputLength(serializedData.Count); + if (buffer.Length + 6 + 5 < maxOutCount) // (ext header size + fixed length size) + { + buffer = new byte[6 + 5 + maxOutCount]; + } + + // acquire ext header position + var extHeaderOffset = offset; + offset += (6 + 5); + + // write body + var lz4Length = LZ4Codec.Encode(serializedData.Array, serializedData.Offset, serializedData.Count, buffer, offset, buffer.Length - offset); + + // write extension header(always 6 bytes) + extHeaderOffset += MessagePackBinary.WriteExtensionFormatHeaderForceExt32Block(ref buffer, extHeaderOffset, (sbyte)ExtensionTypeCode, lz4Length + 5); + + // write length(always 5 bytes) + MessagePackBinary.WriteInt32ForceInt32Block(ref buffer, extHeaderOffset, serializedData.Count); + + return new ArraySegment(buffer, 0, 6 + 5 + lz4Length); + } + } + + public static T Deserialize(byte[] bytes) + { + return Deserialize(bytes, null); + } + + public static T Deserialize(byte[] bytes, IFormatterResolver resolver) + { + return DeserializeCore(new ArraySegment(bytes, 0, bytes.Length), resolver); + } + + public static T Deserialize(ArraySegment bytes) + { + return DeserializeCore(bytes, null); + } + + public static T Deserialize(ArraySegment bytes, IFormatterResolver resolver) + { + return DeserializeCore(bytes, resolver); + } + + public static T Deserialize(Stream stream) + { + return Deserialize(stream, null); + } + + public static T Deserialize(Stream stream, IFormatterResolver resolver) + { + return Deserialize(stream, resolver, false); + } + + public static T Deserialize(Stream stream, bool readStrict) + { + return Deserialize(stream, MessagePackSerializer.DefaultResolver, readStrict); + } + + public static T Deserialize(Stream stream, IFormatterResolver resolver, bool readStrict) + { + if (!readStrict) + { + var buffer = MessagePack.Internal.InternalMemoryPool.GetBuffer(); // use MessagePackSerializer.Pool! + var len = FillFromStream(stream, ref buffer); + return DeserializeCore(new ArraySegment(buffer, 0, len), resolver); + } + else + { + int blockSize; + var bytes = MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, false, out blockSize); + return DeserializeCore(new ArraySegment(bytes, 0, blockSize), resolver); + } + } + + public static byte[] Decode(Stream stream, bool readStrict = false) + { + if (!readStrict) + { + var buffer = MessagePack.Internal.InternalMemoryPool.GetBuffer(); // use MessagePackSerializer.Pool! + var len = FillFromStream(stream, ref buffer); + return Decode(new ArraySegment(buffer, 0, len)); + } + else + { + int blockSize; + var bytes = MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, false, out blockSize); + return Decode(new ArraySegment(bytes, 0, blockSize)); + } + } + + public static byte[] Decode(byte[] bytes) + { + return Decode(new ArraySegment(bytes, 0, bytes.Length)); + } + + public static byte[] Decode(ArraySegment bytes) + { + int readSize; + if (MessagePackBinary.GetMessagePackType(bytes.Array, bytes.Offset) == MessagePackType.Extension) + { + var header = MessagePackBinary.ReadExtensionFormatHeader(bytes.Array, bytes.Offset, out readSize); + if (header.TypeCode == ExtensionTypeCode) + { + // decode lz4 + var offset = bytes.Offset + readSize; + var length = MessagePackBinary.ReadInt32(bytes.Array, offset, out readSize); + offset += readSize; + + var buffer = new byte[length]; // use new buffer. + + // LZ4 Decode + var len = bytes.Count + bytes.Offset - offset; + LZ4Codec.Decode(bytes.Array, offset, len, buffer, 0, length); + + return buffer; + } + } + + if (bytes.Offset == 0 && bytes.Array.Length == bytes.Count) + { + // return same reference + return bytes.Array; + } + else + { + var result = new byte[bytes.Count]; + Buffer.BlockCopy(bytes.Array, bytes.Offset, result, 0, result.Length); + return result; + } + } + + + /// + /// Get the war memory pool byte[]. The result can not share across thread and can not hold and can not call LZ4Deserialize before use it. + /// + public static byte[] DecodeUnsafe(byte[] bytes) + { + return DecodeUnsafe(new ArraySegment(bytes, 0, bytes.Length)); + } + + /// + /// Get the war memory pool byte[]. The result can not share across thread and can not hold and can not call LZ4Deserialize before use it. + /// + public static byte[] DecodeUnsafe(ArraySegment bytes) + { + int readSize; + if (MessagePackBinary.GetMessagePackType(bytes.Array, bytes.Offset) == MessagePackType.Extension) + { + var header = MessagePackBinary.ReadExtensionFormatHeader(bytes.Array, bytes.Offset, out readSize); + if (header.TypeCode == ExtensionTypeCode) + { + // decode lz4 + var offset = bytes.Offset + readSize; + var length = MessagePackBinary.ReadInt32(bytes.Array, offset, out readSize); + offset += readSize; + + var buffer = LZ4MemoryPool.GetBuffer(); // use LZ4 Pool(Unsafe) + if (buffer.Length < length) + { + buffer = new byte[length]; + } + + // LZ4 Decode + var len = bytes.Count + bytes.Offset - offset; + LZ4Codec.Decode(bytes.Array, offset, len, buffer, 0, length); + + return buffer; // return pooled bytes. + } + } + + if (bytes.Offset == 0 && bytes.Array.Length == bytes.Count) + { + // return same reference + return bytes.Array; + } + else + { + var result = new byte[bytes.Count]; + Buffer.BlockCopy(bytes.Array, bytes.Offset, result, 0, result.Length); + return result; + } + } + + static T DeserializeCore(ArraySegment bytes, IFormatterResolver resolver) + { + if (resolver == null) resolver = MessagePackSerializer.DefaultResolver; + var formatter = resolver.GetFormatterWithVerify(); + + int readSize; + if (MessagePackBinary.GetMessagePackType(bytes.Array, bytes.Offset) == MessagePackType.Extension) + { + var header = MessagePackBinary.ReadExtensionFormatHeader(bytes.Array, bytes.Offset, out readSize); + if (header.TypeCode == ExtensionTypeCode) + { + // decode lz4 + var offset = bytes.Offset + readSize; + var length = MessagePackBinary.ReadInt32(bytes.Array, offset, out readSize); + offset += readSize; + + var buffer = LZ4MemoryPool.GetBuffer(); // use LZ4 Pool + if (buffer.Length < length) + { + buffer = new byte[length]; + } + + // LZ4 Decode + var len = bytes.Count + bytes.Offset - offset; + LZ4Codec.Decode(bytes.Array, offset, len, buffer, 0, length); + + return formatter.Deserialize(buffer, 0, resolver, out readSize); + } + } + + return formatter.Deserialize(bytes.Array, bytes.Offset, resolver, out readSize); + } + + static int FillFromStream(Stream input, ref byte[] buffer) + { + int length = 0; + int read; + while ((read = input.Read(buffer, length, buffer.Length - length)) > 0) + { + length += read; + if (length == buffer.Length) + { + MessagePackBinary.FastResize(ref buffer, length * 2); + } + } + + return length; + } + } +} + +namespace MessagePack.Internal +{ + internal static class LZ4MemoryPool + { + [ThreadStatic] + static byte[] lz4buffer = null; + + public static byte[] GetBuffer() + { + if (lz4buffer == null) + { + lz4buffer = new byte[LZ4.LZ4Codec.MaximumOutputLength(65536)]; + } + return lz4buffer; + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackBinary.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackBinary.cs index bc3cbd786..50fb3a7a4 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackBinary.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackBinary.cs @@ -1,6004 +1,6004 @@ -using MessagePack.Decoders; -using MessagePack.Internal; -using System; -using System.IO; - -namespace MessagePack -{ - /// - /// Encode/Decode Utility of MessagePack Spec. - /// https://github.com/msgpack/msgpack/blob/master/spec.md - /// - public static partial class MessagePackBinary - { - const int MaxSize = 256; // [0] ~ [255] - const int ArrayMaxSize = 0x7FFFFFC7; // https://msdn.microsoft.com/en-us/library/system.array - - static readonly IMapHeaderDecoder[] mapHeaderDecoders = new IMapHeaderDecoder[MaxSize]; - static readonly IArrayHeaderDecoder[] arrayHeaderDecoders = new IArrayHeaderDecoder[MaxSize]; - static readonly IBooleanDecoder[] booleanDecoders = new IBooleanDecoder[MaxSize]; - static readonly IByteDecoder[] byteDecoders = new IByteDecoder[MaxSize]; - static readonly IBytesDecoder[] bytesDecoders = new IBytesDecoder[MaxSize]; - static readonly IBytesSegmentDecoder[] bytesSegmentDecoders = new IBytesSegmentDecoder[MaxSize]; - static readonly ISByteDecoder[] sbyteDecoders = new ISByteDecoder[MaxSize]; - static readonly ISingleDecoder[] singleDecoders = new ISingleDecoder[MaxSize]; - static readonly IDoubleDecoder[] doubleDecoders = new IDoubleDecoder[MaxSize]; - static readonly IInt16Decoder[] int16Decoders = new IInt16Decoder[MaxSize]; - static readonly IInt32Decoder[] int32Decoders = new IInt32Decoder[MaxSize]; - static readonly IInt64Decoder[] int64Decoders = new IInt64Decoder[MaxSize]; - static readonly IUInt16Decoder[] uint16Decoders = new IUInt16Decoder[MaxSize]; - static readonly IUInt32Decoder[] uint32Decoders = new IUInt32Decoder[MaxSize]; - static readonly IUInt64Decoder[] uint64Decoders = new IUInt64Decoder[MaxSize]; - static readonly IStringDecoder[] stringDecoders = new IStringDecoder[MaxSize]; - static readonly IStringSegmentDecoder[] stringSegmentDecoders = new IStringSegmentDecoder[MaxSize]; - static readonly IExtDecoder[] extDecoders = new IExtDecoder[MaxSize]; - static readonly IExtHeaderDecoder[] extHeaderDecoders = new IExtHeaderDecoder[MaxSize]; - static readonly IDateTimeDecoder[] dateTimeDecoders = new IDateTimeDecoder[MaxSize]; - static readonly IReadNextDecoder[] readNextDecoders = new IReadNextDecoder[MaxSize]; - - static MessagePackBinary() - { - // Init LookupTable. - for (int i = 0; i < MaxSize; i++) - { - mapHeaderDecoders[i] = Decoders.InvalidMapHeader.Instance; - arrayHeaderDecoders[i] = Decoders.InvalidArrayHeader.Instance; - booleanDecoders[i] = Decoders.InvalidBoolean.Instance; - byteDecoders[i] = Decoders.InvalidByte.Instance; - bytesDecoders[i] = Decoders.InvalidBytes.Instance; - bytesSegmentDecoders[i] = Decoders.InvalidBytesSegment.Instance; - sbyteDecoders[i] = Decoders.InvalidSByte.Instance; - singleDecoders[i] = Decoders.InvalidSingle.Instance; - doubleDecoders[i] = Decoders.InvalidDouble.Instance; - int16Decoders[i] = Decoders.InvalidInt16.Instance; - int32Decoders[i] = Decoders.InvalidInt32.Instance; - int64Decoders[i] = Decoders.InvalidInt64.Instance; - uint16Decoders[i] = Decoders.InvalidUInt16.Instance; - uint32Decoders[i] = Decoders.InvalidUInt32.Instance; - uint64Decoders[i] = Decoders.InvalidUInt64.Instance; - stringDecoders[i] = Decoders.InvalidString.Instance; - stringSegmentDecoders[i] = Decoders.InvalidStringSegment.Instance; - extDecoders[i] = Decoders.InvalidExt.Instance; - extHeaderDecoders[i] = Decoders.InvalidExtHeader.Instance; - dateTimeDecoders[i] = Decoders.InvalidDateTime.Instance; - } - - // Number - for (int i = MessagePackCode.MinNegativeFixInt; i <= MessagePackCode.MaxNegativeFixInt; i++) - { - sbyteDecoders[i] = Decoders.FixSByte.Instance; - int16Decoders[i] = Decoders.FixNegativeInt16.Instance; - int32Decoders[i] = Decoders.FixNegativeInt32.Instance; - int64Decoders[i] = Decoders.FixNegativeInt64.Instance; - singleDecoders[i] = Decoders.FixNegativeFloat.Instance; - doubleDecoders[i] = Decoders.FixNegativeDouble.Instance; - readNextDecoders[i] = Decoders.ReadNext1.Instance; - } - for (int i = MessagePackCode.MinFixInt; i <= MessagePackCode.MaxFixInt; i++) - { - byteDecoders[i] = Decoders.FixByte.Instance; - sbyteDecoders[i] = Decoders.FixSByte.Instance; - int16Decoders[i] = Decoders.FixInt16.Instance; - int32Decoders[i] = Decoders.FixInt32.Instance; - int64Decoders[i] = Decoders.FixInt64.Instance; - uint16Decoders[i] = Decoders.FixUInt16.Instance; - uint32Decoders[i] = Decoders.FixUInt32.Instance; - uint64Decoders[i] = Decoders.FixUInt64.Instance; - singleDecoders[i] = Decoders.FixFloat.Instance; - doubleDecoders[i] = Decoders.FixDouble.Instance; - readNextDecoders[i] = Decoders.ReadNext1.Instance; - } - - byteDecoders[MessagePackCode.UInt8] = Decoders.UInt8Byte.Instance; - sbyteDecoders[MessagePackCode.Int8] = Decoders.Int8SByte.Instance; - int16Decoders[MessagePackCode.UInt8] = Decoders.UInt8Int16.Instance; - int16Decoders[MessagePackCode.UInt16] = Decoders.UInt16Int16.Instance; - int16Decoders[MessagePackCode.Int8] = Decoders.Int8Int16.Instance; - int16Decoders[MessagePackCode.Int16] = Decoders.Int16Int16.Instance; - int32Decoders[MessagePackCode.UInt8] = Decoders.UInt8Int32.Instance; - int32Decoders[MessagePackCode.UInt16] = Decoders.UInt16Int32.Instance; - int32Decoders[MessagePackCode.UInt32] = Decoders.UInt32Int32.Instance; - int32Decoders[MessagePackCode.Int8] = Decoders.Int8Int32.Instance; - int32Decoders[MessagePackCode.Int16] = Decoders.Int16Int32.Instance; - int32Decoders[MessagePackCode.Int32] = Decoders.Int32Int32.Instance; - int64Decoders[MessagePackCode.UInt8] = Decoders.UInt8Int64.Instance; - int64Decoders[MessagePackCode.UInt16] = Decoders.UInt16Int64.Instance; - int64Decoders[MessagePackCode.UInt32] = Decoders.UInt32Int64.Instance; - int64Decoders[MessagePackCode.UInt64] = Decoders.UInt64Int64.Instance; - int64Decoders[MessagePackCode.Int8] = Decoders.Int8Int64.Instance; - int64Decoders[MessagePackCode.Int16] = Decoders.Int16Int64.Instance; - int64Decoders[MessagePackCode.Int32] = Decoders.Int32Int64.Instance; - int64Decoders[MessagePackCode.Int64] = Decoders.Int64Int64.Instance; - uint16Decoders[MessagePackCode.UInt8] = Decoders.UInt8UInt16.Instance; - uint16Decoders[MessagePackCode.UInt16] = Decoders.UInt16UInt16.Instance; - uint32Decoders[MessagePackCode.UInt8] = Decoders.UInt8UInt32.Instance; - uint32Decoders[MessagePackCode.UInt16] = Decoders.UInt16UInt32.Instance; - uint32Decoders[MessagePackCode.UInt32] = Decoders.UInt32UInt32.Instance; - uint64Decoders[MessagePackCode.UInt8] = Decoders.UInt8UInt64.Instance; - uint64Decoders[MessagePackCode.UInt16] = Decoders.UInt16UInt64.Instance; - uint64Decoders[MessagePackCode.UInt32] = Decoders.UInt32UInt64.Instance; - uint64Decoders[MessagePackCode.UInt64] = Decoders.UInt64UInt64.Instance; - - singleDecoders[MessagePackCode.Float32] = Decoders.Float32Single.Instance; - singleDecoders[MessagePackCode.Int8] = Decoders.Int8Single.Instance; - singleDecoders[MessagePackCode.Int16] = Decoders.Int16Single.Instance; - singleDecoders[MessagePackCode.Int32] = Decoders.Int32Single.Instance; - singleDecoders[MessagePackCode.Int64] = Decoders.Int64Single.Instance; - singleDecoders[MessagePackCode.UInt8] = Decoders.UInt8Single.Instance; - singleDecoders[MessagePackCode.UInt16] = Decoders.UInt16Single.Instance; - singleDecoders[MessagePackCode.UInt32] = Decoders.UInt32Single.Instance; - singleDecoders[MessagePackCode.UInt64] = Decoders.UInt64Single.Instance; - - doubleDecoders[MessagePackCode.Float32] = Decoders.Float32Double.Instance; - doubleDecoders[MessagePackCode.Float64] = Decoders.Float64Double.Instance; - doubleDecoders[MessagePackCode.Int8] = Decoders.Int8Double.Instance; - doubleDecoders[MessagePackCode.Int16] = Decoders.Int16Double.Instance; - doubleDecoders[MessagePackCode.Int32] = Decoders.Int32Double.Instance; - doubleDecoders[MessagePackCode.Int64] = Decoders.Int64Double.Instance; - doubleDecoders[MessagePackCode.UInt8] = Decoders.UInt8Double.Instance; - doubleDecoders[MessagePackCode.UInt16] = Decoders.UInt16Double.Instance; - doubleDecoders[MessagePackCode.UInt32] = Decoders.UInt32Double.Instance; - doubleDecoders[MessagePackCode.UInt64] = Decoders.UInt64Double.Instance; - - readNextDecoders[MessagePackCode.Int8] = Decoders.ReadNext2.Instance; - readNextDecoders[MessagePackCode.Int16] = Decoders.ReadNext3.Instance; - readNextDecoders[MessagePackCode.Int32] = Decoders.ReadNext5.Instance; - readNextDecoders[MessagePackCode.Int64] = Decoders.ReadNext9.Instance; - readNextDecoders[MessagePackCode.UInt8] = Decoders.ReadNext2.Instance; - readNextDecoders[MessagePackCode.UInt16] = Decoders.ReadNext3.Instance; - readNextDecoders[MessagePackCode.UInt32] = Decoders.ReadNext5.Instance; - readNextDecoders[MessagePackCode.UInt64] = Decoders.ReadNext9.Instance; - readNextDecoders[MessagePackCode.Float32] = Decoders.ReadNext5.Instance; - readNextDecoders[MessagePackCode.Float64] = Decoders.ReadNext9.Instance; - - // Map - for (int i = MessagePackCode.MinFixMap; i <= MessagePackCode.MaxFixMap; i++) - { - mapHeaderDecoders[i] = Decoders.FixMapHeader.Instance; - readNextDecoders[i] = Decoders.ReadNext1.Instance; - } - mapHeaderDecoders[MessagePackCode.Map16] = Decoders.Map16Header.Instance; - mapHeaderDecoders[MessagePackCode.Map32] = Decoders.Map32Header.Instance; - readNextDecoders[MessagePackCode.Map16] = Decoders.ReadNextMap.Instance; - readNextDecoders[MessagePackCode.Map32] = Decoders.ReadNextMap.Instance; - - // Array - for (int i = MessagePackCode.MinFixArray; i <= MessagePackCode.MaxFixArray; i++) - { - arrayHeaderDecoders[i] = Decoders.FixArrayHeader.Instance; - readNextDecoders[i] = Decoders.ReadNext1.Instance; - } - arrayHeaderDecoders[MessagePackCode.Array16] = Decoders.Array16Header.Instance; - arrayHeaderDecoders[MessagePackCode.Array32] = Decoders.Array32Header.Instance; - readNextDecoders[MessagePackCode.Array16] = Decoders.ReadNextArray.Instance; - readNextDecoders[MessagePackCode.Array32] = Decoders.ReadNextArray.Instance; - - // Str - for (int i = MessagePackCode.MinFixStr; i <= MessagePackCode.MaxFixStr; i++) - { - stringDecoders[i] = Decoders.FixString.Instance; - stringSegmentDecoders[i] = Decoders.FixStringSegment.Instance; - readNextDecoders[i] = Decoders.ReadNextFixStr.Instance; - } - - stringDecoders[MessagePackCode.Str8] = Decoders.Str8String.Instance; - stringDecoders[MessagePackCode.Str16] = Decoders.Str16String.Instance; - stringDecoders[MessagePackCode.Str32] = Decoders.Str32String.Instance; - stringSegmentDecoders[MessagePackCode.Str8] = Decoders.Str8StringSegment.Instance; - stringSegmentDecoders[MessagePackCode.Str16] = Decoders.Str16StringSegment.Instance; - stringSegmentDecoders[MessagePackCode.Str32] = Decoders.Str32StringSegment.Instance; - readNextDecoders[MessagePackCode.Str8] = Decoders.ReadNextStr8.Instance; - readNextDecoders[MessagePackCode.Str16] = Decoders.ReadNextStr16.Instance; - readNextDecoders[MessagePackCode.Str32] = Decoders.ReadNextStr32.Instance; - - // Others - stringDecoders[MessagePackCode.Nil] = Decoders.NilString.Instance; - stringSegmentDecoders[MessagePackCode.Nil] = Decoders.NilStringSegment.Instance; - bytesDecoders[MessagePackCode.Nil] = Decoders.NilBytes.Instance; - bytesSegmentDecoders[MessagePackCode.Nil] = Decoders.NilBytesSegment.Instance; - readNextDecoders[MessagePackCode.Nil] = Decoders.ReadNext1.Instance; - - booleanDecoders[MessagePackCode.False] = Decoders.False.Instance; - booleanDecoders[MessagePackCode.True] = Decoders.True.Instance; - readNextDecoders[MessagePackCode.False] = Decoders.ReadNext1.Instance; - readNextDecoders[MessagePackCode.True] = Decoders.ReadNext1.Instance; - - bytesDecoders[MessagePackCode.Bin8] = Decoders.Bin8Bytes.Instance; - bytesDecoders[MessagePackCode.Bin16] = Decoders.Bin16Bytes.Instance; - bytesDecoders[MessagePackCode.Bin32] = Decoders.Bin32Bytes.Instance; - bytesSegmentDecoders[MessagePackCode.Bin8] = Decoders.Bin8BytesSegment.Instance; - bytesSegmentDecoders[MessagePackCode.Bin16] = Decoders.Bin16BytesSegment.Instance; - bytesSegmentDecoders[MessagePackCode.Bin32] = Decoders.Bin32BytesSegment.Instance; - readNextDecoders[MessagePackCode.Bin8] = Decoders.ReadNextBin8.Instance; - readNextDecoders[MessagePackCode.Bin16] = Decoders.ReadNextBin16.Instance; - readNextDecoders[MessagePackCode.Bin32] = Decoders.ReadNextBin32.Instance; - - // Ext - extDecoders[MessagePackCode.FixExt1] = Decoders.FixExt1.Instance; - extDecoders[MessagePackCode.FixExt2] = Decoders.FixExt2.Instance; - extDecoders[MessagePackCode.FixExt4] = Decoders.FixExt4.Instance; - extDecoders[MessagePackCode.FixExt8] = Decoders.FixExt8.Instance; - extDecoders[MessagePackCode.FixExt16] = Decoders.FixExt16.Instance; - extDecoders[MessagePackCode.Ext8] = Decoders.Ext8.Instance; - extDecoders[MessagePackCode.Ext16] = Decoders.Ext16.Instance; - extDecoders[MessagePackCode.Ext32] = Decoders.Ext32.Instance; - - extHeaderDecoders[MessagePackCode.FixExt1] = Decoders.FixExt1Header.Instance; - extHeaderDecoders[MessagePackCode.FixExt2] = Decoders.FixExt2Header.Instance; - extHeaderDecoders[MessagePackCode.FixExt4] = Decoders.FixExt4Header.Instance; - extHeaderDecoders[MessagePackCode.FixExt8] = Decoders.FixExt8Header.Instance; - extHeaderDecoders[MessagePackCode.FixExt16] = Decoders.FixExt16Header.Instance; - extHeaderDecoders[MessagePackCode.Ext8] = Decoders.Ext8Header.Instance; - extHeaderDecoders[MessagePackCode.Ext16] = Decoders.Ext16Header.Instance; - extHeaderDecoders[MessagePackCode.Ext32] = Decoders.Ext32Header.Instance; - - - readNextDecoders[MessagePackCode.FixExt1] = Decoders.ReadNext3.Instance; - readNextDecoders[MessagePackCode.FixExt2] = Decoders.ReadNext4.Instance; - readNextDecoders[MessagePackCode.FixExt4] = Decoders.ReadNext6.Instance; - readNextDecoders[MessagePackCode.FixExt8] = Decoders.ReadNext10.Instance; - readNextDecoders[MessagePackCode.FixExt16] = Decoders.ReadNext18.Instance; - readNextDecoders[MessagePackCode.Ext8] = Decoders.ReadNextExt8.Instance; - readNextDecoders[MessagePackCode.Ext16] = Decoders.ReadNextExt16.Instance; - readNextDecoders[MessagePackCode.Ext32] = Decoders.ReadNextExt32.Instance; - - // DateTime - dateTimeDecoders[MessagePackCode.FixExt4] = Decoders.FixExt4DateTime.Instance; - dateTimeDecoders[MessagePackCode.FixExt8] = Decoders.FixExt8DateTime.Instance; - dateTimeDecoders[MessagePackCode.Ext8] = Decoders.Ext8DateTime.Instance; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static void EnsureCapacity(ref byte[] bytes, int offset, int appendLength) - { - var newLength = offset + appendLength; - - // If null(most case fisrt time) fill byte. - if (bytes == null) - { - bytes = new byte[newLength]; - return; - } - - // like MemoryStream.EnsureCapacity - var current = bytes.Length; - if (newLength > current) - { - int num = newLength; - if (num < 256) - { - num = 256; - FastResize(ref bytes, num); - return; - } - - if (current == ArrayMaxSize) - { - throw new InvalidOperationException("byte[] size reached maximum size of array(0x7FFFFFC7), can not write to single byte[]. Details: https://msdn.microsoft.com/en-us/library/system.array"); - } - - var newSize = unchecked((current * 2)); - if (newSize < 0) // overflow - { - num = ArrayMaxSize; - } - else - { - if (num < newSize) - { - num = newSize; - } - } - - FastResize(ref bytes, num); - } - } - - // Buffer.BlockCopy version of Array.Resize -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static void FastResize(ref byte[] array, int newSize) - { - if (newSize < 0) throw new ArgumentOutOfRangeException("newSize"); - - byte[] array2 = array; - if (array2 == null) - { - array = new byte[newSize]; - return; - } - - if (array2.Length != newSize) - { - byte[] array3 = new byte[newSize]; - Buffer.BlockCopy(array2, 0, array3, 0, (array2.Length > newSize) ? newSize : array2.Length); - array = array3; - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static byte[] FastCloneWithResize(byte[] array, int newSize) - { - if (newSize < 0) throw new ArgumentOutOfRangeException("newSize"); - - byte[] array2 = array; - if (array2 == null) - { - array = new byte[newSize]; - return array; - } - - byte[] array3 = new byte[newSize]; - Buffer.BlockCopy(array2, 0, array3, 0, (array2.Length > newSize) ? newSize : array2.Length); - return array3; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static MessagePackType GetMessagePackType(byte[] bytes, int offset) - { - return MessagePackCode.ToMessagePackType(bytes[offset]); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int ReadNext(byte[] bytes, int offset) - { - return readNextDecoders[bytes[offset]].Read(bytes, offset); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int ReadNextBlock(byte[] bytes, int offset) - { - switch (GetMessagePackType(bytes, offset)) - { - case MessagePackType.Unknown: - case MessagePackType.Integer: - case MessagePackType.Nil: - case MessagePackType.Boolean: - case MessagePackType.Float: - case MessagePackType.String: - case MessagePackType.Binary: - case MessagePackType.Extension: - default: - return ReadNext(bytes, offset); - case MessagePackType.Array: - { - var startOffset = offset; - int readSize; - var header = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - for (int i = 0; i < header; i++) - { - offset += ReadNextBlock(bytes, offset); - } - return offset - startOffset; - } - case MessagePackType.Map: - { - var startOffset = offset; - int readSize; - var header = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); - offset += readSize; - for (int i = 0; i < header; i++) - { - offset += ReadNextBlock(bytes, offset); // read key block - offset += ReadNextBlock(bytes, offset); // read value block - } - return offset - startOffset; - } - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteNil(ref byte[] bytes, int offset) - { - EnsureCapacity(ref bytes, offset, 1); - - bytes[offset] = MessagePackCode.Nil; - return 1; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static Nil ReadNil(byte[] bytes, int offset, out int readSize) - { - if (bytes[offset] == MessagePackCode.Nil) - { - readSize = 1; - return Nil.Default; - } - else - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static bool IsNil(byte[] bytes, int offset) - { - return bytes[offset] == MessagePackCode.Nil; - } - - public static int WriteRaw(ref byte[] bytes, int offset, byte[] rawMessagePackBlock) - { - EnsureCapacity(ref bytes, offset, rawMessagePackBlock.Length); - -#if NETSTANDARD - if (UnsafeMemory.Is32Bit) - { - switch (rawMessagePackBlock.Length) - { - case 1: - UnsafeMemory32.WriteRaw1(ref bytes, offset, rawMessagePackBlock); - break; - case 2: - UnsafeMemory32.WriteRaw2(ref bytes, offset, rawMessagePackBlock); - break; - case 3: - UnsafeMemory32.WriteRaw3(ref bytes, offset, rawMessagePackBlock); - break; - case 4: - UnsafeMemory32.WriteRaw4(ref bytes, offset, rawMessagePackBlock); - break; - case 5: - UnsafeMemory32.WriteRaw5(ref bytes, offset, rawMessagePackBlock); - break; - case 6: - UnsafeMemory32.WriteRaw6(ref bytes, offset, rawMessagePackBlock); - break; - case 7: - UnsafeMemory32.WriteRaw7(ref bytes, offset, rawMessagePackBlock); - break; - case 8: - UnsafeMemory32.WriteRaw8(ref bytes, offset, rawMessagePackBlock); - break; - case 9: - UnsafeMemory32.WriteRaw9(ref bytes, offset, rawMessagePackBlock); - break; - case 10: - UnsafeMemory32.WriteRaw10(ref bytes, offset, rawMessagePackBlock); - break; - case 11: - UnsafeMemory32.WriteRaw11(ref bytes, offset, rawMessagePackBlock); - break; - case 12: - UnsafeMemory32.WriteRaw12(ref bytes, offset, rawMessagePackBlock); - break; - case 13: - UnsafeMemory32.WriteRaw13(ref bytes, offset, rawMessagePackBlock); - break; - case 14: - UnsafeMemory32.WriteRaw14(ref bytes, offset, rawMessagePackBlock); - break; - case 15: - UnsafeMemory32.WriteRaw15(ref bytes, offset, rawMessagePackBlock); - break; - case 16: - UnsafeMemory32.WriteRaw16(ref bytes, offset, rawMessagePackBlock); - break; - case 17: - UnsafeMemory32.WriteRaw17(ref bytes, offset, rawMessagePackBlock); - break; - case 18: - UnsafeMemory32.WriteRaw18(ref bytes, offset, rawMessagePackBlock); - break; - case 19: - UnsafeMemory32.WriteRaw19(ref bytes, offset, rawMessagePackBlock); - break; - case 20: - UnsafeMemory32.WriteRaw20(ref bytes, offset, rawMessagePackBlock); - break; - case 21: - UnsafeMemory32.WriteRaw21(ref bytes, offset, rawMessagePackBlock); - break; - case 22: - UnsafeMemory32.WriteRaw22(ref bytes, offset, rawMessagePackBlock); - break; - case 23: - UnsafeMemory32.WriteRaw23(ref bytes, offset, rawMessagePackBlock); - break; - case 24: - UnsafeMemory32.WriteRaw24(ref bytes, offset, rawMessagePackBlock); - break; - case 25: - UnsafeMemory32.WriteRaw25(ref bytes, offset, rawMessagePackBlock); - break; - case 26: - UnsafeMemory32.WriteRaw26(ref bytes, offset, rawMessagePackBlock); - break; - case 27: - UnsafeMemory32.WriteRaw27(ref bytes, offset, rawMessagePackBlock); - break; - case 28: - UnsafeMemory32.WriteRaw28(ref bytes, offset, rawMessagePackBlock); - break; - case 29: - UnsafeMemory32.WriteRaw29(ref bytes, offset, rawMessagePackBlock); - break; - case 30: - UnsafeMemory32.WriteRaw30(ref bytes, offset, rawMessagePackBlock); - break; - case 31: - UnsafeMemory32.WriteRaw31(ref bytes, offset, rawMessagePackBlock); - break; - default: - Buffer.BlockCopy(rawMessagePackBlock, 0, bytes, offset, rawMessagePackBlock.Length); - break; - } - } - else - { - switch (rawMessagePackBlock.Length) - { - case 1: - UnsafeMemory64.WriteRaw1(ref bytes, offset, rawMessagePackBlock); - break; - case 2: - UnsafeMemory64.WriteRaw2(ref bytes, offset, rawMessagePackBlock); - break; - case 3: - UnsafeMemory64.WriteRaw3(ref bytes, offset, rawMessagePackBlock); - break; - case 4: - UnsafeMemory64.WriteRaw4(ref bytes, offset, rawMessagePackBlock); - break; - case 5: - UnsafeMemory64.WriteRaw5(ref bytes, offset, rawMessagePackBlock); - break; - case 6: - UnsafeMemory64.WriteRaw6(ref bytes, offset, rawMessagePackBlock); - break; - case 7: - UnsafeMemory64.WriteRaw7(ref bytes, offset, rawMessagePackBlock); - break; - case 8: - UnsafeMemory64.WriteRaw8(ref bytes, offset, rawMessagePackBlock); - break; - case 9: - UnsafeMemory64.WriteRaw9(ref bytes, offset, rawMessagePackBlock); - break; - case 10: - UnsafeMemory64.WriteRaw10(ref bytes, offset, rawMessagePackBlock); - break; - case 11: - UnsafeMemory64.WriteRaw11(ref bytes, offset, rawMessagePackBlock); - break; - case 12: - UnsafeMemory64.WriteRaw12(ref bytes, offset, rawMessagePackBlock); - break; - case 13: - UnsafeMemory64.WriteRaw13(ref bytes, offset, rawMessagePackBlock); - break; - case 14: - UnsafeMemory64.WriteRaw14(ref bytes, offset, rawMessagePackBlock); - break; - case 15: - UnsafeMemory64.WriteRaw15(ref bytes, offset, rawMessagePackBlock); - break; - case 16: - UnsafeMemory64.WriteRaw16(ref bytes, offset, rawMessagePackBlock); - break; - case 17: - UnsafeMemory64.WriteRaw17(ref bytes, offset, rawMessagePackBlock); - break; - case 18: - UnsafeMemory64.WriteRaw18(ref bytes, offset, rawMessagePackBlock); - break; - case 19: - UnsafeMemory64.WriteRaw19(ref bytes, offset, rawMessagePackBlock); - break; - case 20: - UnsafeMemory64.WriteRaw20(ref bytes, offset, rawMessagePackBlock); - break; - case 21: - UnsafeMemory64.WriteRaw21(ref bytes, offset, rawMessagePackBlock); - break; - case 22: - UnsafeMemory64.WriteRaw22(ref bytes, offset, rawMessagePackBlock); - break; - case 23: - UnsafeMemory64.WriteRaw23(ref bytes, offset, rawMessagePackBlock); - break; - case 24: - UnsafeMemory64.WriteRaw24(ref bytes, offset, rawMessagePackBlock); - break; - case 25: - UnsafeMemory64.WriteRaw25(ref bytes, offset, rawMessagePackBlock); - break; - case 26: - UnsafeMemory64.WriteRaw26(ref bytes, offset, rawMessagePackBlock); - break; - case 27: - UnsafeMemory64.WriteRaw27(ref bytes, offset, rawMessagePackBlock); - break; - case 28: - UnsafeMemory64.WriteRaw28(ref bytes, offset, rawMessagePackBlock); - break; - case 29: - UnsafeMemory64.WriteRaw29(ref bytes, offset, rawMessagePackBlock); - break; - case 30: - UnsafeMemory64.WriteRaw30(ref bytes, offset, rawMessagePackBlock); - break; - case 31: - UnsafeMemory64.WriteRaw31(ref bytes, offset, rawMessagePackBlock); - break; - default: - Buffer.BlockCopy(rawMessagePackBlock, 0, bytes, offset, rawMessagePackBlock.Length); - break; - } - } -#else - Buffer.BlockCopy(rawMessagePackBlock, 0, bytes, offset, rawMessagePackBlock.Length); -#endif - return rawMessagePackBlock.Length; - } - - /// - /// Unsafe. If value is guranteed 0 ~ MessagePackRange.MaxFixMapCount(15), can use this method. - /// - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteFixedMapHeaderUnsafe(ref byte[] bytes, int offset, int count) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = (byte)(MessagePackCode.MinFixMap | count); - return 1; - } - - /// - /// Write map count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteMapHeader(ref byte[] bytes, int offset, int count) - { - checked - { - return WriteMapHeader(ref bytes, offset, (uint)count); - } - } - - /// - /// Write map count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteMapHeader(ref byte[] bytes, int offset, uint count) - { - if (count <= MessagePackRange.MaxFixMapCount) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = (byte)(MessagePackCode.MinFixMap | count); - return 1; - } - else if (count <= ushort.MaxValue) - { - EnsureCapacity(ref bytes, offset, 3); - unchecked - { - bytes[offset] = MessagePackCode.Map16; - bytes[offset + 1] = (byte)(count >> 8); - bytes[offset + 2] = (byte)(count); - } - return 3; - } - else - { - EnsureCapacity(ref bytes, offset, 5); - unchecked - { - bytes[offset] = MessagePackCode.Map32; - bytes[offset + 1] = (byte)(count >> 24); - bytes[offset + 2] = (byte)(count >> 16); - bytes[offset + 3] = (byte)(count >> 8); - bytes[offset + 4] = (byte)(count); - } - return 5; - } - } - - /// - /// Write map format header, always use map32 format(length is fixed, 5). - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteMapHeaderForceMap32Block(ref byte[] bytes, int offset, uint count) - { - EnsureCapacity(ref bytes, offset, 5); - unchecked - { - bytes[offset] = MessagePackCode.Map32; - bytes[offset + 1] = (byte)(count >> 24); - bytes[offset + 2] = (byte)(count >> 16); - bytes[offset + 3] = (byte)(count >> 8); - bytes[offset + 4] = (byte)(count); - } - return 5; - } - - /// - /// Return map count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int ReadMapHeader(byte[] bytes, int offset, out int readSize) - { - checked - { - return (int)mapHeaderDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - } - - /// - /// Return map count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static uint ReadMapHeaderRaw(byte[] bytes, int offset, out int readSize) - { - return mapHeaderDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int GetArrayHeaderLength(int count) - { - if (count <= MessagePackRange.MaxFixArrayCount) - { - return 1; - } - else if (count <= ushort.MaxValue) - { - return 3; - } - else - { - return 5; - } - } - - /// - /// Unsafe. If value is guranteed 0 ~ MessagePackRange.MaxFixArrayCount(15), can use this method. - /// - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteFixedArrayHeaderUnsafe(ref byte[] bytes, int offset, int count) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = (byte)(MessagePackCode.MinFixArray | count); - return 1; - } - - /// - /// Write array count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteArrayHeader(ref byte[] bytes, int offset, int count) - { - checked - { - return WriteArrayHeader(ref bytes, offset, (uint)count); - } - } - - /// - /// Write array count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteArrayHeader(ref byte[] bytes, int offset, uint count) - { - if (count <= MessagePackRange.MaxFixArrayCount) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = (byte)(MessagePackCode.MinFixArray | count); - return 1; - } - else if (count <= ushort.MaxValue) - { - EnsureCapacity(ref bytes, offset, 3); - unchecked - { - bytes[offset] = MessagePackCode.Array16; - bytes[offset + 1] = (byte)(count >> 8); - bytes[offset + 2] = (byte)(count); - } - return 3; - } - else - { - EnsureCapacity(ref bytes, offset, 5); - unchecked - { - bytes[offset] = MessagePackCode.Array32; - bytes[offset + 1] = (byte)(count >> 24); - bytes[offset + 2] = (byte)(count >> 16); - bytes[offset + 3] = (byte)(count >> 8); - bytes[offset + 4] = (byte)(count); - } - return 5; - } - } - - /// - /// Write array format header, always use array32 format(length is fixed, 5). - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteArrayHeaderForceArray32Block(ref byte[] bytes, int offset, uint count) - { - EnsureCapacity(ref bytes, offset, 5); - unchecked - { - bytes[offset] = MessagePackCode.Array32; - bytes[offset + 1] = (byte)(count >> 24); - bytes[offset + 2] = (byte)(count >> 16); - bytes[offset + 3] = (byte)(count >> 8); - bytes[offset + 4] = (byte)(count); - } - return 5; - } - - /// - /// Return array count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int ReadArrayHeader(byte[] bytes, int offset, out int readSize) - { - checked - { - return (int)arrayHeaderDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - } - - /// - /// Return array count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static uint ReadArrayHeaderRaw(byte[] bytes, int offset, out int readSize) - { - return arrayHeaderDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteBoolean(ref byte[] bytes, int offset, bool value) - { - EnsureCapacity(ref bytes, offset, 1); - - bytes[offset] = (value ? MessagePackCode.True : MessagePackCode.False); - return 1; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static bool ReadBoolean(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return booleanDecoders[bytes[offset]].Read(); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteByte(ref byte[] bytes, int offset, byte value) - { - if (value <= MessagePackCode.MaxFixInt) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = value; - return 1; - } - else - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.UInt8; - bytes[offset + 1] = value; - return 2; - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteByteForceByteBlock(ref byte[] bytes, int offset, byte value) - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.UInt8; - bytes[offset + 1] = value; - return 2; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static byte ReadByte(byte[] bytes, int offset, out int readSize) - { - return byteDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteBytes(ref byte[] bytes, int offset, byte[] value) - { - if (value == null) - { - return WriteNil(ref bytes, offset); - } - else - { - return WriteBytes(ref bytes, offset, value, 0, value.Length); - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteBytes(ref byte[] dest, int dstOffset, byte[] src, int srcOffset, int count) - { - if (src == null) - { - return WriteNil(ref dest, dstOffset); - } - - if (count <= byte.MaxValue) - { - var size = count + 2; - EnsureCapacity(ref dest, dstOffset, size); - - dest[dstOffset] = MessagePackCode.Bin8; - dest[dstOffset + 1] = (byte)count; - - Buffer.BlockCopy(src, srcOffset, dest, dstOffset + 2, count); - return size; - } - else if (count <= UInt16.MaxValue) - { - var size = count + 3; - EnsureCapacity(ref dest, dstOffset, size); - - unchecked - { - dest[dstOffset] = MessagePackCode.Bin16; - dest[dstOffset + 1] = (byte)(count >> 8); - dest[dstOffset + 2] = (byte)(count); - } - - Buffer.BlockCopy(src, srcOffset, dest, dstOffset + 3, count); - return size; - } - else - { - var size = count + 5; - EnsureCapacity(ref dest, dstOffset, size); - - unchecked - { - dest[dstOffset] = MessagePackCode.Bin32; - dest[dstOffset + 1] = (byte)(count >> 24); - dest[dstOffset + 2] = (byte)(count >> 16); - dest[dstOffset + 3] = (byte)(count >> 8); - dest[dstOffset + 4] = (byte)(count); - } - - Buffer.BlockCopy(src, srcOffset, dest, dstOffset + 5, count); - return size; - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static byte[] ReadBytes(byte[] bytes, int offset, out int readSize) - { - return bytesDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static ArraySegment ReadBytesSegment(byte[] bytes, int offset, out int readSize) - { - return bytesSegmentDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteSByte(ref byte[] bytes, int offset, sbyte value) - { - if (value < MessagePackRange.MinFixNegativeInt) - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.Int8; - bytes[offset + 1] = unchecked((byte)(value)); - return 2; - } - else - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = unchecked((byte)value); - return 1; - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteSByteForceSByteBlock(ref byte[] bytes, int offset, sbyte value) - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.Int8; - bytes[offset + 1] = unchecked((byte)(value)); - return 2; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static sbyte ReadSByte(byte[] bytes, int offset, out int readSize) - { - return sbyteDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteSingle(ref byte[] bytes, int offset, float value) - { - EnsureCapacity(ref bytes, offset, 5); - - bytes[offset] = MessagePackCode.Float32; - - var num = new Float32Bits(value); - if (BitConverter.IsLittleEndian) - { - bytes[offset + 1] = num.Byte3; - bytes[offset + 2] = num.Byte2; - bytes[offset + 3] = num.Byte1; - bytes[offset + 4] = num.Byte0; - } - else - { - bytes[offset + 1] = num.Byte0; - bytes[offset + 2] = num.Byte1; - bytes[offset + 3] = num.Byte2; - bytes[offset + 4] = num.Byte3; - } - - return 5; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static float ReadSingle(byte[] bytes, int offset, out int readSize) - { - return singleDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteDouble(ref byte[] bytes, int offset, double value) - { - EnsureCapacity(ref bytes, offset, 9); - - bytes[offset] = MessagePackCode.Float64; - - var num = new Float64Bits(value); - if (BitConverter.IsLittleEndian) - { - bytes[offset + 1] = num.Byte7; - bytes[offset + 2] = num.Byte6; - bytes[offset + 3] = num.Byte5; - bytes[offset + 4] = num.Byte4; - bytes[offset + 5] = num.Byte3; - bytes[offset + 6] = num.Byte2; - bytes[offset + 7] = num.Byte1; - bytes[offset + 8] = num.Byte0; - } - else - { - bytes[offset + 1] = num.Byte0; - bytes[offset + 2] = num.Byte1; - bytes[offset + 3] = num.Byte2; - bytes[offset + 4] = num.Byte3; - bytes[offset + 5] = num.Byte4; - bytes[offset + 6] = num.Byte5; - bytes[offset + 7] = num.Byte6; - bytes[offset + 8] = num.Byte7; - } - - return 9; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static double ReadDouble(byte[] bytes, int offset, out int readSize) - { - return doubleDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteInt16(ref byte[] bytes, int offset, short value) - { - if (value >= 0) - { - // positive int(use uint) - if (value <= MessagePackRange.MaxFixPositiveInt) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = unchecked((byte)value); - return 1; - } - else if (value <= byte.MaxValue) - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.UInt8; - bytes[offset + 1] = unchecked((byte)value); - return 2; - } - else - { - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.UInt16; - bytes[offset + 1] = unchecked((byte)(value >> 8)); - bytes[offset + 2] = unchecked((byte)value); - return 3; - } - } - else - { - // negative int(use int) - if (MessagePackRange.MinFixNegativeInt <= value) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = unchecked((byte)value); - return 1; - } - else if (sbyte.MinValue <= value) - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.Int8; - bytes[offset + 1] = unchecked((byte)value); - return 2; - } - else - { - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.Int16; - bytes[offset + 1] = unchecked((byte)(value >> 8)); - bytes[offset + 2] = unchecked((byte)value); - return 3; - } - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteInt16ForceInt16Block(ref byte[] bytes, int offset, short value) - { - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.Int16; - bytes[offset + 1] = unchecked((byte)(value >> 8)); - bytes[offset + 2] = unchecked((byte)value); - return 3; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static short ReadInt16(byte[] bytes, int offset, out int readSize) - { - return int16Decoders[bytes[offset]].Read(bytes, offset, out readSize); - } - - /// - /// Unsafe. If value is guranteed 0 ~ MessagePackCode.MaxFixInt(127), can use this method. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WritePositiveFixedIntUnsafe(ref byte[] bytes, int offset, int value) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = (byte)value; - return 1; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteInt32(ref byte[] bytes, int offset, int value) - { - if (value >= 0) - { - // positive int(use uint) - if (value <= MessagePackRange.MaxFixPositiveInt) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = unchecked((byte)value); - return 1; - } - else if (value <= byte.MaxValue) - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.UInt8; - bytes[offset + 1] = unchecked((byte)value); - return 2; - } - else if (value <= ushort.MaxValue) - { - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.UInt16; - bytes[offset + 1] = unchecked((byte)(value >> 8)); - bytes[offset + 2] = unchecked((byte)value); - return 3; - } - else - { - EnsureCapacity(ref bytes, offset, 5); - bytes[offset] = MessagePackCode.UInt32; - bytes[offset + 1] = unchecked((byte)(value >> 24)); - bytes[offset + 2] = unchecked((byte)(value >> 16)); - bytes[offset + 3] = unchecked((byte)(value >> 8)); - bytes[offset + 4] = unchecked((byte)value); - return 5; - } - } - else - { - // negative int(use int) - if (MessagePackRange.MinFixNegativeInt <= value) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = unchecked((byte)value); - return 1; - } - else if (sbyte.MinValue <= value) - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.Int8; - bytes[offset + 1] = unchecked((byte)value); - return 2; - } - else if (short.MinValue <= value) - { - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.Int16; - bytes[offset + 1] = unchecked((byte)(value >> 8)); - bytes[offset + 2] = unchecked((byte)value); - return 3; - } - else - { - EnsureCapacity(ref bytes, offset, 5); - bytes[offset] = MessagePackCode.Int32; - bytes[offset + 1] = unchecked((byte)(value >> 24)); - bytes[offset + 2] = unchecked((byte)(value >> 16)); - bytes[offset + 3] = unchecked((byte)(value >> 8)); - bytes[offset + 4] = unchecked((byte)value); - return 5; - } - } - } - - /// - /// Acquire static message block(always 5 bytes). - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteInt32ForceInt32Block(ref byte[] bytes, int offset, int value) - { - EnsureCapacity(ref bytes, offset, 5); - bytes[offset] = MessagePackCode.Int32; - bytes[offset + 1] = unchecked((byte)(value >> 24)); - bytes[offset + 2] = unchecked((byte)(value >> 16)); - bytes[offset + 3] = unchecked((byte)(value >> 8)); - bytes[offset + 4] = unchecked((byte)value); - return 5; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int ReadInt32(byte[] bytes, int offset, out int readSize) - { - return int32Decoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteInt64(ref byte[] bytes, int offset, long value) - { - if (value >= 0) - { - // positive int(use uint) - if (value <= MessagePackRange.MaxFixPositiveInt) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = unchecked((byte)value); - return 1; - } - else if (value <= byte.MaxValue) - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.UInt8; - bytes[offset + 1] = unchecked((byte)value); - return 2; - } - else if (value <= ushort.MaxValue) - { - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.UInt16; - bytes[offset + 1] = unchecked((byte)(value >> 8)); - bytes[offset + 2] = unchecked((byte)value); - return 3; - } - else if (value <= uint.MaxValue) - { - EnsureCapacity(ref bytes, offset, 5); - bytes[offset] = MessagePackCode.UInt32; - bytes[offset + 1] = unchecked((byte)(value >> 24)); - bytes[offset + 2] = unchecked((byte)(value >> 16)); - bytes[offset + 3] = unchecked((byte)(value >> 8)); - bytes[offset + 4] = unchecked((byte)value); - return 5; - } - else - { - EnsureCapacity(ref bytes, offset, 9); - bytes[offset] = MessagePackCode.UInt64; - bytes[offset + 1] = unchecked((byte)(value >> 56)); - bytes[offset + 2] = unchecked((byte)(value >> 48)); - bytes[offset + 3] = unchecked((byte)(value >> 40)); - bytes[offset + 4] = unchecked((byte)(value >> 32)); - bytes[offset + 5] = unchecked((byte)(value >> 24)); - bytes[offset + 6] = unchecked((byte)(value >> 16)); - bytes[offset + 7] = unchecked((byte)(value >> 8)); - bytes[offset + 8] = unchecked((byte)value); - return 9; - } - } - else - { - // negative int(use int) - if (MessagePackRange.MinFixNegativeInt <= value) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = unchecked((byte)value); - return 1; - } - else if (sbyte.MinValue <= value) - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.Int8; - bytes[offset + 1] = unchecked((byte)value); - return 2; - } - else if (short.MinValue <= value) - { - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.Int16; - bytes[offset + 1] = unchecked((byte)(value >> 8)); - bytes[offset + 2] = unchecked((byte)value); - return 3; - } - else if (int.MinValue <= value) - { - EnsureCapacity(ref bytes, offset, 5); - bytes[offset] = MessagePackCode.Int32; - bytes[offset + 1] = unchecked((byte)(value >> 24)); - bytes[offset + 2] = unchecked((byte)(value >> 16)); - bytes[offset + 3] = unchecked((byte)(value >> 8)); - bytes[offset + 4] = unchecked((byte)value); - return 5; - } - else - { - EnsureCapacity(ref bytes, offset, 9); - bytes[offset] = MessagePackCode.Int64; - bytes[offset + 1] = unchecked((byte)(value >> 56)); - bytes[offset + 2] = unchecked((byte)(value >> 48)); - bytes[offset + 3] = unchecked((byte)(value >> 40)); - bytes[offset + 4] = unchecked((byte)(value >> 32)); - bytes[offset + 5] = unchecked((byte)(value >> 24)); - bytes[offset + 6] = unchecked((byte)(value >> 16)); - bytes[offset + 7] = unchecked((byte)(value >> 8)); - bytes[offset + 8] = unchecked((byte)value); - return 9; - } - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteInt64ForceInt64Block(ref byte[] bytes, int offset, long value) - { - EnsureCapacity(ref bytes, offset, 9); - bytes[offset] = MessagePackCode.Int64; - bytes[offset + 1] = unchecked((byte)(value >> 56)); - bytes[offset + 2] = unchecked((byte)(value >> 48)); - bytes[offset + 3] = unchecked((byte)(value >> 40)); - bytes[offset + 4] = unchecked((byte)(value >> 32)); - bytes[offset + 5] = unchecked((byte)(value >> 24)); - bytes[offset + 6] = unchecked((byte)(value >> 16)); - bytes[offset + 7] = unchecked((byte)(value >> 8)); - bytes[offset + 8] = unchecked((byte)value); - return 9; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static long ReadInt64(byte[] bytes, int offset, out int readSize) - { - return int64Decoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteUInt16(ref byte[] bytes, int offset, ushort value) - { - if (value <= MessagePackRange.MaxFixPositiveInt) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = unchecked((byte)value); - return 1; - } - else if (value <= byte.MaxValue) - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.UInt8; - bytes[offset + 1] = unchecked((byte)value); - return 2; - } - else - { - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.UInt16; - bytes[offset + 1] = unchecked((byte)(value >> 8)); - bytes[offset + 2] = unchecked((byte)value); - return 3; - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteUInt16ForceUInt16Block(ref byte[] bytes, int offset, ushort value) - { - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.UInt16; - bytes[offset + 1] = unchecked((byte)(value >> 8)); - bytes[offset + 2] = unchecked((byte)value); - return 3; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static ushort ReadUInt16(byte[] bytes, int offset, out int readSize) - { - return uint16Decoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteUInt32(ref byte[] bytes, int offset, uint value) - { - if (value <= MessagePackRange.MaxFixPositiveInt) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = unchecked((byte)value); - return 1; - } - else if (value <= byte.MaxValue) - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.UInt8; - bytes[offset + 1] = unchecked((byte)value); - return 2; - } - else if (value <= ushort.MaxValue) - { - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.UInt16; - bytes[offset + 1] = unchecked((byte)(value >> 8)); - bytes[offset + 2] = unchecked((byte)value); - return 3; - } - else - { - EnsureCapacity(ref bytes, offset, 5); - bytes[offset] = MessagePackCode.UInt32; - bytes[offset + 1] = unchecked((byte)(value >> 24)); - bytes[offset + 2] = unchecked((byte)(value >> 16)); - bytes[offset + 3] = unchecked((byte)(value >> 8)); - bytes[offset + 4] = unchecked((byte)value); - return 5; - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteUInt32ForceUInt32Block(ref byte[] bytes, int offset, uint value) - { - EnsureCapacity(ref bytes, offset, 5); - bytes[offset] = MessagePackCode.UInt32; - bytes[offset + 1] = unchecked((byte)(value >> 24)); - bytes[offset + 2] = unchecked((byte)(value >> 16)); - bytes[offset + 3] = unchecked((byte)(value >> 8)); - bytes[offset + 4] = unchecked((byte)value); - return 5; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static uint ReadUInt32(byte[] bytes, int offset, out int readSize) - { - return uint32Decoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteUInt64(ref byte[] bytes, int offset, ulong value) - { - if (value <= MessagePackRange.MaxFixPositiveInt) - { - EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = unchecked((byte)value); - return 1; - } - else if (value <= byte.MaxValue) - { - EnsureCapacity(ref bytes, offset, 2); - bytes[offset] = MessagePackCode.UInt8; - bytes[offset + 1] = unchecked((byte)value); - return 2; - } - else if (value <= ushort.MaxValue) - { - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.UInt16; - bytes[offset + 1] = unchecked((byte)(value >> 8)); - bytes[offset + 2] = unchecked((byte)value); - return 3; - } - else if (value <= uint.MaxValue) - { - EnsureCapacity(ref bytes, offset, 5); - bytes[offset] = MessagePackCode.UInt32; - bytes[offset + 1] = unchecked((byte)(value >> 24)); - bytes[offset + 2] = unchecked((byte)(value >> 16)); - bytes[offset + 3] = unchecked((byte)(value >> 8)); - bytes[offset + 4] = unchecked((byte)value); - return 5; - } - else - { - EnsureCapacity(ref bytes, offset, 9); - bytes[offset] = MessagePackCode.UInt64; - bytes[offset + 1] = unchecked((byte)(value >> 56)); - bytes[offset + 2] = unchecked((byte)(value >> 48)); - bytes[offset + 3] = unchecked((byte)(value >> 40)); - bytes[offset + 4] = unchecked((byte)(value >> 32)); - bytes[offset + 5] = unchecked((byte)(value >> 24)); - bytes[offset + 6] = unchecked((byte)(value >> 16)); - bytes[offset + 7] = unchecked((byte)(value >> 8)); - bytes[offset + 8] = unchecked((byte)value); - return 9; - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteUInt64ForceUInt64Block(ref byte[] bytes, int offset, ulong value) - { - EnsureCapacity(ref bytes, offset, 9); - bytes[offset] = MessagePackCode.UInt64; - bytes[offset + 1] = unchecked((byte)(value >> 56)); - bytes[offset + 2] = unchecked((byte)(value >> 48)); - bytes[offset + 3] = unchecked((byte)(value >> 40)); - bytes[offset + 4] = unchecked((byte)(value >> 32)); - bytes[offset + 5] = unchecked((byte)(value >> 24)); - bytes[offset + 6] = unchecked((byte)(value >> 16)); - bytes[offset + 7] = unchecked((byte)(value >> 8)); - bytes[offset + 8] = unchecked((byte)value); - return 9; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static ulong ReadUInt64(byte[] bytes, int offset, out int readSize) - { - return uint64Decoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteChar(ref byte[] bytes, int offset, char value) - { - return WriteUInt16(ref bytes, offset, (ushort)value); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static char ReadChar(byte[] bytes, int offset, out int readSize) - { - return (char)ReadUInt16(bytes, offset, out readSize); - } - - /// - /// Unsafe. If value is guranteed length is 0 ~ 31, can use this method. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteFixedStringUnsafe(ref byte[] bytes, int offset, string value, int byteCount) - { - EnsureCapacity(ref bytes, offset, byteCount + 1); - bytes[offset] = (byte)(MessagePackCode.MinFixStr | byteCount); - StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, offset + 1); - - return byteCount + 1; - } - - /// - /// Unsafe. If pre-calculated byteCount of target string, can use this method. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteStringUnsafe(ref byte[] bytes, int offset, string value, int byteCount) - { - if (byteCount <= MessagePackRange.MaxFixStringLength) - { - EnsureCapacity(ref bytes, offset, byteCount + 1); - bytes[offset] = (byte)(MessagePackCode.MinFixStr | byteCount); - StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, offset + 1); - return byteCount + 1; - } - else if (byteCount <= byte.MaxValue) - { - EnsureCapacity(ref bytes, offset, byteCount + 2); - bytes[offset] = MessagePackCode.Str8; - bytes[offset + 1] = unchecked((byte)byteCount); - StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, offset + 2); - return byteCount + 2; - } - else if (byteCount <= ushort.MaxValue) - { - EnsureCapacity(ref bytes, offset, byteCount + 3); - bytes[offset] = MessagePackCode.Str16; - bytes[offset + 1] = unchecked((byte)(byteCount >> 8)); - bytes[offset + 2] = unchecked((byte)byteCount); - StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, offset + 3); - return byteCount + 3; - } - else - { - EnsureCapacity(ref bytes, offset, byteCount + 5); - bytes[offset] = MessagePackCode.Str32; - bytes[offset + 1] = unchecked((byte)(byteCount >> 24)); - bytes[offset + 2] = unchecked((byte)(byteCount >> 16)); - bytes[offset + 3] = unchecked((byte)(byteCount >> 8)); - bytes[offset + 4] = unchecked((byte)byteCount); - StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, offset + 5); - return byteCount + 5; - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteStringBytes(ref byte[] bytes, int offset, byte[] utf8stringBytes) - { - var byteCount = utf8stringBytes.Length; - if (byteCount <= MessagePackRange.MaxFixStringLength) - { - EnsureCapacity(ref bytes, offset, byteCount + 1); - bytes[offset] = (byte)(MessagePackCode.MinFixStr | byteCount); - Buffer.BlockCopy(utf8stringBytes, 0, bytes, offset + 1, byteCount); - return byteCount + 1; - } - else if (byteCount <= byte.MaxValue) - { - EnsureCapacity(ref bytes, offset, byteCount + 2); - bytes[offset] = MessagePackCode.Str8; - bytes[offset + 1] = unchecked((byte)byteCount); - Buffer.BlockCopy(utf8stringBytes, 0, bytes, offset + 2, byteCount); - return byteCount + 2; - } - else if (byteCount <= ushort.MaxValue) - { - EnsureCapacity(ref bytes, offset, byteCount + 3); - bytes[offset] = MessagePackCode.Str16; - bytes[offset + 1] = unchecked((byte)(byteCount >> 8)); - bytes[offset + 2] = unchecked((byte)byteCount); - Buffer.BlockCopy(utf8stringBytes, 0, bytes, offset + 3, byteCount); - return byteCount + 3; - } - else - { - EnsureCapacity(ref bytes, offset, byteCount + 5); - bytes[offset] = MessagePackCode.Str32; - bytes[offset + 1] = unchecked((byte)(byteCount >> 24)); - bytes[offset + 2] = unchecked((byte)(byteCount >> 16)); - bytes[offset + 3] = unchecked((byte)(byteCount >> 8)); - bytes[offset + 4] = unchecked((byte)byteCount); - Buffer.BlockCopy(utf8stringBytes, 0, bytes, offset + 5, byteCount); - return byteCount + 5; - } - } - - public static byte[] GetEncodedStringBytes(string value) - { - var byteCount = StringEncoding.UTF8.GetByteCount(value); - if (byteCount <= MessagePackRange.MaxFixStringLength) - { - var bytes = new byte[byteCount + 1]; - bytes[0] = (byte)(MessagePackCode.MinFixStr | byteCount); - StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, 1); - return bytes; - } - else if (byteCount <= byte.MaxValue) - { - var bytes = new byte[byteCount + 2]; - bytes[0] = MessagePackCode.Str8; - bytes[1] = unchecked((byte)byteCount); - StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, 2); - return bytes; - } - else if (byteCount <= ushort.MaxValue) - { - var bytes = new byte[byteCount + 3]; - bytes[0] = MessagePackCode.Str16; - bytes[1] = unchecked((byte)(byteCount >> 8)); - bytes[2] = unchecked((byte)byteCount); - StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, 3); - return bytes; - } - else - { - var bytes = new byte[byteCount + 5]; - bytes[0] = MessagePackCode.Str32; - bytes[1] = unchecked((byte)(byteCount >> 24)); - bytes[2] = unchecked((byte)(byteCount >> 16)); - bytes[3] = unchecked((byte)(byteCount >> 8)); - bytes[4] = unchecked((byte)byteCount); - StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, 5); - return bytes; - } - } - - public static int WriteString(ref byte[] bytes, int offset, string value) - { - if (value == null) return WriteNil(ref bytes, offset); - - // MaxByteCount -> WritePrefix -> GetBytes has some overheads of `MaxByteCount` - // solves heuristic length check - - // ensure buffer by MaxByteCount(faster than GetByteCount) - MessagePackBinary.EnsureCapacity(ref bytes, offset, StringEncoding.UTF8.GetMaxByteCount(value.Length) + 5); - - int useOffset; - if (value.Length <= MessagePackRange.MaxFixStringLength) - { - useOffset = 1; - } - else if (value.Length <= byte.MaxValue) - { - useOffset = 2; - } - else if (value.Length <= ushort.MaxValue) - { - useOffset = 3; - } - else - { - useOffset = 5; - } - - // skip length area - var writeBeginOffset = offset + useOffset; - var byteCount = StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, writeBeginOffset); - - // move body and write prefix - if (byteCount <= MessagePackRange.MaxFixStringLength) - { - if (useOffset != 1) - { - Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 1, byteCount); - } - bytes[offset] = (byte)(MessagePackCode.MinFixStr | byteCount); - return byteCount + 1; - } - else if (byteCount <= byte.MaxValue) - { - if (useOffset != 2) - { - Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 2, byteCount); - } - - bytes[offset] = MessagePackCode.Str8; - bytes[offset + 1] = unchecked((byte)byteCount); - return byteCount + 2; - } - else if (byteCount <= ushort.MaxValue) - { - if (useOffset != 3) - { - Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 3, byteCount); - } - - bytes[offset] = MessagePackCode.Str16; - bytes[offset + 1] = unchecked((byte)(byteCount >> 8)); - bytes[offset + 2] = unchecked((byte)byteCount); - return byteCount + 3; - } - else - { - if (useOffset != 5) - { - Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 5, byteCount); - } - - bytes[offset] = MessagePackCode.Str32; - bytes[offset + 1] = unchecked((byte)(byteCount >> 24)); - bytes[offset + 2] = unchecked((byte)(byteCount >> 16)); - bytes[offset + 3] = unchecked((byte)(byteCount >> 8)); - bytes[offset + 4] = unchecked((byte)byteCount); - return byteCount + 5; - } - } - - public static int WriteStringForceStr32Block(ref byte[] bytes, int offset, string value) - { - if (value == null) return WriteNil(ref bytes, offset); - - MessagePackBinary.EnsureCapacity(ref bytes, offset, StringEncoding.UTF8.GetMaxByteCount(value.Length) + 5); - - var byteCount = StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, offset + 5); - - bytes[offset] = MessagePackCode.Str32; - bytes[offset + 1] = unchecked((byte)(byteCount >> 24)); - bytes[offset + 2] = unchecked((byte)(byteCount >> 16)); - bytes[offset + 3] = unchecked((byte)(byteCount >> 8)); - bytes[offset + 4] = unchecked((byte)byteCount); - return byteCount + 5; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static string ReadString(byte[] bytes, int offset, out int readSize) - { - return stringDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static ArraySegment ReadStringSegment(byte[] bytes, int offset, out int readSize) - { - return stringSegmentDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteExtensionFormatHeader(ref byte[] bytes, int offset, sbyte typeCode, int dataLength) - { - switch (dataLength) - { - case 1: - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.FixExt1; - bytes[offset + 1] = unchecked((byte)typeCode); - return 2; - case 2: - EnsureCapacity(ref bytes, offset, 4); - bytes[offset] = MessagePackCode.FixExt2; - bytes[offset + 1] = unchecked((byte)typeCode); - return 2; - case 4: - EnsureCapacity(ref bytes, offset, 6); - bytes[offset] = MessagePackCode.FixExt4; - bytes[offset + 1] = unchecked((byte)typeCode); - return 2; - case 8: - EnsureCapacity(ref bytes, offset, 10); - bytes[offset] = MessagePackCode.FixExt8; - bytes[offset + 1] = unchecked((byte)typeCode); - return 2; - case 16: - EnsureCapacity(ref bytes, offset, 18); - bytes[offset] = MessagePackCode.FixExt16; - bytes[offset + 1] = unchecked((byte)typeCode); - return 2; - default: - unchecked - { - if (dataLength <= byte.MaxValue) - { - EnsureCapacity(ref bytes, offset, dataLength + 3); - bytes[offset] = MessagePackCode.Ext8; - bytes[offset + 1] = unchecked((byte)(dataLength)); - bytes[offset + 2] = unchecked((byte)typeCode); - return 3; - } - else if (dataLength <= UInt16.MaxValue) - { - EnsureCapacity(ref bytes, offset, dataLength + 4); - bytes[offset] = MessagePackCode.Ext16; - bytes[offset + 1] = unchecked((byte)(dataLength >> 8)); - bytes[offset + 2] = unchecked((byte)(dataLength)); - bytes[offset + 3] = unchecked((byte)typeCode); - return 4; - } - else - { - EnsureCapacity(ref bytes, offset, dataLength + 6); - bytes[offset] = MessagePackCode.Ext32; - bytes[offset + 1] = unchecked((byte)(dataLength >> 24)); - bytes[offset + 2] = unchecked((byte)(dataLength >> 16)); - bytes[offset + 3] = unchecked((byte)(dataLength >> 8)); - bytes[offset + 4] = unchecked((byte)dataLength); - bytes[offset + 5] = unchecked((byte)typeCode); - return 6; - } - } - } - } - - /// - /// Write extension format header, always use ext32 format(length is fixed, 6). - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteExtensionFormatHeaderForceExt32Block(ref byte[] bytes, int offset, sbyte typeCode, int dataLength) - { - EnsureCapacity(ref bytes, offset, dataLength + 6); - bytes[offset] = MessagePackCode.Ext32; - bytes[offset + 1] = unchecked((byte)(dataLength >> 24)); - bytes[offset + 2] = unchecked((byte)(dataLength >> 16)); - bytes[offset + 3] = unchecked((byte)(dataLength >> 8)); - bytes[offset + 4] = unchecked((byte)dataLength); - bytes[offset + 5] = unchecked((byte)typeCode); - return 6; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteExtensionFormat(ref byte[] bytes, int offset, sbyte typeCode, byte[] data) - { - var length = data.Length; - switch (length) - { - case 1: - EnsureCapacity(ref bytes, offset, 3); - bytes[offset] = MessagePackCode.FixExt1; - bytes[offset + 1] = unchecked((byte)typeCode); - bytes[offset + 2] = data[0]; - return 3; - case 2: - EnsureCapacity(ref bytes, offset, 4); - bytes[offset] = MessagePackCode.FixExt2; - bytes[offset + 1] = unchecked((byte)typeCode); - bytes[offset + 2] = data[0]; - bytes[offset + 3] = data[1]; - return 4; - case 4: - EnsureCapacity(ref bytes, offset, 6); - bytes[offset] = MessagePackCode.FixExt4; - bytes[offset + 1] = unchecked((byte)typeCode); - bytes[offset + 2] = data[0]; - bytes[offset + 3] = data[1]; - bytes[offset + 4] = data[2]; - bytes[offset + 5] = data[3]; - return 6; - case 8: - EnsureCapacity(ref bytes, offset, 10); - bytes[offset] = MessagePackCode.FixExt8; - bytes[offset + 1] = unchecked((byte)typeCode); - bytes[offset + 2] = data[0]; - bytes[offset + 3] = data[1]; - bytes[offset + 4] = data[2]; - bytes[offset + 5] = data[3]; - bytes[offset + 6] = data[4]; - bytes[offset + 7] = data[5]; - bytes[offset + 8] = data[6]; - bytes[offset + 9] = data[7]; - return 10; - case 16: - EnsureCapacity(ref bytes, offset, 18); - bytes[offset] = MessagePackCode.FixExt16; - bytes[offset + 1] = unchecked((byte)typeCode); - bytes[offset + 2] = data[0]; - bytes[offset + 3] = data[1]; - bytes[offset + 4] = data[2]; - bytes[offset + 5] = data[3]; - bytes[offset + 6] = data[4]; - bytes[offset + 7] = data[5]; - bytes[offset + 8] = data[6]; - bytes[offset + 9] = data[7]; - bytes[offset + 10] = data[8]; - bytes[offset + 11] = data[9]; - bytes[offset + 12] = data[10]; - bytes[offset + 13] = data[11]; - bytes[offset + 14] = data[12]; - bytes[offset + 15] = data[13]; - bytes[offset + 16] = data[14]; - bytes[offset + 17] = data[15]; - return 18; - default: - unchecked - { - if (data.Length <= byte.MaxValue) - { - EnsureCapacity(ref bytes, offset, length + 3); - bytes[offset] = MessagePackCode.Ext8; - bytes[offset + 1] = unchecked((byte)(length)); - bytes[offset + 2] = unchecked((byte)typeCode); - Buffer.BlockCopy(data, 0, bytes, offset + 3, length); - return length + 3; - } - else if (data.Length <= UInt16.MaxValue) - { - EnsureCapacity(ref bytes, offset, length + 4); - bytes[offset] = MessagePackCode.Ext16; - bytes[offset + 1] = unchecked((byte)(length >> 8)); - bytes[offset + 2] = unchecked((byte)(length)); - bytes[offset + 3] = unchecked((byte)typeCode); - Buffer.BlockCopy(data, 0, bytes, offset + 4, length); - return length + 4; - } - else - { - EnsureCapacity(ref bytes, offset, length + 6); - bytes[offset] = MessagePackCode.Ext32; - bytes[offset + 1] = unchecked((byte)(length >> 24)); - bytes[offset + 2] = unchecked((byte)(length >> 16)); - bytes[offset + 3] = unchecked((byte)(length >> 8)); - bytes[offset + 4] = unchecked((byte)length); - bytes[offset + 5] = unchecked((byte)typeCode); - Buffer.BlockCopy(data, 0, bytes, offset + 6, length); - return length + 6; - } - } - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static ExtensionResult ReadExtensionFormat(byte[] bytes, int offset, out int readSize) - { - return extDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - - /// - /// return byte length of ExtensionFormat. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static ExtensionHeader ReadExtensionFormatHeader(byte[] bytes, int offset, out int readSize) - { - return extHeaderDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int GetExtensionFormatHeaderLength(int dataLength) - { - switch (dataLength) - { - case 1: - case 2: - case 4: - case 8: - case 16: - return 2; - default: - if (dataLength <= byte.MaxValue) - { - return 3; - } - else if (dataLength <= UInt16.MaxValue) - { - return 4; - } - else - { - return 6; - } - } - } - - // Timestamp spec - // https://github.com/msgpack/msgpack/pull/209 - // FixExt4(-1) => seconds | [1970-01-01 00:00:00 UTC, 2106-02-07 06:28:16 UTC) range - // FixExt8(-1) => nanoseconds + seconds | [1970-01-01 00:00:00.000000000 UTC, 2514-05-30 01:53:04.000000000 UTC) range - // Ext8(12,-1) => nanoseconds + seconds | [-584554047284-02-23 16:59:44 UTC, 584554051223-11-09 07:00:16.000000000 UTC) range - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteDateTime(ref byte[] bytes, int offset, DateTime dateTime) - { - dateTime = dateTime.ToUniversalTime(); - - var secondsSinceBclEpoch = dateTime.Ticks / TimeSpan.TicksPerSecond; - var seconds = secondsSinceBclEpoch - DateTimeConstants.BclSecondsAtUnixEpoch; - var nanoseconds = (dateTime.Ticks % TimeSpan.TicksPerSecond) * DateTimeConstants.NanosecondsPerTick; - - // reference pseudo code. - /* - struct timespec { - long tv_sec; // seconds - long tv_nsec; // nanoseconds - } time; - if ((time.tv_sec >> 34) == 0) - { - uint64_t data64 = (time.tv_nsec << 34) | time.tv_sec; - if (data & 0xffffffff00000000L == 0) - { - // timestamp 32 - uint32_t data32 = data64; - serialize(0xd6, -1, data32) - } - else - { - // timestamp 64 - serialize(0xd7, -1, data64) - } - } - else - { - // timestamp 96 - serialize(0xc7, 12, -1, time.tv_nsec, time.tv_sec) - } - */ - - if ((seconds >> 34) == 0) - { - var data64 = unchecked((ulong)((nanoseconds << 34) | seconds)); - if ((data64 & 0xffffffff00000000L) == 0) - { - // timestamp 32(seconds in 32-bit unsigned int) - var data32 = (UInt32)data64; - EnsureCapacity(ref bytes, offset, 6); - bytes[offset] = MessagePackCode.FixExt4; - bytes[offset + 1] = unchecked((byte)ReservedMessagePackExtensionTypeCode.DateTime); - bytes[offset + 2] = unchecked((byte)(data32 >> 24)); - bytes[offset + 3] = unchecked((byte)(data32 >> 16)); - bytes[offset + 4] = unchecked((byte)(data32 >> 8)); - bytes[offset + 5] = unchecked((byte)data32); - return 6; - } - else - { - // timestamp 64(nanoseconds in 30-bit unsigned int | seconds in 34-bit unsigned int) - EnsureCapacity(ref bytes, offset, 10); - bytes[offset] = MessagePackCode.FixExt8; - bytes[offset + 1] = unchecked((byte)ReservedMessagePackExtensionTypeCode.DateTime); - bytes[offset + 2] = unchecked((byte)(data64 >> 56)); - bytes[offset + 3] = unchecked((byte)(data64 >> 48)); - bytes[offset + 4] = unchecked((byte)(data64 >> 40)); - bytes[offset + 5] = unchecked((byte)(data64 >> 32)); - bytes[offset + 6] = unchecked((byte)(data64 >> 24)); - bytes[offset + 7] = unchecked((byte)(data64 >> 16)); - bytes[offset + 8] = unchecked((byte)(data64 >> 8)); - bytes[offset + 9] = unchecked((byte)data64); - return 10; - } - } - else - { - // timestamp 96( nanoseconds in 32-bit unsigned int | seconds in 64-bit signed int ) - EnsureCapacity(ref bytes, offset, 15); - bytes[offset] = MessagePackCode.Ext8; - bytes[offset + 1] = (byte)12; - bytes[offset + 2] = unchecked((byte)ReservedMessagePackExtensionTypeCode.DateTime); - bytes[offset + 3] = unchecked((byte)(nanoseconds >> 24)); - bytes[offset + 4] = unchecked((byte)(nanoseconds >> 16)); - bytes[offset + 5] = unchecked((byte)(nanoseconds >> 8)); - bytes[offset + 6] = unchecked((byte)nanoseconds); - bytes[offset + 7] = unchecked((byte)(seconds >> 56)); - bytes[offset + 8] = unchecked((byte)(seconds >> 48)); - bytes[offset + 9] = unchecked((byte)(seconds >> 40)); - bytes[offset + 10] = unchecked((byte)(seconds >> 32)); - bytes[offset + 11] = unchecked((byte)(seconds >> 24)); - bytes[offset + 12] = unchecked((byte)(seconds >> 16)); - bytes[offset + 13] = unchecked((byte)(seconds >> 8)); - bytes[offset + 14] = unchecked((byte)seconds); - return 15; - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static DateTime ReadDateTime(byte[] bytes, int offset, out int readSize) - { - return dateTimeDecoders[bytes[offset]].Read(bytes, offset, out readSize); - } - } - - // Stream Overload - public static partial class MessagePackBinary - { - static class StreamDecodeMemoryPool - { - [ThreadStatic] - static byte[] buffer = null; - - public static byte[] GetBuffer() - { - if (buffer == null) - { - buffer = new byte[65536]; - } - return buffer; - } - } - - static byte[] ReadMessageBlockFromStreamUnsafe(Stream stream) - { - int _; - return ReadMessageBlockFromStreamUnsafe(stream, false, out _); - } - - /// - /// Read MessageBlock, returns byte[] block is in MemoryPool so careful to use. - /// - public static byte[] ReadMessageBlockFromStreamUnsafe(Stream stream, bool readOnlySingleMessage, out int readSize) - { - var bytes = StreamDecodeMemoryPool.GetBuffer(); - readSize = ReadMessageBlockFromStreamCore(stream, ref bytes, 0, readOnlySingleMessage); - return bytes; - } - - static int ReadMessageBlockFromStreamCore(Stream stream, ref byte[] bytes, int offset, bool readOnlySingleMessage) - { - var byteCode = stream.ReadByte(); - if (byteCode < 0 || byte.MaxValue < byteCode) - { - throw new InvalidOperationException("Invalid MessagePack code was detected, code:" + byteCode); - } - - var code = (byte)byteCode; - - MessagePackBinary.EnsureCapacity(ref bytes, offset, 1); - bytes[offset] = code; - - var type = MessagePackCode.ToMessagePackType(code); - switch (type) - { - case MessagePackType.Integer: - { - var readCount = 0; - if (MessagePackCode.MinNegativeFixInt <= code && code <= MessagePackCode.MaxNegativeFixInt) return 1; - else if (MessagePackCode.MinFixInt <= code && code <= MessagePackCode.MaxFixInt) return 1; - - switch (code) - { - case MessagePackCode.Int8: readCount = 1; break; - case MessagePackCode.Int16: readCount = 2; break; - case MessagePackCode.Int32: readCount = 4; break; - case MessagePackCode.Int64: readCount = 8; break; - case MessagePackCode.UInt8: readCount = 1; break; - case MessagePackCode.UInt16: readCount = 2; break; - case MessagePackCode.UInt32: readCount = 4; break; - case MessagePackCode.UInt64: readCount = 8; break; - default: throw new InvalidOperationException("Invalid Code"); - } - - MessagePackBinary.EnsureCapacity(ref bytes, offset, readCount + 1); - ReadFully(stream, bytes, offset + 1, readCount); - return readCount + 1; - } - case MessagePackType.Unknown: - case MessagePackType.Nil: - case MessagePackType.Boolean: - return 1; - case MessagePackType.Float: - if (code == MessagePackCode.Float32) - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, 5); - ReadFully(stream, bytes, offset + 1, 4); - return 5; - } - else - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, 9); - ReadFully(stream, bytes, offset + 1, 8); - return 9; - } - case MessagePackType.String: - { - if (MessagePackCode.MinFixStr <= code && code <= MessagePackCode.MaxFixStr) - { - var length = bytes[offset] & 0x1F; - MessagePackBinary.EnsureCapacity(ref bytes, offset, 1 + length); - ReadFully(stream, bytes, offset + 1, length); - return length + 1; - } - - switch (code) - { - case MessagePackCode.Str8: - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, 2); - ReadFully(stream, bytes, offset + 1, 1); - var length = bytes[offset + 1]; - - MessagePackBinary.EnsureCapacity(ref bytes, offset, 2 + length); - ReadFully(stream, bytes, offset + 2, length); - - return length + 2; - } - case MessagePackCode.Str16: - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, 3); - ReadFully(stream, bytes, offset + 1, 2); - var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); - - MessagePackBinary.EnsureCapacity(ref bytes, offset, 3 + length); - ReadFully(stream, bytes, offset + 3, length); - - return length + 3; - } - case MessagePackCode.Str32: - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, 5); - ReadFully(stream, bytes, offset + 1, 4); - var length = (bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | (bytes[offset + 4]); - - MessagePackBinary.EnsureCapacity(ref bytes, offset, 5 + length); - ReadFully(stream, bytes, offset + 5, length); - - return length + 5; - } - default: throw new InvalidOperationException("Invalid Code"); - } - } - case MessagePackType.Binary: - { - switch (code) - { - case MessagePackCode.Bin8: - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, 2); - ReadFully(stream, bytes, offset + 1, 1); - var length = bytes[offset + 1]; - - MessagePackBinary.EnsureCapacity(ref bytes, offset, 2 + length); - ReadFully(stream, bytes, offset + 2, length); - - return length + 2; - } - case MessagePackCode.Bin16: - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, 3); - ReadFully(stream, bytes, offset + 1, 2); - var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); - - MessagePackBinary.EnsureCapacity(ref bytes, offset, 3 + length); - ReadFully(stream, bytes, offset + 3, length); - - return length + 3; - } - case MessagePackCode.Bin32: - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, 5); - ReadFully(stream, bytes, offset + 1, 4); - var length = (bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | (bytes[offset + 4]); - - MessagePackBinary.EnsureCapacity(ref bytes, offset, 5 + length); - ReadFully(stream, bytes, offset + 5, length); - - return length + 5; - } - default: throw new InvalidOperationException("Invalid Code"); - } - } - case MessagePackType.Array: - { - var readHeaderSize = 0; - - if (MessagePackCode.MinFixArray <= code && code <= MessagePackCode.MaxFixArray) readHeaderSize = 0; - else if (code == MessagePackCode.Array16) readHeaderSize = 2; - else if (code == MessagePackCode.Array32) readHeaderSize = 4; - if (readHeaderSize != 0) - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, readHeaderSize + 1); - ReadFully(stream, bytes, offset + 1, readHeaderSize); - } - - var startOffset = offset; - offset += (readHeaderSize + 1); - - int _; - var length = ReadArrayHeaderRaw(bytes, startOffset, out _); - if (!readOnlySingleMessage) - { - for (int i = 0; i < length; i++) - { - offset += ReadMessageBlockFromStreamCore(stream, ref bytes, offset, readOnlySingleMessage); - } - } - - return offset - startOffset; - } - case MessagePackType.Map: - { - var readHeaderSize = 0; - - if (MessagePackCode.MinFixMap <= code && code <= MessagePackCode.MaxFixMap) readHeaderSize = 0; - else if (code == MessagePackCode.Map16) readHeaderSize = 2; - else if (code == MessagePackCode.Map32) readHeaderSize = 4; - if (readHeaderSize != 0) - { - MessagePackBinary.EnsureCapacity(ref bytes, offset, readHeaderSize + 1); - ReadFully(stream, bytes, offset + 1, readHeaderSize); - } - - var startOffset = offset; - offset += (readHeaderSize + 1); - - int _; - var length = ReadMapHeaderRaw(bytes, startOffset, out _); - if (!readOnlySingleMessage) - { - for (int i = 0; i < length; i++) - { - offset += ReadMessageBlockFromStreamCore(stream, ref bytes, offset, readOnlySingleMessage); // key - offset += ReadMessageBlockFromStreamCore(stream, ref bytes, offset, readOnlySingleMessage); // value - } - } - - return offset - startOffset; - } - case MessagePackType.Extension: - { - var readHeaderSize = 0; - - switch (code) - { - case MessagePackCode.FixExt1: readHeaderSize = 1; break; - case MessagePackCode.FixExt2: readHeaderSize = 1; break; - case MessagePackCode.FixExt4: readHeaderSize = 1; break; - case MessagePackCode.FixExt8: readHeaderSize = 1; break; - case MessagePackCode.FixExt16: readHeaderSize = 1; break; - case MessagePackCode.Ext8: readHeaderSize = 2; break; - case MessagePackCode.Ext16: readHeaderSize = 3; break; - case MessagePackCode.Ext32: readHeaderSize = 5; break; - default: throw new InvalidOperationException("Invalid Code"); - } - - MessagePackBinary.EnsureCapacity(ref bytes, offset, readHeaderSize + 1); - ReadFully(stream, bytes, offset + 1, readHeaderSize); - - if (!readOnlySingleMessage) - { - int _; - var header = ReadExtensionFormatHeader(bytes, offset, out _); - - MessagePackBinary.EnsureCapacity(ref bytes, offset, 1 + readHeaderSize + (int)header.Length); - ReadFully(stream, bytes, offset + 1 + readHeaderSize, (int)header.Length); - - return 1 + readHeaderSize + (int)header.Length; - } - else - { - return readHeaderSize + 1; - } - } - default: throw new InvalidOperationException("Invalid Code"); - } - } - - static void ReadFully(Stream stream, byte[] bytes, int offset, int readSize) - { - var nextLen = readSize; - while (nextLen != 0) - { - var len = stream.Read(bytes, offset, nextLen); - if (len == -1) return; - offset += len; - nextLen = nextLen - len; - } - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int ReadNext(Stream stream) - { - var bytes = StreamDecodeMemoryPool.GetBuffer(); - return ReadMessageBlockFromStreamCore(stream, ref bytes, 0, true); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int ReadNextBlock(Stream stream) - { - var bytes = StreamDecodeMemoryPool.GetBuffer(); - var offset = 0; - return ReadMessageBlockFromStreamCore(stream, ref bytes, offset, false); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteNil(Stream stream) - { - stream.WriteByte(MessagePackCode.Nil); - return 1; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static Nil ReadNil(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadNil(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static bool IsNil(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - - return bytes[offset] == MessagePackCode.Nil; - } - - /// - /// Unsafe. If value is guranteed 0 ~ MessagePackRange.MaxFixMapCount(15), can use this method. - /// - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteFixedMapHeaderUnsafe(Stream stream, int count) - { - stream.WriteByte((byte)(MessagePackCode.MinFixMap | count)); - return 1; - } - - /// - /// Write map count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteMapHeader(Stream stream, int count) - { - checked - { - return WriteMapHeader(stream, (uint)count); - } - } - - /// - /// Write map count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteMapHeader(Stream stream, uint count) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteMapHeader(ref buffer, 0, count); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - - /// - /// Write map format header, always use map32 format(length is fixed, 5). - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteMapHeaderForceMap32Block(Stream stream, uint count) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteMapHeaderForceMap32Block(ref buffer, 0, count); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - - /// - /// Return map count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int ReadMapHeader(Stream stream) - { - checked - { - var bytes = StreamDecodeMemoryPool.GetBuffer(); - ReadMessageBlockFromStreamCore(stream, ref bytes, 0, true); - int readSize; - return ReadMapHeader(bytes, 0, out readSize); - } - } - - /// - /// Return map count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static uint ReadMapHeaderRaw(Stream stream) - { - var bytes = StreamDecodeMemoryPool.GetBuffer(); - ReadMessageBlockFromStreamCore(stream, ref bytes, 0, true); - int readSize; - return ReadMapHeaderRaw(bytes, 0, out readSize); - } - - /// - /// Unsafe. If value is guranteed 0 ~ MessagePackRange.MaxFixArrayCount(15), can use this method. - /// - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteFixedArrayHeaderUnsafe(Stream stream, int count) - { - stream.WriteByte((byte)(MessagePackCode.MinFixArray | count)); - return 1; - } - - /// - /// Write array count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteArrayHeader(Stream stream, int count) - { - checked - { - return WriteArrayHeader(stream, (uint)count); - } - } - - /// - /// Write array count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteArrayHeader(Stream stream, uint count) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteArrayHeader(ref buffer, 0, count); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - - /// - /// Write array format header, always use array32 format(length is fixed, 5). - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteArrayHeaderForceArray32Block(Stream stream, uint count) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteArrayHeaderForceArray32Block(ref buffer, 0, count); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - - /// - /// Return array count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int ReadArrayHeader(Stream stream) - { - var bytes = StreamDecodeMemoryPool.GetBuffer(); - ReadMessageBlockFromStreamCore(stream, ref bytes, 0, true); - int readSize; - return ReadArrayHeader(bytes, 0, out readSize); - } - - /// - /// Return array count. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static uint ReadArrayHeaderRaw(Stream stream) - { - var bytes = StreamDecodeMemoryPool.GetBuffer(); - ReadMessageBlockFromStreamCore(stream, ref bytes, 0, true); - int readSize; - return ReadArrayHeaderRaw(bytes, 0, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteBoolean(Stream stream, bool value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteBoolean(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static bool ReadBoolean(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadBoolean(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteByte(Stream stream, byte value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteByte(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteByteForceByteBlock(Stream stream, byte value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteByteForceByteBlock(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static byte ReadByte(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadByte(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteBytes(Stream stream, byte[] value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteBytes(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteBytes(Stream stream, byte[] src, int srcOffset, int count) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteBytes(ref buffer, 0, src, srcOffset, count); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static byte[] ReadBytes(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadBytes(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteSByte(Stream stream, sbyte value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteSByte(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteSByteForceSByteBlock(Stream stream, sbyte value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteSByteForceSByteBlock(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static sbyte ReadSByte(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadSByte(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteSingle(Stream stream, float value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteSingle(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static float ReadSingle(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadSingle(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteDouble(Stream stream, double value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteDouble(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static double ReadDouble(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadDouble(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteInt16(Stream stream, short value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteInt16(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteInt16ForceInt16Block(Stream stream, short value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteInt16ForceInt16Block(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static short ReadInt16(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadInt16(bytes, offset, out readSize); - } - - /// - /// Unsafe. If value is guranteed 0 ~ MessagePackCode.MaxFixInt(127), can use this method. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WritePositiveFixedIntUnsafe(Stream stream, int value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WritePositiveFixedIntUnsafe(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteInt32(Stream stream, int value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteInt32(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - - /// - /// Acquire static message block(always 5 bytes). - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteInt32ForceInt32Block(Stream stream, int value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteInt32ForceInt32Block(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int ReadInt32(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadInt32(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteInt64(Stream stream, long value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteInt64(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteInt64ForceInt64Block(Stream stream, long value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteInt64ForceInt64Block(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static long ReadInt64(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadInt64(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteUInt16(Stream stream, ushort value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteUInt16(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteUInt16ForceUInt16Block(Stream stream, ushort value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteUInt16ForceUInt16Block(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static ushort ReadUInt16(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadUInt16(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteUInt32(Stream stream, uint value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteUInt32(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteUInt32ForceUInt32Block(Stream stream, uint value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteUInt32ForceUInt32Block(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static uint ReadUInt32(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadUInt32(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteUInt64(Stream stream, ulong value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteUInt64(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteUInt64ForceUInt64Block(Stream stream, ulong value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteUInt64ForceUInt64Block(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static ulong ReadUInt64(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadUInt64(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteChar(Stream stream, char value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteChar(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static char ReadChar(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadChar(bytes, offset, out readSize); - } - - /// - /// Unsafe. If value is guranteed length is 0 ~ 31, can use this method. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteFixedStringUnsafe(Stream stream, string value, int byteCount) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteFixedStringUnsafe(ref buffer, 0, value, byteCount); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - - /// - /// Unsafe. If pre-calculated byteCount of target string, can use this method. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteStringUnsafe(Stream stream, string value, int byteCount) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteStringUnsafe(ref buffer, 0, value, byteCount); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteStringBytes(Stream stream, byte[] utf8stringBytes) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteStringBytes(ref buffer, 0, utf8stringBytes); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - - public static int WriteString(Stream stream, string value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteString(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - - public static int WriteStringForceStr32Block(Stream stream, string value) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteStringForceStr32Block(ref buffer, 0, value); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static string ReadString(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadString(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteExtensionFormatHeader(Stream stream, sbyte typeCode, int dataLength) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteExtensionFormatHeader(ref buffer, 0, typeCode, dataLength); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - - /// - /// Write extension format header, always use ext32 format(length is fixed, 6). - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteExtensionFormatHeaderForceExt32Block(Stream stream, sbyte typeCode, int dataLength) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteExtensionFormatHeaderForceExt32Block(ref buffer, 0, typeCode, dataLength); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteExtensionFormat(Stream stream, sbyte typeCode, byte[] data) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteExtensionFormat(ref buffer, 0, typeCode, data); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static ExtensionResult ReadExtensionFormat(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadExtensionFormat(bytes, offset, out readSize); - } - - /// - /// return byte length of ExtensionFormat. - /// -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static ExtensionHeader ReadExtensionFormatHeader(Stream stream) - { - int readSize; - var bytes = ReadMessageBlockFromStreamUnsafe(stream, true, out readSize); - var offset = 0; - - return ReadExtensionFormatHeader(bytes, offset, out readSize); - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static int WriteDateTime(Stream stream, DateTime dateTime) - { - var buffer = StreamDecodeMemoryPool.GetBuffer(); - var writeCount = WriteDateTime(ref buffer, 0, dateTime); - stream.Write(buffer, 0, writeCount); - return writeCount; - } - -#if NETSTANDARD - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] -#endif - public static DateTime ReadDateTime(Stream stream) - { - var bytes = ReadMessageBlockFromStreamUnsafe(stream); - var offset = 0; - int readSize; - - return ReadDateTime(bytes, offset, out readSize); - } - } - - public struct ExtensionResult - { - public sbyte TypeCode { get; private set; } - public byte[] Data { get; private set; } - - public ExtensionResult(sbyte typeCode, byte[] data) - { - TypeCode = typeCode; - Data = data; - } - } - - public struct ExtensionHeader - { - public sbyte TypeCode { get; private set; } - public uint Length { get; private set; } - - public ExtensionHeader(sbyte typeCode, uint length) - { - TypeCode = typeCode; - Length = length; - } - } -} - -namespace MessagePack.Internal -{ - internal static class DateTimeConstants - { - internal static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); - internal const long BclSecondsAtUnixEpoch = 62135596800; - internal const int NanosecondsPerTick = 100; - } -} - -namespace MessagePack.Decoders -{ - internal interface IMapHeaderDecoder - { - uint Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixMapHeader : IMapHeaderDecoder - { - internal static readonly IMapHeaderDecoder Instance = new FixMapHeader(); - - FixMapHeader() - { - - } - - public uint Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return (uint)(bytes[offset] & 0xF); - } - } - - internal sealed class Map16Header : IMapHeaderDecoder - { - internal static readonly IMapHeaderDecoder Instance = new Map16Header(); - - Map16Header() - { - - } - - public uint Read(byte[] bytes, int offset, out int readSize) - { - readSize = 3; - unchecked - { - return (uint)((bytes[offset + 1] << 8) | (bytes[offset + 2])); - } - } - } - - internal sealed class Map32Header : IMapHeaderDecoder - { - internal static readonly IMapHeaderDecoder Instance = new Map32Header(); - - Map32Header() - { - - } - - public uint Read(byte[] bytes, int offset, out int readSize) - { - readSize = 5; - unchecked - { - return (uint)((bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | bytes[offset + 4]); - } - } - } - - internal sealed class InvalidMapHeader : IMapHeaderDecoder - { - internal static readonly IMapHeaderDecoder Instance = new InvalidMapHeader(); - - InvalidMapHeader() - { - - } - - public uint Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IArrayHeaderDecoder - { - uint Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixArrayHeader : IArrayHeaderDecoder - { - internal static readonly IArrayHeaderDecoder Instance = new FixArrayHeader(); - - FixArrayHeader() - { - - } - - public uint Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return (uint)(bytes[offset] & 0xF); - } - } - - internal sealed class Array16Header : IArrayHeaderDecoder - { - internal static readonly IArrayHeaderDecoder Instance = new Array16Header(); - - Array16Header() - { - - } - - public uint Read(byte[] bytes, int offset, out int readSize) - { - readSize = 3; - unchecked - { - return (uint)((bytes[offset + 1] << 8) | (bytes[offset + 2])); - } - } - } - - internal sealed class Array32Header : IArrayHeaderDecoder - { - internal static readonly IArrayHeaderDecoder Instance = new Array32Header(); - - Array32Header() - { - - } - - public uint Read(byte[] bytes, int offset, out int readSize) - { - readSize = 5; - unchecked - { - return (uint)((bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | bytes[offset + 4]); - } - } - } - - internal sealed class InvalidArrayHeader : IArrayHeaderDecoder - { - internal static readonly IArrayHeaderDecoder Instance = new InvalidArrayHeader(); - - InvalidArrayHeader() - { - - } - - public uint Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IBooleanDecoder - { - bool Read(); - } - - internal sealed class True : IBooleanDecoder - { - internal static IBooleanDecoder Instance = new True(); - - True() { } - - public bool Read() - { - return true; - } - } - - internal sealed class False : IBooleanDecoder - { - internal static IBooleanDecoder Instance = new False(); - - False() { } - - public bool Read() - { - return false; - } - } - - internal sealed class InvalidBoolean : IBooleanDecoder - { - internal static IBooleanDecoder Instance = new InvalidBoolean(); - - InvalidBoolean() { } - - public bool Read() - { - throw new InvalidOperationException("code is invalid."); - } - } - - internal interface IByteDecoder - { - byte Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixByte : IByteDecoder - { - internal static readonly IByteDecoder Instance = new FixByte(); - - FixByte() - { - - } - - public byte Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return bytes[offset]; - } - } - - internal sealed class UInt8Byte : IByteDecoder - { - internal static readonly IByteDecoder Instance = new UInt8Byte(); - - UInt8Byte() - { - - } - - public byte Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - return bytes[offset + 1]; - } - } - - internal sealed class InvalidByte : IByteDecoder - { - internal static readonly IByteDecoder Instance = new InvalidByte(); - - InvalidByte() - { - - } - - public byte Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IBytesDecoder - { - byte[] Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class NilBytes : IBytesDecoder - { - internal static readonly IBytesDecoder Instance = new NilBytes(); - - NilBytes() - { - - } - - public byte[] Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return null; - } - } - - internal sealed class Bin8Bytes : IBytesDecoder - { - internal static readonly IBytesDecoder Instance = new Bin8Bytes(); - - Bin8Bytes() - { - - } - - public byte[] Read(byte[] bytes, int offset, out int readSize) - { - var length = bytes[offset + 1]; - var newBytes = new byte[length]; - Buffer.BlockCopy(bytes, offset + 2, newBytes, 0, length); - - readSize = length + 2; - return newBytes; - } - } - - internal sealed class Bin16Bytes : IBytesDecoder - { - internal static readonly IBytesDecoder Instance = new Bin16Bytes(); - - Bin16Bytes() - { - - } - - public byte[] Read(byte[] bytes, int offset, out int readSize) - { - var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); - var newBytes = new byte[length]; - Buffer.BlockCopy(bytes, offset + 3, newBytes, 0, length); - - readSize = length + 3; - return newBytes; - } - } - - internal sealed class Bin32Bytes : IBytesDecoder - { - internal static readonly IBytesDecoder Instance = new Bin32Bytes(); - - Bin32Bytes() - { - - } - - public byte[] Read(byte[] bytes, int offset, out int readSize) - { - var length = (bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | (bytes[offset + 4]); - var newBytes = new byte[length]; - Buffer.BlockCopy(bytes, offset + 5, newBytes, 0, length); - - readSize = length + 5; - return newBytes; - } - } - - internal sealed class InvalidBytes : IBytesDecoder - { - internal static readonly IBytesDecoder Instance = new InvalidBytes(); - - InvalidBytes() - { - - } - - public byte[] Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IBytesSegmentDecoder - { - ArraySegment Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class NilBytesSegment : IBytesSegmentDecoder - { - internal static readonly IBytesSegmentDecoder Instance = new NilBytesSegment(); - - NilBytesSegment() - { - - } - - public ArraySegment Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return default(ArraySegment); - } - } - - internal sealed class Bin8BytesSegment : IBytesSegmentDecoder - { - internal static readonly IBytesSegmentDecoder Instance = new Bin8BytesSegment(); - - Bin8BytesSegment() - { - - } - - public ArraySegment Read(byte[] bytes, int offset, out int readSize) - { - var length = bytes[offset + 1]; - - readSize = length + 2; - return new ArraySegment(bytes, offset + 2, length); - } - } - - internal sealed class Bin16BytesSegment : IBytesSegmentDecoder - { - internal static readonly IBytesSegmentDecoder Instance = new Bin16BytesSegment(); - - Bin16BytesSegment() - { - - } - - public ArraySegment Read(byte[] bytes, int offset, out int readSize) - { - var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); - - readSize = length + 3; - return new ArraySegment(bytes, offset + 3, length); - } - } - - internal sealed class Bin32BytesSegment : IBytesSegmentDecoder - { - internal static readonly IBytesSegmentDecoder Instance = new Bin32BytesSegment(); - - Bin32BytesSegment() - { - - } - - public ArraySegment Read(byte[] bytes, int offset, out int readSize) - { - var length = (bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | (bytes[offset + 4]); - readSize = length + 5; - return new ArraySegment(bytes, offset + 5, length); - } - } - - internal sealed class InvalidBytesSegment : IBytesSegmentDecoder - { - internal static readonly IBytesSegmentDecoder Instance = new InvalidBytesSegment(); - - InvalidBytesSegment() - { - - } - - public ArraySegment Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface ISByteDecoder - { - sbyte Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixSByte : ISByteDecoder - { - internal static readonly ISByteDecoder Instance = new FixSByte(); - - FixSByte() - { - - } - - public sbyte Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return unchecked((sbyte)bytes[offset]); - } - } - - internal sealed class Int8SByte : ISByteDecoder - { - internal static readonly ISByteDecoder Instance = new Int8SByte(); - - Int8SByte() - { - - } - - public sbyte Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - return unchecked((sbyte)(bytes[offset + 1])); - } - } - - internal sealed class InvalidSByte : ISByteDecoder - { - internal static readonly ISByteDecoder Instance = new InvalidSByte(); - - InvalidSByte() - { - - } - - public sbyte Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface ISingleDecoder - { - float Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixNegativeFloat : ISingleDecoder - { - internal static readonly ISingleDecoder Instance = new FixNegativeFloat(); - - FixNegativeFloat() - { - - } - - public Single Read(byte[] bytes, int offset, out int readSize) - { - return FixSByte.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class FixFloat : ISingleDecoder - { - internal static readonly ISingleDecoder Instance = new FixFloat(); - - FixFloat() - { - - } - - public Single Read(byte[] bytes, int offset, out int readSize) - { - return FixByte.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class Int8Single : ISingleDecoder - { - internal static readonly ISingleDecoder Instance = new Int8Single(); - - Int8Single() - { - - } - - public Single Read(byte[] bytes, int offset, out int readSize) - { - return Int8SByte.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class Int16Single : ISingleDecoder - { - internal static readonly ISingleDecoder Instance = new Int16Single(); - - Int16Single() - { - - } - - public Single Read(byte[] bytes, int offset, out int readSize) - { - return Int16Int16.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class Int32Single : ISingleDecoder - { - internal static readonly ISingleDecoder Instance = new Int32Single(); - - Int32Single() - { - - } - - public Single Read(byte[] bytes, int offset, out int readSize) - { - return Int32Int32.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class Int64Single : ISingleDecoder - { - internal static readonly ISingleDecoder Instance = new Int64Single(); - - Int64Single() - { - - } - - public Single Read(byte[] bytes, int offset, out int readSize) - { - return Int64Int64.Instance.Read(bytes, offset, out readSize); - } - } - - - internal sealed class UInt8Single : ISingleDecoder - { - internal static readonly ISingleDecoder Instance = new UInt8Single(); - - UInt8Single() - { - - } - - public Single Read(byte[] bytes, int offset, out int readSize) - { - return UInt8Byte.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class UInt16Single : ISingleDecoder - { - internal static readonly ISingleDecoder Instance = new UInt16Single(); - - UInt16Single() - { - - } - - public Single Read(byte[] bytes, int offset, out int readSize) - { - return UInt16UInt16.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class UInt32Single : ISingleDecoder - { - internal static readonly ISingleDecoder Instance = new UInt32Single(); - - UInt32Single() - { - - } - - public Single Read(byte[] bytes, int offset, out int readSize) - { - return UInt32UInt32.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class UInt64Single : ISingleDecoder - { - internal static readonly ISingleDecoder Instance = new UInt64Single(); - - UInt64Single() - { - - } - - public Single Read(byte[] bytes, int offset, out int readSize) - { - return UInt64UInt64.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class Float32Single : ISingleDecoder - { - internal static readonly ISingleDecoder Instance = new Float32Single(); - - Float32Single() - { - - } - - public Single Read(byte[] bytes, int offset, out int readSize) - { - readSize = 5; - return new Float32Bits(bytes, offset + 1).Value; - } - } - - internal sealed class InvalidSingle : ISingleDecoder - { - internal static readonly ISingleDecoder Instance = new InvalidSingle(); - - InvalidSingle() - { - - } - - public Single Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IDoubleDecoder - { - double Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixNegativeDouble : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new FixNegativeDouble(); - - FixNegativeDouble() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - return FixSByte.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class FixDouble : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new FixDouble(); - - FixDouble() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - return FixByte.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class Int8Double : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new Int8Double(); - - Int8Double() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - return Int8SByte.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class Int16Double : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new Int16Double(); - - Int16Double() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - return Int16Int16.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class Int32Double : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new Int32Double(); - - Int32Double() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - return Int32Int32.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class Int64Double : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new Int64Double(); - - Int64Double() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - return Int64Int64.Instance.Read(bytes, offset, out readSize); - } - } - - - internal sealed class UInt8Double : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new UInt8Double(); - - UInt8Double() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - return UInt8Byte.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class UInt16Double : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new UInt16Double(); - - UInt16Double() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - return UInt16UInt16.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class UInt32Double : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new UInt32Double(); - - UInt32Double() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - return UInt32UInt32.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class UInt64Double : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new UInt64Double(); - - UInt64Double() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - return UInt64UInt64.Instance.Read(bytes, offset, out readSize); - } - } - - internal sealed class Float32Double : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new Float32Double(); - - Float32Double() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - readSize = 5; - return new Float32Bits(bytes, offset + 1).Value; - } - } - - internal sealed class Float64Double : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new Float64Double(); - - Float64Double() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - readSize = 9; - return new Float64Bits(bytes, offset + 1).Value; - } - } - - internal sealed class InvalidDouble : IDoubleDecoder - { - internal static readonly IDoubleDecoder Instance = new InvalidDouble(); - - InvalidDouble() - { - - } - - public Double Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IInt16Decoder - { - Int16 Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixNegativeInt16 : IInt16Decoder - { - internal static readonly IInt16Decoder Instance = new FixNegativeInt16(); - - FixNegativeInt16() - { - - } - - public Int16 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return unchecked((short)(sbyte)bytes[offset]); - } - } - - internal sealed class FixInt16 : IInt16Decoder - { - internal static readonly IInt16Decoder Instance = new FixInt16(); - - FixInt16() - { - - } - - public Int16 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return unchecked((short)bytes[offset]); - } - } - - internal sealed class UInt8Int16 : IInt16Decoder - { - internal static readonly IInt16Decoder Instance = new UInt8Int16(); - - UInt8Int16() - { - - } - - public Int16 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - return unchecked((short)(byte)(bytes[offset + 1])); - } - } - - internal sealed class UInt16Int16 : IInt16Decoder - { - internal static readonly IInt16Decoder Instance = new UInt16Int16(); - - UInt16Int16() - { - - } - - public Int16 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 3; - return checked((Int16)((bytes[offset + 1] << 8) + (bytes[offset + 2]))); - } - } - - internal sealed class Int8Int16 : IInt16Decoder - { - internal static readonly IInt16Decoder Instance = new Int8Int16(); - - Int8Int16() - { - - } - - public Int16 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - return unchecked((short)(sbyte)(bytes[offset + 1])); - } - } - - internal sealed class Int16Int16 : IInt16Decoder - { - internal static readonly IInt16Decoder Instance = new Int16Int16(); - - Int16Int16() - { - - } - - public Int16 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 3; - unchecked - { - return (short)((bytes[offset + 1] << 8) | (bytes[offset + 2])); - } - } - } - - internal sealed class InvalidInt16 : IInt16Decoder - { - internal static readonly IInt16Decoder Instance = new InvalidInt16(); - - InvalidInt16() - { - - } - - public Int16 Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IInt32Decoder - { - Int32 Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixNegativeInt32 : IInt32Decoder - { - internal static readonly IInt32Decoder Instance = new FixNegativeInt32(); - - FixNegativeInt32() - { - - } - - public Int32 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return unchecked((int)(sbyte)bytes[offset]); - } - } - - internal sealed class FixInt32 : IInt32Decoder - { - internal static readonly IInt32Decoder Instance = new FixInt32(); - - FixInt32() - { - - } - - public Int32 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return unchecked((int)bytes[offset]); - } - } - - internal sealed class UInt8Int32 : IInt32Decoder - { - internal static readonly IInt32Decoder Instance = new UInt8Int32(); - - UInt8Int32() - { - - } - - public Int32 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - return unchecked((int)(byte)(bytes[offset + 1])); - } - } - internal sealed class UInt16Int32 : IInt32Decoder - { - internal static readonly IInt32Decoder Instance = new UInt16Int32(); - - UInt16Int32() - { - - } - - public Int32 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 3; - return (Int32)((bytes[offset + 1] << 8) | (bytes[offset + 2])); - } - } - - internal sealed class UInt32Int32 : IInt32Decoder - { - internal static readonly IInt32Decoder Instance = new UInt32Int32(); - - UInt32Int32() - { - - } - - public Int32 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 5; - checked - { - return (Int32)((UInt32)(bytes[offset + 1] << 24) | (UInt32)(bytes[offset + 2] << 16) | (UInt32)(bytes[offset + 3] << 8) | (UInt32)bytes[offset + 4]); - } - } - } - - internal sealed class Int8Int32 : IInt32Decoder - { - internal static readonly IInt32Decoder Instance = new Int8Int32(); - - Int8Int32() - { - - } - - public Int32 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - return unchecked((int)(sbyte)(bytes[offset + 1])); - } - } - - internal sealed class Int16Int32 : IInt32Decoder - { - internal static readonly IInt32Decoder Instance = new Int16Int32(); - - Int16Int32() - { - - } - - public Int32 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 3; - unchecked - { - return (int)(short)((bytes[offset + 1] << 8) | (bytes[offset + 2])); - } - } - } - - internal sealed class Int32Int32 : IInt32Decoder - { - internal static readonly IInt32Decoder Instance = new Int32Int32(); - - Int32Int32() - { - - } - - public Int32 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 5; - unchecked - { - return (int)((bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | bytes[offset + 4]); - } - } - } - - internal sealed class InvalidInt32 : IInt32Decoder - { - internal static readonly IInt32Decoder Instance = new InvalidInt32(); - - InvalidInt32() - { - } - - public Int32 Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IInt64Decoder - { - Int64 Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixNegativeInt64 : IInt64Decoder - { - internal static readonly IInt64Decoder Instance = new FixNegativeInt64(); - - FixNegativeInt64() - { - - } - - public Int64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return unchecked((long)(sbyte)bytes[offset]); - } - } - - internal sealed class FixInt64 : IInt64Decoder - { - internal static readonly IInt64Decoder Instance = new FixInt64(); - - FixInt64() - { - - } - - public Int64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return unchecked((long)bytes[offset]); - } - } - - internal sealed class UInt8Int64 : IInt64Decoder - { - internal static readonly IInt64Decoder Instance = new UInt8Int64(); - - UInt8Int64() - { - - } - - public Int64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - return unchecked((int)(byte)(bytes[offset + 1])); - } - } - internal sealed class UInt16Int64 : IInt64Decoder - { - internal static readonly IInt64Decoder Instance = new UInt16Int64(); - - UInt16Int64() - { - - } - - public Int64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 3; - return (Int64)((bytes[offset + 1] << 8) | (bytes[offset + 2])); - } - } - - internal sealed class UInt32Int64 : IInt64Decoder - { - internal static readonly IInt64Decoder Instance = new UInt32Int64(); - - UInt32Int64() - { - - } - - public Int64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 5; - return unchecked((Int64)((uint)(bytes[offset + 1] << 24) | ((uint)bytes[offset + 2] << 16) | ((uint)bytes[offset + 3] << 8) | (uint)bytes[offset + 4])); - } - } - - internal sealed class UInt64Int64 : IInt64Decoder - { - internal static readonly IInt64Decoder Instance = new UInt64Int64(); - - UInt64Int64() - { - - } - - public Int64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 9; - checked - { - return (Int64)bytes[offset + 1] << 56 | (Int64)bytes[offset + 2] << 48 | (Int64)bytes[offset + 3] << 40 | (Int64)bytes[offset + 4] << 32 - | (Int64)bytes[offset + 5] << 24 | (Int64)bytes[offset + 6] << 16 | (Int64)bytes[offset + 7] << 8 | (Int64)bytes[offset + 8]; - } - } - } - - - internal sealed class Int8Int64 : IInt64Decoder - { - internal static readonly IInt64Decoder Instance = new Int8Int64(); - - Int8Int64() - { - - } - - public Int64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - return unchecked((long)(sbyte)(bytes[offset + 1])); - } - } - - internal sealed class Int16Int64 : IInt64Decoder - { - internal static readonly IInt64Decoder Instance = new Int16Int64(); - - Int16Int64() - { - - } - - public Int64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 3; - unchecked - { - return (long)(short)((bytes[offset + 1] << 8) | (bytes[offset + 2])); - } - } - } - - internal sealed class Int32Int64 : IInt64Decoder - { - internal static readonly IInt64Decoder Instance = new Int32Int64(); - - Int32Int64() - { - - } - - public Int64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 5; - unchecked - { - return (long)((long)(bytes[offset + 1] << 24) + (long)(bytes[offset + 2] << 16) + (long)(bytes[offset + 3] << 8) + (long)bytes[offset + 4]); - } - } - } - - internal sealed class Int64Int64 : IInt64Decoder - { - internal static readonly IInt64Decoder Instance = new Int64Int64(); - - Int64Int64() - { - - } - - public Int64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 9; - unchecked - { - return (long)bytes[offset + 1] << 56 | (long)bytes[offset + 2] << 48 | (long)bytes[offset + 3] << 40 | (long)bytes[offset + 4] << 32 - | (long)bytes[offset + 5] << 24 | (long)bytes[offset + 6] << 16 | (long)bytes[offset + 7] << 8 | (long)bytes[offset + 8]; - } - } - } - - internal sealed class InvalidInt64 : IInt64Decoder - { - internal static readonly IInt64Decoder Instance = new InvalidInt64(); - - InvalidInt64() - { - - } - - public Int64 Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IUInt16Decoder - { - UInt16 Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixUInt16 : IUInt16Decoder - { - internal static readonly IUInt16Decoder Instance = new FixUInt16(); - - FixUInt16() - { - - } - - public UInt16 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return unchecked((UInt16)bytes[offset]); - } - } - - internal sealed class UInt8UInt16 : IUInt16Decoder - { - internal static readonly IUInt16Decoder Instance = new UInt8UInt16(); - - UInt8UInt16() - { - - } - - public UInt16 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - return unchecked((UInt16)(bytes[offset + 1])); - } - } - - internal sealed class UInt16UInt16 : IUInt16Decoder - { - internal static readonly IUInt16Decoder Instance = new UInt16UInt16(); - - UInt16UInt16() - { - - } - - public UInt16 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 3; - unchecked - { - return (UInt16)((bytes[offset + 1] << 8) | (bytes[offset + 2])); - } - } - } - - internal sealed class InvalidUInt16 : IUInt16Decoder - { - internal static readonly IUInt16Decoder Instance = new InvalidUInt16(); - - InvalidUInt16() - { - - } - - public UInt16 Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IUInt32Decoder - { - UInt32 Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixUInt32 : IUInt32Decoder - { - internal static readonly IUInt32Decoder Instance = new FixUInt32(); - - FixUInt32() - { - - } - - public UInt32 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return unchecked((UInt32)bytes[offset]); - } - } - - internal sealed class UInt8UInt32 : IUInt32Decoder - { - internal static readonly IUInt32Decoder Instance = new UInt8UInt32(); - - UInt8UInt32() - { - - } - - public UInt32 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - return unchecked((UInt32)(bytes[offset + 1])); - } - } - - internal sealed class UInt16UInt32 : IUInt32Decoder - { - internal static readonly IUInt32Decoder Instance = new UInt16UInt32(); - - UInt16UInt32() - { - - } - - public UInt32 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 3; - unchecked - { - return (UInt32)((bytes[offset + 1] << 8) | (bytes[offset + 2])); - } - } - } - - internal sealed class UInt32UInt32 : IUInt32Decoder - { - internal static readonly IUInt32Decoder Instance = new UInt32UInt32(); - - UInt32UInt32() - { - - } - - public UInt32 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 5; - unchecked - { - return (UInt32)((UInt32)(bytes[offset + 1] << 24) | (UInt32)(bytes[offset + 2] << 16) | (UInt32)(bytes[offset + 3] << 8) | (UInt32)bytes[offset + 4]); - } - } - } - - internal sealed class InvalidUInt32 : IUInt32Decoder - { - internal static readonly IUInt32Decoder Instance = new InvalidUInt32(); - - InvalidUInt32() - { - - } - - public UInt32 Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IUInt64Decoder - { - UInt64 Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixUInt64 : IUInt64Decoder - { - internal static readonly IUInt64Decoder Instance = new FixUInt64(); - - FixUInt64() - { - - } - - public UInt64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return unchecked((UInt64)bytes[offset]); - } - } - - internal sealed class UInt8UInt64 : IUInt64Decoder - { - internal static readonly IUInt64Decoder Instance = new UInt8UInt64(); - - UInt8UInt64() - { - - } - - public UInt64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - return unchecked((UInt64)(bytes[offset + 1])); - } - } - - internal sealed class UInt16UInt64 : IUInt64Decoder - { - internal static readonly IUInt64Decoder Instance = new UInt16UInt64(); - - UInt16UInt64() - { - - } - - public UInt64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 3; - unchecked - { - return (UInt64)((bytes[offset + 1] << 8) | (bytes[offset + 2])); - } - } - } - - internal sealed class UInt32UInt64 : IUInt64Decoder - { - internal static readonly IUInt64Decoder Instance = new UInt32UInt64(); - - UInt32UInt64() - { - - } - - public UInt64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 5; - unchecked - { - return (UInt64)(((UInt64)bytes[offset + 1] << 24) + (ulong)(bytes[offset + 2] << 16) + (UInt64)(bytes[offset + 3] << 8) + (UInt64)bytes[offset + 4]); - } - } - } - - internal sealed class UInt64UInt64 : IUInt64Decoder - { - internal static readonly IUInt64Decoder Instance = new UInt64UInt64(); - - UInt64UInt64() - { - - } - - public UInt64 Read(byte[] bytes, int offset, out int readSize) - { - readSize = 9; - unchecked - { - return (UInt64)bytes[offset + 1] << 56 | (UInt64)bytes[offset + 2] << 48 | (UInt64)bytes[offset + 3] << 40 | (UInt64)bytes[offset + 4] << 32 - | (UInt64)bytes[offset + 5] << 24 | (UInt64)bytes[offset + 6] << 16 | (UInt64)bytes[offset + 7] << 8 | (UInt64)bytes[offset + 8]; - } - } - } - - internal sealed class InvalidUInt64 : IUInt64Decoder - { - internal static readonly IUInt64Decoder Instance = new InvalidUInt64(); - - InvalidUInt64() - { - - } - - public UInt64 Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IStringDecoder - { - String Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class NilString : IStringDecoder - { - internal static readonly IStringDecoder Instance = new NilString(); - - NilString() - { - - } - - public String Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return null; - } - } - - internal sealed class FixString : IStringDecoder - { - internal static readonly IStringDecoder Instance = new FixString(); - - FixString() - { - - } - - public String Read(byte[] bytes, int offset, out int readSize) - { - var length = bytes[offset] & 0x1F; - readSize = length + 1; - return StringEncoding.UTF8.GetString(bytes, offset + 1, length); - } - } - - internal sealed class Str8String : IStringDecoder - { - internal static readonly IStringDecoder Instance = new Str8String(); - - Str8String() - { - - } - - public String Read(byte[] bytes, int offset, out int readSize) - { - var length = (int)bytes[offset + 1]; - readSize = length + 2; - return StringEncoding.UTF8.GetString(bytes, offset + 2, length); - } - } - - internal sealed class Str16String : IStringDecoder - { - internal static readonly IStringDecoder Instance = new Str16String(); - - Str16String() - { - - } - - public String Read(byte[] bytes, int offset, out int readSize) - { - unchecked - { - var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); - readSize = length + 3; - return StringEncoding.UTF8.GetString(bytes, offset + 3, length); - } - } - } - - internal sealed class Str32String : IStringDecoder - { - internal static readonly IStringDecoder Instance = new Str32String(); - - Str32String() - { - - } - - public String Read(byte[] bytes, int offset, out int readSize) - { - unchecked - { - var length = (int)((uint)(bytes[offset + 1] << 24) | (uint)(bytes[offset + 2] << 16) | (uint)(bytes[offset + 3] << 8) | (uint)bytes[offset + 4]); - readSize = length + 5; - return StringEncoding.UTF8.GetString(bytes, offset + 5, length); - } - } - } - - internal sealed class InvalidString : IStringDecoder - { - internal static readonly IStringDecoder Instance = new InvalidString(); - - InvalidString() - { - - } - - public String Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IStringSegmentDecoder - { - ArraySegment Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class NilStringSegment : IStringSegmentDecoder - { - internal static readonly IStringSegmentDecoder Instance = new NilStringSegment(); - - NilStringSegment() - { - - } - - public ArraySegment Read(byte[] bytes, int offset, out int readSize) - { - readSize = 1; - return new ArraySegment(bytes, offset, 1); - } - } - - internal sealed class FixStringSegment : IStringSegmentDecoder - { - internal static readonly IStringSegmentDecoder Instance = new FixStringSegment(); - - FixStringSegment() - { - - } - - public ArraySegment Read(byte[] bytes, int offset, out int readSize) - { - var length = bytes[offset] & 0x1F; - readSize = length + 1; - return new ArraySegment(bytes, offset + 1, length); - } - } - - internal sealed class Str8StringSegment : IStringSegmentDecoder - { - internal static readonly IStringSegmentDecoder Instance = new Str8StringSegment(); - - Str8StringSegment() - { - - } - - public ArraySegment Read(byte[] bytes, int offset, out int readSize) - { - var length = (int)bytes[offset + 1]; - readSize = length + 2; - return new ArraySegment(bytes, offset + 2, length); - } - } - - internal sealed class Str16StringSegment : IStringSegmentDecoder - { - internal static readonly IStringSegmentDecoder Instance = new Str16StringSegment(); - - Str16StringSegment() - { - - } - - public ArraySegment Read(byte[] bytes, int offset, out int readSize) - { - unchecked - { - var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); - readSize = length + 3; - return new ArraySegment(bytes, offset + 3, length); - } - } - } - - internal sealed class Str32StringSegment : IStringSegmentDecoder - { - internal static readonly IStringSegmentDecoder Instance = new Str32StringSegment(); - - Str32StringSegment() - { - - } - - public ArraySegment Read(byte[] bytes, int offset, out int readSize) - { - unchecked - { - var length = (int)((uint)(bytes[offset + 1] << 24) | (uint)(bytes[offset + 2] << 16) | (uint)(bytes[offset + 3] << 8) | (uint)bytes[offset + 4]); - readSize = length + 5; - return new ArraySegment(bytes, offset + 5, length); - } - } - } - - internal sealed class InvalidStringSegment : IStringSegmentDecoder - { - internal static readonly IStringSegmentDecoder Instance = new InvalidStringSegment(); - - InvalidStringSegment() - { - - } - - public ArraySegment Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IExtDecoder - { - ExtensionResult Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixExt1 : IExtDecoder - { - internal static readonly IExtDecoder Instance = new FixExt1(); - - FixExt1() - { - - } - - public ExtensionResult Read(byte[] bytes, int offset, out int readSize) - { - readSize = 3; - var typeCode = unchecked((sbyte)bytes[offset + 1]); - var body = new byte[1] { bytes[offset + 2] }; // make new bytes is overhead? - return new ExtensionResult(typeCode, body); - } - } - - internal sealed class FixExt2 : IExtDecoder - { - internal static readonly IExtDecoder Instance = new FixExt2(); - - FixExt2() - { - - } - - public ExtensionResult Read(byte[] bytes, int offset, out int readSize) - { - readSize = 4; - var typeCode = unchecked((sbyte)bytes[offset + 1]); - var body = new byte[2] - { - bytes[offset + 2], - bytes[offset + 3], - }; - return new ExtensionResult(typeCode, body); - } - } - - internal sealed class FixExt4 : IExtDecoder - { - internal static readonly IExtDecoder Instance = new FixExt4(); - - FixExt4() - { - - } - - public ExtensionResult Read(byte[] bytes, int offset, out int readSize) - { - readSize = 6; - var typeCode = unchecked((sbyte)bytes[offset + 1]); - var body = new byte[4] - { - bytes[offset + 2], - bytes[offset + 3], - bytes[offset + 4], - bytes[offset + 5], - }; - return new ExtensionResult(typeCode, body); - } - } - - internal sealed class FixExt8 : IExtDecoder - { - internal static readonly IExtDecoder Instance = new FixExt8(); - - FixExt8() - { - - } - - public ExtensionResult Read(byte[] bytes, int offset, out int readSize) - { - readSize = 10; - var typeCode = unchecked((sbyte)bytes[offset + 1]); - var body = new byte[8] - { - bytes[offset + 2], - bytes[offset + 3], - bytes[offset + 4], - bytes[offset + 5], - bytes[offset + 6], - bytes[offset + 7], - bytes[offset + 8], - bytes[offset + 9], - }; - return new ExtensionResult(typeCode, body); - } - } - - internal sealed class FixExt16 : IExtDecoder - { - internal static readonly IExtDecoder Instance = new FixExt16(); - - FixExt16() - { - - } - - public ExtensionResult Read(byte[] bytes, int offset, out int readSize) - { - readSize = 18; - var typeCode = unchecked((sbyte)bytes[offset + 1]); - var body = new byte[16] - { - bytes[offset + 2], - bytes[offset + 3], - bytes[offset + 4], - bytes[offset + 5], - bytes[offset + 6], - bytes[offset + 7], - bytes[offset + 8], - bytes[offset + 9], - bytes[offset + 10], - bytes[offset + 11], - bytes[offset + 12], - bytes[offset + 13], - bytes[offset + 14], - bytes[offset + 15], - bytes[offset + 16], - bytes[offset + 17] - }; - return new ExtensionResult(typeCode, body); - } - } - - internal sealed class Ext8 : IExtDecoder - { - internal static readonly IExtDecoder Instance = new Ext8(); - - Ext8() - { - - } - - public ExtensionResult Read(byte[] bytes, int offset, out int readSize) - { - unchecked - { - var length = bytes[offset + 1]; - var typeCode = unchecked((sbyte)bytes[offset + 2]); - - var body = new byte[length]; - readSize = (int)length + 3; - Buffer.BlockCopy(bytes, offset + 3, body, 0, (int)length); - return new ExtensionResult(typeCode, body); - } - } - } - - internal sealed class Ext16 : IExtDecoder - { - internal static readonly IExtDecoder Instance = new Ext16(); - - Ext16() - { - - } - - public ExtensionResult Read(byte[] bytes, int offset, out int readSize) - { - unchecked - { - var length = (int)((UInt16)(bytes[offset + 1] << 8) | (UInt16)bytes[offset + 2]); - var typeCode = unchecked((sbyte)bytes[offset + 3]); - - var body = new byte[length]; - readSize = length + 4; - Buffer.BlockCopy(bytes, offset + 4, body, 0, (int)length); - return new ExtensionResult(typeCode, body); - } - } - } - - internal sealed class Ext32 : IExtDecoder - { - internal static readonly IExtDecoder Instance = new Ext32(); - - Ext32() - { - - } - - public ExtensionResult Read(byte[] bytes, int offset, out int readSize) - { - unchecked - { - var length = (UInt32)((UInt32)(bytes[offset + 1] << 24) | (UInt32)(bytes[offset + 2] << 16) | (UInt32)(bytes[offset + 3] << 8) | (UInt32)bytes[offset + 4]); - var typeCode = unchecked((sbyte)bytes[offset + 5]); - - var body = new byte[length]; - checked - { - readSize = (int)length + 6; - Buffer.BlockCopy(bytes, offset + 6, body, 0, (int)length); - } - return new ExtensionResult(typeCode, body); - } - } - } - - internal sealed class InvalidExt : IExtDecoder - { - internal static readonly IExtDecoder Instance = new InvalidExt(); - - InvalidExt() - { - - } - - public ExtensionResult Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - - - - - - internal interface IExtHeaderDecoder - { - ExtensionHeader Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixExt1Header : IExtHeaderDecoder - { - internal static readonly IExtHeaderDecoder Instance = new FixExt1Header(); - - FixExt1Header() - { - - } - - public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - var typeCode = unchecked((sbyte)bytes[offset + 1]); - return new ExtensionHeader(typeCode, 1); - } - } - - internal sealed class FixExt2Header : IExtHeaderDecoder - { - internal static readonly IExtHeaderDecoder Instance = new FixExt2Header(); - - FixExt2Header() - { - - } - - public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - var typeCode = unchecked((sbyte)bytes[offset + 1]); - return new ExtensionHeader(typeCode, 2); - } - } - - internal sealed class FixExt4Header : IExtHeaderDecoder - { - internal static readonly IExtHeaderDecoder Instance = new FixExt4Header(); - - FixExt4Header() - { - - } - - public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - var typeCode = unchecked((sbyte)bytes[offset + 1]); - return new ExtensionHeader(typeCode, 4); - } - } - - internal sealed class FixExt8Header : IExtHeaderDecoder - { - internal static readonly IExtHeaderDecoder Instance = new FixExt8Header(); - - FixExt8Header() - { - - } - - public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - var typeCode = unchecked((sbyte)bytes[offset + 1]); - return new ExtensionHeader(typeCode, 8); - } - } - - internal sealed class FixExt16Header : IExtHeaderDecoder - { - internal static readonly IExtHeaderDecoder Instance = new FixExt16Header(); - - FixExt16Header() - { - - } - - public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) - { - readSize = 2; - var typeCode = unchecked((sbyte)bytes[offset + 1]); - return new ExtensionHeader(typeCode, 16); - } - } - - internal sealed class Ext8Header : IExtHeaderDecoder - { - internal static readonly IExtHeaderDecoder Instance = new Ext8Header(); - - Ext8Header() - { - - } - - public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) - { - unchecked - { - var length = bytes[offset + 1]; - var typeCode = unchecked((sbyte)bytes[offset + 2]); - - readSize = 3; - return new ExtensionHeader(typeCode, length); - } - } - } - - internal sealed class Ext16Header : IExtHeaderDecoder - { - internal static readonly IExtHeaderDecoder Instance = new Ext16Header(); - - Ext16Header() - { - - } - - public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) - { - unchecked - { - var length = (UInt32)((UInt16)(bytes[offset + 1] << 8) | (UInt16)bytes[offset + 2]); - var typeCode = unchecked((sbyte)bytes[offset + 3]); - - readSize = 4; - return new ExtensionHeader(typeCode, length); - } - } - } - - internal sealed class Ext32Header : IExtHeaderDecoder - { - internal static readonly IExtHeaderDecoder Instance = new Ext32Header(); - - Ext32Header() - { - - } - - public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) - { - unchecked - { - var length = (UInt32)((UInt32)(bytes[offset + 1] << 24) | (UInt32)(bytes[offset + 2] << 16) | (UInt32)(bytes[offset + 3] << 8) | (UInt32)bytes[offset + 4]); - var typeCode = unchecked((sbyte)bytes[offset + 5]); - - readSize = 6; - return new ExtensionHeader(typeCode, length); - } - } - } - - internal sealed class InvalidExtHeader : IExtHeaderDecoder - { - internal static readonly IExtHeaderDecoder Instance = new InvalidExtHeader(); - - InvalidExtHeader() - { - - } - - public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IDateTimeDecoder - { - DateTime Read(byte[] bytes, int offset, out int readSize); - } - - internal sealed class FixExt4DateTime : IDateTimeDecoder - { - internal static readonly IDateTimeDecoder Instance = new FixExt4DateTime(); - - FixExt4DateTime() - { - - } - - public DateTime Read(byte[] bytes, int offset, out int readSize) - { - var typeCode = unchecked((sbyte)bytes[offset + 1]); - if (typeCode != ReservedMessagePackExtensionTypeCode.DateTime) - { - throw new InvalidOperationException(string.Format("typeCode is invalid. typeCode:{0}", typeCode)); - } - - unchecked - { - var seconds = (UInt32)((UInt32)(bytes[offset + 2] << 24) | (UInt32)(bytes[offset + 3] << 16) | (UInt32)(bytes[offset + 4] << 8) | (UInt32)bytes[offset + 5]); - - readSize = 6; - return DateTimeConstants.UnixEpoch.AddSeconds(seconds); - } - } - } - - internal sealed class FixExt8DateTime : IDateTimeDecoder - { - internal static readonly IDateTimeDecoder Instance = new FixExt8DateTime(); - - FixExt8DateTime() - { - - } - - public DateTime Read(byte[] bytes, int offset, out int readSize) - { - var typeCode = unchecked((sbyte)bytes[offset + 1]); - if (typeCode != ReservedMessagePackExtensionTypeCode.DateTime) - { - throw new InvalidOperationException(string.Format("typeCode is invalid. typeCode:{0}", typeCode)); - } - - var data64 = (UInt64)bytes[offset + 2] << 56 | (UInt64)bytes[offset + 3] << 48 | (UInt64)bytes[offset + 4] << 40 | (UInt64)bytes[offset + 5] << 32 - | (UInt64)bytes[offset + 6] << 24 | (UInt64)bytes[offset + 7] << 16 | (UInt64)bytes[offset + 8] << 8 | (UInt64)bytes[offset + 9]; - - var nanoseconds = (long)(data64 >> 34); - var seconds = data64 & 0x00000003ffffffffL; - - readSize = 10; - return DateTimeConstants.UnixEpoch.AddSeconds(seconds).AddTicks(nanoseconds / DateTimeConstants.NanosecondsPerTick); - } - } - - internal sealed class Ext8DateTime : IDateTimeDecoder - { - internal static readonly IDateTimeDecoder Instance = new Ext8DateTime(); - - Ext8DateTime() - { - - } - - public DateTime Read(byte[] bytes, int offset, out int readSize) - { - var length = checked((byte)bytes[offset + 1]); - var typeCode = unchecked((sbyte)bytes[offset + 2]); - if (length != 12 || typeCode != ReservedMessagePackExtensionTypeCode.DateTime) - { - throw new InvalidOperationException(string.Format("typeCode is invalid. typeCode:{0}", typeCode)); - } - - var nanoseconds = (UInt32)((UInt32)(bytes[offset + 3] << 24) | (UInt32)(bytes[offset + 4] << 16) | (UInt32)(bytes[offset + 5] << 8) | (UInt32)bytes[offset + 6]); - unchecked - { - var seconds = (long)bytes[offset + 7] << 56 | (long)bytes[offset + 8] << 48 | (long)bytes[offset + 9] << 40 | (long)bytes[offset + 10] << 32 - | (long)bytes[offset + 11] << 24 | (long)bytes[offset + 12] << 16 | (long)bytes[offset + 13] << 8 | (long)bytes[offset + 14]; - - readSize = 15; - return DateTimeConstants.UnixEpoch.AddSeconds(seconds).AddTicks(nanoseconds / DateTimeConstants.NanosecondsPerTick); - } - } - } - - internal sealed class InvalidDateTime : IDateTimeDecoder - { - internal static readonly IDateTimeDecoder Instance = new InvalidDateTime(); - - InvalidDateTime() - { - - } - - public DateTime Read(byte[] bytes, int offset, out int readSize) - { - throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); - } - } - - internal interface IReadNextDecoder - { - int Read(byte[] bytes, int offset); - } - - internal sealed class ReadNext1 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNext1(); - ReadNext1() - { - - } - public int Read(byte[] bytes, int offset) { return 1; } - } - - internal sealed class ReadNext2 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNext2(); - ReadNext2() - { - - } - public int Read(byte[] bytes, int offset) { return 2; } - - } - internal sealed class ReadNext3 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNext3(); - ReadNext3() - { - - } - public int Read(byte[] bytes, int offset) { return 3; } - } - internal sealed class ReadNext4 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNext4(); - ReadNext4() - { - - } - public int Read(byte[] bytes, int offset) { return 4; } - } - internal sealed class ReadNext5 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNext5(); - ReadNext5() - { - - } - public int Read(byte[] bytes, int offset) { return 5; } - } - internal sealed class ReadNext6 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNext6(); - ReadNext6() - { - - } - public int Read(byte[] bytes, int offset) { return 6; } - } - - internal sealed class ReadNext9 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNext9(); - ReadNext9() - { - - } - public int Read(byte[] bytes, int offset) { return 9; } - } - internal sealed class ReadNext10 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNext10(); - ReadNext10() - { - - } - public int Read(byte[] bytes, int offset) { return 10; } - } - internal sealed class ReadNext18 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNext18(); - ReadNext18() - { - - } - public int Read(byte[] bytes, int offset) { return 18; } - } - - internal sealed class ReadNextMap : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNextMap(); - ReadNextMap() - { - - } - public int Read(byte[] bytes, int offset) - { - var startOffset = offset; - int readSize; - var length = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); - offset += readSize; - for (int i = 0; i < length; i++) - { - offset += MessagePackBinary.ReadNext(bytes, offset); // key - offset += MessagePackBinary.ReadNext(bytes, offset); // value - } - return offset - startOffset; - } - } - - internal sealed class ReadNextArray : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNextArray(); - ReadNextArray() - { - - } - public int Read(byte[] bytes, int offset) - { - var startOffset = offset; - int readSize; - var length = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - for (int i = 0; i < length; i++) - { - offset += MessagePackBinary.ReadNext(bytes, offset); - } - return offset - startOffset; - } - } - - internal sealed class ReadNextFixStr : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNextFixStr(); - ReadNextFixStr() - { - - } - public int Read(byte[] bytes, int offset) - { - var length = bytes[offset] & 0x1F; - return length + 1; - } - } - - internal sealed class ReadNextStr8 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNextStr8(); - ReadNextStr8() - { - - } - public int Read(byte[] bytes, int offset) - { - var length = (int)bytes[offset + 1]; - return length + 2; - } - } - - internal sealed class ReadNextStr16 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNextStr16(); - ReadNextStr16() - { - - } - public int Read(byte[] bytes, int offset) - { - - var length = (bytes[offset + 1] << 8) | (bytes[offset + 2]); - return length + 3; - } - } - - internal sealed class ReadNextStr32 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNextStr32(); - ReadNextStr32() - { - - } - public int Read(byte[] bytes, int offset) - { - var length = (int)((uint)(bytes[offset + 1] << 24) | (uint)(bytes[offset + 2] << 16) | (uint)(bytes[offset + 3] << 8) | (uint)bytes[offset + 4]); - return length + 5; - } - } - - internal sealed class ReadNextBin8 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNextBin8(); - ReadNextBin8() - { - - } - public int Read(byte[] bytes, int offset) - { - var length = bytes[offset + 1]; - return length + 2; - } - } - - internal sealed class ReadNextBin16 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNextBin16(); - ReadNextBin16() - { - - } - public int Read(byte[] bytes, int offset) - { - - var length = (bytes[offset + 1] << 8) | (bytes[offset + 2]); - return length + 3; - } - } - - internal sealed class ReadNextBin32 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNextBin32(); - ReadNextBin32() - { - - } - public int Read(byte[] bytes, int offset) - { - var length = (bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | (bytes[offset + 4]); - return length + 5; - } - } - - internal sealed class ReadNextExt8 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNextExt8(); - ReadNextExt8() - { - - } - public int Read(byte[] bytes, int offset) - { - var length = bytes[offset + 1]; - return (int)length + 3; - } - } - - internal sealed class ReadNextExt16 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNextExt16(); - ReadNextExt16() - { - - } - public int Read(byte[] bytes, int offset) - { - var length = (int)((UInt16)(bytes[offset + 1] << 8) | (UInt16)bytes[offset + 2]); - return length + 4; - } - } - - internal sealed class ReadNextExt32 : IReadNextDecoder - { - internal static readonly IReadNextDecoder Instance = new ReadNextExt32(); - ReadNextExt32() - { - - } - public int Read(byte[] bytes, int offset) - { - var length = (UInt32)((UInt32)(bytes[offset + 1] << 24) | (UInt32)(bytes[offset + 2] << 16) | (UInt32)(bytes[offset + 3] << 8) | (UInt32)bytes[offset + 4]); - return (int)length + 6; - } - } +using MessagePack.Decoders; +using MessagePack.Internal; +using System; +using System.IO; + +namespace MessagePack +{ + /// + /// Encode/Decode Utility of MessagePack Spec. + /// https://github.com/msgpack/msgpack/blob/master/spec.md + /// + public static partial class MessagePackBinary + { + const int MaxSize = 256; // [0] ~ [255] + const int ArrayMaxSize = 0x7FFFFFC7; // https://msdn.microsoft.com/en-us/library/system.array + + static readonly IMapHeaderDecoder[] mapHeaderDecoders = new IMapHeaderDecoder[MaxSize]; + static readonly IArrayHeaderDecoder[] arrayHeaderDecoders = new IArrayHeaderDecoder[MaxSize]; + static readonly IBooleanDecoder[] booleanDecoders = new IBooleanDecoder[MaxSize]; + static readonly IByteDecoder[] byteDecoders = new IByteDecoder[MaxSize]; + static readonly IBytesDecoder[] bytesDecoders = new IBytesDecoder[MaxSize]; + static readonly IBytesSegmentDecoder[] bytesSegmentDecoders = new IBytesSegmentDecoder[MaxSize]; + static readonly ISByteDecoder[] sbyteDecoders = new ISByteDecoder[MaxSize]; + static readonly ISingleDecoder[] singleDecoders = new ISingleDecoder[MaxSize]; + static readonly IDoubleDecoder[] doubleDecoders = new IDoubleDecoder[MaxSize]; + static readonly IInt16Decoder[] int16Decoders = new IInt16Decoder[MaxSize]; + static readonly IInt32Decoder[] int32Decoders = new IInt32Decoder[MaxSize]; + static readonly IInt64Decoder[] int64Decoders = new IInt64Decoder[MaxSize]; + static readonly IUInt16Decoder[] uint16Decoders = new IUInt16Decoder[MaxSize]; + static readonly IUInt32Decoder[] uint32Decoders = new IUInt32Decoder[MaxSize]; + static readonly IUInt64Decoder[] uint64Decoders = new IUInt64Decoder[MaxSize]; + static readonly IStringDecoder[] stringDecoders = new IStringDecoder[MaxSize]; + static readonly IStringSegmentDecoder[] stringSegmentDecoders = new IStringSegmentDecoder[MaxSize]; + static readonly IExtDecoder[] extDecoders = new IExtDecoder[MaxSize]; + static readonly IExtHeaderDecoder[] extHeaderDecoders = new IExtHeaderDecoder[MaxSize]; + static readonly IDateTimeDecoder[] dateTimeDecoders = new IDateTimeDecoder[MaxSize]; + static readonly IReadNextDecoder[] readNextDecoders = new IReadNextDecoder[MaxSize]; + + static MessagePackBinary() + { + // Init LookupTable. + for (int i = 0; i < MaxSize; i++) + { + mapHeaderDecoders[i] = Decoders.InvalidMapHeader.Instance; + arrayHeaderDecoders[i] = Decoders.InvalidArrayHeader.Instance; + booleanDecoders[i] = Decoders.InvalidBoolean.Instance; + byteDecoders[i] = Decoders.InvalidByte.Instance; + bytesDecoders[i] = Decoders.InvalidBytes.Instance; + bytesSegmentDecoders[i] = Decoders.InvalidBytesSegment.Instance; + sbyteDecoders[i] = Decoders.InvalidSByte.Instance; + singleDecoders[i] = Decoders.InvalidSingle.Instance; + doubleDecoders[i] = Decoders.InvalidDouble.Instance; + int16Decoders[i] = Decoders.InvalidInt16.Instance; + int32Decoders[i] = Decoders.InvalidInt32.Instance; + int64Decoders[i] = Decoders.InvalidInt64.Instance; + uint16Decoders[i] = Decoders.InvalidUInt16.Instance; + uint32Decoders[i] = Decoders.InvalidUInt32.Instance; + uint64Decoders[i] = Decoders.InvalidUInt64.Instance; + stringDecoders[i] = Decoders.InvalidString.Instance; + stringSegmentDecoders[i] = Decoders.InvalidStringSegment.Instance; + extDecoders[i] = Decoders.InvalidExt.Instance; + extHeaderDecoders[i] = Decoders.InvalidExtHeader.Instance; + dateTimeDecoders[i] = Decoders.InvalidDateTime.Instance; + } + + // Number + for (int i = MessagePackCode.MinNegativeFixInt; i <= MessagePackCode.MaxNegativeFixInt; i++) + { + sbyteDecoders[i] = Decoders.FixSByte.Instance; + int16Decoders[i] = Decoders.FixNegativeInt16.Instance; + int32Decoders[i] = Decoders.FixNegativeInt32.Instance; + int64Decoders[i] = Decoders.FixNegativeInt64.Instance; + singleDecoders[i] = Decoders.FixNegativeFloat.Instance; + doubleDecoders[i] = Decoders.FixNegativeDouble.Instance; + readNextDecoders[i] = Decoders.ReadNext1.Instance; + } + for (int i = MessagePackCode.MinFixInt; i <= MessagePackCode.MaxFixInt; i++) + { + byteDecoders[i] = Decoders.FixByte.Instance; + sbyteDecoders[i] = Decoders.FixSByte.Instance; + int16Decoders[i] = Decoders.FixInt16.Instance; + int32Decoders[i] = Decoders.FixInt32.Instance; + int64Decoders[i] = Decoders.FixInt64.Instance; + uint16Decoders[i] = Decoders.FixUInt16.Instance; + uint32Decoders[i] = Decoders.FixUInt32.Instance; + uint64Decoders[i] = Decoders.FixUInt64.Instance; + singleDecoders[i] = Decoders.FixFloat.Instance; + doubleDecoders[i] = Decoders.FixDouble.Instance; + readNextDecoders[i] = Decoders.ReadNext1.Instance; + } + + byteDecoders[MessagePackCode.UInt8] = Decoders.UInt8Byte.Instance; + sbyteDecoders[MessagePackCode.Int8] = Decoders.Int8SByte.Instance; + int16Decoders[MessagePackCode.UInt8] = Decoders.UInt8Int16.Instance; + int16Decoders[MessagePackCode.UInt16] = Decoders.UInt16Int16.Instance; + int16Decoders[MessagePackCode.Int8] = Decoders.Int8Int16.Instance; + int16Decoders[MessagePackCode.Int16] = Decoders.Int16Int16.Instance; + int32Decoders[MessagePackCode.UInt8] = Decoders.UInt8Int32.Instance; + int32Decoders[MessagePackCode.UInt16] = Decoders.UInt16Int32.Instance; + int32Decoders[MessagePackCode.UInt32] = Decoders.UInt32Int32.Instance; + int32Decoders[MessagePackCode.Int8] = Decoders.Int8Int32.Instance; + int32Decoders[MessagePackCode.Int16] = Decoders.Int16Int32.Instance; + int32Decoders[MessagePackCode.Int32] = Decoders.Int32Int32.Instance; + int64Decoders[MessagePackCode.UInt8] = Decoders.UInt8Int64.Instance; + int64Decoders[MessagePackCode.UInt16] = Decoders.UInt16Int64.Instance; + int64Decoders[MessagePackCode.UInt32] = Decoders.UInt32Int64.Instance; + int64Decoders[MessagePackCode.UInt64] = Decoders.UInt64Int64.Instance; + int64Decoders[MessagePackCode.Int8] = Decoders.Int8Int64.Instance; + int64Decoders[MessagePackCode.Int16] = Decoders.Int16Int64.Instance; + int64Decoders[MessagePackCode.Int32] = Decoders.Int32Int64.Instance; + int64Decoders[MessagePackCode.Int64] = Decoders.Int64Int64.Instance; + uint16Decoders[MessagePackCode.UInt8] = Decoders.UInt8UInt16.Instance; + uint16Decoders[MessagePackCode.UInt16] = Decoders.UInt16UInt16.Instance; + uint32Decoders[MessagePackCode.UInt8] = Decoders.UInt8UInt32.Instance; + uint32Decoders[MessagePackCode.UInt16] = Decoders.UInt16UInt32.Instance; + uint32Decoders[MessagePackCode.UInt32] = Decoders.UInt32UInt32.Instance; + uint64Decoders[MessagePackCode.UInt8] = Decoders.UInt8UInt64.Instance; + uint64Decoders[MessagePackCode.UInt16] = Decoders.UInt16UInt64.Instance; + uint64Decoders[MessagePackCode.UInt32] = Decoders.UInt32UInt64.Instance; + uint64Decoders[MessagePackCode.UInt64] = Decoders.UInt64UInt64.Instance; + + singleDecoders[MessagePackCode.Float32] = Decoders.Float32Single.Instance; + singleDecoders[MessagePackCode.Int8] = Decoders.Int8Single.Instance; + singleDecoders[MessagePackCode.Int16] = Decoders.Int16Single.Instance; + singleDecoders[MessagePackCode.Int32] = Decoders.Int32Single.Instance; + singleDecoders[MessagePackCode.Int64] = Decoders.Int64Single.Instance; + singleDecoders[MessagePackCode.UInt8] = Decoders.UInt8Single.Instance; + singleDecoders[MessagePackCode.UInt16] = Decoders.UInt16Single.Instance; + singleDecoders[MessagePackCode.UInt32] = Decoders.UInt32Single.Instance; + singleDecoders[MessagePackCode.UInt64] = Decoders.UInt64Single.Instance; + + doubleDecoders[MessagePackCode.Float32] = Decoders.Float32Double.Instance; + doubleDecoders[MessagePackCode.Float64] = Decoders.Float64Double.Instance; + doubleDecoders[MessagePackCode.Int8] = Decoders.Int8Double.Instance; + doubleDecoders[MessagePackCode.Int16] = Decoders.Int16Double.Instance; + doubleDecoders[MessagePackCode.Int32] = Decoders.Int32Double.Instance; + doubleDecoders[MessagePackCode.Int64] = Decoders.Int64Double.Instance; + doubleDecoders[MessagePackCode.UInt8] = Decoders.UInt8Double.Instance; + doubleDecoders[MessagePackCode.UInt16] = Decoders.UInt16Double.Instance; + doubleDecoders[MessagePackCode.UInt32] = Decoders.UInt32Double.Instance; + doubleDecoders[MessagePackCode.UInt64] = Decoders.UInt64Double.Instance; + + readNextDecoders[MessagePackCode.Int8] = Decoders.ReadNext2.Instance; + readNextDecoders[MessagePackCode.Int16] = Decoders.ReadNext3.Instance; + readNextDecoders[MessagePackCode.Int32] = Decoders.ReadNext5.Instance; + readNextDecoders[MessagePackCode.Int64] = Decoders.ReadNext9.Instance; + readNextDecoders[MessagePackCode.UInt8] = Decoders.ReadNext2.Instance; + readNextDecoders[MessagePackCode.UInt16] = Decoders.ReadNext3.Instance; + readNextDecoders[MessagePackCode.UInt32] = Decoders.ReadNext5.Instance; + readNextDecoders[MessagePackCode.UInt64] = Decoders.ReadNext9.Instance; + readNextDecoders[MessagePackCode.Float32] = Decoders.ReadNext5.Instance; + readNextDecoders[MessagePackCode.Float64] = Decoders.ReadNext9.Instance; + + // Map + for (int i = MessagePackCode.MinFixMap; i <= MessagePackCode.MaxFixMap; i++) + { + mapHeaderDecoders[i] = Decoders.FixMapHeader.Instance; + readNextDecoders[i] = Decoders.ReadNext1.Instance; + } + mapHeaderDecoders[MessagePackCode.Map16] = Decoders.Map16Header.Instance; + mapHeaderDecoders[MessagePackCode.Map32] = Decoders.Map32Header.Instance; + readNextDecoders[MessagePackCode.Map16] = Decoders.ReadNextMap.Instance; + readNextDecoders[MessagePackCode.Map32] = Decoders.ReadNextMap.Instance; + + // Array + for (int i = MessagePackCode.MinFixArray; i <= MessagePackCode.MaxFixArray; i++) + { + arrayHeaderDecoders[i] = Decoders.FixArrayHeader.Instance; + readNextDecoders[i] = Decoders.ReadNext1.Instance; + } + arrayHeaderDecoders[MessagePackCode.Array16] = Decoders.Array16Header.Instance; + arrayHeaderDecoders[MessagePackCode.Array32] = Decoders.Array32Header.Instance; + readNextDecoders[MessagePackCode.Array16] = Decoders.ReadNextArray.Instance; + readNextDecoders[MessagePackCode.Array32] = Decoders.ReadNextArray.Instance; + + // Str + for (int i = MessagePackCode.MinFixStr; i <= MessagePackCode.MaxFixStr; i++) + { + stringDecoders[i] = Decoders.FixString.Instance; + stringSegmentDecoders[i] = Decoders.FixStringSegment.Instance; + readNextDecoders[i] = Decoders.ReadNextFixStr.Instance; + } + + stringDecoders[MessagePackCode.Str8] = Decoders.Str8String.Instance; + stringDecoders[MessagePackCode.Str16] = Decoders.Str16String.Instance; + stringDecoders[MessagePackCode.Str32] = Decoders.Str32String.Instance; + stringSegmentDecoders[MessagePackCode.Str8] = Decoders.Str8StringSegment.Instance; + stringSegmentDecoders[MessagePackCode.Str16] = Decoders.Str16StringSegment.Instance; + stringSegmentDecoders[MessagePackCode.Str32] = Decoders.Str32StringSegment.Instance; + readNextDecoders[MessagePackCode.Str8] = Decoders.ReadNextStr8.Instance; + readNextDecoders[MessagePackCode.Str16] = Decoders.ReadNextStr16.Instance; + readNextDecoders[MessagePackCode.Str32] = Decoders.ReadNextStr32.Instance; + + // Others + stringDecoders[MessagePackCode.Nil] = Decoders.NilString.Instance; + stringSegmentDecoders[MessagePackCode.Nil] = Decoders.NilStringSegment.Instance; + bytesDecoders[MessagePackCode.Nil] = Decoders.NilBytes.Instance; + bytesSegmentDecoders[MessagePackCode.Nil] = Decoders.NilBytesSegment.Instance; + readNextDecoders[MessagePackCode.Nil] = Decoders.ReadNext1.Instance; + + booleanDecoders[MessagePackCode.False] = Decoders.False.Instance; + booleanDecoders[MessagePackCode.True] = Decoders.True.Instance; + readNextDecoders[MessagePackCode.False] = Decoders.ReadNext1.Instance; + readNextDecoders[MessagePackCode.True] = Decoders.ReadNext1.Instance; + + bytesDecoders[MessagePackCode.Bin8] = Decoders.Bin8Bytes.Instance; + bytesDecoders[MessagePackCode.Bin16] = Decoders.Bin16Bytes.Instance; + bytesDecoders[MessagePackCode.Bin32] = Decoders.Bin32Bytes.Instance; + bytesSegmentDecoders[MessagePackCode.Bin8] = Decoders.Bin8BytesSegment.Instance; + bytesSegmentDecoders[MessagePackCode.Bin16] = Decoders.Bin16BytesSegment.Instance; + bytesSegmentDecoders[MessagePackCode.Bin32] = Decoders.Bin32BytesSegment.Instance; + readNextDecoders[MessagePackCode.Bin8] = Decoders.ReadNextBin8.Instance; + readNextDecoders[MessagePackCode.Bin16] = Decoders.ReadNextBin16.Instance; + readNextDecoders[MessagePackCode.Bin32] = Decoders.ReadNextBin32.Instance; + + // Ext + extDecoders[MessagePackCode.FixExt1] = Decoders.FixExt1.Instance; + extDecoders[MessagePackCode.FixExt2] = Decoders.FixExt2.Instance; + extDecoders[MessagePackCode.FixExt4] = Decoders.FixExt4.Instance; + extDecoders[MessagePackCode.FixExt8] = Decoders.FixExt8.Instance; + extDecoders[MessagePackCode.FixExt16] = Decoders.FixExt16.Instance; + extDecoders[MessagePackCode.Ext8] = Decoders.Ext8.Instance; + extDecoders[MessagePackCode.Ext16] = Decoders.Ext16.Instance; + extDecoders[MessagePackCode.Ext32] = Decoders.Ext32.Instance; + + extHeaderDecoders[MessagePackCode.FixExt1] = Decoders.FixExt1Header.Instance; + extHeaderDecoders[MessagePackCode.FixExt2] = Decoders.FixExt2Header.Instance; + extHeaderDecoders[MessagePackCode.FixExt4] = Decoders.FixExt4Header.Instance; + extHeaderDecoders[MessagePackCode.FixExt8] = Decoders.FixExt8Header.Instance; + extHeaderDecoders[MessagePackCode.FixExt16] = Decoders.FixExt16Header.Instance; + extHeaderDecoders[MessagePackCode.Ext8] = Decoders.Ext8Header.Instance; + extHeaderDecoders[MessagePackCode.Ext16] = Decoders.Ext16Header.Instance; + extHeaderDecoders[MessagePackCode.Ext32] = Decoders.Ext32Header.Instance; + + + readNextDecoders[MessagePackCode.FixExt1] = Decoders.ReadNext3.Instance; + readNextDecoders[MessagePackCode.FixExt2] = Decoders.ReadNext4.Instance; + readNextDecoders[MessagePackCode.FixExt4] = Decoders.ReadNext6.Instance; + readNextDecoders[MessagePackCode.FixExt8] = Decoders.ReadNext10.Instance; + readNextDecoders[MessagePackCode.FixExt16] = Decoders.ReadNext18.Instance; + readNextDecoders[MessagePackCode.Ext8] = Decoders.ReadNextExt8.Instance; + readNextDecoders[MessagePackCode.Ext16] = Decoders.ReadNextExt16.Instance; + readNextDecoders[MessagePackCode.Ext32] = Decoders.ReadNextExt32.Instance; + + // DateTime + dateTimeDecoders[MessagePackCode.FixExt4] = Decoders.FixExt4DateTime.Instance; + dateTimeDecoders[MessagePackCode.FixExt8] = Decoders.FixExt8DateTime.Instance; + dateTimeDecoders[MessagePackCode.Ext8] = Decoders.Ext8DateTime.Instance; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static void EnsureCapacity(ref byte[] bytes, int offset, int appendLength) + { + var newLength = offset + appendLength; + + // If null(most case fisrt time) fill byte. + if (bytes == null) + { + bytes = new byte[newLength]; + return; + } + + // like MemoryStream.EnsureCapacity + var current = bytes.Length; + if (newLength > current) + { + int num = newLength; + if (num < 256) + { + num = 256; + FastResize(ref bytes, num); + return; + } + + if (current == ArrayMaxSize) + { + throw new InvalidOperationException("byte[] size reached maximum size of array(0x7FFFFFC7), can not write to single byte[]. Details: https://msdn.microsoft.com/en-us/library/system.array"); + } + + var newSize = unchecked((current * 2)); + if (newSize < 0) // overflow + { + num = ArrayMaxSize; + } + else + { + if (num < newSize) + { + num = newSize; + } + } + + FastResize(ref bytes, num); + } + } + + // Buffer.BlockCopy version of Array.Resize +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static void FastResize(ref byte[] array, int newSize) + { + if (newSize < 0) throw new ArgumentOutOfRangeException("newSize"); + + byte[] array2 = array; + if (array2 == null) + { + array = new byte[newSize]; + return; + } + + if (array2.Length != newSize) + { + byte[] array3 = new byte[newSize]; + Buffer.BlockCopy(array2, 0, array3, 0, (array2.Length > newSize) ? newSize : array2.Length); + array = array3; + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static byte[] FastCloneWithResize(byte[] array, int newSize) + { + if (newSize < 0) throw new ArgumentOutOfRangeException("newSize"); + + byte[] array2 = array; + if (array2 == null) + { + array = new byte[newSize]; + return array; + } + + byte[] array3 = new byte[newSize]; + Buffer.BlockCopy(array2, 0, array3, 0, (array2.Length > newSize) ? newSize : array2.Length); + return array3; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static MessagePackType GetMessagePackType(byte[] bytes, int offset) + { + return MessagePackCode.ToMessagePackType(bytes[offset]); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int ReadNext(byte[] bytes, int offset) + { + return readNextDecoders[bytes[offset]].Read(bytes, offset); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int ReadNextBlock(byte[] bytes, int offset) + { + switch (GetMessagePackType(bytes, offset)) + { + case MessagePackType.Unknown: + case MessagePackType.Integer: + case MessagePackType.Nil: + case MessagePackType.Boolean: + case MessagePackType.Float: + case MessagePackType.String: + case MessagePackType.Binary: + case MessagePackType.Extension: + default: + return ReadNext(bytes, offset); + case MessagePackType.Array: + { + var startOffset = offset; + int readSize; + var header = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + for (int i = 0; i < header; i++) + { + offset += ReadNextBlock(bytes, offset); + } + return offset - startOffset; + } + case MessagePackType.Map: + { + var startOffset = offset; + int readSize; + var header = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); + offset += readSize; + for (int i = 0; i < header; i++) + { + offset += ReadNextBlock(bytes, offset); // read key block + offset += ReadNextBlock(bytes, offset); // read value block + } + return offset - startOffset; + } + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteNil(ref byte[] bytes, int offset) + { + EnsureCapacity(ref bytes, offset, 1); + + bytes[offset] = MessagePackCode.Nil; + return 1; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static Nil ReadNil(byte[] bytes, int offset, out int readSize) + { + if (bytes[offset] == MessagePackCode.Nil) + { + readSize = 1; + return Nil.Default; + } + else + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static bool IsNil(byte[] bytes, int offset) + { + return bytes[offset] == MessagePackCode.Nil; + } + + public static int WriteRaw(ref byte[] bytes, int offset, byte[] rawMessagePackBlock) + { + EnsureCapacity(ref bytes, offset, rawMessagePackBlock.Length); + +#if NETSTANDARD + if (UnsafeMemory.Is32Bit) + { + switch (rawMessagePackBlock.Length) + { + case 1: + UnsafeMemory32.WriteRaw1(ref bytes, offset, rawMessagePackBlock); + break; + case 2: + UnsafeMemory32.WriteRaw2(ref bytes, offset, rawMessagePackBlock); + break; + case 3: + UnsafeMemory32.WriteRaw3(ref bytes, offset, rawMessagePackBlock); + break; + case 4: + UnsafeMemory32.WriteRaw4(ref bytes, offset, rawMessagePackBlock); + break; + case 5: + UnsafeMemory32.WriteRaw5(ref bytes, offset, rawMessagePackBlock); + break; + case 6: + UnsafeMemory32.WriteRaw6(ref bytes, offset, rawMessagePackBlock); + break; + case 7: + UnsafeMemory32.WriteRaw7(ref bytes, offset, rawMessagePackBlock); + break; + case 8: + UnsafeMemory32.WriteRaw8(ref bytes, offset, rawMessagePackBlock); + break; + case 9: + UnsafeMemory32.WriteRaw9(ref bytes, offset, rawMessagePackBlock); + break; + case 10: + UnsafeMemory32.WriteRaw10(ref bytes, offset, rawMessagePackBlock); + break; + case 11: + UnsafeMemory32.WriteRaw11(ref bytes, offset, rawMessagePackBlock); + break; + case 12: + UnsafeMemory32.WriteRaw12(ref bytes, offset, rawMessagePackBlock); + break; + case 13: + UnsafeMemory32.WriteRaw13(ref bytes, offset, rawMessagePackBlock); + break; + case 14: + UnsafeMemory32.WriteRaw14(ref bytes, offset, rawMessagePackBlock); + break; + case 15: + UnsafeMemory32.WriteRaw15(ref bytes, offset, rawMessagePackBlock); + break; + case 16: + UnsafeMemory32.WriteRaw16(ref bytes, offset, rawMessagePackBlock); + break; + case 17: + UnsafeMemory32.WriteRaw17(ref bytes, offset, rawMessagePackBlock); + break; + case 18: + UnsafeMemory32.WriteRaw18(ref bytes, offset, rawMessagePackBlock); + break; + case 19: + UnsafeMemory32.WriteRaw19(ref bytes, offset, rawMessagePackBlock); + break; + case 20: + UnsafeMemory32.WriteRaw20(ref bytes, offset, rawMessagePackBlock); + break; + case 21: + UnsafeMemory32.WriteRaw21(ref bytes, offset, rawMessagePackBlock); + break; + case 22: + UnsafeMemory32.WriteRaw22(ref bytes, offset, rawMessagePackBlock); + break; + case 23: + UnsafeMemory32.WriteRaw23(ref bytes, offset, rawMessagePackBlock); + break; + case 24: + UnsafeMemory32.WriteRaw24(ref bytes, offset, rawMessagePackBlock); + break; + case 25: + UnsafeMemory32.WriteRaw25(ref bytes, offset, rawMessagePackBlock); + break; + case 26: + UnsafeMemory32.WriteRaw26(ref bytes, offset, rawMessagePackBlock); + break; + case 27: + UnsafeMemory32.WriteRaw27(ref bytes, offset, rawMessagePackBlock); + break; + case 28: + UnsafeMemory32.WriteRaw28(ref bytes, offset, rawMessagePackBlock); + break; + case 29: + UnsafeMemory32.WriteRaw29(ref bytes, offset, rawMessagePackBlock); + break; + case 30: + UnsafeMemory32.WriteRaw30(ref bytes, offset, rawMessagePackBlock); + break; + case 31: + UnsafeMemory32.WriteRaw31(ref bytes, offset, rawMessagePackBlock); + break; + default: + Buffer.BlockCopy(rawMessagePackBlock, 0, bytes, offset, rawMessagePackBlock.Length); + break; + } + } + else + { + switch (rawMessagePackBlock.Length) + { + case 1: + UnsafeMemory64.WriteRaw1(ref bytes, offset, rawMessagePackBlock); + break; + case 2: + UnsafeMemory64.WriteRaw2(ref bytes, offset, rawMessagePackBlock); + break; + case 3: + UnsafeMemory64.WriteRaw3(ref bytes, offset, rawMessagePackBlock); + break; + case 4: + UnsafeMemory64.WriteRaw4(ref bytes, offset, rawMessagePackBlock); + break; + case 5: + UnsafeMemory64.WriteRaw5(ref bytes, offset, rawMessagePackBlock); + break; + case 6: + UnsafeMemory64.WriteRaw6(ref bytes, offset, rawMessagePackBlock); + break; + case 7: + UnsafeMemory64.WriteRaw7(ref bytes, offset, rawMessagePackBlock); + break; + case 8: + UnsafeMemory64.WriteRaw8(ref bytes, offset, rawMessagePackBlock); + break; + case 9: + UnsafeMemory64.WriteRaw9(ref bytes, offset, rawMessagePackBlock); + break; + case 10: + UnsafeMemory64.WriteRaw10(ref bytes, offset, rawMessagePackBlock); + break; + case 11: + UnsafeMemory64.WriteRaw11(ref bytes, offset, rawMessagePackBlock); + break; + case 12: + UnsafeMemory64.WriteRaw12(ref bytes, offset, rawMessagePackBlock); + break; + case 13: + UnsafeMemory64.WriteRaw13(ref bytes, offset, rawMessagePackBlock); + break; + case 14: + UnsafeMemory64.WriteRaw14(ref bytes, offset, rawMessagePackBlock); + break; + case 15: + UnsafeMemory64.WriteRaw15(ref bytes, offset, rawMessagePackBlock); + break; + case 16: + UnsafeMemory64.WriteRaw16(ref bytes, offset, rawMessagePackBlock); + break; + case 17: + UnsafeMemory64.WriteRaw17(ref bytes, offset, rawMessagePackBlock); + break; + case 18: + UnsafeMemory64.WriteRaw18(ref bytes, offset, rawMessagePackBlock); + break; + case 19: + UnsafeMemory64.WriteRaw19(ref bytes, offset, rawMessagePackBlock); + break; + case 20: + UnsafeMemory64.WriteRaw20(ref bytes, offset, rawMessagePackBlock); + break; + case 21: + UnsafeMemory64.WriteRaw21(ref bytes, offset, rawMessagePackBlock); + break; + case 22: + UnsafeMemory64.WriteRaw22(ref bytes, offset, rawMessagePackBlock); + break; + case 23: + UnsafeMemory64.WriteRaw23(ref bytes, offset, rawMessagePackBlock); + break; + case 24: + UnsafeMemory64.WriteRaw24(ref bytes, offset, rawMessagePackBlock); + break; + case 25: + UnsafeMemory64.WriteRaw25(ref bytes, offset, rawMessagePackBlock); + break; + case 26: + UnsafeMemory64.WriteRaw26(ref bytes, offset, rawMessagePackBlock); + break; + case 27: + UnsafeMemory64.WriteRaw27(ref bytes, offset, rawMessagePackBlock); + break; + case 28: + UnsafeMemory64.WriteRaw28(ref bytes, offset, rawMessagePackBlock); + break; + case 29: + UnsafeMemory64.WriteRaw29(ref bytes, offset, rawMessagePackBlock); + break; + case 30: + UnsafeMemory64.WriteRaw30(ref bytes, offset, rawMessagePackBlock); + break; + case 31: + UnsafeMemory64.WriteRaw31(ref bytes, offset, rawMessagePackBlock); + break; + default: + Buffer.BlockCopy(rawMessagePackBlock, 0, bytes, offset, rawMessagePackBlock.Length); + break; + } + } +#else + Buffer.BlockCopy(rawMessagePackBlock, 0, bytes, offset, rawMessagePackBlock.Length); +#endif + return rawMessagePackBlock.Length; + } + + /// + /// Unsafe. If value is guranteed 0 ~ MessagePackRange.MaxFixMapCount(15), can use this method. + /// + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteFixedMapHeaderUnsafe(ref byte[] bytes, int offset, int count) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = (byte)(MessagePackCode.MinFixMap | count); + return 1; + } + + /// + /// Write map count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteMapHeader(ref byte[] bytes, int offset, int count) + { + checked + { + return WriteMapHeader(ref bytes, offset, (uint)count); + } + } + + /// + /// Write map count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteMapHeader(ref byte[] bytes, int offset, uint count) + { + if (count <= MessagePackRange.MaxFixMapCount) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = (byte)(MessagePackCode.MinFixMap | count); + return 1; + } + else if (count <= ushort.MaxValue) + { + EnsureCapacity(ref bytes, offset, 3); + unchecked + { + bytes[offset] = MessagePackCode.Map16; + bytes[offset + 1] = (byte)(count >> 8); + bytes[offset + 2] = (byte)(count); + } + return 3; + } + else + { + EnsureCapacity(ref bytes, offset, 5); + unchecked + { + bytes[offset] = MessagePackCode.Map32; + bytes[offset + 1] = (byte)(count >> 24); + bytes[offset + 2] = (byte)(count >> 16); + bytes[offset + 3] = (byte)(count >> 8); + bytes[offset + 4] = (byte)(count); + } + return 5; + } + } + + /// + /// Write map format header, always use map32 format(length is fixed, 5). + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteMapHeaderForceMap32Block(ref byte[] bytes, int offset, uint count) + { + EnsureCapacity(ref bytes, offset, 5); + unchecked + { + bytes[offset] = MessagePackCode.Map32; + bytes[offset + 1] = (byte)(count >> 24); + bytes[offset + 2] = (byte)(count >> 16); + bytes[offset + 3] = (byte)(count >> 8); + bytes[offset + 4] = (byte)(count); + } + return 5; + } + + /// + /// Return map count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int ReadMapHeader(byte[] bytes, int offset, out int readSize) + { + checked + { + return (int)mapHeaderDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + } + + /// + /// Return map count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static uint ReadMapHeaderRaw(byte[] bytes, int offset, out int readSize) + { + return mapHeaderDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int GetArrayHeaderLength(int count) + { + if (count <= MessagePackRange.MaxFixArrayCount) + { + return 1; + } + else if (count <= ushort.MaxValue) + { + return 3; + } + else + { + return 5; + } + } + + /// + /// Unsafe. If value is guranteed 0 ~ MessagePackRange.MaxFixArrayCount(15), can use this method. + /// + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteFixedArrayHeaderUnsafe(ref byte[] bytes, int offset, int count) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = (byte)(MessagePackCode.MinFixArray | count); + return 1; + } + + /// + /// Write array count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteArrayHeader(ref byte[] bytes, int offset, int count) + { + checked + { + return WriteArrayHeader(ref bytes, offset, (uint)count); + } + } + + /// + /// Write array count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteArrayHeader(ref byte[] bytes, int offset, uint count) + { + if (count <= MessagePackRange.MaxFixArrayCount) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = (byte)(MessagePackCode.MinFixArray | count); + return 1; + } + else if (count <= ushort.MaxValue) + { + EnsureCapacity(ref bytes, offset, 3); + unchecked + { + bytes[offset] = MessagePackCode.Array16; + bytes[offset + 1] = (byte)(count >> 8); + bytes[offset + 2] = (byte)(count); + } + return 3; + } + else + { + EnsureCapacity(ref bytes, offset, 5); + unchecked + { + bytes[offset] = MessagePackCode.Array32; + bytes[offset + 1] = (byte)(count >> 24); + bytes[offset + 2] = (byte)(count >> 16); + bytes[offset + 3] = (byte)(count >> 8); + bytes[offset + 4] = (byte)(count); + } + return 5; + } + } + + /// + /// Write array format header, always use array32 format(length is fixed, 5). + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteArrayHeaderForceArray32Block(ref byte[] bytes, int offset, uint count) + { + EnsureCapacity(ref bytes, offset, 5); + unchecked + { + bytes[offset] = MessagePackCode.Array32; + bytes[offset + 1] = (byte)(count >> 24); + bytes[offset + 2] = (byte)(count >> 16); + bytes[offset + 3] = (byte)(count >> 8); + bytes[offset + 4] = (byte)(count); + } + return 5; + } + + /// + /// Return array count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int ReadArrayHeader(byte[] bytes, int offset, out int readSize) + { + checked + { + return (int)arrayHeaderDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + } + + /// + /// Return array count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static uint ReadArrayHeaderRaw(byte[] bytes, int offset, out int readSize) + { + return arrayHeaderDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteBoolean(ref byte[] bytes, int offset, bool value) + { + EnsureCapacity(ref bytes, offset, 1); + + bytes[offset] = (value ? MessagePackCode.True : MessagePackCode.False); + return 1; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static bool ReadBoolean(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return booleanDecoders[bytes[offset]].Read(); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteByte(ref byte[] bytes, int offset, byte value) + { + if (value <= MessagePackCode.MaxFixInt) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = value; + return 1; + } + else + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.UInt8; + bytes[offset + 1] = value; + return 2; + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteByteForceByteBlock(ref byte[] bytes, int offset, byte value) + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.UInt8; + bytes[offset + 1] = value; + return 2; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static byte ReadByte(byte[] bytes, int offset, out int readSize) + { + return byteDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteBytes(ref byte[] bytes, int offset, byte[] value) + { + if (value == null) + { + return WriteNil(ref bytes, offset); + } + else + { + return WriteBytes(ref bytes, offset, value, 0, value.Length); + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteBytes(ref byte[] dest, int dstOffset, byte[] src, int srcOffset, int count) + { + if (src == null) + { + return WriteNil(ref dest, dstOffset); + } + + if (count <= byte.MaxValue) + { + var size = count + 2; + EnsureCapacity(ref dest, dstOffset, size); + + dest[dstOffset] = MessagePackCode.Bin8; + dest[dstOffset + 1] = (byte)count; + + Buffer.BlockCopy(src, srcOffset, dest, dstOffset + 2, count); + return size; + } + else if (count <= UInt16.MaxValue) + { + var size = count + 3; + EnsureCapacity(ref dest, dstOffset, size); + + unchecked + { + dest[dstOffset] = MessagePackCode.Bin16; + dest[dstOffset + 1] = (byte)(count >> 8); + dest[dstOffset + 2] = (byte)(count); + } + + Buffer.BlockCopy(src, srcOffset, dest, dstOffset + 3, count); + return size; + } + else + { + var size = count + 5; + EnsureCapacity(ref dest, dstOffset, size); + + unchecked + { + dest[dstOffset] = MessagePackCode.Bin32; + dest[dstOffset + 1] = (byte)(count >> 24); + dest[dstOffset + 2] = (byte)(count >> 16); + dest[dstOffset + 3] = (byte)(count >> 8); + dest[dstOffset + 4] = (byte)(count); + } + + Buffer.BlockCopy(src, srcOffset, dest, dstOffset + 5, count); + return size; + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static byte[] ReadBytes(byte[] bytes, int offset, out int readSize) + { + return bytesDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static ArraySegment ReadBytesSegment(byte[] bytes, int offset, out int readSize) + { + return bytesSegmentDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteSByte(ref byte[] bytes, int offset, sbyte value) + { + if (value < MessagePackRange.MinFixNegativeInt) + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.Int8; + bytes[offset + 1] = unchecked((byte)(value)); + return 2; + } + else + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = unchecked((byte)value); + return 1; + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteSByteForceSByteBlock(ref byte[] bytes, int offset, sbyte value) + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.Int8; + bytes[offset + 1] = unchecked((byte)(value)); + return 2; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static sbyte ReadSByte(byte[] bytes, int offset, out int readSize) + { + return sbyteDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteSingle(ref byte[] bytes, int offset, float value) + { + EnsureCapacity(ref bytes, offset, 5); + + bytes[offset] = MessagePackCode.Float32; + + var num = new Float32Bits(value); + if (BitConverter.IsLittleEndian) + { + bytes[offset + 1] = num.Byte3; + bytes[offset + 2] = num.Byte2; + bytes[offset + 3] = num.Byte1; + bytes[offset + 4] = num.Byte0; + } + else + { + bytes[offset + 1] = num.Byte0; + bytes[offset + 2] = num.Byte1; + bytes[offset + 3] = num.Byte2; + bytes[offset + 4] = num.Byte3; + } + + return 5; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static float ReadSingle(byte[] bytes, int offset, out int readSize) + { + return singleDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteDouble(ref byte[] bytes, int offset, double value) + { + EnsureCapacity(ref bytes, offset, 9); + + bytes[offset] = MessagePackCode.Float64; + + var num = new Float64Bits(value); + if (BitConverter.IsLittleEndian) + { + bytes[offset + 1] = num.Byte7; + bytes[offset + 2] = num.Byte6; + bytes[offset + 3] = num.Byte5; + bytes[offset + 4] = num.Byte4; + bytes[offset + 5] = num.Byte3; + bytes[offset + 6] = num.Byte2; + bytes[offset + 7] = num.Byte1; + bytes[offset + 8] = num.Byte0; + } + else + { + bytes[offset + 1] = num.Byte0; + bytes[offset + 2] = num.Byte1; + bytes[offset + 3] = num.Byte2; + bytes[offset + 4] = num.Byte3; + bytes[offset + 5] = num.Byte4; + bytes[offset + 6] = num.Byte5; + bytes[offset + 7] = num.Byte6; + bytes[offset + 8] = num.Byte7; + } + + return 9; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static double ReadDouble(byte[] bytes, int offset, out int readSize) + { + return doubleDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteInt16(ref byte[] bytes, int offset, short value) + { + if (value >= 0) + { + // positive int(use uint) + if (value <= MessagePackRange.MaxFixPositiveInt) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = unchecked((byte)value); + return 1; + } + else if (value <= byte.MaxValue) + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.UInt8; + bytes[offset + 1] = unchecked((byte)value); + return 2; + } + else + { + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.UInt16; + bytes[offset + 1] = unchecked((byte)(value >> 8)); + bytes[offset + 2] = unchecked((byte)value); + return 3; + } + } + else + { + // negative int(use int) + if (MessagePackRange.MinFixNegativeInt <= value) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = unchecked((byte)value); + return 1; + } + else if (sbyte.MinValue <= value) + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.Int8; + bytes[offset + 1] = unchecked((byte)value); + return 2; + } + else + { + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.Int16; + bytes[offset + 1] = unchecked((byte)(value >> 8)); + bytes[offset + 2] = unchecked((byte)value); + return 3; + } + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteInt16ForceInt16Block(ref byte[] bytes, int offset, short value) + { + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.Int16; + bytes[offset + 1] = unchecked((byte)(value >> 8)); + bytes[offset + 2] = unchecked((byte)value); + return 3; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static short ReadInt16(byte[] bytes, int offset, out int readSize) + { + return int16Decoders[bytes[offset]].Read(bytes, offset, out readSize); + } + + /// + /// Unsafe. If value is guranteed 0 ~ MessagePackCode.MaxFixInt(127), can use this method. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WritePositiveFixedIntUnsafe(ref byte[] bytes, int offset, int value) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = (byte)value; + return 1; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteInt32(ref byte[] bytes, int offset, int value) + { + if (value >= 0) + { + // positive int(use uint) + if (value <= MessagePackRange.MaxFixPositiveInt) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = unchecked((byte)value); + return 1; + } + else if (value <= byte.MaxValue) + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.UInt8; + bytes[offset + 1] = unchecked((byte)value); + return 2; + } + else if (value <= ushort.MaxValue) + { + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.UInt16; + bytes[offset + 1] = unchecked((byte)(value >> 8)); + bytes[offset + 2] = unchecked((byte)value); + return 3; + } + else + { + EnsureCapacity(ref bytes, offset, 5); + bytes[offset] = MessagePackCode.UInt32; + bytes[offset + 1] = unchecked((byte)(value >> 24)); + bytes[offset + 2] = unchecked((byte)(value >> 16)); + bytes[offset + 3] = unchecked((byte)(value >> 8)); + bytes[offset + 4] = unchecked((byte)value); + return 5; + } + } + else + { + // negative int(use int) + if (MessagePackRange.MinFixNegativeInt <= value) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = unchecked((byte)value); + return 1; + } + else if (sbyte.MinValue <= value) + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.Int8; + bytes[offset + 1] = unchecked((byte)value); + return 2; + } + else if (short.MinValue <= value) + { + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.Int16; + bytes[offset + 1] = unchecked((byte)(value >> 8)); + bytes[offset + 2] = unchecked((byte)value); + return 3; + } + else + { + EnsureCapacity(ref bytes, offset, 5); + bytes[offset] = MessagePackCode.Int32; + bytes[offset + 1] = unchecked((byte)(value >> 24)); + bytes[offset + 2] = unchecked((byte)(value >> 16)); + bytes[offset + 3] = unchecked((byte)(value >> 8)); + bytes[offset + 4] = unchecked((byte)value); + return 5; + } + } + } + + /// + /// Acquire static message block(always 5 bytes). + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteInt32ForceInt32Block(ref byte[] bytes, int offset, int value) + { + EnsureCapacity(ref bytes, offset, 5); + bytes[offset] = MessagePackCode.Int32; + bytes[offset + 1] = unchecked((byte)(value >> 24)); + bytes[offset + 2] = unchecked((byte)(value >> 16)); + bytes[offset + 3] = unchecked((byte)(value >> 8)); + bytes[offset + 4] = unchecked((byte)value); + return 5; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int ReadInt32(byte[] bytes, int offset, out int readSize) + { + return int32Decoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteInt64(ref byte[] bytes, int offset, long value) + { + if (value >= 0) + { + // positive int(use uint) + if (value <= MessagePackRange.MaxFixPositiveInt) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = unchecked((byte)value); + return 1; + } + else if (value <= byte.MaxValue) + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.UInt8; + bytes[offset + 1] = unchecked((byte)value); + return 2; + } + else if (value <= ushort.MaxValue) + { + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.UInt16; + bytes[offset + 1] = unchecked((byte)(value >> 8)); + bytes[offset + 2] = unchecked((byte)value); + return 3; + } + else if (value <= uint.MaxValue) + { + EnsureCapacity(ref bytes, offset, 5); + bytes[offset] = MessagePackCode.UInt32; + bytes[offset + 1] = unchecked((byte)(value >> 24)); + bytes[offset + 2] = unchecked((byte)(value >> 16)); + bytes[offset + 3] = unchecked((byte)(value >> 8)); + bytes[offset + 4] = unchecked((byte)value); + return 5; + } + else + { + EnsureCapacity(ref bytes, offset, 9); + bytes[offset] = MessagePackCode.UInt64; + bytes[offset + 1] = unchecked((byte)(value >> 56)); + bytes[offset + 2] = unchecked((byte)(value >> 48)); + bytes[offset + 3] = unchecked((byte)(value >> 40)); + bytes[offset + 4] = unchecked((byte)(value >> 32)); + bytes[offset + 5] = unchecked((byte)(value >> 24)); + bytes[offset + 6] = unchecked((byte)(value >> 16)); + bytes[offset + 7] = unchecked((byte)(value >> 8)); + bytes[offset + 8] = unchecked((byte)value); + return 9; + } + } + else + { + // negative int(use int) + if (MessagePackRange.MinFixNegativeInt <= value) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = unchecked((byte)value); + return 1; + } + else if (sbyte.MinValue <= value) + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.Int8; + bytes[offset + 1] = unchecked((byte)value); + return 2; + } + else if (short.MinValue <= value) + { + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.Int16; + bytes[offset + 1] = unchecked((byte)(value >> 8)); + bytes[offset + 2] = unchecked((byte)value); + return 3; + } + else if (int.MinValue <= value) + { + EnsureCapacity(ref bytes, offset, 5); + bytes[offset] = MessagePackCode.Int32; + bytes[offset + 1] = unchecked((byte)(value >> 24)); + bytes[offset + 2] = unchecked((byte)(value >> 16)); + bytes[offset + 3] = unchecked((byte)(value >> 8)); + bytes[offset + 4] = unchecked((byte)value); + return 5; + } + else + { + EnsureCapacity(ref bytes, offset, 9); + bytes[offset] = MessagePackCode.Int64; + bytes[offset + 1] = unchecked((byte)(value >> 56)); + bytes[offset + 2] = unchecked((byte)(value >> 48)); + bytes[offset + 3] = unchecked((byte)(value >> 40)); + bytes[offset + 4] = unchecked((byte)(value >> 32)); + bytes[offset + 5] = unchecked((byte)(value >> 24)); + bytes[offset + 6] = unchecked((byte)(value >> 16)); + bytes[offset + 7] = unchecked((byte)(value >> 8)); + bytes[offset + 8] = unchecked((byte)value); + return 9; + } + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteInt64ForceInt64Block(ref byte[] bytes, int offset, long value) + { + EnsureCapacity(ref bytes, offset, 9); + bytes[offset] = MessagePackCode.Int64; + bytes[offset + 1] = unchecked((byte)(value >> 56)); + bytes[offset + 2] = unchecked((byte)(value >> 48)); + bytes[offset + 3] = unchecked((byte)(value >> 40)); + bytes[offset + 4] = unchecked((byte)(value >> 32)); + bytes[offset + 5] = unchecked((byte)(value >> 24)); + bytes[offset + 6] = unchecked((byte)(value >> 16)); + bytes[offset + 7] = unchecked((byte)(value >> 8)); + bytes[offset + 8] = unchecked((byte)value); + return 9; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static long ReadInt64(byte[] bytes, int offset, out int readSize) + { + return int64Decoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteUInt16(ref byte[] bytes, int offset, ushort value) + { + if (value <= MessagePackRange.MaxFixPositiveInt) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = unchecked((byte)value); + return 1; + } + else if (value <= byte.MaxValue) + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.UInt8; + bytes[offset + 1] = unchecked((byte)value); + return 2; + } + else + { + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.UInt16; + bytes[offset + 1] = unchecked((byte)(value >> 8)); + bytes[offset + 2] = unchecked((byte)value); + return 3; + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteUInt16ForceUInt16Block(ref byte[] bytes, int offset, ushort value) + { + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.UInt16; + bytes[offset + 1] = unchecked((byte)(value >> 8)); + bytes[offset + 2] = unchecked((byte)value); + return 3; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static ushort ReadUInt16(byte[] bytes, int offset, out int readSize) + { + return uint16Decoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteUInt32(ref byte[] bytes, int offset, uint value) + { + if (value <= MessagePackRange.MaxFixPositiveInt) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = unchecked((byte)value); + return 1; + } + else if (value <= byte.MaxValue) + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.UInt8; + bytes[offset + 1] = unchecked((byte)value); + return 2; + } + else if (value <= ushort.MaxValue) + { + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.UInt16; + bytes[offset + 1] = unchecked((byte)(value >> 8)); + bytes[offset + 2] = unchecked((byte)value); + return 3; + } + else + { + EnsureCapacity(ref bytes, offset, 5); + bytes[offset] = MessagePackCode.UInt32; + bytes[offset + 1] = unchecked((byte)(value >> 24)); + bytes[offset + 2] = unchecked((byte)(value >> 16)); + bytes[offset + 3] = unchecked((byte)(value >> 8)); + bytes[offset + 4] = unchecked((byte)value); + return 5; + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteUInt32ForceUInt32Block(ref byte[] bytes, int offset, uint value) + { + EnsureCapacity(ref bytes, offset, 5); + bytes[offset] = MessagePackCode.UInt32; + bytes[offset + 1] = unchecked((byte)(value >> 24)); + bytes[offset + 2] = unchecked((byte)(value >> 16)); + bytes[offset + 3] = unchecked((byte)(value >> 8)); + bytes[offset + 4] = unchecked((byte)value); + return 5; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static uint ReadUInt32(byte[] bytes, int offset, out int readSize) + { + return uint32Decoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteUInt64(ref byte[] bytes, int offset, ulong value) + { + if (value <= MessagePackRange.MaxFixPositiveInt) + { + EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = unchecked((byte)value); + return 1; + } + else if (value <= byte.MaxValue) + { + EnsureCapacity(ref bytes, offset, 2); + bytes[offset] = MessagePackCode.UInt8; + bytes[offset + 1] = unchecked((byte)value); + return 2; + } + else if (value <= ushort.MaxValue) + { + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.UInt16; + bytes[offset + 1] = unchecked((byte)(value >> 8)); + bytes[offset + 2] = unchecked((byte)value); + return 3; + } + else if (value <= uint.MaxValue) + { + EnsureCapacity(ref bytes, offset, 5); + bytes[offset] = MessagePackCode.UInt32; + bytes[offset + 1] = unchecked((byte)(value >> 24)); + bytes[offset + 2] = unchecked((byte)(value >> 16)); + bytes[offset + 3] = unchecked((byte)(value >> 8)); + bytes[offset + 4] = unchecked((byte)value); + return 5; + } + else + { + EnsureCapacity(ref bytes, offset, 9); + bytes[offset] = MessagePackCode.UInt64; + bytes[offset + 1] = unchecked((byte)(value >> 56)); + bytes[offset + 2] = unchecked((byte)(value >> 48)); + bytes[offset + 3] = unchecked((byte)(value >> 40)); + bytes[offset + 4] = unchecked((byte)(value >> 32)); + bytes[offset + 5] = unchecked((byte)(value >> 24)); + bytes[offset + 6] = unchecked((byte)(value >> 16)); + bytes[offset + 7] = unchecked((byte)(value >> 8)); + bytes[offset + 8] = unchecked((byte)value); + return 9; + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteUInt64ForceUInt64Block(ref byte[] bytes, int offset, ulong value) + { + EnsureCapacity(ref bytes, offset, 9); + bytes[offset] = MessagePackCode.UInt64; + bytes[offset + 1] = unchecked((byte)(value >> 56)); + bytes[offset + 2] = unchecked((byte)(value >> 48)); + bytes[offset + 3] = unchecked((byte)(value >> 40)); + bytes[offset + 4] = unchecked((byte)(value >> 32)); + bytes[offset + 5] = unchecked((byte)(value >> 24)); + bytes[offset + 6] = unchecked((byte)(value >> 16)); + bytes[offset + 7] = unchecked((byte)(value >> 8)); + bytes[offset + 8] = unchecked((byte)value); + return 9; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static ulong ReadUInt64(byte[] bytes, int offset, out int readSize) + { + return uint64Decoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteChar(ref byte[] bytes, int offset, char value) + { + return WriteUInt16(ref bytes, offset, (ushort)value); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static char ReadChar(byte[] bytes, int offset, out int readSize) + { + return (char)ReadUInt16(bytes, offset, out readSize); + } + + /// + /// Unsafe. If value is guranteed length is 0 ~ 31, can use this method. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteFixedStringUnsafe(ref byte[] bytes, int offset, string value, int byteCount) + { + EnsureCapacity(ref bytes, offset, byteCount + 1); + bytes[offset] = (byte)(MessagePackCode.MinFixStr | byteCount); + StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, offset + 1); + + return byteCount + 1; + } + + /// + /// Unsafe. If pre-calculated byteCount of target string, can use this method. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteStringUnsafe(ref byte[] bytes, int offset, string value, int byteCount) + { + if (byteCount <= MessagePackRange.MaxFixStringLength) + { + EnsureCapacity(ref bytes, offset, byteCount + 1); + bytes[offset] = (byte)(MessagePackCode.MinFixStr | byteCount); + StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, offset + 1); + return byteCount + 1; + } + else if (byteCount <= byte.MaxValue) + { + EnsureCapacity(ref bytes, offset, byteCount + 2); + bytes[offset] = MessagePackCode.Str8; + bytes[offset + 1] = unchecked((byte)byteCount); + StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, offset + 2); + return byteCount + 2; + } + else if (byteCount <= ushort.MaxValue) + { + EnsureCapacity(ref bytes, offset, byteCount + 3); + bytes[offset] = MessagePackCode.Str16; + bytes[offset + 1] = unchecked((byte)(byteCount >> 8)); + bytes[offset + 2] = unchecked((byte)byteCount); + StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, offset + 3); + return byteCount + 3; + } + else + { + EnsureCapacity(ref bytes, offset, byteCount + 5); + bytes[offset] = MessagePackCode.Str32; + bytes[offset + 1] = unchecked((byte)(byteCount >> 24)); + bytes[offset + 2] = unchecked((byte)(byteCount >> 16)); + bytes[offset + 3] = unchecked((byte)(byteCount >> 8)); + bytes[offset + 4] = unchecked((byte)byteCount); + StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, offset + 5); + return byteCount + 5; + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteStringBytes(ref byte[] bytes, int offset, byte[] utf8stringBytes) + { + var byteCount = utf8stringBytes.Length; + if (byteCount <= MessagePackRange.MaxFixStringLength) + { + EnsureCapacity(ref bytes, offset, byteCount + 1); + bytes[offset] = (byte)(MessagePackCode.MinFixStr | byteCount); + Buffer.BlockCopy(utf8stringBytes, 0, bytes, offset + 1, byteCount); + return byteCount + 1; + } + else if (byteCount <= byte.MaxValue) + { + EnsureCapacity(ref bytes, offset, byteCount + 2); + bytes[offset] = MessagePackCode.Str8; + bytes[offset + 1] = unchecked((byte)byteCount); + Buffer.BlockCopy(utf8stringBytes, 0, bytes, offset + 2, byteCount); + return byteCount + 2; + } + else if (byteCount <= ushort.MaxValue) + { + EnsureCapacity(ref bytes, offset, byteCount + 3); + bytes[offset] = MessagePackCode.Str16; + bytes[offset + 1] = unchecked((byte)(byteCount >> 8)); + bytes[offset + 2] = unchecked((byte)byteCount); + Buffer.BlockCopy(utf8stringBytes, 0, bytes, offset + 3, byteCount); + return byteCount + 3; + } + else + { + EnsureCapacity(ref bytes, offset, byteCount + 5); + bytes[offset] = MessagePackCode.Str32; + bytes[offset + 1] = unchecked((byte)(byteCount >> 24)); + bytes[offset + 2] = unchecked((byte)(byteCount >> 16)); + bytes[offset + 3] = unchecked((byte)(byteCount >> 8)); + bytes[offset + 4] = unchecked((byte)byteCount); + Buffer.BlockCopy(utf8stringBytes, 0, bytes, offset + 5, byteCount); + return byteCount + 5; + } + } + + public static byte[] GetEncodedStringBytes(string value) + { + var byteCount = StringEncoding.UTF8.GetByteCount(value); + if (byteCount <= MessagePackRange.MaxFixStringLength) + { + var bytes = new byte[byteCount + 1]; + bytes[0] = (byte)(MessagePackCode.MinFixStr | byteCount); + StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, 1); + return bytes; + } + else if (byteCount <= byte.MaxValue) + { + var bytes = new byte[byteCount + 2]; + bytes[0] = MessagePackCode.Str8; + bytes[1] = unchecked((byte)byteCount); + StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, 2); + return bytes; + } + else if (byteCount <= ushort.MaxValue) + { + var bytes = new byte[byteCount + 3]; + bytes[0] = MessagePackCode.Str16; + bytes[1] = unchecked((byte)(byteCount >> 8)); + bytes[2] = unchecked((byte)byteCount); + StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, 3); + return bytes; + } + else + { + var bytes = new byte[byteCount + 5]; + bytes[0] = MessagePackCode.Str32; + bytes[1] = unchecked((byte)(byteCount >> 24)); + bytes[2] = unchecked((byte)(byteCount >> 16)); + bytes[3] = unchecked((byte)(byteCount >> 8)); + bytes[4] = unchecked((byte)byteCount); + StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, 5); + return bytes; + } + } + + public static int WriteString(ref byte[] bytes, int offset, string value) + { + if (value == null) return WriteNil(ref bytes, offset); + + // MaxByteCount -> WritePrefix -> GetBytes has some overheads of `MaxByteCount` + // solves heuristic length check + + // ensure buffer by MaxByteCount(faster than GetByteCount) + MessagePackBinary.EnsureCapacity(ref bytes, offset, StringEncoding.UTF8.GetMaxByteCount(value.Length) + 5); + + int useOffset; + if (value.Length <= MessagePackRange.MaxFixStringLength) + { + useOffset = 1; + } + else if (value.Length <= byte.MaxValue) + { + useOffset = 2; + } + else if (value.Length <= ushort.MaxValue) + { + useOffset = 3; + } + else + { + useOffset = 5; + } + + // skip length area + var writeBeginOffset = offset + useOffset; + var byteCount = StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, writeBeginOffset); + + // move body and write prefix + if (byteCount <= MessagePackRange.MaxFixStringLength) + { + if (useOffset != 1) + { + Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 1, byteCount); + } + bytes[offset] = (byte)(MessagePackCode.MinFixStr | byteCount); + return byteCount + 1; + } + else if (byteCount <= byte.MaxValue) + { + if (useOffset != 2) + { + Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 2, byteCount); + } + + bytes[offset] = MessagePackCode.Str8; + bytes[offset + 1] = unchecked((byte)byteCount); + return byteCount + 2; + } + else if (byteCount <= ushort.MaxValue) + { + if (useOffset != 3) + { + Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 3, byteCount); + } + + bytes[offset] = MessagePackCode.Str16; + bytes[offset + 1] = unchecked((byte)(byteCount >> 8)); + bytes[offset + 2] = unchecked((byte)byteCount); + return byteCount + 3; + } + else + { + if (useOffset != 5) + { + Buffer.BlockCopy(bytes, writeBeginOffset, bytes, offset + 5, byteCount); + } + + bytes[offset] = MessagePackCode.Str32; + bytes[offset + 1] = unchecked((byte)(byteCount >> 24)); + bytes[offset + 2] = unchecked((byte)(byteCount >> 16)); + bytes[offset + 3] = unchecked((byte)(byteCount >> 8)); + bytes[offset + 4] = unchecked((byte)byteCount); + return byteCount + 5; + } + } + + public static int WriteStringForceStr32Block(ref byte[] bytes, int offset, string value) + { + if (value == null) return WriteNil(ref bytes, offset); + + MessagePackBinary.EnsureCapacity(ref bytes, offset, StringEncoding.UTF8.GetMaxByteCount(value.Length) + 5); + + var byteCount = StringEncoding.UTF8.GetBytes(value, 0, value.Length, bytes, offset + 5); + + bytes[offset] = MessagePackCode.Str32; + bytes[offset + 1] = unchecked((byte)(byteCount >> 24)); + bytes[offset + 2] = unchecked((byte)(byteCount >> 16)); + bytes[offset + 3] = unchecked((byte)(byteCount >> 8)); + bytes[offset + 4] = unchecked((byte)byteCount); + return byteCount + 5; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static string ReadString(byte[] bytes, int offset, out int readSize) + { + return stringDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static ArraySegment ReadStringSegment(byte[] bytes, int offset, out int readSize) + { + return stringSegmentDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteExtensionFormatHeader(ref byte[] bytes, int offset, sbyte typeCode, int dataLength) + { + switch (dataLength) + { + case 1: + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.FixExt1; + bytes[offset + 1] = unchecked((byte)typeCode); + return 2; + case 2: + EnsureCapacity(ref bytes, offset, 4); + bytes[offset] = MessagePackCode.FixExt2; + bytes[offset + 1] = unchecked((byte)typeCode); + return 2; + case 4: + EnsureCapacity(ref bytes, offset, 6); + bytes[offset] = MessagePackCode.FixExt4; + bytes[offset + 1] = unchecked((byte)typeCode); + return 2; + case 8: + EnsureCapacity(ref bytes, offset, 10); + bytes[offset] = MessagePackCode.FixExt8; + bytes[offset + 1] = unchecked((byte)typeCode); + return 2; + case 16: + EnsureCapacity(ref bytes, offset, 18); + bytes[offset] = MessagePackCode.FixExt16; + bytes[offset + 1] = unchecked((byte)typeCode); + return 2; + default: + unchecked + { + if (dataLength <= byte.MaxValue) + { + EnsureCapacity(ref bytes, offset, dataLength + 3); + bytes[offset] = MessagePackCode.Ext8; + bytes[offset + 1] = unchecked((byte)(dataLength)); + bytes[offset + 2] = unchecked((byte)typeCode); + return 3; + } + else if (dataLength <= UInt16.MaxValue) + { + EnsureCapacity(ref bytes, offset, dataLength + 4); + bytes[offset] = MessagePackCode.Ext16; + bytes[offset + 1] = unchecked((byte)(dataLength >> 8)); + bytes[offset + 2] = unchecked((byte)(dataLength)); + bytes[offset + 3] = unchecked((byte)typeCode); + return 4; + } + else + { + EnsureCapacity(ref bytes, offset, dataLength + 6); + bytes[offset] = MessagePackCode.Ext32; + bytes[offset + 1] = unchecked((byte)(dataLength >> 24)); + bytes[offset + 2] = unchecked((byte)(dataLength >> 16)); + bytes[offset + 3] = unchecked((byte)(dataLength >> 8)); + bytes[offset + 4] = unchecked((byte)dataLength); + bytes[offset + 5] = unchecked((byte)typeCode); + return 6; + } + } + } + } + + /// + /// Write extension format header, always use ext32 format(length is fixed, 6). + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteExtensionFormatHeaderForceExt32Block(ref byte[] bytes, int offset, sbyte typeCode, int dataLength) + { + EnsureCapacity(ref bytes, offset, dataLength + 6); + bytes[offset] = MessagePackCode.Ext32; + bytes[offset + 1] = unchecked((byte)(dataLength >> 24)); + bytes[offset + 2] = unchecked((byte)(dataLength >> 16)); + bytes[offset + 3] = unchecked((byte)(dataLength >> 8)); + bytes[offset + 4] = unchecked((byte)dataLength); + bytes[offset + 5] = unchecked((byte)typeCode); + return 6; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteExtensionFormat(ref byte[] bytes, int offset, sbyte typeCode, byte[] data) + { + var length = data.Length; + switch (length) + { + case 1: + EnsureCapacity(ref bytes, offset, 3); + bytes[offset] = MessagePackCode.FixExt1; + bytes[offset + 1] = unchecked((byte)typeCode); + bytes[offset + 2] = data[0]; + return 3; + case 2: + EnsureCapacity(ref bytes, offset, 4); + bytes[offset] = MessagePackCode.FixExt2; + bytes[offset + 1] = unchecked((byte)typeCode); + bytes[offset + 2] = data[0]; + bytes[offset + 3] = data[1]; + return 4; + case 4: + EnsureCapacity(ref bytes, offset, 6); + bytes[offset] = MessagePackCode.FixExt4; + bytes[offset + 1] = unchecked((byte)typeCode); + bytes[offset + 2] = data[0]; + bytes[offset + 3] = data[1]; + bytes[offset + 4] = data[2]; + bytes[offset + 5] = data[3]; + return 6; + case 8: + EnsureCapacity(ref bytes, offset, 10); + bytes[offset] = MessagePackCode.FixExt8; + bytes[offset + 1] = unchecked((byte)typeCode); + bytes[offset + 2] = data[0]; + bytes[offset + 3] = data[1]; + bytes[offset + 4] = data[2]; + bytes[offset + 5] = data[3]; + bytes[offset + 6] = data[4]; + bytes[offset + 7] = data[5]; + bytes[offset + 8] = data[6]; + bytes[offset + 9] = data[7]; + return 10; + case 16: + EnsureCapacity(ref bytes, offset, 18); + bytes[offset] = MessagePackCode.FixExt16; + bytes[offset + 1] = unchecked((byte)typeCode); + bytes[offset + 2] = data[0]; + bytes[offset + 3] = data[1]; + bytes[offset + 4] = data[2]; + bytes[offset + 5] = data[3]; + bytes[offset + 6] = data[4]; + bytes[offset + 7] = data[5]; + bytes[offset + 8] = data[6]; + bytes[offset + 9] = data[7]; + bytes[offset + 10] = data[8]; + bytes[offset + 11] = data[9]; + bytes[offset + 12] = data[10]; + bytes[offset + 13] = data[11]; + bytes[offset + 14] = data[12]; + bytes[offset + 15] = data[13]; + bytes[offset + 16] = data[14]; + bytes[offset + 17] = data[15]; + return 18; + default: + unchecked + { + if (data.Length <= byte.MaxValue) + { + EnsureCapacity(ref bytes, offset, length + 3); + bytes[offset] = MessagePackCode.Ext8; + bytes[offset + 1] = unchecked((byte)(length)); + bytes[offset + 2] = unchecked((byte)typeCode); + Buffer.BlockCopy(data, 0, bytes, offset + 3, length); + return length + 3; + } + else if (data.Length <= UInt16.MaxValue) + { + EnsureCapacity(ref bytes, offset, length + 4); + bytes[offset] = MessagePackCode.Ext16; + bytes[offset + 1] = unchecked((byte)(length >> 8)); + bytes[offset + 2] = unchecked((byte)(length)); + bytes[offset + 3] = unchecked((byte)typeCode); + Buffer.BlockCopy(data, 0, bytes, offset + 4, length); + return length + 4; + } + else + { + EnsureCapacity(ref bytes, offset, length + 6); + bytes[offset] = MessagePackCode.Ext32; + bytes[offset + 1] = unchecked((byte)(length >> 24)); + bytes[offset + 2] = unchecked((byte)(length >> 16)); + bytes[offset + 3] = unchecked((byte)(length >> 8)); + bytes[offset + 4] = unchecked((byte)length); + bytes[offset + 5] = unchecked((byte)typeCode); + Buffer.BlockCopy(data, 0, bytes, offset + 6, length); + return length + 6; + } + } + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static ExtensionResult ReadExtensionFormat(byte[] bytes, int offset, out int readSize) + { + return extDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + + /// + /// return byte length of ExtensionFormat. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static ExtensionHeader ReadExtensionFormatHeader(byte[] bytes, int offset, out int readSize) + { + return extHeaderDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int GetExtensionFormatHeaderLength(int dataLength) + { + switch (dataLength) + { + case 1: + case 2: + case 4: + case 8: + case 16: + return 2; + default: + if (dataLength <= byte.MaxValue) + { + return 3; + } + else if (dataLength <= UInt16.MaxValue) + { + return 4; + } + else + { + return 6; + } + } + } + + // Timestamp spec + // https://github.com/msgpack/msgpack/pull/209 + // FixExt4(-1) => seconds | [1970-01-01 00:00:00 UTC, 2106-02-07 06:28:16 UTC) range + // FixExt8(-1) => nanoseconds + seconds | [1970-01-01 00:00:00.000000000 UTC, 2514-05-30 01:53:04.000000000 UTC) range + // Ext8(12,-1) => nanoseconds + seconds | [-584554047284-02-23 16:59:44 UTC, 584554051223-11-09 07:00:16.000000000 UTC) range + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteDateTime(ref byte[] bytes, int offset, DateTime dateTime) + { + dateTime = dateTime.ToUniversalTime(); + + var secondsSinceBclEpoch = dateTime.Ticks / TimeSpan.TicksPerSecond; + var seconds = secondsSinceBclEpoch - DateTimeConstants.BclSecondsAtUnixEpoch; + var nanoseconds = (dateTime.Ticks % TimeSpan.TicksPerSecond) * DateTimeConstants.NanosecondsPerTick; + + // reference pseudo code. + /* + struct timespec { + long tv_sec; // seconds + long tv_nsec; // nanoseconds + } time; + if ((time.tv_sec >> 34) == 0) + { + uint64_t data64 = (time.tv_nsec << 34) | time.tv_sec; + if (data & 0xffffffff00000000L == 0) + { + // timestamp 32 + uint32_t data32 = data64; + serialize(0xd6, -1, data32) + } + else + { + // timestamp 64 + serialize(0xd7, -1, data64) + } + } + else + { + // timestamp 96 + serialize(0xc7, 12, -1, time.tv_nsec, time.tv_sec) + } + */ + + if ((seconds >> 34) == 0) + { + var data64 = unchecked((ulong)((nanoseconds << 34) | seconds)); + if ((data64 & 0xffffffff00000000L) == 0) + { + // timestamp 32(seconds in 32-bit unsigned int) + var data32 = (UInt32)data64; + EnsureCapacity(ref bytes, offset, 6); + bytes[offset] = MessagePackCode.FixExt4; + bytes[offset + 1] = unchecked((byte)ReservedMessagePackExtensionTypeCode.DateTime); + bytes[offset + 2] = unchecked((byte)(data32 >> 24)); + bytes[offset + 3] = unchecked((byte)(data32 >> 16)); + bytes[offset + 4] = unchecked((byte)(data32 >> 8)); + bytes[offset + 5] = unchecked((byte)data32); + return 6; + } + else + { + // timestamp 64(nanoseconds in 30-bit unsigned int | seconds in 34-bit unsigned int) + EnsureCapacity(ref bytes, offset, 10); + bytes[offset] = MessagePackCode.FixExt8; + bytes[offset + 1] = unchecked((byte)ReservedMessagePackExtensionTypeCode.DateTime); + bytes[offset + 2] = unchecked((byte)(data64 >> 56)); + bytes[offset + 3] = unchecked((byte)(data64 >> 48)); + bytes[offset + 4] = unchecked((byte)(data64 >> 40)); + bytes[offset + 5] = unchecked((byte)(data64 >> 32)); + bytes[offset + 6] = unchecked((byte)(data64 >> 24)); + bytes[offset + 7] = unchecked((byte)(data64 >> 16)); + bytes[offset + 8] = unchecked((byte)(data64 >> 8)); + bytes[offset + 9] = unchecked((byte)data64); + return 10; + } + } + else + { + // timestamp 96( nanoseconds in 32-bit unsigned int | seconds in 64-bit signed int ) + EnsureCapacity(ref bytes, offset, 15); + bytes[offset] = MessagePackCode.Ext8; + bytes[offset + 1] = (byte)12; + bytes[offset + 2] = unchecked((byte)ReservedMessagePackExtensionTypeCode.DateTime); + bytes[offset + 3] = unchecked((byte)(nanoseconds >> 24)); + bytes[offset + 4] = unchecked((byte)(nanoseconds >> 16)); + bytes[offset + 5] = unchecked((byte)(nanoseconds >> 8)); + bytes[offset + 6] = unchecked((byte)nanoseconds); + bytes[offset + 7] = unchecked((byte)(seconds >> 56)); + bytes[offset + 8] = unchecked((byte)(seconds >> 48)); + bytes[offset + 9] = unchecked((byte)(seconds >> 40)); + bytes[offset + 10] = unchecked((byte)(seconds >> 32)); + bytes[offset + 11] = unchecked((byte)(seconds >> 24)); + bytes[offset + 12] = unchecked((byte)(seconds >> 16)); + bytes[offset + 13] = unchecked((byte)(seconds >> 8)); + bytes[offset + 14] = unchecked((byte)seconds); + return 15; + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static DateTime ReadDateTime(byte[] bytes, int offset, out int readSize) + { + return dateTimeDecoders[bytes[offset]].Read(bytes, offset, out readSize); + } + } + + // Stream Overload + public static partial class MessagePackBinary + { + static class StreamDecodeMemoryPool + { + [ThreadStatic] + static byte[] buffer = null; + + public static byte[] GetBuffer() + { + if (buffer == null) + { + buffer = new byte[65536]; + } + return buffer; + } + } + + static byte[] ReadMessageBlockFromStreamUnsafe(Stream stream) + { + int _; + return ReadMessageBlockFromStreamUnsafe(stream, false, out _); + } + + /// + /// Read MessageBlock, returns byte[] block is in MemoryPool so careful to use. + /// + public static byte[] ReadMessageBlockFromStreamUnsafe(Stream stream, bool readOnlySingleMessage, out int readSize) + { + var bytes = StreamDecodeMemoryPool.GetBuffer(); + readSize = ReadMessageBlockFromStreamCore(stream, ref bytes, 0, readOnlySingleMessage); + return bytes; + } + + static int ReadMessageBlockFromStreamCore(Stream stream, ref byte[] bytes, int offset, bool readOnlySingleMessage) + { + var byteCode = stream.ReadByte(); + if (byteCode < 0 || byte.MaxValue < byteCode) + { + throw new InvalidOperationException("Invalid MessagePack code was detected, code:" + byteCode); + } + + var code = (byte)byteCode; + + MessagePackBinary.EnsureCapacity(ref bytes, offset, 1); + bytes[offset] = code; + + var type = MessagePackCode.ToMessagePackType(code); + switch (type) + { + case MessagePackType.Integer: + { + var readCount = 0; + if (MessagePackCode.MinNegativeFixInt <= code && code <= MessagePackCode.MaxNegativeFixInt) return 1; + else if (MessagePackCode.MinFixInt <= code && code <= MessagePackCode.MaxFixInt) return 1; + + switch (code) + { + case MessagePackCode.Int8: readCount = 1; break; + case MessagePackCode.Int16: readCount = 2; break; + case MessagePackCode.Int32: readCount = 4; break; + case MessagePackCode.Int64: readCount = 8; break; + case MessagePackCode.UInt8: readCount = 1; break; + case MessagePackCode.UInt16: readCount = 2; break; + case MessagePackCode.UInt32: readCount = 4; break; + case MessagePackCode.UInt64: readCount = 8; break; + default: throw new InvalidOperationException("Invalid Code"); + } + + MessagePackBinary.EnsureCapacity(ref bytes, offset, readCount + 1); + ReadFully(stream, bytes, offset + 1, readCount); + return readCount + 1; + } + case MessagePackType.Unknown: + case MessagePackType.Nil: + case MessagePackType.Boolean: + return 1; + case MessagePackType.Float: + if (code == MessagePackCode.Float32) + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, 5); + ReadFully(stream, bytes, offset + 1, 4); + return 5; + } + else + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, 9); + ReadFully(stream, bytes, offset + 1, 8); + return 9; + } + case MessagePackType.String: + { + if (MessagePackCode.MinFixStr <= code && code <= MessagePackCode.MaxFixStr) + { + var length = bytes[offset] & 0x1F; + MessagePackBinary.EnsureCapacity(ref bytes, offset, 1 + length); + ReadFully(stream, bytes, offset + 1, length); + return length + 1; + } + + switch (code) + { + case MessagePackCode.Str8: + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, 2); + ReadFully(stream, bytes, offset + 1, 1); + var length = bytes[offset + 1]; + + MessagePackBinary.EnsureCapacity(ref bytes, offset, 2 + length); + ReadFully(stream, bytes, offset + 2, length); + + return length + 2; + } + case MessagePackCode.Str16: + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, 3); + ReadFully(stream, bytes, offset + 1, 2); + var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); + + MessagePackBinary.EnsureCapacity(ref bytes, offset, 3 + length); + ReadFully(stream, bytes, offset + 3, length); + + return length + 3; + } + case MessagePackCode.Str32: + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, 5); + ReadFully(stream, bytes, offset + 1, 4); + var length = (bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | (bytes[offset + 4]); + + MessagePackBinary.EnsureCapacity(ref bytes, offset, 5 + length); + ReadFully(stream, bytes, offset + 5, length); + + return length + 5; + } + default: throw new InvalidOperationException("Invalid Code"); + } + } + case MessagePackType.Binary: + { + switch (code) + { + case MessagePackCode.Bin8: + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, 2); + ReadFully(stream, bytes, offset + 1, 1); + var length = bytes[offset + 1]; + + MessagePackBinary.EnsureCapacity(ref bytes, offset, 2 + length); + ReadFully(stream, bytes, offset + 2, length); + + return length + 2; + } + case MessagePackCode.Bin16: + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, 3); + ReadFully(stream, bytes, offset + 1, 2); + var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); + + MessagePackBinary.EnsureCapacity(ref bytes, offset, 3 + length); + ReadFully(stream, bytes, offset + 3, length); + + return length + 3; + } + case MessagePackCode.Bin32: + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, 5); + ReadFully(stream, bytes, offset + 1, 4); + var length = (bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | (bytes[offset + 4]); + + MessagePackBinary.EnsureCapacity(ref bytes, offset, 5 + length); + ReadFully(stream, bytes, offset + 5, length); + + return length + 5; + } + default: throw new InvalidOperationException("Invalid Code"); + } + } + case MessagePackType.Array: + { + var readHeaderSize = 0; + + if (MessagePackCode.MinFixArray <= code && code <= MessagePackCode.MaxFixArray) readHeaderSize = 0; + else if (code == MessagePackCode.Array16) readHeaderSize = 2; + else if (code == MessagePackCode.Array32) readHeaderSize = 4; + if (readHeaderSize != 0) + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, readHeaderSize + 1); + ReadFully(stream, bytes, offset + 1, readHeaderSize); + } + + var startOffset = offset; + offset += (readHeaderSize + 1); + + int _; + var length = ReadArrayHeaderRaw(bytes, startOffset, out _); + if (!readOnlySingleMessage) + { + for (int i = 0; i < length; i++) + { + offset += ReadMessageBlockFromStreamCore(stream, ref bytes, offset, readOnlySingleMessage); + } + } + + return offset - startOffset; + } + case MessagePackType.Map: + { + var readHeaderSize = 0; + + if (MessagePackCode.MinFixMap <= code && code <= MessagePackCode.MaxFixMap) readHeaderSize = 0; + else if (code == MessagePackCode.Map16) readHeaderSize = 2; + else if (code == MessagePackCode.Map32) readHeaderSize = 4; + if (readHeaderSize != 0) + { + MessagePackBinary.EnsureCapacity(ref bytes, offset, readHeaderSize + 1); + ReadFully(stream, bytes, offset + 1, readHeaderSize); + } + + var startOffset = offset; + offset += (readHeaderSize + 1); + + int _; + var length = ReadMapHeaderRaw(bytes, startOffset, out _); + if (!readOnlySingleMessage) + { + for (int i = 0; i < length; i++) + { + offset += ReadMessageBlockFromStreamCore(stream, ref bytes, offset, readOnlySingleMessage); // key + offset += ReadMessageBlockFromStreamCore(stream, ref bytes, offset, readOnlySingleMessage); // value + } + } + + return offset - startOffset; + } + case MessagePackType.Extension: + { + var readHeaderSize = 0; + + switch (code) + { + case MessagePackCode.FixExt1: readHeaderSize = 1; break; + case MessagePackCode.FixExt2: readHeaderSize = 1; break; + case MessagePackCode.FixExt4: readHeaderSize = 1; break; + case MessagePackCode.FixExt8: readHeaderSize = 1; break; + case MessagePackCode.FixExt16: readHeaderSize = 1; break; + case MessagePackCode.Ext8: readHeaderSize = 2; break; + case MessagePackCode.Ext16: readHeaderSize = 3; break; + case MessagePackCode.Ext32: readHeaderSize = 5; break; + default: throw new InvalidOperationException("Invalid Code"); + } + + MessagePackBinary.EnsureCapacity(ref bytes, offset, readHeaderSize + 1); + ReadFully(stream, bytes, offset + 1, readHeaderSize); + + if (!readOnlySingleMessage) + { + int _; + var header = ReadExtensionFormatHeader(bytes, offset, out _); + + MessagePackBinary.EnsureCapacity(ref bytes, offset, 1 + readHeaderSize + (int)header.Length); + ReadFully(stream, bytes, offset + 1 + readHeaderSize, (int)header.Length); + + return 1 + readHeaderSize + (int)header.Length; + } + else + { + return readHeaderSize + 1; + } + } + default: throw new InvalidOperationException("Invalid Code"); + } + } + + static void ReadFully(Stream stream, byte[] bytes, int offset, int readSize) + { + var nextLen = readSize; + while (nextLen != 0) + { + var len = stream.Read(bytes, offset, nextLen); + if (len == -1) return; + offset += len; + nextLen = nextLen - len; + } + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int ReadNext(Stream stream) + { + var bytes = StreamDecodeMemoryPool.GetBuffer(); + return ReadMessageBlockFromStreamCore(stream, ref bytes, 0, true); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int ReadNextBlock(Stream stream) + { + var bytes = StreamDecodeMemoryPool.GetBuffer(); + var offset = 0; + return ReadMessageBlockFromStreamCore(stream, ref bytes, offset, false); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteNil(Stream stream) + { + stream.WriteByte(MessagePackCode.Nil); + return 1; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static Nil ReadNil(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadNil(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static bool IsNil(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + + return bytes[offset] == MessagePackCode.Nil; + } + + /// + /// Unsafe. If value is guranteed 0 ~ MessagePackRange.MaxFixMapCount(15), can use this method. + /// + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteFixedMapHeaderUnsafe(Stream stream, int count) + { + stream.WriteByte((byte)(MessagePackCode.MinFixMap | count)); + return 1; + } + + /// + /// Write map count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteMapHeader(Stream stream, int count) + { + checked + { + return WriteMapHeader(stream, (uint)count); + } + } + + /// + /// Write map count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteMapHeader(Stream stream, uint count) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteMapHeader(ref buffer, 0, count); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + + /// + /// Write map format header, always use map32 format(length is fixed, 5). + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteMapHeaderForceMap32Block(Stream stream, uint count) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteMapHeaderForceMap32Block(ref buffer, 0, count); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + + /// + /// Return map count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int ReadMapHeader(Stream stream) + { + checked + { + var bytes = StreamDecodeMemoryPool.GetBuffer(); + ReadMessageBlockFromStreamCore(stream, ref bytes, 0, true); + int readSize; + return ReadMapHeader(bytes, 0, out readSize); + } + } + + /// + /// Return map count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static uint ReadMapHeaderRaw(Stream stream) + { + var bytes = StreamDecodeMemoryPool.GetBuffer(); + ReadMessageBlockFromStreamCore(stream, ref bytes, 0, true); + int readSize; + return ReadMapHeaderRaw(bytes, 0, out readSize); + } + + /// + /// Unsafe. If value is guranteed 0 ~ MessagePackRange.MaxFixArrayCount(15), can use this method. + /// + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteFixedArrayHeaderUnsafe(Stream stream, int count) + { + stream.WriteByte((byte)(MessagePackCode.MinFixArray | count)); + return 1; + } + + /// + /// Write array count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteArrayHeader(Stream stream, int count) + { + checked + { + return WriteArrayHeader(stream, (uint)count); + } + } + + /// + /// Write array count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteArrayHeader(Stream stream, uint count) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteArrayHeader(ref buffer, 0, count); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + + /// + /// Write array format header, always use array32 format(length is fixed, 5). + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteArrayHeaderForceArray32Block(Stream stream, uint count) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteArrayHeaderForceArray32Block(ref buffer, 0, count); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + + /// + /// Return array count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int ReadArrayHeader(Stream stream) + { + var bytes = StreamDecodeMemoryPool.GetBuffer(); + ReadMessageBlockFromStreamCore(stream, ref bytes, 0, true); + int readSize; + return ReadArrayHeader(bytes, 0, out readSize); + } + + /// + /// Return array count. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static uint ReadArrayHeaderRaw(Stream stream) + { + var bytes = StreamDecodeMemoryPool.GetBuffer(); + ReadMessageBlockFromStreamCore(stream, ref bytes, 0, true); + int readSize; + return ReadArrayHeaderRaw(bytes, 0, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteBoolean(Stream stream, bool value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteBoolean(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static bool ReadBoolean(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadBoolean(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteByte(Stream stream, byte value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteByte(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteByteForceByteBlock(Stream stream, byte value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteByteForceByteBlock(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static byte ReadByte(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadByte(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteBytes(Stream stream, byte[] value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteBytes(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteBytes(Stream stream, byte[] src, int srcOffset, int count) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteBytes(ref buffer, 0, src, srcOffset, count); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static byte[] ReadBytes(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadBytes(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteSByte(Stream stream, sbyte value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteSByte(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteSByteForceSByteBlock(Stream stream, sbyte value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteSByteForceSByteBlock(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static sbyte ReadSByte(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadSByte(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteSingle(Stream stream, float value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteSingle(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static float ReadSingle(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadSingle(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteDouble(Stream stream, double value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteDouble(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static double ReadDouble(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadDouble(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteInt16(Stream stream, short value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteInt16(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteInt16ForceInt16Block(Stream stream, short value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteInt16ForceInt16Block(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static short ReadInt16(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadInt16(bytes, offset, out readSize); + } + + /// + /// Unsafe. If value is guranteed 0 ~ MessagePackCode.MaxFixInt(127), can use this method. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WritePositiveFixedIntUnsafe(Stream stream, int value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WritePositiveFixedIntUnsafe(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteInt32(Stream stream, int value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteInt32(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + + /// + /// Acquire static message block(always 5 bytes). + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteInt32ForceInt32Block(Stream stream, int value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteInt32ForceInt32Block(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int ReadInt32(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadInt32(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteInt64(Stream stream, long value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteInt64(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteInt64ForceInt64Block(Stream stream, long value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteInt64ForceInt64Block(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static long ReadInt64(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadInt64(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteUInt16(Stream stream, ushort value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteUInt16(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteUInt16ForceUInt16Block(Stream stream, ushort value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteUInt16ForceUInt16Block(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static ushort ReadUInt16(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadUInt16(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteUInt32(Stream stream, uint value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteUInt32(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteUInt32ForceUInt32Block(Stream stream, uint value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteUInt32ForceUInt32Block(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static uint ReadUInt32(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadUInt32(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteUInt64(Stream stream, ulong value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteUInt64(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteUInt64ForceUInt64Block(Stream stream, ulong value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteUInt64ForceUInt64Block(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static ulong ReadUInt64(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadUInt64(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteChar(Stream stream, char value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteChar(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static char ReadChar(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadChar(bytes, offset, out readSize); + } + + /// + /// Unsafe. If value is guranteed length is 0 ~ 31, can use this method. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteFixedStringUnsafe(Stream stream, string value, int byteCount) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteFixedStringUnsafe(ref buffer, 0, value, byteCount); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + + /// + /// Unsafe. If pre-calculated byteCount of target string, can use this method. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteStringUnsafe(Stream stream, string value, int byteCount) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteStringUnsafe(ref buffer, 0, value, byteCount); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteStringBytes(Stream stream, byte[] utf8stringBytes) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteStringBytes(ref buffer, 0, utf8stringBytes); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + + public static int WriteString(Stream stream, string value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteString(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + + public static int WriteStringForceStr32Block(Stream stream, string value) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteStringForceStr32Block(ref buffer, 0, value); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static string ReadString(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadString(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteExtensionFormatHeader(Stream stream, sbyte typeCode, int dataLength) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteExtensionFormatHeader(ref buffer, 0, typeCode, dataLength); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + + /// + /// Write extension format header, always use ext32 format(length is fixed, 6). + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteExtensionFormatHeaderForceExt32Block(Stream stream, sbyte typeCode, int dataLength) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteExtensionFormatHeaderForceExt32Block(ref buffer, 0, typeCode, dataLength); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteExtensionFormat(Stream stream, sbyte typeCode, byte[] data) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteExtensionFormat(ref buffer, 0, typeCode, data); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static ExtensionResult ReadExtensionFormat(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadExtensionFormat(bytes, offset, out readSize); + } + + /// + /// return byte length of ExtensionFormat. + /// +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static ExtensionHeader ReadExtensionFormatHeader(Stream stream) + { + int readSize; + var bytes = ReadMessageBlockFromStreamUnsafe(stream, true, out readSize); + var offset = 0; + + return ReadExtensionFormatHeader(bytes, offset, out readSize); + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static int WriteDateTime(Stream stream, DateTime dateTime) + { + var buffer = StreamDecodeMemoryPool.GetBuffer(); + var writeCount = WriteDateTime(ref buffer, 0, dateTime); + stream.Write(buffer, 0, writeCount); + return writeCount; + } + +#if NETSTANDARD + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] +#endif + public static DateTime ReadDateTime(Stream stream) + { + var bytes = ReadMessageBlockFromStreamUnsafe(stream); + var offset = 0; + int readSize; + + return ReadDateTime(bytes, offset, out readSize); + } + } + + public struct ExtensionResult + { + public sbyte TypeCode { get; private set; } + public byte[] Data { get; private set; } + + public ExtensionResult(sbyte typeCode, byte[] data) + { + TypeCode = typeCode; + Data = data; + } + } + + public struct ExtensionHeader + { + public sbyte TypeCode { get; private set; } + public uint Length { get; private set; } + + public ExtensionHeader(sbyte typeCode, uint length) + { + TypeCode = typeCode; + Length = length; + } + } +} + +namespace MessagePack.Internal +{ + internal static class DateTimeConstants + { + internal static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + internal const long BclSecondsAtUnixEpoch = 62135596800; + internal const int NanosecondsPerTick = 100; + } +} + +namespace MessagePack.Decoders +{ + internal interface IMapHeaderDecoder + { + uint Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixMapHeader : IMapHeaderDecoder + { + internal static readonly IMapHeaderDecoder Instance = new FixMapHeader(); + + FixMapHeader() + { + + } + + public uint Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return (uint)(bytes[offset] & 0xF); + } + } + + internal sealed class Map16Header : IMapHeaderDecoder + { + internal static readonly IMapHeaderDecoder Instance = new Map16Header(); + + Map16Header() + { + + } + + public uint Read(byte[] bytes, int offset, out int readSize) + { + readSize = 3; + unchecked + { + return (uint)((bytes[offset + 1] << 8) | (bytes[offset + 2])); + } + } + } + + internal sealed class Map32Header : IMapHeaderDecoder + { + internal static readonly IMapHeaderDecoder Instance = new Map32Header(); + + Map32Header() + { + + } + + public uint Read(byte[] bytes, int offset, out int readSize) + { + readSize = 5; + unchecked + { + return (uint)((bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | bytes[offset + 4]); + } + } + } + + internal sealed class InvalidMapHeader : IMapHeaderDecoder + { + internal static readonly IMapHeaderDecoder Instance = new InvalidMapHeader(); + + InvalidMapHeader() + { + + } + + public uint Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IArrayHeaderDecoder + { + uint Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixArrayHeader : IArrayHeaderDecoder + { + internal static readonly IArrayHeaderDecoder Instance = new FixArrayHeader(); + + FixArrayHeader() + { + + } + + public uint Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return (uint)(bytes[offset] & 0xF); + } + } + + internal sealed class Array16Header : IArrayHeaderDecoder + { + internal static readonly IArrayHeaderDecoder Instance = new Array16Header(); + + Array16Header() + { + + } + + public uint Read(byte[] bytes, int offset, out int readSize) + { + readSize = 3; + unchecked + { + return (uint)((bytes[offset + 1] << 8) | (bytes[offset + 2])); + } + } + } + + internal sealed class Array32Header : IArrayHeaderDecoder + { + internal static readonly IArrayHeaderDecoder Instance = new Array32Header(); + + Array32Header() + { + + } + + public uint Read(byte[] bytes, int offset, out int readSize) + { + readSize = 5; + unchecked + { + return (uint)((bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | bytes[offset + 4]); + } + } + } + + internal sealed class InvalidArrayHeader : IArrayHeaderDecoder + { + internal static readonly IArrayHeaderDecoder Instance = new InvalidArrayHeader(); + + InvalidArrayHeader() + { + + } + + public uint Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IBooleanDecoder + { + bool Read(); + } + + internal sealed class True : IBooleanDecoder + { + internal static IBooleanDecoder Instance = new True(); + + True() { } + + public bool Read() + { + return true; + } + } + + internal sealed class False : IBooleanDecoder + { + internal static IBooleanDecoder Instance = new False(); + + False() { } + + public bool Read() + { + return false; + } + } + + internal sealed class InvalidBoolean : IBooleanDecoder + { + internal static IBooleanDecoder Instance = new InvalidBoolean(); + + InvalidBoolean() { } + + public bool Read() + { + throw new InvalidOperationException("code is invalid."); + } + } + + internal interface IByteDecoder + { + byte Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixByte : IByteDecoder + { + internal static readonly IByteDecoder Instance = new FixByte(); + + FixByte() + { + + } + + public byte Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return bytes[offset]; + } + } + + internal sealed class UInt8Byte : IByteDecoder + { + internal static readonly IByteDecoder Instance = new UInt8Byte(); + + UInt8Byte() + { + + } + + public byte Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + return bytes[offset + 1]; + } + } + + internal sealed class InvalidByte : IByteDecoder + { + internal static readonly IByteDecoder Instance = new InvalidByte(); + + InvalidByte() + { + + } + + public byte Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IBytesDecoder + { + byte[] Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class NilBytes : IBytesDecoder + { + internal static readonly IBytesDecoder Instance = new NilBytes(); + + NilBytes() + { + + } + + public byte[] Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return null; + } + } + + internal sealed class Bin8Bytes : IBytesDecoder + { + internal static readonly IBytesDecoder Instance = new Bin8Bytes(); + + Bin8Bytes() + { + + } + + public byte[] Read(byte[] bytes, int offset, out int readSize) + { + var length = bytes[offset + 1]; + var newBytes = new byte[length]; + Buffer.BlockCopy(bytes, offset + 2, newBytes, 0, length); + + readSize = length + 2; + return newBytes; + } + } + + internal sealed class Bin16Bytes : IBytesDecoder + { + internal static readonly IBytesDecoder Instance = new Bin16Bytes(); + + Bin16Bytes() + { + + } + + public byte[] Read(byte[] bytes, int offset, out int readSize) + { + var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); + var newBytes = new byte[length]; + Buffer.BlockCopy(bytes, offset + 3, newBytes, 0, length); + + readSize = length + 3; + return newBytes; + } + } + + internal sealed class Bin32Bytes : IBytesDecoder + { + internal static readonly IBytesDecoder Instance = new Bin32Bytes(); + + Bin32Bytes() + { + + } + + public byte[] Read(byte[] bytes, int offset, out int readSize) + { + var length = (bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | (bytes[offset + 4]); + var newBytes = new byte[length]; + Buffer.BlockCopy(bytes, offset + 5, newBytes, 0, length); + + readSize = length + 5; + return newBytes; + } + } + + internal sealed class InvalidBytes : IBytesDecoder + { + internal static readonly IBytesDecoder Instance = new InvalidBytes(); + + InvalidBytes() + { + + } + + public byte[] Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IBytesSegmentDecoder + { + ArraySegment Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class NilBytesSegment : IBytesSegmentDecoder + { + internal static readonly IBytesSegmentDecoder Instance = new NilBytesSegment(); + + NilBytesSegment() + { + + } + + public ArraySegment Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return default(ArraySegment); + } + } + + internal sealed class Bin8BytesSegment : IBytesSegmentDecoder + { + internal static readonly IBytesSegmentDecoder Instance = new Bin8BytesSegment(); + + Bin8BytesSegment() + { + + } + + public ArraySegment Read(byte[] bytes, int offset, out int readSize) + { + var length = bytes[offset + 1]; + + readSize = length + 2; + return new ArraySegment(bytes, offset + 2, length); + } + } + + internal sealed class Bin16BytesSegment : IBytesSegmentDecoder + { + internal static readonly IBytesSegmentDecoder Instance = new Bin16BytesSegment(); + + Bin16BytesSegment() + { + + } + + public ArraySegment Read(byte[] bytes, int offset, out int readSize) + { + var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); + + readSize = length + 3; + return new ArraySegment(bytes, offset + 3, length); + } + } + + internal sealed class Bin32BytesSegment : IBytesSegmentDecoder + { + internal static readonly IBytesSegmentDecoder Instance = new Bin32BytesSegment(); + + Bin32BytesSegment() + { + + } + + public ArraySegment Read(byte[] bytes, int offset, out int readSize) + { + var length = (bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | (bytes[offset + 4]); + readSize = length + 5; + return new ArraySegment(bytes, offset + 5, length); + } + } + + internal sealed class InvalidBytesSegment : IBytesSegmentDecoder + { + internal static readonly IBytesSegmentDecoder Instance = new InvalidBytesSegment(); + + InvalidBytesSegment() + { + + } + + public ArraySegment Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface ISByteDecoder + { + sbyte Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixSByte : ISByteDecoder + { + internal static readonly ISByteDecoder Instance = new FixSByte(); + + FixSByte() + { + + } + + public sbyte Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return unchecked((sbyte)bytes[offset]); + } + } + + internal sealed class Int8SByte : ISByteDecoder + { + internal static readonly ISByteDecoder Instance = new Int8SByte(); + + Int8SByte() + { + + } + + public sbyte Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + return unchecked((sbyte)(bytes[offset + 1])); + } + } + + internal sealed class InvalidSByte : ISByteDecoder + { + internal static readonly ISByteDecoder Instance = new InvalidSByte(); + + InvalidSByte() + { + + } + + public sbyte Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface ISingleDecoder + { + float Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixNegativeFloat : ISingleDecoder + { + internal static readonly ISingleDecoder Instance = new FixNegativeFloat(); + + FixNegativeFloat() + { + + } + + public Single Read(byte[] bytes, int offset, out int readSize) + { + return FixSByte.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class FixFloat : ISingleDecoder + { + internal static readonly ISingleDecoder Instance = new FixFloat(); + + FixFloat() + { + + } + + public Single Read(byte[] bytes, int offset, out int readSize) + { + return FixByte.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class Int8Single : ISingleDecoder + { + internal static readonly ISingleDecoder Instance = new Int8Single(); + + Int8Single() + { + + } + + public Single Read(byte[] bytes, int offset, out int readSize) + { + return Int8SByte.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class Int16Single : ISingleDecoder + { + internal static readonly ISingleDecoder Instance = new Int16Single(); + + Int16Single() + { + + } + + public Single Read(byte[] bytes, int offset, out int readSize) + { + return Int16Int16.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class Int32Single : ISingleDecoder + { + internal static readonly ISingleDecoder Instance = new Int32Single(); + + Int32Single() + { + + } + + public Single Read(byte[] bytes, int offset, out int readSize) + { + return Int32Int32.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class Int64Single : ISingleDecoder + { + internal static readonly ISingleDecoder Instance = new Int64Single(); + + Int64Single() + { + + } + + public Single Read(byte[] bytes, int offset, out int readSize) + { + return Int64Int64.Instance.Read(bytes, offset, out readSize); + } + } + + + internal sealed class UInt8Single : ISingleDecoder + { + internal static readonly ISingleDecoder Instance = new UInt8Single(); + + UInt8Single() + { + + } + + public Single Read(byte[] bytes, int offset, out int readSize) + { + return UInt8Byte.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class UInt16Single : ISingleDecoder + { + internal static readonly ISingleDecoder Instance = new UInt16Single(); + + UInt16Single() + { + + } + + public Single Read(byte[] bytes, int offset, out int readSize) + { + return UInt16UInt16.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class UInt32Single : ISingleDecoder + { + internal static readonly ISingleDecoder Instance = new UInt32Single(); + + UInt32Single() + { + + } + + public Single Read(byte[] bytes, int offset, out int readSize) + { + return UInt32UInt32.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class UInt64Single : ISingleDecoder + { + internal static readonly ISingleDecoder Instance = new UInt64Single(); + + UInt64Single() + { + + } + + public Single Read(byte[] bytes, int offset, out int readSize) + { + return UInt64UInt64.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class Float32Single : ISingleDecoder + { + internal static readonly ISingleDecoder Instance = new Float32Single(); + + Float32Single() + { + + } + + public Single Read(byte[] bytes, int offset, out int readSize) + { + readSize = 5; + return new Float32Bits(bytes, offset + 1).Value; + } + } + + internal sealed class InvalidSingle : ISingleDecoder + { + internal static readonly ISingleDecoder Instance = new InvalidSingle(); + + InvalidSingle() + { + + } + + public Single Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IDoubleDecoder + { + double Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixNegativeDouble : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new FixNegativeDouble(); + + FixNegativeDouble() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + return FixSByte.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class FixDouble : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new FixDouble(); + + FixDouble() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + return FixByte.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class Int8Double : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new Int8Double(); + + Int8Double() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + return Int8SByte.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class Int16Double : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new Int16Double(); + + Int16Double() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + return Int16Int16.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class Int32Double : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new Int32Double(); + + Int32Double() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + return Int32Int32.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class Int64Double : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new Int64Double(); + + Int64Double() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + return Int64Int64.Instance.Read(bytes, offset, out readSize); + } + } + + + internal sealed class UInt8Double : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new UInt8Double(); + + UInt8Double() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + return UInt8Byte.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class UInt16Double : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new UInt16Double(); + + UInt16Double() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + return UInt16UInt16.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class UInt32Double : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new UInt32Double(); + + UInt32Double() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + return UInt32UInt32.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class UInt64Double : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new UInt64Double(); + + UInt64Double() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + return UInt64UInt64.Instance.Read(bytes, offset, out readSize); + } + } + + internal sealed class Float32Double : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new Float32Double(); + + Float32Double() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + readSize = 5; + return new Float32Bits(bytes, offset + 1).Value; + } + } + + internal sealed class Float64Double : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new Float64Double(); + + Float64Double() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + readSize = 9; + return new Float64Bits(bytes, offset + 1).Value; + } + } + + internal sealed class InvalidDouble : IDoubleDecoder + { + internal static readonly IDoubleDecoder Instance = new InvalidDouble(); + + InvalidDouble() + { + + } + + public Double Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IInt16Decoder + { + Int16 Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixNegativeInt16 : IInt16Decoder + { + internal static readonly IInt16Decoder Instance = new FixNegativeInt16(); + + FixNegativeInt16() + { + + } + + public Int16 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return unchecked((short)(sbyte)bytes[offset]); + } + } + + internal sealed class FixInt16 : IInt16Decoder + { + internal static readonly IInt16Decoder Instance = new FixInt16(); + + FixInt16() + { + + } + + public Int16 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return unchecked((short)bytes[offset]); + } + } + + internal sealed class UInt8Int16 : IInt16Decoder + { + internal static readonly IInt16Decoder Instance = new UInt8Int16(); + + UInt8Int16() + { + + } + + public Int16 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + return unchecked((short)(byte)(bytes[offset + 1])); + } + } + + internal sealed class UInt16Int16 : IInt16Decoder + { + internal static readonly IInt16Decoder Instance = new UInt16Int16(); + + UInt16Int16() + { + + } + + public Int16 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 3; + return checked((Int16)((bytes[offset + 1] << 8) + (bytes[offset + 2]))); + } + } + + internal sealed class Int8Int16 : IInt16Decoder + { + internal static readonly IInt16Decoder Instance = new Int8Int16(); + + Int8Int16() + { + + } + + public Int16 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + return unchecked((short)(sbyte)(bytes[offset + 1])); + } + } + + internal sealed class Int16Int16 : IInt16Decoder + { + internal static readonly IInt16Decoder Instance = new Int16Int16(); + + Int16Int16() + { + + } + + public Int16 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 3; + unchecked + { + return (short)((bytes[offset + 1] << 8) | (bytes[offset + 2])); + } + } + } + + internal sealed class InvalidInt16 : IInt16Decoder + { + internal static readonly IInt16Decoder Instance = new InvalidInt16(); + + InvalidInt16() + { + + } + + public Int16 Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IInt32Decoder + { + Int32 Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixNegativeInt32 : IInt32Decoder + { + internal static readonly IInt32Decoder Instance = new FixNegativeInt32(); + + FixNegativeInt32() + { + + } + + public Int32 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return unchecked((int)(sbyte)bytes[offset]); + } + } + + internal sealed class FixInt32 : IInt32Decoder + { + internal static readonly IInt32Decoder Instance = new FixInt32(); + + FixInt32() + { + + } + + public Int32 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return unchecked((int)bytes[offset]); + } + } + + internal sealed class UInt8Int32 : IInt32Decoder + { + internal static readonly IInt32Decoder Instance = new UInt8Int32(); + + UInt8Int32() + { + + } + + public Int32 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + return unchecked((int)(byte)(bytes[offset + 1])); + } + } + internal sealed class UInt16Int32 : IInt32Decoder + { + internal static readonly IInt32Decoder Instance = new UInt16Int32(); + + UInt16Int32() + { + + } + + public Int32 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 3; + return (Int32)((bytes[offset + 1] << 8) | (bytes[offset + 2])); + } + } + + internal sealed class UInt32Int32 : IInt32Decoder + { + internal static readonly IInt32Decoder Instance = new UInt32Int32(); + + UInt32Int32() + { + + } + + public Int32 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 5; + checked + { + return (Int32)((UInt32)(bytes[offset + 1] << 24) | (UInt32)(bytes[offset + 2] << 16) | (UInt32)(bytes[offset + 3] << 8) | (UInt32)bytes[offset + 4]); + } + } + } + + internal sealed class Int8Int32 : IInt32Decoder + { + internal static readonly IInt32Decoder Instance = new Int8Int32(); + + Int8Int32() + { + + } + + public Int32 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + return unchecked((int)(sbyte)(bytes[offset + 1])); + } + } + + internal sealed class Int16Int32 : IInt32Decoder + { + internal static readonly IInt32Decoder Instance = new Int16Int32(); + + Int16Int32() + { + + } + + public Int32 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 3; + unchecked + { + return (int)(short)((bytes[offset + 1] << 8) | (bytes[offset + 2])); + } + } + } + + internal sealed class Int32Int32 : IInt32Decoder + { + internal static readonly IInt32Decoder Instance = new Int32Int32(); + + Int32Int32() + { + + } + + public Int32 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 5; + unchecked + { + return (int)((bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | bytes[offset + 4]); + } + } + } + + internal sealed class InvalidInt32 : IInt32Decoder + { + internal static readonly IInt32Decoder Instance = new InvalidInt32(); + + InvalidInt32() + { + } + + public Int32 Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IInt64Decoder + { + Int64 Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixNegativeInt64 : IInt64Decoder + { + internal static readonly IInt64Decoder Instance = new FixNegativeInt64(); + + FixNegativeInt64() + { + + } + + public Int64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return unchecked((long)(sbyte)bytes[offset]); + } + } + + internal sealed class FixInt64 : IInt64Decoder + { + internal static readonly IInt64Decoder Instance = new FixInt64(); + + FixInt64() + { + + } + + public Int64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return unchecked((long)bytes[offset]); + } + } + + internal sealed class UInt8Int64 : IInt64Decoder + { + internal static readonly IInt64Decoder Instance = new UInt8Int64(); + + UInt8Int64() + { + + } + + public Int64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + return unchecked((int)(byte)(bytes[offset + 1])); + } + } + internal sealed class UInt16Int64 : IInt64Decoder + { + internal static readonly IInt64Decoder Instance = new UInt16Int64(); + + UInt16Int64() + { + + } + + public Int64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 3; + return (Int64)((bytes[offset + 1] << 8) | (bytes[offset + 2])); + } + } + + internal sealed class UInt32Int64 : IInt64Decoder + { + internal static readonly IInt64Decoder Instance = new UInt32Int64(); + + UInt32Int64() + { + + } + + public Int64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 5; + return unchecked((Int64)((uint)(bytes[offset + 1] << 24) | ((uint)bytes[offset + 2] << 16) | ((uint)bytes[offset + 3] << 8) | (uint)bytes[offset + 4])); + } + } + + internal sealed class UInt64Int64 : IInt64Decoder + { + internal static readonly IInt64Decoder Instance = new UInt64Int64(); + + UInt64Int64() + { + + } + + public Int64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 9; + checked + { + return (Int64)bytes[offset + 1] << 56 | (Int64)bytes[offset + 2] << 48 | (Int64)bytes[offset + 3] << 40 | (Int64)bytes[offset + 4] << 32 + | (Int64)bytes[offset + 5] << 24 | (Int64)bytes[offset + 6] << 16 | (Int64)bytes[offset + 7] << 8 | (Int64)bytes[offset + 8]; + } + } + } + + + internal sealed class Int8Int64 : IInt64Decoder + { + internal static readonly IInt64Decoder Instance = new Int8Int64(); + + Int8Int64() + { + + } + + public Int64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + return unchecked((long)(sbyte)(bytes[offset + 1])); + } + } + + internal sealed class Int16Int64 : IInt64Decoder + { + internal static readonly IInt64Decoder Instance = new Int16Int64(); + + Int16Int64() + { + + } + + public Int64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 3; + unchecked + { + return (long)(short)((bytes[offset + 1] << 8) | (bytes[offset + 2])); + } + } + } + + internal sealed class Int32Int64 : IInt64Decoder + { + internal static readonly IInt64Decoder Instance = new Int32Int64(); + + Int32Int64() + { + + } + + public Int64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 5; + unchecked + { + return (long)((long)(bytes[offset + 1] << 24) + (long)(bytes[offset + 2] << 16) + (long)(bytes[offset + 3] << 8) + (long)bytes[offset + 4]); + } + } + } + + internal sealed class Int64Int64 : IInt64Decoder + { + internal static readonly IInt64Decoder Instance = new Int64Int64(); + + Int64Int64() + { + + } + + public Int64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 9; + unchecked + { + return (long)bytes[offset + 1] << 56 | (long)bytes[offset + 2] << 48 | (long)bytes[offset + 3] << 40 | (long)bytes[offset + 4] << 32 + | (long)bytes[offset + 5] << 24 | (long)bytes[offset + 6] << 16 | (long)bytes[offset + 7] << 8 | (long)bytes[offset + 8]; + } + } + } + + internal sealed class InvalidInt64 : IInt64Decoder + { + internal static readonly IInt64Decoder Instance = new InvalidInt64(); + + InvalidInt64() + { + + } + + public Int64 Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IUInt16Decoder + { + UInt16 Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixUInt16 : IUInt16Decoder + { + internal static readonly IUInt16Decoder Instance = new FixUInt16(); + + FixUInt16() + { + + } + + public UInt16 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return unchecked((UInt16)bytes[offset]); + } + } + + internal sealed class UInt8UInt16 : IUInt16Decoder + { + internal static readonly IUInt16Decoder Instance = new UInt8UInt16(); + + UInt8UInt16() + { + + } + + public UInt16 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + return unchecked((UInt16)(bytes[offset + 1])); + } + } + + internal sealed class UInt16UInt16 : IUInt16Decoder + { + internal static readonly IUInt16Decoder Instance = new UInt16UInt16(); + + UInt16UInt16() + { + + } + + public UInt16 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 3; + unchecked + { + return (UInt16)((bytes[offset + 1] << 8) | (bytes[offset + 2])); + } + } + } + + internal sealed class InvalidUInt16 : IUInt16Decoder + { + internal static readonly IUInt16Decoder Instance = new InvalidUInt16(); + + InvalidUInt16() + { + + } + + public UInt16 Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IUInt32Decoder + { + UInt32 Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixUInt32 : IUInt32Decoder + { + internal static readonly IUInt32Decoder Instance = new FixUInt32(); + + FixUInt32() + { + + } + + public UInt32 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return unchecked((UInt32)bytes[offset]); + } + } + + internal sealed class UInt8UInt32 : IUInt32Decoder + { + internal static readonly IUInt32Decoder Instance = new UInt8UInt32(); + + UInt8UInt32() + { + + } + + public UInt32 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + return unchecked((UInt32)(bytes[offset + 1])); + } + } + + internal sealed class UInt16UInt32 : IUInt32Decoder + { + internal static readonly IUInt32Decoder Instance = new UInt16UInt32(); + + UInt16UInt32() + { + + } + + public UInt32 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 3; + unchecked + { + return (UInt32)((bytes[offset + 1] << 8) | (bytes[offset + 2])); + } + } + } + + internal sealed class UInt32UInt32 : IUInt32Decoder + { + internal static readonly IUInt32Decoder Instance = new UInt32UInt32(); + + UInt32UInt32() + { + + } + + public UInt32 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 5; + unchecked + { + return (UInt32)((UInt32)(bytes[offset + 1] << 24) | (UInt32)(bytes[offset + 2] << 16) | (UInt32)(bytes[offset + 3] << 8) | (UInt32)bytes[offset + 4]); + } + } + } + + internal sealed class InvalidUInt32 : IUInt32Decoder + { + internal static readonly IUInt32Decoder Instance = new InvalidUInt32(); + + InvalidUInt32() + { + + } + + public UInt32 Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IUInt64Decoder + { + UInt64 Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixUInt64 : IUInt64Decoder + { + internal static readonly IUInt64Decoder Instance = new FixUInt64(); + + FixUInt64() + { + + } + + public UInt64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return unchecked((UInt64)bytes[offset]); + } + } + + internal sealed class UInt8UInt64 : IUInt64Decoder + { + internal static readonly IUInt64Decoder Instance = new UInt8UInt64(); + + UInt8UInt64() + { + + } + + public UInt64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + return unchecked((UInt64)(bytes[offset + 1])); + } + } + + internal sealed class UInt16UInt64 : IUInt64Decoder + { + internal static readonly IUInt64Decoder Instance = new UInt16UInt64(); + + UInt16UInt64() + { + + } + + public UInt64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 3; + unchecked + { + return (UInt64)((bytes[offset + 1] << 8) | (bytes[offset + 2])); + } + } + } + + internal sealed class UInt32UInt64 : IUInt64Decoder + { + internal static readonly IUInt64Decoder Instance = new UInt32UInt64(); + + UInt32UInt64() + { + + } + + public UInt64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 5; + unchecked + { + return (UInt64)(((UInt64)bytes[offset + 1] << 24) + (ulong)(bytes[offset + 2] << 16) + (UInt64)(bytes[offset + 3] << 8) + (UInt64)bytes[offset + 4]); + } + } + } + + internal sealed class UInt64UInt64 : IUInt64Decoder + { + internal static readonly IUInt64Decoder Instance = new UInt64UInt64(); + + UInt64UInt64() + { + + } + + public UInt64 Read(byte[] bytes, int offset, out int readSize) + { + readSize = 9; + unchecked + { + return (UInt64)bytes[offset + 1] << 56 | (UInt64)bytes[offset + 2] << 48 | (UInt64)bytes[offset + 3] << 40 | (UInt64)bytes[offset + 4] << 32 + | (UInt64)bytes[offset + 5] << 24 | (UInt64)bytes[offset + 6] << 16 | (UInt64)bytes[offset + 7] << 8 | (UInt64)bytes[offset + 8]; + } + } + } + + internal sealed class InvalidUInt64 : IUInt64Decoder + { + internal static readonly IUInt64Decoder Instance = new InvalidUInt64(); + + InvalidUInt64() + { + + } + + public UInt64 Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IStringDecoder + { + String Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class NilString : IStringDecoder + { + internal static readonly IStringDecoder Instance = new NilString(); + + NilString() + { + + } + + public String Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return null; + } + } + + internal sealed class FixString : IStringDecoder + { + internal static readonly IStringDecoder Instance = new FixString(); + + FixString() + { + + } + + public String Read(byte[] bytes, int offset, out int readSize) + { + var length = bytes[offset] & 0x1F; + readSize = length + 1; + return StringEncoding.UTF8.GetString(bytes, offset + 1, length); + } + } + + internal sealed class Str8String : IStringDecoder + { + internal static readonly IStringDecoder Instance = new Str8String(); + + Str8String() + { + + } + + public String Read(byte[] bytes, int offset, out int readSize) + { + var length = (int)bytes[offset + 1]; + readSize = length + 2; + return StringEncoding.UTF8.GetString(bytes, offset + 2, length); + } + } + + internal sealed class Str16String : IStringDecoder + { + internal static readonly IStringDecoder Instance = new Str16String(); + + Str16String() + { + + } + + public String Read(byte[] bytes, int offset, out int readSize) + { + unchecked + { + var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); + readSize = length + 3; + return StringEncoding.UTF8.GetString(bytes, offset + 3, length); + } + } + } + + internal sealed class Str32String : IStringDecoder + { + internal static readonly IStringDecoder Instance = new Str32String(); + + Str32String() + { + + } + + public String Read(byte[] bytes, int offset, out int readSize) + { + unchecked + { + var length = (int)((uint)(bytes[offset + 1] << 24) | (uint)(bytes[offset + 2] << 16) | (uint)(bytes[offset + 3] << 8) | (uint)bytes[offset + 4]); + readSize = length + 5; + return StringEncoding.UTF8.GetString(bytes, offset + 5, length); + } + } + } + + internal sealed class InvalidString : IStringDecoder + { + internal static readonly IStringDecoder Instance = new InvalidString(); + + InvalidString() + { + + } + + public String Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IStringSegmentDecoder + { + ArraySegment Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class NilStringSegment : IStringSegmentDecoder + { + internal static readonly IStringSegmentDecoder Instance = new NilStringSegment(); + + NilStringSegment() + { + + } + + public ArraySegment Read(byte[] bytes, int offset, out int readSize) + { + readSize = 1; + return new ArraySegment(bytes, offset, 1); + } + } + + internal sealed class FixStringSegment : IStringSegmentDecoder + { + internal static readonly IStringSegmentDecoder Instance = new FixStringSegment(); + + FixStringSegment() + { + + } + + public ArraySegment Read(byte[] bytes, int offset, out int readSize) + { + var length = bytes[offset] & 0x1F; + readSize = length + 1; + return new ArraySegment(bytes, offset + 1, length); + } + } + + internal sealed class Str8StringSegment : IStringSegmentDecoder + { + internal static readonly IStringSegmentDecoder Instance = new Str8StringSegment(); + + Str8StringSegment() + { + + } + + public ArraySegment Read(byte[] bytes, int offset, out int readSize) + { + var length = (int)bytes[offset + 1]; + readSize = length + 2; + return new ArraySegment(bytes, offset + 2, length); + } + } + + internal sealed class Str16StringSegment : IStringSegmentDecoder + { + internal static readonly IStringSegmentDecoder Instance = new Str16StringSegment(); + + Str16StringSegment() + { + + } + + public ArraySegment Read(byte[] bytes, int offset, out int readSize) + { + unchecked + { + var length = (bytes[offset + 1] << 8) + (bytes[offset + 2]); + readSize = length + 3; + return new ArraySegment(bytes, offset + 3, length); + } + } + } + + internal sealed class Str32StringSegment : IStringSegmentDecoder + { + internal static readonly IStringSegmentDecoder Instance = new Str32StringSegment(); + + Str32StringSegment() + { + + } + + public ArraySegment Read(byte[] bytes, int offset, out int readSize) + { + unchecked + { + var length = (int)((uint)(bytes[offset + 1] << 24) | (uint)(bytes[offset + 2] << 16) | (uint)(bytes[offset + 3] << 8) | (uint)bytes[offset + 4]); + readSize = length + 5; + return new ArraySegment(bytes, offset + 5, length); + } + } + } + + internal sealed class InvalidStringSegment : IStringSegmentDecoder + { + internal static readonly IStringSegmentDecoder Instance = new InvalidStringSegment(); + + InvalidStringSegment() + { + + } + + public ArraySegment Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IExtDecoder + { + ExtensionResult Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixExt1 : IExtDecoder + { + internal static readonly IExtDecoder Instance = new FixExt1(); + + FixExt1() + { + + } + + public ExtensionResult Read(byte[] bytes, int offset, out int readSize) + { + readSize = 3; + var typeCode = unchecked((sbyte)bytes[offset + 1]); + var body = new byte[1] { bytes[offset + 2] }; // make new bytes is overhead? + return new ExtensionResult(typeCode, body); + } + } + + internal sealed class FixExt2 : IExtDecoder + { + internal static readonly IExtDecoder Instance = new FixExt2(); + + FixExt2() + { + + } + + public ExtensionResult Read(byte[] bytes, int offset, out int readSize) + { + readSize = 4; + var typeCode = unchecked((sbyte)bytes[offset + 1]); + var body = new byte[2] + { + bytes[offset + 2], + bytes[offset + 3], + }; + return new ExtensionResult(typeCode, body); + } + } + + internal sealed class FixExt4 : IExtDecoder + { + internal static readonly IExtDecoder Instance = new FixExt4(); + + FixExt4() + { + + } + + public ExtensionResult Read(byte[] bytes, int offset, out int readSize) + { + readSize = 6; + var typeCode = unchecked((sbyte)bytes[offset + 1]); + var body = new byte[4] + { + bytes[offset + 2], + bytes[offset + 3], + bytes[offset + 4], + bytes[offset + 5], + }; + return new ExtensionResult(typeCode, body); + } + } + + internal sealed class FixExt8 : IExtDecoder + { + internal static readonly IExtDecoder Instance = new FixExt8(); + + FixExt8() + { + + } + + public ExtensionResult Read(byte[] bytes, int offset, out int readSize) + { + readSize = 10; + var typeCode = unchecked((sbyte)bytes[offset + 1]); + var body = new byte[8] + { + bytes[offset + 2], + bytes[offset + 3], + bytes[offset + 4], + bytes[offset + 5], + bytes[offset + 6], + bytes[offset + 7], + bytes[offset + 8], + bytes[offset + 9], + }; + return new ExtensionResult(typeCode, body); + } + } + + internal sealed class FixExt16 : IExtDecoder + { + internal static readonly IExtDecoder Instance = new FixExt16(); + + FixExt16() + { + + } + + public ExtensionResult Read(byte[] bytes, int offset, out int readSize) + { + readSize = 18; + var typeCode = unchecked((sbyte)bytes[offset + 1]); + var body = new byte[16] + { + bytes[offset + 2], + bytes[offset + 3], + bytes[offset + 4], + bytes[offset + 5], + bytes[offset + 6], + bytes[offset + 7], + bytes[offset + 8], + bytes[offset + 9], + bytes[offset + 10], + bytes[offset + 11], + bytes[offset + 12], + bytes[offset + 13], + bytes[offset + 14], + bytes[offset + 15], + bytes[offset + 16], + bytes[offset + 17] + }; + return new ExtensionResult(typeCode, body); + } + } + + internal sealed class Ext8 : IExtDecoder + { + internal static readonly IExtDecoder Instance = new Ext8(); + + Ext8() + { + + } + + public ExtensionResult Read(byte[] bytes, int offset, out int readSize) + { + unchecked + { + var length = bytes[offset + 1]; + var typeCode = unchecked((sbyte)bytes[offset + 2]); + + var body = new byte[length]; + readSize = (int)length + 3; + Buffer.BlockCopy(bytes, offset + 3, body, 0, (int)length); + return new ExtensionResult(typeCode, body); + } + } + } + + internal sealed class Ext16 : IExtDecoder + { + internal static readonly IExtDecoder Instance = new Ext16(); + + Ext16() + { + + } + + public ExtensionResult Read(byte[] bytes, int offset, out int readSize) + { + unchecked + { + var length = (int)((UInt16)(bytes[offset + 1] << 8) | (UInt16)bytes[offset + 2]); + var typeCode = unchecked((sbyte)bytes[offset + 3]); + + var body = new byte[length]; + readSize = length + 4; + Buffer.BlockCopy(bytes, offset + 4, body, 0, (int)length); + return new ExtensionResult(typeCode, body); + } + } + } + + internal sealed class Ext32 : IExtDecoder + { + internal static readonly IExtDecoder Instance = new Ext32(); + + Ext32() + { + + } + + public ExtensionResult Read(byte[] bytes, int offset, out int readSize) + { + unchecked + { + var length = (UInt32)((UInt32)(bytes[offset + 1] << 24) | (UInt32)(bytes[offset + 2] << 16) | (UInt32)(bytes[offset + 3] << 8) | (UInt32)bytes[offset + 4]); + var typeCode = unchecked((sbyte)bytes[offset + 5]); + + var body = new byte[length]; + checked + { + readSize = (int)length + 6; + Buffer.BlockCopy(bytes, offset + 6, body, 0, (int)length); + } + return new ExtensionResult(typeCode, body); + } + } + } + + internal sealed class InvalidExt : IExtDecoder + { + internal static readonly IExtDecoder Instance = new InvalidExt(); + + InvalidExt() + { + + } + + public ExtensionResult Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + + + + + + internal interface IExtHeaderDecoder + { + ExtensionHeader Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixExt1Header : IExtHeaderDecoder + { + internal static readonly IExtHeaderDecoder Instance = new FixExt1Header(); + + FixExt1Header() + { + + } + + public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + var typeCode = unchecked((sbyte)bytes[offset + 1]); + return new ExtensionHeader(typeCode, 1); + } + } + + internal sealed class FixExt2Header : IExtHeaderDecoder + { + internal static readonly IExtHeaderDecoder Instance = new FixExt2Header(); + + FixExt2Header() + { + + } + + public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + var typeCode = unchecked((sbyte)bytes[offset + 1]); + return new ExtensionHeader(typeCode, 2); + } + } + + internal sealed class FixExt4Header : IExtHeaderDecoder + { + internal static readonly IExtHeaderDecoder Instance = new FixExt4Header(); + + FixExt4Header() + { + + } + + public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + var typeCode = unchecked((sbyte)bytes[offset + 1]); + return new ExtensionHeader(typeCode, 4); + } + } + + internal sealed class FixExt8Header : IExtHeaderDecoder + { + internal static readonly IExtHeaderDecoder Instance = new FixExt8Header(); + + FixExt8Header() + { + + } + + public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + var typeCode = unchecked((sbyte)bytes[offset + 1]); + return new ExtensionHeader(typeCode, 8); + } + } + + internal sealed class FixExt16Header : IExtHeaderDecoder + { + internal static readonly IExtHeaderDecoder Instance = new FixExt16Header(); + + FixExt16Header() + { + + } + + public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) + { + readSize = 2; + var typeCode = unchecked((sbyte)bytes[offset + 1]); + return new ExtensionHeader(typeCode, 16); + } + } + + internal sealed class Ext8Header : IExtHeaderDecoder + { + internal static readonly IExtHeaderDecoder Instance = new Ext8Header(); + + Ext8Header() + { + + } + + public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) + { + unchecked + { + var length = bytes[offset + 1]; + var typeCode = unchecked((sbyte)bytes[offset + 2]); + + readSize = 3; + return new ExtensionHeader(typeCode, length); + } + } + } + + internal sealed class Ext16Header : IExtHeaderDecoder + { + internal static readonly IExtHeaderDecoder Instance = new Ext16Header(); + + Ext16Header() + { + + } + + public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) + { + unchecked + { + var length = (UInt32)((UInt16)(bytes[offset + 1] << 8) | (UInt16)bytes[offset + 2]); + var typeCode = unchecked((sbyte)bytes[offset + 3]); + + readSize = 4; + return new ExtensionHeader(typeCode, length); + } + } + } + + internal sealed class Ext32Header : IExtHeaderDecoder + { + internal static readonly IExtHeaderDecoder Instance = new Ext32Header(); + + Ext32Header() + { + + } + + public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) + { + unchecked + { + var length = (UInt32)((UInt32)(bytes[offset + 1] << 24) | (UInt32)(bytes[offset + 2] << 16) | (UInt32)(bytes[offset + 3] << 8) | (UInt32)bytes[offset + 4]); + var typeCode = unchecked((sbyte)bytes[offset + 5]); + + readSize = 6; + return new ExtensionHeader(typeCode, length); + } + } + } + + internal sealed class InvalidExtHeader : IExtHeaderDecoder + { + internal static readonly IExtHeaderDecoder Instance = new InvalidExtHeader(); + + InvalidExtHeader() + { + + } + + public ExtensionHeader Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IDateTimeDecoder + { + DateTime Read(byte[] bytes, int offset, out int readSize); + } + + internal sealed class FixExt4DateTime : IDateTimeDecoder + { + internal static readonly IDateTimeDecoder Instance = new FixExt4DateTime(); + + FixExt4DateTime() + { + + } + + public DateTime Read(byte[] bytes, int offset, out int readSize) + { + var typeCode = unchecked((sbyte)bytes[offset + 1]); + if (typeCode != ReservedMessagePackExtensionTypeCode.DateTime) + { + throw new InvalidOperationException(string.Format("typeCode is invalid. typeCode:{0}", typeCode)); + } + + unchecked + { + var seconds = (UInt32)((UInt32)(bytes[offset + 2] << 24) | (UInt32)(bytes[offset + 3] << 16) | (UInt32)(bytes[offset + 4] << 8) | (UInt32)bytes[offset + 5]); + + readSize = 6; + return DateTimeConstants.UnixEpoch.AddSeconds(seconds); + } + } + } + + internal sealed class FixExt8DateTime : IDateTimeDecoder + { + internal static readonly IDateTimeDecoder Instance = new FixExt8DateTime(); + + FixExt8DateTime() + { + + } + + public DateTime Read(byte[] bytes, int offset, out int readSize) + { + var typeCode = unchecked((sbyte)bytes[offset + 1]); + if (typeCode != ReservedMessagePackExtensionTypeCode.DateTime) + { + throw new InvalidOperationException(string.Format("typeCode is invalid. typeCode:{0}", typeCode)); + } + + var data64 = (UInt64)bytes[offset + 2] << 56 | (UInt64)bytes[offset + 3] << 48 | (UInt64)bytes[offset + 4] << 40 | (UInt64)bytes[offset + 5] << 32 + | (UInt64)bytes[offset + 6] << 24 | (UInt64)bytes[offset + 7] << 16 | (UInt64)bytes[offset + 8] << 8 | (UInt64)bytes[offset + 9]; + + var nanoseconds = (long)(data64 >> 34); + var seconds = data64 & 0x00000003ffffffffL; + + readSize = 10; + return DateTimeConstants.UnixEpoch.AddSeconds(seconds).AddTicks(nanoseconds / DateTimeConstants.NanosecondsPerTick); + } + } + + internal sealed class Ext8DateTime : IDateTimeDecoder + { + internal static readonly IDateTimeDecoder Instance = new Ext8DateTime(); + + Ext8DateTime() + { + + } + + public DateTime Read(byte[] bytes, int offset, out int readSize) + { + var length = checked((byte)bytes[offset + 1]); + var typeCode = unchecked((sbyte)bytes[offset + 2]); + if (length != 12 || typeCode != ReservedMessagePackExtensionTypeCode.DateTime) + { + throw new InvalidOperationException(string.Format("typeCode is invalid. typeCode:{0}", typeCode)); + } + + var nanoseconds = (UInt32)((UInt32)(bytes[offset + 3] << 24) | (UInt32)(bytes[offset + 4] << 16) | (UInt32)(bytes[offset + 5] << 8) | (UInt32)bytes[offset + 6]); + unchecked + { + var seconds = (long)bytes[offset + 7] << 56 | (long)bytes[offset + 8] << 48 | (long)bytes[offset + 9] << 40 | (long)bytes[offset + 10] << 32 + | (long)bytes[offset + 11] << 24 | (long)bytes[offset + 12] << 16 | (long)bytes[offset + 13] << 8 | (long)bytes[offset + 14]; + + readSize = 15; + return DateTimeConstants.UnixEpoch.AddSeconds(seconds).AddTicks(nanoseconds / DateTimeConstants.NanosecondsPerTick); + } + } + } + + internal sealed class InvalidDateTime : IDateTimeDecoder + { + internal static readonly IDateTimeDecoder Instance = new InvalidDateTime(); + + InvalidDateTime() + { + + } + + public DateTime Read(byte[] bytes, int offset, out int readSize) + { + throw new InvalidOperationException(string.Format("code is invalid. code:{0} format:{1}", bytes[offset], MessagePackCode.ToFormatName(bytes[offset]))); + } + } + + internal interface IReadNextDecoder + { + int Read(byte[] bytes, int offset); + } + + internal sealed class ReadNext1 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNext1(); + ReadNext1() + { + + } + public int Read(byte[] bytes, int offset) { return 1; } + } + + internal sealed class ReadNext2 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNext2(); + ReadNext2() + { + + } + public int Read(byte[] bytes, int offset) { return 2; } + + } + internal sealed class ReadNext3 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNext3(); + ReadNext3() + { + + } + public int Read(byte[] bytes, int offset) { return 3; } + } + internal sealed class ReadNext4 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNext4(); + ReadNext4() + { + + } + public int Read(byte[] bytes, int offset) { return 4; } + } + internal sealed class ReadNext5 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNext5(); + ReadNext5() + { + + } + public int Read(byte[] bytes, int offset) { return 5; } + } + internal sealed class ReadNext6 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNext6(); + ReadNext6() + { + + } + public int Read(byte[] bytes, int offset) { return 6; } + } + + internal sealed class ReadNext9 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNext9(); + ReadNext9() + { + + } + public int Read(byte[] bytes, int offset) { return 9; } + } + internal sealed class ReadNext10 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNext10(); + ReadNext10() + { + + } + public int Read(byte[] bytes, int offset) { return 10; } + } + internal sealed class ReadNext18 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNext18(); + ReadNext18() + { + + } + public int Read(byte[] bytes, int offset) { return 18; } + } + + internal sealed class ReadNextMap : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNextMap(); + ReadNextMap() + { + + } + public int Read(byte[] bytes, int offset) + { + var startOffset = offset; + int readSize; + var length = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); + offset += readSize; + for (int i = 0; i < length; i++) + { + offset += MessagePackBinary.ReadNext(bytes, offset); // key + offset += MessagePackBinary.ReadNext(bytes, offset); // value + } + return offset - startOffset; + } + } + + internal sealed class ReadNextArray : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNextArray(); + ReadNextArray() + { + + } + public int Read(byte[] bytes, int offset) + { + var startOffset = offset; + int readSize; + var length = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + for (int i = 0; i < length; i++) + { + offset += MessagePackBinary.ReadNext(bytes, offset); + } + return offset - startOffset; + } + } + + internal sealed class ReadNextFixStr : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNextFixStr(); + ReadNextFixStr() + { + + } + public int Read(byte[] bytes, int offset) + { + var length = bytes[offset] & 0x1F; + return length + 1; + } + } + + internal sealed class ReadNextStr8 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNextStr8(); + ReadNextStr8() + { + + } + public int Read(byte[] bytes, int offset) + { + var length = (int)bytes[offset + 1]; + return length + 2; + } + } + + internal sealed class ReadNextStr16 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNextStr16(); + ReadNextStr16() + { + + } + public int Read(byte[] bytes, int offset) + { + + var length = (bytes[offset + 1] << 8) | (bytes[offset + 2]); + return length + 3; + } + } + + internal sealed class ReadNextStr32 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNextStr32(); + ReadNextStr32() + { + + } + public int Read(byte[] bytes, int offset) + { + var length = (int)((uint)(bytes[offset + 1] << 24) | (uint)(bytes[offset + 2] << 16) | (uint)(bytes[offset + 3] << 8) | (uint)bytes[offset + 4]); + return length + 5; + } + } + + internal sealed class ReadNextBin8 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNextBin8(); + ReadNextBin8() + { + + } + public int Read(byte[] bytes, int offset) + { + var length = bytes[offset + 1]; + return length + 2; + } + } + + internal sealed class ReadNextBin16 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNextBin16(); + ReadNextBin16() + { + + } + public int Read(byte[] bytes, int offset) + { + + var length = (bytes[offset + 1] << 8) | (bytes[offset + 2]); + return length + 3; + } + } + + internal sealed class ReadNextBin32 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNextBin32(); + ReadNextBin32() + { + + } + public int Read(byte[] bytes, int offset) + { + var length = (bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | (bytes[offset + 4]); + return length + 5; + } + } + + internal sealed class ReadNextExt8 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNextExt8(); + ReadNextExt8() + { + + } + public int Read(byte[] bytes, int offset) + { + var length = bytes[offset + 1]; + return (int)length + 3; + } + } + + internal sealed class ReadNextExt16 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNextExt16(); + ReadNextExt16() + { + + } + public int Read(byte[] bytes, int offset) + { + var length = (int)((UInt16)(bytes[offset + 1] << 8) | (UInt16)bytes[offset + 2]); + return length + 4; + } + } + + internal sealed class ReadNextExt32 : IReadNextDecoder + { + internal static readonly IReadNextDecoder Instance = new ReadNextExt32(); + ReadNextExt32() + { + + } + public int Read(byte[] bytes, int offset) + { + var length = (UInt32)((UInt32)(bytes[offset + 1] << 24) | (UInt32)(bytes[offset + 2] << 16) | (UInt32)(bytes[offset + 3] << 8) | (UInt32)bytes[offset + 4]); + return (int)length + 6; + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackCode.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackCode.cs index a8d0e48ce..0f3180abd 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackCode.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackCode.cs @@ -1,199 +1,199 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace MessagePack -{ - /// - /// https://github.com/msgpack/msgpack/blob/master/spec.md#serialization-type-to-format-conversion - /// - public enum MessagePackType : byte - { - Unknown = 0, - - Integer = 1, - Nil = 2, - Boolean = 3, - Float = 4, - String = 5, - Binary = 6, - Array = 7, - Map = 8, - Extension = 9, - } - - /// - /// https://github.com/msgpack/msgpack/blob/master/spec.md#overview - /// - public static class MessagePackCode - { - public const byte MinFixInt = 0x00; // 0 - public const byte MaxFixInt = 0x7f; // 127 - public const byte MinFixMap = 0x80; // 128 - public const byte MaxFixMap = 0x8f; // 143 - public const byte MinFixArray = 0x90; // 144 - public const byte MaxFixArray = 0x9f; // 159 - public const byte MinFixStr = 0xa0; // 160 - public const byte MaxFixStr = 0xbf; // 191 - public const byte Nil = 0xc0; - public const byte NeverUsed = 0xc1; - public const byte False = 0xc2; - public const byte True = 0xc3; - public const byte Bin8 = 0xc4; - public const byte Bin16 = 0xc5; - public const byte Bin32 = 0xc6; - public const byte Ext8 = 0xc7; - public const byte Ext16 = 0xc8; - public const byte Ext32 = 0xc9; - public const byte Float32 = 0xca; - public const byte Float64 = 0xcb; - public const byte UInt8 = 0xcc; - public const byte UInt16 = 0xcd; - public const byte UInt32 = 0xce; - public const byte UInt64 = 0xcf; - public const byte Int8 = 0xd0; - public const byte Int16 = 0xd1; - public const byte Int32 = 0xd2; - public const byte Int64 = 0xd3; - public const byte FixExt1 = 0xd4; - public const byte FixExt2 = 0xd5; - public const byte FixExt4 = 0xd6; - public const byte FixExt8 = 0xd7; - public const byte FixExt16 = 0xd8; - public const byte Str8 = 0xd9; - public const byte Str16 = 0xda; - public const byte Str32 = 0xdb; - public const byte Array16 = 0xdc; - public const byte Array32 = 0xdd; - public const byte Map16 = 0xde; - public const byte Map32 = 0xdf; - public const byte MinNegativeFixInt = 0xe0; // 224 - public const byte MaxNegativeFixInt = 0xff; // 255 - - static readonly MessagePackType[] typeLookupTable = new MessagePackType[256]; - static readonly string[] formatNameTable = new string[256]; - - static MessagePackCode() - { - // Init Lookup Table - for (int i = MinFixInt; i <= MaxFixInt; i++) - { - typeLookupTable[i] = MessagePackType.Integer; - formatNameTable[i] = "positive fixint"; - } - for (int i = MinFixMap; i <= MaxFixMap; i++) - { - typeLookupTable[i] = MessagePackType.Map; - formatNameTable[i] = "fixmap"; - } - for (int i = MinFixArray; i <= MaxFixArray; i++) - { - typeLookupTable[i] = MessagePackType.Array; - formatNameTable[i] = "fixarray"; - } - for (int i = MinFixStr; i <= MaxFixStr; i++) - { - typeLookupTable[i] = MessagePackType.String; - formatNameTable[i] = "fixstr"; - } - - typeLookupTable[Nil] = MessagePackType.Nil; - typeLookupTable[NeverUsed] = MessagePackType.Unknown; - typeLookupTable[False] = MessagePackType.Boolean; - typeLookupTable[True] = MessagePackType.Boolean; - typeLookupTable[Bin8] = MessagePackType.Binary; - typeLookupTable[Bin16] = MessagePackType.Binary; - typeLookupTable[Bin32] = MessagePackType.Binary; - typeLookupTable[Ext8] = MessagePackType.Extension; - typeLookupTable[Ext16] = MessagePackType.Extension; - typeLookupTable[Ext32] = MessagePackType.Extension; - typeLookupTable[Float32] = MessagePackType.Float; - typeLookupTable[Float64] = MessagePackType.Float; - typeLookupTable[UInt8] = MessagePackType.Integer; - typeLookupTable[UInt16] = MessagePackType.Integer; - typeLookupTable[UInt32] = MessagePackType.Integer; - typeLookupTable[UInt64] = MessagePackType.Integer; - typeLookupTable[Int8] = MessagePackType.Integer; - typeLookupTable[Int16] = MessagePackType.Integer; - typeLookupTable[Int32] = MessagePackType.Integer; - typeLookupTable[Int64] = MessagePackType.Integer; - typeLookupTable[FixExt1] = MessagePackType.Extension; - typeLookupTable[FixExt2] = MessagePackType.Extension; - typeLookupTable[FixExt4] = MessagePackType.Extension; - typeLookupTable[FixExt8] = MessagePackType.Extension; - typeLookupTable[FixExt16] = MessagePackType.Extension; - typeLookupTable[Str8] = MessagePackType.String; - typeLookupTable[Str16] = MessagePackType.String; - typeLookupTable[Str32] = MessagePackType.String; - typeLookupTable[Array16] = MessagePackType.Array; - typeLookupTable[Array32] = MessagePackType.Array; - typeLookupTable[Map16] = MessagePackType.Map; - typeLookupTable[Map32] = MessagePackType.Map; - - formatNameTable[Nil] = "nil"; - formatNameTable[NeverUsed] = "(never used)"; - formatNameTable[False] = "false"; - formatNameTable[True] = "true"; - formatNameTable[Bin8] = "bin 8"; - formatNameTable[Bin16] = "bin 16"; - formatNameTable[Bin32] = "bin 32"; - formatNameTable[Ext8] = "ext 8"; - formatNameTable[Ext16] = "ext 16"; - formatNameTable[Ext32] = "ext 32"; - formatNameTable[Float32] = "float 32"; - formatNameTable[Float64] = "float 64"; - formatNameTable[UInt8] = "uint 8"; - formatNameTable[UInt16] = "uint 16"; - formatNameTable[UInt32] = "uint 32"; - formatNameTable[UInt64] = "uint 64"; - formatNameTable[Int8] = "int 8"; - formatNameTable[Int16] = "int 16"; - formatNameTable[Int32] = "int 32"; - formatNameTable[Int64] = "int 64"; - formatNameTable[FixExt1] = "fixext 1"; - formatNameTable[FixExt2] = "fixext 2"; - formatNameTable[FixExt4] = "fixext 4"; - formatNameTable[FixExt8] = "fixext 8"; - formatNameTable[FixExt16] = "fixext 16"; - formatNameTable[Str8] = "str 8"; - formatNameTable[Str16] = "str 16"; - formatNameTable[Str32] = "str 32"; - formatNameTable[Array16] = "array 16"; - formatNameTable[Array32] = "array 32"; - formatNameTable[Map16] = "map 16"; - formatNameTable[Map32] = "map 32"; - - for (int i = MinNegativeFixInt; i <= MaxNegativeFixInt; i++) - { - typeLookupTable[i] = MessagePackType.Integer; - formatNameTable[i] = "negative fixint"; - } - } - - public static MessagePackType ToMessagePackType(byte code) - { - return typeLookupTable[code]; - } - - public static string ToFormatName(byte code) - { - return formatNameTable[code]; - } - } - - public static class ReservedMessagePackExtensionTypeCode - { - public const sbyte DateTime = -1; - } - - public static class MessagePackRange - { - public const int MinFixNegativeInt = -32; - public const int MaxFixNegativeInt = -1; - public const int MaxFixPositiveInt = 127; - public const int MinFixStringLength = 0; - public const int MaxFixStringLength = 31; - public const int MaxFixMapCount = 15; - public const int MaxFixArrayCount = 15; - } -} +using System; +using System.Collections.Generic; +using System.Text; + +namespace MessagePack +{ + /// + /// https://github.com/msgpack/msgpack/blob/master/spec.md#serialization-type-to-format-conversion + /// + public enum MessagePackType : byte + { + Unknown = 0, + + Integer = 1, + Nil = 2, + Boolean = 3, + Float = 4, + String = 5, + Binary = 6, + Array = 7, + Map = 8, + Extension = 9, + } + + /// + /// https://github.com/msgpack/msgpack/blob/master/spec.md#overview + /// + public static class MessagePackCode + { + public const byte MinFixInt = 0x00; // 0 + public const byte MaxFixInt = 0x7f; // 127 + public const byte MinFixMap = 0x80; // 128 + public const byte MaxFixMap = 0x8f; // 143 + public const byte MinFixArray = 0x90; // 144 + public const byte MaxFixArray = 0x9f; // 159 + public const byte MinFixStr = 0xa0; // 160 + public const byte MaxFixStr = 0xbf; // 191 + public const byte Nil = 0xc0; + public const byte NeverUsed = 0xc1; + public const byte False = 0xc2; + public const byte True = 0xc3; + public const byte Bin8 = 0xc4; + public const byte Bin16 = 0xc5; + public const byte Bin32 = 0xc6; + public const byte Ext8 = 0xc7; + public const byte Ext16 = 0xc8; + public const byte Ext32 = 0xc9; + public const byte Float32 = 0xca; + public const byte Float64 = 0xcb; + public const byte UInt8 = 0xcc; + public const byte UInt16 = 0xcd; + public const byte UInt32 = 0xce; + public const byte UInt64 = 0xcf; + public const byte Int8 = 0xd0; + public const byte Int16 = 0xd1; + public const byte Int32 = 0xd2; + public const byte Int64 = 0xd3; + public const byte FixExt1 = 0xd4; + public const byte FixExt2 = 0xd5; + public const byte FixExt4 = 0xd6; + public const byte FixExt8 = 0xd7; + public const byte FixExt16 = 0xd8; + public const byte Str8 = 0xd9; + public const byte Str16 = 0xda; + public const byte Str32 = 0xdb; + public const byte Array16 = 0xdc; + public const byte Array32 = 0xdd; + public const byte Map16 = 0xde; + public const byte Map32 = 0xdf; + public const byte MinNegativeFixInt = 0xe0; // 224 + public const byte MaxNegativeFixInt = 0xff; // 255 + + static readonly MessagePackType[] typeLookupTable = new MessagePackType[256]; + static readonly string[] formatNameTable = new string[256]; + + static MessagePackCode() + { + // Init Lookup Table + for (int i = MinFixInt; i <= MaxFixInt; i++) + { + typeLookupTable[i] = MessagePackType.Integer; + formatNameTable[i] = "positive fixint"; + } + for (int i = MinFixMap; i <= MaxFixMap; i++) + { + typeLookupTable[i] = MessagePackType.Map; + formatNameTable[i] = "fixmap"; + } + for (int i = MinFixArray; i <= MaxFixArray; i++) + { + typeLookupTable[i] = MessagePackType.Array; + formatNameTable[i] = "fixarray"; + } + for (int i = MinFixStr; i <= MaxFixStr; i++) + { + typeLookupTable[i] = MessagePackType.String; + formatNameTable[i] = "fixstr"; + } + + typeLookupTable[Nil] = MessagePackType.Nil; + typeLookupTable[NeverUsed] = MessagePackType.Unknown; + typeLookupTable[False] = MessagePackType.Boolean; + typeLookupTable[True] = MessagePackType.Boolean; + typeLookupTable[Bin8] = MessagePackType.Binary; + typeLookupTable[Bin16] = MessagePackType.Binary; + typeLookupTable[Bin32] = MessagePackType.Binary; + typeLookupTable[Ext8] = MessagePackType.Extension; + typeLookupTable[Ext16] = MessagePackType.Extension; + typeLookupTable[Ext32] = MessagePackType.Extension; + typeLookupTable[Float32] = MessagePackType.Float; + typeLookupTable[Float64] = MessagePackType.Float; + typeLookupTable[UInt8] = MessagePackType.Integer; + typeLookupTable[UInt16] = MessagePackType.Integer; + typeLookupTable[UInt32] = MessagePackType.Integer; + typeLookupTable[UInt64] = MessagePackType.Integer; + typeLookupTable[Int8] = MessagePackType.Integer; + typeLookupTable[Int16] = MessagePackType.Integer; + typeLookupTable[Int32] = MessagePackType.Integer; + typeLookupTable[Int64] = MessagePackType.Integer; + typeLookupTable[FixExt1] = MessagePackType.Extension; + typeLookupTable[FixExt2] = MessagePackType.Extension; + typeLookupTable[FixExt4] = MessagePackType.Extension; + typeLookupTable[FixExt8] = MessagePackType.Extension; + typeLookupTable[FixExt16] = MessagePackType.Extension; + typeLookupTable[Str8] = MessagePackType.String; + typeLookupTable[Str16] = MessagePackType.String; + typeLookupTable[Str32] = MessagePackType.String; + typeLookupTable[Array16] = MessagePackType.Array; + typeLookupTable[Array32] = MessagePackType.Array; + typeLookupTable[Map16] = MessagePackType.Map; + typeLookupTable[Map32] = MessagePackType.Map; + + formatNameTable[Nil] = "nil"; + formatNameTable[NeverUsed] = "(never used)"; + formatNameTable[False] = "false"; + formatNameTable[True] = "true"; + formatNameTable[Bin8] = "bin 8"; + formatNameTable[Bin16] = "bin 16"; + formatNameTable[Bin32] = "bin 32"; + formatNameTable[Ext8] = "ext 8"; + formatNameTable[Ext16] = "ext 16"; + formatNameTable[Ext32] = "ext 32"; + formatNameTable[Float32] = "float 32"; + formatNameTable[Float64] = "float 64"; + formatNameTable[UInt8] = "uint 8"; + formatNameTable[UInt16] = "uint 16"; + formatNameTable[UInt32] = "uint 32"; + formatNameTable[UInt64] = "uint 64"; + formatNameTable[Int8] = "int 8"; + formatNameTable[Int16] = "int 16"; + formatNameTable[Int32] = "int 32"; + formatNameTable[Int64] = "int 64"; + formatNameTable[FixExt1] = "fixext 1"; + formatNameTable[FixExt2] = "fixext 2"; + formatNameTable[FixExt4] = "fixext 4"; + formatNameTable[FixExt8] = "fixext 8"; + formatNameTable[FixExt16] = "fixext 16"; + formatNameTable[Str8] = "str 8"; + formatNameTable[Str16] = "str 16"; + formatNameTable[Str32] = "str 32"; + formatNameTable[Array16] = "array 16"; + formatNameTable[Array32] = "array 32"; + formatNameTable[Map16] = "map 16"; + formatNameTable[Map32] = "map 32"; + + for (int i = MinNegativeFixInt; i <= MaxNegativeFixInt; i++) + { + typeLookupTable[i] = MessagePackType.Integer; + formatNameTable[i] = "negative fixint"; + } + } + + public static MessagePackType ToMessagePackType(byte code) + { + return typeLookupTable[code]; + } + + public static string ToFormatName(byte code) + { + return formatNameTable[code]; + } + } + + public static class ReservedMessagePackExtensionTypeCode + { + public const sbyte DateTime = -1; + } + + public static class MessagePackRange + { + public const int MinFixNegativeInt = -32; + public const int MaxFixNegativeInt = -1; + public const int MaxFixPositiveInt = 127; + public const int MinFixStringLength = 0; + public const int MaxFixStringLength = 31; + public const int MaxFixMapCount = 15; + public const int MaxFixArrayCount = 15; + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackSerializer.Json.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackSerializer.Json.cs index bf144d5c6..a6fe0fe9e 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackSerializer.Json.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackSerializer.Json.cs @@ -1,362 +1,362 @@ -using MessagePack.Formatters; -using MessagePack.Internal; -using System; -using System.Globalization; -using System.IO; -using System.Text; - -namespace MessagePack -{ - // JSON API - public static partial class MessagePackSerializer - { - /// - /// Dump to JSON string. - /// - public static string ToJson(T obj) - { - return ToJson(Serialize(obj)); - } - - /// - /// Dump to JSON string. - /// - public static string ToJson(T obj, IFormatterResolver resolver) - { - return ToJson(Serialize(obj, resolver)); - } - - /// - /// Dump message-pack binary to JSON string. - /// - public static string ToJson(byte[] bytes) - { - if (bytes == null || bytes.Length == 0) return ""; - - var sb = new StringBuilder(); - ToJsonCore(bytes, 0, sb); - return sb.ToString(); - } - - public static byte[] FromJson(string str) - { - using (var sr = new StringReader(str)) - { - return FromJson(sr); - } - } - - /// - /// From Json String to MessagePack binary - /// - public static byte[] FromJson(TextReader reader) - { - var offset = 0; - byte[] binary = null; - using (var jr = new TinyJsonReader(reader, false)) - { - FromJsonCore(jr, ref binary, ref offset); - } - MessagePackBinary.FastResize(ref binary, offset); - return binary; - } - - /// - /// return buffer is from memory pool, be careful to use. - /// - internal static ArraySegment FromJsonUnsafe(TextReader reader) - { - var offset = 0; - byte[] binary = InternalMemoryPool.GetBuffer(); // from memory pool. - using (var jr = new TinyJsonReader(reader, false)) - { - FromJsonCore(jr, ref binary, ref offset); - } - return new ArraySegment(binary, 0, offset); - } - - static uint FromJsonCore(TinyJsonReader jr, ref byte[] binary, ref int offset) - { - uint count = 0; - while (jr.Read()) - { - switch (jr.TokenType) - { - case TinyJsonToken.None: - break; - case TinyJsonToken.StartObject: - { - var startOffset = offset; - offset += 5; - var mapCount = FromJsonCore(jr, ref binary, ref offset); - mapCount = mapCount / 2; // remove propertyname string count. - MessagePackBinary.WriteMapHeaderForceMap32Block(ref binary, startOffset, mapCount); - count++; - break; - } - case TinyJsonToken.EndObject: - return count; // break - case TinyJsonToken.StartArray: - { - var startOffset = offset; - offset += 5; - var arrayCount = FromJsonCore(jr, ref binary, ref offset); - MessagePackBinary.WriteArrayHeaderForceArray32Block(ref binary, startOffset, arrayCount); - count++; - break; - } - case TinyJsonToken.EndArray: - return count; // break - case TinyJsonToken.Number: - var v = jr.ValueType; - if (v == ValueType.Double) - { - offset += MessagePackBinary.WriteDouble(ref binary, offset, jr.DoubleValue); - } - else if (v == ValueType.Long) - { - offset += MessagePackBinary.WriteInt64(ref binary, offset, jr.LongValue); - } - else if (v == ValueType.ULong) - { - offset += MessagePackBinary.WriteUInt64(ref binary, offset, jr.ULongValue); - } - else if (v == ValueType.Decimal) - { - offset += DecimalFormatter.Instance.Serialize(ref binary, offset, jr.DecimalValue, null); - } - count++; - break; - case TinyJsonToken.String: - offset += MessagePackBinary.WriteString(ref binary, offset, jr.StringValue); - count++; - break; - case TinyJsonToken.True: - offset += MessagePackBinary.WriteBoolean(ref binary, offset, true); - count++; - break; - case TinyJsonToken.False: - offset += MessagePackBinary.WriteBoolean(ref binary, offset, false); - count++; - break; - case TinyJsonToken.Null: - offset += MessagePackBinary.WriteNil(ref binary, offset); - count++; - break; - default: - break; - } - } - return count; - } - - static int ToJsonCore(byte[] bytes, int offset, StringBuilder builder) - { - var readSize = 0; - var type = MessagePackBinary.GetMessagePackType(bytes, offset); - switch (type) - { - case MessagePackType.Integer: - var code = bytes[offset]; - if (MessagePackCode.MinNegativeFixInt <= code && code <= MessagePackCode.MaxNegativeFixInt) builder.Append(MessagePackBinary.ReadSByte(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - else if (MessagePackCode.MinFixInt <= code && code <= MessagePackCode.MaxFixInt) builder.Append(MessagePackBinary.ReadByte(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - else if (code == MessagePackCode.Int8) builder.Append(MessagePackBinary.ReadSByte(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - else if (code == MessagePackCode.Int16) builder.Append(MessagePackBinary.ReadInt16(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - else if (code == MessagePackCode.Int32) builder.Append(MessagePackBinary.ReadInt32(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - else if (code == MessagePackCode.Int64) builder.Append(MessagePackBinary.ReadInt64(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - else if (code == MessagePackCode.UInt8) builder.Append(MessagePackBinary.ReadByte(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - else if (code == MessagePackCode.UInt16) builder.Append(MessagePackBinary.ReadUInt16(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - else if (code == MessagePackCode.UInt32) builder.Append(MessagePackBinary.ReadUInt32(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - else if (code == MessagePackCode.UInt64) builder.Append(MessagePackBinary.ReadUInt64(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - break; - case MessagePackType.Boolean: - builder.Append(MessagePackBinary.ReadBoolean(bytes, offset, out readSize) ? "true" : "false"); - break; - case MessagePackType.Float: - var floatCode = bytes[offset]; - if (floatCode == MessagePackCode.Float32) - { - builder.Append(MessagePackBinary.ReadSingle(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - } - else - { - builder.Append(MessagePackBinary.ReadDouble(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); - } - break; - case MessagePackType.String: - WriteJsonString(MessagePackBinary.ReadString(bytes, offset, out readSize), builder); - break; - case MessagePackType.Binary: - builder.Append("\"" + Convert.ToBase64String(MessagePackBinary.ReadBytes(bytes, offset, out readSize)) + "\""); - break; - case MessagePackType.Array: - { - var length = MessagePackBinary.ReadArrayHeaderRaw(bytes, offset, out readSize); - var totalReadSize = readSize; - offset += readSize; - builder.Append("["); - for (int i = 0; i < length; i++) - { - readSize = ToJsonCore(bytes, offset, builder); - offset += readSize; - totalReadSize += readSize; - - if (i != length - 1) - { - builder.Append(","); - } - } - builder.Append("]"); - - return totalReadSize; - } - case MessagePackType.Map: - { - var length = MessagePackBinary.ReadMapHeaderRaw(bytes, offset, out readSize); - var totalReadSize = readSize; - offset += readSize; - builder.Append("{"); - for (int i = 0; i < length; i++) - { - // write key - { - var keyType = MessagePackBinary.GetMessagePackType(bytes, offset); - if (keyType == MessagePackType.String || keyType == MessagePackType.Binary) - { - readSize = ToJsonCore(bytes, offset, builder); - } - else - { - builder.Append("\""); - readSize = ToJsonCore(bytes, offset, builder); - builder.Append("\""); - } - offset += readSize; - totalReadSize += readSize; - } - - builder.Append(":"); - - // write body - { - readSize = ToJsonCore(bytes, offset, builder); - offset += readSize; - totalReadSize += readSize; - } - - if (i != length - 1) - { - builder.Append(","); - } - } - builder.Append("}"); - - return totalReadSize; - } - case MessagePackType.Extension: - var extHeader = MessagePackBinary.ReadExtensionFormatHeader(bytes, offset, out readSize); - if (extHeader.TypeCode == ReservedMessagePackExtensionTypeCode.DateTime) - { - var dt = MessagePackBinary.ReadDateTime(bytes, offset, out readSize); - builder.Append("\""); - builder.Append(dt.ToString("o", CultureInfo.InvariantCulture)); - builder.Append("\""); - } -#if NETSTANDARD - else if (extHeader.TypeCode == TypelessFormatter.ExtensionTypeCode) - { - int startOffset = offset; - // prepare type name token - offset += 6; - var typeNameToken = new StringBuilder(); - var typeNameReadSize = ToJsonCore(bytes, offset, typeNameToken); - offset += typeNameReadSize; - int startBuilderLength = builder.Length; - if (extHeader.Length > typeNameReadSize) - { - // object map or array - var typeInside = MessagePackBinary.GetMessagePackType(bytes, offset); - if (typeInside != MessagePackType.Array && typeInside != MessagePackType.Map) - builder.Append("{"); - offset += ToJsonCore(bytes, offset, builder); - // insert type name token to start of object map or array - if (typeInside != MessagePackType.Array) - typeNameToken.Insert(0, "\"$type\":"); - if (typeInside != MessagePackType.Array && typeInside != MessagePackType.Map) - builder.Append("}"); - if (builder.Length - startBuilderLength > 2) - typeNameToken.Append(","); - builder.Insert(startBuilderLength + 1, typeNameToken.ToString()); - } - else - { - builder.Append("{\"$type\":\"" + typeNameToken.ToString() + "}"); - } - readSize = offset - startOffset; - } -#endif - else - { - var ext = MessagePackBinary.ReadExtensionFormat(bytes, offset, out readSize); - builder.Append("["); - builder.Append(ext.TypeCode); - builder.Append(","); - builder.Append("\""); - builder.Append(Convert.ToBase64String(ext.Data)); - builder.Append("\""); - builder.Append("]"); - } - break; - case MessagePackType.Unknown: - case MessagePackType.Nil: - default: - readSize = 1; - builder.Append("null"); - break; - } - - return readSize; - } - - // escape string - static void WriteJsonString(string value, StringBuilder builder) - { - builder.Append('\"'); - - var len = value.Length; - for (int i = 0; i < len; i++) - { - var c = value[i]; - switch (c) - { - case '"': - builder.Append("\\\""); - break; - case '\\': - builder.Append("\\\\"); - break; - case '\b': - builder.Append("\\b"); - break; - case '\f': - builder.Append("\\f"); - break; - case '\n': - builder.Append("\\n"); - break; - case '\r': - builder.Append("\\r"); - break; - case '\t': - builder.Append("\\t"); - break; - default: - builder.Append(c); - break; - } - } - - builder.Append('\"'); - } - } +using MessagePack.Formatters; +using MessagePack.Internal; +using System; +using System.Globalization; +using System.IO; +using System.Text; + +namespace MessagePack +{ + // JSON API + public static partial class MessagePackSerializer + { + /// + /// Dump to JSON string. + /// + public static string ToJson(T obj) + { + return ToJson(Serialize(obj)); + } + + /// + /// Dump to JSON string. + /// + public static string ToJson(T obj, IFormatterResolver resolver) + { + return ToJson(Serialize(obj, resolver)); + } + + /// + /// Dump message-pack binary to JSON string. + /// + public static string ToJson(byte[] bytes) + { + if (bytes == null || bytes.Length == 0) return ""; + + var sb = new StringBuilder(); + ToJsonCore(bytes, 0, sb); + return sb.ToString(); + } + + public static byte[] FromJson(string str) + { + using (var sr = new StringReader(str)) + { + return FromJson(sr); + } + } + + /// + /// From Json String to MessagePack binary + /// + public static byte[] FromJson(TextReader reader) + { + var offset = 0; + byte[] binary = null; + using (var jr = new TinyJsonReader(reader, false)) + { + FromJsonCore(jr, ref binary, ref offset); + } + MessagePackBinary.FastResize(ref binary, offset); + return binary; + } + + /// + /// return buffer is from memory pool, be careful to use. + /// + internal static ArraySegment FromJsonUnsafe(TextReader reader) + { + var offset = 0; + byte[] binary = InternalMemoryPool.GetBuffer(); // from memory pool. + using (var jr = new TinyJsonReader(reader, false)) + { + FromJsonCore(jr, ref binary, ref offset); + } + return new ArraySegment(binary, 0, offset); + } + + static uint FromJsonCore(TinyJsonReader jr, ref byte[] binary, ref int offset) + { + uint count = 0; + while (jr.Read()) + { + switch (jr.TokenType) + { + case TinyJsonToken.None: + break; + case TinyJsonToken.StartObject: + { + var startOffset = offset; + offset += 5; + var mapCount = FromJsonCore(jr, ref binary, ref offset); + mapCount = mapCount / 2; // remove propertyname string count. + MessagePackBinary.WriteMapHeaderForceMap32Block(ref binary, startOffset, mapCount); + count++; + break; + } + case TinyJsonToken.EndObject: + return count; // break + case TinyJsonToken.StartArray: + { + var startOffset = offset; + offset += 5; + var arrayCount = FromJsonCore(jr, ref binary, ref offset); + MessagePackBinary.WriteArrayHeaderForceArray32Block(ref binary, startOffset, arrayCount); + count++; + break; + } + case TinyJsonToken.EndArray: + return count; // break + case TinyJsonToken.Number: + var v = jr.ValueType; + if (v == ValueType.Double) + { + offset += MessagePackBinary.WriteDouble(ref binary, offset, jr.DoubleValue); + } + else if (v == ValueType.Long) + { + offset += MessagePackBinary.WriteInt64(ref binary, offset, jr.LongValue); + } + else if (v == ValueType.ULong) + { + offset += MessagePackBinary.WriteUInt64(ref binary, offset, jr.ULongValue); + } + else if (v == ValueType.Decimal) + { + offset += DecimalFormatter.Instance.Serialize(ref binary, offset, jr.DecimalValue, null); + } + count++; + break; + case TinyJsonToken.String: + offset += MessagePackBinary.WriteString(ref binary, offset, jr.StringValue); + count++; + break; + case TinyJsonToken.True: + offset += MessagePackBinary.WriteBoolean(ref binary, offset, true); + count++; + break; + case TinyJsonToken.False: + offset += MessagePackBinary.WriteBoolean(ref binary, offset, false); + count++; + break; + case TinyJsonToken.Null: + offset += MessagePackBinary.WriteNil(ref binary, offset); + count++; + break; + default: + break; + } + } + return count; + } + + static int ToJsonCore(byte[] bytes, int offset, StringBuilder builder) + { + var readSize = 0; + var type = MessagePackBinary.GetMessagePackType(bytes, offset); + switch (type) + { + case MessagePackType.Integer: + var code = bytes[offset]; + if (MessagePackCode.MinNegativeFixInt <= code && code <= MessagePackCode.MaxNegativeFixInt) builder.Append(MessagePackBinary.ReadSByte(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + else if (MessagePackCode.MinFixInt <= code && code <= MessagePackCode.MaxFixInt) builder.Append(MessagePackBinary.ReadByte(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + else if (code == MessagePackCode.Int8) builder.Append(MessagePackBinary.ReadSByte(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + else if (code == MessagePackCode.Int16) builder.Append(MessagePackBinary.ReadInt16(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + else if (code == MessagePackCode.Int32) builder.Append(MessagePackBinary.ReadInt32(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + else if (code == MessagePackCode.Int64) builder.Append(MessagePackBinary.ReadInt64(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + else if (code == MessagePackCode.UInt8) builder.Append(MessagePackBinary.ReadByte(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + else if (code == MessagePackCode.UInt16) builder.Append(MessagePackBinary.ReadUInt16(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + else if (code == MessagePackCode.UInt32) builder.Append(MessagePackBinary.ReadUInt32(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + else if (code == MessagePackCode.UInt64) builder.Append(MessagePackBinary.ReadUInt64(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + break; + case MessagePackType.Boolean: + builder.Append(MessagePackBinary.ReadBoolean(bytes, offset, out readSize) ? "true" : "false"); + break; + case MessagePackType.Float: + var floatCode = bytes[offset]; + if (floatCode == MessagePackCode.Float32) + { + builder.Append(MessagePackBinary.ReadSingle(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + } + else + { + builder.Append(MessagePackBinary.ReadDouble(bytes, offset, out readSize).ToString(System.Globalization.CultureInfo.InvariantCulture)); + } + break; + case MessagePackType.String: + WriteJsonString(MessagePackBinary.ReadString(bytes, offset, out readSize), builder); + break; + case MessagePackType.Binary: + builder.Append("\"" + Convert.ToBase64String(MessagePackBinary.ReadBytes(bytes, offset, out readSize)) + "\""); + break; + case MessagePackType.Array: + { + var length = MessagePackBinary.ReadArrayHeaderRaw(bytes, offset, out readSize); + var totalReadSize = readSize; + offset += readSize; + builder.Append("["); + for (int i = 0; i < length; i++) + { + readSize = ToJsonCore(bytes, offset, builder); + offset += readSize; + totalReadSize += readSize; + + if (i != length - 1) + { + builder.Append(","); + } + } + builder.Append("]"); + + return totalReadSize; + } + case MessagePackType.Map: + { + var length = MessagePackBinary.ReadMapHeaderRaw(bytes, offset, out readSize); + var totalReadSize = readSize; + offset += readSize; + builder.Append("{"); + for (int i = 0; i < length; i++) + { + // write key + { + var keyType = MessagePackBinary.GetMessagePackType(bytes, offset); + if (keyType == MessagePackType.String || keyType == MessagePackType.Binary) + { + readSize = ToJsonCore(bytes, offset, builder); + } + else + { + builder.Append("\""); + readSize = ToJsonCore(bytes, offset, builder); + builder.Append("\""); + } + offset += readSize; + totalReadSize += readSize; + } + + builder.Append(":"); + + // write body + { + readSize = ToJsonCore(bytes, offset, builder); + offset += readSize; + totalReadSize += readSize; + } + + if (i != length - 1) + { + builder.Append(","); + } + } + builder.Append("}"); + + return totalReadSize; + } + case MessagePackType.Extension: + var extHeader = MessagePackBinary.ReadExtensionFormatHeader(bytes, offset, out readSize); + if (extHeader.TypeCode == ReservedMessagePackExtensionTypeCode.DateTime) + { + var dt = MessagePackBinary.ReadDateTime(bytes, offset, out readSize); + builder.Append("\""); + builder.Append(dt.ToString("o", CultureInfo.InvariantCulture)); + builder.Append("\""); + } +#if NETSTANDARD + else if (extHeader.TypeCode == TypelessFormatter.ExtensionTypeCode) + { + int startOffset = offset; + // prepare type name token + offset += 6; + var typeNameToken = new StringBuilder(); + var typeNameReadSize = ToJsonCore(bytes, offset, typeNameToken); + offset += typeNameReadSize; + int startBuilderLength = builder.Length; + if (extHeader.Length > typeNameReadSize) + { + // object map or array + var typeInside = MessagePackBinary.GetMessagePackType(bytes, offset); + if (typeInside != MessagePackType.Array && typeInside != MessagePackType.Map) + builder.Append("{"); + offset += ToJsonCore(bytes, offset, builder); + // insert type name token to start of object map or array + if (typeInside != MessagePackType.Array) + typeNameToken.Insert(0, "\"$type\":"); + if (typeInside != MessagePackType.Array && typeInside != MessagePackType.Map) + builder.Append("}"); + if (builder.Length - startBuilderLength > 2) + typeNameToken.Append(","); + builder.Insert(startBuilderLength + 1, typeNameToken.ToString()); + } + else + { + builder.Append("{\"$type\":\"" + typeNameToken.ToString() + "}"); + } + readSize = offset - startOffset; + } +#endif + else + { + var ext = MessagePackBinary.ReadExtensionFormat(bytes, offset, out readSize); + builder.Append("["); + builder.Append(ext.TypeCode); + builder.Append(","); + builder.Append("\""); + builder.Append(Convert.ToBase64String(ext.Data)); + builder.Append("\""); + builder.Append("]"); + } + break; + case MessagePackType.Unknown: + case MessagePackType.Nil: + default: + readSize = 1; + builder.Append("null"); + break; + } + + return readSize; + } + + // escape string + static void WriteJsonString(string value, StringBuilder builder) + { + builder.Append('\"'); + + var len = value.Length; + for (int i = 0; i < len; i++) + { + var c = value[i]; + switch (c) + { + case '"': + builder.Append("\\\""); + break; + case '\\': + builder.Append("\\\\"); + break; + case '\b': + builder.Append("\\b"); + break; + case '\f': + builder.Append("\\f"); + break; + case '\n': + builder.Append("\\n"); + break; + case '\r': + builder.Append("\\r"); + break; + case '\t': + builder.Append("\\t"); + break; + default: + builder.Append(c); + break; + } + } + + builder.Append('\"'); + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackSerializer.NonGeneric.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackSerializer.NonGeneric.cs index 110203af7..920c35899 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackSerializer.NonGeneric.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackSerializer.NonGeneric.cs @@ -1,320 +1,320 @@ -#if NETSTANDARD - -using System; -using System.IO; -using System.Linq; -using System.Linq.Expressions; -using System.Reflection; - -namespace MessagePack -{ - // NonGeneric API - public static partial class MessagePackSerializer - { - public static class NonGeneric - { - delegate int RawFormatterSerialize(ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver); - delegate object RawFormatterDeserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize); - - static readonly Func CreateCompiledMethods; - static readonly MessagePack.Internal.ThreadsafeTypeKeyHashTable serializes = new MessagePack.Internal.ThreadsafeTypeKeyHashTable(capacity: 64); - - static NonGeneric() - { - CreateCompiledMethods = t => new CompiledMethods(t); - } - - public static byte[] Serialize(Type type, object obj) - { - return GetOrAdd(type).serialize1.Invoke(obj); - } - - public static byte[] Serialize(Type type, object obj, IFormatterResolver resolver) - { - return GetOrAdd(type).serialize2.Invoke(obj, resolver); - } - - public static void Serialize(Type type, Stream stream, object obj) - { - GetOrAdd(type).serialize3.Invoke(stream, obj); - } - - public static void Serialize(Type type, Stream stream, object obj, IFormatterResolver resolver) - { - GetOrAdd(type).serialize4.Invoke(stream, obj, resolver); - } - - public static int Serialize(Type type, ref byte[] bytes, int offset, object value, IFormatterResolver resolver) - { - return GetOrAdd(type).serialize5.Invoke(ref bytes, offset, value, resolver); - } - - public static object Deserialize(Type type, byte[] bytes) - { - return GetOrAdd(type).deserialize1.Invoke(bytes); - } - - public static object Deserialize(Type type, byte[] bytes, IFormatterResolver resolver) - { - return GetOrAdd(type).deserialize2.Invoke(bytes, resolver); - } - - public static object Deserialize(Type type, Stream stream) - { - return GetOrAdd(type).deserialize3.Invoke(stream); - } - - public static object Deserialize(Type type, Stream stream, IFormatterResolver resolver) - { - return GetOrAdd(type).deserialize4.Invoke(stream, resolver); - } - - public static object Deserialize(Type type, Stream stream, bool readStrict) - { - return GetOrAdd(type).deserialize5.Invoke(stream, readStrict); - } - - public static object Deserialize(Type type, Stream stream, IFormatterResolver resolver, bool readStrict) - { - return GetOrAdd(type).deserialize6.Invoke(stream, resolver, readStrict); - } - - public static object Deserialize(Type type, ArraySegment bytes) - { - return GetOrAdd(type).deserialize7.Invoke(bytes); - } - - public static object Deserialize(Type type, ArraySegment bytes, IFormatterResolver resolver) - { - return GetOrAdd(type).deserialize8.Invoke(bytes, resolver); - } - - public static object Deserialize(Type type, byte[] bytes, int offset, IFormatterResolver resolver, out int readSize) - { - return GetOrAdd(type).deserialize9.Invoke(bytes, offset, resolver, out readSize); - } - - static CompiledMethods GetOrAdd(Type type) - { - return serializes.GetOrAdd(type, CreateCompiledMethods); - } - - class CompiledMethods - { - public readonly Func serialize1; - public readonly Func serialize2; - public readonly Action serialize3; - public readonly Action serialize4; - public readonly RawFormatterSerialize serialize5; - - public readonly Func deserialize1; - public readonly Func deserialize2; - public readonly Func deserialize3; - public readonly Func deserialize4; - public readonly Func deserialize5; - public readonly Func deserialize6; - - public readonly Func, object> deserialize7; - public readonly Func, IFormatterResolver, object> deserialize8; - public readonly RawFormatterDeserialize deserialize9; - - public CompiledMethods(Type type) - { - var ti = type.GetTypeInfo(); - { - // public static byte[] Serialize(T obj) - var serialize = GetMethod(type, new Type[] { null }); - - var param1 = Expression.Parameter(typeof(object), "obj"); - var body = Expression.Call(serialize, ti.IsValueType - ? Expression.Unbox(param1, type) - : Expression.Convert(param1, type)); - var lambda = Expression.Lambda>(body, param1).Compile(); - - this.serialize1 = lambda; - } - { - // public static byte[] Serialize(T obj, IFormatterResolver resolver) - var serialize = GetMethod(type, new Type[] { null, typeof(IFormatterResolver) }); - - var param1 = Expression.Parameter(typeof(object), "obj"); - var param2 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); - - var body = Expression.Call(serialize, ti.IsValueType - ? Expression.Unbox(param1, type) - : Expression.Convert(param1, type), param2); - var lambda = Expression.Lambda>(body, param1, param2).Compile(); - - this.serialize2 = lambda; - } - { - // public static void Serialize(Stream stream, T obj) - var serialize = GetMethod(type, new Type[] { typeof(Stream), null }); - - var param1 = Expression.Parameter(typeof(Stream), "stream"); - var param2 = Expression.Parameter(typeof(object), "obj"); - - var body = Expression.Call(serialize, param1, ti.IsValueType - ? Expression.Unbox(param2, type) - : Expression.Convert(param2, type)); - var lambda = Expression.Lambda>(body, param1, param2).Compile(); - - this.serialize3 = lambda; - } - { - // public static void Serialize(Stream stream, T obj, IFormatterResolver resolver) - var serialize = GetMethod(type, new Type[] { typeof(Stream), null, typeof(IFormatterResolver) }); - - var param1 = Expression.Parameter(typeof(Stream), "stream"); - var param2 = Expression.Parameter(typeof(object), "obj"); - var param3 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); - - var body = Expression.Call(serialize, param1, ti.IsValueType - ? Expression.Unbox(param2, type) - : Expression.Convert(param2, type), param3); - var lambda = Expression.Lambda>(body, param1, param2, param3).Compile(); - - this.serialize4 = lambda; - } - { - // delegate int RawFormatterSerialize(ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver); - var serialize = GetMethod(type, new Type[] { typeof(byte[]).MakeByRefType(), typeof(int), null, typeof(IFormatterResolver) }); - - var param1 = Expression.Parameter(typeof(byte[]).MakeByRefType(), "bytes"); - var param2 = Expression.Parameter(typeof(int), "offset"); - var param3 = Expression.Parameter(typeof(object), "value"); - var param4 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); - - var body = Expression.Call(serialize, param1, param2, ti.IsValueType - ? Expression.Unbox(param3, type) - : Expression.Convert(param3, type), param4); - var lambda = Expression.Lambda(body, param1, param2, param3, param4).Compile(); - - this.serialize5 = lambda; - } - { - // public static T Deserialize(byte[] bytes) - var deserialize = GetMethod(type, new Type[] { typeof(byte[]) }); - - var param1 = Expression.Parameter(typeof(byte[]), "bytes"); - var body = Expression.Convert(Expression.Call(deserialize, param1), typeof(object)); - var lambda = Expression.Lambda>(body, param1).Compile(); - - this.deserialize1 = lambda; - } - { - // public static T Deserialize(byte[] bytes, IFormatterResolver resolver) - var deserialize = GetMethod(type, new Type[] { typeof(byte[]), typeof(IFormatterResolver) }); - - var param1 = Expression.Parameter(typeof(byte[]), "bytes"); - var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); - var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); - var lambda = Expression.Lambda>(body, param1, param2).Compile(); - - this.deserialize2 = lambda; - } - { - // public static T Deserialize(Stream stream) - var deserialize = GetMethod(type, new Type[] { typeof(Stream) }); - - var param1 = Expression.Parameter(typeof(Stream), "stream"); - var body = Expression.Convert(Expression.Call(deserialize, param1), typeof(object)); - var lambda = Expression.Lambda>(body, param1).Compile(); - - this.deserialize3 = lambda; - } - { - // public static T Deserialize(Stream stream, IFormatterResolver resolver) - var deserialize = GetMethod(type, new Type[] { typeof(Stream), typeof(IFormatterResolver) }); - - var param1 = Expression.Parameter(typeof(Stream), "stream"); - var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); - var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); - var lambda = Expression.Lambda>(body, param1, param2).Compile(); - - this.deserialize4 = lambda; - } - { - // public static T Deserialize(Stream stream, bool readStrict) - var deserialize = GetMethod(type, new Type[] { typeof(Stream), typeof(bool) }); - - var param1 = Expression.Parameter(typeof(Stream), "stream"); - var param2 = Expression.Parameter(typeof(bool), "readStrict"); - var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); - var lambda = Expression.Lambda>(body, param1, param2).Compile(); - - this.deserialize5 = lambda; - } - { - // public static T Deserialize(Stream stream, IFormatterResolver resolver, bool readStrict) - var deserialize = GetMethod(type, new Type[] { typeof(Stream), typeof(IFormatterResolver), typeof(bool) }); - - var param1 = Expression.Parameter(typeof(Stream), "stream"); - var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); - var param3 = Expression.Parameter(typeof(bool), "readStrict"); - var body = Expression.Convert(Expression.Call(deserialize, param1, param2, param3), typeof(object)); - var lambda = Expression.Lambda>(body, param1, param2, param3).Compile(); - - this.deserialize6 = lambda; - } - - { - // public static T Deserialize(ArraySegment bytes) - var deserialize = GetMethod(type, new Type[] { typeof(ArraySegment) }); - - var param1 = Expression.Parameter(typeof(ArraySegment), "bytes"); - var body = Expression.Convert(Expression.Call(deserialize, param1), typeof(object)); - var lambda = Expression.Lambda, object>>(body, param1).Compile(); - - this.deserialize7 = lambda; - } - { - // public static T Deserialize(ArraySegment bytes, IFormatterResolver resolver) - var deserialize = GetMethod(type, new Type[] { typeof(ArraySegment), typeof(IFormatterResolver) }); - - var param1 = Expression.Parameter(typeof(ArraySegment), "bytes"); - var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); - var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); - var lambda = Expression.Lambda, IFormatterResolver, object>>(body, param1, param2).Compile(); - - this.deserialize8 = lambda; - } - { - // public static T Deserialize(byte[] bytes, int offset, IFormatterResolver resolver, out int readSize) - var deserialize = GetMethod(type, new Type[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), typeof(int).MakeByRefType() }); - - var param1 = Expression.Parameter(typeof(byte[]), "bytes"); - var param2 = Expression.Parameter(typeof(int), "offset"); - var param3 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); - var param4 = Expression.Parameter(typeof(int).MakeByRefType(), "readSize"); - var body = Expression.Convert(Expression.Call(deserialize, param1, param2, param3, param4), typeof(object)); - var lambda = Expression.Lambda(body, param1, param2, param3, param4).Compile(); - - this.deserialize9 = lambda; - } - } - - // null is generic type marker. - static MethodInfo GetMethod(Type type, Type[] parameters) - { - return typeof(MessagePackSerializer).GetRuntimeMethods().Where(x => - { - if (!(x.Name == "Serialize" || x.Name == "Deserialize")) return false; - var ps = x.GetParameters(); - if (ps.Length != parameters.Length) return false; - for (int i = 0; i < ps.Length; i++) - { - if (parameters[i] == null && ps[i].ParameterType.IsGenericParameter) continue; - if (ps[i].ParameterType != parameters[i]) return false; - } - return true; - }) - .Single() - .MakeGenericMethod(type); - } - } - } - } -} - +#if NETSTANDARD + +using System; +using System.IO; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; + +namespace MessagePack +{ + // NonGeneric API + public static partial class MessagePackSerializer + { + public static class NonGeneric + { + delegate int RawFormatterSerialize(ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver); + delegate object RawFormatterDeserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize); + + static readonly Func CreateCompiledMethods; + static readonly MessagePack.Internal.ThreadsafeTypeKeyHashTable serializes = new MessagePack.Internal.ThreadsafeTypeKeyHashTable(capacity: 64); + + static NonGeneric() + { + CreateCompiledMethods = t => new CompiledMethods(t); + } + + public static byte[] Serialize(Type type, object obj) + { + return GetOrAdd(type).serialize1.Invoke(obj); + } + + public static byte[] Serialize(Type type, object obj, IFormatterResolver resolver) + { + return GetOrAdd(type).serialize2.Invoke(obj, resolver); + } + + public static void Serialize(Type type, Stream stream, object obj) + { + GetOrAdd(type).serialize3.Invoke(stream, obj); + } + + public static void Serialize(Type type, Stream stream, object obj, IFormatterResolver resolver) + { + GetOrAdd(type).serialize4.Invoke(stream, obj, resolver); + } + + public static int Serialize(Type type, ref byte[] bytes, int offset, object value, IFormatterResolver resolver) + { + return GetOrAdd(type).serialize5.Invoke(ref bytes, offset, value, resolver); + } + + public static object Deserialize(Type type, byte[] bytes) + { + return GetOrAdd(type).deserialize1.Invoke(bytes); + } + + public static object Deserialize(Type type, byte[] bytes, IFormatterResolver resolver) + { + return GetOrAdd(type).deserialize2.Invoke(bytes, resolver); + } + + public static object Deserialize(Type type, Stream stream) + { + return GetOrAdd(type).deserialize3.Invoke(stream); + } + + public static object Deserialize(Type type, Stream stream, IFormatterResolver resolver) + { + return GetOrAdd(type).deserialize4.Invoke(stream, resolver); + } + + public static object Deserialize(Type type, Stream stream, bool readStrict) + { + return GetOrAdd(type).deserialize5.Invoke(stream, readStrict); + } + + public static object Deserialize(Type type, Stream stream, IFormatterResolver resolver, bool readStrict) + { + return GetOrAdd(type).deserialize6.Invoke(stream, resolver, readStrict); + } + + public static object Deserialize(Type type, ArraySegment bytes) + { + return GetOrAdd(type).deserialize7.Invoke(bytes); + } + + public static object Deserialize(Type type, ArraySegment bytes, IFormatterResolver resolver) + { + return GetOrAdd(type).deserialize8.Invoke(bytes, resolver); + } + + public static object Deserialize(Type type, byte[] bytes, int offset, IFormatterResolver resolver, out int readSize) + { + return GetOrAdd(type).deserialize9.Invoke(bytes, offset, resolver, out readSize); + } + + static CompiledMethods GetOrAdd(Type type) + { + return serializes.GetOrAdd(type, CreateCompiledMethods); + } + + class CompiledMethods + { + public readonly Func serialize1; + public readonly Func serialize2; + public readonly Action serialize3; + public readonly Action serialize4; + public readonly RawFormatterSerialize serialize5; + + public readonly Func deserialize1; + public readonly Func deserialize2; + public readonly Func deserialize3; + public readonly Func deserialize4; + public readonly Func deserialize5; + public readonly Func deserialize6; + + public readonly Func, object> deserialize7; + public readonly Func, IFormatterResolver, object> deserialize8; + public readonly RawFormatterDeserialize deserialize9; + + public CompiledMethods(Type type) + { + var ti = type.GetTypeInfo(); + { + // public static byte[] Serialize(T obj) + var serialize = GetMethod(type, new Type[] { null }); + + var param1 = Expression.Parameter(typeof(object), "obj"); + var body = Expression.Call(serialize, ti.IsValueType + ? Expression.Unbox(param1, type) + : Expression.Convert(param1, type)); + var lambda = Expression.Lambda>(body, param1).Compile(); + + this.serialize1 = lambda; + } + { + // public static byte[] Serialize(T obj, IFormatterResolver resolver) + var serialize = GetMethod(type, new Type[] { null, typeof(IFormatterResolver) }); + + var param1 = Expression.Parameter(typeof(object), "obj"); + var param2 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); + + var body = Expression.Call(serialize, ti.IsValueType + ? Expression.Unbox(param1, type) + : Expression.Convert(param1, type), param2); + var lambda = Expression.Lambda>(body, param1, param2).Compile(); + + this.serialize2 = lambda; + } + { + // public static void Serialize(Stream stream, T obj) + var serialize = GetMethod(type, new Type[] { typeof(Stream), null }); + + var param1 = Expression.Parameter(typeof(Stream), "stream"); + var param2 = Expression.Parameter(typeof(object), "obj"); + + var body = Expression.Call(serialize, param1, ti.IsValueType + ? Expression.Unbox(param2, type) + : Expression.Convert(param2, type)); + var lambda = Expression.Lambda>(body, param1, param2).Compile(); + + this.serialize3 = lambda; + } + { + // public static void Serialize(Stream stream, T obj, IFormatterResolver resolver) + var serialize = GetMethod(type, new Type[] { typeof(Stream), null, typeof(IFormatterResolver) }); + + var param1 = Expression.Parameter(typeof(Stream), "stream"); + var param2 = Expression.Parameter(typeof(object), "obj"); + var param3 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); + + var body = Expression.Call(serialize, param1, ti.IsValueType + ? Expression.Unbox(param2, type) + : Expression.Convert(param2, type), param3); + var lambda = Expression.Lambda>(body, param1, param2, param3).Compile(); + + this.serialize4 = lambda; + } + { + // delegate int RawFormatterSerialize(ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver); + var serialize = GetMethod(type, new Type[] { typeof(byte[]).MakeByRefType(), typeof(int), null, typeof(IFormatterResolver) }); + + var param1 = Expression.Parameter(typeof(byte[]).MakeByRefType(), "bytes"); + var param2 = Expression.Parameter(typeof(int), "offset"); + var param3 = Expression.Parameter(typeof(object), "value"); + var param4 = Expression.Parameter(typeof(IFormatterResolver), "formatterResolver"); + + var body = Expression.Call(serialize, param1, param2, ti.IsValueType + ? Expression.Unbox(param3, type) + : Expression.Convert(param3, type), param4); + var lambda = Expression.Lambda(body, param1, param2, param3, param4).Compile(); + + this.serialize5 = lambda; + } + { + // public static T Deserialize(byte[] bytes) + var deserialize = GetMethod(type, new Type[] { typeof(byte[]) }); + + var param1 = Expression.Parameter(typeof(byte[]), "bytes"); + var body = Expression.Convert(Expression.Call(deserialize, param1), typeof(object)); + var lambda = Expression.Lambda>(body, param1).Compile(); + + this.deserialize1 = lambda; + } + { + // public static T Deserialize(byte[] bytes, IFormatterResolver resolver) + var deserialize = GetMethod(type, new Type[] { typeof(byte[]), typeof(IFormatterResolver) }); + + var param1 = Expression.Parameter(typeof(byte[]), "bytes"); + var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); + var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); + var lambda = Expression.Lambda>(body, param1, param2).Compile(); + + this.deserialize2 = lambda; + } + { + // public static T Deserialize(Stream stream) + var deserialize = GetMethod(type, new Type[] { typeof(Stream) }); + + var param1 = Expression.Parameter(typeof(Stream), "stream"); + var body = Expression.Convert(Expression.Call(deserialize, param1), typeof(object)); + var lambda = Expression.Lambda>(body, param1).Compile(); + + this.deserialize3 = lambda; + } + { + // public static T Deserialize(Stream stream, IFormatterResolver resolver) + var deserialize = GetMethod(type, new Type[] { typeof(Stream), typeof(IFormatterResolver) }); + + var param1 = Expression.Parameter(typeof(Stream), "stream"); + var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); + var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); + var lambda = Expression.Lambda>(body, param1, param2).Compile(); + + this.deserialize4 = lambda; + } + { + // public static T Deserialize(Stream stream, bool readStrict) + var deserialize = GetMethod(type, new Type[] { typeof(Stream), typeof(bool) }); + + var param1 = Expression.Parameter(typeof(Stream), "stream"); + var param2 = Expression.Parameter(typeof(bool), "readStrict"); + var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); + var lambda = Expression.Lambda>(body, param1, param2).Compile(); + + this.deserialize5 = lambda; + } + { + // public static T Deserialize(Stream stream, IFormatterResolver resolver, bool readStrict) + var deserialize = GetMethod(type, new Type[] { typeof(Stream), typeof(IFormatterResolver), typeof(bool) }); + + var param1 = Expression.Parameter(typeof(Stream), "stream"); + var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); + var param3 = Expression.Parameter(typeof(bool), "readStrict"); + var body = Expression.Convert(Expression.Call(deserialize, param1, param2, param3), typeof(object)); + var lambda = Expression.Lambda>(body, param1, param2, param3).Compile(); + + this.deserialize6 = lambda; + } + + { + // public static T Deserialize(ArraySegment bytes) + var deserialize = GetMethod(type, new Type[] { typeof(ArraySegment) }); + + var param1 = Expression.Parameter(typeof(ArraySegment), "bytes"); + var body = Expression.Convert(Expression.Call(deserialize, param1), typeof(object)); + var lambda = Expression.Lambda, object>>(body, param1).Compile(); + + this.deserialize7 = lambda; + } + { + // public static T Deserialize(ArraySegment bytes, IFormatterResolver resolver) + var deserialize = GetMethod(type, new Type[] { typeof(ArraySegment), typeof(IFormatterResolver) }); + + var param1 = Expression.Parameter(typeof(ArraySegment), "bytes"); + var param2 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); + var body = Expression.Convert(Expression.Call(deserialize, param1, param2), typeof(object)); + var lambda = Expression.Lambda, IFormatterResolver, object>>(body, param1, param2).Compile(); + + this.deserialize8 = lambda; + } + { + // public static T Deserialize(byte[] bytes, int offset, IFormatterResolver resolver, out int readSize) + var deserialize = GetMethod(type, new Type[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), typeof(int).MakeByRefType() }); + + var param1 = Expression.Parameter(typeof(byte[]), "bytes"); + var param2 = Expression.Parameter(typeof(int), "offset"); + var param3 = Expression.Parameter(typeof(IFormatterResolver), "resolver"); + var param4 = Expression.Parameter(typeof(int).MakeByRefType(), "readSize"); + var body = Expression.Convert(Expression.Call(deserialize, param1, param2, param3, param4), typeof(object)); + var lambda = Expression.Lambda(body, param1, param2, param3, param4).Compile(); + + this.deserialize9 = lambda; + } + } + + // null is generic type marker. + static MethodInfo GetMethod(Type type, Type[] parameters) + { + return typeof(MessagePackSerializer).GetRuntimeMethods().Where(x => + { + if (!(x.Name == "Serialize" || x.Name == "Deserialize")) return false; + var ps = x.GetParameters(); + if (ps.Length != parameters.Length) return false; + for (int i = 0; i < ps.Length; i++) + { + if (parameters[i] == null && ps[i].ParameterType.IsGenericParameter) continue; + if (ps[i].ParameterType != parameters[i]) return false; + } + return true; + }) + .Single() + .MakeGenericMethod(type); + } + } + } + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackSerializer.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackSerializer.cs index 33de750e2..a35736951 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackSerializer.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/MessagePackSerializer.cs @@ -1,327 +1,327 @@ -using MessagePack.Internal; -using System; -using System.IO; - -namespace MessagePack -{ - /// - /// High-Level API of MessagePack for C#. - /// - public static partial class MessagePackSerializer - { - static IFormatterResolver defaultResolver; - - /// - /// FormatterResolver that used resolver less overloads. If does not set it, used StandardResolver. - /// - public static IFormatterResolver DefaultResolver - { - get - { - if (defaultResolver == null) - { - defaultResolver = MessagePack.Resolvers.StandardResolver.Instance; - } - - return defaultResolver; - } - } - - /// - /// Is resolver decided? - /// - public static bool IsInitialized - { - get - { - return defaultResolver != null; - } - } - - /// - /// Set default resolver of MessagePackSerializer APIs. - /// - /// - public static void SetDefaultResolver(IFormatterResolver resolver) - { - defaultResolver = resolver; - } - - /// - /// Serialize to binary with default resolver. - /// - public static byte[] Serialize(T obj) - { - return Serialize(obj, defaultResolver); - } - - /// - /// Serialize to binary with specified resolver. - /// - public static byte[] Serialize(T obj, IFormatterResolver resolver) - { - if (resolver == null) resolver = DefaultResolver; - var formatter = resolver.GetFormatterWithVerify(); - - var buffer = InternalMemoryPool.GetBuffer(); - - var len = formatter.Serialize(ref buffer, 0, obj, resolver); - - // do not return MemoryPool.Buffer. - return MessagePackBinary.FastCloneWithResize(buffer, len); - } - - /// - /// Serialize to binary. Get the raw memory pool byte[]. The result can not share across thread and can not hold, so use quickly. - /// - public static ArraySegment SerializeUnsafe(T obj) - { - return SerializeUnsafe(obj, defaultResolver); - } - - /// - /// Serialize to binary with specified resolver. Get the raw memory pool byte[]. The result can not share across thread and can not hold, so use quickly. - /// - public static ArraySegment SerializeUnsafe(T obj, IFormatterResolver resolver) - { - if (resolver == null) resolver = DefaultResolver; - var formatter = resolver.GetFormatterWithVerify(); - - var buffer = InternalMemoryPool.GetBuffer(); - - var len = formatter.Serialize(ref buffer, 0, obj, resolver); - - // return raw memory pool, unsafe! - return new ArraySegment(buffer, 0, len); - } - - /// - /// Serialize to stream. - /// - public static void Serialize(Stream stream, T obj) - { - Serialize(stream, obj, defaultResolver); - } - - /// - /// Serialize to stream with specified resolver. - /// - public static void Serialize(Stream stream, T obj, IFormatterResolver resolver) - { - if (resolver == null) resolver = DefaultResolver; - var formatter = resolver.GetFormatterWithVerify(); - - var buffer = InternalMemoryPool.GetBuffer(); - - var len = formatter.Serialize(ref buffer, 0, obj, resolver); - - // do not need resize. - stream.Write(buffer, 0, len); - } - - /// - /// Reflect of resolver.GetFormatterWithVerify[T].Serialize. - /// - public static int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver resolver) - { - return resolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value, resolver); - } - -#if NETSTANDARD - - /// - /// Serialize to stream(async). - /// - public static System.Threading.Tasks.Task SerializeAsync(Stream stream, T obj) - { - return SerializeAsync(stream, obj, defaultResolver); - } - - /// - /// Serialize to stream(async) with specified resolver. - /// - public static async System.Threading.Tasks.Task SerializeAsync(Stream stream, T obj, IFormatterResolver resolver) - { - if (resolver == null) resolver = DefaultResolver; - var formatter = resolver.GetFormatterWithVerify(); - - var rentBuffer = BufferPool.Default.Rent(); - try - { - var buffer = rentBuffer; - var len = formatter.Serialize(ref buffer, 0, obj, resolver); - - // do not need resize. - await stream.WriteAsync(buffer, 0, len).ConfigureAwait(false); - } - finally - { - BufferPool.Default.Return(rentBuffer); - } - } - -#endif - - public static T Deserialize(byte[] bytes) - { - return Deserialize(bytes, defaultResolver); - } - - public static T Deserialize(byte[] bytes, IFormatterResolver resolver) - { - if (resolver == null) resolver = DefaultResolver; - var formatter = resolver.GetFormatterWithVerify(); - - int readSize; - return formatter.Deserialize(bytes, 0, resolver, out readSize); - } - - public static T Deserialize(ArraySegment bytes) - { - return Deserialize(bytes, defaultResolver); - } - - public static T Deserialize(ArraySegment bytes, IFormatterResolver resolver) - { - if (resolver == null) resolver = DefaultResolver; - var formatter = resolver.GetFormatterWithVerify(); - - int readSize; - return formatter.Deserialize(bytes.Array, bytes.Offset, resolver, out readSize); - } - - public static T Deserialize(Stream stream) - { - return Deserialize(stream, defaultResolver); - } - - public static T Deserialize(Stream stream, IFormatterResolver resolver) - { - return Deserialize(stream, resolver, false); - } - - public static T Deserialize(Stream stream, bool readStrict) - { - return Deserialize(stream, defaultResolver, readStrict); - } - - public static T Deserialize(Stream stream, IFormatterResolver resolver, bool readStrict) - { - if (resolver == null) resolver = DefaultResolver; - var formatter = resolver.GetFormatterWithVerify(); - - if (!readStrict) - { -#if NETSTANDARD && !NET45 - - var ms = stream as MemoryStream; - if (ms != null) - { - // optimize for MemoryStream - ArraySegment buffer; - if (ms.TryGetBuffer(out buffer)) - { - int readSize; - return formatter.Deserialize(buffer.Array, buffer.Offset, resolver, out readSize); - } - } -#endif - - // no else. - { - var buffer = InternalMemoryPool.GetBuffer(); - - FillFromStream(stream, ref buffer); - - int readSize; - return formatter.Deserialize(buffer, 0, resolver, out readSize); - } - } - else - { - int _; - var bytes = MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, false, out _); - int readSize; - return formatter.Deserialize(bytes, 0, resolver, out readSize); - } - } - - /// - /// Reflect of resolver.GetFormatterWithVerify[T].Deserialize. - /// - public static T Deserialize(byte[] bytes, int offset, IFormatterResolver resolver, out int readSize) - { - return resolver.GetFormatterWithVerify().Deserialize(bytes, offset, resolver, out readSize); - } - -#if NETSTANDARD - - public static System.Threading.Tasks.Task DeserializeAsync(Stream stream) - { - return DeserializeAsync(stream, defaultResolver); - } - - // readStrict async read is too slow(many Task garbage) so I don't provide async option. - - public static async System.Threading.Tasks.Task DeserializeAsync(Stream stream, IFormatterResolver resolver) - { - var rentBuffer = BufferPool.Default.Rent(); - var buf = rentBuffer; - try - { - int length = 0; - int read; - while ((read = await stream.ReadAsync(buf, length, buf.Length - length).ConfigureAwait(false)) > 0) - { - length += read; - if (length == buf.Length) - { - MessagePackBinary.FastResize(ref buf, length * 2); - } - } - - return Deserialize(buf, resolver); - } - finally - { - BufferPool.Default.Return(rentBuffer); - } - } - -#endif - - static int FillFromStream(Stream input, ref byte[] buffer) - { - int length = 0; - int read; - while ((read = input.Read(buffer, length, buffer.Length - length)) > 0) - { - length += read; - if (length == buffer.Length) - { - MessagePackBinary.FastResize(ref buffer, length * 2); - } - } - - return length; - } - } -} - -namespace MessagePack.Internal -{ - internal static class InternalMemoryPool - { - [ThreadStatic] - static byte[] buffer = null; - - public static byte[] GetBuffer() - { - if (buffer == null) - { - buffer = new byte[65536]; - } - return buffer; - } - } +using MessagePack.Internal; +using System; +using System.IO; + +namespace MessagePack +{ + /// + /// High-Level API of MessagePack for C#. + /// + public static partial class MessagePackSerializer + { + static IFormatterResolver defaultResolver; + + /// + /// FormatterResolver that used resolver less overloads. If does not set it, used StandardResolver. + /// + public static IFormatterResolver DefaultResolver + { + get + { + if (defaultResolver == null) + { + defaultResolver = MessagePack.Resolvers.StandardResolver.Instance; + } + + return defaultResolver; + } + } + + /// + /// Is resolver decided? + /// + public static bool IsInitialized + { + get + { + return defaultResolver != null; + } + } + + /// + /// Set default resolver of MessagePackSerializer APIs. + /// + /// + public static void SetDefaultResolver(IFormatterResolver resolver) + { + defaultResolver = resolver; + } + + /// + /// Serialize to binary with default resolver. + /// + public static byte[] Serialize(T obj) + { + return Serialize(obj, defaultResolver); + } + + /// + /// Serialize to binary with specified resolver. + /// + public static byte[] Serialize(T obj, IFormatterResolver resolver) + { + if (resolver == null) resolver = DefaultResolver; + var formatter = resolver.GetFormatterWithVerify(); + + var buffer = InternalMemoryPool.GetBuffer(); + + var len = formatter.Serialize(ref buffer, 0, obj, resolver); + + // do not return MemoryPool.Buffer. + return MessagePackBinary.FastCloneWithResize(buffer, len); + } + + /// + /// Serialize to binary. Get the raw memory pool byte[]. The result can not share across thread and can not hold, so use quickly. + /// + public static ArraySegment SerializeUnsafe(T obj) + { + return SerializeUnsafe(obj, defaultResolver); + } + + /// + /// Serialize to binary with specified resolver. Get the raw memory pool byte[]. The result can not share across thread and can not hold, so use quickly. + /// + public static ArraySegment SerializeUnsafe(T obj, IFormatterResolver resolver) + { + if (resolver == null) resolver = DefaultResolver; + var formatter = resolver.GetFormatterWithVerify(); + + var buffer = InternalMemoryPool.GetBuffer(); + + var len = formatter.Serialize(ref buffer, 0, obj, resolver); + + // return raw memory pool, unsafe! + return new ArraySegment(buffer, 0, len); + } + + /// + /// Serialize to stream. + /// + public static void Serialize(Stream stream, T obj) + { + Serialize(stream, obj, defaultResolver); + } + + /// + /// Serialize to stream with specified resolver. + /// + public static void Serialize(Stream stream, T obj, IFormatterResolver resolver) + { + if (resolver == null) resolver = DefaultResolver; + var formatter = resolver.GetFormatterWithVerify(); + + var buffer = InternalMemoryPool.GetBuffer(); + + var len = formatter.Serialize(ref buffer, 0, obj, resolver); + + // do not need resize. + stream.Write(buffer, 0, len); + } + + /// + /// Reflect of resolver.GetFormatterWithVerify[T].Serialize. + /// + public static int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver resolver) + { + return resolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value, resolver); + } + +#if NETSTANDARD + + /// + /// Serialize to stream(async). + /// + public static System.Threading.Tasks.Task SerializeAsync(Stream stream, T obj) + { + return SerializeAsync(stream, obj, defaultResolver); + } + + /// + /// Serialize to stream(async) with specified resolver. + /// + public static async System.Threading.Tasks.Task SerializeAsync(Stream stream, T obj, IFormatterResolver resolver) + { + if (resolver == null) resolver = DefaultResolver; + var formatter = resolver.GetFormatterWithVerify(); + + var rentBuffer = BufferPool.Default.Rent(); + try + { + var buffer = rentBuffer; + var len = formatter.Serialize(ref buffer, 0, obj, resolver); + + // do not need resize. + await stream.WriteAsync(buffer, 0, len).ConfigureAwait(false); + } + finally + { + BufferPool.Default.Return(rentBuffer); + } + } + +#endif + + public static T Deserialize(byte[] bytes) + { + return Deserialize(bytes, defaultResolver); + } + + public static T Deserialize(byte[] bytes, IFormatterResolver resolver) + { + if (resolver == null) resolver = DefaultResolver; + var formatter = resolver.GetFormatterWithVerify(); + + int readSize; + return formatter.Deserialize(bytes, 0, resolver, out readSize); + } + + public static T Deserialize(ArraySegment bytes) + { + return Deserialize(bytes, defaultResolver); + } + + public static T Deserialize(ArraySegment bytes, IFormatterResolver resolver) + { + if (resolver == null) resolver = DefaultResolver; + var formatter = resolver.GetFormatterWithVerify(); + + int readSize; + return formatter.Deserialize(bytes.Array, bytes.Offset, resolver, out readSize); + } + + public static T Deserialize(Stream stream) + { + return Deserialize(stream, defaultResolver); + } + + public static T Deserialize(Stream stream, IFormatterResolver resolver) + { + return Deserialize(stream, resolver, false); + } + + public static T Deserialize(Stream stream, bool readStrict) + { + return Deserialize(stream, defaultResolver, readStrict); + } + + public static T Deserialize(Stream stream, IFormatterResolver resolver, bool readStrict) + { + if (resolver == null) resolver = DefaultResolver; + var formatter = resolver.GetFormatterWithVerify(); + + if (!readStrict) + { +#if NETSTANDARD && !NET45 + + var ms = stream as MemoryStream; + if (ms != null) + { + // optimize for MemoryStream + ArraySegment buffer; + if (ms.TryGetBuffer(out buffer)) + { + int readSize; + return formatter.Deserialize(buffer.Array, buffer.Offset, resolver, out readSize); + } + } +#endif + + // no else. + { + var buffer = InternalMemoryPool.GetBuffer(); + + FillFromStream(stream, ref buffer); + + int readSize; + return formatter.Deserialize(buffer, 0, resolver, out readSize); + } + } + else + { + int _; + var bytes = MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, false, out _); + int readSize; + return formatter.Deserialize(bytes, 0, resolver, out readSize); + } + } + + /// + /// Reflect of resolver.GetFormatterWithVerify[T].Deserialize. + /// + public static T Deserialize(byte[] bytes, int offset, IFormatterResolver resolver, out int readSize) + { + return resolver.GetFormatterWithVerify().Deserialize(bytes, offset, resolver, out readSize); + } + +#if NETSTANDARD + + public static System.Threading.Tasks.Task DeserializeAsync(Stream stream) + { + return DeserializeAsync(stream, defaultResolver); + } + + // readStrict async read is too slow(many Task garbage) so I don't provide async option. + + public static async System.Threading.Tasks.Task DeserializeAsync(Stream stream, IFormatterResolver resolver) + { + var rentBuffer = BufferPool.Default.Rent(); + var buf = rentBuffer; + try + { + int length = 0; + int read; + while ((read = await stream.ReadAsync(buf, length, buf.Length - length).ConfigureAwait(false)) > 0) + { + length += read; + if (length == buf.Length) + { + MessagePackBinary.FastResize(ref buf, length * 2); + } + } + + return Deserialize(buf, resolver); + } + finally + { + BufferPool.Default.Return(rentBuffer); + } + } + +#endif + + static int FillFromStream(Stream input, ref byte[] buffer) + { + int length = 0; + int read; + while ((read = input.Read(buffer, length, buffer.Length - length)) > 0) + { + length += read; + if (length == buffer.Length) + { + MessagePackBinary.FastResize(ref buffer, length * 2); + } + } + + return length; + } + } +} + +namespace MessagePack.Internal +{ + internal static class InternalMemoryPool + { + [ThreadStatic] + static byte[] buffer = null; + + public static byte[] GetBuffer() + { + if (buffer == null) + { + buffer = new byte[65536]; + } + return buffer; + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Nil.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Nil.cs index ea74f6aeb..f2860d5b9 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Nil.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Nil.cs @@ -1,73 +1,73 @@ -using System; - -namespace MessagePack -{ - public struct Nil : IEquatable - { - public static readonly Nil Default = new Nil(); - - public override bool Equals(object obj) - { - return obj is Nil; - } - - public bool Equals(Nil other) - { - return true; - } - - public override int GetHashCode() - { - return 0; - } - - public override string ToString() - { - return "()"; - } - } -} - -namespace MessagePack.Formatters -{ - public class NilFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new NilFormatter(); - - NilFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Nil value, IFormatterResolver typeResolver) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - - public Nil Deserialize(byte[] bytes, int offset, IFormatterResolver typeResolver, out int readSize) - { - return MessagePackBinary.ReadNil(bytes, offset, out readSize); - } - } - - // NullableNil is same as Nil. - public class NullableNilFormatter : IMessagePackFormatter - { - public static readonly IMessagePackFormatter Instance = new NullableNilFormatter(); - - NullableNilFormatter() - { - - } - - public int Serialize(ref byte[] bytes, int offset, Nil? value, IFormatterResolver typeResolver) - { - return MessagePackBinary.WriteNil(ref bytes, offset); - } - - public Nil? Deserialize(byte[] bytes, int offset, IFormatterResolver typeResolver, out int readSize) - { - return MessagePackBinary.ReadNil(bytes, offset, out readSize); - } - } +using System; + +namespace MessagePack +{ + public struct Nil : IEquatable + { + public static readonly Nil Default = new Nil(); + + public override bool Equals(object obj) + { + return obj is Nil; + } + + public bool Equals(Nil other) + { + return true; + } + + public override int GetHashCode() + { + return 0; + } + + public override string ToString() + { + return "()"; + } + } +} + +namespace MessagePack.Formatters +{ + public class NilFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new NilFormatter(); + + NilFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Nil value, IFormatterResolver typeResolver) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + + public Nil Deserialize(byte[] bytes, int offset, IFormatterResolver typeResolver, out int readSize) + { + return MessagePackBinary.ReadNil(bytes, offset, out readSize); + } + } + + // NullableNil is same as Nil. + public class NullableNilFormatter : IMessagePackFormatter + { + public static readonly IMessagePackFormatter Instance = new NullableNilFormatter(); + + NullableNilFormatter() + { + + } + + public int Serialize(ref byte[] bytes, int offset, Nil? value, IFormatterResolver typeResolver) + { + return MessagePackBinary.WriteNil(ref bytes, offset); + } + + public Nil? Deserialize(byte[] bytes, int offset, IFormatterResolver typeResolver, out int readSize) + { + return MessagePackBinary.ReadNil(bytes, offset, out readSize); + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/AttributeFormatterResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/AttributeFormatterResolver.cs index 9fa30a6e6..3ec965a78 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/AttributeFormatterResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/AttributeFormatterResolver.cs @@ -1,52 +1,52 @@ -using MessagePack.Formatters; -using System; -using System.Reflection; -using System.Linq; // require UNITY_WSA - -namespace MessagePack.Resolvers -{ - /// - /// Get formatter from [MessaegPackFromatter] attribute. - /// - public sealed class AttributeFormatterResolver : IFormatterResolver - { - public static IFormatterResolver Instance = new AttributeFormatterResolver(); - - AttributeFormatterResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { -#if UNITY_WSA && !NETFX_CORE - var attr = (MessagePackFormatterAttribute)typeof(T).GetCustomAttributes(typeof(MessagePackFormatterAttribute), true).FirstOrDefault(); -#else - var attr = typeof(T).GetTypeInfo().GetCustomAttribute(); -#endif - if (attr == null) - { - return; - } - - if (attr.Arguments == null) - { - formatter = (IMessagePackFormatter)Activator.CreateInstance(attr.FormatterType); - } - else - { - formatter = (IMessagePackFormatter)Activator.CreateInstance(attr.FormatterType, attr.Arguments); - } - } - } - } +using MessagePack.Formatters; +using System; +using System.Reflection; +using System.Linq; // require UNITY_WSA + +namespace MessagePack.Resolvers +{ + /// + /// Get formatter from [MessaegPackFromatter] attribute. + /// + public sealed class AttributeFormatterResolver : IFormatterResolver + { + public static IFormatterResolver Instance = new AttributeFormatterResolver(); + + AttributeFormatterResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { +#if UNITY_WSA && !NETFX_CORE + var attr = (MessagePackFormatterAttribute)typeof(T).GetCustomAttributes(typeof(MessagePackFormatterAttribute), true).FirstOrDefault(); +#else + var attr = typeof(T).GetTypeInfo().GetCustomAttribute(); +#endif + if (attr == null) + { + return; + } + + if (attr.Arguments == null) + { + formatter = (IMessagePackFormatter)Activator.CreateInstance(attr.FormatterType); + } + else + { + formatter = (IMessagePackFormatter)Activator.CreateInstance(attr.FormatterType, attr.Arguments); + } + } + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/BuiltinResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/BuiltinResolver.cs index cceb95bba..184d43b23 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/BuiltinResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/BuiltinResolver.cs @@ -1,151 +1,151 @@ -using MessagePack.Formatters; -using MessagePack.Internal; -using MessagePack.Resolvers; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Reflection; -using System.Text; - -namespace MessagePack.Resolvers -{ - public sealed class BuiltinResolver : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new BuiltinResolver(); - - BuiltinResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - // Reduce IL2CPP code generate size(don't write long code in ) - formatter = (IMessagePackFormatter)BuiltinResolverGetFormatterHelper.GetFormatter(typeof(T)); - } - } - } -} - -namespace MessagePack.Internal -{ - internal static class BuiltinResolverGetFormatterHelper - { - static readonly Dictionary formatterMap = new Dictionary() - { - // Primitive - {typeof(Int16), Int16Formatter.Instance}, - {typeof(Int32), Int32Formatter.Instance}, - {typeof(Int64), Int64Formatter.Instance}, - {typeof(UInt16), UInt16Formatter.Instance}, - {typeof(UInt32), UInt32Formatter.Instance}, - {typeof(UInt64), UInt64Formatter.Instance}, - {typeof(Single), SingleFormatter.Instance}, - {typeof(Double), DoubleFormatter.Instance}, - {typeof(bool), BooleanFormatter.Instance}, - {typeof(byte), ByteFormatter.Instance}, - {typeof(sbyte), SByteFormatter.Instance}, - {typeof(DateTime), DateTimeFormatter.Instance}, - {typeof(char), CharFormatter.Instance}, - - // Nulllable Primitive - {typeof(Nullable), NullableInt16Formatter.Instance}, - {typeof(Nullable), NullableInt32Formatter.Instance}, - {typeof(Nullable), NullableInt64Formatter.Instance}, - {typeof(Nullable), NullableUInt16Formatter.Instance}, - {typeof(Nullable), NullableUInt32Formatter.Instance}, - {typeof(Nullable), NullableUInt64Formatter.Instance}, - {typeof(Nullable), NullableSingleFormatter.Instance}, - {typeof(Nullable), NullableDoubleFormatter.Instance}, - {typeof(Nullable), NullableBooleanFormatter.Instance}, - {typeof(Nullable), NullableByteFormatter.Instance}, - {typeof(Nullable), NullableSByteFormatter.Instance}, - {typeof(Nullable), NullableDateTimeFormatter.Instance}, - {typeof(Nullable), NullableCharFormatter.Instance}, - - // StandardClassLibraryFormatter - {typeof(string), NullableStringFormatter.Instance}, - {typeof(decimal), DecimalFormatter.Instance}, - {typeof(decimal?), new StaticNullableFormatter(DecimalFormatter.Instance)}, - {typeof(TimeSpan), TimeSpanFormatter.Instance}, - {typeof(TimeSpan?), new StaticNullableFormatter(TimeSpanFormatter.Instance)}, - {typeof(DateTimeOffset), DateTimeOffsetFormatter.Instance}, - {typeof(DateTimeOffset?), new StaticNullableFormatter(DateTimeOffsetFormatter.Instance)}, - {typeof(Guid), GuidFormatter.Instance}, - {typeof(Guid?), new StaticNullableFormatter(GuidFormatter.Instance)}, - {typeof(Uri), UriFormatter.Instance}, - {typeof(Version), VersionFormatter.Instance}, - {typeof(StringBuilder), StringBuilderFormatter.Instance}, - {typeof(BitArray), BitArrayFormatter.Instance}, - - // special primitive - {typeof(byte[]), ByteArrayFormatter.Instance}, - - // Nil - {typeof(Nil), NilFormatter.Instance}, - {typeof(Nil?), NullableNilFormatter.Instance}, - - // otpmitized primitive array formatter - {typeof(Int16[]), Int16ArrayFormatter.Instance}, - {typeof(Int32[]), Int32ArrayFormatter.Instance}, - {typeof(Int64[]), Int64ArrayFormatter.Instance}, - {typeof(UInt16[]), UInt16ArrayFormatter.Instance}, - {typeof(UInt32[]), UInt32ArrayFormatter.Instance}, - {typeof(UInt64[]), UInt64ArrayFormatter.Instance}, - {typeof(Single[]), SingleArrayFormatter.Instance}, - {typeof(Double[]), DoubleArrayFormatter.Instance}, - {typeof(Boolean[]), BooleanArrayFormatter.Instance}, - {typeof(SByte[]), SByteArrayFormatter.Instance}, - {typeof(DateTime[]), DateTimeArrayFormatter.Instance}, - {typeof(Char[]), CharArrayFormatter.Instance}, - {typeof(string[]), NullableStringArrayFormatter.Instance}, - - // well known collections - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - - { typeof(ArraySegment), ByteArraySegmentFormatter.Instance }, - { typeof(ArraySegment?),new StaticNullableFormatter>(ByteArraySegmentFormatter.Instance) }, - -#if NETSTANDARD - {typeof(System.Numerics.BigInteger), BigIntegerFormatter.Instance}, - {typeof(System.Numerics.BigInteger?), new StaticNullableFormatter(BigIntegerFormatter.Instance)}, - {typeof(System.Numerics.Complex), ComplexFormatter.Instance}, - {typeof(System.Numerics.Complex?), new StaticNullableFormatter(ComplexFormatter.Instance)}, - {typeof(System.Threading.Tasks.Task), TaskUnitFormatter.Instance}, -#endif - }; - - internal static object GetFormatter(Type t) - { - object formatter; - if (formatterMap.TryGetValue(t, out formatter)) - { - return formatter; - } - - return null; - } - } +using MessagePack.Formatters; +using MessagePack.Internal; +using MessagePack.Resolvers; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Text; + +namespace MessagePack.Resolvers +{ + public sealed class BuiltinResolver : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new BuiltinResolver(); + + BuiltinResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + // Reduce IL2CPP code generate size(don't write long code in ) + formatter = (IMessagePackFormatter)BuiltinResolverGetFormatterHelper.GetFormatter(typeof(T)); + } + } + } +} + +namespace MessagePack.Internal +{ + internal static class BuiltinResolverGetFormatterHelper + { + static readonly Dictionary formatterMap = new Dictionary() + { + // Primitive + {typeof(Int16), Int16Formatter.Instance}, + {typeof(Int32), Int32Formatter.Instance}, + {typeof(Int64), Int64Formatter.Instance}, + {typeof(UInt16), UInt16Formatter.Instance}, + {typeof(UInt32), UInt32Formatter.Instance}, + {typeof(UInt64), UInt64Formatter.Instance}, + {typeof(Single), SingleFormatter.Instance}, + {typeof(Double), DoubleFormatter.Instance}, + {typeof(bool), BooleanFormatter.Instance}, + {typeof(byte), ByteFormatter.Instance}, + {typeof(sbyte), SByteFormatter.Instance}, + {typeof(DateTime), DateTimeFormatter.Instance}, + {typeof(char), CharFormatter.Instance}, + + // Nulllable Primitive + {typeof(Nullable), NullableInt16Formatter.Instance}, + {typeof(Nullable), NullableInt32Formatter.Instance}, + {typeof(Nullable), NullableInt64Formatter.Instance}, + {typeof(Nullable), NullableUInt16Formatter.Instance}, + {typeof(Nullable), NullableUInt32Formatter.Instance}, + {typeof(Nullable), NullableUInt64Formatter.Instance}, + {typeof(Nullable), NullableSingleFormatter.Instance}, + {typeof(Nullable), NullableDoubleFormatter.Instance}, + {typeof(Nullable), NullableBooleanFormatter.Instance}, + {typeof(Nullable), NullableByteFormatter.Instance}, + {typeof(Nullable), NullableSByteFormatter.Instance}, + {typeof(Nullable), NullableDateTimeFormatter.Instance}, + {typeof(Nullable), NullableCharFormatter.Instance}, + + // StandardClassLibraryFormatter + {typeof(string), NullableStringFormatter.Instance}, + {typeof(decimal), DecimalFormatter.Instance}, + {typeof(decimal?), new StaticNullableFormatter(DecimalFormatter.Instance)}, + {typeof(TimeSpan), TimeSpanFormatter.Instance}, + {typeof(TimeSpan?), new StaticNullableFormatter(TimeSpanFormatter.Instance)}, + {typeof(DateTimeOffset), DateTimeOffsetFormatter.Instance}, + {typeof(DateTimeOffset?), new StaticNullableFormatter(DateTimeOffsetFormatter.Instance)}, + {typeof(Guid), GuidFormatter.Instance}, + {typeof(Guid?), new StaticNullableFormatter(GuidFormatter.Instance)}, + {typeof(Uri), UriFormatter.Instance}, + {typeof(Version), VersionFormatter.Instance}, + {typeof(StringBuilder), StringBuilderFormatter.Instance}, + {typeof(BitArray), BitArrayFormatter.Instance}, + + // special primitive + {typeof(byte[]), ByteArrayFormatter.Instance}, + + // Nil + {typeof(Nil), NilFormatter.Instance}, + {typeof(Nil?), NullableNilFormatter.Instance}, + + // otpmitized primitive array formatter + {typeof(Int16[]), Int16ArrayFormatter.Instance}, + {typeof(Int32[]), Int32ArrayFormatter.Instance}, + {typeof(Int64[]), Int64ArrayFormatter.Instance}, + {typeof(UInt16[]), UInt16ArrayFormatter.Instance}, + {typeof(UInt32[]), UInt32ArrayFormatter.Instance}, + {typeof(UInt64[]), UInt64ArrayFormatter.Instance}, + {typeof(Single[]), SingleArrayFormatter.Instance}, + {typeof(Double[]), DoubleArrayFormatter.Instance}, + {typeof(Boolean[]), BooleanArrayFormatter.Instance}, + {typeof(SByte[]), SByteArrayFormatter.Instance}, + {typeof(DateTime[]), DateTimeArrayFormatter.Instance}, + {typeof(Char[]), CharArrayFormatter.Instance}, + {typeof(string[]), NullableStringArrayFormatter.Instance}, + + // well known collections + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + + { typeof(ArraySegment), ByteArraySegmentFormatter.Instance }, + { typeof(ArraySegment?),new StaticNullableFormatter>(ByteArraySegmentFormatter.Instance) }, + +#if NETSTANDARD + {typeof(System.Numerics.BigInteger), BigIntegerFormatter.Instance}, + {typeof(System.Numerics.BigInteger?), new StaticNullableFormatter(BigIntegerFormatter.Instance)}, + {typeof(System.Numerics.Complex), ComplexFormatter.Instance}, + {typeof(System.Numerics.Complex?), new StaticNullableFormatter(ComplexFormatter.Instance)}, + {typeof(System.Threading.Tasks.Task), TaskUnitFormatter.Instance}, +#endif + }; + + internal static object GetFormatter(Type t) + { + object formatter; + if (formatterMap.TryGetValue(t, out formatter)) + { + return formatter; + } + + return null; + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/CompositeResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/CompositeResolver.cs index beac4d221..b18e5ffa3 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/CompositeResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/CompositeResolver.cs @@ -1,107 +1,107 @@ -using MessagePack.Formatters; -using System; -using System.Reflection; - -namespace MessagePack.Resolvers -{ - public sealed class CompositeResolver : IFormatterResolver - { - public static readonly CompositeResolver Instance = new CompositeResolver(); - - static bool isFreezed = false; - static IMessagePackFormatter[] formatters = new IMessagePackFormatter[0]; - static IFormatterResolver[] resolvers = new IFormatterResolver[0]; - - CompositeResolver() - { - } - - public static void Register(params IFormatterResolver[] resolvers) - { - if (isFreezed) - { - throw new InvalidOperationException("Register must call on startup(before use GetFormatter)."); - } - - CompositeResolver.resolvers = resolvers; - } - - public static void Register(params IMessagePackFormatter[] formatters) - { - if (isFreezed) - { - throw new InvalidOperationException("Register must call on startup(before use GetFormatter)."); - } - - CompositeResolver.formatters = formatters; - } - - public static void Register(IMessagePackFormatter[] formatters, IFormatterResolver[] resolvers) - { - if (isFreezed) - { - throw new InvalidOperationException("Register must call on startup(before use GetFormatter)."); - } - - CompositeResolver.resolvers = resolvers; - CompositeResolver.formatters = formatters; - } - - public static void RegisterAndSetAsDefault(params IFormatterResolver[] resolvers) - { - Register(resolvers); - MessagePack.MessagePackSerializer.SetDefaultResolver(CompositeResolver.Instance); - } - - public static void RegisterAndSetAsDefault(params IMessagePackFormatter[] formatters) - { - Register(formatters); - MessagePack.MessagePackSerializer.SetDefaultResolver(CompositeResolver.Instance); - } - - public static void RegisterAndSetAsDefault(IMessagePackFormatter[] formatters, IFormatterResolver[] resolvers) - { - Register(formatters); - Register(resolvers); - MessagePack.MessagePackSerializer.SetDefaultResolver(CompositeResolver.Instance); - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - isFreezed = true; - - foreach (var item in formatters) - { - foreach (var implInterface in item.GetType().GetTypeInfo().ImplementedInterfaces) - { - var ti = implInterface.GetTypeInfo(); - if (ti.IsGenericType && ti.GenericTypeArguments[0] == typeof(T)) - { - formatter = (IMessagePackFormatter)item; - return; - } - } - } - - foreach (var item in resolvers) - { - var f = item.GetFormatter(); - if (f != null) - { - formatter = f; - return; - } - } - } - } - } -} +using MessagePack.Formatters; +using System; +using System.Reflection; + +namespace MessagePack.Resolvers +{ + public sealed class CompositeResolver : IFormatterResolver + { + public static readonly CompositeResolver Instance = new CompositeResolver(); + + static bool isFreezed = false; + static IMessagePackFormatter[] formatters = new IMessagePackFormatter[0]; + static IFormatterResolver[] resolvers = new IFormatterResolver[0]; + + CompositeResolver() + { + } + + public static void Register(params IFormatterResolver[] resolvers) + { + if (isFreezed) + { + throw new InvalidOperationException("Register must call on startup(before use GetFormatter)."); + } + + CompositeResolver.resolvers = resolvers; + } + + public static void Register(params IMessagePackFormatter[] formatters) + { + if (isFreezed) + { + throw new InvalidOperationException("Register must call on startup(before use GetFormatter)."); + } + + CompositeResolver.formatters = formatters; + } + + public static void Register(IMessagePackFormatter[] formatters, IFormatterResolver[] resolvers) + { + if (isFreezed) + { + throw new InvalidOperationException("Register must call on startup(before use GetFormatter)."); + } + + CompositeResolver.resolvers = resolvers; + CompositeResolver.formatters = formatters; + } + + public static void RegisterAndSetAsDefault(params IFormatterResolver[] resolvers) + { + Register(resolvers); + MessagePack.MessagePackSerializer.SetDefaultResolver(CompositeResolver.Instance); + } + + public static void RegisterAndSetAsDefault(params IMessagePackFormatter[] formatters) + { + Register(formatters); + MessagePack.MessagePackSerializer.SetDefaultResolver(CompositeResolver.Instance); + } + + public static void RegisterAndSetAsDefault(IMessagePackFormatter[] formatters, IFormatterResolver[] resolvers) + { + Register(formatters); + Register(resolvers); + MessagePack.MessagePackSerializer.SetDefaultResolver(CompositeResolver.Instance); + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + isFreezed = true; + + foreach (var item in formatters) + { + foreach (var implInterface in item.GetType().GetTypeInfo().ImplementedInterfaces) + { + var ti = implInterface.GetTypeInfo(); + if (ti.IsGenericType && ti.GenericTypeArguments[0] == typeof(T)) + { + formatter = (IMessagePackFormatter)item; + return; + } + } + } + + foreach (var item in resolvers) + { + var f = item.GetFormatter(); + if (f != null) + { + formatter = f; + return; + } + } + } + } + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/ContractlessReflectionObjectResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/ContractlessReflectionObjectResolver.cs index f9d114f68..503e050b5 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/ContractlessReflectionObjectResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/ContractlessReflectionObjectResolver.cs @@ -1,305 +1,305 @@ -#if NETSTANDARD - -using MessagePack.Formatters; -using MessagePack.Internal; -using System; -using System.Collections.Generic; -using System.Text; - -namespace MessagePack.Resolvers -{ - // MEMO: Not completely implemented. - - //public static class ContractlessReflectionObjectResolver - //{ - // // TODO:CamelCase Option? AllowPrivate? - // public static readonly IFormatterResolver Default = new DefaultResolver(); - // public static readonly IFormatterResolver Contractless = new ContractlessResolver(); - // public static readonly IFormatterResolver ContractlessForceStringKey = new ContractlessForceStringResolver(); - - // class DefaultResolver : IFormatterResolver - // { - // const bool ForceStringKey = false; - // const bool Contractless = false; - // const bool AllowPrivate = false; - - // public IMessagePackFormatter GetFormatter() - // { - // return Cache.formatter; - // } - - // static class Cache - // { - // public static readonly IMessagePackFormatter formatter; - - // static Cache() - // { - // var metaInfo = ObjectSerializationInfo.CreateOrNull(typeof(T), ForceStringKey, Contractless, AllowPrivate); - // if (metaInfo != null) - // { - // formatter = new ReflectionObjectFormatter(metaInfo); - // } - // } - // } - // } - - // class ContractlessResolver : IFormatterResolver - // { - // const bool ForceStringKey = false; - // const bool Contractless = true; - // const bool AllowPrivate = false; - - // public IMessagePackFormatter GetFormatter() - // { - // return Cache.formatter; - // } - - // static class Cache - // { - // public static readonly IMessagePackFormatter formatter; - - // static Cache() - // { - // var metaInfo = ObjectSerializationInfo.CreateOrNull(typeof(T), ForceStringKey, Contractless, AllowPrivate); - // if (metaInfo != null) - // { - // formatter = new ReflectionObjectFormatter(metaInfo); - // } - // } - // } - // } - - // class ContractlessForceStringResolver : IFormatterResolver - // { - // const bool ForceStringKey = true; - // const bool Contractless = true; - // const bool AllowPrivate = false; - - // public IMessagePackFormatter GetFormatter() - // { - // return Cache.formatter; - // } - - // static class Cache - // { - // public static readonly IMessagePackFormatter formatter; - - // static Cache() - // { - // var metaInfo = ObjectSerializationInfo.CreateOrNull(typeof(T), ForceStringKey, Contractless, AllowPrivate); - // if (metaInfo != null) - // { - // formatter = new ReflectionObjectFormatter(metaInfo); - // } - // } - // } - // } - - //} - - - //public class ReflectionObjectFormatter : IMessagePackFormatter - //{ - // readonly ObjectSerializationInfo metaInfo; - - // // for write - // readonly byte[][] writeMemberNames; - // readonly ObjectSerializationInfo.EmittableMember[] writeMembers; - - // // for read - // readonly int[] constructorParameterIndexes; - // readonly AutomataDictionary mapMemberDictionary; - // readonly ObjectSerializationInfo.EmittableMember[] readMembers; - - - // internal ReflectionObjectFormatter(ObjectSerializationInfo metaInfo) - // { - // this.metaInfo = metaInfo; - - // // for write - // { - // var memberNameList = new List(metaInfo.Members.Length); - // var emmitableMemberList = new List(metaInfo.Members.Length); - // foreach (var item in metaInfo.Members) - // { - // if (item.IsWritable) - // { - // emmitableMemberList.Add(item); - // memberNameList.Add(Encoding.UTF8.GetBytes(item.Name)); - // } - // } - // this.writeMemberNames = memberNameList.ToArray(); - // this.writeMembers = emmitableMemberList.ToArray(); - // } - // // for read - // { - // var automata = new AutomataDictionary(); - // var emmitableMemberList = new List(metaInfo.Members.Length); - // int index = 0; - // foreach (var item in metaInfo.Members) - // { - // if (item.IsReadable) - // { - // emmitableMemberList.Add(item); - // automata.Add(item.Name, index++); - // } - // } - // this.readMembers = emmitableMemberList.ToArray(); - // this.mapMemberDictionary = automata; - // } - // } - - // public int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver) - // { - // // reduce generic method size, avoid write code in type. - // if (metaInfo.IsIntKey) - // { - // return ReflectionObjectFormatterHelper.WriteArraySerialize(metaInfo, writeMembers, ref bytes, offset, value, formatterResolver); - // } - // else - // { - // return ReflectionObjectFormatterHelper.WriteMapSerialize(metaInfo, writeMembers, writeMemberNames, ref bytes, offset, value, formatterResolver); - // } - // } - - // public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - // { - // return (T)ReflectionObjectFormatterHelper.Deserialize(metaInfo, readMembers, constructorParameterIndexes, mapMemberDictionary, bytes, offset, formatterResolver, out readSize); - // } - //} - - //internal static class ReflectionObjectFormatterHelper - //{ - // internal static int WriteArraySerialize(ObjectSerializationInfo metaInfo, ObjectSerializationInfo.EmittableMember[] writeMembers, ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver) - // { - // var startOffset = offset; - - // offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, writeMembers.Length); - // foreach (var item in metaInfo.Members) - // { - // if (item == null) - // { - // offset += MessagePackBinary.WriteNil(ref bytes, offset); - // } - // else - // { - // var memberValue = item.ReflectionLoadValue(value); - // offset += MessagePackSerializer.NonGeneric.Serialize(item.Type, ref bytes, offset, memberValue, formatterResolver); - // } - // } - - // return offset - startOffset; - // } - - // internal static int WriteMapSerialize(ObjectSerializationInfo metaInfo, ObjectSerializationInfo.EmittableMember[] writeMembers, byte[][] memberNames, ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver) - // { - // var startOffset = offset; - - // offset += MessagePackBinary.WriteMapHeader(ref bytes, offset, writeMembers.Length); - - // for (int i = 0; i < writeMembers.Length; i++) - // { - // offset += MessagePackBinary.WriteStringBytes(ref bytes, offset, memberNames[i]); - // var memberValue = writeMembers[i].ReflectionLoadValue(value); - // offset += MessagePackSerializer.NonGeneric.Serialize(writeMembers[i].Type, ref bytes, offset, memberValue, formatterResolver); - // } - - // return offset - startOffset; - // } - - // internal static object Deserialize(ObjectSerializationInfo metaInfo, ObjectSerializationInfo.EmittableMember[] readMembers, int[] constructorParameterIndexes, AutomataDictionary mapMemberDictionary, byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - // { - // var startOffset = offset; - // object[] parameters = null; - - // var headerType = MessagePackBinary.GetMessagePackType(bytes, offset); - // if (headerType == MessagePackType.Nil) - // { - // readSize = 1; - // return null; - // } - // else if (headerType == MessagePackType.Array) - // { - // var arraySize = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - // offset += readSize; - - // // ReadValues - // parameters = new object[arraySize]; - // for (int i = 0; i < arraySize; i++) - // { - // var info = readMembers[i]; - // if (info != null) - // { - // parameters[i] = MessagePackSerializer.NonGeneric.Deserialize(info.Type, bytes, offset, formatterResolver, out readSize); - // offset += readSize; - // } - // else - // { - // offset += MessagePackBinary.ReadNextBlock(bytes, offset); - // } - // } - // } - // else if (headerType == MessagePackType.Map) - // { - // var mapSize = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); - // offset += readSize; - - // // ReadValues - // parameters = new object[mapSize]; - // for (int i = 0; i < mapSize; i++) - // { - // var rawPropName = MessagePackBinary.ReadStringSegment(bytes, offset, out readSize); - // offset += readSize; - - // int index; - // if (mapMemberDictionary.TryGetValue(rawPropName.Array, rawPropName.Offset, rawPropName.Count, out index)) - // { - // var info = readMembers[index]; - // parameters[index] = MessagePackSerializer.NonGeneric.Deserialize(info.Type, bytes, offset, formatterResolver, out readSize); - // offset += readSize; - // } - // else - // { - // offset += MessagePackBinary.ReadNextBlock(bytes, offset); - // } - // } - // } - // else - // { - // throw new InvalidOperationException("Invalid MessagePackType:" + MessagePackCode.ToFormatName(bytes[offset])); - // } - - // // CreateObject - // object result = null; - // if (constructorParameterIndexes.Length == 0) - // { - // result = Activator.CreateInstance(metaInfo.Type); - // } - // else - // { - // var args = new object[constructorParameterIndexes.Length]; - // for (int i = 0; i < constructorParameterIndexes.Length; i++) - // { - // args[i] = parameters[constructorParameterIndexes[i]]; - // } - - // result = Activator.CreateInstance(metaInfo.Type, args); - // } - - // // SetMembers - // for (int i = 0; i < readMembers.Length; i++) - // { - // var info = readMembers[i]; - // if (info != null) - // { - // info.ReflectionStoreValue(result, parameters[i]); - // } - // } - - // readSize = offset - startOffset; - // return result; - // } - //} -} - +#if NETSTANDARD + +using MessagePack.Formatters; +using MessagePack.Internal; +using System; +using System.Collections.Generic; +using System.Text; + +namespace MessagePack.Resolvers +{ + // MEMO: Not completely implemented. + + //public static class ContractlessReflectionObjectResolver + //{ + // // TODO:CamelCase Option? AllowPrivate? + // public static readonly IFormatterResolver Default = new DefaultResolver(); + // public static readonly IFormatterResolver Contractless = new ContractlessResolver(); + // public static readonly IFormatterResolver ContractlessForceStringKey = new ContractlessForceStringResolver(); + + // class DefaultResolver : IFormatterResolver + // { + // const bool ForceStringKey = false; + // const bool Contractless = false; + // const bool AllowPrivate = false; + + // public IMessagePackFormatter GetFormatter() + // { + // return Cache.formatter; + // } + + // static class Cache + // { + // public static readonly IMessagePackFormatter formatter; + + // static Cache() + // { + // var metaInfo = ObjectSerializationInfo.CreateOrNull(typeof(T), ForceStringKey, Contractless, AllowPrivate); + // if (metaInfo != null) + // { + // formatter = new ReflectionObjectFormatter(metaInfo); + // } + // } + // } + // } + + // class ContractlessResolver : IFormatterResolver + // { + // const bool ForceStringKey = false; + // const bool Contractless = true; + // const bool AllowPrivate = false; + + // public IMessagePackFormatter GetFormatter() + // { + // return Cache.formatter; + // } + + // static class Cache + // { + // public static readonly IMessagePackFormatter formatter; + + // static Cache() + // { + // var metaInfo = ObjectSerializationInfo.CreateOrNull(typeof(T), ForceStringKey, Contractless, AllowPrivate); + // if (metaInfo != null) + // { + // formatter = new ReflectionObjectFormatter(metaInfo); + // } + // } + // } + // } + + // class ContractlessForceStringResolver : IFormatterResolver + // { + // const bool ForceStringKey = true; + // const bool Contractless = true; + // const bool AllowPrivate = false; + + // public IMessagePackFormatter GetFormatter() + // { + // return Cache.formatter; + // } + + // static class Cache + // { + // public static readonly IMessagePackFormatter formatter; + + // static Cache() + // { + // var metaInfo = ObjectSerializationInfo.CreateOrNull(typeof(T), ForceStringKey, Contractless, AllowPrivate); + // if (metaInfo != null) + // { + // formatter = new ReflectionObjectFormatter(metaInfo); + // } + // } + // } + // } + + //} + + + //public class ReflectionObjectFormatter : IMessagePackFormatter + //{ + // readonly ObjectSerializationInfo metaInfo; + + // // for write + // readonly byte[][] writeMemberNames; + // readonly ObjectSerializationInfo.EmittableMember[] writeMembers; + + // // for read + // readonly int[] constructorParameterIndexes; + // readonly AutomataDictionary mapMemberDictionary; + // readonly ObjectSerializationInfo.EmittableMember[] readMembers; + + + // internal ReflectionObjectFormatter(ObjectSerializationInfo metaInfo) + // { + // this.metaInfo = metaInfo; + + // // for write + // { + // var memberNameList = new List(metaInfo.Members.Length); + // var emmitableMemberList = new List(metaInfo.Members.Length); + // foreach (var item in metaInfo.Members) + // { + // if (item.IsWritable) + // { + // emmitableMemberList.Add(item); + // memberNameList.Add(Encoding.UTF8.GetBytes(item.Name)); + // } + // } + // this.writeMemberNames = memberNameList.ToArray(); + // this.writeMembers = emmitableMemberList.ToArray(); + // } + // // for read + // { + // var automata = new AutomataDictionary(); + // var emmitableMemberList = new List(metaInfo.Members.Length); + // int index = 0; + // foreach (var item in metaInfo.Members) + // { + // if (item.IsReadable) + // { + // emmitableMemberList.Add(item); + // automata.Add(item.Name, index++); + // } + // } + // this.readMembers = emmitableMemberList.ToArray(); + // this.mapMemberDictionary = automata; + // } + // } + + // public int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver) + // { + // // reduce generic method size, avoid write code in type. + // if (metaInfo.IsIntKey) + // { + // return ReflectionObjectFormatterHelper.WriteArraySerialize(metaInfo, writeMembers, ref bytes, offset, value, formatterResolver); + // } + // else + // { + // return ReflectionObjectFormatterHelper.WriteMapSerialize(metaInfo, writeMembers, writeMemberNames, ref bytes, offset, value, formatterResolver); + // } + // } + + // public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + // { + // return (T)ReflectionObjectFormatterHelper.Deserialize(metaInfo, readMembers, constructorParameterIndexes, mapMemberDictionary, bytes, offset, formatterResolver, out readSize); + // } + //} + + //internal static class ReflectionObjectFormatterHelper + //{ + // internal static int WriteArraySerialize(ObjectSerializationInfo metaInfo, ObjectSerializationInfo.EmittableMember[] writeMembers, ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver) + // { + // var startOffset = offset; + + // offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, writeMembers.Length); + // foreach (var item in metaInfo.Members) + // { + // if (item == null) + // { + // offset += MessagePackBinary.WriteNil(ref bytes, offset); + // } + // else + // { + // var memberValue = item.ReflectionLoadValue(value); + // offset += MessagePackSerializer.NonGeneric.Serialize(item.Type, ref bytes, offset, memberValue, formatterResolver); + // } + // } + + // return offset - startOffset; + // } + + // internal static int WriteMapSerialize(ObjectSerializationInfo metaInfo, ObjectSerializationInfo.EmittableMember[] writeMembers, byte[][] memberNames, ref byte[] bytes, int offset, object value, IFormatterResolver formatterResolver) + // { + // var startOffset = offset; + + // offset += MessagePackBinary.WriteMapHeader(ref bytes, offset, writeMembers.Length); + + // for (int i = 0; i < writeMembers.Length; i++) + // { + // offset += MessagePackBinary.WriteStringBytes(ref bytes, offset, memberNames[i]); + // var memberValue = writeMembers[i].ReflectionLoadValue(value); + // offset += MessagePackSerializer.NonGeneric.Serialize(writeMembers[i].Type, ref bytes, offset, memberValue, formatterResolver); + // } + + // return offset - startOffset; + // } + + // internal static object Deserialize(ObjectSerializationInfo metaInfo, ObjectSerializationInfo.EmittableMember[] readMembers, int[] constructorParameterIndexes, AutomataDictionary mapMemberDictionary, byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + // { + // var startOffset = offset; + // object[] parameters = null; + + // var headerType = MessagePackBinary.GetMessagePackType(bytes, offset); + // if (headerType == MessagePackType.Nil) + // { + // readSize = 1; + // return null; + // } + // else if (headerType == MessagePackType.Array) + // { + // var arraySize = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + // offset += readSize; + + // // ReadValues + // parameters = new object[arraySize]; + // for (int i = 0; i < arraySize; i++) + // { + // var info = readMembers[i]; + // if (info != null) + // { + // parameters[i] = MessagePackSerializer.NonGeneric.Deserialize(info.Type, bytes, offset, formatterResolver, out readSize); + // offset += readSize; + // } + // else + // { + // offset += MessagePackBinary.ReadNextBlock(bytes, offset); + // } + // } + // } + // else if (headerType == MessagePackType.Map) + // { + // var mapSize = MessagePackBinary.ReadMapHeader(bytes, offset, out readSize); + // offset += readSize; + + // // ReadValues + // parameters = new object[mapSize]; + // for (int i = 0; i < mapSize; i++) + // { + // var rawPropName = MessagePackBinary.ReadStringSegment(bytes, offset, out readSize); + // offset += readSize; + + // int index; + // if (mapMemberDictionary.TryGetValue(rawPropName.Array, rawPropName.Offset, rawPropName.Count, out index)) + // { + // var info = readMembers[index]; + // parameters[index] = MessagePackSerializer.NonGeneric.Deserialize(info.Type, bytes, offset, formatterResolver, out readSize); + // offset += readSize; + // } + // else + // { + // offset += MessagePackBinary.ReadNextBlock(bytes, offset); + // } + // } + // } + // else + // { + // throw new InvalidOperationException("Invalid MessagePackType:" + MessagePackCode.ToFormatName(bytes[offset])); + // } + + // // CreateObject + // object result = null; + // if (constructorParameterIndexes.Length == 0) + // { + // result = Activator.CreateInstance(metaInfo.Type); + // } + // else + // { + // var args = new object[constructorParameterIndexes.Length]; + // for (int i = 0; i < constructorParameterIndexes.Length; i++) + // { + // args[i] = parameters[constructorParameterIndexes[i]]; + // } + + // result = Activator.CreateInstance(metaInfo.Type, args); + // } + + // // SetMembers + // for (int i = 0; i < readMembers.Length; i++) + // { + // var info = readMembers[i]; + // if (info != null) + // { + // info.ReflectionStoreValue(result, parameters[i]); + // } + // } + + // readSize = offset - startOffset; + // return result; + // } + //} +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicEnumAsStringResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicEnumAsStringResolver.cs index f3ecc2bb8..46aead8e6 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicEnumAsStringResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicEnumAsStringResolver.cs @@ -1,60 +1,60 @@ -#if !UNITY_WSA - -using MessagePack.Formatters; -using MessagePack.Internal; -using System; -using System.Reflection; - -namespace MessagePack.Resolvers -{ - public sealed class DynamicEnumAsStringResolver : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new DynamicEnumAsStringResolver(); - - DynamicEnumAsStringResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - var ti = typeof(T).GetTypeInfo(); - - if (ti.IsNullable()) - { - // build underlying type and use wrapped formatter. - ti = ti.GenericTypeArguments[0].GetTypeInfo(); - if (!ti.IsEnum) - { - return; - } - - var innerFormatter = DynamicEnumAsStringResolver.Instance.GetFormatterDynamic(ti.AsType()); - if (innerFormatter == null) - { - return; - } - formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); - return; - } - else if (!ti.IsEnum) - { - return; - } - - formatter = (IMessagePackFormatter)(object)new EnumAsStringFormatter(); - } - } - } -} - +#if !UNITY_WSA + +using MessagePack.Formatters; +using MessagePack.Internal; +using System; +using System.Reflection; + +namespace MessagePack.Resolvers +{ + public sealed class DynamicEnumAsStringResolver : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new DynamicEnumAsStringResolver(); + + DynamicEnumAsStringResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + var ti = typeof(T).GetTypeInfo(); + + if (ti.IsNullable()) + { + // build underlying type and use wrapped formatter. + ti = ti.GenericTypeArguments[0].GetTypeInfo(); + if (!ti.IsEnum) + { + return; + } + + var innerFormatter = DynamicEnumAsStringResolver.Instance.GetFormatterDynamic(ti.AsType()); + if (innerFormatter == null) + { + return; + } + formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); + return; + } + else if (!ti.IsEnum) + { + return; + } + + formatter = (IMessagePackFormatter)(object)new EnumAsStringFormatter(); + } + } + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicEnumResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicEnumResolver.cs index 67c54ea0b..84228603b 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicEnumResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicEnumResolver.cs @@ -1,124 +1,124 @@ -#if !UNITY_WSA -#if !NET_STANDARD_2_0 - -using System; -using MessagePack.Formatters; -using MessagePack.Internal; -using System.Reflection; -using System.Reflection.Emit; -using System.Threading; - -namespace MessagePack.Resolvers -{ - /// - /// EnumResolver by dynamic code generation, serialized underlying type. - /// - public sealed class DynamicEnumResolver : IFormatterResolver - { - public static readonly DynamicEnumResolver Instance = new DynamicEnumResolver(); - - const string ModuleName = "MessagePack.Resolvers.DynamicEnumResolver"; - - static readonly DynamicAssembly assembly; - - static int nameSequence = 0; - - DynamicEnumResolver() - { - - } - - static DynamicEnumResolver() - { - assembly = new DynamicAssembly(ModuleName); - } - - -#if NET_35 - public AssemblyBuilder Save() - { - return assembly.Save(); - } -#endif - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - var ti = typeof(T).GetTypeInfo(); - if (ti.IsNullable()) - { - // build underlying type and use wrapped formatter. - ti = ti.GenericTypeArguments[0].GetTypeInfo(); - if (!ti.IsEnum) - { - return; - } - - var innerFormatter = DynamicEnumResolver.Instance.GetFormatterDynamic(ti.AsType()); - if (innerFormatter == null) - { - return; - } - formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); - return; - } - else if (!ti.IsEnum) - { - return; - } - - var formatterTypeInfo = BuildType(typeof(T)); - formatter = (IMessagePackFormatter)Activator.CreateInstance(formatterTypeInfo.AsType()); - } - } - - static TypeInfo BuildType(Type enumType) - { - var underlyingType = Enum.GetUnderlyingType(enumType); - var formatterType = typeof(IMessagePackFormatter<>).MakeGenericType(enumType); - - var typeBuilder = assembly.DefineType("MessagePack.Formatters." + enumType.FullName.Replace(".", "_") + "Formatter" + Interlocked.Increment(ref nameSequence), TypeAttributes.Public | TypeAttributes.Sealed, null, new[] { formatterType }); - - // int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver); - { - var method = typeBuilder.DefineMethod("Serialize", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, - typeof(int), - new Type[] { typeof(byte[]).MakeByRefType(), typeof(int), enumType, typeof(IFormatterResolver) }); - - var il = method.GetILGenerator(); - il.Emit(OpCodes.Ldarg_1); - il.Emit(OpCodes.Ldarg_2); - il.Emit(OpCodes.Ldarg_3); - il.Emit(OpCodes.Call, typeof(MessagePackBinary).GetRuntimeMethod("Write" + underlyingType.Name, new[] { typeof(byte[]).MakeByRefType(), typeof(int), underlyingType })); - il.Emit(OpCodes.Ret); - } - - // T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize); - { - var method = typeBuilder.DefineMethod("Deserialize", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, - enumType, - new Type[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), typeof(int).MakeByRefType() }); - - var il = method.GetILGenerator(); - il.Emit(OpCodes.Ldarg_1); - il.Emit(OpCodes.Ldarg_2); - il.Emit(OpCodes.Ldarg_S, (byte)4); - il.Emit(OpCodes.Call, typeof(MessagePackBinary).GetRuntimeMethod("Read" + underlyingType.Name, new[] { typeof(byte[]), typeof(int), typeof(int).MakeByRefType() })); - il.Emit(OpCodes.Ret); - } - - return typeBuilder.CreateTypeInfo(); - } - } -} - -#endif +#if !UNITY_WSA +#if !NET_STANDARD_2_0 + +using System; +using MessagePack.Formatters; +using MessagePack.Internal; +using System.Reflection; +using System.Reflection.Emit; +using System.Threading; + +namespace MessagePack.Resolvers +{ + /// + /// EnumResolver by dynamic code generation, serialized underlying type. + /// + public sealed class DynamicEnumResolver : IFormatterResolver + { + public static readonly DynamicEnumResolver Instance = new DynamicEnumResolver(); + + const string ModuleName = "MessagePack.Resolvers.DynamicEnumResolver"; + + static readonly DynamicAssembly assembly; + + static int nameSequence = 0; + + DynamicEnumResolver() + { + + } + + static DynamicEnumResolver() + { + assembly = new DynamicAssembly(ModuleName); + } + + +#if NET_35 + public AssemblyBuilder Save() + { + return assembly.Save(); + } +#endif + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + var ti = typeof(T).GetTypeInfo(); + if (ti.IsNullable()) + { + // build underlying type and use wrapped formatter. + ti = ti.GenericTypeArguments[0].GetTypeInfo(); + if (!ti.IsEnum) + { + return; + } + + var innerFormatter = DynamicEnumResolver.Instance.GetFormatterDynamic(ti.AsType()); + if (innerFormatter == null) + { + return; + } + formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); + return; + } + else if (!ti.IsEnum) + { + return; + } + + var formatterTypeInfo = BuildType(typeof(T)); + formatter = (IMessagePackFormatter)Activator.CreateInstance(formatterTypeInfo.AsType()); + } + } + + static TypeInfo BuildType(Type enumType) + { + var underlyingType = Enum.GetUnderlyingType(enumType); + var formatterType = typeof(IMessagePackFormatter<>).MakeGenericType(enumType); + + var typeBuilder = assembly.DefineType("MessagePack.Formatters." + enumType.FullName.Replace(".", "_") + "Formatter" + Interlocked.Increment(ref nameSequence), TypeAttributes.Public | TypeAttributes.Sealed, null, new[] { formatterType }); + + // int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver); + { + var method = typeBuilder.DefineMethod("Serialize", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, + typeof(int), + new Type[] { typeof(byte[]).MakeByRefType(), typeof(int), enumType, typeof(IFormatterResolver) }); + + var il = method.GetILGenerator(); + il.Emit(OpCodes.Ldarg_1); + il.Emit(OpCodes.Ldarg_2); + il.Emit(OpCodes.Ldarg_3); + il.Emit(OpCodes.Call, typeof(MessagePackBinary).GetRuntimeMethod("Write" + underlyingType.Name, new[] { typeof(byte[]).MakeByRefType(), typeof(int), underlyingType })); + il.Emit(OpCodes.Ret); + } + + // T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize); + { + var method = typeBuilder.DefineMethod("Deserialize", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, + enumType, + new Type[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), typeof(int).MakeByRefType() }); + + var il = method.GetILGenerator(); + il.Emit(OpCodes.Ldarg_1); + il.Emit(OpCodes.Ldarg_2); + il.Emit(OpCodes.Ldarg_S, (byte)4); + il.Emit(OpCodes.Call, typeof(MessagePackBinary).GetRuntimeMethod("Read" + underlyingType.Name, new[] { typeof(byte[]), typeof(int), typeof(int).MakeByRefType() })); + il.Emit(OpCodes.Ret); + } + + return typeBuilder.CreateTypeInfo(); + } + } +} + +#endif #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicGenericResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicGenericResolver.cs index 9eb54f8b3..d508bd13e 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicGenericResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicGenericResolver.cs @@ -1,303 +1,303 @@ -#if !UNITY_WSA - -using MessagePack.Formatters; -using System.Linq; -using MessagePack.Internal; -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Collections.ObjectModel; -using System.Collections; - -#if NETSTANDARD -using System.Threading.Tasks; -#endif - -namespace MessagePack.Resolvers -{ - public sealed class DynamicGenericResolver : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new DynamicGenericResolver(); - - DynamicGenericResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - formatter = (IMessagePackFormatter)DynamicGenericResolverGetFormatterHelper.GetFormatter(typeof(T)); - } - } - } -} - -namespace MessagePack.Internal -{ - internal static class DynamicGenericResolverGetFormatterHelper - { - static readonly Dictionary formatterMap = new Dictionary() - { - {typeof(List<>), typeof(ListFormatter<>)}, - {typeof(LinkedList<>), typeof(LinkedListFormatter<>)}, - {typeof(Queue<>), typeof(QeueueFormatter<>)}, - {typeof(Stack<>), typeof(StackFormatter<>)}, - {typeof(HashSet<>), typeof(HashSetFormatter<>)}, - {typeof(ReadOnlyCollection<>), typeof(ReadOnlyCollectionFormatter<>)}, - {typeof(IList<>), typeof(InterfaceListFormatter<>)}, - {typeof(ICollection<>), typeof(InterfaceCollectionFormatter<>)}, - {typeof(IEnumerable<>), typeof(InterfaceEnumerableFormatter<>)}, - {typeof(Dictionary<,>), typeof(DictionaryFormatter<,>)}, - {typeof(IDictionary<,>), typeof(InterfaceDictionaryFormatter<,>)}, - {typeof(SortedDictionary<,>), typeof(SortedDictionaryFormatter<,>)}, - {typeof(SortedList<,>), typeof(SortedListFormatter<,>)}, - {typeof(ILookup<,>), typeof(InterfaceLookupFormatter<,>)}, - {typeof(IGrouping<,>), typeof(InterfaceGroupingFormatter<,>)}, -#if NETSTANDARD - {typeof(ObservableCollection<>), typeof(ObservableCollectionFormatter<>)}, - {typeof(ReadOnlyObservableCollection<>),(typeof(ReadOnlyObservableCollectionFormatter<>))}, - {typeof(IReadOnlyList<>), typeof(InterfaceReadOnlyListFormatter<>)}, - {typeof(IReadOnlyCollection<>), typeof(InterfaceReadOnlyCollectionFormatter<>)}, - {typeof(ISet<>), typeof(InterfaceSetFormatter<>)}, - {typeof(System.Collections.Concurrent.ConcurrentBag<>), typeof(ConcurrentBagFormatter<>)}, - {typeof(System.Collections.Concurrent.ConcurrentQueue<>), typeof(ConcurrentQueueFormatter<>)}, - {typeof(System.Collections.Concurrent.ConcurrentStack<>), typeof(ConcurrentStackFormatter<>)}, - {typeof(ReadOnlyDictionary<,>), typeof(ReadOnlyDictionaryFormatter<,>)}, - {typeof(IReadOnlyDictionary<,>), typeof(InterfaceReadOnlyDictionaryFormatter<,>)}, - {typeof(System.Collections.Concurrent.ConcurrentDictionary<,>), typeof(ConcurrentDictionaryFormatter<,>)}, - {typeof(Lazy<>), typeof(LazyFormatter<>)}, - {typeof(Task<>), typeof(TaskValueFormatter<>)}, -#endif - }; - - // Reduce IL2CPP code generate size(don't write long code in ) - internal static object GetFormatter(Type t) - { - var ti = t.GetTypeInfo(); - - if (t.IsArray) - { - var rank = t.GetArrayRank(); - if (rank == 1) - { - if (t.GetElementType() == typeof(byte)) // byte[] is also supported in builtin formatter. - { - return ByteArrayFormatter.Instance; - } - - return Activator.CreateInstance(typeof(ArrayFormatter<>).MakeGenericType(t.GetElementType())); - } - else if (rank == 2) - { - return Activator.CreateInstance(typeof(TwoDimentionalArrayFormatter<>).MakeGenericType(t.GetElementType())); - } - else if (rank == 3) - { - return Activator.CreateInstance(typeof(ThreeDimentionalArrayFormatter<>).MakeGenericType(t.GetElementType())); - } - else if (rank == 4) - { - return Activator.CreateInstance(typeof(FourDimentionalArrayFormatter<>).MakeGenericType(t.GetElementType())); - } - else - { - return null; // not supported built-in - } - } - else if (ti.IsGenericType) - { - var genericType = ti.GetGenericTypeDefinition(); - var genericTypeInfo = genericType.GetTypeInfo(); - var isNullable = genericTypeInfo.IsNullable(); - var nullableElementType = isNullable ? ti.GenericTypeArguments[0] : null; - - if (genericType == typeof(KeyValuePair<,>)) - { - return CreateInstance(typeof(KeyValuePairFormatter<,>), ti.GenericTypeArguments); - } - else if (isNullable && nullableElementType.GetTypeInfo().IsConstructedGenericType() && nullableElementType.GetGenericTypeDefinition() == typeof(KeyValuePair<,>)) - { - return CreateInstance(typeof(NullableFormatter<>), new[] { nullableElementType }); - } - -#if NETSTANDARD - - // ValueTask - else if (genericType == typeof(ValueTask<>)) - { - return CreateInstance(typeof(ValueTaskFormatter<>), ti.GenericTypeArguments); - } - else if (isNullable && nullableElementType.IsConstructedGenericType && nullableElementType.GetGenericTypeDefinition() == typeof(ValueTask<>)) - { - return CreateInstance(typeof(NullableFormatter<>), new[] { nullableElementType }); - } - - // Tuple - else if (ti.FullName.StartsWith("System.Tuple")) - { - Type tupleFormatterType = null; - switch (ti.GenericTypeArguments.Length) - { - case 1: - tupleFormatterType = typeof(TupleFormatter<>); - break; - case 2: - tupleFormatterType = typeof(TupleFormatter<,>); - break; - case 3: - tupleFormatterType = typeof(TupleFormatter<,,>); - break; - case 4: - tupleFormatterType = typeof(TupleFormatter<,,,>); - break; - case 5: - tupleFormatterType = typeof(TupleFormatter<,,,,>); - break; - case 6: - tupleFormatterType = typeof(TupleFormatter<,,,,,>); - break; - case 7: - tupleFormatterType = typeof(TupleFormatter<,,,,,,>); - break; - case 8: - tupleFormatterType = typeof(TupleFormatter<,,,,,,,>); - break; - default: - break; - } - - return CreateInstance(tupleFormatterType, ti.GenericTypeArguments); - } - - // ValueTuple - else if (ti.FullName.StartsWith("System.ValueTuple")) - { - Type tupleFormatterType = null; - switch (ti.GenericTypeArguments.Length) - { - case 1: - tupleFormatterType = typeof(ValueTupleFormatter<>); - break; - case 2: - tupleFormatterType = typeof(ValueTupleFormatter<,>); - break; - case 3: - tupleFormatterType = typeof(ValueTupleFormatter<,,>); - break; - case 4: - tupleFormatterType = typeof(ValueTupleFormatter<,,,>); - break; - case 5: - tupleFormatterType = typeof(ValueTupleFormatter<,,,,>); - break; - case 6: - tupleFormatterType = typeof(ValueTupleFormatter<,,,,,>); - break; - case 7: - tupleFormatterType = typeof(ValueTupleFormatter<,,,,,,>); - break; - case 8: - tupleFormatterType = typeof(ValueTupleFormatter<,,,,,,,>); - break; - default: - break; - } - - return CreateInstance(tupleFormatterType, ti.GenericTypeArguments); - } - -#endif - - // ArraySegement - else if (genericType == typeof(ArraySegment<>)) - { - if (ti.GenericTypeArguments[0] == typeof(byte)) - { - return ByteArraySegmentFormatter.Instance; - } - else - { - return CreateInstance(typeof(ArraySegmentFormatter<>), ti.GenericTypeArguments); - } - } - else if (isNullable && nullableElementType.GetTypeInfo().IsConstructedGenericType() && nullableElementType.GetGenericTypeDefinition() == typeof(ArraySegment<>)) - { - if (nullableElementType == typeof(ArraySegment)) - { - return new StaticNullableFormatter>(ByteArraySegmentFormatter.Instance); - } - else - { - return CreateInstance(typeof(NullableFormatter<>), new[] { nullableElementType }); - } - } - - // Mapped formatter - else - { - Type formatterType; - if (formatterMap.TryGetValue(genericType, out formatterType)) - { - return CreateInstance(formatterType, ti.GenericTypeArguments); - } - - // generic collection - else if (ti.GenericTypeArguments.Length == 1 - && ti.ImplementedInterfaces.Any(x => x.GetTypeInfo().IsConstructedGenericType() && x.GetGenericTypeDefinition() == typeof(ICollection<>)) - && ti.DeclaredConstructors.Any(x => x.GetParameters().Length == 0)) - { - var elemType = ti.GenericTypeArguments[0]; - return CreateInstance(typeof(GenericCollectionFormatter<,>), new[] { elemType, t }); - } - // generic dictionary - else if (ti.GenericTypeArguments.Length == 2 - && ti.ImplementedInterfaces.Any(x => x.GetTypeInfo().IsConstructedGenericType() && x.GetGenericTypeDefinition() == typeof(IDictionary<,>)) - && ti.DeclaredConstructors.Any(x => x.GetParameters().Length == 0)) - { - var keyType = ti.GenericTypeArguments[0]; - var valueType = ti.GenericTypeArguments[1]; - return CreateInstance(typeof(GenericDictionaryFormatter<,,>), new[] { keyType, valueType, t }); - } - } - } - else - { - // NonGeneric Collection - if (t == typeof(IList)) - { - return NonGenericInterfaceListFormatter.Instance; - } - else if (t == typeof(IDictionary)) - { - return NonGenericInterfaceDictionaryFormatter.Instance; - } - if (typeof(IList).GetTypeInfo().IsAssignableFrom(ti) && ti.DeclaredConstructors.Any(x => x.GetParameters().Length == 0)) - { - return Activator.CreateInstance(typeof(NonGenericListFormatter<>).MakeGenericType(t)); - } - else if (typeof(IDictionary).GetTypeInfo().IsAssignableFrom(ti) && ti.DeclaredConstructors.Any(x => x.GetParameters().Length == 0)) - { - return Activator.CreateInstance(typeof(NonGenericDictionaryFormatter<>).MakeGenericType(t)); - } - } - - return null; - } - - static object CreateInstance(Type genericType, Type[] genericTypeArguments, params object[] arguments) - { - return Activator.CreateInstance(genericType.MakeGenericType(genericTypeArguments), arguments); - } - } -} - +#if !UNITY_WSA + +using MessagePack.Formatters; +using System.Linq; +using MessagePack.Internal; +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Collections.ObjectModel; +using System.Collections; + +#if NETSTANDARD +using System.Threading.Tasks; +#endif + +namespace MessagePack.Resolvers +{ + public sealed class DynamicGenericResolver : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new DynamicGenericResolver(); + + DynamicGenericResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + formatter = (IMessagePackFormatter)DynamicGenericResolverGetFormatterHelper.GetFormatter(typeof(T)); + } + } + } +} + +namespace MessagePack.Internal +{ + internal static class DynamicGenericResolverGetFormatterHelper + { + static readonly Dictionary formatterMap = new Dictionary() + { + {typeof(List<>), typeof(ListFormatter<>)}, + {typeof(LinkedList<>), typeof(LinkedListFormatter<>)}, + {typeof(Queue<>), typeof(QeueueFormatter<>)}, + {typeof(Stack<>), typeof(StackFormatter<>)}, + {typeof(HashSet<>), typeof(HashSetFormatter<>)}, + {typeof(ReadOnlyCollection<>), typeof(ReadOnlyCollectionFormatter<>)}, + {typeof(IList<>), typeof(InterfaceListFormatter<>)}, + {typeof(ICollection<>), typeof(InterfaceCollectionFormatter<>)}, + {typeof(IEnumerable<>), typeof(InterfaceEnumerableFormatter<>)}, + {typeof(Dictionary<,>), typeof(DictionaryFormatter<,>)}, + {typeof(IDictionary<,>), typeof(InterfaceDictionaryFormatter<,>)}, + {typeof(SortedDictionary<,>), typeof(SortedDictionaryFormatter<,>)}, + {typeof(SortedList<,>), typeof(SortedListFormatter<,>)}, + {typeof(ILookup<,>), typeof(InterfaceLookupFormatter<,>)}, + {typeof(IGrouping<,>), typeof(InterfaceGroupingFormatter<,>)}, +#if NETSTANDARD + {typeof(ObservableCollection<>), typeof(ObservableCollectionFormatter<>)}, + {typeof(ReadOnlyObservableCollection<>),(typeof(ReadOnlyObservableCollectionFormatter<>))}, + {typeof(IReadOnlyList<>), typeof(InterfaceReadOnlyListFormatter<>)}, + {typeof(IReadOnlyCollection<>), typeof(InterfaceReadOnlyCollectionFormatter<>)}, + {typeof(ISet<>), typeof(InterfaceSetFormatter<>)}, + {typeof(System.Collections.Concurrent.ConcurrentBag<>), typeof(ConcurrentBagFormatter<>)}, + {typeof(System.Collections.Concurrent.ConcurrentQueue<>), typeof(ConcurrentQueueFormatter<>)}, + {typeof(System.Collections.Concurrent.ConcurrentStack<>), typeof(ConcurrentStackFormatter<>)}, + {typeof(ReadOnlyDictionary<,>), typeof(ReadOnlyDictionaryFormatter<,>)}, + {typeof(IReadOnlyDictionary<,>), typeof(InterfaceReadOnlyDictionaryFormatter<,>)}, + {typeof(System.Collections.Concurrent.ConcurrentDictionary<,>), typeof(ConcurrentDictionaryFormatter<,>)}, + {typeof(Lazy<>), typeof(LazyFormatter<>)}, + {typeof(Task<>), typeof(TaskValueFormatter<>)}, +#endif + }; + + // Reduce IL2CPP code generate size(don't write long code in ) + internal static object GetFormatter(Type t) + { + var ti = t.GetTypeInfo(); + + if (t.IsArray) + { + var rank = t.GetArrayRank(); + if (rank == 1) + { + if (t.GetElementType() == typeof(byte)) // byte[] is also supported in builtin formatter. + { + return ByteArrayFormatter.Instance; + } + + return Activator.CreateInstance(typeof(ArrayFormatter<>).MakeGenericType(t.GetElementType())); + } + else if (rank == 2) + { + return Activator.CreateInstance(typeof(TwoDimentionalArrayFormatter<>).MakeGenericType(t.GetElementType())); + } + else if (rank == 3) + { + return Activator.CreateInstance(typeof(ThreeDimentionalArrayFormatter<>).MakeGenericType(t.GetElementType())); + } + else if (rank == 4) + { + return Activator.CreateInstance(typeof(FourDimentionalArrayFormatter<>).MakeGenericType(t.GetElementType())); + } + else + { + return null; // not supported built-in + } + } + else if (ti.IsGenericType) + { + var genericType = ti.GetGenericTypeDefinition(); + var genericTypeInfo = genericType.GetTypeInfo(); + var isNullable = genericTypeInfo.IsNullable(); + var nullableElementType = isNullable ? ti.GenericTypeArguments[0] : null; + + if (genericType == typeof(KeyValuePair<,>)) + { + return CreateInstance(typeof(KeyValuePairFormatter<,>), ti.GenericTypeArguments); + } + else if (isNullable && nullableElementType.GetTypeInfo().IsConstructedGenericType() && nullableElementType.GetGenericTypeDefinition() == typeof(KeyValuePair<,>)) + { + return CreateInstance(typeof(NullableFormatter<>), new[] { nullableElementType }); + } + +#if NETSTANDARD + + // ValueTask + else if (genericType == typeof(ValueTask<>)) + { + return CreateInstance(typeof(ValueTaskFormatter<>), ti.GenericTypeArguments); + } + else if (isNullable && nullableElementType.IsConstructedGenericType && nullableElementType.GetGenericTypeDefinition() == typeof(ValueTask<>)) + { + return CreateInstance(typeof(NullableFormatter<>), new[] { nullableElementType }); + } + + // Tuple + else if (ti.FullName.StartsWith("System.Tuple")) + { + Type tupleFormatterType = null; + switch (ti.GenericTypeArguments.Length) + { + case 1: + tupleFormatterType = typeof(TupleFormatter<>); + break; + case 2: + tupleFormatterType = typeof(TupleFormatter<,>); + break; + case 3: + tupleFormatterType = typeof(TupleFormatter<,,>); + break; + case 4: + tupleFormatterType = typeof(TupleFormatter<,,,>); + break; + case 5: + tupleFormatterType = typeof(TupleFormatter<,,,,>); + break; + case 6: + tupleFormatterType = typeof(TupleFormatter<,,,,,>); + break; + case 7: + tupleFormatterType = typeof(TupleFormatter<,,,,,,>); + break; + case 8: + tupleFormatterType = typeof(TupleFormatter<,,,,,,,>); + break; + default: + break; + } + + return CreateInstance(tupleFormatterType, ti.GenericTypeArguments); + } + + // ValueTuple + else if (ti.FullName.StartsWith("System.ValueTuple")) + { + Type tupleFormatterType = null; + switch (ti.GenericTypeArguments.Length) + { + case 1: + tupleFormatterType = typeof(ValueTupleFormatter<>); + break; + case 2: + tupleFormatterType = typeof(ValueTupleFormatter<,>); + break; + case 3: + tupleFormatterType = typeof(ValueTupleFormatter<,,>); + break; + case 4: + tupleFormatterType = typeof(ValueTupleFormatter<,,,>); + break; + case 5: + tupleFormatterType = typeof(ValueTupleFormatter<,,,,>); + break; + case 6: + tupleFormatterType = typeof(ValueTupleFormatter<,,,,,>); + break; + case 7: + tupleFormatterType = typeof(ValueTupleFormatter<,,,,,,>); + break; + case 8: + tupleFormatterType = typeof(ValueTupleFormatter<,,,,,,,>); + break; + default: + break; + } + + return CreateInstance(tupleFormatterType, ti.GenericTypeArguments); + } + +#endif + + // ArraySegement + else if (genericType == typeof(ArraySegment<>)) + { + if (ti.GenericTypeArguments[0] == typeof(byte)) + { + return ByteArraySegmentFormatter.Instance; + } + else + { + return CreateInstance(typeof(ArraySegmentFormatter<>), ti.GenericTypeArguments); + } + } + else if (isNullable && nullableElementType.GetTypeInfo().IsConstructedGenericType() && nullableElementType.GetGenericTypeDefinition() == typeof(ArraySegment<>)) + { + if (nullableElementType == typeof(ArraySegment)) + { + return new StaticNullableFormatter>(ByteArraySegmentFormatter.Instance); + } + else + { + return CreateInstance(typeof(NullableFormatter<>), new[] { nullableElementType }); + } + } + + // Mapped formatter + else + { + Type formatterType; + if (formatterMap.TryGetValue(genericType, out formatterType)) + { + return CreateInstance(formatterType, ti.GenericTypeArguments); + } + + // generic collection + else if (ti.GenericTypeArguments.Length == 1 + && ti.ImplementedInterfaces.Any(x => x.GetTypeInfo().IsConstructedGenericType() && x.GetGenericTypeDefinition() == typeof(ICollection<>)) + && ti.DeclaredConstructors.Any(x => x.GetParameters().Length == 0)) + { + var elemType = ti.GenericTypeArguments[0]; + return CreateInstance(typeof(GenericCollectionFormatter<,>), new[] { elemType, t }); + } + // generic dictionary + else if (ti.GenericTypeArguments.Length == 2 + && ti.ImplementedInterfaces.Any(x => x.GetTypeInfo().IsConstructedGenericType() && x.GetGenericTypeDefinition() == typeof(IDictionary<,>)) + && ti.DeclaredConstructors.Any(x => x.GetParameters().Length == 0)) + { + var keyType = ti.GenericTypeArguments[0]; + var valueType = ti.GenericTypeArguments[1]; + return CreateInstance(typeof(GenericDictionaryFormatter<,,>), new[] { keyType, valueType, t }); + } + } + } + else + { + // NonGeneric Collection + if (t == typeof(IList)) + { + return NonGenericInterfaceListFormatter.Instance; + } + else if (t == typeof(IDictionary)) + { + return NonGenericInterfaceDictionaryFormatter.Instance; + } + if (typeof(IList).GetTypeInfo().IsAssignableFrom(ti) && ti.DeclaredConstructors.Any(x => x.GetParameters().Length == 0)) + { + return Activator.CreateInstance(typeof(NonGenericListFormatter<>).MakeGenericType(t)); + } + else if (typeof(IDictionary).GetTypeInfo().IsAssignableFrom(ti) && ti.DeclaredConstructors.Any(x => x.GetParameters().Length == 0)) + { + return Activator.CreateInstance(typeof(NonGenericDictionaryFormatter<>).MakeGenericType(t)); + } + } + + return null; + } + + static object CreateInstance(Type genericType, Type[] genericTypeArguments, params object[] arguments) + { + return Activator.CreateInstance(genericType.MakeGenericType(genericTypeArguments), arguments); + } + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicObjectResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicObjectResolver.cs index 7ed6f724f..efacd7b3f 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicObjectResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicObjectResolver.cs @@ -1,1843 +1,1843 @@ -#if !UNITY_WSA -#if !NET_STANDARD_2_0 - -using System; -using System.Linq; -using MessagePack.Formatters; -using MessagePack.Internal; -using System.Reflection; -using System.Reflection.Emit; -using System.Collections.Generic; -using System.Text.RegularExpressions; -using System.Runtime.Serialization; -using System.Text; -using System.Threading; - -namespace MessagePack.Resolvers -{ - /// - /// ObjectResolver by dynamic code generation. - /// - public sealed class DynamicObjectResolver : IFormatterResolver - { - public static readonly DynamicObjectResolver Instance = new DynamicObjectResolver(); - - const string ModuleName = "MessagePack.Resolvers.DynamicObjectResolver"; - - internal static readonly DynamicAssembly assembly; - - DynamicObjectResolver() - { - - } - - static DynamicObjectResolver() - { - assembly = new DynamicAssembly(ModuleName); - } - -#if NET_35 - public AssemblyBuilder Save() - { - return assembly.Save(); - } -#endif - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - var ti = typeof(T).GetTypeInfo(); - - if (ti.IsInterface) - { - return; - } - - if (ti.IsNullable()) - { - ti = ti.GenericTypeArguments[0].GetTypeInfo(); - - var innerFormatter = DynamicObjectResolver.Instance.GetFormatterDynamic(ti.AsType()); - if (innerFormatter == null) - { - return; - } - formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); - return; - } - - if (ti.IsAnonymous()) - { - formatter = (IMessagePackFormatter)DynamicObjectTypeBuilder.BuildFormatterToDynamicMethod(typeof(T), true, true, false); - return; - } - - var formatterTypeInfo = DynamicObjectTypeBuilder.BuildType(assembly, typeof(T), false, false); - if (formatterTypeInfo == null) return; - - formatter = (IMessagePackFormatter)Activator.CreateInstance(formatterTypeInfo.AsType()); - } - } - } - - /// - /// ObjectResolver by dynamic code generation, allow private member. - /// - public sealed class DynamicObjectResolverAllowPrivate : IFormatterResolver - { - public static readonly DynamicObjectResolverAllowPrivate Instance = new DynamicObjectResolverAllowPrivate(); - - DynamicObjectResolverAllowPrivate() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - var ti = typeof(T).GetTypeInfo(); - - if (ti.IsInterface) - { - return; - } - - if (ti.IsNullable()) - { - ti = ti.GenericTypeArguments[0].GetTypeInfo(); - - var innerFormatter = DynamicObjectResolverAllowPrivate.Instance.GetFormatterDynamic(ti.AsType()); - if (innerFormatter == null) - { - return; - } - formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); - return; - } - - if (ti.IsAnonymous()) - { - formatter = (IMessagePackFormatter)DynamicObjectTypeBuilder.BuildFormatterToDynamicMethod(typeof(T), true, true, false); - } - else - { - formatter = (IMessagePackFormatter)DynamicObjectTypeBuilder.BuildFormatterToDynamicMethod(typeof(T), false, false, true); - } - } - } - } - - /// - /// ObjectResolver by dynamic code generation, no needs MessagePackObject attribute and serialized key as string. - /// - public sealed class DynamicContractlessObjectResolver : IFormatterResolver - { - public static readonly DynamicContractlessObjectResolver Instance = new DynamicContractlessObjectResolver(); - - const string ModuleName = "MessagePack.Resolvers.DynamicContractlessObjectResolver"; - - static readonly DynamicAssembly assembly; - - DynamicContractlessObjectResolver() - { - - } - - static DynamicContractlessObjectResolver() - { - assembly = new DynamicAssembly(ModuleName); - } - -#if NET_35 - public AssemblyBuilder Save() - { - return assembly.Save(); - } -#endif - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - if (typeof(T) == typeof(object)) - { - return; - } - - var ti = typeof(T).GetTypeInfo(); - - if (ti.IsInterface) - { - return; - } - - if (ti.IsNullable()) - { - ti = ti.GenericTypeArguments[0].GetTypeInfo(); - - var innerFormatter = DynamicContractlessObjectResolver.Instance.GetFormatterDynamic(ti.AsType()); - if (innerFormatter == null) - { - return; - } - formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); - return; - } - - if (ti.IsAnonymous()) - { - formatter = (IMessagePackFormatter)DynamicObjectTypeBuilder.BuildFormatterToDynamicMethod(typeof(T), true, true, false); - return; - } - - var formatterTypeInfo = DynamicObjectTypeBuilder.BuildType(assembly, typeof(T), true, true); - if (formatterTypeInfo == null) return; - - formatter = (IMessagePackFormatter)Activator.CreateInstance(formatterTypeInfo.AsType()); - } - } - } - - /// - /// ObjectResolver by dynamic code generation, no needs MessagePackObject attribute and serialized key as string, allow private member. - /// - public sealed class DynamicContractlessObjectResolverAllowPrivate : IFormatterResolver - { - public static readonly DynamicContractlessObjectResolverAllowPrivate Instance = new DynamicContractlessObjectResolverAllowPrivate(); - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - if (typeof(T) == typeof(object)) - { - return; - } - - var ti = typeof(T).GetTypeInfo(); - - if (ti.IsInterface) - { - return; - } - - if (ti.IsNullable()) - { - ti = ti.GenericTypeArguments[0].GetTypeInfo(); - - var innerFormatter = DynamicContractlessObjectResolverAllowPrivate.Instance.GetFormatterDynamic(ti.AsType()); - if (innerFormatter == null) - { - return; - } - formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); - return; - } - - if (ti.IsAnonymous()) - { - formatter = (IMessagePackFormatter)DynamicObjectTypeBuilder.BuildFormatterToDynamicMethod(typeof(T), true, true, false); - } - else - { - formatter = (IMessagePackFormatter)DynamicObjectTypeBuilder.BuildFormatterToDynamicMethod(typeof(T), true, true, true); - } - } - } - } -} - -namespace MessagePack.Internal -{ - internal static class DynamicObjectTypeBuilder - { -#if NETSTANDARD - static readonly Regex SubtractFullNameRegex = new Regex(@", Version=\d+.\d+.\d+.\d+, Culture=\w+, PublicKeyToken=\w+", RegexOptions.Compiled); -#else - static readonly Regex SubtractFullNameRegex = new Regex(@", Version=\d+.\d+.\d+.\d+, Culture=\w+, PublicKeyToken=\w+"); -#endif - - static int nameSequence = 0; - - static HashSet ignoreTypes = new HashSet - { - {typeof(object)}, - {typeof(short)}, - {typeof(int)}, - {typeof(long)}, - {typeof(ushort)}, - {typeof(uint)}, - {typeof(ulong)}, - {typeof(float)}, - {typeof(double)}, - {typeof(bool)}, - {typeof(byte)}, - {typeof(sbyte)}, - {typeof(decimal)}, - {typeof(char)}, - {typeof(string)}, - {typeof(System.Guid)}, - {typeof(System.TimeSpan)}, - {typeof(System.DateTime)}, - {typeof(System.DateTimeOffset)}, - {typeof(MessagePack.Nil)}, - }; - - public static TypeInfo BuildType(DynamicAssembly assembly, Type type, bool forceStringKey, bool contractless) - { - if (ignoreTypes.Contains(type)) return null; - - var serializationInfo = MessagePack.Internal.ObjectSerializationInfo.CreateOrNull(type, forceStringKey, contractless, false); - if (serializationInfo == null) return null; - - var formatterType = typeof(IMessagePackFormatter<>).MakeGenericType(type); - var typeBuilder = assembly.DefineType("MessagePack.Formatters." + SubtractFullNameRegex.Replace(type.FullName, "").Replace(".", "_") + "Formatter" + Interlocked.Increment(ref nameSequence), TypeAttributes.Public | TypeAttributes.Sealed, null, new[] { formatterType }); - - FieldBuilder stringByteKeysField = null; - Dictionary customFormatterLookup = null; - - // string key needs string->int mapper for deserialize switch statement - if (serializationInfo.IsStringKey) - { - var method = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Type.EmptyTypes); - stringByteKeysField = typeBuilder.DefineField("stringByteKeys", typeof(byte[][]), FieldAttributes.Private | FieldAttributes.InitOnly); - - var il = method.GetILGenerator(); - BuildConstructor(type, serializationInfo, method, stringByteKeysField, il); - customFormatterLookup = BuildCustomFormatterField(typeBuilder, serializationInfo, il); - il.Emit(OpCodes.Ret); - } - else - { - var method = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Type.EmptyTypes); - var il = method.GetILGenerator(); - il.EmitLoadThis(); - il.Emit(OpCodes.Call, objectCtor); - customFormatterLookup = BuildCustomFormatterField(typeBuilder, serializationInfo, il); - il.Emit(OpCodes.Ret); - } - - { - var method = typeBuilder.DefineMethod("Serialize", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, - typeof(int), - new Type[] { typeof(byte[]).MakeByRefType(), typeof(int), type, typeof(IFormatterResolver) }); - - var il = method.GetILGenerator(); - BuildSerialize(type, serializationInfo, il, () => - { - il.EmitLoadThis(); - il.EmitLdfld(stringByteKeysField); - }, (index, member) => - { - FieldInfo fi; - if (!customFormatterLookup.TryGetValue(member, out fi)) return null; - - return () => - { - il.EmitLoadThis(); - il.EmitLdfld(fi); - }; - }, 1); - } - - { - var method = typeBuilder.DefineMethod("Deserialize", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, - type, - new Type[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), typeof(int).MakeByRefType() }); - - var il = method.GetILGenerator(); - BuildDeserialize(type, serializationInfo, il, (index, member) => - { - FieldInfo fi; - if (!customFormatterLookup.TryGetValue(member, out fi)) return null; - - return () => - { - il.EmitLoadThis(); - il.EmitLdfld(fi); - }; - }, 1); // firstArgIndex:0 is this. - } - - return typeBuilder.CreateTypeInfo(); - } - - public static object BuildFormatterToDynamicMethod(Type type, bool forceStringKey, bool contractless, bool allowPrivate) - { - var serializationInfo = ObjectSerializationInfo.CreateOrNull(type, forceStringKey, contractless, allowPrivate); - if (serializationInfo == null) return null; - - // internal delegate int AnonymousSerializeFunc(byte[][] stringByteKeysField, object[] customFormatters, ref byte[] bytes, int offset, T value, IFormatterResolver resolver); - // internal delegate T AnonymousDeserializeFunc(object[] customFormatters, byte[] bytes, int offset, IFormatterResolver resolver, out int readSize); - var serialize = new DynamicMethod("Serialize", typeof(int), new[] { typeof(byte[][]), typeof(object[]), typeof(byte[]).MakeByRefType(), typeof(int), type, typeof(IFormatterResolver) }, type, true); - DynamicMethod deserialize = null; - - List stringByteKeysField = new List(); - List serializeCustomFormatters = new List(); - List deserializeCustomFormatters = new List(); - - if (serializationInfo.IsStringKey) - { - var i = 0; - foreach (var item in serializationInfo.Members.Where(x => x.IsReadable)) - { - stringByteKeysField.Add(MessagePackBinary.GetEncodedStringBytes(item.StringKey)); - i++; - } - } - foreach (var item in serializationInfo.Members.Where(x => x.IsReadable)) - { - var attr = item.GetMessagePackFormatterAttribtue(); - if (attr != null) - { - var formatter = Activator.CreateInstance(attr.FormatterType, attr.Arguments); - serializeCustomFormatters.Add(formatter); - } - else - { - serializeCustomFormatters.Add(null); - } - } - foreach (var item in serializationInfo.Members) // not only for writable because for use ctor. - { - var attr = item.GetMessagePackFormatterAttribtue(); - if (attr != null) - { - var formatter = Activator.CreateInstance(attr.FormatterType, attr.Arguments); - deserializeCustomFormatters.Add(formatter); - } - else - { - deserializeCustomFormatters.Add(null); - } - } - - { - var il = serialize.GetILGenerator(); - BuildSerialize(type, serializationInfo, il, () => - { - il.EmitLdarg(0); - }, (index, member) => - { - if (serializeCustomFormatters.Count == 0) return null; - if (serializeCustomFormatters[index] == null) return null; - - return () => - { - il.EmitLdarg(1); // read object[] - il.EmitLdc_I4(index); - il.Emit(OpCodes.Ldelem_Ref); // object - il.Emit(OpCodes.Castclass, serializeCustomFormatters[index].GetType()); - }; - }, 2); // 0, 1 is parameter. - } - - if (serializationInfo.IsStruct || serializationInfo.BestmatchConstructor != null) - { - deserialize = new DynamicMethod("Deserialize", type, new[] { typeof(object[]), typeof(byte[]), typeof(int), typeof(IFormatterResolver), typeof(int).MakeByRefType() }, type, true); - - var il = deserialize.GetILGenerator(); - BuildDeserialize(type, serializationInfo, il, (index, member) => - { - if (deserializeCustomFormatters.Count == 0) return null; - if (deserializeCustomFormatters[index] == null) return null; - - return () => - { - il.EmitLdarg(0); // read object[] - il.EmitLdc_I4(index); - il.Emit(OpCodes.Ldelem_Ref); // object - il.Emit(OpCodes.Castclass, deserializeCustomFormatters[index].GetType()); - }; - }, 1); - } - - object serializeDelegate = serialize.CreateDelegate(typeof(AnonymousSerializeFunc<>).MakeGenericType(type)); - object deserializeDelegate = (deserialize == null) - ? (object)null - : (object)deserialize.CreateDelegate(typeof(AnonymousDeserializeFunc<>).MakeGenericType(type)); - var resultFormatter = Activator.CreateInstance(typeof(AnonymousSerializableFormatter<>).MakeGenericType(type), - new[] { stringByteKeysField.ToArray(), serializeCustomFormatters.ToArray(), deserializeCustomFormatters.ToArray(), serializeDelegate, deserializeDelegate }); - return resultFormatter; - } - - static void BuildConstructor(Type type, ObjectSerializationInfo info, ConstructorInfo method, FieldBuilder stringByteKeysField, ILGenerator il) - { - il.EmitLoadThis(); - il.Emit(OpCodes.Call, objectCtor); - - var writeCount = info.Members.Count(x => x.IsReadable); - il.EmitLoadThis(); - il.EmitLdc_I4(writeCount); - il.Emit(OpCodes.Newarr, typeof(byte[])); - - var i = 0; - foreach (var item in info.Members.Where(x => x.IsReadable)) - { - il.Emit(OpCodes.Dup); - il.EmitLdc_I4(i); - il.Emit(OpCodes.Ldstr, item.StringKey); - il.EmitCall(MessagePackBinaryTypeInfo.GetEncodedStringBytes); - il.Emit(OpCodes.Stelem_Ref); - i++; - } - - il.Emit(OpCodes.Stfld, stringByteKeysField); - } - - static Dictionary BuildCustomFormatterField(TypeBuilder builder, ObjectSerializationInfo info, ILGenerator il) - { - Dictionary dict = new Dictionary(); - foreach (var item in info.Members.Where(x => x.IsReadable || x.IsWritable)) - { - var attr = item.GetMessagePackFormatterAttribtue(); - if (attr != null) - { - var f = builder.DefineField(item.Name + "_formatter", attr.FormatterType, FieldAttributes.Private | FieldAttributes.InitOnly); - - var bindingFlags = (int)(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); - - var attrVar = il.DeclareLocal(typeof(MessagePackFormatterAttribute)); - - il.Emit(OpCodes.Ldtoken, info.Type); - il.EmitCall(EmitInfo.GetTypeFromHandle); - il.Emit(OpCodes.Ldstr, item.Name); - il.EmitLdc_I4(bindingFlags); - if (item.IsProperty) - { - il.EmitCall(EmitInfo.TypeGetProperty); - } - else - { - il.EmitCall(EmitInfo.TypeGetField); - } - - il.EmitTrue(); - il.EmitCall(EmitInfo.GetCustomAttributeMessagePackFormatterAttribute); - il.EmitStloc(attrVar); - - il.EmitLoadThis(); - - il.EmitLdloc(attrVar); - il.EmitCall(EmitInfo.MessagePackFormatterAttr.FormatterType); - il.EmitLdloc(attrVar); - il.EmitCall(EmitInfo.MessagePackFormatterAttr.Arguments); - il.EmitCall(EmitInfo.ActivatorCreateInstance); - - il.Emit(OpCodes.Castclass, attr.FormatterType); - il.Emit(OpCodes.Stfld, f); - - dict.Add(item, f); - } - } - - return dict; - } - - // int Serialize([arg:1]ref byte[] bytes, [arg:2]int offset, [arg:3]T value, [arg:4]IFormatterResolver formatterResolver); - static void BuildSerialize(Type type, ObjectSerializationInfo info, ILGenerator il, Action emitStringByteKeys, Func tryEmitLoadCustomFormatter, int firstArgIndex) - { - var argBytes = new ArgumentField(il, firstArgIndex); - var argOffset = new ArgumentField(il, firstArgIndex + 1); - var argValue = new ArgumentField(il, firstArgIndex + 2, type); - var argResolver = new ArgumentField(il, firstArgIndex + 3); - - // if(value == null) return WriteNil - if (type.GetTypeInfo().IsClass) - { - var elseBody = il.DefineLabel(); - - argValue.EmitLoad(); - il.Emit(OpCodes.Brtrue_S, elseBody); - argBytes.EmitLoad(); - argOffset.EmitLoad(); - il.EmitCall(MessagePackBinaryTypeInfo.WriteNil); - il.Emit(OpCodes.Ret); - - il.MarkLabel(elseBody); - } - - // IMessagePackSerializationCallbackReceiver.OnBeforeSerialize() - if (type.GetTypeInfo().ImplementedInterfaces.Any(x => x == typeof(IMessagePackSerializationCallbackReceiver))) - { - // call directly - var runtimeMethods = type.GetRuntimeMethods().Where(x => x.Name == "OnBeforeSerialize").ToArray(); - if (runtimeMethods.Length == 1) - { - argValue.EmitLoad(); - il.Emit(OpCodes.Call, runtimeMethods[0]); // don't use EmitCall helper(must use 'Call') - } - else - { - argValue.EmitLdarg(); // force ldarg - il.EmitBoxOrDoNothing(type); - il.EmitCall(onBeforeSerialize); - } - } - - // var startOffset = offset; - var startOffsetLocal = il.DeclareLocal(typeof(int)); // [loc:0] - argOffset.EmitLoad(); - il.EmitStloc(startOffsetLocal); - - if (info.IsIntKey) - { - // use Array - var maxKey = info.Members.Where(x => x.IsReadable).Select(x => x.IntKey).DefaultIfEmpty(-1).Max(); - var intKeyMap = info.Members.Where(x => x.IsReadable).ToDictionary(x => x.IntKey); - - EmitOffsetPlusEqual(il, null, () => - { - var len = maxKey + 1; - il.EmitLdc_I4(len); - if (len <= MessagePackRange.MaxFixArrayCount) - { - il.EmitCall(MessagePackBinaryTypeInfo.WriteFixedArrayHeaderUnsafe); - } - else - { - il.EmitCall(MessagePackBinaryTypeInfo.WriteArrayHeader); - } - }, argBytes, argOffset); - - for (int i = 0; i <= maxKey; i++) - { - ObjectSerializationInfo.EmittableMember member; - if (intKeyMap.TryGetValue(i, out member)) - { - // offset += serialzie - EmitSerializeValue(il, type.GetTypeInfo(), member, i, tryEmitLoadCustomFormatter, argBytes, argOffset, argValue, argResolver); - } - else - { - // Write Nil as Blanc - EmitOffsetPlusEqual(il, null, () => - { - il.EmitCall(MessagePackBinaryTypeInfo.WriteNil); - }, argBytes, argOffset); - } - } - } - else - { - // use Map - var writeCount = info.Members.Count(x => x.IsReadable); - - EmitOffsetPlusEqual(il, null, () => - { - il.EmitLdc_I4(writeCount); - if (writeCount <= MessagePackRange.MaxFixMapCount) - { - il.EmitCall(MessagePackBinaryTypeInfo.WriteFixedMapHeaderUnsafe); - } - else - { - il.EmitCall(MessagePackBinaryTypeInfo.WriteMapHeader); - } - }, argBytes, argOffset); - - var index = 0; - foreach (var item in info.Members.Where(x => x.IsReadable)) - { - // offset += writekey - EmitOffsetPlusEqual(il, null, () => - { - emitStringByteKeys(); - il.EmitLdc_I4(index); - il.Emit(OpCodes.Ldelem_Ref); - - // Optimize, WriteRaw(Unity, large) or UnsafeMemory32/64.WriteRawX -#if NETSTANDARD - var valueLen = MessagePackBinary.GetEncodedStringBytes(item.StringKey).Length; - if (valueLen <= MessagePackRange.MaxFixStringLength) - { - if (UnsafeMemory.Is32Bit) - { - il.EmitCall(typeof(UnsafeMemory32).GetRuntimeMethod("WriteRaw" + valueLen, new[] { refByte, typeof(int), typeof(byte[]) })); - } - else - { - il.EmitCall(typeof(UnsafeMemory64).GetRuntimeMethod("WriteRaw" + valueLen, new[] { refByte, typeof(int), typeof(byte[]) })); - } - } - else -#endif - { - il.EmitCall(MessagePackBinaryTypeInfo.WriteRaw); - } - }, argBytes, argOffset); - - // offset += serialzie - EmitSerializeValue(il, type.GetTypeInfo(), item, index, tryEmitLoadCustomFormatter, argBytes, argOffset, argValue, argResolver); - index++; - } - } - - // return startOffset- offset; - argOffset.EmitLoad(); - il.EmitLdloc(startOffsetLocal); - il.Emit(OpCodes.Sub); - il.Emit(OpCodes.Ret); - } - - // offset += ***(ref bytes, offset.... - static void EmitOffsetPlusEqual(ILGenerator il, Action loadEmit, Action emit, ArgumentField argBytes, ArgumentField argOffset) - { - argOffset.EmitLoad(); - - if (loadEmit != null) loadEmit(); - - argBytes.EmitLoad(); - argOffset.EmitLoad(); - - emit(); - - il.Emit(OpCodes.Add); - argOffset.EmitStore(); - } - - static void EmitSerializeValue(ILGenerator il, TypeInfo type, ObjectSerializationInfo.EmittableMember member, int index, Func tryEmitLoadCustomFormatter, ArgumentField argBytes, ArgumentField argOffset, ArgumentField argValue, ArgumentField argResolver) - { - var t = member.Type; - var emitter = tryEmitLoadCustomFormatter(index, member); - if (emitter != null) - { - EmitOffsetPlusEqual(il, () => - { - emitter(); - }, () => - { - argValue.EmitLoad(); - member.EmitLoadValue(il); - argResolver.EmitLoad(); - il.EmitCall(typeof(IMessagePackFormatter<>).MakeGenericType(t).GetRuntimeMethod("Serialize", new[] { refByte, typeof(int), t, typeof(IFormatterResolver) })); - }, argBytes, argOffset); - } - else if (IsOptimizeTargetType(t)) - { - EmitOffsetPlusEqual(il, null, () => - { - argValue.EmitLoad(); - member.EmitLoadValue(il); - if (t == typeof(byte[])) - { - il.EmitCall(MessagePackBinaryTypeInfo.WriteBytes); - } - else - { - il.EmitCall(MessagePackBinaryTypeInfo.TypeInfo.GetDeclaredMethods("Write" + t.Name).OrderByDescending(x => x.GetParameters().Length).First()); - } - }, argBytes, argOffset); - } - else - { - EmitOffsetPlusEqual(il, () => - { - argResolver.EmitLoad(); - il.Emit(OpCodes.Call, getFormatterWithVerify.MakeGenericMethod(t)); - }, () => - { - argValue.EmitLoad(); - member.EmitLoadValue(il); - argResolver.EmitLoad(); - il.EmitCall(getSerialize(t)); - }, argBytes, argOffset); - } - } - - // T Deserialize([arg:1]byte[] bytes, [arg:2]int offset, [arg:3]IFormatterResolver formatterResolver, [arg:4]out int readSize); - static void BuildDeserialize(Type type, ObjectSerializationInfo info, ILGenerator il, Func tryEmitLoadCustomFormatter, int firstArgIndex) - { - var argBytes = new ArgumentField(il, firstArgIndex); - var argOffset = new ArgumentField(il, firstArgIndex + 1); - var argResolver = new ArgumentField(il, firstArgIndex + 2); - var argReadSize = new ArgumentField(il, firstArgIndex + 3); - - // if(MessagePackBinary.IsNil) readSize = 1, return null; - var falseLabel = il.DefineLabel(); - argBytes.EmitLoad(); - argOffset.EmitLoad(); - il.EmitCall(MessagePackBinaryTypeInfo.IsNil); - il.Emit(OpCodes.Brfalse_S, falseLabel); - if (type.GetTypeInfo().IsClass) - { - argReadSize.EmitLoad(); - il.EmitLdc_I4(1); - il.Emit(OpCodes.Stind_I4); - il.Emit(OpCodes.Ldnull); - il.Emit(OpCodes.Ret); - } - else - { - il.Emit(OpCodes.Ldstr, "typecode is null, struct not supported"); - il.Emit(OpCodes.Newobj, invalidOperationExceptionConstructor); - il.Emit(OpCodes.Throw); - } - - // var startOffset = offset; - il.MarkLabel(falseLabel); - var startOffsetLocal = il.DeclareLocal(typeof(int)); // [loc:0] - argOffset.EmitLoad(); - il.EmitStloc(startOffsetLocal); - - // var length = ReadMapHeader - var length = il.DeclareLocal(typeof(int)); // [loc:1] - argBytes.EmitLoad(); - argOffset.EmitLoad(); - argReadSize.EmitLoad(); - - if (info.IsIntKey) - { - il.EmitCall(MessagePackBinaryTypeInfo.ReadArrayHeader); - } - else - { - il.EmitCall(MessagePackBinaryTypeInfo.ReadMapHeader); - } - il.EmitStloc(length); - EmitOffsetPlusReadSize(il, argOffset, argReadSize); - - // make local fields - Label? gotoDefault = null; - DeserializeInfo[] infoList; - if (info.IsIntKey) - { - var maxKey = info.Members.Select(x => x.IntKey).DefaultIfEmpty(-1).Max(); - var len = maxKey + 1; - var intKeyMap = info.Members.ToDictionary(x => x.IntKey); - - infoList = Enumerable.Range(0, len) - .Select(x => - { - ObjectSerializationInfo.EmittableMember member; - if (intKeyMap.TryGetValue(x, out member)) - { - return new DeserializeInfo - { - MemberInfo = member, - LocalField = il.DeclareLocal(member.Type), - SwitchLabel = il.DefineLabel() - }; - } - else - { - // return null MemberInfo, should filter null - if (gotoDefault == null) - { - gotoDefault = il.DefineLabel(); - } - return new DeserializeInfo - { - MemberInfo = null, - LocalField = null, - SwitchLabel = gotoDefault.Value, - }; - } - }) - .ToArray(); - } - else - { - infoList = info.Members - .Select(item => new DeserializeInfo - { - MemberInfo = item, - LocalField = il.DeclareLocal(item.Type), - // SwitchLabel = il.DefineLabel() - }) - .ToArray(); - } - - // Read Loop(for var i = 0; i< length; i++) - if (info.IsStringKey) - { - var automata = new AutomataDictionary(); - for (int i = 0; i < info.Members.Length; i++) - { - automata.Add(info.Members[i].StringKey, i); - } - - var buffer = il.DeclareLocal(typeof(byte).MakeByRefType(), true); - var keyArraySegment = il.DeclareLocal(typeof(ArraySegment)); - var longKey = il.DeclareLocal(typeof(ulong)); - var p = il.DeclareLocal(typeof(byte*)); - var rest = il.DeclareLocal(typeof(int)); - - // fixed (byte* buffer = &bytes[0]) { - argBytes.EmitLoad(); - il.EmitLdc_I4(0); - il.Emit(OpCodes.Ldelema, typeof(byte)); - il.EmitStloc(buffer); - - // for (int i = 0; i < len; i++) - il.EmitIncrementFor(length, forILocal => - { - var readNext = il.DefineLabel(); - var loopEnd = il.DefineLabel(); - - argBytes.EmitLoad(); - argOffset.EmitLoad(); - argReadSize.EmitLoad(); - il.EmitCall(MessagePackBinaryTypeInfo.ReadStringSegment); - il.EmitStloc(keyArraySegment); - EmitOffsetPlusReadSize(il, argOffset, argReadSize); - - // p = buffer + arraySegment.Offset - il.EmitLdloc(buffer); - il.Emit(OpCodes.Conv_I); - il.EmitLdloca(keyArraySegment); - il.EmitCall(typeof(ArraySegment).GetRuntimeProperty("Offset").GetGetMethod()); - il.Emit(OpCodes.Add); - il.EmitStloc(p); - - // rest = arraySegment.Count - il.EmitLdloca(keyArraySegment); - il.EmitCall(typeof(ArraySegment).GetRuntimeProperty("Count").GetGetMethod()); - il.EmitStloc(rest); - - // if(rest == 0) goto End - il.EmitLdloc(rest); - il.Emit(OpCodes.Brfalse, readNext); - - // gen automata name lookup - automata.EmitMatch(il, p, rest, longKey, x => - { - var i = x.Value; - if (infoList[i].MemberInfo != null) - { - EmitDeserializeValue(il, infoList[i], i, tryEmitLoadCustomFormatter, argBytes, argOffset, argResolver, argReadSize); - il.Emit(OpCodes.Br, loopEnd); - } - else - { - il.Emit(OpCodes.Br, readNext); - } - }, () => - { - il.Emit(OpCodes.Br, readNext); - }); - - il.MarkLabel(readNext); - argReadSize.EmitLoad(); - argBytes.EmitLoad(); - argOffset.EmitLoad(); - il.EmitCall(MessagePackBinaryTypeInfo.ReadNextBlock); - il.Emit(OpCodes.Stind_I4); - - il.MarkLabel(loopEnd); - EmitOffsetPlusReadSize(il, argOffset, argReadSize); - }); - - // end fixed - il.Emit(OpCodes.Ldc_I4_0); - il.Emit(OpCodes.Conv_U); - il.EmitStloc(buffer); - } - else - { - var key = il.DeclareLocal(typeof(int)); - var switchDefault = il.DefineLabel(); - - il.EmitIncrementFor(length, forILocal => - { - var loopEnd = il.DefineLabel(); - - il.EmitLdloc(forILocal); - il.EmitStloc(key); - - // switch... local = Deserialize - il.EmitLdloc(key); - - il.Emit(OpCodes.Switch, infoList.Select(x => x.SwitchLabel).ToArray()); - - il.MarkLabel(switchDefault); - // default, only read. readSize = MessagePackBinary.ReadNextBlock(bytes, offset); - argReadSize.EmitLoad(); - argBytes.EmitLoad(); - argOffset.EmitLoad(); - il.EmitCall(MessagePackBinaryTypeInfo.ReadNextBlock); - il.Emit(OpCodes.Stind_I4); - il.Emit(OpCodes.Br, loopEnd); - - if (gotoDefault != null) - { - il.MarkLabel(gotoDefault.Value); - il.Emit(OpCodes.Br, switchDefault); - } - - var i = 0; - foreach (var item in infoList) - { - if (item.MemberInfo != null) - { - il.MarkLabel(item.SwitchLabel); - EmitDeserializeValue(il, item, i++, tryEmitLoadCustomFormatter, argBytes, argOffset, argResolver, argReadSize); - il.Emit(OpCodes.Br, loopEnd); - } - } - - // offset += readSize - il.MarkLabel(loopEnd); - EmitOffsetPlusReadSize(il, argOffset, argReadSize); - }); - } - - // finish readSize: readSize = offset - startOffset; - argReadSize.EmitLoad(); - argOffset.EmitLoad(); - il.EmitLdloc(startOffsetLocal); - il.Emit(OpCodes.Sub); - il.Emit(OpCodes.Stind_I4); - - // create result object - var structLocal = EmitNewObject(il, type, info, infoList); - - // IMessagePackSerializationCallbackReceiver.OnAfterDeserialize() - if (type.GetTypeInfo().ImplementedInterfaces.Any(x => x == typeof(IMessagePackSerializationCallbackReceiver))) - { - // call directly - var runtimeMethods = type.GetRuntimeMethods().Where(x => x.Name == "OnAfterDeserialize").ToArray(); - if (runtimeMethods.Length == 1) - { - if (info.IsClass) - { - il.Emit(OpCodes.Dup); - } - else - { - il.EmitLdloca(structLocal); - } - - il.Emit(OpCodes.Call, runtimeMethods[0]); // don't use EmitCall helper(must use 'Call') - } - else - { - if (info.IsStruct) - { - il.EmitLdloc(structLocal); - il.Emit(OpCodes.Box, type); - } - else - { - il.Emit(OpCodes.Dup); - } - il.EmitCall(onAfterDeserialize); - } - } - - if (info.IsStruct) - { - il.Emit(OpCodes.Ldloc, structLocal); - } - - - il.Emit(OpCodes.Ret); - } - - static void EmitOffsetPlusReadSize(ILGenerator il, ArgumentField argOffset, ArgumentField argReadSize) - { - argOffset.EmitLoad(); - argReadSize.EmitLoad(); - il.Emit(OpCodes.Ldind_I4); - il.Emit(OpCodes.Add); - argOffset.EmitStore(); - } - - static void EmitDeserializeValue(ILGenerator il, DeserializeInfo info, int index, Func tryEmitLoadCustomFormatter, ArgumentField argBytes, ArgumentField argOffset, ArgumentField argResolver, ArgumentField argReadSize) - { - var member = info.MemberInfo; - var t = member.Type; - var emitter = tryEmitLoadCustomFormatter(index, member); - if (emitter != null) - { - emitter(); - argBytes.EmitLoad(); - argOffset.EmitLoad(); - argResolver.EmitLoad(); - argReadSize.EmitLoad(); - il.EmitCall(typeof(IMessagePackFormatter<>).MakeGenericType(t).GetRuntimeMethod("Deserialize", new[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), refInt })); - } - else if (IsOptimizeTargetType(t)) - { - il.EmitLdarg(1); - il.EmitLdarg(2); - il.EmitLdarg(4); - if (t == typeof(byte[])) - { - il.EmitCall(MessagePackBinaryTypeInfo.ReadBytes); - } - else - { - il.EmitCall(MessagePackBinaryTypeInfo.TypeInfo.GetDeclaredMethods("Read" + t.Name).OrderByDescending(x => x.GetParameters().Length).First()); - } - } - else - { - argResolver.EmitLoad(); - il.EmitCall(getFormatterWithVerify.MakeGenericMethod(t)); - argBytes.EmitLoad(); - argOffset.EmitLoad(); - argResolver.EmitLoad(); - argReadSize.EmitLoad(); - il.EmitCall(getDeserialize(t)); - } - - il.EmitStloc(info.LocalField); - } - - static LocalBuilder EmitNewObject(ILGenerator il, Type type, ObjectSerializationInfo info, DeserializeInfo[] members) - { - if (info.IsClass) - { - foreach (var item in info.ConstructorParameters) - { - var local = members.First(x => x.MemberInfo == item); - il.EmitLdloc(local.LocalField); - } - il.Emit(OpCodes.Newobj, info.BestmatchConstructor); - - foreach (var item in members.Where(x => x.MemberInfo != null && x.MemberInfo.IsWritable)) - { - il.Emit(OpCodes.Dup); - il.EmitLdloc(item.LocalField); - item.MemberInfo.EmitStoreValue(il); - } - - return null; - } - else - { - var result = il.DeclareLocal(type); - if (info.BestmatchConstructor == null) - { - il.Emit(OpCodes.Ldloca, result); - il.Emit(OpCodes.Initobj, type); - } - else - { - foreach (var item in info.ConstructorParameters) - { - var local = members.First(x => x.MemberInfo == item); - il.EmitLdloc(local.LocalField); - } - il.Emit(OpCodes.Newobj, info.BestmatchConstructor); - il.Emit(OpCodes.Stloc, result); - } - - foreach (var item in members.Where(x => x.MemberInfo != null && x.MemberInfo.IsWritable)) - { - il.EmitLdloca(result); - il.EmitLdloc(item.LocalField); - item.MemberInfo.EmitStoreValue(il); - } - - return result; // struct returns local result field - } - } - - static bool IsOptimizeTargetType(Type type) - { - if (type == typeof(Int16) - || type == typeof(Int32) - || type == typeof(Int64) - || type == typeof(UInt16) - || type == typeof(UInt32) - || type == typeof(UInt64) - || type == typeof(Single) - || type == typeof(Double) - || type == typeof(bool) - || type == typeof(byte) - || type == typeof(sbyte) - || type == typeof(char) - // not includes DateTime and String and Binary. - //|| type == typeof(DateTime) - //|| type == typeof(string) - //|| type == typeof(byte[]) - ) - { - return true; - } - return false; - } - - // EmitInfos... - - static readonly Type refByte = typeof(byte[]).MakeByRefType(); - static readonly Type refInt = typeof(int).MakeByRefType(); - static readonly MethodInfo getFormatterWithVerify = typeof(FormatterResolverExtensions).GetRuntimeMethods().First(x => x.Name == "GetFormatterWithVerify"); - static readonly Func getSerialize = t => typeof(IMessagePackFormatter<>).MakeGenericType(t).GetRuntimeMethod("Serialize", new[] { refByte, typeof(int), t, typeof(IFormatterResolver) }); - static readonly Func getDeserialize = t => typeof(IMessagePackFormatter<>).MakeGenericType(t).GetRuntimeMethod("Deserialize", new[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), refInt }); - // static readonly ConstructorInfo dictionaryConstructor = typeof(ByteArrayStringHashTable).GetTypeInfo().DeclaredConstructors.First(x => { var p = x.GetParameters(); return p.Length == 1 && p[0].ParameterType == typeof(int); }); - // static readonly MethodInfo dictionaryAdd = typeof(ByteArrayStringHashTable).GetRuntimeMethod("Add", new[] { typeof(string), typeof(int) }); - // static readonly MethodInfo dictionaryTryGetValue = typeof(ByteArrayStringHashTable).GetRuntimeMethod("TryGetValue", new[] { typeof(ArraySegment), refInt }); - static readonly ConstructorInfo invalidOperationExceptionConstructor = typeof(System.InvalidOperationException).GetTypeInfo().DeclaredConstructors.First(x => { var p = x.GetParameters(); return p.Length == 1 && p[0].ParameterType == typeof(string); }); - - static readonly MethodInfo onBeforeSerialize = typeof(IMessagePackSerializationCallbackReceiver).GetRuntimeMethod("OnBeforeSerialize", Type.EmptyTypes); - static readonly MethodInfo onAfterDeserialize = typeof(IMessagePackSerializationCallbackReceiver).GetRuntimeMethod("OnAfterDeserialize", Type.EmptyTypes); - - static readonly ConstructorInfo objectCtor = typeof(object).GetTypeInfo().DeclaredConstructors.First(x => x.GetParameters().Length == 0); - - internal static class MessagePackBinaryTypeInfo - { - public static TypeInfo TypeInfo = typeof(MessagePackBinary).GetTypeInfo(); - - public static readonly MethodInfo GetEncodedStringBytes = typeof(MessagePackBinary).GetRuntimeMethod("GetEncodedStringBytes", new[] { typeof(string) }); - public static MethodInfo WriteFixedMapHeaderUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WriteFixedMapHeaderUnsafe", new[] { refByte, -typeof(int), typeof(int) }); - public static MethodInfo WriteFixedArrayHeaderUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WriteFixedArrayHeaderUnsafe", new[] { refByte, typeof(int), typeof(int) }); - public static MethodInfo WriteMapHeader = typeof(MessagePackBinary).GetRuntimeMethod("WriteMapHeader", new[] { refByte, typeof(int), typeof(int) }); - public static MethodInfo WriteArrayHeader = typeof(MessagePackBinary).GetRuntimeMethod("WriteArrayHeader", new[] { refByte, typeof(int), typeof(int) }); - public static MethodInfo WritePositiveFixedIntUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WritePositiveFixedIntUnsafe", new[] { refByte, typeof(int), typeof(int) }); - public static MethodInfo WriteInt32 = typeof(MessagePackBinary).GetRuntimeMethod("WriteInt32", new[] { refByte, typeof(int), typeof(int) }); - public static MethodInfo WriteBytes = typeof(MessagePackBinary).GetRuntimeMethod("WriteBytes", new[] { refByte, typeof(int), typeof(byte[]) }); - public static MethodInfo WriteNil = typeof(MessagePackBinary).GetRuntimeMethod("WriteNil", new[] { refByte, typeof(int) }); - public static MethodInfo ReadBytes = typeof(MessagePackBinary).GetRuntimeMethod("ReadBytes", new[] { typeof(byte[]), typeof(int), refInt }); - public static MethodInfo ReadInt32 = typeof(MessagePackBinary).GetRuntimeMethod("ReadInt32", new[] { typeof(byte[]), typeof(int), refInt }); - public static MethodInfo ReadString = typeof(MessagePackBinary).GetRuntimeMethod("ReadString", new[] { typeof(byte[]), typeof(int), refInt }); - public static MethodInfo ReadStringSegment = typeof(MessagePackBinary).GetRuntimeMethod("ReadStringSegment", new[] { typeof(byte[]), typeof(int), refInt }); - public static MethodInfo IsNil = typeof(MessagePackBinary).GetRuntimeMethod("IsNil", new[] { typeof(byte[]), typeof(int) }); - public static MethodInfo ReadNextBlock = typeof(MessagePackBinary).GetRuntimeMethod("ReadNextBlock", new[] { typeof(byte[]), typeof(int) }); - public static MethodInfo WriteStringUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WriteStringUnsafe", new[] { refByte, typeof(int), typeof(string), typeof(int) }); - public static MethodInfo WriteStringBytes = typeof(MessagePackBinary).GetRuntimeMethod("WriteStringBytes", new[] { refByte, typeof(int), typeof(byte[]) }); - public static MethodInfo WriteRaw = typeof(MessagePackBinary).GetRuntimeMethod("WriteRaw", new[] { refByte, typeof(int), typeof(byte[]) }); - - public static MethodInfo ReadArrayHeader = typeof(MessagePackBinary).GetRuntimeMethod("ReadArrayHeader", new[] { typeof(byte[]), typeof(int), refInt }); - public static MethodInfo ReadMapHeader = typeof(MessagePackBinary).GetRuntimeMethod("ReadMapHeader", new[] { typeof(byte[]), typeof(int), refInt }); - - static MessagePackBinaryTypeInfo() - { - } - } - - internal static class EmitInfo - { - public static readonly MethodInfo GetTypeFromHandle = ExpressionUtility.GetMethodInfo(() => Type.GetTypeFromHandle(default(RuntimeTypeHandle))); - public static readonly MethodInfo TypeGetProperty = ExpressionUtility.GetMethodInfo((Type t) => t.GetTypeInfo().GetProperty(default(string), default(BindingFlags))); - public static readonly MethodInfo TypeGetField = ExpressionUtility.GetMethodInfo((Type t) => t.GetTypeInfo().GetField(default(string), default(BindingFlags))); - public static readonly MethodInfo GetCustomAttributeMessagePackFormatterAttribute = ExpressionUtility.GetMethodInfo(() => CustomAttributeExtensions.GetCustomAttribute(default(MemberInfo), default(bool))); - public static readonly MethodInfo ActivatorCreateInstance = ExpressionUtility.GetMethodInfo(() => Activator.CreateInstance(default(Type), default(object[]))); - - internal static class MessagePackFormatterAttr - { - internal static readonly MethodInfo FormatterType = ExpressionUtility.GetPropertyInfo((MessagePackFormatterAttribute attr) => attr.FormatterType).GetGetMethod(); - internal static readonly MethodInfo Arguments = ExpressionUtility.GetPropertyInfo((MessagePackFormatterAttribute attr) => attr.Arguments).GetGetMethod(); - } - } - - class DeserializeInfo - { - public ObjectSerializationInfo.EmittableMember MemberInfo { get; set; } - public LocalBuilder LocalField { get; set; } - public Label SwitchLabel { get; set; } - } - } - - internal delegate int AnonymousSerializeFunc(byte[][] stringByteKeysField, object[] customFormatters, ref byte[] bytes, int offset, T value, IFormatterResolver resolver); - internal delegate T AnonymousDeserializeFunc(object[] customFormatters, byte[] bytes, int offset, IFormatterResolver resolver, out int readSize); - - internal class AnonymousSerializableFormatter : IMessagePackFormatter - { - readonly byte[][] stringByteKeysField; - readonly object[] serializeCustomFormatters; - readonly object[] deserializeCustomFormatters; - readonly AnonymousSerializeFunc serialize; - readonly AnonymousDeserializeFunc deserialize; - - public AnonymousSerializableFormatter(byte[][] stringByteKeysField, object[] serializeCustomFormatters, object[] deserializeCustomFormatters, AnonymousSerializeFunc serialize, AnonymousDeserializeFunc deserialize) - { - this.stringByteKeysField = stringByteKeysField; - this.serializeCustomFormatters = serializeCustomFormatters; - this.deserializeCustomFormatters = deserializeCustomFormatters; - this.serialize = serialize; - this.deserialize = deserialize; - } - - public int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver) - { - if (serialize == null) throw new InvalidOperationException(this.GetType().Name + " does not support Serialize."); - return serialize(stringByteKeysField, serializeCustomFormatters, ref bytes, offset, value, formatterResolver); - } - - public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (deserialize == null) throw new InvalidOperationException(this.GetType().Name + " does not support Deserialize."); - return deserialize(deserializeCustomFormatters, bytes, offset, formatterResolver, out readSize); - } - } - - internal class ObjectSerializationInfo - { - public Type Type { get; set; } - public bool IsIntKey { get; set; } - public bool IsStringKey { get { return !IsIntKey; } } - public bool IsClass { get; set; } - public bool IsStruct { get { return !IsClass; } } - public ConstructorInfo BestmatchConstructor { get; set; } - public EmittableMember[] ConstructorParameters { get; set; } - public EmittableMember[] Members { get; set; } - - ObjectSerializationInfo() - { - - } - - public static ObjectSerializationInfo CreateOrNull(Type type, bool forceStringKey, bool contractless, bool allowPrivate) - { - var ti = type.GetTypeInfo(); - var isClass = ti.IsClass || ti.IsInterface || ti.IsAbstract; - - var contractAttr = ti.GetCustomAttribute(); - var dataContractAttr = ti.GetCustomAttribute(); - if (contractAttr == null && dataContractAttr == null && !forceStringKey && !contractless) - { - return null; - } - - var isIntKey = true; - var intMembers = new Dictionary(); - var stringMembers = new Dictionary(); - - if (forceStringKey || contractless || (contractAttr != null && contractAttr.KeyAsPropertyName)) - { - // All public members are serialize target except [Ignore] member. - isIntKey = !(forceStringKey || (contractAttr != null && contractAttr.KeyAsPropertyName)); - - var hiddenIntKey = 0; - foreach (var item in type.GetRuntimeProperties()) - { - if (item.GetCustomAttribute(true) != null) continue; - if (item.GetCustomAttribute(true) != null) continue; - if (item.IsIndexer()) continue; - - var getMethod = item.GetGetMethod(true); - var setMethod = item.GetSetMethod(true); - - var member = new EmittableMember - { - PropertyInfo = item, - IsReadable = (getMethod != null) && (allowPrivate || getMethod.IsPublic) && !getMethod.IsStatic, - IsWritable = (setMethod != null) && (allowPrivate || setMethod.IsPublic) && !setMethod.IsStatic, - StringKey = item.Name - }; - if (!member.IsReadable && !member.IsWritable) continue; - member.IntKey = hiddenIntKey++; - if (isIntKey) - { - intMembers.Add(member.IntKey, member); - } - else - { - stringMembers.Add(member.StringKey, member); - } - } - foreach (var item in type.GetRuntimeFields()) - { - if (item.GetCustomAttribute(true) != null) continue; - if (item.GetCustomAttribute(true) != null) continue; - if (item.GetCustomAttribute(true) != null) continue; - if (item.IsStatic) continue; - - var member = new EmittableMember - { - FieldInfo = item, - IsReadable = allowPrivate || item.IsPublic, - IsWritable = allowPrivate || (item.IsPublic && !item.IsInitOnly), - StringKey = item.Name - }; - if (!member.IsReadable && !member.IsWritable) continue; - member.IntKey = hiddenIntKey++; - if (isIntKey) - { - intMembers.Add(member.IntKey, member); - } - else - { - stringMembers.Add(member.StringKey, member); - } - } - } - else - { - // Public members with KeyAttribute except [Ignore] member. - var searchFirst = true; - var hiddenIntKey = 0; - - foreach (var item in type.GetRuntimeProperties()) - { - if (item.GetCustomAttribute(true) != null) continue; - if (item.GetCustomAttribute(true) != null) continue; - if (item.IsIndexer()) continue; - - var getMethod = item.GetGetMethod(true); - var setMethod = item.GetSetMethod(true); - - var member = new EmittableMember - { - PropertyInfo = item, - IsReadable = (getMethod != null) && (allowPrivate || getMethod.IsPublic) && !getMethod.IsStatic, - IsWritable = (setMethod != null) && (allowPrivate || setMethod.IsPublic) && !setMethod.IsStatic, - }; - if (!member.IsReadable && !member.IsWritable) continue; - - KeyAttribute key; - if (contractAttr != null) - { - // MessagePackObjectAttribute - key = item.GetCustomAttribute(true); - if (key == null) - { - throw new MessagePackDynamicObjectResolverException("all public members must mark KeyAttribute or IgnoreMemberAttribute." + " type: " + type.FullName + " member:" + item.Name); - } - - if (key.IntKey == null && key.StringKey == null) throw new MessagePackDynamicObjectResolverException("both IntKey and StringKey are null." + " type: " + type.FullName + " member:" + item.Name); - } - else - { - // DataContractAttribute - var pseudokey = item.GetCustomAttribute(true); - if (pseudokey == null) - { - throw new MessagePackDynamicObjectResolverException("all public members must mark DataMemberAttribute or IgnoreMemberAttribute." + " type: " + type.FullName + " member:" + item.Name); - } - - // use Order first - if (pseudokey.Order != -1) - { - key = new KeyAttribute(pseudokey.Order); - } - else if (pseudokey.Name != null) - { - key = new KeyAttribute(pseudokey.Name); - } - else - { - key = new KeyAttribute(item.Name); // use property name - } - } - - if (searchFirst) - { - searchFirst = false; - isIntKey = key.IntKey != null; - } - else - { - if ((isIntKey && key.IntKey == null) || (!isIntKey && key.StringKey == null)) - { - throw new MessagePackDynamicObjectResolverException("all members key type must be same." + " type: " + type.FullName + " member:" + item.Name); - } - } - - if (isIntKey) - { - member.IntKey = key.IntKey.Value; - if (intMembers.ContainsKey(member.IntKey)) throw new MessagePackDynamicObjectResolverException("key is duplicated, all members key must be unique." + " type: " + type.FullName + " member:" + item.Name); - - intMembers.Add(member.IntKey, member); - } - else - { - member.StringKey = key.StringKey; - if (stringMembers.ContainsKey(member.StringKey)) throw new MessagePackDynamicObjectResolverException("key is duplicated, all members key must be unique." + " type: " + type.FullName + " member:" + item.Name); - - member.IntKey = hiddenIntKey++; - stringMembers.Add(member.StringKey, member); - } - } - - foreach (var item in type.GetRuntimeFields()) - { - if (item.GetCustomAttribute(true) != null) continue; - if (item.GetCustomAttribute(true) != null) continue; - if (item.GetCustomAttribute(true) != null) continue; - if (item.IsStatic) continue; - - var member = new EmittableMember - { - FieldInfo = item, - IsReadable = allowPrivate || item.IsPublic, - IsWritable = allowPrivate || (item.IsPublic && !item.IsInitOnly), - }; - if (!member.IsReadable && !member.IsWritable) continue; - - KeyAttribute key; - if (contractAttr != null) - { - // MessagePackObjectAttribute - key = item.GetCustomAttribute(true); - if (key == null) - { - throw new MessagePackDynamicObjectResolverException("all public members must mark KeyAttribute or IgnoreMemberAttribute." + " type: " + type.FullName + " member:" + item.Name); - } - - if (key.IntKey == null && key.StringKey == null) throw new MessagePackDynamicObjectResolverException("both IntKey and StringKey are null." + " type: " + type.FullName + " member:" + item.Name); - } - else - { - // DataContractAttribute - var pseudokey = item.GetCustomAttribute(true); - if (pseudokey == null) - { - throw new MessagePackDynamicObjectResolverException("all public members must mark DataMemberAttribute or IgnoreMemberAttribute." + " type: " + type.FullName + " member:" + item.Name); - } - - // use Order first - if (pseudokey.Order != -1) - { - key = new KeyAttribute(pseudokey.Order); - } - else if (pseudokey.Name != null) - { - key = new KeyAttribute(pseudokey.Name); - } - else - { - key = new KeyAttribute(item.Name); // use property name - } - } - - if (searchFirst) - { - searchFirst = false; - isIntKey = key.IntKey != null; - } - else - { - if ((isIntKey && key.IntKey == null) || (!isIntKey && key.StringKey == null)) - { - throw new MessagePackDynamicObjectResolverException("all members key type must be same." + " type: " + type.FullName + " member:" + item.Name); - } - } - - if (isIntKey) - { - member.IntKey = key.IntKey.Value; - if (intMembers.ContainsKey(member.IntKey)) throw new MessagePackDynamicObjectResolverException("key is duplicated, all members key must be unique." + " type: " + type.FullName + " member:" + item.Name); - - intMembers.Add(member.IntKey, member); - } - else - { - member.StringKey = key.StringKey; - if (stringMembers.ContainsKey(member.StringKey)) throw new MessagePackDynamicObjectResolverException("key is duplicated, all members key must be unique." + " type: " + type.FullName + " member:" + item.Name); - - member.IntKey = hiddenIntKey++; - stringMembers.Add(member.StringKey, member); - } - } - } - - // GetConstructor - IEnumerator ctorEnumerator = null; - var ctor = ti.DeclaredConstructors.Where(x => x.IsPublic).SingleOrDefault(x => x.GetCustomAttribute(false) != null); - if (ctor == null) - { - ctorEnumerator = - ti.DeclaredConstructors.Where(x => x.IsPublic).OrderBy(x => x.GetParameters().Length) - .GetEnumerator(); - - if (ctorEnumerator.MoveNext()) - { - ctor = ctorEnumerator.Current; - } - } - // struct allows null ctor - if (ctor == null && isClass) throw new MessagePackDynamicObjectResolverException("can't find public constructor. type:" + type.FullName); - - var constructorParameters = new List(); - if (ctor != null) - { - var constructorLookupDictionary = stringMembers.ToLookup(x => x.Key, x => x, StringComparer.OrdinalIgnoreCase); - do - { - constructorParameters.Clear(); - var ctorParamIndex = 0; - foreach (var item in ctor.GetParameters()) - { - EmittableMember paramMember; - if (isIntKey) - { - if (intMembers.TryGetValue(ctorParamIndex, out paramMember)) - { - if (item.ParameterType == paramMember.Type && paramMember.IsReadable) - { - constructorParameters.Add(paramMember); - } - else - { - if (ctorEnumerator != null) - { - ctor = null; - continue; - } - else - { - throw new MessagePackDynamicObjectResolverException("can't find matched constructor parameter, parameterType mismatch. type:" + type.FullName + " parameterIndex:" + ctorParamIndex + " paramterType:" + item.ParameterType.Name); - } - } - } - else - { - if (ctorEnumerator != null) - { - ctor = null; - continue; - } - else - { - throw new MessagePackDynamicObjectResolverException("can't find matched constructor parameter, index not found. type:" + type.FullName + " parameterIndex:" + ctorParamIndex); - } - } - } - else - { - var hasKey = constructorLookupDictionary[item.Name]; - var len = hasKey.Count(); - if (len != 0) - { - if (len != 1) - { - if (ctorEnumerator != null) - { - ctor = null; - continue; - } - else - { - throw new MessagePackDynamicObjectResolverException("duplicate matched constructor parameter name:" + type.FullName + " parameterName:" + item.Name + " paramterType:" + item.ParameterType.Name); - } - } - - paramMember = hasKey.First().Value; - if (item.ParameterType == paramMember.Type && paramMember.IsReadable) - { - constructorParameters.Add(paramMember); - } - else - { - if (ctorEnumerator != null) - { - ctor = null; - continue; - } - else - { - throw new MessagePackDynamicObjectResolverException("can't find matched constructor parameter, parameterType mismatch. type:" + type.FullName + " parameterName:" + item.Name + " paramterType:" + item.ParameterType.Name); - } - } - } - else - { - if (ctorEnumerator != null) - { - ctor = null; - continue; - } - else - { - throw new MessagePackDynamicObjectResolverException("can't find matched constructor parameter, index not found. type:" + type.FullName + " parameterName:" + item.Name); - } - } - } - ctorParamIndex++; - } - } while (TryGetNextConstructor(ctorEnumerator, ref ctor)); - - if (ctor == null) - { - throw new MessagePackDynamicObjectResolverException("can't find matched constructor. type:" + type.FullName); - } - } - - EmittableMember[] members; - if (isIntKey) - { - members = intMembers.Values.OrderBy(x => x.IntKey).ToArray(); - } - else - { - members = stringMembers.Values - .OrderBy(x => - { - var attr = x.GetDataMemberAttribute(); - if (attr == null) return int.MaxValue; - return attr.Order; - }) - .ToArray(); - } - - return new ObjectSerializationInfo - { - Type = type, - IsClass = isClass, - BestmatchConstructor = ctor, - ConstructorParameters = constructorParameters.ToArray(), - IsIntKey = isIntKey, - Members = members, - }; - } - - static bool TryGetNextConstructor(IEnumerator ctorEnumerator, ref ConstructorInfo ctor) - { - if (ctorEnumerator == null || ctor != null) - { - return false; - } - - if (ctorEnumerator.MoveNext()) - { - ctor = ctorEnumerator.Current; - return true; - } - else - { - ctor = null; - return false; - } - } - - public class EmittableMember - { - public bool IsProperty { get { return PropertyInfo != null; } } - public bool IsField { get { return FieldInfo != null; } } - public bool IsWritable { get; set; } - public bool IsReadable { get; set; } - public int IntKey { get; set; } - public string StringKey { get; set; } - public Type Type { get { return IsField ? FieldInfo.FieldType : PropertyInfo.PropertyType; } } - public FieldInfo FieldInfo { get; set; } - public PropertyInfo PropertyInfo { get; set; } - - public string Name - { - get - { - return IsProperty ? PropertyInfo.Name : FieldInfo.Name; - } - } - - public bool IsValueType - { - get - { - var mi = IsProperty ? (MemberInfo)PropertyInfo : FieldInfo; - return mi.DeclaringType.GetTypeInfo().IsValueType; - } - } - - public MessagePackFormatterAttribute GetMessagePackFormatterAttribtue() - { - if (IsProperty) - { - return (MessagePackFormatterAttribute)PropertyInfo.GetCustomAttribute(true); - } - else - { - return (MessagePackFormatterAttribute)FieldInfo.GetCustomAttribute(true); - } - } - - public DataMemberAttribute GetDataMemberAttribute() - { - if (IsProperty) - { - return (DataMemberAttribute)PropertyInfo.GetCustomAttribute(true); - } - else - { - return (DataMemberAttribute)FieldInfo.GetCustomAttribute(true); - } - } - - public void EmitLoadValue(ILGenerator il) - { - if (IsProperty) - { - il.EmitCall(PropertyInfo.GetGetMethod(true)); - } - else - { - il.Emit(OpCodes.Ldfld, FieldInfo); - } - } - - public void EmitStoreValue(ILGenerator il) - { - if (IsProperty) - { - il.EmitCall(PropertyInfo.GetSetMethod(true)); - } - else - { - il.Emit(OpCodes.Stfld, FieldInfo); - } - } - - //public object ReflectionLoadValue(object value) - //{ - // if (IsProperty) - // { - // return PropertyInfo.GetValue(value); - // } - // else - // { - // return FieldInfo.GetValue(value); - // } - //} - - //public void ReflectionStoreValue(object obj, object value) - //{ - // if (IsProperty) - // { - // PropertyInfo.SetValue(obj, value); - // } - // else - // { - // FieldInfo.SetValue(obj, value); - // } - //} - } - } - - internal class MessagePackDynamicObjectResolverException : Exception - { - public MessagePackDynamicObjectResolverException(string message) - : base(message) - { - - } - } -} - -#endif +#if !UNITY_WSA +#if !NET_STANDARD_2_0 + +using System; +using System.Linq; +using MessagePack.Formatters; +using MessagePack.Internal; +using System.Reflection; +using System.Reflection.Emit; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using System.Runtime.Serialization; +using System.Text; +using System.Threading; + +namespace MessagePack.Resolvers +{ + /// + /// ObjectResolver by dynamic code generation. + /// + public sealed class DynamicObjectResolver : IFormatterResolver + { + public static readonly DynamicObjectResolver Instance = new DynamicObjectResolver(); + + const string ModuleName = "MessagePack.Resolvers.DynamicObjectResolver"; + + internal static readonly DynamicAssembly assembly; + + DynamicObjectResolver() + { + + } + + static DynamicObjectResolver() + { + assembly = new DynamicAssembly(ModuleName); + } + +#if NET_35 + public AssemblyBuilder Save() + { + return assembly.Save(); + } +#endif + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + var ti = typeof(T).GetTypeInfo(); + + if (ti.IsInterface) + { + return; + } + + if (ti.IsNullable()) + { + ti = ti.GenericTypeArguments[0].GetTypeInfo(); + + var innerFormatter = DynamicObjectResolver.Instance.GetFormatterDynamic(ti.AsType()); + if (innerFormatter == null) + { + return; + } + formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); + return; + } + + if (ti.IsAnonymous()) + { + formatter = (IMessagePackFormatter)DynamicObjectTypeBuilder.BuildFormatterToDynamicMethod(typeof(T), true, true, false); + return; + } + + var formatterTypeInfo = DynamicObjectTypeBuilder.BuildType(assembly, typeof(T), false, false); + if (formatterTypeInfo == null) return; + + formatter = (IMessagePackFormatter)Activator.CreateInstance(formatterTypeInfo.AsType()); + } + } + } + + /// + /// ObjectResolver by dynamic code generation, allow private member. + /// + public sealed class DynamicObjectResolverAllowPrivate : IFormatterResolver + { + public static readonly DynamicObjectResolverAllowPrivate Instance = new DynamicObjectResolverAllowPrivate(); + + DynamicObjectResolverAllowPrivate() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + var ti = typeof(T).GetTypeInfo(); + + if (ti.IsInterface) + { + return; + } + + if (ti.IsNullable()) + { + ti = ti.GenericTypeArguments[0].GetTypeInfo(); + + var innerFormatter = DynamicObjectResolverAllowPrivate.Instance.GetFormatterDynamic(ti.AsType()); + if (innerFormatter == null) + { + return; + } + formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); + return; + } + + if (ti.IsAnonymous()) + { + formatter = (IMessagePackFormatter)DynamicObjectTypeBuilder.BuildFormatterToDynamicMethod(typeof(T), true, true, false); + } + else + { + formatter = (IMessagePackFormatter)DynamicObjectTypeBuilder.BuildFormatterToDynamicMethod(typeof(T), false, false, true); + } + } + } + } + + /// + /// ObjectResolver by dynamic code generation, no needs MessagePackObject attribute and serialized key as string. + /// + public sealed class DynamicContractlessObjectResolver : IFormatterResolver + { + public static readonly DynamicContractlessObjectResolver Instance = new DynamicContractlessObjectResolver(); + + const string ModuleName = "MessagePack.Resolvers.DynamicContractlessObjectResolver"; + + static readonly DynamicAssembly assembly; + + DynamicContractlessObjectResolver() + { + + } + + static DynamicContractlessObjectResolver() + { + assembly = new DynamicAssembly(ModuleName); + } + +#if NET_35 + public AssemblyBuilder Save() + { + return assembly.Save(); + } +#endif + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + if (typeof(T) == typeof(object)) + { + return; + } + + var ti = typeof(T).GetTypeInfo(); + + if (ti.IsInterface) + { + return; + } + + if (ti.IsNullable()) + { + ti = ti.GenericTypeArguments[0].GetTypeInfo(); + + var innerFormatter = DynamicContractlessObjectResolver.Instance.GetFormatterDynamic(ti.AsType()); + if (innerFormatter == null) + { + return; + } + formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); + return; + } + + if (ti.IsAnonymous()) + { + formatter = (IMessagePackFormatter)DynamicObjectTypeBuilder.BuildFormatterToDynamicMethod(typeof(T), true, true, false); + return; + } + + var formatterTypeInfo = DynamicObjectTypeBuilder.BuildType(assembly, typeof(T), true, true); + if (formatterTypeInfo == null) return; + + formatter = (IMessagePackFormatter)Activator.CreateInstance(formatterTypeInfo.AsType()); + } + } + } + + /// + /// ObjectResolver by dynamic code generation, no needs MessagePackObject attribute and serialized key as string, allow private member. + /// + public sealed class DynamicContractlessObjectResolverAllowPrivate : IFormatterResolver + { + public static readonly DynamicContractlessObjectResolverAllowPrivate Instance = new DynamicContractlessObjectResolverAllowPrivate(); + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + if (typeof(T) == typeof(object)) + { + return; + } + + var ti = typeof(T).GetTypeInfo(); + + if (ti.IsInterface) + { + return; + } + + if (ti.IsNullable()) + { + ti = ti.GenericTypeArguments[0].GetTypeInfo(); + + var innerFormatter = DynamicContractlessObjectResolverAllowPrivate.Instance.GetFormatterDynamic(ti.AsType()); + if (innerFormatter == null) + { + return; + } + formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); + return; + } + + if (ti.IsAnonymous()) + { + formatter = (IMessagePackFormatter)DynamicObjectTypeBuilder.BuildFormatterToDynamicMethod(typeof(T), true, true, false); + } + else + { + formatter = (IMessagePackFormatter)DynamicObjectTypeBuilder.BuildFormatterToDynamicMethod(typeof(T), true, true, true); + } + } + } + } +} + +namespace MessagePack.Internal +{ + internal static class DynamicObjectTypeBuilder + { +#if NETSTANDARD + static readonly Regex SubtractFullNameRegex = new Regex(@", Version=\d+.\d+.\d+.\d+, Culture=\w+, PublicKeyToken=\w+", RegexOptions.Compiled); +#else + static readonly Regex SubtractFullNameRegex = new Regex(@", Version=\d+.\d+.\d+.\d+, Culture=\w+, PublicKeyToken=\w+"); +#endif + + static int nameSequence = 0; + + static HashSet ignoreTypes = new HashSet + { + {typeof(object)}, + {typeof(short)}, + {typeof(int)}, + {typeof(long)}, + {typeof(ushort)}, + {typeof(uint)}, + {typeof(ulong)}, + {typeof(float)}, + {typeof(double)}, + {typeof(bool)}, + {typeof(byte)}, + {typeof(sbyte)}, + {typeof(decimal)}, + {typeof(char)}, + {typeof(string)}, + {typeof(System.Guid)}, + {typeof(System.TimeSpan)}, + {typeof(System.DateTime)}, + {typeof(System.DateTimeOffset)}, + {typeof(MessagePack.Nil)}, + }; + + public static TypeInfo BuildType(DynamicAssembly assembly, Type type, bool forceStringKey, bool contractless) + { + if (ignoreTypes.Contains(type)) return null; + + var serializationInfo = MessagePack.Internal.ObjectSerializationInfo.CreateOrNull(type, forceStringKey, contractless, false); + if (serializationInfo == null) return null; + + var formatterType = typeof(IMessagePackFormatter<>).MakeGenericType(type); + var typeBuilder = assembly.DefineType("MessagePack.Formatters." + SubtractFullNameRegex.Replace(type.FullName, "").Replace(".", "_") + "Formatter" + Interlocked.Increment(ref nameSequence), TypeAttributes.Public | TypeAttributes.Sealed, null, new[] { formatterType }); + + FieldBuilder stringByteKeysField = null; + Dictionary customFormatterLookup = null; + + // string key needs string->int mapper for deserialize switch statement + if (serializationInfo.IsStringKey) + { + var method = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Type.EmptyTypes); + stringByteKeysField = typeBuilder.DefineField("stringByteKeys", typeof(byte[][]), FieldAttributes.Private | FieldAttributes.InitOnly); + + var il = method.GetILGenerator(); + BuildConstructor(type, serializationInfo, method, stringByteKeysField, il); + customFormatterLookup = BuildCustomFormatterField(typeBuilder, serializationInfo, il); + il.Emit(OpCodes.Ret); + } + else + { + var method = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Type.EmptyTypes); + var il = method.GetILGenerator(); + il.EmitLoadThis(); + il.Emit(OpCodes.Call, objectCtor); + customFormatterLookup = BuildCustomFormatterField(typeBuilder, serializationInfo, il); + il.Emit(OpCodes.Ret); + } + + { + var method = typeBuilder.DefineMethod("Serialize", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, + typeof(int), + new Type[] { typeof(byte[]).MakeByRefType(), typeof(int), type, typeof(IFormatterResolver) }); + + var il = method.GetILGenerator(); + BuildSerialize(type, serializationInfo, il, () => + { + il.EmitLoadThis(); + il.EmitLdfld(stringByteKeysField); + }, (index, member) => + { + FieldInfo fi; + if (!customFormatterLookup.TryGetValue(member, out fi)) return null; + + return () => + { + il.EmitLoadThis(); + il.EmitLdfld(fi); + }; + }, 1); + } + + { + var method = typeBuilder.DefineMethod("Deserialize", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, + type, + new Type[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), typeof(int).MakeByRefType() }); + + var il = method.GetILGenerator(); + BuildDeserialize(type, serializationInfo, il, (index, member) => + { + FieldInfo fi; + if (!customFormatterLookup.TryGetValue(member, out fi)) return null; + + return () => + { + il.EmitLoadThis(); + il.EmitLdfld(fi); + }; + }, 1); // firstArgIndex:0 is this. + } + + return typeBuilder.CreateTypeInfo(); + } + + public static object BuildFormatterToDynamicMethod(Type type, bool forceStringKey, bool contractless, bool allowPrivate) + { + var serializationInfo = ObjectSerializationInfo.CreateOrNull(type, forceStringKey, contractless, allowPrivate); + if (serializationInfo == null) return null; + + // internal delegate int AnonymousSerializeFunc(byte[][] stringByteKeysField, object[] customFormatters, ref byte[] bytes, int offset, T value, IFormatterResolver resolver); + // internal delegate T AnonymousDeserializeFunc(object[] customFormatters, byte[] bytes, int offset, IFormatterResolver resolver, out int readSize); + var serialize = new DynamicMethod("Serialize", typeof(int), new[] { typeof(byte[][]), typeof(object[]), typeof(byte[]).MakeByRefType(), typeof(int), type, typeof(IFormatterResolver) }, type, true); + DynamicMethod deserialize = null; + + List stringByteKeysField = new List(); + List serializeCustomFormatters = new List(); + List deserializeCustomFormatters = new List(); + + if (serializationInfo.IsStringKey) + { + var i = 0; + foreach (var item in serializationInfo.Members.Where(x => x.IsReadable)) + { + stringByteKeysField.Add(MessagePackBinary.GetEncodedStringBytes(item.StringKey)); + i++; + } + } + foreach (var item in serializationInfo.Members.Where(x => x.IsReadable)) + { + var attr = item.GetMessagePackFormatterAttribtue(); + if (attr != null) + { + var formatter = Activator.CreateInstance(attr.FormatterType, attr.Arguments); + serializeCustomFormatters.Add(formatter); + } + else + { + serializeCustomFormatters.Add(null); + } + } + foreach (var item in serializationInfo.Members) // not only for writable because for use ctor. + { + var attr = item.GetMessagePackFormatterAttribtue(); + if (attr != null) + { + var formatter = Activator.CreateInstance(attr.FormatterType, attr.Arguments); + deserializeCustomFormatters.Add(formatter); + } + else + { + deserializeCustomFormatters.Add(null); + } + } + + { + var il = serialize.GetILGenerator(); + BuildSerialize(type, serializationInfo, il, () => + { + il.EmitLdarg(0); + }, (index, member) => + { + if (serializeCustomFormatters.Count == 0) return null; + if (serializeCustomFormatters[index] == null) return null; + + return () => + { + il.EmitLdarg(1); // read object[] + il.EmitLdc_I4(index); + il.Emit(OpCodes.Ldelem_Ref); // object + il.Emit(OpCodes.Castclass, serializeCustomFormatters[index].GetType()); + }; + }, 2); // 0, 1 is parameter. + } + + if (serializationInfo.IsStruct || serializationInfo.BestmatchConstructor != null) + { + deserialize = new DynamicMethod("Deserialize", type, new[] { typeof(object[]), typeof(byte[]), typeof(int), typeof(IFormatterResolver), typeof(int).MakeByRefType() }, type, true); + + var il = deserialize.GetILGenerator(); + BuildDeserialize(type, serializationInfo, il, (index, member) => + { + if (deserializeCustomFormatters.Count == 0) return null; + if (deserializeCustomFormatters[index] == null) return null; + + return () => + { + il.EmitLdarg(0); // read object[] + il.EmitLdc_I4(index); + il.Emit(OpCodes.Ldelem_Ref); // object + il.Emit(OpCodes.Castclass, deserializeCustomFormatters[index].GetType()); + }; + }, 1); + } + + object serializeDelegate = serialize.CreateDelegate(typeof(AnonymousSerializeFunc<>).MakeGenericType(type)); + object deserializeDelegate = (deserialize == null) + ? (object)null + : (object)deserialize.CreateDelegate(typeof(AnonymousDeserializeFunc<>).MakeGenericType(type)); + var resultFormatter = Activator.CreateInstance(typeof(AnonymousSerializableFormatter<>).MakeGenericType(type), + new[] { stringByteKeysField.ToArray(), serializeCustomFormatters.ToArray(), deserializeCustomFormatters.ToArray(), serializeDelegate, deserializeDelegate }); + return resultFormatter; + } + + static void BuildConstructor(Type type, ObjectSerializationInfo info, ConstructorInfo method, FieldBuilder stringByteKeysField, ILGenerator il) + { + il.EmitLoadThis(); + il.Emit(OpCodes.Call, objectCtor); + + var writeCount = info.Members.Count(x => x.IsReadable); + il.EmitLoadThis(); + il.EmitLdc_I4(writeCount); + il.Emit(OpCodes.Newarr, typeof(byte[])); + + var i = 0; + foreach (var item in info.Members.Where(x => x.IsReadable)) + { + il.Emit(OpCodes.Dup); + il.EmitLdc_I4(i); + il.Emit(OpCodes.Ldstr, item.StringKey); + il.EmitCall(MessagePackBinaryTypeInfo.GetEncodedStringBytes); + il.Emit(OpCodes.Stelem_Ref); + i++; + } + + il.Emit(OpCodes.Stfld, stringByteKeysField); + } + + static Dictionary BuildCustomFormatterField(TypeBuilder builder, ObjectSerializationInfo info, ILGenerator il) + { + Dictionary dict = new Dictionary(); + foreach (var item in info.Members.Where(x => x.IsReadable || x.IsWritable)) + { + var attr = item.GetMessagePackFormatterAttribtue(); + if (attr != null) + { + var f = builder.DefineField(item.Name + "_formatter", attr.FormatterType, FieldAttributes.Private | FieldAttributes.InitOnly); + + var bindingFlags = (int)(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + + var attrVar = il.DeclareLocal(typeof(MessagePackFormatterAttribute)); + + il.Emit(OpCodes.Ldtoken, info.Type); + il.EmitCall(EmitInfo.GetTypeFromHandle); + il.Emit(OpCodes.Ldstr, item.Name); + il.EmitLdc_I4(bindingFlags); + if (item.IsProperty) + { + il.EmitCall(EmitInfo.TypeGetProperty); + } + else + { + il.EmitCall(EmitInfo.TypeGetField); + } + + il.EmitTrue(); + il.EmitCall(EmitInfo.GetCustomAttributeMessagePackFormatterAttribute); + il.EmitStloc(attrVar); + + il.EmitLoadThis(); + + il.EmitLdloc(attrVar); + il.EmitCall(EmitInfo.MessagePackFormatterAttr.FormatterType); + il.EmitLdloc(attrVar); + il.EmitCall(EmitInfo.MessagePackFormatterAttr.Arguments); + il.EmitCall(EmitInfo.ActivatorCreateInstance); + + il.Emit(OpCodes.Castclass, attr.FormatterType); + il.Emit(OpCodes.Stfld, f); + + dict.Add(item, f); + } + } + + return dict; + } + + // int Serialize([arg:1]ref byte[] bytes, [arg:2]int offset, [arg:3]T value, [arg:4]IFormatterResolver formatterResolver); + static void BuildSerialize(Type type, ObjectSerializationInfo info, ILGenerator il, Action emitStringByteKeys, Func tryEmitLoadCustomFormatter, int firstArgIndex) + { + var argBytes = new ArgumentField(il, firstArgIndex); + var argOffset = new ArgumentField(il, firstArgIndex + 1); + var argValue = new ArgumentField(il, firstArgIndex + 2, type); + var argResolver = new ArgumentField(il, firstArgIndex + 3); + + // if(value == null) return WriteNil + if (type.GetTypeInfo().IsClass) + { + var elseBody = il.DefineLabel(); + + argValue.EmitLoad(); + il.Emit(OpCodes.Brtrue_S, elseBody); + argBytes.EmitLoad(); + argOffset.EmitLoad(); + il.EmitCall(MessagePackBinaryTypeInfo.WriteNil); + il.Emit(OpCodes.Ret); + + il.MarkLabel(elseBody); + } + + // IMessagePackSerializationCallbackReceiver.OnBeforeSerialize() + if (type.GetTypeInfo().ImplementedInterfaces.Any(x => x == typeof(IMessagePackSerializationCallbackReceiver))) + { + // call directly + var runtimeMethods = type.GetRuntimeMethods().Where(x => x.Name == "OnBeforeSerialize").ToArray(); + if (runtimeMethods.Length == 1) + { + argValue.EmitLoad(); + il.Emit(OpCodes.Call, runtimeMethods[0]); // don't use EmitCall helper(must use 'Call') + } + else + { + argValue.EmitLdarg(); // force ldarg + il.EmitBoxOrDoNothing(type); + il.EmitCall(onBeforeSerialize); + } + } + + // var startOffset = offset; + var startOffsetLocal = il.DeclareLocal(typeof(int)); // [loc:0] + argOffset.EmitLoad(); + il.EmitStloc(startOffsetLocal); + + if (info.IsIntKey) + { + // use Array + var maxKey = info.Members.Where(x => x.IsReadable).Select(x => x.IntKey).DefaultIfEmpty(-1).Max(); + var intKeyMap = info.Members.Where(x => x.IsReadable).ToDictionary(x => x.IntKey); + + EmitOffsetPlusEqual(il, null, () => + { + var len = maxKey + 1; + il.EmitLdc_I4(len); + if (len <= MessagePackRange.MaxFixArrayCount) + { + il.EmitCall(MessagePackBinaryTypeInfo.WriteFixedArrayHeaderUnsafe); + } + else + { + il.EmitCall(MessagePackBinaryTypeInfo.WriteArrayHeader); + } + }, argBytes, argOffset); + + for (int i = 0; i <= maxKey; i++) + { + ObjectSerializationInfo.EmittableMember member; + if (intKeyMap.TryGetValue(i, out member)) + { + // offset += serialzie + EmitSerializeValue(il, type.GetTypeInfo(), member, i, tryEmitLoadCustomFormatter, argBytes, argOffset, argValue, argResolver); + } + else + { + // Write Nil as Blanc + EmitOffsetPlusEqual(il, null, () => + { + il.EmitCall(MessagePackBinaryTypeInfo.WriteNil); + }, argBytes, argOffset); + } + } + } + else + { + // use Map + var writeCount = info.Members.Count(x => x.IsReadable); + + EmitOffsetPlusEqual(il, null, () => + { + il.EmitLdc_I4(writeCount); + if (writeCount <= MessagePackRange.MaxFixMapCount) + { + il.EmitCall(MessagePackBinaryTypeInfo.WriteFixedMapHeaderUnsafe); + } + else + { + il.EmitCall(MessagePackBinaryTypeInfo.WriteMapHeader); + } + }, argBytes, argOffset); + + var index = 0; + foreach (var item in info.Members.Where(x => x.IsReadable)) + { + // offset += writekey + EmitOffsetPlusEqual(il, null, () => + { + emitStringByteKeys(); + il.EmitLdc_I4(index); + il.Emit(OpCodes.Ldelem_Ref); + + // Optimize, WriteRaw(Unity, large) or UnsafeMemory32/64.WriteRawX +#if NETSTANDARD + var valueLen = MessagePackBinary.GetEncodedStringBytes(item.StringKey).Length; + if (valueLen <= MessagePackRange.MaxFixStringLength) + { + if (UnsafeMemory.Is32Bit) + { + il.EmitCall(typeof(UnsafeMemory32).GetRuntimeMethod("WriteRaw" + valueLen, new[] { refByte, typeof(int), typeof(byte[]) })); + } + else + { + il.EmitCall(typeof(UnsafeMemory64).GetRuntimeMethod("WriteRaw" + valueLen, new[] { refByte, typeof(int), typeof(byte[]) })); + } + } + else +#endif + { + il.EmitCall(MessagePackBinaryTypeInfo.WriteRaw); + } + }, argBytes, argOffset); + + // offset += serialzie + EmitSerializeValue(il, type.GetTypeInfo(), item, index, tryEmitLoadCustomFormatter, argBytes, argOffset, argValue, argResolver); + index++; + } + } + + // return startOffset- offset; + argOffset.EmitLoad(); + il.EmitLdloc(startOffsetLocal); + il.Emit(OpCodes.Sub); + il.Emit(OpCodes.Ret); + } + + // offset += ***(ref bytes, offset.... + static void EmitOffsetPlusEqual(ILGenerator il, Action loadEmit, Action emit, ArgumentField argBytes, ArgumentField argOffset) + { + argOffset.EmitLoad(); + + if (loadEmit != null) loadEmit(); + + argBytes.EmitLoad(); + argOffset.EmitLoad(); + + emit(); + + il.Emit(OpCodes.Add); + argOffset.EmitStore(); + } + + static void EmitSerializeValue(ILGenerator il, TypeInfo type, ObjectSerializationInfo.EmittableMember member, int index, Func tryEmitLoadCustomFormatter, ArgumentField argBytes, ArgumentField argOffset, ArgumentField argValue, ArgumentField argResolver) + { + var t = member.Type; + var emitter = tryEmitLoadCustomFormatter(index, member); + if (emitter != null) + { + EmitOffsetPlusEqual(il, () => + { + emitter(); + }, () => + { + argValue.EmitLoad(); + member.EmitLoadValue(il); + argResolver.EmitLoad(); + il.EmitCall(typeof(IMessagePackFormatter<>).MakeGenericType(t).GetRuntimeMethod("Serialize", new[] { refByte, typeof(int), t, typeof(IFormatterResolver) })); + }, argBytes, argOffset); + } + else if (IsOptimizeTargetType(t)) + { + EmitOffsetPlusEqual(il, null, () => + { + argValue.EmitLoad(); + member.EmitLoadValue(il); + if (t == typeof(byte[])) + { + il.EmitCall(MessagePackBinaryTypeInfo.WriteBytes); + } + else + { + il.EmitCall(MessagePackBinaryTypeInfo.TypeInfo.GetDeclaredMethods("Write" + t.Name).OrderByDescending(x => x.GetParameters().Length).First()); + } + }, argBytes, argOffset); + } + else + { + EmitOffsetPlusEqual(il, () => + { + argResolver.EmitLoad(); + il.Emit(OpCodes.Call, getFormatterWithVerify.MakeGenericMethod(t)); + }, () => + { + argValue.EmitLoad(); + member.EmitLoadValue(il); + argResolver.EmitLoad(); + il.EmitCall(getSerialize(t)); + }, argBytes, argOffset); + } + } + + // T Deserialize([arg:1]byte[] bytes, [arg:2]int offset, [arg:3]IFormatterResolver formatterResolver, [arg:4]out int readSize); + static void BuildDeserialize(Type type, ObjectSerializationInfo info, ILGenerator il, Func tryEmitLoadCustomFormatter, int firstArgIndex) + { + var argBytes = new ArgumentField(il, firstArgIndex); + var argOffset = new ArgumentField(il, firstArgIndex + 1); + var argResolver = new ArgumentField(il, firstArgIndex + 2); + var argReadSize = new ArgumentField(il, firstArgIndex + 3); + + // if(MessagePackBinary.IsNil) readSize = 1, return null; + var falseLabel = il.DefineLabel(); + argBytes.EmitLoad(); + argOffset.EmitLoad(); + il.EmitCall(MessagePackBinaryTypeInfo.IsNil); + il.Emit(OpCodes.Brfalse_S, falseLabel); + if (type.GetTypeInfo().IsClass) + { + argReadSize.EmitLoad(); + il.EmitLdc_I4(1); + il.Emit(OpCodes.Stind_I4); + il.Emit(OpCodes.Ldnull); + il.Emit(OpCodes.Ret); + } + else + { + il.Emit(OpCodes.Ldstr, "typecode is null, struct not supported"); + il.Emit(OpCodes.Newobj, invalidOperationExceptionConstructor); + il.Emit(OpCodes.Throw); + } + + // var startOffset = offset; + il.MarkLabel(falseLabel); + var startOffsetLocal = il.DeclareLocal(typeof(int)); // [loc:0] + argOffset.EmitLoad(); + il.EmitStloc(startOffsetLocal); + + // var length = ReadMapHeader + var length = il.DeclareLocal(typeof(int)); // [loc:1] + argBytes.EmitLoad(); + argOffset.EmitLoad(); + argReadSize.EmitLoad(); + + if (info.IsIntKey) + { + il.EmitCall(MessagePackBinaryTypeInfo.ReadArrayHeader); + } + else + { + il.EmitCall(MessagePackBinaryTypeInfo.ReadMapHeader); + } + il.EmitStloc(length); + EmitOffsetPlusReadSize(il, argOffset, argReadSize); + + // make local fields + Label? gotoDefault = null; + DeserializeInfo[] infoList; + if (info.IsIntKey) + { + var maxKey = info.Members.Select(x => x.IntKey).DefaultIfEmpty(-1).Max(); + var len = maxKey + 1; + var intKeyMap = info.Members.ToDictionary(x => x.IntKey); + + infoList = Enumerable.Range(0, len) + .Select(x => + { + ObjectSerializationInfo.EmittableMember member; + if (intKeyMap.TryGetValue(x, out member)) + { + return new DeserializeInfo + { + MemberInfo = member, + LocalField = il.DeclareLocal(member.Type), + SwitchLabel = il.DefineLabel() + }; + } + else + { + // return null MemberInfo, should filter null + if (gotoDefault == null) + { + gotoDefault = il.DefineLabel(); + } + return new DeserializeInfo + { + MemberInfo = null, + LocalField = null, + SwitchLabel = gotoDefault.Value, + }; + } + }) + .ToArray(); + } + else + { + infoList = info.Members + .Select(item => new DeserializeInfo + { + MemberInfo = item, + LocalField = il.DeclareLocal(item.Type), + // SwitchLabel = il.DefineLabel() + }) + .ToArray(); + } + + // Read Loop(for var i = 0; i< length; i++) + if (info.IsStringKey) + { + var automata = new AutomataDictionary(); + for (int i = 0; i < info.Members.Length; i++) + { + automata.Add(info.Members[i].StringKey, i); + } + + var buffer = il.DeclareLocal(typeof(byte).MakeByRefType(), true); + var keyArraySegment = il.DeclareLocal(typeof(ArraySegment)); + var longKey = il.DeclareLocal(typeof(ulong)); + var p = il.DeclareLocal(typeof(byte*)); + var rest = il.DeclareLocal(typeof(int)); + + // fixed (byte* buffer = &bytes[0]) { + argBytes.EmitLoad(); + il.EmitLdc_I4(0); + il.Emit(OpCodes.Ldelema, typeof(byte)); + il.EmitStloc(buffer); + + // for (int i = 0; i < len; i++) + il.EmitIncrementFor(length, forILocal => + { + var readNext = il.DefineLabel(); + var loopEnd = il.DefineLabel(); + + argBytes.EmitLoad(); + argOffset.EmitLoad(); + argReadSize.EmitLoad(); + il.EmitCall(MessagePackBinaryTypeInfo.ReadStringSegment); + il.EmitStloc(keyArraySegment); + EmitOffsetPlusReadSize(il, argOffset, argReadSize); + + // p = buffer + arraySegment.Offset + il.EmitLdloc(buffer); + il.Emit(OpCodes.Conv_I); + il.EmitLdloca(keyArraySegment); + il.EmitCall(typeof(ArraySegment).GetRuntimeProperty("Offset").GetGetMethod()); + il.Emit(OpCodes.Add); + il.EmitStloc(p); + + // rest = arraySegment.Count + il.EmitLdloca(keyArraySegment); + il.EmitCall(typeof(ArraySegment).GetRuntimeProperty("Count").GetGetMethod()); + il.EmitStloc(rest); + + // if(rest == 0) goto End + il.EmitLdloc(rest); + il.Emit(OpCodes.Brfalse, readNext); + + // gen automata name lookup + automata.EmitMatch(il, p, rest, longKey, x => + { + var i = x.Value; + if (infoList[i].MemberInfo != null) + { + EmitDeserializeValue(il, infoList[i], i, tryEmitLoadCustomFormatter, argBytes, argOffset, argResolver, argReadSize); + il.Emit(OpCodes.Br, loopEnd); + } + else + { + il.Emit(OpCodes.Br, readNext); + } + }, () => + { + il.Emit(OpCodes.Br, readNext); + }); + + il.MarkLabel(readNext); + argReadSize.EmitLoad(); + argBytes.EmitLoad(); + argOffset.EmitLoad(); + il.EmitCall(MessagePackBinaryTypeInfo.ReadNextBlock); + il.Emit(OpCodes.Stind_I4); + + il.MarkLabel(loopEnd); + EmitOffsetPlusReadSize(il, argOffset, argReadSize); + }); + + // end fixed + il.Emit(OpCodes.Ldc_I4_0); + il.Emit(OpCodes.Conv_U); + il.EmitStloc(buffer); + } + else + { + var key = il.DeclareLocal(typeof(int)); + var switchDefault = il.DefineLabel(); + + il.EmitIncrementFor(length, forILocal => + { + var loopEnd = il.DefineLabel(); + + il.EmitLdloc(forILocal); + il.EmitStloc(key); + + // switch... local = Deserialize + il.EmitLdloc(key); + + il.Emit(OpCodes.Switch, infoList.Select(x => x.SwitchLabel).ToArray()); + + il.MarkLabel(switchDefault); + // default, only read. readSize = MessagePackBinary.ReadNextBlock(bytes, offset); + argReadSize.EmitLoad(); + argBytes.EmitLoad(); + argOffset.EmitLoad(); + il.EmitCall(MessagePackBinaryTypeInfo.ReadNextBlock); + il.Emit(OpCodes.Stind_I4); + il.Emit(OpCodes.Br, loopEnd); + + if (gotoDefault != null) + { + il.MarkLabel(gotoDefault.Value); + il.Emit(OpCodes.Br, switchDefault); + } + + var i = 0; + foreach (var item in infoList) + { + if (item.MemberInfo != null) + { + il.MarkLabel(item.SwitchLabel); + EmitDeserializeValue(il, item, i++, tryEmitLoadCustomFormatter, argBytes, argOffset, argResolver, argReadSize); + il.Emit(OpCodes.Br, loopEnd); + } + } + + // offset += readSize + il.MarkLabel(loopEnd); + EmitOffsetPlusReadSize(il, argOffset, argReadSize); + }); + } + + // finish readSize: readSize = offset - startOffset; + argReadSize.EmitLoad(); + argOffset.EmitLoad(); + il.EmitLdloc(startOffsetLocal); + il.Emit(OpCodes.Sub); + il.Emit(OpCodes.Stind_I4); + + // create result object + var structLocal = EmitNewObject(il, type, info, infoList); + + // IMessagePackSerializationCallbackReceiver.OnAfterDeserialize() + if (type.GetTypeInfo().ImplementedInterfaces.Any(x => x == typeof(IMessagePackSerializationCallbackReceiver))) + { + // call directly + var runtimeMethods = type.GetRuntimeMethods().Where(x => x.Name == "OnAfterDeserialize").ToArray(); + if (runtimeMethods.Length == 1) + { + if (info.IsClass) + { + il.Emit(OpCodes.Dup); + } + else + { + il.EmitLdloca(structLocal); + } + + il.Emit(OpCodes.Call, runtimeMethods[0]); // don't use EmitCall helper(must use 'Call') + } + else + { + if (info.IsStruct) + { + il.EmitLdloc(structLocal); + il.Emit(OpCodes.Box, type); + } + else + { + il.Emit(OpCodes.Dup); + } + il.EmitCall(onAfterDeserialize); + } + } + + if (info.IsStruct) + { + il.Emit(OpCodes.Ldloc, structLocal); + } + + + il.Emit(OpCodes.Ret); + } + + static void EmitOffsetPlusReadSize(ILGenerator il, ArgumentField argOffset, ArgumentField argReadSize) + { + argOffset.EmitLoad(); + argReadSize.EmitLoad(); + il.Emit(OpCodes.Ldind_I4); + il.Emit(OpCodes.Add); + argOffset.EmitStore(); + } + + static void EmitDeserializeValue(ILGenerator il, DeserializeInfo info, int index, Func tryEmitLoadCustomFormatter, ArgumentField argBytes, ArgumentField argOffset, ArgumentField argResolver, ArgumentField argReadSize) + { + var member = info.MemberInfo; + var t = member.Type; + var emitter = tryEmitLoadCustomFormatter(index, member); + if (emitter != null) + { + emitter(); + argBytes.EmitLoad(); + argOffset.EmitLoad(); + argResolver.EmitLoad(); + argReadSize.EmitLoad(); + il.EmitCall(typeof(IMessagePackFormatter<>).MakeGenericType(t).GetRuntimeMethod("Deserialize", new[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), refInt })); + } + else if (IsOptimizeTargetType(t)) + { + il.EmitLdarg(1); + il.EmitLdarg(2); + il.EmitLdarg(4); + if (t == typeof(byte[])) + { + il.EmitCall(MessagePackBinaryTypeInfo.ReadBytes); + } + else + { + il.EmitCall(MessagePackBinaryTypeInfo.TypeInfo.GetDeclaredMethods("Read" + t.Name).OrderByDescending(x => x.GetParameters().Length).First()); + } + } + else + { + argResolver.EmitLoad(); + il.EmitCall(getFormatterWithVerify.MakeGenericMethod(t)); + argBytes.EmitLoad(); + argOffset.EmitLoad(); + argResolver.EmitLoad(); + argReadSize.EmitLoad(); + il.EmitCall(getDeserialize(t)); + } + + il.EmitStloc(info.LocalField); + } + + static LocalBuilder EmitNewObject(ILGenerator il, Type type, ObjectSerializationInfo info, DeserializeInfo[] members) + { + if (info.IsClass) + { + foreach (var item in info.ConstructorParameters) + { + var local = members.First(x => x.MemberInfo == item); + il.EmitLdloc(local.LocalField); + } + il.Emit(OpCodes.Newobj, info.BestmatchConstructor); + + foreach (var item in members.Where(x => x.MemberInfo != null && x.MemberInfo.IsWritable)) + { + il.Emit(OpCodes.Dup); + il.EmitLdloc(item.LocalField); + item.MemberInfo.EmitStoreValue(il); + } + + return null; + } + else + { + var result = il.DeclareLocal(type); + if (info.BestmatchConstructor == null) + { + il.Emit(OpCodes.Ldloca, result); + il.Emit(OpCodes.Initobj, type); + } + else + { + foreach (var item in info.ConstructorParameters) + { + var local = members.First(x => x.MemberInfo == item); + il.EmitLdloc(local.LocalField); + } + il.Emit(OpCodes.Newobj, info.BestmatchConstructor); + il.Emit(OpCodes.Stloc, result); + } + + foreach (var item in members.Where(x => x.MemberInfo != null && x.MemberInfo.IsWritable)) + { + il.EmitLdloca(result); + il.EmitLdloc(item.LocalField); + item.MemberInfo.EmitStoreValue(il); + } + + return result; // struct returns local result field + } + } + + static bool IsOptimizeTargetType(Type type) + { + if (type == typeof(Int16) + || type == typeof(Int32) + || type == typeof(Int64) + || type == typeof(UInt16) + || type == typeof(UInt32) + || type == typeof(UInt64) + || type == typeof(Single) + || type == typeof(Double) + || type == typeof(bool) + || type == typeof(byte) + || type == typeof(sbyte) + || type == typeof(char) + // not includes DateTime and String and Binary. + //|| type == typeof(DateTime) + //|| type == typeof(string) + //|| type == typeof(byte[]) + ) + { + return true; + } + return false; + } + + // EmitInfos... + + static readonly Type refByte = typeof(byte[]).MakeByRefType(); + static readonly Type refInt = typeof(int).MakeByRefType(); + static readonly MethodInfo getFormatterWithVerify = typeof(FormatterResolverExtensions).GetRuntimeMethods().First(x => x.Name == "GetFormatterWithVerify"); + static readonly Func getSerialize = t => typeof(IMessagePackFormatter<>).MakeGenericType(t).GetRuntimeMethod("Serialize", new[] { refByte, typeof(int), t, typeof(IFormatterResolver) }); + static readonly Func getDeserialize = t => typeof(IMessagePackFormatter<>).MakeGenericType(t).GetRuntimeMethod("Deserialize", new[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), refInt }); + // static readonly ConstructorInfo dictionaryConstructor = typeof(ByteArrayStringHashTable).GetTypeInfo().DeclaredConstructors.First(x => { var p = x.GetParameters(); return p.Length == 1 && p[0].ParameterType == typeof(int); }); + // static readonly MethodInfo dictionaryAdd = typeof(ByteArrayStringHashTable).GetRuntimeMethod("Add", new[] { typeof(string), typeof(int) }); + // static readonly MethodInfo dictionaryTryGetValue = typeof(ByteArrayStringHashTable).GetRuntimeMethod("TryGetValue", new[] { typeof(ArraySegment), refInt }); + static readonly ConstructorInfo invalidOperationExceptionConstructor = typeof(System.InvalidOperationException).GetTypeInfo().DeclaredConstructors.First(x => { var p = x.GetParameters(); return p.Length == 1 && p[0].ParameterType == typeof(string); }); + + static readonly MethodInfo onBeforeSerialize = typeof(IMessagePackSerializationCallbackReceiver).GetRuntimeMethod("OnBeforeSerialize", Type.EmptyTypes); + static readonly MethodInfo onAfterDeserialize = typeof(IMessagePackSerializationCallbackReceiver).GetRuntimeMethod("OnAfterDeserialize", Type.EmptyTypes); + + static readonly ConstructorInfo objectCtor = typeof(object).GetTypeInfo().DeclaredConstructors.First(x => x.GetParameters().Length == 0); + + internal static class MessagePackBinaryTypeInfo + { + public static TypeInfo TypeInfo = typeof(MessagePackBinary).GetTypeInfo(); + + public static readonly MethodInfo GetEncodedStringBytes = typeof(MessagePackBinary).GetRuntimeMethod("GetEncodedStringBytes", new[] { typeof(string) }); + public static MethodInfo WriteFixedMapHeaderUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WriteFixedMapHeaderUnsafe", new[] { refByte, +typeof(int), typeof(int) }); + public static MethodInfo WriteFixedArrayHeaderUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WriteFixedArrayHeaderUnsafe", new[] { refByte, typeof(int), typeof(int) }); + public static MethodInfo WriteMapHeader = typeof(MessagePackBinary).GetRuntimeMethod("WriteMapHeader", new[] { refByte, typeof(int), typeof(int) }); + public static MethodInfo WriteArrayHeader = typeof(MessagePackBinary).GetRuntimeMethod("WriteArrayHeader", new[] { refByte, typeof(int), typeof(int) }); + public static MethodInfo WritePositiveFixedIntUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WritePositiveFixedIntUnsafe", new[] { refByte, typeof(int), typeof(int) }); + public static MethodInfo WriteInt32 = typeof(MessagePackBinary).GetRuntimeMethod("WriteInt32", new[] { refByte, typeof(int), typeof(int) }); + public static MethodInfo WriteBytes = typeof(MessagePackBinary).GetRuntimeMethod("WriteBytes", new[] { refByte, typeof(int), typeof(byte[]) }); + public static MethodInfo WriteNil = typeof(MessagePackBinary).GetRuntimeMethod("WriteNil", new[] { refByte, typeof(int) }); + public static MethodInfo ReadBytes = typeof(MessagePackBinary).GetRuntimeMethod("ReadBytes", new[] { typeof(byte[]), typeof(int), refInt }); + public static MethodInfo ReadInt32 = typeof(MessagePackBinary).GetRuntimeMethod("ReadInt32", new[] { typeof(byte[]), typeof(int), refInt }); + public static MethodInfo ReadString = typeof(MessagePackBinary).GetRuntimeMethod("ReadString", new[] { typeof(byte[]), typeof(int), refInt }); + public static MethodInfo ReadStringSegment = typeof(MessagePackBinary).GetRuntimeMethod("ReadStringSegment", new[] { typeof(byte[]), typeof(int), refInt }); + public static MethodInfo IsNil = typeof(MessagePackBinary).GetRuntimeMethod("IsNil", new[] { typeof(byte[]), typeof(int) }); + public static MethodInfo ReadNextBlock = typeof(MessagePackBinary).GetRuntimeMethod("ReadNextBlock", new[] { typeof(byte[]), typeof(int) }); + public static MethodInfo WriteStringUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WriteStringUnsafe", new[] { refByte, typeof(int), typeof(string), typeof(int) }); + public static MethodInfo WriteStringBytes = typeof(MessagePackBinary).GetRuntimeMethod("WriteStringBytes", new[] { refByte, typeof(int), typeof(byte[]) }); + public static MethodInfo WriteRaw = typeof(MessagePackBinary).GetRuntimeMethod("WriteRaw", new[] { refByte, typeof(int), typeof(byte[]) }); + + public static MethodInfo ReadArrayHeader = typeof(MessagePackBinary).GetRuntimeMethod("ReadArrayHeader", new[] { typeof(byte[]), typeof(int), refInt }); + public static MethodInfo ReadMapHeader = typeof(MessagePackBinary).GetRuntimeMethod("ReadMapHeader", new[] { typeof(byte[]), typeof(int), refInt }); + + static MessagePackBinaryTypeInfo() + { + } + } + + internal static class EmitInfo + { + public static readonly MethodInfo GetTypeFromHandle = ExpressionUtility.GetMethodInfo(() => Type.GetTypeFromHandle(default(RuntimeTypeHandle))); + public static readonly MethodInfo TypeGetProperty = ExpressionUtility.GetMethodInfo((Type t) => t.GetTypeInfo().GetProperty(default(string), default(BindingFlags))); + public static readonly MethodInfo TypeGetField = ExpressionUtility.GetMethodInfo((Type t) => t.GetTypeInfo().GetField(default(string), default(BindingFlags))); + public static readonly MethodInfo GetCustomAttributeMessagePackFormatterAttribute = ExpressionUtility.GetMethodInfo(() => CustomAttributeExtensions.GetCustomAttribute(default(MemberInfo), default(bool))); + public static readonly MethodInfo ActivatorCreateInstance = ExpressionUtility.GetMethodInfo(() => Activator.CreateInstance(default(Type), default(object[]))); + + internal static class MessagePackFormatterAttr + { + internal static readonly MethodInfo FormatterType = ExpressionUtility.GetPropertyInfo((MessagePackFormatterAttribute attr) => attr.FormatterType).GetGetMethod(); + internal static readonly MethodInfo Arguments = ExpressionUtility.GetPropertyInfo((MessagePackFormatterAttribute attr) => attr.Arguments).GetGetMethod(); + } + } + + class DeserializeInfo + { + public ObjectSerializationInfo.EmittableMember MemberInfo { get; set; } + public LocalBuilder LocalField { get; set; } + public Label SwitchLabel { get; set; } + } + } + + internal delegate int AnonymousSerializeFunc(byte[][] stringByteKeysField, object[] customFormatters, ref byte[] bytes, int offset, T value, IFormatterResolver resolver); + internal delegate T AnonymousDeserializeFunc(object[] customFormatters, byte[] bytes, int offset, IFormatterResolver resolver, out int readSize); + + internal class AnonymousSerializableFormatter : IMessagePackFormatter + { + readonly byte[][] stringByteKeysField; + readonly object[] serializeCustomFormatters; + readonly object[] deserializeCustomFormatters; + readonly AnonymousSerializeFunc serialize; + readonly AnonymousDeserializeFunc deserialize; + + public AnonymousSerializableFormatter(byte[][] stringByteKeysField, object[] serializeCustomFormatters, object[] deserializeCustomFormatters, AnonymousSerializeFunc serialize, AnonymousDeserializeFunc deserialize) + { + this.stringByteKeysField = stringByteKeysField; + this.serializeCustomFormatters = serializeCustomFormatters; + this.deserializeCustomFormatters = deserializeCustomFormatters; + this.serialize = serialize; + this.deserialize = deserialize; + } + + public int Serialize(ref byte[] bytes, int offset, T value, IFormatterResolver formatterResolver) + { + if (serialize == null) throw new InvalidOperationException(this.GetType().Name + " does not support Serialize."); + return serialize(stringByteKeysField, serializeCustomFormatters, ref bytes, offset, value, formatterResolver); + } + + public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (deserialize == null) throw new InvalidOperationException(this.GetType().Name + " does not support Deserialize."); + return deserialize(deserializeCustomFormatters, bytes, offset, formatterResolver, out readSize); + } + } + + internal class ObjectSerializationInfo + { + public Type Type { get; set; } + public bool IsIntKey { get; set; } + public bool IsStringKey { get { return !IsIntKey; } } + public bool IsClass { get; set; } + public bool IsStruct { get { return !IsClass; } } + public ConstructorInfo BestmatchConstructor { get; set; } + public EmittableMember[] ConstructorParameters { get; set; } + public EmittableMember[] Members { get; set; } + + ObjectSerializationInfo() + { + + } + + public static ObjectSerializationInfo CreateOrNull(Type type, bool forceStringKey, bool contractless, bool allowPrivate) + { + var ti = type.GetTypeInfo(); + var isClass = ti.IsClass || ti.IsInterface || ti.IsAbstract; + + var contractAttr = ti.GetCustomAttribute(); + var dataContractAttr = ti.GetCustomAttribute(); + if (contractAttr == null && dataContractAttr == null && !forceStringKey && !contractless) + { + return null; + } + + var isIntKey = true; + var intMembers = new Dictionary(); + var stringMembers = new Dictionary(); + + if (forceStringKey || contractless || (contractAttr != null && contractAttr.KeyAsPropertyName)) + { + // All public members are serialize target except [Ignore] member. + isIntKey = !(forceStringKey || (contractAttr != null && contractAttr.KeyAsPropertyName)); + + var hiddenIntKey = 0; + foreach (var item in type.GetRuntimeProperties()) + { + if (item.GetCustomAttribute(true) != null) continue; + if (item.GetCustomAttribute(true) != null) continue; + if (item.IsIndexer()) continue; + + var getMethod = item.GetGetMethod(true); + var setMethod = item.GetSetMethod(true); + + var member = new EmittableMember + { + PropertyInfo = item, + IsReadable = (getMethod != null) && (allowPrivate || getMethod.IsPublic) && !getMethod.IsStatic, + IsWritable = (setMethod != null) && (allowPrivate || setMethod.IsPublic) && !setMethod.IsStatic, + StringKey = item.Name + }; + if (!member.IsReadable && !member.IsWritable) continue; + member.IntKey = hiddenIntKey++; + if (isIntKey) + { + intMembers.Add(member.IntKey, member); + } + else + { + stringMembers.Add(member.StringKey, member); + } + } + foreach (var item in type.GetRuntimeFields()) + { + if (item.GetCustomAttribute(true) != null) continue; + if (item.GetCustomAttribute(true) != null) continue; + if (item.GetCustomAttribute(true) != null) continue; + if (item.IsStatic) continue; + + var member = new EmittableMember + { + FieldInfo = item, + IsReadable = allowPrivate || item.IsPublic, + IsWritable = allowPrivate || (item.IsPublic && !item.IsInitOnly), + StringKey = item.Name + }; + if (!member.IsReadable && !member.IsWritable) continue; + member.IntKey = hiddenIntKey++; + if (isIntKey) + { + intMembers.Add(member.IntKey, member); + } + else + { + stringMembers.Add(member.StringKey, member); + } + } + } + else + { + // Public members with KeyAttribute except [Ignore] member. + var searchFirst = true; + var hiddenIntKey = 0; + + foreach (var item in type.GetRuntimeProperties()) + { + if (item.GetCustomAttribute(true) != null) continue; + if (item.GetCustomAttribute(true) != null) continue; + if (item.IsIndexer()) continue; + + var getMethod = item.GetGetMethod(true); + var setMethod = item.GetSetMethod(true); + + var member = new EmittableMember + { + PropertyInfo = item, + IsReadable = (getMethod != null) && (allowPrivate || getMethod.IsPublic) && !getMethod.IsStatic, + IsWritable = (setMethod != null) && (allowPrivate || setMethod.IsPublic) && !setMethod.IsStatic, + }; + if (!member.IsReadable && !member.IsWritable) continue; + + KeyAttribute key; + if (contractAttr != null) + { + // MessagePackObjectAttribute + key = item.GetCustomAttribute(true); + if (key == null) + { + throw new MessagePackDynamicObjectResolverException("all public members must mark KeyAttribute or IgnoreMemberAttribute." + " type: " + type.FullName + " member:" + item.Name); + } + + if (key.IntKey == null && key.StringKey == null) throw new MessagePackDynamicObjectResolverException("both IntKey and StringKey are null." + " type: " + type.FullName + " member:" + item.Name); + } + else + { + // DataContractAttribute + var pseudokey = item.GetCustomAttribute(true); + if (pseudokey == null) + { + throw new MessagePackDynamicObjectResolverException("all public members must mark DataMemberAttribute or IgnoreMemberAttribute." + " type: " + type.FullName + " member:" + item.Name); + } + + // use Order first + if (pseudokey.Order != -1) + { + key = new KeyAttribute(pseudokey.Order); + } + else if (pseudokey.Name != null) + { + key = new KeyAttribute(pseudokey.Name); + } + else + { + key = new KeyAttribute(item.Name); // use property name + } + } + + if (searchFirst) + { + searchFirst = false; + isIntKey = key.IntKey != null; + } + else + { + if ((isIntKey && key.IntKey == null) || (!isIntKey && key.StringKey == null)) + { + throw new MessagePackDynamicObjectResolverException("all members key type must be same." + " type: " + type.FullName + " member:" + item.Name); + } + } + + if (isIntKey) + { + member.IntKey = key.IntKey.Value; + if (intMembers.ContainsKey(member.IntKey)) throw new MessagePackDynamicObjectResolverException("key is duplicated, all members key must be unique." + " type: " + type.FullName + " member:" + item.Name); + + intMembers.Add(member.IntKey, member); + } + else + { + member.StringKey = key.StringKey; + if (stringMembers.ContainsKey(member.StringKey)) throw new MessagePackDynamicObjectResolverException("key is duplicated, all members key must be unique." + " type: " + type.FullName + " member:" + item.Name); + + member.IntKey = hiddenIntKey++; + stringMembers.Add(member.StringKey, member); + } + } + + foreach (var item in type.GetRuntimeFields()) + { + if (item.GetCustomAttribute(true) != null) continue; + if (item.GetCustomAttribute(true) != null) continue; + if (item.GetCustomAttribute(true) != null) continue; + if (item.IsStatic) continue; + + var member = new EmittableMember + { + FieldInfo = item, + IsReadable = allowPrivate || item.IsPublic, + IsWritable = allowPrivate || (item.IsPublic && !item.IsInitOnly), + }; + if (!member.IsReadable && !member.IsWritable) continue; + + KeyAttribute key; + if (contractAttr != null) + { + // MessagePackObjectAttribute + key = item.GetCustomAttribute(true); + if (key == null) + { + throw new MessagePackDynamicObjectResolverException("all public members must mark KeyAttribute or IgnoreMemberAttribute." + " type: " + type.FullName + " member:" + item.Name); + } + + if (key.IntKey == null && key.StringKey == null) throw new MessagePackDynamicObjectResolverException("both IntKey and StringKey are null." + " type: " + type.FullName + " member:" + item.Name); + } + else + { + // DataContractAttribute + var pseudokey = item.GetCustomAttribute(true); + if (pseudokey == null) + { + throw new MessagePackDynamicObjectResolverException("all public members must mark DataMemberAttribute or IgnoreMemberAttribute." + " type: " + type.FullName + " member:" + item.Name); + } + + // use Order first + if (pseudokey.Order != -1) + { + key = new KeyAttribute(pseudokey.Order); + } + else if (pseudokey.Name != null) + { + key = new KeyAttribute(pseudokey.Name); + } + else + { + key = new KeyAttribute(item.Name); // use property name + } + } + + if (searchFirst) + { + searchFirst = false; + isIntKey = key.IntKey != null; + } + else + { + if ((isIntKey && key.IntKey == null) || (!isIntKey && key.StringKey == null)) + { + throw new MessagePackDynamicObjectResolverException("all members key type must be same." + " type: " + type.FullName + " member:" + item.Name); + } + } + + if (isIntKey) + { + member.IntKey = key.IntKey.Value; + if (intMembers.ContainsKey(member.IntKey)) throw new MessagePackDynamicObjectResolverException("key is duplicated, all members key must be unique." + " type: " + type.FullName + " member:" + item.Name); + + intMembers.Add(member.IntKey, member); + } + else + { + member.StringKey = key.StringKey; + if (stringMembers.ContainsKey(member.StringKey)) throw new MessagePackDynamicObjectResolverException("key is duplicated, all members key must be unique." + " type: " + type.FullName + " member:" + item.Name); + + member.IntKey = hiddenIntKey++; + stringMembers.Add(member.StringKey, member); + } + } + } + + // GetConstructor + IEnumerator ctorEnumerator = null; + var ctor = ti.DeclaredConstructors.Where(x => x.IsPublic).SingleOrDefault(x => x.GetCustomAttribute(false) != null); + if (ctor == null) + { + ctorEnumerator = + ti.DeclaredConstructors.Where(x => x.IsPublic).OrderBy(x => x.GetParameters().Length) + .GetEnumerator(); + + if (ctorEnumerator.MoveNext()) + { + ctor = ctorEnumerator.Current; + } + } + // struct allows null ctor + if (ctor == null && isClass) throw new MessagePackDynamicObjectResolverException("can't find public constructor. type:" + type.FullName); + + var constructorParameters = new List(); + if (ctor != null) + { + var constructorLookupDictionary = stringMembers.ToLookup(x => x.Key, x => x, StringComparer.OrdinalIgnoreCase); + do + { + constructorParameters.Clear(); + var ctorParamIndex = 0; + foreach (var item in ctor.GetParameters()) + { + EmittableMember paramMember; + if (isIntKey) + { + if (intMembers.TryGetValue(ctorParamIndex, out paramMember)) + { + if (item.ParameterType == paramMember.Type && paramMember.IsReadable) + { + constructorParameters.Add(paramMember); + } + else + { + if (ctorEnumerator != null) + { + ctor = null; + continue; + } + else + { + throw new MessagePackDynamicObjectResolverException("can't find matched constructor parameter, parameterType mismatch. type:" + type.FullName + " parameterIndex:" + ctorParamIndex + " paramterType:" + item.ParameterType.Name); + } + } + } + else + { + if (ctorEnumerator != null) + { + ctor = null; + continue; + } + else + { + throw new MessagePackDynamicObjectResolverException("can't find matched constructor parameter, index not found. type:" + type.FullName + " parameterIndex:" + ctorParamIndex); + } + } + } + else + { + var hasKey = constructorLookupDictionary[item.Name]; + var len = hasKey.Count(); + if (len != 0) + { + if (len != 1) + { + if (ctorEnumerator != null) + { + ctor = null; + continue; + } + else + { + throw new MessagePackDynamicObjectResolverException("duplicate matched constructor parameter name:" + type.FullName + " parameterName:" + item.Name + " paramterType:" + item.ParameterType.Name); + } + } + + paramMember = hasKey.First().Value; + if (item.ParameterType == paramMember.Type && paramMember.IsReadable) + { + constructorParameters.Add(paramMember); + } + else + { + if (ctorEnumerator != null) + { + ctor = null; + continue; + } + else + { + throw new MessagePackDynamicObjectResolverException("can't find matched constructor parameter, parameterType mismatch. type:" + type.FullName + " parameterName:" + item.Name + " paramterType:" + item.ParameterType.Name); + } + } + } + else + { + if (ctorEnumerator != null) + { + ctor = null; + continue; + } + else + { + throw new MessagePackDynamicObjectResolverException("can't find matched constructor parameter, index not found. type:" + type.FullName + " parameterName:" + item.Name); + } + } + } + ctorParamIndex++; + } + } while (TryGetNextConstructor(ctorEnumerator, ref ctor)); + + if (ctor == null) + { + throw new MessagePackDynamicObjectResolverException("can't find matched constructor. type:" + type.FullName); + } + } + + EmittableMember[] members; + if (isIntKey) + { + members = intMembers.Values.OrderBy(x => x.IntKey).ToArray(); + } + else + { + members = stringMembers.Values + .OrderBy(x => + { + var attr = x.GetDataMemberAttribute(); + if (attr == null) return int.MaxValue; + return attr.Order; + }) + .ToArray(); + } + + return new ObjectSerializationInfo + { + Type = type, + IsClass = isClass, + BestmatchConstructor = ctor, + ConstructorParameters = constructorParameters.ToArray(), + IsIntKey = isIntKey, + Members = members, + }; + } + + static bool TryGetNextConstructor(IEnumerator ctorEnumerator, ref ConstructorInfo ctor) + { + if (ctorEnumerator == null || ctor != null) + { + return false; + } + + if (ctorEnumerator.MoveNext()) + { + ctor = ctorEnumerator.Current; + return true; + } + else + { + ctor = null; + return false; + } + } + + public class EmittableMember + { + public bool IsProperty { get { return PropertyInfo != null; } } + public bool IsField { get { return FieldInfo != null; } } + public bool IsWritable { get; set; } + public bool IsReadable { get; set; } + public int IntKey { get; set; } + public string StringKey { get; set; } + public Type Type { get { return IsField ? FieldInfo.FieldType : PropertyInfo.PropertyType; } } + public FieldInfo FieldInfo { get; set; } + public PropertyInfo PropertyInfo { get; set; } + + public string Name + { + get + { + return IsProperty ? PropertyInfo.Name : FieldInfo.Name; + } + } + + public bool IsValueType + { + get + { + var mi = IsProperty ? (MemberInfo)PropertyInfo : FieldInfo; + return mi.DeclaringType.GetTypeInfo().IsValueType; + } + } + + public MessagePackFormatterAttribute GetMessagePackFormatterAttribtue() + { + if (IsProperty) + { + return (MessagePackFormatterAttribute)PropertyInfo.GetCustomAttribute(true); + } + else + { + return (MessagePackFormatterAttribute)FieldInfo.GetCustomAttribute(true); + } + } + + public DataMemberAttribute GetDataMemberAttribute() + { + if (IsProperty) + { + return (DataMemberAttribute)PropertyInfo.GetCustomAttribute(true); + } + else + { + return (DataMemberAttribute)FieldInfo.GetCustomAttribute(true); + } + } + + public void EmitLoadValue(ILGenerator il) + { + if (IsProperty) + { + il.EmitCall(PropertyInfo.GetGetMethod(true)); + } + else + { + il.Emit(OpCodes.Ldfld, FieldInfo); + } + } + + public void EmitStoreValue(ILGenerator il) + { + if (IsProperty) + { + il.EmitCall(PropertyInfo.GetSetMethod(true)); + } + else + { + il.Emit(OpCodes.Stfld, FieldInfo); + } + } + + //public object ReflectionLoadValue(object value) + //{ + // if (IsProperty) + // { + // return PropertyInfo.GetValue(value); + // } + // else + // { + // return FieldInfo.GetValue(value); + // } + //} + + //public void ReflectionStoreValue(object obj, object value) + //{ + // if (IsProperty) + // { + // PropertyInfo.SetValue(obj, value); + // } + // else + // { + // FieldInfo.SetValue(obj, value); + // } + //} + } + } + + internal class MessagePackDynamicObjectResolverException : Exception + { + public MessagePackDynamicObjectResolverException(string message) + : base(message) + { + + } + } +} + +#endif #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicUnionResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicUnionResolver.cs index 5834bf884..5dd6be2a5 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicUnionResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/DynamicUnionResolver.cs @@ -1,518 +1,518 @@ -using System; -using System.Linq; -using MessagePack.Formatters; -using MessagePack.Internal; -using System.Reflection; -using System.Reflection.Emit; -using System.Collections.Generic; -using System.Text.RegularExpressions; -using System.Threading; - -namespace MessagePack.Resolvers -{ -#if !UNITY_WSA -#if !NET_STANDARD_2_0 - - /// - /// UnionResolver by dynamic code generation. - /// - public sealed class DynamicUnionResolver : IFormatterResolver - { - public static readonly DynamicUnionResolver Instance = new DynamicUnionResolver(); - - const string ModuleName = "MessagePack.Resolvers.DynamicUnionResolver"; - - static readonly DynamicAssembly assembly; -#if NETSTANDARD - static readonly Regex SubtractFullNameRegex = new Regex(@", Version=\d+.\d+.\d+.\d+, Culture=\w+, PublicKeyToken=\w+", RegexOptions.Compiled); -#else - static readonly Regex SubtractFullNameRegex = new Regex(@", Version=\d+.\d+.\d+.\d+, Culture=\w+, PublicKeyToken=\w+"); -#endif - - static int nameSequence = 0; - - DynamicUnionResolver() - { - - } - - static DynamicUnionResolver() - { - assembly = new DynamicAssembly(ModuleName); - } - -#if NET_35 - public AssemblyBuilder Save() - { - return assembly.Save(); - } -#endif - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - var ti = typeof(T).GetTypeInfo(); - if (ti.IsNullable()) - { - ti = ti.GenericTypeArguments[0].GetTypeInfo(); - - var innerFormatter = DynamicUnionResolver.Instance.GetFormatterDynamic(ti.AsType()); - if (innerFormatter == null) - { - return; - } - formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); - return; - } - - var formatterTypeInfo = BuildType(typeof(T)); - if (formatterTypeInfo == null) return; - - formatter = (IMessagePackFormatter)Activator.CreateInstance(formatterTypeInfo.AsType()); - } - } - - static TypeInfo BuildType(Type type) - { - var ti = type.GetTypeInfo(); - // order by key(important for use jump-table of switch) - var unionAttrs = ti.GetCustomAttributes().OrderBy(x => x.Key).ToArray(); - - if (unionAttrs.Length == 0) return null; - if (!ti.IsInterface && !ti.IsAbstract) - { - throw new MessagePackDynamicUnionResolverException("Union can only be interface or abstract class. Type:" + type.Name); - } - - var checker1 = new HashSet(); - var checker2 = new HashSet(); - foreach (var item in unionAttrs) - { - if (!checker1.Add(item.Key)) throw new MessagePackDynamicUnionResolverException("Same union key has found. Type:" + type.Name + " Key:" + item.Key); - if (!checker2.Add(item.SubType)) throw new MessagePackDynamicUnionResolverException("Same union subType has found. Type:" + type.Name + " SubType: " + item.SubType); - } - - var formatterType = typeof(IMessagePackFormatter<>).MakeGenericType(type); - var typeBuilder = assembly.DefineType("MessagePack.Formatters." + SubtractFullNameRegex.Replace(type.FullName, "").Replace(".", "_") + "Formatter" + +Interlocked.Increment(ref nameSequence), TypeAttributes.Public | TypeAttributes.Sealed, null, new[] { formatterType }); - - FieldBuilder typeToKeyAndJumpMap = null; // Dictionary> - FieldBuilder keyToJumpMap = null; // Dictionary - - // create map dictionary - { - var method = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Type.EmptyTypes); - typeToKeyAndJumpMap = typeBuilder.DefineField("typeToKeyAndJumpMap", typeof(Dictionary>), FieldAttributes.Private | FieldAttributes.InitOnly); - keyToJumpMap = typeBuilder.DefineField("keyToJumpMap", typeof(Dictionary), FieldAttributes.Private | FieldAttributes.InitOnly); - - var il = method.GetILGenerator(); - BuildConstructor(type, unionAttrs, method, typeToKeyAndJumpMap, keyToJumpMap, il); - } - - { - var method = typeBuilder.DefineMethod("Serialize", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, - typeof(int), - new Type[] { typeof(byte[]).MakeByRefType(), typeof(int), type, typeof(IFormatterResolver) }); - - var il = method.GetILGenerator(); - BuildSerialize(type, unionAttrs, method, typeToKeyAndJumpMap, il); - } - { - var method = typeBuilder.DefineMethod("Deserialize", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, - type, - new Type[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), typeof(int).MakeByRefType() }); - - var il = method.GetILGenerator(); - BuildDeserialize(type, unionAttrs, method, keyToJumpMap, il); - } - - return typeBuilder.CreateTypeInfo(); - } - - static void BuildConstructor(Type type, UnionAttribute[] infos, ConstructorInfo method, FieldBuilder typeToKeyAndJumpMap, FieldBuilder keyToJumpMap, ILGenerator il) - { - il.EmitLdarg(0); - il.Emit(OpCodes.Call, objectCtor); - - { - il.EmitLdarg(0); - il.EmitLdc_I4(infos.Length); - il.Emit(OpCodes.Ldsfld, runtimeTypeHandleEqualityComparer); - il.Emit(OpCodes.Newobj, typeMapDictionaryConstructor); - - var index = 0; - foreach (var item in infos) - { - il.Emit(OpCodes.Dup); - il.Emit(OpCodes.Ldtoken, item.SubType); - il.EmitLdc_I4(item.Key); - il.EmitLdc_I4(index); - il.Emit(OpCodes.Newobj, intIntKeyValuePairConstructor); - il.EmitCall(typeMapDictionaryAdd); - - index++; - } - - il.Emit(OpCodes.Stfld, typeToKeyAndJumpMap); - } - { - il.EmitLdarg(0); - il.EmitLdc_I4(infos.Length); - il.Emit(OpCodes.Newobj, keyMapDictionaryConstructor); - - var index = 0; - foreach (var item in infos) - { - il.Emit(OpCodes.Dup); - il.EmitLdc_I4(item.Key); - il.EmitLdc_I4(index); - il.EmitCall(keyMapDictionaryAdd); - - index++; - } - il.Emit(OpCodes.Stfld, keyToJumpMap); - } - - il.Emit(OpCodes.Ret); - } - - - // int Serialize([arg:1]ref byte[] bytes, [arg:2]int offset, [arg:3]T value, [arg:4]IFormatterResolver formatterResolver); - static void BuildSerialize(Type type, UnionAttribute[] infos, MethodBuilder method, FieldBuilder typeToKeyAndJumpMap, ILGenerator il) - { - // if(value == null) return WriteNil - var elseBody = il.DefineLabel(); - var notFoundType = il.DefineLabel(); - - il.EmitLdarg(3); - il.Emit(OpCodes.Brtrue_S, elseBody); - il.Emit(OpCodes.Br, notFoundType); - il.MarkLabel(elseBody); - - var keyPair = il.DeclareLocal(typeof(KeyValuePair)); - - il.EmitLoadThis(); - il.EmitLdfld(typeToKeyAndJumpMap); - il.EmitLdarg(3); - il.EmitCall(objectGetType); - il.EmitCall(getTypeHandle); - il.EmitLdloca(keyPair); - il.EmitCall(typeMapDictionaryTryGetValue); - il.Emit(OpCodes.Brfalse, notFoundType); - - // var startOffset = offset; - var startOffsetLocal = il.DeclareLocal(typeof(int)); - il.EmitLdarg(2); - il.EmitStloc(startOffsetLocal); - - // offset += WriteFixedArrayHeaderUnsafe(,,2); - EmitOffsetPlusEqual(il, null, () => - { - il.EmitLdc_I4(2); - il.EmitCall(MessagePackBinaryTypeInfo.WriteFixedArrayHeaderUnsafe); - }); - - // offset += WriteInt32(,,keyPair.Key) - EmitOffsetPlusEqual(il, null, () => - { - il.EmitLdloca(keyPair); - il.EmitCall(intIntKeyValuePairGetKey); - il.EmitCall(MessagePackBinaryTypeInfo.WriteInt32); - }); - - var loopEnd = il.DefineLabel(); - - // switch-case (offset += resolver.GetFormatter.Serialize(with cast) - var switchLabels = infos.Select(x => new { Label = il.DefineLabel(), Attr = x }).ToArray(); - il.EmitLdloca(keyPair); - il.EmitCall(intIntKeyValuePairGetValue); - il.Emit(OpCodes.Switch, switchLabels.Select(x => x.Label).ToArray()); - il.Emit(OpCodes.Br, loopEnd); // default - - foreach (var item in switchLabels) - { - il.MarkLabel(item.Label); - EmitOffsetPlusEqual(il, () => - { - il.EmitLdarg(4); - il.Emit(OpCodes.Call, getFormatterWithVerify.MakeGenericMethod(item.Attr.SubType)); - }, () => - { - il.EmitLdarg(3); - if (item.Attr.SubType.GetTypeInfo().IsValueType) - { - il.Emit(OpCodes.Unbox_Any, item.Attr.SubType); - } - else - { - il.Emit(OpCodes.Castclass, item.Attr.SubType); - } - il.EmitLdarg(4); - il.Emit(OpCodes.Callvirt, getSerialize(item.Attr.SubType)); - }); - - il.Emit(OpCodes.Br, loopEnd); - } - - // return startOffset- offset; - il.MarkLabel(loopEnd); - il.EmitLdarg(2); - il.EmitLdloc(startOffsetLocal); - il.Emit(OpCodes.Sub); - il.Emit(OpCodes.Ret); - - // else, return WriteNil - il.MarkLabel(notFoundType); - il.EmitLdarg(1); - il.EmitLdarg(2); - il.EmitCall(MessagePackBinaryTypeInfo.WriteNil); - il.Emit(OpCodes.Ret); - } - - // offset += ***(ref bytes, offset.... - static void EmitOffsetPlusEqual(ILGenerator il, Action loadEmit, Action emit) - { - il.EmitLdarg(2); - - if (loadEmit != null) loadEmit(); - - il.EmitLdarg(1); - il.EmitLdarg(2); - - emit(); - - il.Emit(OpCodes.Add); - il.EmitStarg(2); - } - - // T Deserialize([arg:1]byte[] bytes, [arg:2]int offset, [arg:3]IFormatterResolver formatterResolver, [arg:4]out int readSize); - static void BuildDeserialize(Type type, UnionAttribute[] infos, MethodBuilder method, FieldBuilder keyToJumpMap, ILGenerator il) - { - // if(MessagePackBinary.IsNil) readSize = 1, return null; - var falseLabel = il.DefineLabel(); - il.EmitLdarg(1); - il.EmitLdarg(2); - il.EmitCall(MessagePackBinaryTypeInfo.IsNil); - il.Emit(OpCodes.Brfalse_S, falseLabel); - - il.EmitLdarg(4); - il.EmitLdc_I4(1); - il.Emit(OpCodes.Stind_I4); - il.Emit(OpCodes.Ldnull); - il.Emit(OpCodes.Ret); - - // read-array header and validate, ReadArrayHeader(bytes, offset, out readSize) != 2) throw; - il.MarkLabel(falseLabel); - var startOffset = il.DeclareLocal(typeof(int)); - il.EmitLdarg(2); - il.EmitStloc(startOffset); - - var rightLabel = il.DefineLabel(); - il.EmitLdarg(1); - il.EmitLdarg(2); - il.EmitLdarg(4); - il.EmitCall(MessagePackBinaryTypeInfo.ReadArrayHeader); - il.EmitLdc_I4(2); - il.Emit(OpCodes.Beq_S, rightLabel); - il.Emit(OpCodes.Ldstr, "Invalid Union data was detected. Type:" + type.FullName); - il.Emit(OpCodes.Newobj, invalidOperationExceptionConstructor); - il.Emit(OpCodes.Throw); - - il.MarkLabel(rightLabel); - EmitOffsetPlusReadSize(il); - - // read key - var key = il.DeclareLocal(typeof(int)); - il.EmitLdarg(1); - il.EmitLdarg(2); - il.EmitLdarg(4); - il.EmitCall(MessagePackBinaryTypeInfo.ReadInt32); - il.EmitStloc(key); - EmitOffsetPlusReadSize(il); - - // is-sequential don't need else convert key to jump-table value - if (!IsZeroStartSequential(infos)) - { - var endKeyMapGet = il.DefineLabel(); - il.EmitLdarg(0); - il.EmitLdfld(keyToJumpMap); - il.EmitLdloc(key); - il.EmitLdloca(key); - il.EmitCall(keyMapDictionaryTryGetValue); - il.Emit(OpCodes.Brtrue_S, endKeyMapGet); - il.EmitLdc_I4(-1); - il.EmitStloc(key); - - il.MarkLabel(endKeyMapGet); - } - - // switch->read - var result = il.DeclareLocal(type); - var loopEnd = il.DefineLabel(); - il.Emit(OpCodes.Ldnull); - il.EmitStloc(result); - il.Emit(OpCodes.Ldloc, key); - - var switchLabels = infos.Select(x => new { Label = il.DefineLabel(), Attr = x }).ToArray(); - il.Emit(OpCodes.Switch, switchLabels.Select(x => x.Label).ToArray()); - - // default - il.EmitLdarg(2); - il.EmitLdarg(1); - il.EmitLdarg(2); - il.EmitCall(MessagePackBinaryTypeInfo.ReadNextBlock); - il.Emit(OpCodes.Add); - il.EmitStarg(2); - il.Emit(OpCodes.Br, loopEnd); - - foreach (var item in switchLabels) - { - il.MarkLabel(item.Label); - il.EmitLdarg(3); - il.EmitCall(getFormatterWithVerify.MakeGenericMethod(item.Attr.SubType)); - il.EmitLdarg(1); - il.EmitLdarg(2); - il.EmitLdarg(3); - il.EmitLdarg(4); - il.EmitCall(getDeserialize(item.Attr.SubType)); - if (item.Attr.SubType.GetTypeInfo().IsValueType) - { - il.Emit(OpCodes.Box, item.Attr.SubType); - } - il.Emit(OpCodes.Stloc, result); - EmitOffsetPlusReadSize(il); - il.Emit(OpCodes.Br, loopEnd); - } - - il.MarkLabel(loopEnd); - - //// finish readSize = offset - startOffset; - il.EmitLdarg(4); - il.EmitLdarg(2); - il.EmitLdloc(startOffset); - il.Emit(OpCodes.Sub); - il.Emit(OpCodes.Stind_I4); - il.Emit(OpCodes.Ldloc, result); - il.Emit(OpCodes.Ret); - } - - static bool IsZeroStartSequential(UnionAttribute[] infos) - { - for (int i = 0; i < infos.Length; i++) - { - if (infos[i].Key != i) return false; - } - return true; - } - - static void EmitOffsetPlusReadSize(ILGenerator il) - { - il.EmitLdarg(2); - il.EmitLdarg(4); - il.Emit(OpCodes.Ldind_I4); - il.Emit(OpCodes.Add); - il.EmitStarg(2); - } - - // EmitInfos... - - static readonly Type refByte = typeof(byte[]).MakeByRefType(); - static readonly Type refInt = typeof(int).MakeByRefType(); - static readonly Type refKvp = typeof(KeyValuePair).MakeByRefType(); - static readonly MethodInfo getFormatterWithVerify = typeof(FormatterResolverExtensions).GetRuntimeMethods().First(x => x.Name == "GetFormatterWithVerify"); - - static readonly Func getSerialize = t => typeof(IMessagePackFormatter<>).MakeGenericType(t).GetRuntimeMethod("Serialize", new[] { refByte, typeof(int), t, typeof(IFormatterResolver) }); - static readonly Func getDeserialize = t => typeof(IMessagePackFormatter<>).MakeGenericType(t).GetRuntimeMethod("Deserialize", new[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), refInt }); - - static readonly FieldInfo runtimeTypeHandleEqualityComparer = typeof(RuntimeTypeHandleEqualityComparer).GetRuntimeField("Default"); - static readonly ConstructorInfo intIntKeyValuePairConstructor = typeof(KeyValuePair).GetTypeInfo().DeclaredConstructors.First(x => x.GetParameters().Length == 2); - static readonly ConstructorInfo typeMapDictionaryConstructor = typeof(Dictionary>).GetTypeInfo().DeclaredConstructors.First(x => { var p = x.GetParameters(); return p.Length == 2 && p[0].ParameterType == typeof(int); }); - static readonly MethodInfo typeMapDictionaryAdd = typeof(Dictionary>).GetRuntimeMethod("Add", new[] { typeof(RuntimeTypeHandle), typeof(KeyValuePair) }); - static readonly MethodInfo typeMapDictionaryTryGetValue = typeof(Dictionary>).GetRuntimeMethod("TryGetValue", new[] { typeof(RuntimeTypeHandle), refKvp }); - - static readonly ConstructorInfo keyMapDictionaryConstructor = typeof(Dictionary).GetTypeInfo().DeclaredConstructors.First(x => { var p = x.GetParameters(); return p.Length == 1 && p[0].ParameterType == typeof(int); }); - static readonly MethodInfo keyMapDictionaryAdd = typeof(Dictionary).GetRuntimeMethod("Add", new[] { typeof(int), typeof(int) }); - static readonly MethodInfo keyMapDictionaryTryGetValue = typeof(Dictionary).GetRuntimeMethod("TryGetValue", new[] { typeof(int), refInt }); - - static readonly MethodInfo objectGetType = typeof(object).GetRuntimeMethod("GetType", Type.EmptyTypes); - static readonly MethodInfo getTypeHandle = typeof(Type).GetRuntimeProperty("TypeHandle").GetGetMethod(); - - static readonly MethodInfo intIntKeyValuePairGetKey = typeof(KeyValuePair).GetRuntimeProperty("Key").GetGetMethod(); - static readonly MethodInfo intIntKeyValuePairGetValue = typeof(KeyValuePair).GetRuntimeProperty("Value").GetGetMethod(); - - static readonly ConstructorInfo invalidOperationExceptionConstructor = typeof(System.InvalidOperationException).GetTypeInfo().DeclaredConstructors.First(x => { var p = x.GetParameters(); return p.Length == 1 && p[0].ParameterType == typeof(string); }); - static readonly ConstructorInfo objectCtor = typeof(object).GetTypeInfo().DeclaredConstructors.First(x => x.GetParameters().Length == 0); - - static class MessagePackBinaryTypeInfo - { - public static TypeInfo TypeInfo = typeof(MessagePackBinary).GetTypeInfo(); - - public static MethodInfo WriteFixedMapHeaderUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WriteFixedMapHeaderUnsafe", new[] { refByte, typeof(int), typeof(int) }); - public static MethodInfo WriteFixedArrayHeaderUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WriteFixedArrayHeaderUnsafe", new[] { refByte, typeof(int), typeof(int) }); - public static MethodInfo WriteMapHeader = typeof(MessagePackBinary).GetRuntimeMethod("WriteMapHeader", new[] { refByte, typeof(int), typeof(int) }); - public static MethodInfo WriteArrayHeader = typeof(MessagePackBinary).GetRuntimeMethod("WriteArrayHeader", new[] { refByte, typeof(int), typeof(int) }); - public static MethodInfo WritePositiveFixedIntUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WritePositiveFixedIntUnsafe", new[] { refByte, typeof(int), typeof(int) }); - public static MethodInfo WriteInt32 = typeof(MessagePackBinary).GetRuntimeMethod("WriteInt32", new[] { refByte, typeof(int), typeof(int) }); - public static MethodInfo WriteBytes = typeof(MessagePackBinary).GetRuntimeMethod("WriteBytes", new[] { refByte, typeof(int), typeof(byte[]) }); - public static MethodInfo WriteNil = typeof(MessagePackBinary).GetRuntimeMethod("WriteNil", new[] { refByte, typeof(int) }); - public static MethodInfo ReadBytes = typeof(MessagePackBinary).GetRuntimeMethod("ReadBytes", new[] { typeof(byte[]), typeof(int), refInt }); - public static MethodInfo ReadInt32 = typeof(MessagePackBinary).GetRuntimeMethod("ReadInt32", new[] { typeof(byte[]), typeof(int), refInt }); - public static MethodInfo ReadString = typeof(MessagePackBinary).GetRuntimeMethod("ReadString", new[] { typeof(byte[]), typeof(int), refInt }); - public static MethodInfo IsNil = typeof(MessagePackBinary).GetRuntimeMethod("IsNil", new[] { typeof(byte[]), typeof(int) }); - public static MethodInfo ReadNextBlock = typeof(MessagePackBinary).GetRuntimeMethod("ReadNextBlock", new[] { typeof(byte[]), typeof(int) }); - public static MethodInfo WriteStringUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WriteStringUnsafe", new[] { refByte, typeof(int), typeof(string), typeof(int) }); - - public static MethodInfo ReadArrayHeader = typeof(MessagePackBinary).GetRuntimeMethod("ReadArrayHeader", new[] { typeof(byte[]), typeof(int), refInt }); - public static MethodInfo ReadMapHeader = typeof(MessagePackBinary).GetRuntimeMethod("ReadMapHeader", new[] { typeof(byte[]), typeof(int), refInt }); - - static MessagePackBinaryTypeInfo() - { - } - } - } - -#endif -#endif -} - -namespace MessagePack.Internal -{ - // RuntimeTypeHandle can embed directly by OpCodes.Ldtoken - // It does not implements IEquatable(but GetHashCode and Equals is implemented) so needs this to avoid boxing. - public class RuntimeTypeHandleEqualityComparer : IEqualityComparer - { - public static IEqualityComparer Default = new RuntimeTypeHandleEqualityComparer(); - - RuntimeTypeHandleEqualityComparer() - { - - } - - public bool Equals(RuntimeTypeHandle x, RuntimeTypeHandle y) - { - return x.Equals(y); - } - - public int GetHashCode(RuntimeTypeHandle obj) - { - return obj.GetHashCode(); - } - } - - internal class MessagePackDynamicUnionResolverException : Exception - { - public MessagePackDynamicUnionResolverException(string message) - : base(message) - { - - } - } -} - +using System; +using System.Linq; +using MessagePack.Formatters; +using MessagePack.Internal; +using System.Reflection; +using System.Reflection.Emit; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using System.Threading; + +namespace MessagePack.Resolvers +{ +#if !UNITY_WSA +#if !NET_STANDARD_2_0 + + /// + /// UnionResolver by dynamic code generation. + /// + public sealed class DynamicUnionResolver : IFormatterResolver + { + public static readonly DynamicUnionResolver Instance = new DynamicUnionResolver(); + + const string ModuleName = "MessagePack.Resolvers.DynamicUnionResolver"; + + static readonly DynamicAssembly assembly; +#if NETSTANDARD + static readonly Regex SubtractFullNameRegex = new Regex(@", Version=\d+.\d+.\d+.\d+, Culture=\w+, PublicKeyToken=\w+", RegexOptions.Compiled); +#else + static readonly Regex SubtractFullNameRegex = new Regex(@", Version=\d+.\d+.\d+.\d+, Culture=\w+, PublicKeyToken=\w+"); +#endif + + static int nameSequence = 0; + + DynamicUnionResolver() + { + + } + + static DynamicUnionResolver() + { + assembly = new DynamicAssembly(ModuleName); + } + +#if NET_35 + public AssemblyBuilder Save() + { + return assembly.Save(); + } +#endif + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + var ti = typeof(T).GetTypeInfo(); + if (ti.IsNullable()) + { + ti = ti.GenericTypeArguments[0].GetTypeInfo(); + + var innerFormatter = DynamicUnionResolver.Instance.GetFormatterDynamic(ti.AsType()); + if (innerFormatter == null) + { + return; + } + formatter = (IMessagePackFormatter)Activator.CreateInstance(typeof(StaticNullableFormatter<>).MakeGenericType(ti.AsType()), new object[] { innerFormatter }); + return; + } + + var formatterTypeInfo = BuildType(typeof(T)); + if (formatterTypeInfo == null) return; + + formatter = (IMessagePackFormatter)Activator.CreateInstance(formatterTypeInfo.AsType()); + } + } + + static TypeInfo BuildType(Type type) + { + var ti = type.GetTypeInfo(); + // order by key(important for use jump-table of switch) + var unionAttrs = ti.GetCustomAttributes().OrderBy(x => x.Key).ToArray(); + + if (unionAttrs.Length == 0) return null; + if (!ti.IsInterface && !ti.IsAbstract) + { + throw new MessagePackDynamicUnionResolverException("Union can only be interface or abstract class. Type:" + type.Name); + } + + var checker1 = new HashSet(); + var checker2 = new HashSet(); + foreach (var item in unionAttrs) + { + if (!checker1.Add(item.Key)) throw new MessagePackDynamicUnionResolverException("Same union key has found. Type:" + type.Name + " Key:" + item.Key); + if (!checker2.Add(item.SubType)) throw new MessagePackDynamicUnionResolverException("Same union subType has found. Type:" + type.Name + " SubType: " + item.SubType); + } + + var formatterType = typeof(IMessagePackFormatter<>).MakeGenericType(type); + var typeBuilder = assembly.DefineType("MessagePack.Formatters." + SubtractFullNameRegex.Replace(type.FullName, "").Replace(".", "_") + "Formatter" + +Interlocked.Increment(ref nameSequence), TypeAttributes.Public | TypeAttributes.Sealed, null, new[] { formatterType }); + + FieldBuilder typeToKeyAndJumpMap = null; // Dictionary> + FieldBuilder keyToJumpMap = null; // Dictionary + + // create map dictionary + { + var method = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Type.EmptyTypes); + typeToKeyAndJumpMap = typeBuilder.DefineField("typeToKeyAndJumpMap", typeof(Dictionary>), FieldAttributes.Private | FieldAttributes.InitOnly); + keyToJumpMap = typeBuilder.DefineField("keyToJumpMap", typeof(Dictionary), FieldAttributes.Private | FieldAttributes.InitOnly); + + var il = method.GetILGenerator(); + BuildConstructor(type, unionAttrs, method, typeToKeyAndJumpMap, keyToJumpMap, il); + } + + { + var method = typeBuilder.DefineMethod("Serialize", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, + typeof(int), + new Type[] { typeof(byte[]).MakeByRefType(), typeof(int), type, typeof(IFormatterResolver) }); + + var il = method.GetILGenerator(); + BuildSerialize(type, unionAttrs, method, typeToKeyAndJumpMap, il); + } + { + var method = typeBuilder.DefineMethod("Deserialize", MethodAttributes.Public | MethodAttributes.Final | MethodAttributes.Virtual, + type, + new Type[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), typeof(int).MakeByRefType() }); + + var il = method.GetILGenerator(); + BuildDeserialize(type, unionAttrs, method, keyToJumpMap, il); + } + + return typeBuilder.CreateTypeInfo(); + } + + static void BuildConstructor(Type type, UnionAttribute[] infos, ConstructorInfo method, FieldBuilder typeToKeyAndJumpMap, FieldBuilder keyToJumpMap, ILGenerator il) + { + il.EmitLdarg(0); + il.Emit(OpCodes.Call, objectCtor); + + { + il.EmitLdarg(0); + il.EmitLdc_I4(infos.Length); + il.Emit(OpCodes.Ldsfld, runtimeTypeHandleEqualityComparer); + il.Emit(OpCodes.Newobj, typeMapDictionaryConstructor); + + var index = 0; + foreach (var item in infos) + { + il.Emit(OpCodes.Dup); + il.Emit(OpCodes.Ldtoken, item.SubType); + il.EmitLdc_I4(item.Key); + il.EmitLdc_I4(index); + il.Emit(OpCodes.Newobj, intIntKeyValuePairConstructor); + il.EmitCall(typeMapDictionaryAdd); + + index++; + } + + il.Emit(OpCodes.Stfld, typeToKeyAndJumpMap); + } + { + il.EmitLdarg(0); + il.EmitLdc_I4(infos.Length); + il.Emit(OpCodes.Newobj, keyMapDictionaryConstructor); + + var index = 0; + foreach (var item in infos) + { + il.Emit(OpCodes.Dup); + il.EmitLdc_I4(item.Key); + il.EmitLdc_I4(index); + il.EmitCall(keyMapDictionaryAdd); + + index++; + } + il.Emit(OpCodes.Stfld, keyToJumpMap); + } + + il.Emit(OpCodes.Ret); + } + + + // int Serialize([arg:1]ref byte[] bytes, [arg:2]int offset, [arg:3]T value, [arg:4]IFormatterResolver formatterResolver); + static void BuildSerialize(Type type, UnionAttribute[] infos, MethodBuilder method, FieldBuilder typeToKeyAndJumpMap, ILGenerator il) + { + // if(value == null) return WriteNil + var elseBody = il.DefineLabel(); + var notFoundType = il.DefineLabel(); + + il.EmitLdarg(3); + il.Emit(OpCodes.Brtrue_S, elseBody); + il.Emit(OpCodes.Br, notFoundType); + il.MarkLabel(elseBody); + + var keyPair = il.DeclareLocal(typeof(KeyValuePair)); + + il.EmitLoadThis(); + il.EmitLdfld(typeToKeyAndJumpMap); + il.EmitLdarg(3); + il.EmitCall(objectGetType); + il.EmitCall(getTypeHandle); + il.EmitLdloca(keyPair); + il.EmitCall(typeMapDictionaryTryGetValue); + il.Emit(OpCodes.Brfalse, notFoundType); + + // var startOffset = offset; + var startOffsetLocal = il.DeclareLocal(typeof(int)); + il.EmitLdarg(2); + il.EmitStloc(startOffsetLocal); + + // offset += WriteFixedArrayHeaderUnsafe(,,2); + EmitOffsetPlusEqual(il, null, () => + { + il.EmitLdc_I4(2); + il.EmitCall(MessagePackBinaryTypeInfo.WriteFixedArrayHeaderUnsafe); + }); + + // offset += WriteInt32(,,keyPair.Key) + EmitOffsetPlusEqual(il, null, () => + { + il.EmitLdloca(keyPair); + il.EmitCall(intIntKeyValuePairGetKey); + il.EmitCall(MessagePackBinaryTypeInfo.WriteInt32); + }); + + var loopEnd = il.DefineLabel(); + + // switch-case (offset += resolver.GetFormatter.Serialize(with cast) + var switchLabels = infos.Select(x => new { Label = il.DefineLabel(), Attr = x }).ToArray(); + il.EmitLdloca(keyPair); + il.EmitCall(intIntKeyValuePairGetValue); + il.Emit(OpCodes.Switch, switchLabels.Select(x => x.Label).ToArray()); + il.Emit(OpCodes.Br, loopEnd); // default + + foreach (var item in switchLabels) + { + il.MarkLabel(item.Label); + EmitOffsetPlusEqual(il, () => + { + il.EmitLdarg(4); + il.Emit(OpCodes.Call, getFormatterWithVerify.MakeGenericMethod(item.Attr.SubType)); + }, () => + { + il.EmitLdarg(3); + if (item.Attr.SubType.GetTypeInfo().IsValueType) + { + il.Emit(OpCodes.Unbox_Any, item.Attr.SubType); + } + else + { + il.Emit(OpCodes.Castclass, item.Attr.SubType); + } + il.EmitLdarg(4); + il.Emit(OpCodes.Callvirt, getSerialize(item.Attr.SubType)); + }); + + il.Emit(OpCodes.Br, loopEnd); + } + + // return startOffset- offset; + il.MarkLabel(loopEnd); + il.EmitLdarg(2); + il.EmitLdloc(startOffsetLocal); + il.Emit(OpCodes.Sub); + il.Emit(OpCodes.Ret); + + // else, return WriteNil + il.MarkLabel(notFoundType); + il.EmitLdarg(1); + il.EmitLdarg(2); + il.EmitCall(MessagePackBinaryTypeInfo.WriteNil); + il.Emit(OpCodes.Ret); + } + + // offset += ***(ref bytes, offset.... + static void EmitOffsetPlusEqual(ILGenerator il, Action loadEmit, Action emit) + { + il.EmitLdarg(2); + + if (loadEmit != null) loadEmit(); + + il.EmitLdarg(1); + il.EmitLdarg(2); + + emit(); + + il.Emit(OpCodes.Add); + il.EmitStarg(2); + } + + // T Deserialize([arg:1]byte[] bytes, [arg:2]int offset, [arg:3]IFormatterResolver formatterResolver, [arg:4]out int readSize); + static void BuildDeserialize(Type type, UnionAttribute[] infos, MethodBuilder method, FieldBuilder keyToJumpMap, ILGenerator il) + { + // if(MessagePackBinary.IsNil) readSize = 1, return null; + var falseLabel = il.DefineLabel(); + il.EmitLdarg(1); + il.EmitLdarg(2); + il.EmitCall(MessagePackBinaryTypeInfo.IsNil); + il.Emit(OpCodes.Brfalse_S, falseLabel); + + il.EmitLdarg(4); + il.EmitLdc_I4(1); + il.Emit(OpCodes.Stind_I4); + il.Emit(OpCodes.Ldnull); + il.Emit(OpCodes.Ret); + + // read-array header and validate, ReadArrayHeader(bytes, offset, out readSize) != 2) throw; + il.MarkLabel(falseLabel); + var startOffset = il.DeclareLocal(typeof(int)); + il.EmitLdarg(2); + il.EmitStloc(startOffset); + + var rightLabel = il.DefineLabel(); + il.EmitLdarg(1); + il.EmitLdarg(2); + il.EmitLdarg(4); + il.EmitCall(MessagePackBinaryTypeInfo.ReadArrayHeader); + il.EmitLdc_I4(2); + il.Emit(OpCodes.Beq_S, rightLabel); + il.Emit(OpCodes.Ldstr, "Invalid Union data was detected. Type:" + type.FullName); + il.Emit(OpCodes.Newobj, invalidOperationExceptionConstructor); + il.Emit(OpCodes.Throw); + + il.MarkLabel(rightLabel); + EmitOffsetPlusReadSize(il); + + // read key + var key = il.DeclareLocal(typeof(int)); + il.EmitLdarg(1); + il.EmitLdarg(2); + il.EmitLdarg(4); + il.EmitCall(MessagePackBinaryTypeInfo.ReadInt32); + il.EmitStloc(key); + EmitOffsetPlusReadSize(il); + + // is-sequential don't need else convert key to jump-table value + if (!IsZeroStartSequential(infos)) + { + var endKeyMapGet = il.DefineLabel(); + il.EmitLdarg(0); + il.EmitLdfld(keyToJumpMap); + il.EmitLdloc(key); + il.EmitLdloca(key); + il.EmitCall(keyMapDictionaryTryGetValue); + il.Emit(OpCodes.Brtrue_S, endKeyMapGet); + il.EmitLdc_I4(-1); + il.EmitStloc(key); + + il.MarkLabel(endKeyMapGet); + } + + // switch->read + var result = il.DeclareLocal(type); + var loopEnd = il.DefineLabel(); + il.Emit(OpCodes.Ldnull); + il.EmitStloc(result); + il.Emit(OpCodes.Ldloc, key); + + var switchLabels = infos.Select(x => new { Label = il.DefineLabel(), Attr = x }).ToArray(); + il.Emit(OpCodes.Switch, switchLabels.Select(x => x.Label).ToArray()); + + // default + il.EmitLdarg(2); + il.EmitLdarg(1); + il.EmitLdarg(2); + il.EmitCall(MessagePackBinaryTypeInfo.ReadNextBlock); + il.Emit(OpCodes.Add); + il.EmitStarg(2); + il.Emit(OpCodes.Br, loopEnd); + + foreach (var item in switchLabels) + { + il.MarkLabel(item.Label); + il.EmitLdarg(3); + il.EmitCall(getFormatterWithVerify.MakeGenericMethod(item.Attr.SubType)); + il.EmitLdarg(1); + il.EmitLdarg(2); + il.EmitLdarg(3); + il.EmitLdarg(4); + il.EmitCall(getDeserialize(item.Attr.SubType)); + if (item.Attr.SubType.GetTypeInfo().IsValueType) + { + il.Emit(OpCodes.Box, item.Attr.SubType); + } + il.Emit(OpCodes.Stloc, result); + EmitOffsetPlusReadSize(il); + il.Emit(OpCodes.Br, loopEnd); + } + + il.MarkLabel(loopEnd); + + //// finish readSize = offset - startOffset; + il.EmitLdarg(4); + il.EmitLdarg(2); + il.EmitLdloc(startOffset); + il.Emit(OpCodes.Sub); + il.Emit(OpCodes.Stind_I4); + il.Emit(OpCodes.Ldloc, result); + il.Emit(OpCodes.Ret); + } + + static bool IsZeroStartSequential(UnionAttribute[] infos) + { + for (int i = 0; i < infos.Length; i++) + { + if (infos[i].Key != i) return false; + } + return true; + } + + static void EmitOffsetPlusReadSize(ILGenerator il) + { + il.EmitLdarg(2); + il.EmitLdarg(4); + il.Emit(OpCodes.Ldind_I4); + il.Emit(OpCodes.Add); + il.EmitStarg(2); + } + + // EmitInfos... + + static readonly Type refByte = typeof(byte[]).MakeByRefType(); + static readonly Type refInt = typeof(int).MakeByRefType(); + static readonly Type refKvp = typeof(KeyValuePair).MakeByRefType(); + static readonly MethodInfo getFormatterWithVerify = typeof(FormatterResolverExtensions).GetRuntimeMethods().First(x => x.Name == "GetFormatterWithVerify"); + + static readonly Func getSerialize = t => typeof(IMessagePackFormatter<>).MakeGenericType(t).GetRuntimeMethod("Serialize", new[] { refByte, typeof(int), t, typeof(IFormatterResolver) }); + static readonly Func getDeserialize = t => typeof(IMessagePackFormatter<>).MakeGenericType(t).GetRuntimeMethod("Deserialize", new[] { typeof(byte[]), typeof(int), typeof(IFormatterResolver), refInt }); + + static readonly FieldInfo runtimeTypeHandleEqualityComparer = typeof(RuntimeTypeHandleEqualityComparer).GetRuntimeField("Default"); + static readonly ConstructorInfo intIntKeyValuePairConstructor = typeof(KeyValuePair).GetTypeInfo().DeclaredConstructors.First(x => x.GetParameters().Length == 2); + static readonly ConstructorInfo typeMapDictionaryConstructor = typeof(Dictionary>).GetTypeInfo().DeclaredConstructors.First(x => { var p = x.GetParameters(); return p.Length == 2 && p[0].ParameterType == typeof(int); }); + static readonly MethodInfo typeMapDictionaryAdd = typeof(Dictionary>).GetRuntimeMethod("Add", new[] { typeof(RuntimeTypeHandle), typeof(KeyValuePair) }); + static readonly MethodInfo typeMapDictionaryTryGetValue = typeof(Dictionary>).GetRuntimeMethod("TryGetValue", new[] { typeof(RuntimeTypeHandle), refKvp }); + + static readonly ConstructorInfo keyMapDictionaryConstructor = typeof(Dictionary).GetTypeInfo().DeclaredConstructors.First(x => { var p = x.GetParameters(); return p.Length == 1 && p[0].ParameterType == typeof(int); }); + static readonly MethodInfo keyMapDictionaryAdd = typeof(Dictionary).GetRuntimeMethod("Add", new[] { typeof(int), typeof(int) }); + static readonly MethodInfo keyMapDictionaryTryGetValue = typeof(Dictionary).GetRuntimeMethod("TryGetValue", new[] { typeof(int), refInt }); + + static readonly MethodInfo objectGetType = typeof(object).GetRuntimeMethod("GetType", Type.EmptyTypes); + static readonly MethodInfo getTypeHandle = typeof(Type).GetRuntimeProperty("TypeHandle").GetGetMethod(); + + static readonly MethodInfo intIntKeyValuePairGetKey = typeof(KeyValuePair).GetRuntimeProperty("Key").GetGetMethod(); + static readonly MethodInfo intIntKeyValuePairGetValue = typeof(KeyValuePair).GetRuntimeProperty("Value").GetGetMethod(); + + static readonly ConstructorInfo invalidOperationExceptionConstructor = typeof(System.InvalidOperationException).GetTypeInfo().DeclaredConstructors.First(x => { var p = x.GetParameters(); return p.Length == 1 && p[0].ParameterType == typeof(string); }); + static readonly ConstructorInfo objectCtor = typeof(object).GetTypeInfo().DeclaredConstructors.First(x => x.GetParameters().Length == 0); + + static class MessagePackBinaryTypeInfo + { + public static TypeInfo TypeInfo = typeof(MessagePackBinary).GetTypeInfo(); + + public static MethodInfo WriteFixedMapHeaderUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WriteFixedMapHeaderUnsafe", new[] { refByte, typeof(int), typeof(int) }); + public static MethodInfo WriteFixedArrayHeaderUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WriteFixedArrayHeaderUnsafe", new[] { refByte, typeof(int), typeof(int) }); + public static MethodInfo WriteMapHeader = typeof(MessagePackBinary).GetRuntimeMethod("WriteMapHeader", new[] { refByte, typeof(int), typeof(int) }); + public static MethodInfo WriteArrayHeader = typeof(MessagePackBinary).GetRuntimeMethod("WriteArrayHeader", new[] { refByte, typeof(int), typeof(int) }); + public static MethodInfo WritePositiveFixedIntUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WritePositiveFixedIntUnsafe", new[] { refByte, typeof(int), typeof(int) }); + public static MethodInfo WriteInt32 = typeof(MessagePackBinary).GetRuntimeMethod("WriteInt32", new[] { refByte, typeof(int), typeof(int) }); + public static MethodInfo WriteBytes = typeof(MessagePackBinary).GetRuntimeMethod("WriteBytes", new[] { refByte, typeof(int), typeof(byte[]) }); + public static MethodInfo WriteNil = typeof(MessagePackBinary).GetRuntimeMethod("WriteNil", new[] { refByte, typeof(int) }); + public static MethodInfo ReadBytes = typeof(MessagePackBinary).GetRuntimeMethod("ReadBytes", new[] { typeof(byte[]), typeof(int), refInt }); + public static MethodInfo ReadInt32 = typeof(MessagePackBinary).GetRuntimeMethod("ReadInt32", new[] { typeof(byte[]), typeof(int), refInt }); + public static MethodInfo ReadString = typeof(MessagePackBinary).GetRuntimeMethod("ReadString", new[] { typeof(byte[]), typeof(int), refInt }); + public static MethodInfo IsNil = typeof(MessagePackBinary).GetRuntimeMethod("IsNil", new[] { typeof(byte[]), typeof(int) }); + public static MethodInfo ReadNextBlock = typeof(MessagePackBinary).GetRuntimeMethod("ReadNextBlock", new[] { typeof(byte[]), typeof(int) }); + public static MethodInfo WriteStringUnsafe = typeof(MessagePackBinary).GetRuntimeMethod("WriteStringUnsafe", new[] { refByte, typeof(int), typeof(string), typeof(int) }); + + public static MethodInfo ReadArrayHeader = typeof(MessagePackBinary).GetRuntimeMethod("ReadArrayHeader", new[] { typeof(byte[]), typeof(int), refInt }); + public static MethodInfo ReadMapHeader = typeof(MessagePackBinary).GetRuntimeMethod("ReadMapHeader", new[] { typeof(byte[]), typeof(int), refInt }); + + static MessagePackBinaryTypeInfo() + { + } + } + } + +#endif +#endif +} + +namespace MessagePack.Internal +{ + // RuntimeTypeHandle can embed directly by OpCodes.Ldtoken + // It does not implements IEquatable(but GetHashCode and Equals is implemented) so needs this to avoid boxing. + public class RuntimeTypeHandleEqualityComparer : IEqualityComparer + { + public static IEqualityComparer Default = new RuntimeTypeHandleEqualityComparer(); + + RuntimeTypeHandleEqualityComparer() + { + + } + + public bool Equals(RuntimeTypeHandle x, RuntimeTypeHandle y) + { + return x.Equals(y); + } + + public int GetHashCode(RuntimeTypeHandle obj) + { + return obj.GetHashCode(); + } + } + + internal class MessagePackDynamicUnionResolverException : Exception + { + public MessagePackDynamicUnionResolverException(string message) + : base(message) + { + + } + } +} + diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/NativeDateTimeResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/NativeDateTimeResolver.cs index d6861b3ac..73ccc6669 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/NativeDateTimeResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/NativeDateTimeResolver.cs @@ -1,55 +1,55 @@ -using MessagePack.Formatters; -using MessagePack.Internal; -using System; - -namespace MessagePack.Resolvers -{ - public sealed class NativeDateTimeResolver : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new NativeDateTimeResolver(); - - NativeDateTimeResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - formatter = (IMessagePackFormatter)NativeDateTimeResolverGetFormatterHelper.GetFormatter(typeof(T)); - } - } - } -} - -namespace MessagePack.Internal -{ - internal static class NativeDateTimeResolverGetFormatterHelper - { - internal static object GetFormatter(Type t) - { - if (t == typeof(DateTime)) - { - return NativeDateTimeFormatter.Instance; - } - else if (t == typeof(DateTime?)) - { - return new StaticNullableFormatter(NativeDateTimeFormatter.Instance); - } - else if (t == typeof(DateTime[])) - { - return NativeDateTimeArrayFormatter.Instance; - } - - return null; - } - } +using MessagePack.Formatters; +using MessagePack.Internal; +using System; + +namespace MessagePack.Resolvers +{ + public sealed class NativeDateTimeResolver : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new NativeDateTimeResolver(); + + NativeDateTimeResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + formatter = (IMessagePackFormatter)NativeDateTimeResolverGetFormatterHelper.GetFormatter(typeof(T)); + } + } + } +} + +namespace MessagePack.Internal +{ + internal static class NativeDateTimeResolverGetFormatterHelper + { + internal static object GetFormatter(Type t) + { + if (t == typeof(DateTime)) + { + return NativeDateTimeFormatter.Instance; + } + else if (t == typeof(DateTime?)) + { + return new StaticNullableFormatter(NativeDateTimeFormatter.Instance); + } + else if (t == typeof(DateTime[])) + { + return NativeDateTimeArrayFormatter.Instance; + } + + return null; + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/OldSpecResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/OldSpecResolver.cs index a0a0b42e0..a4a38feec 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/OldSpecResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/OldSpecResolver.cs @@ -1,55 +1,55 @@ -using MessagePack.Formatters; -using MessagePack.Internal; -using System; - -namespace MessagePack.Resolvers -{ - public sealed class OldSpecResolver : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new OldSpecResolver(); - - OldSpecResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - formatter = (IMessagePackFormatter)OldSpecResolverGetFormatterHelper.GetFormatter(typeof(T)); - } - } - } -} - -namespace MessagePack.Internal -{ - internal static class OldSpecResolverGetFormatterHelper - { - internal static object GetFormatter(Type t) - { - if (t == typeof(string)) - { - return OldSpecStringFormatter.Instance; - } - else if (t == typeof(string[])) - { - return new ArrayFormatter(); - } - else if (t == typeof(byte[])) - { - return OldSpecBinaryFormatter.Instance; - } - - return null; - } - } +using MessagePack.Formatters; +using MessagePack.Internal; +using System; + +namespace MessagePack.Resolvers +{ + public sealed class OldSpecResolver : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new OldSpecResolver(); + + OldSpecResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + formatter = (IMessagePackFormatter)OldSpecResolverGetFormatterHelper.GetFormatter(typeof(T)); + } + } + } +} + +namespace MessagePack.Internal +{ + internal static class OldSpecResolverGetFormatterHelper + { + internal static object GetFormatter(Type t) + { + if (t == typeof(string)) + { + return OldSpecStringFormatter.Instance; + } + else if (t == typeof(string[])) + { + return new ArrayFormatter(); + } + else if (t == typeof(byte[])) + { + return OldSpecBinaryFormatter.Instance; + } + + return null; + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/PrimitiveObjectResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/PrimitiveObjectResolver.cs index 24b7f4904..b1f0052b6 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/PrimitiveObjectResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/PrimitiveObjectResolver.cs @@ -1,65 +1,65 @@ -using MessagePack.Formatters; - -namespace MessagePack.Resolvers -{ - public sealed class PrimitiveObjectResolver : IFormatterResolver - { - public static IFormatterResolver Instance = new PrimitiveObjectResolver(); - - PrimitiveObjectResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - formatter = (typeof(T) == typeof(object)) - ? (IMessagePackFormatter)(object)PrimitiveObjectFormatter.Instance - : null; - } - } - } - -//#if NETSTANDARD - -// /// -// /// In `object`, when serializing resolve by concrete type and when deserializing use primitive. -// /// -// public sealed class DynamicObjectTypeFallbackResolver : IFormatterResolver -// { -// public static IFormatterResolver Instance = new DynamicObjectTypeFallbackResolver(); - -// DynamicObjectTypeFallbackResolver() -// { - -// } - -// public IMessagePackFormatter GetFormatter() -// { -// return FormatterCache.formatter; -// } - -// static class FormatterCache -// { -// public static readonly IMessagePackFormatter formatter; - -// static FormatterCache() -// { -// formatter = (typeof(T) == typeof(object)) -// ? (IMessagePackFormatter)(object)DynamicObjectTypeFallbackFormatter.Instance -// : null; -// } -// } -// } - -//#endif +using MessagePack.Formatters; + +namespace MessagePack.Resolvers +{ + public sealed class PrimitiveObjectResolver : IFormatterResolver + { + public static IFormatterResolver Instance = new PrimitiveObjectResolver(); + + PrimitiveObjectResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + formatter = (typeof(T) == typeof(object)) + ? (IMessagePackFormatter)(object)PrimitiveObjectFormatter.Instance + : null; + } + } + } + +//#if NETSTANDARD + +// /// +// /// In `object`, when serializing resolve by concrete type and when deserializing use primitive. +// /// +// public sealed class DynamicObjectTypeFallbackResolver : IFormatterResolver +// { +// public static IFormatterResolver Instance = new DynamicObjectTypeFallbackResolver(); + +// DynamicObjectTypeFallbackResolver() +// { + +// } + +// public IMessagePackFormatter GetFormatter() +// { +// return FormatterCache.formatter; +// } + +// static class FormatterCache +// { +// public static readonly IMessagePackFormatter formatter; + +// static FormatterCache() +// { +// formatter = (typeof(T) == typeof(object)) +// ? (IMessagePackFormatter)(object)DynamicObjectTypeFallbackFormatter.Instance +// : null; +// } +// } +// } + +//#endif } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/StandardResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/StandardResolver.cs index ea9d28e32..8f5e8dfaf 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/StandardResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/StandardResolver.cs @@ -1,353 +1,353 @@ -using MessagePack.Formatters; -using System.Linq; -using MessagePack.Internal; -using MessagePack.Resolvers; - -namespace MessagePack.Resolvers -{ - /// - /// Default composited resolver, builtin -> attribute -> dynamic enum -> dynamic generic -> dynamic union -> dynamic object -> primitive. - /// - public sealed class StandardResolver : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new StandardResolver(); - -#if NETSTANDARD - public static readonly IMessagePackFormatter ObjectFallbackFormatter = new DynamicObjectTypeFallbackFormatter(StandardResolverCore.Instance); -#endif - - StandardResolver() - { - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - if (typeof(T) == typeof(object)) - { - // final fallback -#if NETSTANDARD - formatter = (IMessagePackFormatter)ObjectFallbackFormatter; -#else - formatter = PrimitiveObjectResolver.Instance.GetFormatter(); -#endif - } - else - { - formatter = StandardResolverCore.Instance.GetFormatter(); - } - } - } - } - - public sealed class ContractlessStandardResolver : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new ContractlessStandardResolver(); - -#if NETSTANDARD - public static readonly IMessagePackFormatter ObjectFallbackFormatter = new DynamicObjectTypeFallbackFormatter(ContractlessStandardResolverCore.Instance); -#endif - - ContractlessStandardResolver() - { - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - if (typeof(T) == typeof(object)) - { - // final fallback -#if NETSTANDARD - formatter = (IMessagePackFormatter)ObjectFallbackFormatter; -#else - formatter = PrimitiveObjectResolver.Instance.GetFormatter(); -#endif - } - else - { - formatter = ContractlessStandardResolverCore.Instance.GetFormatter(); - } - } - } - } - - public sealed class StandardResolverAllowPrivate : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new StandardResolverAllowPrivate(); - -#if NETSTANDARD - public static readonly IMessagePackFormatter ObjectFallbackFormatter = new DynamicObjectTypeFallbackFormatter(StandardResolverAllowPrivateCore.Instance); -#endif - - StandardResolverAllowPrivate() - { - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - if (typeof(T) == typeof(object)) - { - // final fallback -#if NETSTANDARD - formatter = (IMessagePackFormatter)ObjectFallbackFormatter; -#else - formatter = PrimitiveObjectResolver.Instance.GetFormatter(); -#endif - } - else - { - formatter = StandardResolverAllowPrivateCore.Instance.GetFormatter(); - } - } - } - } - - public sealed class ContractlessStandardResolverAllowPrivate : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new ContractlessStandardResolverAllowPrivate(); - -#if NETSTANDARD - public static readonly IMessagePackFormatter ObjectFallbackFormatter = new DynamicObjectTypeFallbackFormatter(ContractlessStandardResolverAllowPrivateCore.Instance); -#endif - - ContractlessStandardResolverAllowPrivate() - { - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - if (typeof(T) == typeof(object)) - { - // final fallback -#if NETSTANDARD - formatter = (IMessagePackFormatter)ObjectFallbackFormatter; -#else - formatter = PrimitiveObjectResolver.Instance.GetFormatter(); -#endif - } - else - { - formatter = ContractlessStandardResolverAllowPrivateCore.Instance.GetFormatter(); - } - } - } - } -} - -namespace MessagePack.Internal -{ - internal static class StandardResolverHelper - { - public static readonly IFormatterResolver[] DefaultResolvers = new[] - { - BuiltinResolver.Instance, // Try Builtin - AttributeFormatterResolver.Instance, // Try use [MessagePackFormatter] - -#if !NETSTANDARD - MessagePack.Unity.UnityResolver.Instance, -#endif - -#if !ENABLE_IL2CPP && !UNITY_WSA && !NET_STANDARD_2_0 - - DynamicEnumResolver.Instance, // Try Enum - DynamicGenericResolver.Instance, // Try Array, Tuple, Collection - DynamicUnionResolver.Instance, // Try Union(Interface) -#endif - }; - } - - internal sealed class StandardResolverCore : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new StandardResolverCore(); - - static readonly IFormatterResolver[] resolvers = StandardResolverHelper.DefaultResolvers.Concat(new IFormatterResolver[] - { -#if !ENABLE_IL2CPP && !UNITY_WSA && !NET_STANDARD_2_0 - DynamicObjectResolver.Instance, // Try Object -#endif - }).ToArray(); - - StandardResolverCore() - { - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - foreach (var item in resolvers) - { - var f = item.GetFormatter(); - if (f != null) - { - formatter = f; - return; - } - } - } - } - } - - internal sealed class ContractlessStandardResolverCore : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new ContractlessStandardResolverCore(); - - static readonly IFormatterResolver[] resolvers = StandardResolverHelper.DefaultResolvers.Concat(new IFormatterResolver[] - { -#if !ENABLE_IL2CPP && !UNITY_WSA && !NET_STANDARD_2_0 - DynamicObjectResolver.Instance, // Try Object - DynamicContractlessObjectResolver.Instance, // Serializes keys as strings -#endif - }).ToArray(); - - - ContractlessStandardResolverCore() - { - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - foreach (var item in resolvers) - { - var f = item.GetFormatter(); - if (f != null) - { - formatter = f; - return; - } - } - } - } - } - - internal sealed class StandardResolverAllowPrivateCore : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new StandardResolverAllowPrivateCore(); - - static readonly IFormatterResolver[] resolvers = StandardResolverHelper.DefaultResolvers.Concat(new IFormatterResolver[] - { -#if !ENABLE_IL2CPP && !UNITY_WSA && !NET_STANDARD_2_0 - DynamicObjectResolverAllowPrivate.Instance, // Try Object -#endif - }).ToArray(); - - StandardResolverAllowPrivateCore() - { - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - foreach (var item in resolvers) - { - var f = item.GetFormatter(); - if (f != null) - { - formatter = f; - return; - } - } - } - } - } - - internal sealed class ContractlessStandardResolverAllowPrivateCore : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new ContractlessStandardResolverAllowPrivateCore(); - - static readonly IFormatterResolver[] resolvers = StandardResolverHelper.DefaultResolvers.Concat(new IFormatterResolver[] - { -#if !ENABLE_IL2CPP && !UNITY_WSA && !NET_STANDARD_2_0 - DynamicObjectResolverAllowPrivate.Instance, // Try Object - DynamicContractlessObjectResolverAllowPrivate.Instance, // Serializes keys as strings -#endif - }).ToArray(); - - - ContractlessStandardResolverAllowPrivateCore() - { - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - foreach (var item in resolvers) - { - var f = item.GetFormatter(); - if (f != null) - { - formatter = f; - return; - } - } - } - } - } +using MessagePack.Formatters; +using System.Linq; +using MessagePack.Internal; +using MessagePack.Resolvers; + +namespace MessagePack.Resolvers +{ + /// + /// Default composited resolver, builtin -> attribute -> dynamic enum -> dynamic generic -> dynamic union -> dynamic object -> primitive. + /// + public sealed class StandardResolver : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new StandardResolver(); + +#if NETSTANDARD + public static readonly IMessagePackFormatter ObjectFallbackFormatter = new DynamicObjectTypeFallbackFormatter(StandardResolverCore.Instance); +#endif + + StandardResolver() + { + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + if (typeof(T) == typeof(object)) + { + // final fallback +#if NETSTANDARD + formatter = (IMessagePackFormatter)ObjectFallbackFormatter; +#else + formatter = PrimitiveObjectResolver.Instance.GetFormatter(); +#endif + } + else + { + formatter = StandardResolverCore.Instance.GetFormatter(); + } + } + } + } + + public sealed class ContractlessStandardResolver : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new ContractlessStandardResolver(); + +#if NETSTANDARD + public static readonly IMessagePackFormatter ObjectFallbackFormatter = new DynamicObjectTypeFallbackFormatter(ContractlessStandardResolverCore.Instance); +#endif + + ContractlessStandardResolver() + { + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + if (typeof(T) == typeof(object)) + { + // final fallback +#if NETSTANDARD + formatter = (IMessagePackFormatter)ObjectFallbackFormatter; +#else + formatter = PrimitiveObjectResolver.Instance.GetFormatter(); +#endif + } + else + { + formatter = ContractlessStandardResolverCore.Instance.GetFormatter(); + } + } + } + } + + public sealed class StandardResolverAllowPrivate : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new StandardResolverAllowPrivate(); + +#if NETSTANDARD + public static readonly IMessagePackFormatter ObjectFallbackFormatter = new DynamicObjectTypeFallbackFormatter(StandardResolverAllowPrivateCore.Instance); +#endif + + StandardResolverAllowPrivate() + { + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + if (typeof(T) == typeof(object)) + { + // final fallback +#if NETSTANDARD + formatter = (IMessagePackFormatter)ObjectFallbackFormatter; +#else + formatter = PrimitiveObjectResolver.Instance.GetFormatter(); +#endif + } + else + { + formatter = StandardResolverAllowPrivateCore.Instance.GetFormatter(); + } + } + } + } + + public sealed class ContractlessStandardResolverAllowPrivate : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new ContractlessStandardResolverAllowPrivate(); + +#if NETSTANDARD + public static readonly IMessagePackFormatter ObjectFallbackFormatter = new DynamicObjectTypeFallbackFormatter(ContractlessStandardResolverAllowPrivateCore.Instance); +#endif + + ContractlessStandardResolverAllowPrivate() + { + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + if (typeof(T) == typeof(object)) + { + // final fallback +#if NETSTANDARD + formatter = (IMessagePackFormatter)ObjectFallbackFormatter; +#else + formatter = PrimitiveObjectResolver.Instance.GetFormatter(); +#endif + } + else + { + formatter = ContractlessStandardResolverAllowPrivateCore.Instance.GetFormatter(); + } + } + } + } +} + +namespace MessagePack.Internal +{ + internal static class StandardResolverHelper + { + public static readonly IFormatterResolver[] DefaultResolvers = new[] + { + BuiltinResolver.Instance, // Try Builtin + AttributeFormatterResolver.Instance, // Try use [MessagePackFormatter] + +#if !NETSTANDARD + MessagePack.Unity.UnityResolver.Instance, +#endif + +#if !ENABLE_IL2CPP && !UNITY_WSA && !NET_STANDARD_2_0 + + DynamicEnumResolver.Instance, // Try Enum + DynamicGenericResolver.Instance, // Try Array, Tuple, Collection + DynamicUnionResolver.Instance, // Try Union(Interface) +#endif + }; + } + + internal sealed class StandardResolverCore : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new StandardResolverCore(); + + static readonly IFormatterResolver[] resolvers = StandardResolverHelper.DefaultResolvers.Concat(new IFormatterResolver[] + { +#if !ENABLE_IL2CPP && !UNITY_WSA && !NET_STANDARD_2_0 + DynamicObjectResolver.Instance, // Try Object +#endif + }).ToArray(); + + StandardResolverCore() + { + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + foreach (var item in resolvers) + { + var f = item.GetFormatter(); + if (f != null) + { + formatter = f; + return; + } + } + } + } + } + + internal sealed class ContractlessStandardResolverCore : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new ContractlessStandardResolverCore(); + + static readonly IFormatterResolver[] resolvers = StandardResolverHelper.DefaultResolvers.Concat(new IFormatterResolver[] + { +#if !ENABLE_IL2CPP && !UNITY_WSA && !NET_STANDARD_2_0 + DynamicObjectResolver.Instance, // Try Object + DynamicContractlessObjectResolver.Instance, // Serializes keys as strings +#endif + }).ToArray(); + + + ContractlessStandardResolverCore() + { + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + foreach (var item in resolvers) + { + var f = item.GetFormatter(); + if (f != null) + { + formatter = f; + return; + } + } + } + } + } + + internal sealed class StandardResolverAllowPrivateCore : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new StandardResolverAllowPrivateCore(); + + static readonly IFormatterResolver[] resolvers = StandardResolverHelper.DefaultResolvers.Concat(new IFormatterResolver[] + { +#if !ENABLE_IL2CPP && !UNITY_WSA && !NET_STANDARD_2_0 + DynamicObjectResolverAllowPrivate.Instance, // Try Object +#endif + }).ToArray(); + + StandardResolverAllowPrivateCore() + { + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + foreach (var item in resolvers) + { + var f = item.GetFormatter(); + if (f != null) + { + formatter = f; + return; + } + } + } + } + } + + internal sealed class ContractlessStandardResolverAllowPrivateCore : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new ContractlessStandardResolverAllowPrivateCore(); + + static readonly IFormatterResolver[] resolvers = StandardResolverHelper.DefaultResolvers.Concat(new IFormatterResolver[] + { +#if !ENABLE_IL2CPP && !UNITY_WSA && !NET_STANDARD_2_0 + DynamicObjectResolverAllowPrivate.Instance, // Try Object + DynamicContractlessObjectResolverAllowPrivate.Instance, // Serializes keys as strings +#endif + }).ToArray(); + + + ContractlessStandardResolverAllowPrivateCore() + { + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + foreach (var item in resolvers) + { + var f = item.GetFormatter(); + if (f != null) + { + formatter = f; + return; + } + } + } + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/TypelessContractlessStandardResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/TypelessContractlessStandardResolver.cs index 7a69f680b..b4e3f627a 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/TypelessContractlessStandardResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/TypelessContractlessStandardResolver.cs @@ -1,57 +1,57 @@ -#if NETSTANDARD -using MessagePack.Formatters; - -namespace MessagePack.Resolvers -{ - /// - /// Embed c# type names for `object` typed fields/collection items - /// Preserve c# DateTime timezone - /// - public sealed class TypelessContractlessStandardResolver : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new TypelessContractlessStandardResolver(); - - static readonly IFormatterResolver[] resolvers = new[] - { - NativeDateTimeResolver.Instance, // Native c# DateTime format, preserving timezone - BuiltinResolver.Instance, // Try Builtin - AttributeFormatterResolver.Instance, // Try use [MessagePackFormatter] -#if !ENABLE_IL2CPP - DynamicEnumResolver.Instance, // Try Enum - DynamicGenericResolver.Instance, // Try Array, Tuple, Collection - DynamicUnionResolver.Instance, // Try Union(Interface) - DynamicObjectResolver.Instance, // Try Object -#endif - DynamicContractlessObjectResolverAllowPrivate.Instance, // Serializes keys as strings - TypelessObjectResolver.Instance - }; - - TypelessContractlessStandardResolver() - { - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - foreach (var item in resolvers) - { - var f = item.GetFormatter(); - if (f != null) - { - formatter = f; - return; - } - } - } - } - } -} +#if NETSTANDARD +using MessagePack.Formatters; + +namespace MessagePack.Resolvers +{ + /// + /// Embed c# type names for `object` typed fields/collection items + /// Preserve c# DateTime timezone + /// + public sealed class TypelessContractlessStandardResolver : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new TypelessContractlessStandardResolver(); + + static readonly IFormatterResolver[] resolvers = new[] + { + NativeDateTimeResolver.Instance, // Native c# DateTime format, preserving timezone + BuiltinResolver.Instance, // Try Builtin + AttributeFormatterResolver.Instance, // Try use [MessagePackFormatter] +#if !ENABLE_IL2CPP + DynamicEnumResolver.Instance, // Try Enum + DynamicGenericResolver.Instance, // Try Array, Tuple, Collection + DynamicUnionResolver.Instance, // Try Union(Interface) + DynamicObjectResolver.Instance, // Try Object +#endif + DynamicContractlessObjectResolverAllowPrivate.Instance, // Serializes keys as strings + TypelessObjectResolver.Instance + }; + + TypelessContractlessStandardResolver() + { + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + foreach (var item in resolvers) + { + var f = item.GetFormatter(); + if (f != null) + { + formatter = f; + return; + } + } + } + } + } +} #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/TypelessObjectResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/TypelessObjectResolver.cs index bbd86b32f..0a507de26 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/TypelessObjectResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/TypelessObjectResolver.cs @@ -1,148 +1,148 @@ -using System; -using MessagePack.Formatters; -using System.Collections.Generic; -using MessagePack.Internal; - -namespace MessagePack.Resolvers -{ -#if NETSTANDARD - - /// - /// Used for `object` fields/collections, ex: var arr = new object[] { 1, "a", new Model() }; - /// The runtime type of value in object field, should be covered by one of resolvers in complex/standard resolver. - /// TypelessObjectResolver should be placed before DynamicObjectTypeFallbackResolver and PrimitiveObjectFormatter in resolvers list. - /// Deserializer uses Namescape.TypeName, AssemblyName to get runtime type in destination app, so that combination must be present in destination app. - /// Serialized binary is valid MessagePack binary used ext-format and custom typecode(100). - /// Inside ext - assembly qualified type name, and serialized object - /// - public sealed class TypelessObjectResolver : IFormatterResolver - { - public static IFormatterResolver Instance = new TypelessObjectResolver(); - - TypelessObjectResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - formatter = (typeof(T) == typeof(object)) - ? (IMessagePackFormatter)(object)TypelessFormatter.Instance - : null; - } - } - } - - // helpers for TypelessFormatter - - internal sealed class ForceSizePrimitiveObjectResolver : IFormatterResolver - { - public static IFormatterResolver Instance = new ForceSizePrimitiveObjectResolver(); - - ForceSizePrimitiveObjectResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - formatter = (IMessagePackFormatter)Helper.GetFormatter(typeof(T)); - } - } - - static class Helper - { - static readonly Dictionary formatterMap = new Dictionary() - { - // Primitive - {typeof(Int16), ForceInt16BlockFormatter.Instance}, - {typeof(Int32), ForceInt32BlockFormatter.Instance}, - {typeof(Int64), ForceInt64BlockFormatter.Instance}, - {typeof(UInt16), ForceUInt16BlockFormatter.Instance}, - {typeof(UInt32), ForceUInt32BlockFormatter.Instance}, - {typeof(UInt64), ForceUInt64BlockFormatter.Instance}, - {typeof(byte), ForceByteBlockFormatter.Instance}, - {typeof(sbyte), ForceSByteBlockFormatter.Instance}, - - // Nulllable Primitive - {typeof(Nullable), NullableForceInt16BlockFormatter.Instance}, - {typeof(Nullable), NullableForceInt32BlockFormatter.Instance}, - {typeof(Nullable), NullableForceInt64BlockFormatter.Instance}, - {typeof(Nullable), NullableForceUInt16BlockFormatter.Instance}, - {typeof(Nullable), NullableForceUInt32BlockFormatter.Instance}, - {typeof(Nullable), NullableForceUInt64BlockFormatter.Instance}, - {typeof(Nullable), NullableForceByteBlockFormatter.Instance}, - {typeof(Nullable), NullableForceSByteBlockFormatter.Instance}, - - // otpmitized primitive array formatter - {typeof(Int16[]), ForceInt16BlockArrayFormatter.Instance}, - {typeof(Int32[]), ForceInt32BlockArrayFormatter.Instance}, - {typeof(Int64[]), ForceInt64BlockArrayFormatter.Instance}, - {typeof(UInt16[]), ForceUInt16BlockArrayFormatter.Instance}, - {typeof(UInt32[]), ForceUInt32BlockArrayFormatter.Instance}, - {typeof(UInt64[]), ForceUInt64BlockArrayFormatter.Instance}, - {typeof(SByte[]), ForceSByteBlockArrayFormatter.Instance}, - }; - - public static object GetFormatter(Type type) - { - object formatter; - return formatterMap.TryGetValue(type, out formatter) - ? formatter - : null; - } - } - } - - internal sealed class TypelessFormatterFallbackResolver : IFormatterResolver - { - public static IFormatterResolver Instance = new TypelessFormatterFallbackResolver(); - - static IMessagePackFormatter fallbackFormatter = new DynamicObjectTypeFallbackFormatter( - ForceSizePrimitiveObjectResolver.Instance, - ContractlessStandardResolverAllowPrivateCore.Instance); - - TypelessFormatterFallbackResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - if (typeof(T) == typeof(object)) - { - formatter = (IMessagePackFormatter)fallbackFormatter; - } - } - } - } - -#endif +using System; +using MessagePack.Formatters; +using System.Collections.Generic; +using MessagePack.Internal; + +namespace MessagePack.Resolvers +{ +#if NETSTANDARD + + /// + /// Used for `object` fields/collections, ex: var arr = new object[] { 1, "a", new Model() }; + /// The runtime type of value in object field, should be covered by one of resolvers in complex/standard resolver. + /// TypelessObjectResolver should be placed before DynamicObjectTypeFallbackResolver and PrimitiveObjectFormatter in resolvers list. + /// Deserializer uses Namescape.TypeName, AssemblyName to get runtime type in destination app, so that combination must be present in destination app. + /// Serialized binary is valid MessagePack binary used ext-format and custom typecode(100). + /// Inside ext - assembly qualified type name, and serialized object + /// + public sealed class TypelessObjectResolver : IFormatterResolver + { + public static IFormatterResolver Instance = new TypelessObjectResolver(); + + TypelessObjectResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + formatter = (typeof(T) == typeof(object)) + ? (IMessagePackFormatter)(object)TypelessFormatter.Instance + : null; + } + } + } + + // helpers for TypelessFormatter + + internal sealed class ForceSizePrimitiveObjectResolver : IFormatterResolver + { + public static IFormatterResolver Instance = new ForceSizePrimitiveObjectResolver(); + + ForceSizePrimitiveObjectResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + formatter = (IMessagePackFormatter)Helper.GetFormatter(typeof(T)); + } + } + + static class Helper + { + static readonly Dictionary formatterMap = new Dictionary() + { + // Primitive + {typeof(Int16), ForceInt16BlockFormatter.Instance}, + {typeof(Int32), ForceInt32BlockFormatter.Instance}, + {typeof(Int64), ForceInt64BlockFormatter.Instance}, + {typeof(UInt16), ForceUInt16BlockFormatter.Instance}, + {typeof(UInt32), ForceUInt32BlockFormatter.Instance}, + {typeof(UInt64), ForceUInt64BlockFormatter.Instance}, + {typeof(byte), ForceByteBlockFormatter.Instance}, + {typeof(sbyte), ForceSByteBlockFormatter.Instance}, + + // Nulllable Primitive + {typeof(Nullable), NullableForceInt16BlockFormatter.Instance}, + {typeof(Nullable), NullableForceInt32BlockFormatter.Instance}, + {typeof(Nullable), NullableForceInt64BlockFormatter.Instance}, + {typeof(Nullable), NullableForceUInt16BlockFormatter.Instance}, + {typeof(Nullable), NullableForceUInt32BlockFormatter.Instance}, + {typeof(Nullable), NullableForceUInt64BlockFormatter.Instance}, + {typeof(Nullable), NullableForceByteBlockFormatter.Instance}, + {typeof(Nullable), NullableForceSByteBlockFormatter.Instance}, + + // otpmitized primitive array formatter + {typeof(Int16[]), ForceInt16BlockArrayFormatter.Instance}, + {typeof(Int32[]), ForceInt32BlockArrayFormatter.Instance}, + {typeof(Int64[]), ForceInt64BlockArrayFormatter.Instance}, + {typeof(UInt16[]), ForceUInt16BlockArrayFormatter.Instance}, + {typeof(UInt32[]), ForceUInt32BlockArrayFormatter.Instance}, + {typeof(UInt64[]), ForceUInt64BlockArrayFormatter.Instance}, + {typeof(SByte[]), ForceSByteBlockArrayFormatter.Instance}, + }; + + public static object GetFormatter(Type type) + { + object formatter; + return formatterMap.TryGetValue(type, out formatter) + ? formatter + : null; + } + } + } + + internal sealed class TypelessFormatterFallbackResolver : IFormatterResolver + { + public static IFormatterResolver Instance = new TypelessFormatterFallbackResolver(); + + static IMessagePackFormatter fallbackFormatter = new DynamicObjectTypeFallbackFormatter( + ForceSizePrimitiveObjectResolver.Instance, + ContractlessStandardResolverAllowPrivateCore.Instance); + + TypelessFormatterFallbackResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + if (typeof(T) == typeof(object)) + { + formatter = (IMessagePackFormatter)fallbackFormatter; + } + } + } + } + +#endif } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/UnsafeBinaryResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/UnsafeBinaryResolver.cs index 69e847d79..cbeca65be 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/UnsafeBinaryResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Resolvers/UnsafeBinaryResolver.cs @@ -1,63 +1,63 @@ -#if NETSTANDARD - -using MessagePack.Formatters; -using MessagePack.Internal; -using System; - -namespace MessagePack.Resolvers -{ - public sealed class UnsafeBinaryResolver : IFormatterResolver - { - public static readonly IFormatterResolver Instance = new UnsafeBinaryResolver(); - - UnsafeBinaryResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - formatter = (IMessagePackFormatter)UnsafeBinaryResolverGetFormatterHelper.GetFormatter(typeof(T)); - } - } - } -} - -namespace MessagePack.Internal -{ - internal static class UnsafeBinaryResolverGetFormatterHelper - { - internal static object GetFormatter(Type t) - { - if (t == typeof(Guid)) - { - return BinaryGuidFormatter.Instance; - } - else if (t == typeof(Guid?)) - { - return new StaticNullableFormatter(BinaryGuidFormatter.Instance); - } - else if (t == typeof(Decimal)) - { - return BinaryDecimalFormatter.Instance; - } - else if (t == typeof(Decimal?)) - { - return new StaticNullableFormatter(BinaryDecimalFormatter.Instance); - } - - return null; - } - } -} - +#if NETSTANDARD + +using MessagePack.Formatters; +using MessagePack.Internal; +using System; + +namespace MessagePack.Resolvers +{ + public sealed class UnsafeBinaryResolver : IFormatterResolver + { + public static readonly IFormatterResolver Instance = new UnsafeBinaryResolver(); + + UnsafeBinaryResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + formatter = (IMessagePackFormatter)UnsafeBinaryResolverGetFormatterHelper.GetFormatter(typeof(T)); + } + } + } +} + +namespace MessagePack.Internal +{ + internal static class UnsafeBinaryResolverGetFormatterHelper + { + internal static object GetFormatter(Type t) + { + if (t == typeof(Guid)) + { + return BinaryGuidFormatter.Instance; + } + else if (t == typeof(Guid?)) + { + return new StaticNullableFormatter(BinaryGuidFormatter.Instance); + } + else if (t == typeof(Decimal)) + { + return BinaryDecimalFormatter.Instance; + } + else if (t == typeof(Decimal?)) + { + return new StaticNullableFormatter(BinaryDecimalFormatter.Instance); + } + + return null; + } + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Shims/Reflection.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Shims/Reflection.cs index e41c67474..326120d4f 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Shims/Reflection.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Shims/Reflection.cs @@ -1,292 +1,292 @@ -#if !UNITY_METRO - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Reflection.Emit; -using System.Text; - -namespace System.Reflection -{ -#if !NET_4_6 && !NET_STANDARD_2_0 - - public class TypeInfo - { - readonly Type type; - - public TypeInfo(Type type) - { - this.type = type; - } - - public string Name - { - get - { - return type.Name; - } - } - - public TypeAttributes Attributes - { - get - { - return type.Attributes; - } - } - - public bool IsClass - { - get - { - return type.IsClass; - } - } - - public bool IsPublic - { - get - { - return type.IsPublic; - } - } - - public bool IsInterface - { - get - { - return type.IsInterface; - } - } - - public bool IsAbstract - { - get - { - return type.IsAbstract; - } - } - - public bool IsArray - { - get - { - return type.IsArray; - } - } - - public bool IsValueType - { - get - { - return type.IsValueType; - } - } - - public bool IsNestedPublic - { - get - { - return type.IsNestedPublic; - } - } - - public IEnumerable DeclaredConstructors - { - get - { - return type.GetConstructors().AsEnumerable(); - } - } - - public bool IsGenericType - { - get - { - return type.IsGenericType; - } - } - - public Type GetGenericTypeDefinition() - { - return type.GetGenericTypeDefinition(); - } - - public Type AsType() - { - return type; - } - - public MethodInfo GetDeclaredMethod(string name) - { - return type.GetMethod(name); - } - - public IEnumerable GetDeclaredMethods(string name) - { - return type.GetMethods().Where(x => x.Name == name); - } - - public Type[] GenericTypeArguments - { - get - { - return type.GetGenericArguments(); - } - } - - public bool IsEnum - { - get - { - return type.IsEnum; - } - } - - public bool IsConstructedGenericType() - { - return type.IsGenericType && !type.IsGenericTypeDefinition; - } - - public Type[] ImplementedInterfaces - { - get - { - return type.GetInterfaces(); - } - } - - public MethodInfo[] GetRuntimeMethods() - { - return type.GetMethods(); - } - - public bool IsAssignableFrom(TypeInfo c) - { - return type.IsAssignableFrom(c.AsType()); - } - - public PropertyInfo GetDeclaredProperty(string name) - { - return type.GetProperty(name); - } - - public FieldInfo GetField(string name, BindingFlags flags) - { - return type.GetField(name, flags); - } - - public PropertyInfo GetProperty(string name, BindingFlags flags) - { - return type.GetProperty(name, flags); - } - - - public T GetCustomAttribute(bool inherit = true) - where T : Attribute - { - return type.GetCustomAttributes(inherit).OfType().FirstOrDefault(); - } - public IEnumerable GetCustomAttributes(bool inherit = true) - where T : Attribute - { - return type.GetCustomAttributes(inherit).OfType(); - } - } - -#endif - - public static class ReflectionExtensions - { - -#if !NET_4_6 && !NET_STANDARD_2_0 - - public static TypeInfo GetTypeInfo(this Type type) - { - return new TypeInfo(type); - } - - public static TypeInfo CreateTypeInfo(this TypeBuilder type) - { - return new TypeInfo(type.CreateType()); - } - - public static MethodInfo GetRuntimeMethod(this Type type, string name, Type[] types) - { - return type.GetMethod(name, types); - } - - public static MethodInfo GetRuntimeMethod(this Type type, string name) - { - return type.GetMethod(name); - } - - public static MethodInfo[] GetRuntimeMethods(this Type type) - { - return type.GetMethods(); - } - - public static PropertyInfo GetRuntimeProperty(this Type type, string name) - { - return type.GetProperty(name); - } - - public static PropertyInfo[] GetRuntimeProperties(this Type type) - { - return type.GetProperties(); - } - - public static FieldInfo GetRuntimeField(this Type type, string name) - { - return type.GetField(name); - } - - public static FieldInfo[] GetRuntimeFields(this Type type) - { - return type.GetFields(); - } - - public static T GetCustomAttribute(this FieldInfo type, bool inherit) - where T : Attribute - { - return type.GetCustomAttributes(inherit).OfType().FirstOrDefault(); - } - - public static T GetCustomAttribute(this PropertyInfo type, bool inherit) - where T : Attribute - { - return type.GetCustomAttributes(inherit).OfType().FirstOrDefault(); - } - - public static T GetCustomAttribute(this ConstructorInfo type, bool inherit) - where T : Attribute - { - return type.GetCustomAttributes(inherit).OfType().FirstOrDefault(); - } - -#else - - - public static bool IsConstructedGenericType(this TypeInfo type) - { - return type.IsConstructedGenericType; - } - -#endif - } - -#if !NET_4_6 - public static class CustomAttributeExtensions - { - public static T GetCustomAttribute(MemberInfo memberInfo, bool inherit) - { - return (T)memberInfo.GetCustomAttributes(typeof(T), inherit).FirstOrDefault(); - } - } - -#endif -} - - +#if !UNITY_METRO + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Reflection.Emit; +using System.Text; + +namespace System.Reflection +{ +#if !NET_4_6 && !NET_STANDARD_2_0 + + public class TypeInfo + { + readonly Type type; + + public TypeInfo(Type type) + { + this.type = type; + } + + public string Name + { + get + { + return type.Name; + } + } + + public TypeAttributes Attributes + { + get + { + return type.Attributes; + } + } + + public bool IsClass + { + get + { + return type.IsClass; + } + } + + public bool IsPublic + { + get + { + return type.IsPublic; + } + } + + public bool IsInterface + { + get + { + return type.IsInterface; + } + } + + public bool IsAbstract + { + get + { + return type.IsAbstract; + } + } + + public bool IsArray + { + get + { + return type.IsArray; + } + } + + public bool IsValueType + { + get + { + return type.IsValueType; + } + } + + public bool IsNestedPublic + { + get + { + return type.IsNestedPublic; + } + } + + public IEnumerable DeclaredConstructors + { + get + { + return type.GetConstructors().AsEnumerable(); + } + } + + public bool IsGenericType + { + get + { + return type.IsGenericType; + } + } + + public Type GetGenericTypeDefinition() + { + return type.GetGenericTypeDefinition(); + } + + public Type AsType() + { + return type; + } + + public MethodInfo GetDeclaredMethod(string name) + { + return type.GetMethod(name); + } + + public IEnumerable GetDeclaredMethods(string name) + { + return type.GetMethods().Where(x => x.Name == name); + } + + public Type[] GenericTypeArguments + { + get + { + return type.GetGenericArguments(); + } + } + + public bool IsEnum + { + get + { + return type.IsEnum; + } + } + + public bool IsConstructedGenericType() + { + return type.IsGenericType && !type.IsGenericTypeDefinition; + } + + public Type[] ImplementedInterfaces + { + get + { + return type.GetInterfaces(); + } + } + + public MethodInfo[] GetRuntimeMethods() + { + return type.GetMethods(); + } + + public bool IsAssignableFrom(TypeInfo c) + { + return type.IsAssignableFrom(c.AsType()); + } + + public PropertyInfo GetDeclaredProperty(string name) + { + return type.GetProperty(name); + } + + public FieldInfo GetField(string name, BindingFlags flags) + { + return type.GetField(name, flags); + } + + public PropertyInfo GetProperty(string name, BindingFlags flags) + { + return type.GetProperty(name, flags); + } + + + public T GetCustomAttribute(bool inherit = true) + where T : Attribute + { + return type.GetCustomAttributes(inherit).OfType().FirstOrDefault(); + } + public IEnumerable GetCustomAttributes(bool inherit = true) + where T : Attribute + { + return type.GetCustomAttributes(inherit).OfType(); + } + } + +#endif + + public static class ReflectionExtensions + { + +#if !NET_4_6 && !NET_STANDARD_2_0 + + public static TypeInfo GetTypeInfo(this Type type) + { + return new TypeInfo(type); + } + + public static TypeInfo CreateTypeInfo(this TypeBuilder type) + { + return new TypeInfo(type.CreateType()); + } + + public static MethodInfo GetRuntimeMethod(this Type type, string name, Type[] types) + { + return type.GetMethod(name, types); + } + + public static MethodInfo GetRuntimeMethod(this Type type, string name) + { + return type.GetMethod(name); + } + + public static MethodInfo[] GetRuntimeMethods(this Type type) + { + return type.GetMethods(); + } + + public static PropertyInfo GetRuntimeProperty(this Type type, string name) + { + return type.GetProperty(name); + } + + public static PropertyInfo[] GetRuntimeProperties(this Type type) + { + return type.GetProperties(); + } + + public static FieldInfo GetRuntimeField(this Type type, string name) + { + return type.GetField(name); + } + + public static FieldInfo[] GetRuntimeFields(this Type type) + { + return type.GetFields(); + } + + public static T GetCustomAttribute(this FieldInfo type, bool inherit) + where T : Attribute + { + return type.GetCustomAttributes(inherit).OfType().FirstOrDefault(); + } + + public static T GetCustomAttribute(this PropertyInfo type, bool inherit) + where T : Attribute + { + return type.GetCustomAttributes(inherit).OfType().FirstOrDefault(); + } + + public static T GetCustomAttribute(this ConstructorInfo type, bool inherit) + where T : Attribute + { + return type.GetCustomAttributes(inherit).OfType().FirstOrDefault(); + } + +#else + + + public static bool IsConstructedGenericType(this TypeInfo type) + { + return type.IsConstructedGenericType; + } + +#endif + } + +#if !NET_4_6 + public static class CustomAttributeExtensions + { + public static T GetCustomAttribute(MemberInfo memberInfo, bool inherit) + { + return (T)memberInfo.GetCustomAttributes(typeof(T), inherit).FirstOrDefault(); + } + } + +#endif +} + + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/StringEncoding.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/StringEncoding.cs index dfde7d404..b7a564320 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/StringEncoding.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/StringEncoding.cs @@ -1,9 +1,9 @@ -using System.Text; - -namespace MessagePack -{ - internal static class StringEncoding - { - public static readonly Encoding UTF8 = new UTF8Encoding(false); - } -} +using System.Text; + +namespace MessagePack +{ + internal static class StringEncoding + { + public static readonly Encoding UTF8 = new UTF8Encoding(false); + } +} diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Unity/Formatters.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Unity/Formatters.cs index c968fffb8..6e478fca0 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Unity/Formatters.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Unity/Formatters.cs @@ -1,1399 +1,1399 @@ -using System; -using MessagePack; - -namespace MessagePack.Unity -{ - public sealed class Vector2Formatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Vector2 value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.x); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.y); - return offset - startOffset; - } - - public global::UnityEngine.Vector2 Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var x = default(float); - var y = default(float); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - x = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 1: - y = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var result = new global::UnityEngine.Vector2(x, y); - return result; - } - } - - - public sealed class Vector3Formatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Vector3 value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 3); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.x); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.y); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.z); - return offset - startOffset; - } - - public global::UnityEngine.Vector3 Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var x = default(float); - var y = default(float); - var z = default(float); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - x = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 1: - y = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 2: - z = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var result = new global::UnityEngine.Vector3(x, y, z); - return result; - } - } - - - public sealed class Vector4Formatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Vector4 value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.x); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.y); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.z); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.w); - return offset - startOffset; - } - - public global::UnityEngine.Vector4 Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var x = default(float); - var y = default(float); - var z = default(float); - var w = default(float); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - x = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 1: - y = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 2: - z = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 3: - w = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var result = new global::UnityEngine.Vector4(x, y, z, w); - return result; - } - } - - - public sealed class QuaternionFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Quaternion value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.x); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.y); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.z); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.w); - return offset - startOffset; - } - - public global::UnityEngine.Quaternion Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var x = default(float); - var y = default(float); - var z = default(float); - var w = default(float); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - x = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 1: - y = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 2: - z = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 3: - w = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var result = new global::UnityEngine.Quaternion(x, y, z, w); - return result; - } - } - - - public sealed class ColorFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Color value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.r); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.g); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.b); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.a); - return offset - startOffset; - } - - public global::UnityEngine.Color Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var r = default(float); - var g = default(float); - var b = default(float); - var a = default(float); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - r = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 1: - g = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 2: - b = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 3: - a = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var result = new global::UnityEngine.Color(r, g, b, a); - return result; - } - } - - - public sealed class BoundsFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Bounds value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.center, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.size, formatterResolver); - return offset - startOffset; - } - - public global::UnityEngine.Bounds Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var center = default(global::UnityEngine.Vector3); - var size = default(global::UnityEngine.Vector3); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - center = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - case 1: - size = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var result = new global::UnityEngine.Bounds(center, size); - return result; - } - } - - - public sealed class RectFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Rect value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.x); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.y); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.width); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.height); - return offset - startOffset; - } - - public global::UnityEngine.Rect Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var x = default(float); - var y = default(float); - var width = default(float); - var height = default(float); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - x = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 1: - y = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 2: - width = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 3: - height = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var result = new global::UnityEngine.Rect(x, y, width, height); - return result; - } - } - - // additional - - public sealed class WrapModeFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.WrapMode value, global::MessagePack.IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteInt32(ref bytes, offset, (Int32)value); - } - - public global::UnityEngine.WrapMode Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - return (global::UnityEngine.WrapMode)MessagePackBinary.ReadInt32(bytes, offset, out readSize); - } - } - - public sealed class GradientModeFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.GradientMode value, global::MessagePack.IFormatterResolver formatterResolver) - { - return MessagePackBinary.WriteInt32(ref bytes, offset, (Int32)value); - } - - public global::UnityEngine.GradientMode Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - return (global::UnityEngine.GradientMode)MessagePackBinary.ReadInt32(bytes, offset, out readSize); - } - } - - public sealed class KeyframeFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Keyframe value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.time); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.value); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.inTangent); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.outTangent); - return offset - startOffset; - } - - public global::UnityEngine.Keyframe Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __time__ = default(float); - var __value__ = default(float); - var __inTangent__ = default(float); - var __outTangent__ = default(float); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __time__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 1: - __value__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 2: - __inTangent__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 3: - __outTangent__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.Keyframe(__time__, __value__, __inTangent__, __outTangent__); - ____result.time = __time__; - ____result.value = __value__; - ____result.inTangent = __inTangent__; - ____result.outTangent = __outTangent__; - return ____result; - } - } - - - public sealed class AnimationCurveFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.AnimationCurve value, global::MessagePack.IFormatterResolver formatterResolver) - { - if (value == null) - { - return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); - } - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 3); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.keys, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.postWrapMode, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.preWrapMode, formatterResolver); - return offset - startOffset; - } - - public global::UnityEngine.AnimationCurve Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __keys__ = default(global::UnityEngine.Keyframe[]); - var __postWrapMode__ = default(global::UnityEngine.WrapMode); - var __preWrapMode__ = default(global::UnityEngine.WrapMode); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __keys__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - case 1: - __postWrapMode__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - case 2: - __preWrapMode__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.AnimationCurve(); - ____result.keys = __keys__; - ____result.postWrapMode = __postWrapMode__; - ____result.preWrapMode = __preWrapMode__; - return ____result; - } - } - - public sealed class Matrix4x4Formatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Matrix4x4 value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteArrayHeader(ref bytes, offset, 16); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m00); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m10); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m20); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m30); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m01); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m11); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m21); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m31); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m02); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m12); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m22); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m32); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m03); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m13); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m23); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m33); - return offset - startOffset; - } - - public global::UnityEngine.Matrix4x4 Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __m00__ = default(float); - var __m10__ = default(float); - var __m20__ = default(float); - var __m30__ = default(float); - var __m01__ = default(float); - var __m11__ = default(float); - var __m21__ = default(float); - var __m31__ = default(float); - var __m02__ = default(float); - var __m12__ = default(float); - var __m22__ = default(float); - var __m32__ = default(float); - var __m03__ = default(float); - var __m13__ = default(float); - var __m23__ = default(float); - var __m33__ = default(float); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __m00__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 1: - __m10__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 2: - __m20__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 3: - __m30__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 4: - __m01__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 5: - __m11__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 6: - __m21__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 7: - __m31__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 8: - __m02__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 9: - __m12__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 10: - __m22__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 11: - __m32__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 12: - __m03__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 13: - __m13__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 14: - __m23__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 15: - __m33__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.Matrix4x4(); - ____result.m00 = __m00__; - ____result.m10 = __m10__; - ____result.m20 = __m20__; - ____result.m30 = __m30__; - ____result.m01 = __m01__; - ____result.m11 = __m11__; - ____result.m21 = __m21__; - ____result.m31 = __m31__; - ____result.m02 = __m02__; - ____result.m12 = __m12__; - ____result.m22 = __m22__; - ____result.m32 = __m32__; - ____result.m03 = __m03__; - ____result.m13 = __m13__; - ____result.m23 = __m23__; - ____result.m33 = __m33__; - return ____result; - } - } - - - public sealed class GradientColorKeyFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.GradientColorKey value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.color, formatterResolver); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.time); - return offset - startOffset; - } - - public global::UnityEngine.GradientColorKey Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __color__ = default(global::UnityEngine.Color); - var __time__ = default(float); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __color__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - case 1: - __time__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.GradientColorKey(__color__, __time__); - ____result.color = __color__; - ____result.time = __time__; - return ____result; - } - } - - - public sealed class GradientAlphaKeyFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.GradientAlphaKey value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.alpha); - offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.time); - return offset - startOffset; - } - - public global::UnityEngine.GradientAlphaKey Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __alpha__ = default(float); - var __time__ = default(float); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __alpha__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - case 1: - __time__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.GradientAlphaKey(__alpha__, __time__); - ____result.alpha = __alpha__; - ____result.time = __time__; - return ____result; - } - } - - - public sealed class GradientFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Gradient value, global::MessagePack.IFormatterResolver formatterResolver) - { - if (value == null) - { - return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); - } - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 3); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.colorKeys, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.alphaKeys, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.mode, formatterResolver); - return offset - startOffset; - } - - public global::UnityEngine.Gradient Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __colorKeys__ = default(global::UnityEngine.GradientColorKey[]); - var __alphaKeys__ = default(global::UnityEngine.GradientAlphaKey[]); - var __mode__ = default(global::UnityEngine.GradientMode); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __colorKeys__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - case 1: - __alphaKeys__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - case 2: - __mode__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.Gradient(); - ____result.colorKeys = __colorKeys__; - ____result.alphaKeys = __alphaKeys__; - ____result.mode = __mode__; - return ____result; - } - } - - - public sealed class Color32Formatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Color32 value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); - offset += MessagePackBinary.WriteByte(ref bytes, offset, value.r); - offset += MessagePackBinary.WriteByte(ref bytes, offset, value.g); - offset += MessagePackBinary.WriteByte(ref bytes, offset, value.b); - offset += MessagePackBinary.WriteByte(ref bytes, offset, value.a); - return offset - startOffset; - } - - public global::UnityEngine.Color32 Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __r__ = default(byte); - var __g__ = default(byte); - var __b__ = default(byte); - var __a__ = default(byte); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __r__ = MessagePackBinary.ReadByte(bytes, offset, out readSize); - break; - case 1: - __g__ = MessagePackBinary.ReadByte(bytes, offset, out readSize); - break; - case 2: - __b__ = MessagePackBinary.ReadByte(bytes, offset, out readSize); - break; - case 3: - __a__ = MessagePackBinary.ReadByte(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.Color32(__r__, __g__, __b__, __a__); - ____result.r = __r__; - ____result.g = __g__; - ____result.b = __b__; - ____result.a = __a__; - return ____result; - } - } - - - public sealed class RectOffsetFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.RectOffset value, global::MessagePack.IFormatterResolver formatterResolver) - { - if (value == null) - { - return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); - } - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.left); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.right); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.top); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.bottom); - return offset - startOffset; - } - - public global::UnityEngine.RectOffset Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __left__ = default(int); - var __right__ = default(int); - var __top__ = default(int); - var __bottom__ = default(int); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __left__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - case 1: - __right__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - case 2: - __top__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - case 3: - __bottom__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.RectOffset(); - ____result.left = __left__; - ____result.right = __right__; - ____result.top = __top__; - ____result.bottom = __bottom__; - return ____result; - } - } - - - public sealed class LayerMaskFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.LayerMask value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.value); - return offset - startOffset; - } - - public global::UnityEngine.LayerMask Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __value__ = default(int); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __value__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.LayerMask(); - ____result.value = __value__; - return ____result; - } - } - -#if UNITY_2017_2_OR_NEWER - - public sealed class Vector2IntFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Vector2Int value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.x); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.y); - return offset - startOffset; - } - - public global::UnityEngine.Vector2Int Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __x__ = default(int); - var __y__ = default(int); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __x__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - case 1: - __y__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.Vector2Int(__x__, __y__); - ____result.x = __x__; - ____result.y = __y__; - return ____result; - } - } - - - public sealed class Vector3IntFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Vector3Int value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 3); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.x); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.y); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.z); - return offset - startOffset; - } - - public global::UnityEngine.Vector3Int Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __x__ = default(int); - var __y__ = default(int); - var __z__ = default(int); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __x__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - case 1: - __y__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - case 2: - __z__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.Vector3Int(__x__, __y__, __z__); - ____result.x = __x__; - ____result.y = __y__; - ____result.z = __z__; - return ____result; - } - } - - - public sealed class RangeIntFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.RangeInt value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.start); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.length); - return offset - startOffset; - } - - public global::UnityEngine.RangeInt Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __start__ = default(int); - var __length__ = default(int); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __start__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - case 1: - __length__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.RangeInt(__start__, __length__); - ____result.start = __start__; - ____result.length = __length__; - return ____result; - } - } - - - public sealed class RectIntFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.RectInt value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.x); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.y); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.width); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.height); - return offset - startOffset; - } - - public global::UnityEngine.RectInt Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __x__ = default(int); - var __y__ = default(int); - var __width__ = default(int); - var __height__ = default(int); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __x__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - case 1: - __y__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - case 2: - __width__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - case 3: - __height__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.RectInt(__x__, __y__, __width__, __height__); - ____result.x = __x__; - ____result.y = __y__; - ____result.width = __width__; - ____result.height = __height__; - return ____result; - } - } - - - public sealed class BoundsIntFormatter : global::MessagePack.Formatters.IMessagePackFormatter - { - - public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.BoundsInt value, global::MessagePack.IFormatterResolver formatterResolver) - { - - var startOffset = offset; - offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.position, formatterResolver); - offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.size, formatterResolver); - return offset - startOffset; - } - - public global::UnityEngine.BoundsInt Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) - { - if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) - { - throw new InvalidOperationException("typecode is null, struct not supported"); - } - - var startOffset = offset; - var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); - offset += readSize; - - var __position__ = default(global::UnityEngine.Vector3Int); - var __size__ = default(global::UnityEngine.Vector3Int); - - for (int i = 0; i < length; i++) - { - var key = i; - - switch (key) - { - case 0: - __position__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - case 1: - __size__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); - break; - default: - readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); - break; - } - offset += readSize; - } - - readSize = offset - startOffset; - - var ____result = new global::UnityEngine.BoundsInt(__position__, __size__); - ____result.position = __position__; - ____result.size = __size__; - return ____result; - } - } - -#endif +using System; +using MessagePack; + +namespace MessagePack.Unity +{ + public sealed class Vector2Formatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Vector2 value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.x); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.y); + return offset - startOffset; + } + + public global::UnityEngine.Vector2 Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var x = default(float); + var y = default(float); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + x = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 1: + y = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var result = new global::UnityEngine.Vector2(x, y); + return result; + } + } + + + public sealed class Vector3Formatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Vector3 value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 3); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.x); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.y); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.z); + return offset - startOffset; + } + + public global::UnityEngine.Vector3 Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var x = default(float); + var y = default(float); + var z = default(float); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + x = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 1: + y = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 2: + z = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var result = new global::UnityEngine.Vector3(x, y, z); + return result; + } + } + + + public sealed class Vector4Formatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Vector4 value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.x); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.y); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.z); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.w); + return offset - startOffset; + } + + public global::UnityEngine.Vector4 Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var x = default(float); + var y = default(float); + var z = default(float); + var w = default(float); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + x = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 1: + y = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 2: + z = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 3: + w = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var result = new global::UnityEngine.Vector4(x, y, z, w); + return result; + } + } + + + public sealed class QuaternionFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Quaternion value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.x); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.y); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.z); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.w); + return offset - startOffset; + } + + public global::UnityEngine.Quaternion Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var x = default(float); + var y = default(float); + var z = default(float); + var w = default(float); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + x = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 1: + y = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 2: + z = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 3: + w = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var result = new global::UnityEngine.Quaternion(x, y, z, w); + return result; + } + } + + + public sealed class ColorFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Color value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.r); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.g); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.b); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.a); + return offset - startOffset; + } + + public global::UnityEngine.Color Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var r = default(float); + var g = default(float); + var b = default(float); + var a = default(float); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + r = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 1: + g = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 2: + b = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 3: + a = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var result = new global::UnityEngine.Color(r, g, b, a); + return result; + } + } + + + public sealed class BoundsFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Bounds value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.center, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.size, formatterResolver); + return offset - startOffset; + } + + public global::UnityEngine.Bounds Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var center = default(global::UnityEngine.Vector3); + var size = default(global::UnityEngine.Vector3); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + center = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + case 1: + size = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var result = new global::UnityEngine.Bounds(center, size); + return result; + } + } + + + public sealed class RectFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Rect value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.x); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.y); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.width); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.height); + return offset - startOffset; + } + + public global::UnityEngine.Rect Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var x = default(float); + var y = default(float); + var width = default(float); + var height = default(float); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + x = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 1: + y = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 2: + width = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 3: + height = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var result = new global::UnityEngine.Rect(x, y, width, height); + return result; + } + } + + // additional + + public sealed class WrapModeFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.WrapMode value, global::MessagePack.IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteInt32(ref bytes, offset, (Int32)value); + } + + public global::UnityEngine.WrapMode Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + return (global::UnityEngine.WrapMode)MessagePackBinary.ReadInt32(bytes, offset, out readSize); + } + } + + public sealed class GradientModeFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.GradientMode value, global::MessagePack.IFormatterResolver formatterResolver) + { + return MessagePackBinary.WriteInt32(ref bytes, offset, (Int32)value); + } + + public global::UnityEngine.GradientMode Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + return (global::UnityEngine.GradientMode)MessagePackBinary.ReadInt32(bytes, offset, out readSize); + } + } + + public sealed class KeyframeFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Keyframe value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.time); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.value); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.inTangent); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.outTangent); + return offset - startOffset; + } + + public global::UnityEngine.Keyframe Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __time__ = default(float); + var __value__ = default(float); + var __inTangent__ = default(float); + var __outTangent__ = default(float); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __time__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 1: + __value__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 2: + __inTangent__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 3: + __outTangent__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.Keyframe(__time__, __value__, __inTangent__, __outTangent__); + ____result.time = __time__; + ____result.value = __value__; + ____result.inTangent = __inTangent__; + ____result.outTangent = __outTangent__; + return ____result; + } + } + + + public sealed class AnimationCurveFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.AnimationCurve value, global::MessagePack.IFormatterResolver formatterResolver) + { + if (value == null) + { + return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); + } + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 3); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.keys, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.postWrapMode, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.preWrapMode, formatterResolver); + return offset - startOffset; + } + + public global::UnityEngine.AnimationCurve Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __keys__ = default(global::UnityEngine.Keyframe[]); + var __postWrapMode__ = default(global::UnityEngine.WrapMode); + var __preWrapMode__ = default(global::UnityEngine.WrapMode); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __keys__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + case 1: + __postWrapMode__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + case 2: + __preWrapMode__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.AnimationCurve(); + ____result.keys = __keys__; + ____result.postWrapMode = __postWrapMode__; + ____result.preWrapMode = __preWrapMode__; + return ____result; + } + } + + public sealed class Matrix4x4Formatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Matrix4x4 value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteArrayHeader(ref bytes, offset, 16); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m00); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m10); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m20); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m30); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m01); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m11); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m21); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m31); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m02); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m12); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m22); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m32); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m03); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m13); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m23); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.m33); + return offset - startOffset; + } + + public global::UnityEngine.Matrix4x4 Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __m00__ = default(float); + var __m10__ = default(float); + var __m20__ = default(float); + var __m30__ = default(float); + var __m01__ = default(float); + var __m11__ = default(float); + var __m21__ = default(float); + var __m31__ = default(float); + var __m02__ = default(float); + var __m12__ = default(float); + var __m22__ = default(float); + var __m32__ = default(float); + var __m03__ = default(float); + var __m13__ = default(float); + var __m23__ = default(float); + var __m33__ = default(float); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __m00__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 1: + __m10__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 2: + __m20__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 3: + __m30__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 4: + __m01__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 5: + __m11__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 6: + __m21__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 7: + __m31__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 8: + __m02__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 9: + __m12__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 10: + __m22__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 11: + __m32__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 12: + __m03__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 13: + __m13__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 14: + __m23__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 15: + __m33__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.Matrix4x4(); + ____result.m00 = __m00__; + ____result.m10 = __m10__; + ____result.m20 = __m20__; + ____result.m30 = __m30__; + ____result.m01 = __m01__; + ____result.m11 = __m11__; + ____result.m21 = __m21__; + ____result.m31 = __m31__; + ____result.m02 = __m02__; + ____result.m12 = __m12__; + ____result.m22 = __m22__; + ____result.m32 = __m32__; + ____result.m03 = __m03__; + ____result.m13 = __m13__; + ____result.m23 = __m23__; + ____result.m33 = __m33__; + return ____result; + } + } + + + public sealed class GradientColorKeyFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.GradientColorKey value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.color, formatterResolver); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.time); + return offset - startOffset; + } + + public global::UnityEngine.GradientColorKey Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __color__ = default(global::UnityEngine.Color); + var __time__ = default(float); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __color__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + case 1: + __time__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.GradientColorKey(__color__, __time__); + ____result.color = __color__; + ____result.time = __time__; + return ____result; + } + } + + + public sealed class GradientAlphaKeyFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.GradientAlphaKey value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.alpha); + offset += MessagePackBinary.WriteSingle(ref bytes, offset, value.time); + return offset - startOffset; + } + + public global::UnityEngine.GradientAlphaKey Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __alpha__ = default(float); + var __time__ = default(float); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __alpha__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + case 1: + __time__ = MessagePackBinary.ReadSingle(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.GradientAlphaKey(__alpha__, __time__); + ____result.alpha = __alpha__; + ____result.time = __time__; + return ____result; + } + } + + + public sealed class GradientFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Gradient value, global::MessagePack.IFormatterResolver formatterResolver) + { + if (value == null) + { + return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); + } + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 3); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.colorKeys, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.alphaKeys, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.mode, formatterResolver); + return offset - startOffset; + } + + public global::UnityEngine.Gradient Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __colorKeys__ = default(global::UnityEngine.GradientColorKey[]); + var __alphaKeys__ = default(global::UnityEngine.GradientAlphaKey[]); + var __mode__ = default(global::UnityEngine.GradientMode); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __colorKeys__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + case 1: + __alphaKeys__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + case 2: + __mode__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.Gradient(); + ____result.colorKeys = __colorKeys__; + ____result.alphaKeys = __alphaKeys__; + ____result.mode = __mode__; + return ____result; + } + } + + + public sealed class Color32Formatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Color32 value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); + offset += MessagePackBinary.WriteByte(ref bytes, offset, value.r); + offset += MessagePackBinary.WriteByte(ref bytes, offset, value.g); + offset += MessagePackBinary.WriteByte(ref bytes, offset, value.b); + offset += MessagePackBinary.WriteByte(ref bytes, offset, value.a); + return offset - startOffset; + } + + public global::UnityEngine.Color32 Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __r__ = default(byte); + var __g__ = default(byte); + var __b__ = default(byte); + var __a__ = default(byte); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __r__ = MessagePackBinary.ReadByte(bytes, offset, out readSize); + break; + case 1: + __g__ = MessagePackBinary.ReadByte(bytes, offset, out readSize); + break; + case 2: + __b__ = MessagePackBinary.ReadByte(bytes, offset, out readSize); + break; + case 3: + __a__ = MessagePackBinary.ReadByte(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.Color32(__r__, __g__, __b__, __a__); + ____result.r = __r__; + ____result.g = __g__; + ____result.b = __b__; + ____result.a = __a__; + return ____result; + } + } + + + public sealed class RectOffsetFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.RectOffset value, global::MessagePack.IFormatterResolver formatterResolver) + { + if (value == null) + { + return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); + } + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.left); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.right); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.top); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.bottom); + return offset - startOffset; + } + + public global::UnityEngine.RectOffset Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __left__ = default(int); + var __right__ = default(int); + var __top__ = default(int); + var __bottom__ = default(int); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __left__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 1: + __right__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 2: + __top__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 3: + __bottom__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.RectOffset(); + ____result.left = __left__; + ____result.right = __right__; + ____result.top = __top__; + ____result.bottom = __bottom__; + return ____result; + } + } + + + public sealed class LayerMaskFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.LayerMask value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.value); + return offset - startOffset; + } + + public global::UnityEngine.LayerMask Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __value__ = default(int); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __value__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.LayerMask(); + ____result.value = __value__; + return ____result; + } + } + +#if UNITY_2017_2_OR_NEWER + + public sealed class Vector2IntFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Vector2Int value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.x); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.y); + return offset - startOffset; + } + + public global::UnityEngine.Vector2Int Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __x__ = default(int); + var __y__ = default(int); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __x__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 1: + __y__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.Vector2Int(__x__, __y__); + ____result.x = __x__; + ____result.y = __y__; + return ____result; + } + } + + + public sealed class Vector3IntFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.Vector3Int value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 3); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.x); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.y); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.z); + return offset - startOffset; + } + + public global::UnityEngine.Vector3Int Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __x__ = default(int); + var __y__ = default(int); + var __z__ = default(int); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __x__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 1: + __y__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 2: + __z__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.Vector3Int(__x__, __y__, __z__); + ____result.x = __x__; + ____result.y = __y__; + ____result.z = __z__; + return ____result; + } + } + + + public sealed class RangeIntFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.RangeInt value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.start); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.length); + return offset - startOffset; + } + + public global::UnityEngine.RangeInt Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __start__ = default(int); + var __length__ = default(int); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __start__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 1: + __length__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.RangeInt(__start__, __length__); + ____result.start = __start__; + ____result.length = __length__; + return ____result; + } + } + + + public sealed class RectIntFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.RectInt value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.x); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.y); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.width); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.height); + return offset - startOffset; + } + + public global::UnityEngine.RectInt Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __x__ = default(int); + var __y__ = default(int); + var __width__ = default(int); + var __height__ = default(int); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __x__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 1: + __y__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 2: + __width__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 3: + __height__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.RectInt(__x__, __y__, __width__, __height__); + ____result.x = __x__; + ____result.y = __y__; + ____result.width = __width__; + ____result.height = __height__; + return ____result; + } + } + + + public sealed class BoundsIntFormatter : global::MessagePack.Formatters.IMessagePackFormatter + { + + public int Serialize(ref byte[] bytes, int offset, global::UnityEngine.BoundsInt value, global::MessagePack.IFormatterResolver formatterResolver) + { + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.position, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify().Serialize(ref bytes, offset, value.size, formatterResolver); + return offset - startOffset; + } + + public global::UnityEngine.BoundsInt Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + throw new InvalidOperationException("typecode is null, struct not supported"); + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __position__ = default(global::UnityEngine.Vector3Int); + var __size__ = default(global::UnityEngine.Vector3Int); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __position__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + case 1: + __size__ = formatterResolver.GetFormatterWithVerify().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::UnityEngine.BoundsInt(__position__, __size__); + ____result.position = __position__; + ____result.size = __size__; + return ____result; + } + } + +#endif } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Unity/UnityResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Unity/UnityResolver.cs index 475e921d1..394e99eea 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Unity/UnityResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/Unity/UnityResolver.cs @@ -1,194 +1,194 @@ -using MessagePack.Formatters; -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace MessagePack.Unity -{ - public class UnityResolver : IFormatterResolver - { - public static IFormatterResolver Instance = new UnityResolver(); - - UnityResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - formatter = (IMessagePackFormatter)UnityResolveryResolverGetFormatterHelper.GetFormatter(typeof(T)); - } - } - } - - internal static class UnityResolveryResolverGetFormatterHelper - { - static readonly Dictionary formatterMap = new Dictionary() - { - // standard - {typeof(Vector2), new Vector2Formatter()}, - {typeof(Vector3), new Vector3Formatter()}, - {typeof(Vector4), new Vector4Formatter()}, - {typeof(Quaternion), new QuaternionFormatter()}, - {typeof(Color), new ColorFormatter()}, - {typeof(Bounds), new BoundsFormatter()}, - {typeof(Rect), new RectFormatter()}, - {typeof(Vector2?), new StaticNullableFormatter(new Vector2Formatter())}, - {typeof(Vector3?), new StaticNullableFormatter(new Vector3Formatter())}, - {typeof(Vector4?), new StaticNullableFormatter(new Vector4Formatter())}, - {typeof(Quaternion?),new StaticNullableFormatter(new QuaternionFormatter())}, - {typeof(Color?),new StaticNullableFormatter(new ColorFormatter())}, - {typeof(Bounds?),new StaticNullableFormatter(new BoundsFormatter())}, - {typeof(Rect?),new StaticNullableFormatter(new RectFormatter())}, - // standard + array - {typeof(Vector2[]),new ArrayFormatter()}, - {typeof(Vector3[]), new ArrayFormatter()}, - {typeof(Vector4[]), new ArrayFormatter()}, - {typeof(Quaternion[]), new ArrayFormatter()}, - {typeof(Color[]), new ArrayFormatter()}, - {typeof(Bounds[]), new ArrayFormatter()}, - {typeof(Rect[]), new ArrayFormatter()}, - {typeof(Vector2?[]), new ArrayFormatter()}, - {typeof(Vector3?[]), new ArrayFormatter()}, - {typeof(Vector4?[]), new ArrayFormatter()}, - {typeof(Quaternion?[]),new ArrayFormatter()}, - {typeof(Color?[]),new ArrayFormatter()}, - {typeof(Bounds?[]),new ArrayFormatter()}, - {typeof(Rect?[]),new ArrayFormatter()}, - // standard + list - {typeof(List),new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List),new ListFormatter()}, - {typeof(List),new ListFormatter()}, - {typeof(List),new ListFormatter()}, - {typeof(List),new ListFormatter()}, - - // new - {typeof(AnimationCurve), new AnimationCurveFormatter()}, - {typeof(RectOffset), new RectOffsetFormatter()}, - {typeof(Gradient), new GradientFormatter() }, - {typeof(WrapMode), new WrapModeFormatter()}, - {typeof(GradientMode), new GradientModeFormatter()}, - {typeof(Keyframe), new KeyframeFormatter()}, - {typeof(Matrix4x4), new Matrix4x4Formatter()}, - {typeof(GradientColorKey), new GradientColorKeyFormatter()}, - {typeof(GradientAlphaKey), new GradientAlphaKeyFormatter()}, - {typeof(Color32), new Color32Formatter()}, - {typeof(LayerMask), new LayerMaskFormatter()}, - {typeof(WrapMode?), new StaticNullableFormatter(new WrapModeFormatter())}, - {typeof(GradientMode?), new StaticNullableFormatter(new GradientModeFormatter())}, - {typeof(Keyframe?), new StaticNullableFormatter(new KeyframeFormatter())}, - {typeof(Matrix4x4?), new StaticNullableFormatter(new Matrix4x4Formatter())}, - {typeof(GradientColorKey?), new StaticNullableFormatter(new GradientColorKeyFormatter())}, - {typeof(GradientAlphaKey?), new StaticNullableFormatter(new GradientAlphaKeyFormatter())}, - {typeof(Color32?), new StaticNullableFormatter(new Color32Formatter())}, - {typeof(LayerMask?), new StaticNullableFormatter(new LayerMaskFormatter())}, - // new + array - {typeof(AnimationCurve[]), new ArrayFormatter()}, - {typeof(RectOffset[]), new ArrayFormatter()}, - {typeof(Gradient[]), new ArrayFormatter() }, - {typeof(WrapMode[]), new ArrayFormatter()}, - {typeof(GradientMode[]), new ArrayFormatter()}, - {typeof(Keyframe[]), new ArrayFormatter()}, - {typeof(Matrix4x4[]), new ArrayFormatter()}, - {typeof(GradientColorKey[]), new ArrayFormatter()}, - {typeof(GradientAlphaKey[]), new ArrayFormatter()}, - {typeof(Color32[]), new ArrayFormatter()}, - {typeof(LayerMask[]), new ArrayFormatter()}, - {typeof(WrapMode?[]), new ArrayFormatter()}, - {typeof(GradientMode?[]), new ArrayFormatter()}, - {typeof(Keyframe?[]), new ArrayFormatter()}, - {typeof(Matrix4x4?[]), new ArrayFormatter()}, - {typeof(GradientColorKey?[]), new ArrayFormatter()}, - {typeof(GradientAlphaKey?[]), new ArrayFormatter()}, - {typeof(Color32?[]), new ArrayFormatter()}, - {typeof(LayerMask?[]), new ArrayFormatter()}, - // new + list - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter() }, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - - // unity 2017.2 -#if UNITY_2017_2_OR_NEWER - - {typeof(Vector2Int), new Vector2IntFormatter()}, - {typeof(Vector3Int), new Vector3IntFormatter()}, - {typeof(RangeInt), new RangeIntFormatter()}, - {typeof(RectInt), new RectIntFormatter()}, - {typeof(BoundsInt), new BoundsIntFormatter()}, - {typeof(Vector2Int?), new StaticNullableFormatter(new Vector2IntFormatter())}, - {typeof(Vector3Int?), new StaticNullableFormatter(new Vector3IntFormatter())}, - {typeof(RangeInt?), new StaticNullableFormatter(new RangeIntFormatter())}, - {typeof(RectInt?), new StaticNullableFormatter(new RectIntFormatter())}, - {typeof(BoundsInt?), new StaticNullableFormatter(new BoundsIntFormatter())}, - // unity 2017.2 + array - {typeof(Vector2Int[]), new ArrayFormatter()}, - {typeof(Vector3Int[]), new ArrayFormatter()}, - {typeof(RangeInt[]), new ArrayFormatter()}, - {typeof(RectInt[]), new ArrayFormatter()}, - {typeof(BoundsInt[]), new ArrayFormatter()}, - {typeof(Vector2Int?[]), new ArrayFormatter()}, - {typeof(Vector3Int?[]), new ArrayFormatter()}, - {typeof(RangeInt?[]), new ArrayFormatter()}, - {typeof(RectInt?[]), new ArrayFormatter()}, - {typeof(BoundsInt?[]), new ArrayFormatter()}, - // unity 2017.2 + list - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - {typeof(List), new ListFormatter()}, - -#endif - }; - - internal static object GetFormatter(Type t) - { - object formatter; - if (formatterMap.TryGetValue(t, out formatter)) - { - return formatter; - } - - return null; - } - } +using MessagePack.Formatters; +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace MessagePack.Unity +{ + public class UnityResolver : IFormatterResolver + { + public static IFormatterResolver Instance = new UnityResolver(); + + UnityResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + formatter = (IMessagePackFormatter)UnityResolveryResolverGetFormatterHelper.GetFormatter(typeof(T)); + } + } + } + + internal static class UnityResolveryResolverGetFormatterHelper + { + static readonly Dictionary formatterMap = new Dictionary() + { + // standard + {typeof(Vector2), new Vector2Formatter()}, + {typeof(Vector3), new Vector3Formatter()}, + {typeof(Vector4), new Vector4Formatter()}, + {typeof(Quaternion), new QuaternionFormatter()}, + {typeof(Color), new ColorFormatter()}, + {typeof(Bounds), new BoundsFormatter()}, + {typeof(Rect), new RectFormatter()}, + {typeof(Vector2?), new StaticNullableFormatter(new Vector2Formatter())}, + {typeof(Vector3?), new StaticNullableFormatter(new Vector3Formatter())}, + {typeof(Vector4?), new StaticNullableFormatter(new Vector4Formatter())}, + {typeof(Quaternion?),new StaticNullableFormatter(new QuaternionFormatter())}, + {typeof(Color?),new StaticNullableFormatter(new ColorFormatter())}, + {typeof(Bounds?),new StaticNullableFormatter(new BoundsFormatter())}, + {typeof(Rect?),new StaticNullableFormatter(new RectFormatter())}, + // standard + array + {typeof(Vector2[]),new ArrayFormatter()}, + {typeof(Vector3[]), new ArrayFormatter()}, + {typeof(Vector4[]), new ArrayFormatter()}, + {typeof(Quaternion[]), new ArrayFormatter()}, + {typeof(Color[]), new ArrayFormatter()}, + {typeof(Bounds[]), new ArrayFormatter()}, + {typeof(Rect[]), new ArrayFormatter()}, + {typeof(Vector2?[]), new ArrayFormatter()}, + {typeof(Vector3?[]), new ArrayFormatter()}, + {typeof(Vector4?[]), new ArrayFormatter()}, + {typeof(Quaternion?[]),new ArrayFormatter()}, + {typeof(Color?[]),new ArrayFormatter()}, + {typeof(Bounds?[]),new ArrayFormatter()}, + {typeof(Rect?[]),new ArrayFormatter()}, + // standard + list + {typeof(List),new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List),new ListFormatter()}, + {typeof(List),new ListFormatter()}, + {typeof(List),new ListFormatter()}, + {typeof(List),new ListFormatter()}, + + // new + {typeof(AnimationCurve), new AnimationCurveFormatter()}, + {typeof(RectOffset), new RectOffsetFormatter()}, + {typeof(Gradient), new GradientFormatter() }, + {typeof(WrapMode), new WrapModeFormatter()}, + {typeof(GradientMode), new GradientModeFormatter()}, + {typeof(Keyframe), new KeyframeFormatter()}, + {typeof(Matrix4x4), new Matrix4x4Formatter()}, + {typeof(GradientColorKey), new GradientColorKeyFormatter()}, + {typeof(GradientAlphaKey), new GradientAlphaKeyFormatter()}, + {typeof(Color32), new Color32Formatter()}, + {typeof(LayerMask), new LayerMaskFormatter()}, + {typeof(WrapMode?), new StaticNullableFormatter(new WrapModeFormatter())}, + {typeof(GradientMode?), new StaticNullableFormatter(new GradientModeFormatter())}, + {typeof(Keyframe?), new StaticNullableFormatter(new KeyframeFormatter())}, + {typeof(Matrix4x4?), new StaticNullableFormatter(new Matrix4x4Formatter())}, + {typeof(GradientColorKey?), new StaticNullableFormatter(new GradientColorKeyFormatter())}, + {typeof(GradientAlphaKey?), new StaticNullableFormatter(new GradientAlphaKeyFormatter())}, + {typeof(Color32?), new StaticNullableFormatter(new Color32Formatter())}, + {typeof(LayerMask?), new StaticNullableFormatter(new LayerMaskFormatter())}, + // new + array + {typeof(AnimationCurve[]), new ArrayFormatter()}, + {typeof(RectOffset[]), new ArrayFormatter()}, + {typeof(Gradient[]), new ArrayFormatter() }, + {typeof(WrapMode[]), new ArrayFormatter()}, + {typeof(GradientMode[]), new ArrayFormatter()}, + {typeof(Keyframe[]), new ArrayFormatter()}, + {typeof(Matrix4x4[]), new ArrayFormatter()}, + {typeof(GradientColorKey[]), new ArrayFormatter()}, + {typeof(GradientAlphaKey[]), new ArrayFormatter()}, + {typeof(Color32[]), new ArrayFormatter()}, + {typeof(LayerMask[]), new ArrayFormatter()}, + {typeof(WrapMode?[]), new ArrayFormatter()}, + {typeof(GradientMode?[]), new ArrayFormatter()}, + {typeof(Keyframe?[]), new ArrayFormatter()}, + {typeof(Matrix4x4?[]), new ArrayFormatter()}, + {typeof(GradientColorKey?[]), new ArrayFormatter()}, + {typeof(GradientAlphaKey?[]), new ArrayFormatter()}, + {typeof(Color32?[]), new ArrayFormatter()}, + {typeof(LayerMask?[]), new ArrayFormatter()}, + // new + list + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter() }, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + + // unity 2017.2 +#if UNITY_2017_2_OR_NEWER + + {typeof(Vector2Int), new Vector2IntFormatter()}, + {typeof(Vector3Int), new Vector3IntFormatter()}, + {typeof(RangeInt), new RangeIntFormatter()}, + {typeof(RectInt), new RectIntFormatter()}, + {typeof(BoundsInt), new BoundsIntFormatter()}, + {typeof(Vector2Int?), new StaticNullableFormatter(new Vector2IntFormatter())}, + {typeof(Vector3Int?), new StaticNullableFormatter(new Vector3IntFormatter())}, + {typeof(RangeInt?), new StaticNullableFormatter(new RangeIntFormatter())}, + {typeof(RectInt?), new StaticNullableFormatter(new RectIntFormatter())}, + {typeof(BoundsInt?), new StaticNullableFormatter(new BoundsIntFormatter())}, + // unity 2017.2 + array + {typeof(Vector2Int[]), new ArrayFormatter()}, + {typeof(Vector3Int[]), new ArrayFormatter()}, + {typeof(RangeInt[]), new ArrayFormatter()}, + {typeof(RectInt[]), new ArrayFormatter()}, + {typeof(BoundsInt[]), new ArrayFormatter()}, + {typeof(Vector2Int?[]), new ArrayFormatter()}, + {typeof(Vector3Int?[]), new ArrayFormatter()}, + {typeof(RangeInt?[]), new ArrayFormatter()}, + {typeof(RectInt?[]), new ArrayFormatter()}, + {typeof(BoundsInt?[]), new ArrayFormatter()}, + // unity 2017.2 + list + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + {typeof(List), new ListFormatter()}, + +#endif + }; + + internal static object GetFormatter(Type t) + { + object formatter; + if (formatterMap.TryGetValue(t, out formatter)) + { + return formatter; + } + + return null; + } + } } \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/UnsafeExtensions/UnityBlitResolver.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/UnsafeExtensions/UnityBlitResolver.cs index fd8b4f203..c78fd8aae 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/UnsafeExtensions/UnityBlitResolver.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/UnsafeExtensions/UnityBlitResolver.cs @@ -1,116 +1,116 @@ -#if ENABLE_UNSAFE_MSGPACK - -using MessagePack.Formatters; -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace MessagePack.Unity.Extension -{ - /// - /// Special Resolver for Vector2[], Vector3[], Vector4[], Quaternion[], Color[], Bounds[], Rect[] - /// - public class UnityBlitResolver : IFormatterResolver - { - public static IFormatterResolver Instance = new UnityBlitResolver(); - - UnityBlitResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - formatter = (IMessagePackFormatter)UnityBlitResolverGetFormatterHelper.GetFormatter(typeof(T)); - } - } - } - /// - /// Special Resolver for Vector2[], Vector3[], Vector4[], Quaternion[], Color[], Bounds[], Rect[] + int[], float[], double[] - /// - public class UnityBlitWithPrimitiveArrayResolver : IFormatterResolver - { - public static IFormatterResolver Instance = new UnityBlitWithPrimitiveArrayResolver(); - - UnityBlitWithPrimitiveArrayResolver() - { - - } - - public IMessagePackFormatter GetFormatter() - { - return FormatterCache.formatter; - } - - static class FormatterCache - { - public static readonly IMessagePackFormatter formatter; - - static FormatterCache() - { - formatter = (IMessagePackFormatter)UnityBlitWithPrimitiveResolverGetFormatterHelper.GetFormatter(typeof(T)); - if (formatter == null) - { - formatter = UnityBlitResolver.Instance.GetFormatter(); - } - } - } - } - - internal static class UnityBlitResolverGetFormatterHelper - { - static readonly Dictionary formatterMap = new Dictionary() - { - {typeof(Vector2[]), typeof(Vector2ArrayBlitFormatter)}, - {typeof(Vector3[]), typeof(Vector3ArrayBlitFormatter)}, - {typeof(Vector4[]), typeof(Vector4ArrayBlitFormatter)}, - {typeof(Quaternion[]), typeof(QuaternionArrayBlitFormatter)}, - {typeof(Color[]), typeof(ColorArrayBlitFormatter)}, - {typeof(Bounds[]), typeof(BoundsArrayBlitFormatter)}, - {typeof(Rect[]), typeof(RectArrayBlitFormatter)}, - }; - - internal static object GetFormatter(Type t) - { - Type formatterType; - if (formatterMap.TryGetValue(t, out formatterType)) - { - return Activator.CreateInstance(formatterType); - } - - return null; - } - } - - internal static class UnityBlitWithPrimitiveResolverGetFormatterHelper - { - static readonly Dictionary formatterMap = new Dictionary() - { - {typeof(int[]), typeof(IntArrayBlitFormatter)}, - {typeof(float[]), typeof(FloatArrayBlitFormatter)}, - {typeof(double[]), typeof(DoubleArrayBlitFormatter)}, - }; - - internal static object GetFormatter(Type t) - { - Type formatterType; - if (formatterMap.TryGetValue(t, out formatterType)) - { - return Activator.CreateInstance(formatterType); - } - - return null; - } - } -} - +#if ENABLE_UNSAFE_MSGPACK + +using MessagePack.Formatters; +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace MessagePack.Unity.Extension +{ + /// + /// Special Resolver for Vector2[], Vector3[], Vector4[], Quaternion[], Color[], Bounds[], Rect[] + /// + public class UnityBlitResolver : IFormatterResolver + { + public static IFormatterResolver Instance = new UnityBlitResolver(); + + UnityBlitResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + formatter = (IMessagePackFormatter)UnityBlitResolverGetFormatterHelper.GetFormatter(typeof(T)); + } + } + } + /// + /// Special Resolver for Vector2[], Vector3[], Vector4[], Quaternion[], Color[], Bounds[], Rect[] + int[], float[], double[] + /// + public class UnityBlitWithPrimitiveArrayResolver : IFormatterResolver + { + public static IFormatterResolver Instance = new UnityBlitWithPrimitiveArrayResolver(); + + UnityBlitWithPrimitiveArrayResolver() + { + + } + + public IMessagePackFormatter GetFormatter() + { + return FormatterCache.formatter; + } + + static class FormatterCache + { + public static readonly IMessagePackFormatter formatter; + + static FormatterCache() + { + formatter = (IMessagePackFormatter)UnityBlitWithPrimitiveResolverGetFormatterHelper.GetFormatter(typeof(T)); + if (formatter == null) + { + formatter = UnityBlitResolver.Instance.GetFormatter(); + } + } + } + } + + internal static class UnityBlitResolverGetFormatterHelper + { + static readonly Dictionary formatterMap = new Dictionary() + { + {typeof(Vector2[]), typeof(Vector2ArrayBlitFormatter)}, + {typeof(Vector3[]), typeof(Vector3ArrayBlitFormatter)}, + {typeof(Vector4[]), typeof(Vector4ArrayBlitFormatter)}, + {typeof(Quaternion[]), typeof(QuaternionArrayBlitFormatter)}, + {typeof(Color[]), typeof(ColorArrayBlitFormatter)}, + {typeof(Bounds[]), typeof(BoundsArrayBlitFormatter)}, + {typeof(Rect[]), typeof(RectArrayBlitFormatter)}, + }; + + internal static object GetFormatter(Type t) + { + Type formatterType; + if (formatterMap.TryGetValue(t, out formatterType)) + { + return Activator.CreateInstance(formatterType); + } + + return null; + } + } + + internal static class UnityBlitWithPrimitiveResolverGetFormatterHelper + { + static readonly Dictionary formatterMap = new Dictionary() + { + {typeof(int[]), typeof(IntArrayBlitFormatter)}, + {typeof(float[]), typeof(FloatArrayBlitFormatter)}, + {typeof(double[]), typeof(DoubleArrayBlitFormatter)}, + }; + + internal static object GetFormatter(Type t) + { + Type formatterType; + if (formatterMap.TryGetValue(t, out formatterType)) + { + return Activator.CreateInstance(formatterType); + } + + return null; + } + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/UnsafeExtensions/UnsafeBlitFormatter.cs b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/UnsafeExtensions/UnsafeBlitFormatter.cs index cb21f221f..622d60073 100644 --- a/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/UnsafeExtensions/UnsafeBlitFormatter.cs +++ b/samples/ChatApp/ChatApp.Unity/Assets/Scripts/MessagePack/UnsafeExtensions/UnsafeBlitFormatter.cs @@ -1,418 +1,418 @@ -#if ENABLE_UNSAFE_MSGPACK - -using MessagePack.Formatters; -using System; -using System.Collections.Generic; -using System.Text; -using UnityEngine; - -namespace MessagePack.Unity.Extension -{ - internal static class MemoryUtil - { - // If you use memcpy or check alignment and word copy, can more improve performance - public static unsafe void SimpleMemoryCopy(void* dest, void* src, int byteCount) - { - var pDest = (byte*)dest; - var pSrc = (byte*)src; - for (int i = 0; i < byteCount; i++) - { - *pDest = *pSrc; - pDest++; - pSrc++; - } - } - } - - public static class ReservedUnityExtensionTypeCode - { - public const sbyte Vector2 = 30; - public const sbyte Vector3 = 31; - public const sbyte Vector4 = 32; - public const sbyte Quaternion = 33; - public const sbyte Color = 34; - public const sbyte Bounds = 35; - public const sbyte Rect = 36; - public const sbyte Int = 37; - public const sbyte Float = 38; - public const sbyte Double = 39; - } - - // use ext instead of ArrayFormatter for extremely boostup performance. - // Layout: [extHeader, byteSize(integer), isLittlEendian(bool), bytes()] - - // Used Ext:30~36 - - public abstract class UnsafeBlitFormatterBase : IMessagePackFormatter - where T : struct - { - protected abstract sbyte TypeCode { get; } - protected abstract int StructLength { get; } - protected abstract void CopySerializeUnsafe(ref T[] src, ref byte[] dest, int destOffset, int byteLength); - protected abstract void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref T[] dest, int byteLength); - - public unsafe int Serialize(ref byte[] bytes, int offset, T[] value, IFormatterResolver formatterResolver) - { - if (value == null) return MessagePackBinary.WriteNil(ref bytes, offset); - - var startOffset = offset; - - var byteLen = value.Length * StructLength; - - offset += MessagePackBinary.WriteExtensionFormatHeader(ref bytes, offset, TypeCode, byteLen); - offset += MessagePackBinary.WriteInt32(ref bytes, offset, byteLen); // write original header(not array header) - offset += MessagePackBinary.WriteBoolean(ref bytes, offset, BitConverter.IsLittleEndian); - - MessagePackBinary.EnsureCapacity(ref bytes, offset, byteLen); - CopySerializeUnsafe(ref value, ref bytes, offset, byteLen); - - offset += byteLen; - return offset - startOffset; - } - - public unsafe T[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) - { - if (MessagePackBinary.IsNil(bytes, offset)) - { - readSize = 1; - return null; - } - - var startOffset = offset; - var header = MessagePackBinary.ReadExtensionFormatHeader(bytes, offset, out readSize); - offset += readSize; - - if (header.TypeCode != TypeCode) throw new InvalidOperationException("Invalid typeCode."); - - var byteLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); - offset += readSize; - - var isLittleEndian = MessagePackBinary.ReadBoolean(bytes, offset, out readSize); - offset += readSize; - - if (isLittleEndian != BitConverter.IsLittleEndian) - { - Array.Reverse(bytes, offset, byteLength); - } - - var result = new T[byteLength / StructLength]; - CopyDeserializeUnsafe(ref bytes, offset, ref result, byteLength); - offset += byteLength; - - readSize = offset - startOffset; - return result; - } - } - - public class Vector2ArrayBlitFormatter : UnsafeBlitFormatterBase - { - protected override sbyte TypeCode - { - get - { - return ReservedUnityExtensionTypeCode.Vector2; - } - } - - protected override int StructLength - { - get - { - return 8; - } - } - - protected override unsafe void CopySerializeUnsafe(ref Vector2[] src, ref byte[] dest, int destOffset, int byteLength) - { - fixed (void* pSrc = src) - fixed (void* pDest = &dest[destOffset]) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - - protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Vector2[] dest, int byteLength) - { - fixed (void* pSrc = &src[srcOffset]) - fixed (void* pDest = dest) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - } - - public class Vector3ArrayBlitFormatter : UnsafeBlitFormatterBase - { - protected override sbyte TypeCode - { - get - { - return ReservedUnityExtensionTypeCode.Vector3; - } - } - - protected override int StructLength - { - get - { - return 12; - } - } - - protected override unsafe void CopySerializeUnsafe(ref Vector3[] src, ref byte[] dest, int destOffset, int byteLength) - { - fixed (void* pSrc = src) - fixed (void* pDest = &dest[destOffset]) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - - protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Vector3[] dest, int byteLength) - { - fixed (void* pSrc = &src[srcOffset]) - fixed (void* pDest = dest) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - } - - public class Vector4ArrayBlitFormatter : UnsafeBlitFormatterBase - { - protected override sbyte TypeCode - { - get - { - return ReservedUnityExtensionTypeCode.Vector4; - } - } - - protected override int StructLength - { - get - { - return 16; - } - } - - protected override unsafe void CopySerializeUnsafe(ref Vector4[] src, ref byte[] dest, int destOffset, int byteLength) - { - fixed (void* pSrc = src) - fixed (void* pDest = &dest[destOffset]) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - - protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Vector4[] dest, int byteLength) - { - fixed (void* pSrc = &src[srcOffset]) - fixed (void* pDest = dest) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - } - - public class QuaternionArrayBlitFormatter : UnsafeBlitFormatterBase - { - protected override sbyte TypeCode - { - get - { - return ReservedUnityExtensionTypeCode.Quaternion; - } - } - - protected override int StructLength - { - get - { - return 16; - } - } - - protected override unsafe void CopySerializeUnsafe(ref Quaternion[] src, ref byte[] dest, int destOffset, int byteLength) - { - fixed (void* pSrc = src) - fixed (void* pDest = &dest[destOffset]) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - - protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Quaternion[] dest, int byteLength) - { - fixed (void* pSrc = &src[srcOffset]) - fixed (void* pDest = dest) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - } - - public class ColorArrayBlitFormatter : UnsafeBlitFormatterBase - { - protected override sbyte TypeCode - { - get - { - return ReservedUnityExtensionTypeCode.Color; - } - } - - protected override int StructLength - { - get - { - return 16; - } - } - - protected override unsafe void CopySerializeUnsafe(ref Color[] src, ref byte[] dest, int destOffset, int byteLength) - { - fixed (void* pSrc = src) - fixed (void* pDest = &dest[destOffset]) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - - protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Color[] dest, int byteLength) - { - fixed (void* pSrc = &src[srcOffset]) - fixed (void* pDest = dest) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - } - - public class BoundsArrayBlitFormatter : UnsafeBlitFormatterBase - { - protected override sbyte TypeCode - { - get - { - return ReservedUnityExtensionTypeCode.Bounds; - } - } - - protected override int StructLength - { - get - { - return 24; - } - } - - protected override unsafe void CopySerializeUnsafe(ref Bounds[] src, ref byte[] dest, int destOffset, int byteLength) - { - fixed (void* pSrc = src) - fixed (void* pDest = &dest[destOffset]) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - - protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Bounds[] dest, int byteLength) - { - fixed (void* pSrc = &src[srcOffset]) - fixed (void* pDest = dest) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - } - - public class RectArrayBlitFormatter : UnsafeBlitFormatterBase - { - protected override sbyte TypeCode - { - get - { - return ReservedUnityExtensionTypeCode.Rect; - } - } - - protected override int StructLength - { - get - { - return 16; - } - } - - protected override unsafe void CopySerializeUnsafe(ref Rect[] src, ref byte[] dest, int destOffset, int byteLength) - { - fixed (void* pSrc = src) - fixed (void* pDest = &dest[destOffset]) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - - protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Rect[] dest, int byteLength) - { - fixed (void* pSrc = &src[srcOffset]) - fixed (void* pDest = dest) - { - MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); - } - } - } - - public class IntArrayBlitFormatter : UnsafeBlitFormatterBase - { - protected override sbyte TypeCode { get { return ReservedUnityExtensionTypeCode.Int; } } - - protected override int StructLength { get { return 4; } } - - protected override void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref int[] dest, int byteLength) - { - Buffer.BlockCopy(src, srcOffset, dest, 0, byteLength); - } - - protected override void CopySerializeUnsafe(ref int[] src, ref byte[] dest, int destOffset, int byteLength) - { - Buffer.BlockCopy(src, 0, dest, destOffset, byteLength); - } - } - - public class FloatArrayBlitFormatter : UnsafeBlitFormatterBase - { - protected override sbyte TypeCode { get { return ReservedUnityExtensionTypeCode.Float; } } - - protected override int StructLength { get { return 4; } } - - protected override void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref float[] dest, int byteLength) - { - Buffer.BlockCopy(src, srcOffset, dest, 0, byteLength); - } - - protected override void CopySerializeUnsafe(ref float[] src, ref byte[] dest, int destOffset, int byteLength) - { - Buffer.BlockCopy(src, 0, dest, destOffset, byteLength); - } - } - - public class DoubleArrayBlitFormatter : UnsafeBlitFormatterBase - { - protected override sbyte TypeCode { get { return ReservedUnityExtensionTypeCode.Double; } } - - protected override int StructLength { get { return 8; } } - - protected override void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref double[] dest, int byteLength) - { - Buffer.BlockCopy(src, srcOffset, dest, 0, byteLength); - } - - protected override void CopySerializeUnsafe(ref double[] src, ref byte[] dest, int destOffset, int byteLength) - { - Buffer.BlockCopy(src, 0, dest, destOffset, byteLength); - } - } -} - +#if ENABLE_UNSAFE_MSGPACK + +using MessagePack.Formatters; +using System; +using System.Collections.Generic; +using System.Text; +using UnityEngine; + +namespace MessagePack.Unity.Extension +{ + internal static class MemoryUtil + { + // If you use memcpy or check alignment and word copy, can more improve performance + public static unsafe void SimpleMemoryCopy(void* dest, void* src, int byteCount) + { + var pDest = (byte*)dest; + var pSrc = (byte*)src; + for (int i = 0; i < byteCount; i++) + { + *pDest = *pSrc; + pDest++; + pSrc++; + } + } + } + + public static class ReservedUnityExtensionTypeCode + { + public const sbyte Vector2 = 30; + public const sbyte Vector3 = 31; + public const sbyte Vector4 = 32; + public const sbyte Quaternion = 33; + public const sbyte Color = 34; + public const sbyte Bounds = 35; + public const sbyte Rect = 36; + public const sbyte Int = 37; + public const sbyte Float = 38; + public const sbyte Double = 39; + } + + // use ext instead of ArrayFormatter for extremely boostup performance. + // Layout: [extHeader, byteSize(integer), isLittlEendian(bool), bytes()] + + // Used Ext:30~36 + + public abstract class UnsafeBlitFormatterBase : IMessagePackFormatter + where T : struct + { + protected abstract sbyte TypeCode { get; } + protected abstract int StructLength { get; } + protected abstract void CopySerializeUnsafe(ref T[] src, ref byte[] dest, int destOffset, int byteLength); + protected abstract void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref T[] dest, int byteLength); + + public unsafe int Serialize(ref byte[] bytes, int offset, T[] value, IFormatterResolver formatterResolver) + { + if (value == null) return MessagePackBinary.WriteNil(ref bytes, offset); + + var startOffset = offset; + + var byteLen = value.Length * StructLength; + + offset += MessagePackBinary.WriteExtensionFormatHeader(ref bytes, offset, TypeCode, byteLen); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, byteLen); // write original header(not array header) + offset += MessagePackBinary.WriteBoolean(ref bytes, offset, BitConverter.IsLittleEndian); + + MessagePackBinary.EnsureCapacity(ref bytes, offset, byteLen); + CopySerializeUnsafe(ref value, ref bytes, offset, byteLen); + + offset += byteLen; + return offset - startOffset; + } + + public unsafe T[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var header = MessagePackBinary.ReadExtensionFormatHeader(bytes, offset, out readSize); + offset += readSize; + + if (header.TypeCode != TypeCode) throw new InvalidOperationException("Invalid typeCode."); + + var byteLength = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + var isLittleEndian = MessagePackBinary.ReadBoolean(bytes, offset, out readSize); + offset += readSize; + + if (isLittleEndian != BitConverter.IsLittleEndian) + { + Array.Reverse(bytes, offset, byteLength); + } + + var result = new T[byteLength / StructLength]; + CopyDeserializeUnsafe(ref bytes, offset, ref result, byteLength); + offset += byteLength; + + readSize = offset - startOffset; + return result; + } + } + + public class Vector2ArrayBlitFormatter : UnsafeBlitFormatterBase + { + protected override sbyte TypeCode + { + get + { + return ReservedUnityExtensionTypeCode.Vector2; + } + } + + protected override int StructLength + { + get + { + return 8; + } + } + + protected override unsafe void CopySerializeUnsafe(ref Vector2[] src, ref byte[] dest, int destOffset, int byteLength) + { + fixed (void* pSrc = src) + fixed (void* pDest = &dest[destOffset]) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + + protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Vector2[] dest, int byteLength) + { + fixed (void* pSrc = &src[srcOffset]) + fixed (void* pDest = dest) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + } + + public class Vector3ArrayBlitFormatter : UnsafeBlitFormatterBase + { + protected override sbyte TypeCode + { + get + { + return ReservedUnityExtensionTypeCode.Vector3; + } + } + + protected override int StructLength + { + get + { + return 12; + } + } + + protected override unsafe void CopySerializeUnsafe(ref Vector3[] src, ref byte[] dest, int destOffset, int byteLength) + { + fixed (void* pSrc = src) + fixed (void* pDest = &dest[destOffset]) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + + protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Vector3[] dest, int byteLength) + { + fixed (void* pSrc = &src[srcOffset]) + fixed (void* pDest = dest) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + } + + public class Vector4ArrayBlitFormatter : UnsafeBlitFormatterBase + { + protected override sbyte TypeCode + { + get + { + return ReservedUnityExtensionTypeCode.Vector4; + } + } + + protected override int StructLength + { + get + { + return 16; + } + } + + protected override unsafe void CopySerializeUnsafe(ref Vector4[] src, ref byte[] dest, int destOffset, int byteLength) + { + fixed (void* pSrc = src) + fixed (void* pDest = &dest[destOffset]) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + + protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Vector4[] dest, int byteLength) + { + fixed (void* pSrc = &src[srcOffset]) + fixed (void* pDest = dest) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + } + + public class QuaternionArrayBlitFormatter : UnsafeBlitFormatterBase + { + protected override sbyte TypeCode + { + get + { + return ReservedUnityExtensionTypeCode.Quaternion; + } + } + + protected override int StructLength + { + get + { + return 16; + } + } + + protected override unsafe void CopySerializeUnsafe(ref Quaternion[] src, ref byte[] dest, int destOffset, int byteLength) + { + fixed (void* pSrc = src) + fixed (void* pDest = &dest[destOffset]) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + + protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Quaternion[] dest, int byteLength) + { + fixed (void* pSrc = &src[srcOffset]) + fixed (void* pDest = dest) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + } + + public class ColorArrayBlitFormatter : UnsafeBlitFormatterBase + { + protected override sbyte TypeCode + { + get + { + return ReservedUnityExtensionTypeCode.Color; + } + } + + protected override int StructLength + { + get + { + return 16; + } + } + + protected override unsafe void CopySerializeUnsafe(ref Color[] src, ref byte[] dest, int destOffset, int byteLength) + { + fixed (void* pSrc = src) + fixed (void* pDest = &dest[destOffset]) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + + protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Color[] dest, int byteLength) + { + fixed (void* pSrc = &src[srcOffset]) + fixed (void* pDest = dest) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + } + + public class BoundsArrayBlitFormatter : UnsafeBlitFormatterBase + { + protected override sbyte TypeCode + { + get + { + return ReservedUnityExtensionTypeCode.Bounds; + } + } + + protected override int StructLength + { + get + { + return 24; + } + } + + protected override unsafe void CopySerializeUnsafe(ref Bounds[] src, ref byte[] dest, int destOffset, int byteLength) + { + fixed (void* pSrc = src) + fixed (void* pDest = &dest[destOffset]) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + + protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Bounds[] dest, int byteLength) + { + fixed (void* pSrc = &src[srcOffset]) + fixed (void* pDest = dest) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + } + + public class RectArrayBlitFormatter : UnsafeBlitFormatterBase + { + protected override sbyte TypeCode + { + get + { + return ReservedUnityExtensionTypeCode.Rect; + } + } + + protected override int StructLength + { + get + { + return 16; + } + } + + protected override unsafe void CopySerializeUnsafe(ref Rect[] src, ref byte[] dest, int destOffset, int byteLength) + { + fixed (void* pSrc = src) + fixed (void* pDest = &dest[destOffset]) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + + protected override unsafe void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref Rect[] dest, int byteLength) + { + fixed (void* pSrc = &src[srcOffset]) + fixed (void* pDest = dest) + { + MemoryUtil.SimpleMemoryCopy(pDest, pSrc, byteLength); + } + } + } + + public class IntArrayBlitFormatter : UnsafeBlitFormatterBase + { + protected override sbyte TypeCode { get { return ReservedUnityExtensionTypeCode.Int; } } + + protected override int StructLength { get { return 4; } } + + protected override void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref int[] dest, int byteLength) + { + Buffer.BlockCopy(src, srcOffset, dest, 0, byteLength); + } + + protected override void CopySerializeUnsafe(ref int[] src, ref byte[] dest, int destOffset, int byteLength) + { + Buffer.BlockCopy(src, 0, dest, destOffset, byteLength); + } + } + + public class FloatArrayBlitFormatter : UnsafeBlitFormatterBase + { + protected override sbyte TypeCode { get { return ReservedUnityExtensionTypeCode.Float; } } + + protected override int StructLength { get { return 4; } } + + protected override void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref float[] dest, int byteLength) + { + Buffer.BlockCopy(src, srcOffset, dest, 0, byteLength); + } + + protected override void CopySerializeUnsafe(ref float[] src, ref byte[] dest, int destOffset, int byteLength) + { + Buffer.BlockCopy(src, 0, dest, destOffset, byteLength); + } + } + + public class DoubleArrayBlitFormatter : UnsafeBlitFormatterBase + { + protected override sbyte TypeCode { get { return ReservedUnityExtensionTypeCode.Double; } } + + protected override int StructLength { get { return 8; } } + + protected override void CopyDeserializeUnsafe(ref byte[] src, int srcOffset, ref double[] dest, int byteLength) + { + Buffer.BlockCopy(src, srcOffset, dest, 0, byteLength); + } + + protected override void CopySerializeUnsafe(ref double[] src, ref byte[] dest, int destOffset, int byteLength) + { + Buffer.BlockCopy(src, 0, dest, destOffset, byteLength); + } + } +} + #endif \ No newline at end of file diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/MicroBatchFramework.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/MicroBatchFramework.dll new file mode 100644 index 000000000..e827005d9 Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/MicroBatchFramework.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.CSharp.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.CSharp.dll index a19dcd2fc..a88767799 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.CSharp.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.CSharp.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.Abstractions.dll index 80d73edd0..540e09431 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.Abstractions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.Binder.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.Binder.dll index 2415b679f..f05e2d84b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.Binder.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.Binder.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.EnvironmentVariables.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.EnvironmentVariables.dll new file mode 100644 index 000000000..e482d42a6 Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.EnvironmentVariables.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.FileExtensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.FileExtensions.dll new file mode 100644 index 000000000..15126f98d Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.FileExtensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.Json.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.Json.dll new file mode 100644 index 000000000..01f57dadf Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.Json.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.UserSecrets.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.UserSecrets.dll new file mode 100644 index 000000000..e989698a5 Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.UserSecrets.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.dll index aa1f010ce..50f78a0af 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Configuration.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll index 7d8769b80..be10eccde 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.DependencyInjection.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.DependencyInjection.dll new file mode 100644 index 000000000..7fa7c1f3f Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.DependencyInjection.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.FileProviders.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.FileProviders.Abstractions.dll new file mode 100644 index 000000000..bca33155e Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.FileProviders.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.FileProviders.Physical.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.FileProviders.Physical.dll new file mode 100644 index 000000000..54c1a8348 Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.FileProviders.Physical.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.FileSystemGlobbing.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.FileSystemGlobbing.dll new file mode 100644 index 000000000..0459c635a Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.FileSystemGlobbing.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Hosting.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Hosting.Abstractions.dll new file mode 100644 index 000000000..8f4da6fbd Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Hosting.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Hosting.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Hosting.dll new file mode 100644 index 000000000..e4ebcea2b Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Hosting.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Logging.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Logging.Abstractions.dll index 98b2019d5..4e8e3f2b4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Logging.Abstractions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Logging.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Logging.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Logging.dll index 662d975f2..ceb746240 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Logging.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Logging.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Options.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Options.dll index 065d0157b..b4017e0ad 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Options.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Options.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Primitives.dll index 1999bace8..62324a7a1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Extensions.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.VisualBasic.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.VisualBasic.dll index ae97d147e..3dfbee8a6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.VisualBasic.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.VisualBasic.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Win32.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Win32.Primitives.dll index b9384c5cf..e4c9d6c6a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Win32.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Win32.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Win32.Registry.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Win32.Registry.dll index 2417a5e18..8fbb47e2a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Win32.Registry.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Microsoft.Win32.Registry.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Newtonsoft.Json.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Newtonsoft.Json.dll index 5f2336e6c..e2118f9b9 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Newtonsoft.Json.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Newtonsoft.Json.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/SOS.NETCore.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/SOS.NETCore.dll index e94f2bd94..cd13cd706 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/SOS.NETCore.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/SOS.NETCore.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.AppContext.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.AppContext.dll index e43666ed9..2e1f78f9c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.AppContext.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.AppContext.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Buffers.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Buffers.dll index b7e1641d3..af6130eeb 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Buffers.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Buffers.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.Concurrent.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.Concurrent.dll index e9f5f2cd9..bbf2371e8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.Concurrent.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.Concurrent.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.Immutable.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.Immutable.dll index 049149f17..9a79daed8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.Immutable.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.Immutable.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.NonGeneric.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.NonGeneric.dll index 1f9452684..7fb9ba511 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.NonGeneric.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.NonGeneric.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.Specialized.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.Specialized.dll index e8753d61d..68bcd19f7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.Specialized.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.Specialized.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.dll index fcde605d0..046f7fbbd 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Collections.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.Annotations.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.Annotations.dll index b865600dd..514967adb 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.Annotations.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.Annotations.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.DataAnnotations.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.DataAnnotations.dll index 9d8dd7aaf..7c2afae23 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.DataAnnotations.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.DataAnnotations.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.EventBasedAsync.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.EventBasedAsync.dll index 1fbcff64a..207b8a92a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.EventBasedAsync.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.EventBasedAsync.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.Primitives.dll index 007ce7a93..c87e23a5b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.TypeConverter.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.TypeConverter.dll index a062348a2..33976d877 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.TypeConverter.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.TypeConverter.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.dll index 900e5ad53..f519be800 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ComponentModel.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Configuration.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Configuration.dll index 0825b7f02..6e203423a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Configuration.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Configuration.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Console.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Console.dll index 0f749d10f..27d2ccec7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Console.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Console.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Core.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Core.dll index cf57fe23e..028268033 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Core.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Core.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Data.Common.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Data.Common.dll index 4a6c0a9bc..e1d3915b8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Data.Common.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Data.Common.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Data.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Data.dll index 8bab53ec6..eb88ca7dd 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Data.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Data.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Contracts.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Contracts.dll index 7d7aec3b1..6779173ba 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Contracts.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Contracts.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Debug.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Debug.dll index 3234ad693..7e59d3c64 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Debug.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Debug.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.DiagnosticSource.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.DiagnosticSource.dll index 629e79367..a825bf514 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.DiagnosticSource.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.DiagnosticSource.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.FileVersionInfo.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.FileVersionInfo.dll index a7a964dec..32aaf2bd5 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.FileVersionInfo.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.FileVersionInfo.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Process.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Process.dll index 2c17b2f3f..96a3d4c72 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Process.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Process.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.StackTrace.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.StackTrace.dll index 8b5694679..ca6c52c53 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.StackTrace.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.StackTrace.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.TextWriterTraceListener.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.TextWriterTraceListener.dll index 9b12bb10f..72644aa24 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.TextWriterTraceListener.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.TextWriterTraceListener.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Tools.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Tools.dll index 5f9da618e..ab12c83cf 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Tools.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Tools.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.TraceSource.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.TraceSource.dll index a7e1443e3..0ade0861d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.TraceSource.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.TraceSource.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Tracing.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Tracing.dll index c70f9c87c..9b6819cc7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Tracing.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Diagnostics.Tracing.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Drawing.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Drawing.Primitives.dll index 4616a0c6b..11a15929b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Drawing.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Drawing.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Drawing.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Drawing.dll index 81a72ae1f..cc65b950c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Drawing.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Drawing.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Dynamic.Runtime.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Dynamic.Runtime.dll index c29c70b95..9f7a30dda 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Dynamic.Runtime.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Dynamic.Runtime.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.Calendars.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.Calendars.dll index 54a2a41f7..35dc79fd8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.Calendars.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.Calendars.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.Extensions.dll index a38539614..b9c605a15 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.Native.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.Native.so index 80503c09d..a74afcccf 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.Native.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.Native.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.dll index a45f1fbcc..83927d923 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Globalization.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.Brotli.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.Brotli.dll index 0ce264b36..66c4674df 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.Brotli.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.Brotli.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.FileSystem.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.FileSystem.dll index efe435701..30ff095f6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.FileSystem.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.FileSystem.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.Native.a b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.Native.a index d27f3725a..ddea1ac53 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.Native.a and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.Native.a differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.Native.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.Native.so index cca637e1c..06bf36cfe 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.Native.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.Native.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.ZipFile.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.ZipFile.dll index 954244da0..684dd3b02 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.ZipFile.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.ZipFile.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.dll index 1436ea34c..d7bafd19a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Compression.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.AccessControl.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.AccessControl.dll index 25071a076..a1b83524f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.AccessControl.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.AccessControl.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.DriveInfo.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.DriveInfo.dll index e22174bb4..0c8be1f2a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.DriveInfo.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.DriveInfo.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.Primitives.dll index c1ab63903..3d3ee0e82 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.Watcher.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.Watcher.dll index e76de997d..74faa5d3e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.Watcher.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.Watcher.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.dll index 977a68e93..7edcdd6d6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.FileSystem.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.IsolatedStorage.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.IsolatedStorage.dll index af0580d83..ce78d1c3c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.IsolatedStorage.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.IsolatedStorage.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.MemoryMappedFiles.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.MemoryMappedFiles.dll index a56e53f6b..a9d6af8b7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.MemoryMappedFiles.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.MemoryMappedFiles.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Pipes.AccessControl.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Pipes.AccessControl.dll index 3e8c935ec..efd9a997e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Pipes.AccessControl.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Pipes.AccessControl.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Pipes.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Pipes.dll index 6fbc7c493..be153c121 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Pipes.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.Pipes.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.UnmanagedMemoryStream.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.UnmanagedMemoryStream.dll index 1e05edc01..8bab37ed1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.UnmanagedMemoryStream.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.UnmanagedMemoryStream.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.dll index 2c506302e..800eee04e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.IO.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.Expressions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.Expressions.dll index a459328ec..e5a81bc4c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.Expressions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.Expressions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.Parallel.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.Parallel.dll index f8d65d1a2..372e94d19 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.Parallel.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.Parallel.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.Queryable.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.Queryable.dll index 4d445c424..713ca9a8c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.Queryable.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.Queryable.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.dll index 96ce90e4f..0beaddc9b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Linq.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Memory.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Memory.dll index 69df4c514..9e160a18f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Memory.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Memory.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Native.a b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Native.a index 46a736842..3464da829 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Native.a and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Native.a differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Native.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Native.so index fb1ce3911..06b43c6fc 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Native.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Native.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Http.Native.a b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Http.Native.a index 4bf322a46..ad28e798c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Http.Native.a and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Http.Native.a differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Http.Native.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Http.Native.so index 53333a21e..30fa0d20e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Http.Native.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Http.Native.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Http.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Http.dll index 0c9c82ef0..16abe32f1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Http.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Http.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.HttpListener.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.HttpListener.dll index 0754ab3b3..91919d7e7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.HttpListener.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.HttpListener.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Mail.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Mail.dll index 2262eced0..74939cd67 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Mail.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Mail.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.NameResolution.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.NameResolution.dll index 0f8a64d4b..16bed84cb 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.NameResolution.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.NameResolution.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.NetworkInformation.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.NetworkInformation.dll index 6bfa91fcc..05f33f8a5 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.NetworkInformation.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.NetworkInformation.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Ping.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Ping.dll index c3211636a..b3ef718c5 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Ping.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Ping.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Primitives.dll index 8be1615d1..7dc12b259 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Requests.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Requests.dll index 84e5ba783..0c82a7813 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Requests.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Requests.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Security.Native.a b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Security.Native.a index 3b3c78437..cc8ede5cf 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Security.Native.a and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Security.Native.a differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Security.Native.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Security.Native.so index c17a03e34..5e672cbee 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Security.Native.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Security.Native.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Security.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Security.dll index 73d12ba60..cd2771ca3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Security.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Security.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.ServicePoint.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.ServicePoint.dll index c0253c97b..de175d3ea 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.ServicePoint.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.ServicePoint.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Sockets.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Sockets.dll index 2a6109b1c..89d7b07f7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Sockets.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.Sockets.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebClient.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebClient.dll index 14d3e16bd..d04ef69e6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebClient.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebClient.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebHeaderCollection.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebHeaderCollection.dll index 40cf434b6..356eceb74 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebHeaderCollection.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebHeaderCollection.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebProxy.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebProxy.dll index f1e934435..02c4b0aac 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebProxy.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebProxy.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebSockets.Client.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebSockets.Client.dll index 1db12989d..73709de3c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebSockets.Client.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebSockets.Client.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebSockets.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebSockets.dll index f88176240..3109b1732 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebSockets.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.WebSockets.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.dll index 5dbb56139..a0b2decc8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Net.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Numerics.Vectors.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Numerics.Vectors.dll index f35c729f5..a0369243d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Numerics.Vectors.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Numerics.Vectors.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Numerics.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Numerics.dll index e02eef97a..d75fc5969 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Numerics.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Numerics.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ObjectModel.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ObjectModel.dll index b235e11bc..a4972b9f9 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ObjectModel.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ObjectModel.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.CoreLib.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.CoreLib.dll index 78b93fa8b..69f20bb4d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.CoreLib.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.CoreLib.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.DataContractSerialization.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.DataContractSerialization.dll index 271b8b87c..ba787cd68 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.DataContractSerialization.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.DataContractSerialization.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.Uri.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.Uri.dll index 0720e5e10..371397cb6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.Uri.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.Uri.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.Xml.Linq.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.Xml.Linq.dll index 7b7b7cce6..588b1badc 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.Xml.Linq.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.Xml.Linq.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.Xml.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.Xml.dll index 75b43aecd..97e07329c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.Xml.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Private.Xml.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.DispatchProxy.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.DispatchProxy.dll index d201c6c5d..d905953db 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.DispatchProxy.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.DispatchProxy.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Emit.ILGeneration.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Emit.ILGeneration.dll index 5d1b8ef0c..6ff166f45 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Emit.ILGeneration.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Emit.ILGeneration.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Emit.Lightweight.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Emit.Lightweight.dll index 53b5cf95a..cdf3309c1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Emit.Lightweight.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Emit.Lightweight.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Emit.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Emit.dll index 2aa96a53a..9e48165a5 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Emit.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Emit.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Extensions.dll index c1e2eaaa2..86fd05423 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Metadata.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Metadata.dll index 52082366b..6432f8c5e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Metadata.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Metadata.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Primitives.dll index f58a1a73a..6c3e1b625 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.TypeExtensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.TypeExtensions.dll index 1193989af..f46269466 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.TypeExtensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.TypeExtensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.dll index b5e9c7881..5d562ee93 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Reflection.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Resources.Reader.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Resources.Reader.dll index 0a4252512..a2800c489 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Resources.Reader.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Resources.Reader.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Resources.ResourceManager.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Resources.ResourceManager.dll index e4979b8c4..4dbc17ff0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Resources.ResourceManager.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Resources.ResourceManager.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Resources.Writer.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Resources.Writer.dll index e6d2ff786..10b13501b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Resources.Writer.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Resources.Writer.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.CompilerServices.VisualC.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.CompilerServices.VisualC.dll index 5d50cbacd..cd0cf49d4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.CompilerServices.VisualC.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.CompilerServices.VisualC.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Extensions.dll index d8f6a79dd..3fe78542e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Handles.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Handles.dll index e62452a92..6fb5abab0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Handles.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Handles.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.InteropServices.RuntimeInformation.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.InteropServices.RuntimeInformation.dll index 2f58b4c4e..c70a35cac 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.InteropServices.RuntimeInformation.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.InteropServices.RuntimeInformation.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.InteropServices.WindowsRuntime.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.InteropServices.WindowsRuntime.dll index 610a17445..5d10a0f64 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.InteropServices.WindowsRuntime.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.InteropServices.WindowsRuntime.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.InteropServices.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.InteropServices.dll index 8ed0fc2e3..1a7135dec 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.InteropServices.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.InteropServices.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Loader.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Loader.dll index 2ca8b9a22..5d390ab4d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Loader.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Loader.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Numerics.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Numerics.dll index 553117abe..ac0845074 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Numerics.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Numerics.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Formatters.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Formatters.dll index 2598286fd..40006a5f0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Formatters.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Formatters.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Json.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Json.dll index 40891b6df..f11a0756e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Json.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Json.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Primitives.dll index de3473a18..d23ad118b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Xml.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Xml.dll index fb29f5280..61b413cd6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Xml.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.Xml.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.dll index 7e70682f5..b19dfd01c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.Serialization.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.dll index 41cb3061b..ef62ddb32 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Runtime.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.AccessControl.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.AccessControl.dll index b5fe6870f..7bc81fd51 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.AccessControl.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.AccessControl.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Claims.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Claims.dll index 03210042d..976c047de 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Claims.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Claims.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Algorithms.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Algorithms.dll index 0842453b1..7b8d800a9 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Algorithms.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Algorithms.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Cng.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Cng.dll index e0d51b980..f40e2fe50 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Cng.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Cng.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Csp.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Csp.dll index e8c4c0a66..c6f8dc97d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Csp.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Csp.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Encoding.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Encoding.dll index d0a4a3000..b74409667 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Encoding.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Encoding.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Native.OpenSsl.a b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Native.OpenSsl.a index be1944e44..9ed849ae2 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Native.OpenSsl.a and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Native.OpenSsl.a differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Native.OpenSsl.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Native.OpenSsl.so index ee91cdf1a..bb643198c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Native.OpenSsl.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Native.OpenSsl.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.OpenSsl.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.OpenSsl.dll index 77ce0cea5..3b880c283 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.OpenSsl.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.OpenSsl.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Primitives.dll index 332131924..b209acb73 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.X509Certificates.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.X509Certificates.dll index 168ef3cd0..4291b2eec 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.X509Certificates.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Cryptography.X509Certificates.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Principal.Windows.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Principal.Windows.dll index 9c753ea7c..884999185 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Principal.Windows.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Principal.Windows.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Principal.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Principal.dll index 9e1a2fde7..475a8ad9c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Principal.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.Principal.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.SecureString.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.SecureString.dll index 23c560a9b..734e46d0d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.SecureString.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.SecureString.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.dll index 5fda0f399..ce9e00a41 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Security.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ServiceModel.Web.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ServiceModel.Web.dll index d82daea29..cc6bbb69e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ServiceModel.Web.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ServiceModel.Web.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ServiceProcess.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ServiceProcess.dll index 578fd9772..780d339b9 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ServiceProcess.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ServiceProcess.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Text.Encoding.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Text.Encoding.Extensions.dll index 3a81c23eb..ae5ed21ea 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Text.Encoding.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Text.Encoding.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Text.Encoding.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Text.Encoding.dll index 65a65ba66..bffac11e8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Text.Encoding.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Text.Encoding.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Text.RegularExpressions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Text.RegularExpressions.dll index 3e0e8403d..a40ecabe8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Text.RegularExpressions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Text.RegularExpressions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Overlapped.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Overlapped.dll index 665d6d805..ff7cf05c3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Overlapped.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Overlapped.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.Dataflow.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.Dataflow.dll index a95164a45..3bd87729b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.Dataflow.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.Dataflow.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.Extensions.dll index e15047de7..31737fc58 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.Parallel.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.Parallel.dll index 589ca17df..036a5d4c3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.Parallel.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.Parallel.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.dll index 6c7dd0ba2..36fae12a0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Tasks.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Thread.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Thread.dll index 8c722126f..4da306c2a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Thread.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Thread.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.ThreadPool.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.ThreadPool.dll index 1aed66406..4a3b02c5f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.ThreadPool.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.ThreadPool.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Timer.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Timer.dll index d8c39ed01..7f2fa144e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Timer.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.Timer.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.dll index b8d0e4859..5ab0a0ca7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Threading.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Transactions.Local.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Transactions.Local.dll index bc0786ecf..5b936891f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Transactions.Local.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Transactions.Local.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Transactions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Transactions.dll index 2416c032b..8675e06e1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Transactions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Transactions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ValueTuple.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ValueTuple.dll index 2c7ef654a..51a9efd89 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ValueTuple.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.ValueTuple.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Web.HttpUtility.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Web.HttpUtility.dll index 1381f225d..2537964ed 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Web.HttpUtility.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Web.HttpUtility.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Web.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Web.dll index 0e0bad083..fbb571190 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Web.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Web.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Windows.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Windows.dll index 3452ae446..3b35d64ca 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Windows.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Windows.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.Linq.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.Linq.dll index 3cd7223c9..f5146ec37 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.Linq.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.Linq.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.ReaderWriter.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.ReaderWriter.dll index e4f7db0d9..3085ed5e0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.ReaderWriter.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.ReaderWriter.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.Serialization.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.Serialization.dll index 8046a6a7f..03e32c5c9 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.Serialization.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.Serialization.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XDocument.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XDocument.dll index 368574e8d..f39f21b0b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XDocument.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XDocument.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XPath.XDocument.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XPath.XDocument.dll index f794de53d..c0ccdaed4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XPath.XDocument.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XPath.XDocument.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XPath.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XPath.dll index e29d59c81..1e5a98990 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XPath.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XPath.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XmlDocument.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XmlDocument.dll index 04ff7c89a..cbcbf324d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XmlDocument.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XmlDocument.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XmlSerializer.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XmlSerializer.dll index d3f8415c9..2ea1fa4d4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XmlSerializer.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.XmlSerializer.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.dll index 151d0b948..a5d45050a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.Xml.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.dll index e6033a976..2ab187842 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/System.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Utf8Json.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Utf8Json.dll new file mode 100644 index 000000000..24ac36cfb Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/Utf8Json.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/WindowsBase.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/WindowsBase.dll index 0aae03b71..5607d0837 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/WindowsBase.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/WindowsBase.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/createdump b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/createdump index ec8197e25..b532c171c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/createdump and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/createdump differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libclrjit.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libclrjit.so index 22630d390..42f78a93f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libclrjit.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libclrjit.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libcoreclr.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libcoreclr.so index 15fe59050..7a91ca555 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libcoreclr.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libcoreclr.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libdbgshim.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libdbgshim.so index 12801a7d1..427040203 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libdbgshim.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libdbgshim.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libhostfxr.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libhostfxr.so index 816424ab9..0c99221ec 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libhostfxr.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libhostfxr.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libhostpolicy.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libhostpolicy.so index 9cbbe889e..9a2e2fc60 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libhostpolicy.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libhostpolicy.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libmscordaccore.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libmscordaccore.so index e2a82b4a8..e3f6f9496 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libmscordaccore.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libmscordaccore.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libmscordbi.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libmscordbi.so index d7d84f6d3..9992238ea 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libmscordbi.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libmscordbi.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libsos.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libsos.so index 9f8b88d98..8705032e4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libsos.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libsos.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libsosplugin.so b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libsosplugin.so index 0fe9ea490..3e0badf4b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libsosplugin.so and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/libsosplugin.so differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc index 68a1b017a..0727903f3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc.deps.json b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc.deps.json index 9fd43b68a..bf8ed3494 100644 --- a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc.deps.json +++ b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc.deps.json @@ -1,7 +1,7 @@ { "runtimeTarget": { "name": ".NETCoreApp,Version=v2.1/linux-x64", - "signature": "1a9275ffd178512bc65dd0f76b45089c3765367b" + "signature": "3dceb2ad71611106a5baab08ac06fe43a72da655" }, "compilationOptions": {}, "targets": { @@ -10,7 +10,8 @@ "moc/1.0.0": { "dependencies": { "Buildalyzer.Workspaces": "2.2.0", - "Microsoft.NETCore.App": "2.1.6" + "MicroBatchFramework": "1.2.0", + "Microsoft.NETCore.App": "2.1.12" }, "runtime": { "moc.dll": {} @@ -25,8 +26,8 @@ "Microsoft.Build.Tasks.Core": "15.8.166", "Microsoft.Build.Utilities.Core": "15.8.166", "Microsoft.Extensions.DependencyModel": "2.1.0", - "Microsoft.Extensions.Logging": "2.1.1", - "Microsoft.Extensions.Logging.Abstractions": "2.1.1", + "Microsoft.Extensions.Logging": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", "MsBuildPipeLogger.Server": "1.1.2" }, "runtime": { @@ -64,6 +65,22 @@ } } }, + "MicroBatchFramework/1.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.EnvironmentVariables": "2.2.0", + "Microsoft.Extensions.Configuration.Json": "2.2.0", + "Microsoft.Extensions.Configuration.UserSecrets": "2.2.0", + "Microsoft.Extensions.Hosting": "2.2.0", + "System.Threading.Tasks.Extensions": "4.5.2", + "Utf8Json": "1.3.7" + }, + "runtime": { + "lib/netstandard2.0/MicroBatchFramework.dll": { + "assemblyVersion": "1.2.0.0", + "fileVersion": "1.2.0.0" + } + } + }, "Microsoft.Build/15.8.166": { "dependencies": { "Microsoft.Build.Framework": "15.8.166", @@ -169,10 +186,10 @@ "System.Text.Encoding.Extensions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0", + "System.Threading.Tasks.Extensions": "4.5.2", "System.Threading.Tasks.Parallel": "4.3.0", "System.Threading.Thread": "4.3.0", - "System.ValueTuple": "4.3.0", + "System.ValueTuple": "4.4.0", "System.Xml.ReaderWriter": "4.3.0", "System.Xml.XDocument": "4.3.0", "System.Xml.XPath.XDocument": "4.3.0", @@ -494,26 +511,6 @@ } } }, - "Microsoft.CSharp/4.0.1": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0" - } - }, "Microsoft.DotNet.PlatformAbstractions/2.1.0": { "dependencies": { "System.AppContext": "4.3.0", @@ -532,51 +529,109 @@ } } }, - "Microsoft.Extensions.Configuration/2.1.1": { + "Microsoft.Extensions.Configuration/2.2.0": { "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.1.1" + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { + "Microsoft.Extensions.Configuration.Abstractions/2.2.0": { "dependencies": { - "Microsoft.Extensions.Primitives": "2.1.1" + "Microsoft.Extensions.Primitives": "2.2.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Configuration.Binder/2.1.1": { + "Microsoft.Extensions.Configuration.Binder/2.2.0": { "dependencies": { - "Microsoft.Extensions.Configuration": "2.1.1" + "Microsoft.Extensions.Configuration": "2.2.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { + "Microsoft.Extensions.Configuration.FileExtensions/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0", + "Microsoft.Extensions.FileProviders.Physical": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Configuration.Json/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0", + "Microsoft.Extensions.Configuration.FileExtensions": "2.2.0", + "Newtonsoft.Json": "11.0.2" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Configuration.UserSecrets/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Json": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.DependencyInjection/2.2.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + }, + "runtime": { + "lib/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/2.2.0": { "runtime": { "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, "Microsoft.Extensions.DependencyModel/2.1.0": { "dependencies": { "Microsoft.DotNet.PlatformAbstractions": "2.1.0", - "Newtonsoft.Json": "9.0.1", + "Newtonsoft.Json": "11.0.2", "System.Diagnostics.Debug": "4.3.0", "System.Dynamic.Runtime": "4.3.0", "System.Linq": "4.3.0" @@ -588,90 +643,151 @@ } } }, - "Microsoft.Extensions.Logging/2.1.1": { + "Microsoft.Extensions.FileProviders.Abstractions/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.FileProviders.Physical/2.2.0": { + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Extensions.FileSystemGlobbing": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.FileSystemGlobbing/2.2.0": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Hosting/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0", + "Microsoft.Extensions.DependencyInjection": "2.2.0", + "Microsoft.Extensions.FileProviders.Physical": "2.2.0", + "Microsoft.Extensions.Hosting.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Hosting.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18316" + } + } + }, + "Microsoft.Extensions.Hosting.Abstractions/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Hosting.Abstractions.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18316" + } + } + }, + "Microsoft.Extensions.Logging/2.2.0": { "dependencies": { - "Microsoft.Extensions.Configuration.Binder": "2.1.1", - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", - "Microsoft.Extensions.Logging.Abstractions": "2.1.1", - "Microsoft.Extensions.Options": "2.1.1" + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Logging.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Logging.Abstractions/2.1.1": { + "Microsoft.Extensions.Logging.Abstractions/2.2.0": { "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Options/2.1.1": { + "Microsoft.Extensions.Options/2.2.0": { "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", - "Microsoft.Extensions.Primitives": "2.1.1" + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Options.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Primitives/2.1.1": { + "Microsoft.Extensions.Primitives/2.2.0": { "dependencies": { "System.Memory": "4.5.1", "System.Runtime.CompilerServices.Unsafe": "4.5.1" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.NETCore.App/2.1.6": { + "Microsoft.NETCore.App/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetHostPolicy": "2.1.6", - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.DotNetHostPolicy": "2.1.12", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "NETStandard.Library": "2.0.3", - "runtime.linux-x64.Microsoft.NETCore.App": "2.1.6" + "runtime.linux-x64.Microsoft.NETCore.App": "2.1.12" } }, - "Microsoft.NETCore.DotNetAppHost/2.1.6": { + "Microsoft.NETCore.DotNetAppHost/2.1.12": { "dependencies": { - "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost": "2.1.6" + "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost": "2.1.12" } }, - "Microsoft.NETCore.DotNetHostPolicy/2.1.6": { + "Microsoft.NETCore.DotNetHostPolicy/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetHostResolver": "2.1.6", - "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy": "2.1.6" + "Microsoft.NETCore.DotNetHostResolver": "2.1.12", + "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy": "2.1.12" } }, - "Microsoft.NETCore.DotNetHostResolver/2.1.6": { + "Microsoft.NETCore.DotNetHostResolver/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetAppHost": "2.1.6", - "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver": "2.1.6" + "Microsoft.NETCore.DotNetAppHost": "2.1.12", + "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver": "2.1.12" } }, - "Microsoft.NETCore.Platforms/2.1.2": {}, + "Microsoft.NETCore.Platforms/2.1.5": {}, "Microsoft.NETCore.Targets/2.0.0": {}, "Microsoft.Win32.Primitives/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "Microsoft.Win32.Registry/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", @@ -709,657 +825,641 @@ }, "NETStandard.Library/2.0.3": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2" + "Microsoft.NETCore.Platforms": "2.1.5" } }, - "Newtonsoft.Json/9.0.1": { - "dependencies": { - "Microsoft.CSharp": "4.0.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Serialization.Primitives": "4.1.1", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0" - }, + "Newtonsoft.Json/11.0.2": { "runtime": { - "lib/netstandard1.0/Newtonsoft.Json.dll": { - "assemblyVersion": "9.0.0.0", - "fileVersion": "9.0.1.19813" + "lib/netstandard2.0/Newtonsoft.Json.dll": { + "assemblyVersion": "11.0.0.0", + "fileVersion": "11.0.2.21924" } } }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.linux-x64.Microsoft.NETCore.App/2.1.6": { + "runtime.linux-x64.Microsoft.NETCore.App/2.1.12": { "runtime": { "runtimes/linux-x64/lib/netcoreapp2.1/Microsoft.CSharp.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/Microsoft.VisualBasic.dll": { "assemblyVersion": "10.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/Microsoft.Win32.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/Microsoft.Win32.Registry.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/SOS.NETCore.dll": { "assemblyVersion": "1.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27817.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.AppContext.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Buffers.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.Concurrent.dll": { "assemblyVersion": "4.0.14.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.Immutable.dll": { + "assemblyVersion": "1.2.3.0", + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.NonGeneric.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.Specialized.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.Annotations.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.DataAnnotations.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.EventBasedAsync.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.Primitives.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.TypeConverter.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Configuration.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Console.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Core.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Data.Common.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Data.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Contracts.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Debug.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll": { "assemblyVersion": "4.0.3.1", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.FileVersionInfo.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Process.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.StackTrace.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.TextWriterTraceListener.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Tools.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.TraceSource.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Tracing.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Drawing.Primitives.dll": { "assemblyVersion": "4.2.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Drawing.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Dynamic.Runtime.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Globalization.Calendars.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Globalization.Extensions.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Globalization.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Compression.Brotli.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Compression.FileSystem.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Compression.ZipFile.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Compression.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.AccessControl.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.DriveInfo.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.Watcher.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.IsolatedStorage.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.MemoryMappedFiles.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Pipes.AccessControl.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Pipes.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.UnmanagedMemoryStream.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Linq.Expressions.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Linq.Parallel.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Linq.Queryable.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Linq.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Memory.dll": { "assemblyVersion": "4.1.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Http.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.HttpListener.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Mail.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.NameResolution.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.NetworkInformation.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Ping.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Requests.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Security.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.ServicePoint.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Sockets.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebClient.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebHeaderCollection.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebProxy.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebSockets.Client.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebSockets.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Numerics.Vectors.dll": { "assemblyVersion": "4.1.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Numerics.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.ObjectModel.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Private.DataContractSerialization.dll": { "assemblyVersion": "4.1.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Private.Uri.dll": { "assemblyVersion": "4.0.5.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Private.Xml.Linq.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Private.Xml.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.DispatchProxy.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Emit.ILGeneration.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Emit.Lightweight.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Emit.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Extensions.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Metadata.dll": { + "assemblyVersion": "1.4.3.0", + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.TypeExtensions.dll": { "assemblyVersion": "4.1.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Resources.Reader.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Resources.ResourceManager.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Resources.Writer.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.CompilerServices.VisualC.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Extensions.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Handles.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.RuntimeInformation.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.WindowsRuntime.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Loader.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Numerics.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Formatters.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Json.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Primitives.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Xml.dll": { "assemblyVersion": "4.1.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.AccessControl.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Claims.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Algorithms.dll": { "assemblyVersion": "4.3.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Cng.dll": { "assemblyVersion": "4.3.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Csp.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Encoding.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.OpenSsl.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "assemblyVersion": "4.1.1.1", + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.X509Certificates.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { "assemblyVersion": "4.1.1.1", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Principal.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.SecureString.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.ServiceModel.Web.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.ServiceProcess.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Text.Encoding.Extensions.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Text.Encoding.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Text.RegularExpressions.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Overlapped.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Tasks.Dataflow.dll": { "assemblyVersion": "4.6.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Tasks.Extensions.dll": { "assemblyVersion": "4.3.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Tasks.Parallel.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Tasks.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Thread.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.ThreadPool.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Timer.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Transactions.Local.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Transactions.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.ValueTuple.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Web.HttpUtility.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Web.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Windows.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.Linq.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.ReaderWriter.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.Serialization.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XDocument.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XPath.XDocument.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XPath.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XmlDocument.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XmlSerializer.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/System.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/WindowsBase.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/mscorlib.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/linux-x64/lib/netcoreapp2.1/netstandard.dll": { "assemblyVersion": "2.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" } }, "native": { @@ -1392,7 +1492,7 @@ }, "runtimes/linux-x64/native/System.Private.CoreLib.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27817.1" }, "runtimes/linux-x64/native/System.Security.Cryptography.Native.OpenSsl.a": { "fileVersion": "0.0.0.0" @@ -1432,16 +1532,16 @@ } } }, - "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost/2.1.6": { + "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost/2.1.12": { "native": { "runtimes/linux-x64/native/apphost": { "fileVersion": "0.0.0.0" } } }, - "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.6": { + "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetHostResolver": "2.1.6" + "Microsoft.NETCore.DotNetHostResolver": "2.1.12" }, "native": { "runtimes/linux-x64/native/libhostpolicy.so": { @@ -1449,9 +1549,9 @@ } } }, - "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver/2.1.6": { + "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetAppHost": "2.1.6" + "Microsoft.NETCore.DotNetAppHost": "2.1.12" }, "native": { "runtimes/linux-x64/native/libhostfxr.so": { @@ -1461,19 +1561,19 @@ }, "runtime.native.System/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0" } }, "runtime.native.System.IO.Compression/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0" } }, "runtime.native.System.Net.Http/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0" } }, @@ -1528,7 +1628,7 @@ }, "System.Collections/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -1547,14 +1647,8 @@ "System.Threading.Tasks": "4.3.0" } }, - "System.Collections.Immutable/1.5.0": { - "runtime": { - "lib/netstandard2.0/System.Collections.Immutable.dll": { - "assemblyVersion": "1.2.3.0", - "fileVersion": "4.6.26515.6" - } - } - }, + "System.Collections.Immutable/1.5.0": {}, + "System.ComponentModel.Annotations/4.5.0": {}, "System.Composition/1.0.31": { "dependencies": { "System.Composition.AttributedModel": "1.0.31", @@ -1665,7 +1759,7 @@ }, "System.Console/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.IO": "4.3.0", "System.Runtime": "4.3.0", @@ -1679,7 +1773,7 @@ }, "System.Diagnostics.Debug/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -1695,7 +1789,7 @@ }, "System.Diagnostics.FileVersionInfo/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", @@ -1716,14 +1810,14 @@ }, "System.Diagnostics.Tools/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Diagnostics.TraceSource/4.0.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", @@ -1736,7 +1830,7 @@ }, "System.Diagnostics.Tracing/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -1761,14 +1855,14 @@ }, "System.Globalization/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Globalization.Calendars/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Globalization": "4.3.0", "System.Runtime": "4.3.0" @@ -1776,7 +1870,7 @@ }, "System.Globalization.Extensions/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", @@ -1786,7 +1880,7 @@ }, "System.IO/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", @@ -1795,7 +1889,7 @@ }, "System.IO.Compression/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Buffers": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", @@ -1814,7 +1908,7 @@ }, "System.IO.FileSystem/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.IO": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", @@ -1876,7 +1970,7 @@ "System.Memory/4.5.1": {}, "System.Net.Http/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.DiagnosticSource": "4.3.0", @@ -1906,7 +2000,7 @@ }, "System.Net.Primitives/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0" @@ -1923,7 +2017,7 @@ }, "System.Reflection/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.IO": "4.3.0", "System.Reflection.Primitives": "4.3.0", @@ -1956,23 +2050,16 @@ }, "System.Reflection.Extensions/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" } }, - "System.Reflection.Metadata/1.6.0": { - "runtime": { - "lib/netstandard2.0/System.Reflection.Metadata.dll": { - "assemblyVersion": "1.4.3.0", - "fileVersion": "4.6.26515.6" - } - } - }, + "System.Reflection.Metadata/1.6.0": {}, "System.Reflection.Primitives/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -1985,7 +2072,7 @@ }, "System.Resources.ResourceManager/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Globalization": "4.3.0", "System.Reflection": "4.3.0", @@ -2004,7 +2091,7 @@ }, "System.Runtime/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0" } }, @@ -2012,27 +2099,27 @@ "runtime": { "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.0.0.0" } } }, "System.Runtime.Extensions/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Runtime.Handles/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Runtime.InteropServices/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Reflection": "4.3.0", "System.Reflection.Primitives": "4.3.0", @@ -2085,7 +2172,7 @@ }, "System.Security.Cryptography.Algorithms/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", @@ -2103,7 +2190,7 @@ }, "System.Security.Cryptography.Cng/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", @@ -2118,7 +2205,7 @@ }, "System.Security.Cryptography.Csp/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", @@ -2135,7 +2222,7 @@ }, "System.Security.Cryptography.Encoding/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Collections.Concurrent": "4.3.0", "System.Linq": "4.3.0", @@ -2179,7 +2266,7 @@ }, "System.Security.Cryptography.X509Certificates/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", @@ -2213,7 +2300,7 @@ }, "System.Security.Principal.Windows/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.Win32.Primitives": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", @@ -2231,14 +2318,14 @@ }, "System.Text.Encoding/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Text.Encoding.CodePages/4.4.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2" + "Microsoft.NETCore.Platforms": "2.1.5" }, "runtime": { "lib/netstandard2.0/System.Text.Encoding.CodePages.dll": { @@ -2249,7 +2336,7 @@ }, "System.Text.Encoding.Extensions/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0" @@ -2268,7 +2355,7 @@ }, "System.Threading.Tasks/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -2288,13 +2375,7 @@ "System.Threading.Tasks": "4.3.0" } }, - "System.Threading.Tasks.Extensions/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, + "System.Threading.Tasks.Extensions/4.5.2": {}, "System.Threading.Tasks.Parallel/4.3.0": { "dependencies": { "System.Collections.Concurrent": "4.3.0", @@ -2312,13 +2393,7 @@ "System.Runtime": "4.3.0" } }, - "System.ValueTuple/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - } - }, + "System.ValueTuple/4.4.0": {}, "System.Xml.ReaderWriter/4.3.0": { "dependencies": { "System.Collections": "4.3.0", @@ -2335,7 +2410,7 @@ "System.Text.Encoding.Extensions": "4.3.0", "System.Text.RegularExpressions": "4.3.0", "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0" + "System.Threading.Tasks.Extensions": "4.5.2" } }, "System.Xml.XDocument/4.3.0": { @@ -2393,6 +2468,20 @@ "System.Xml.XDocument": "4.3.0", "System.Xml.XPath": "4.3.0" } + }, + "Utf8Json/1.3.7": { + "dependencies": { + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Threading.Tasks.Extensions": "4.5.2", + "System.ValueTuple": "4.4.0" + }, + "runtime": { + "lib/netstandard2.0/Utf8Json.dll": { + "assemblyVersion": "1.3.7.0", + "fileVersion": "1.3.7.0" + } + } } } }, @@ -2405,108 +2494,108 @@ "Buildalyzer/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-5nO0Lkv0zcB5Ck8AaO9eXnRbAfVAB45QQ0ZGCAfPwRxqlqn7WFkn6ESL8EWD8jgTdodtIE8KpZFXm8zb1jIYBw==", + "sha512": "sha512-iQIgYkhnqu0pLG73wg9ABZy8mvUOPTiwbKWcRLuT4uvwtoT7XJcYyZ+i2fsfj1RKHFmR7ba5/jTSigm7318YgA==", "path": "buildalyzer/2.2.0", "hashPath": "buildalyzer.2.2.0.nupkg.sha512" }, "Buildalyzer.Logger/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-490kgGa+07Jwdsq0jqxUSG2QjVg65MJHMEI1/D/7pOjNY4/Zc5DJTKxuL1eJUFf+rzB7NtZKDV0IGABlH8Ihmw==", + "sha512": "sha512-RLS2YFz0vgq3spMZKsOMh1zQBOazEaNn51/AyhilMjJ5wUzisiMwEVih0QnmrPxw3l/1mWBSbofKs1BVtBcFKw==", "path": "buildalyzer.logger/2.2.0", "hashPath": "buildalyzer.logger.2.2.0.nupkg.sha512" }, "Buildalyzer.Workspaces/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-iItCd3jnCUCXryBbWPpRqzPco2vqWobEAoyXelVSfQ+xkZmEwRGYtjjxa+14qo9sNve/a+LTeYknWG/dyRIQOg==", + "sha512": "sha512-A2OBRP2b/JFUY/i82/CqjHyew6PEm1EDtyankmeDugQFJtURdzis+wy27jqWwHqwySP5n/I4x2GJYplh1H0JFQ==", "path": "buildalyzer.workspaces/2.2.0", "hashPath": "buildalyzer.workspaces.2.2.0.nupkg.sha512" }, + "MicroBatchFramework/1.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MvgnkL0qnJIV4se8KjbLejvJXxYT4aphpAcc1NrfpvEtqieEDrI4cAdGM+s6wRvYIOUooErRAByrS+AMdiaUyg==", + "path": "microbatchframework/1.2.0", + "hashPath": "microbatchframework.1.2.0.nupkg.sha512" + }, "Microsoft.Build/15.8.166": { "type": "package", "serviceable": true, - "sha512": "sha512-iDJUl4kiXxnWFQZ4RZTDL7913wckb5ZqzPVkey1FtyvdM/77feTWZ5yL4Vs3+vcpMJtt2PCUNd0wgVO8dl7YzA==", + "sha512": "sha512-h9dzE7bLEFVeY1fVOdbh3dQOtbWqe3jKzvV6JE9JnpmfLptP3gwp/rOLfWmpFJfcNEqetMYMfbcAwipyp/3DfQ==", "path": "microsoft.build/15.8.166", "hashPath": "microsoft.build.15.8.166.nupkg.sha512" }, "Microsoft.Build.Framework/15.8.166": { "type": "package", "serviceable": true, - "sha512": "sha512-0aEScH8KwZKzHXx3SMqOIcg98zJanvSmf+C/tBNmMotb7L+3ZsV1VbkH94UM7l81RQvTeB1eTAVkLpOffN+YqA==", + "sha512": "sha512-UxQvO36HtZTHJCRCbglZNU5D2M+x2Fs27O0ZvIOrZZo6m83S6ZynCzLW5BjQ9RxAlH/pH2iHiEU+w03OOmAw6Q==", "path": "microsoft.build.framework/15.8.166", "hashPath": "microsoft.build.framework.15.8.166.nupkg.sha512" }, "Microsoft.Build.Tasks.Core/15.8.166": { "type": "package", "serviceable": true, - "sha512": "sha512-S+KyOn73S6xQGF4Eg5XG0fBnTfvgqrLLhaMwSy1iQH+hZWKG7gakdavxwZ9ojCZ9vN2U5qdTR/kXmkFse41HKA==", + "sha512": "sha512-EOCh8vvBJvxI9egq70lySDZAdeteKmaVl3cUQCCmhBmHfIVuDVf7vnfwe0pDGZp95yo0Rf5WtSguiyX7R+xJ5w==", "path": "microsoft.build.tasks.core/15.8.166", "hashPath": "microsoft.build.tasks.core.15.8.166.nupkg.sha512" }, "Microsoft.Build.Utilities.Core/15.8.166": { "type": "package", "serviceable": true, - "sha512": "sha512-WSE8AR96B+mzUFxivxG0jCTDmz+D0PsrXG7GVApUFtSCrt7InnsOU538vxv7dlbn/Wwf8QdDNAE0Zsi+pJNsoQ==", + "sha512": "sha512-xtTrXMOlrH5GXObxN5G3ZVNhC1F9Cagje4ks9qC3btMokNoe/ryl5ncJaS5WshBtB76UPho5MZ8wN1meij2BKA==", "path": "microsoft.build.utilities.core/15.8.166", "hashPath": "microsoft.build.utilities.core.15.8.166.nupkg.sha512" }, "Microsoft.CodeAnalysis.Analyzers/2.6.1": { "type": "package", "serviceable": true, - "sha512": "sha512-eiCP8ZbkBuisHUjLbBHblFdXUd5k5z2Wvb6+H2Lwc/wpqcH9IF0D21S87Ko+dOG1NwOGG1+zqwBHF/vx1n+PGQ==", + "sha512": "sha512-VsT6gg2SPeToP8SK7PEcsH6Ftryb7aOqnXh9xg11zBeov05+63gP3k/TvrR+v85XIa8Nn0y3+qNl4M+qzNLBfw==", "path": "microsoft.codeanalysis.analyzers/2.6.1", "hashPath": "microsoft.codeanalysis.analyzers.2.6.1.nupkg.sha512" }, "Microsoft.CodeAnalysis.Common/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-2JUEHsfLlCE255KGhqfUGb3+MzPsflIRUOMDwoa1+/oFe3o2javC0bHbRzBy3lJ2KQM5uZX8cvoNvV6q/4JxiA==", + "sha512": "sha512-M06oYATUMAqL/ympQ09zNHOrRc6sEwgsiueK6z+QPOgyr028i54NviKy7Evfcvv7Kr0LX9MEmrKXPO2NZ+bZ5Q==", "path": "microsoft.codeanalysis.common/2.9.0", "hashPath": "microsoft.codeanalysis.common.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.CSharp/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-vwhUL6vnKVM7i3TdPhWdXsNvqSFpjY9MSOHr+bqT4jbHQ7lHfqiMRA6P8/18mv7HEWxujpoNsr1IJmyTPBJg/Q==", + "sha512": "sha512-oiCPHjCLZtyAz/vnMRJI0PrhR/amJiR9RIwPpQ3+DMs7TgegGn65/dqYEcoiWSj8YQvwOK/J640EXMydMDLJVQ==", "path": "microsoft.codeanalysis.csharp/2.9.0", "hashPath": "microsoft.codeanalysis.csharp.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-NgHl1H+n4fBdcwYT/jbfUi40ZhSXmZ8kUm1hpkAd0XSNBrHjEgDOpDP11f1sPavczUGaXb8Kv76urg+O8eY9jg==", + "sha512": "sha512-ZVPi+NQcxLbHbKb77qbtRcne5AjbYQXIJYjQMI2dwLKU8PlZaWajZEEhSbin4FED3t4KL6T0RaAx8m8uJtAX2A==", "path": "microsoft.codeanalysis.csharp.workspaces/2.9.0", "hashPath": "microsoft.codeanalysis.csharp.workspaces.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-KBAL4UKhQOMHUlp5rofqASVlOdV0ZyloEDGCMLiRoaSteV3YaNVgqu4tGxEWblYfXmAjWnp/cVv1o/cbhqX4og==", + "sha512": "sha512-dUKemkcCwT8TfXmvjps7RrI9G5C2XgRf3pjhcMEH+ikyLsXqFstDsA3uP4waeJ4gi+4gaCehjmdDGO3UaaKBSA==", "path": "microsoft.codeanalysis.visualbasic/2.9.0", "hashPath": "microsoft.codeanalysis.visualbasic.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-cc/d3g91LQiDloqognxEPm/+4XUkhpAjtrs9G4bgUj/OX2hiqJvzAnB7Em9r9DAWKg9F6127Lf3JidUp9E3I+w==", + "sha512": "sha512-FkFdX/incH1at2EapaBSAXeJHdilmyMOjS0FIaPfvd7Bau0b57/r312JxSGHslKjEWY+2UlWUPoPCYa9oH5hHw==", "path": "microsoft.codeanalysis.visualbasic.workspaces/2.9.0", "hashPath": "microsoft.codeanalysis.visualbasic.workspaces.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-JdctRx+SwpvGzQBz+PaUvPTNMxlVn74w7AqEMrinuVEIYjYIehp8FyQOsZMOJlBiRnSEygTy8WlHN2R/qcx24Q==", + "sha512": "sha512-Py0UX0Cdh04puqDoE6kBS60j+8nJeJqSUxWQPFpxW6btas5Y2A4io4daJIy0DFz4Y49jcMtS5ynvXdkyIWvl/Q==", "path": "microsoft.codeanalysis.workspaces.common/2.9.0", "hashPath": "microsoft.codeanalysis.workspaces.common.2.9.0.nupkg.sha512" }, - "Microsoft.CSharp/4.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-17h8b5mXa87XYKrrVqdgZ38JefSUqLChUQpXgSnpzsM0nDOhE40FTeNWOJ/YmySGV6tG6T8+hjz6vxbknHJr6A==", - "path": "microsoft.csharp/4.0.1", - "hashPath": "microsoft.csharp.4.0.1.nupkg.sha512" - }, "Microsoft.DotNet.PlatformAbstractions/2.1.0": { "type": "package", "serviceable": true, @@ -2514,33 +2603,68 @@ "path": "microsoft.dotnet.platformabstractions/2.1.0", "hashPath": "microsoft.dotnet.platformabstractions.2.1.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration/2.1.1": { + "Microsoft.Extensions.Configuration/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "path": "microsoft.extensions.configuration/2.2.0", + "hashPath": "microsoft.extensions.configuration.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "path": "microsoft.extensions.configuration.abstractions/2.2.0", + "hashPath": "microsoft.extensions.configuration.abstractions.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Binder/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "path": "microsoft.extensions.configuration.binder/2.2.0", + "hashPath": "microsoft.extensions.configuration.binder.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-gIqt9PkKO01hZ0zmHnWrZ1E45MDreZTVoyDbL1kMWKtDgxxWTJpYtESTEcgpvR1uB1iex1zKGYzJpOMgmuP5TQ==", + "path": "microsoft.extensions.configuration.environmentvariables/2.2.0", + "hashPath": "microsoft.extensions.configuration.environmentvariables.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.FileExtensions/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-H1qCpWBC8Ed4tguTR/qYkbb3F6DI5Su3t8xyFo3/5MzAd8PwPpHzgX8X04KbBxKmk173Pb64x7xMHarczVFQUA==", + "path": "microsoft.extensions.configuration.fileextensions/2.2.0", + "hashPath": "microsoft.extensions.configuration.fileextensions.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Json/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-LjVKO6P2y52c5ZhTLX/w8zc5H4Y3J/LJsgqTBj49TtFq/hAtVNue/WA0F6/7GMY90xhD7K0MDZ4qpOeWXbLvzg==", - "path": "microsoft.extensions.configuration/2.1.1", - "hashPath": "microsoft.extensions.configuration.2.1.1.nupkg.sha512" + "sha512": "sha512-jUDdmLyFmLf9V3mqnMzSAzAv4QigJ67tZh5Q7HBXeBnESL2UyeesNG6jSBti+b63JpxZf+EDyn+anx3gyrNxug==", + "path": "microsoft.extensions.configuration.json/2.2.0", + "hashPath": "microsoft.extensions.configuration.json.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { + "Microsoft.Extensions.Configuration.UserSecrets/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-VfuZJNa0WUshZ/+8BFZAhwFKiKuu/qOUCFntfdLpHj7vcRnsGHqd3G2Hse78DM+pgozczGM63lGPRLmy+uhUOA==", - "path": "microsoft.extensions.configuration.abstractions/2.1.1", - "hashPath": "microsoft.extensions.configuration.abstractions.2.1.1.nupkg.sha512" + "sha512": "sha512-2/N2xo6/sNbVshnKktmq5lwaQbsAR2SrzCVrJEeMP8OKZVI7SzT8P6/WXZF8/YC7dTYsMe3nrHzgl1cF9i5ZKQ==", + "path": "microsoft.extensions.configuration.usersecrets/2.2.0", + "hashPath": "microsoft.extensions.configuration.usersecrets.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.Binder/2.1.1": { + "Microsoft.Extensions.DependencyInjection/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-fcLCTS03poWE4v9tSNBr3pWn0QwGgAn1vzqHXlXgvqZeOc7LvQNzaWcKRQZTdEc3+YhQKwMsOtm3VKSA2aWQ8w==", - "path": "microsoft.extensions.configuration.binder/2.1.1", - "hashPath": "microsoft.extensions.configuration.binder.2.1.1.nupkg.sha512" + "sha512": "sha512-MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "path": "microsoft.extensions.dependencyinjection/2.2.0", + "hashPath": "microsoft.extensions.dependencyinjection.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { + "Microsoft.Extensions.DependencyInjection.Abstractions/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-MgYpU5cwZohUMKKg3sbPhvGG+eAZ/59E9UwPwlrUkyXU+PGzqwZg9yyQNjhxuAWmoNoFReoemeCku50prYSGzA==", - "path": "microsoft.extensions.dependencyinjection.abstractions/2.1.1", - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.1.1.nupkg.sha512" + "sha512": "sha512-f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==", + "path": "microsoft.extensions.dependencyinjection.abstractions/2.2.0", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.2.0.nupkg.sha512" }, "Microsoft.Extensions.DependencyModel/2.1.0": { "type": "package", @@ -2549,73 +2673,108 @@ "path": "microsoft.extensions.dependencymodel/2.1.0", "hashPath": "microsoft.extensions.dependencymodel.2.1.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging/2.1.1": { + "Microsoft.Extensions.FileProviders.Abstractions/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-EcnaSsPTqx2MGnHrmWOD0ugbuuqVT8iICqSqPzi45V5/MA1LjUNb0kwgcxBGqizV1R+WeBK7/Gw25Jzkyk9bIw==", + "path": "microsoft.extensions.fileproviders.abstractions/2.2.0", + "hashPath": "microsoft.extensions.fileproviders.abstractions.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileProviders.Physical/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tbDHZnBJkjYd9NjlRZ9ondDiv1Te3KYCTW2RWpR1B0e1Z8+EnFRo7qNnHkkSCixLdlPZzhjlX24d/PixQ7w2dA==", + "path": "microsoft.extensions.fileproviders.physical/2.2.0", + "hashPath": "microsoft.extensions.fileproviders.physical.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileSystemGlobbing/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZSsHZp3PyW6vk37tDEdypjgGlNtpJ0EixBMOfUod2Thx7GtwfFSAQXUQx8a8BN8vfWKGGMbp7jPWdoHx/At4wQ==", + "path": "microsoft.extensions.filesystemglobbing/2.2.0", + "hashPath": "microsoft.extensions.filesystemglobbing.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Hosting/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PxZPd5QbWr8+3JN2segEaD7IAYI+mR8ZmMqgo6GOk+E+UKnRcbC3RSQgJrZYuWVQwJCvdxesO5e64LSHC1zC8g==", + "path": "microsoft.extensions.hosting/2.2.0", + "hashPath": "microsoft.extensions.hosting.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Hosting.Abstractions/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+k4AEn68HOJat5gj1TWa6X28WlirNQO9sPIIeQbia+91n03esEtMSSoekSTpMjUzjqtJWQN3McVx0GvSPFHF/Q==", + "path": "microsoft.extensions.hosting.abstractions/2.2.0", + "hashPath": "microsoft.extensions.hosting.abstractions.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-hh+mkOAQDTp6XH80xJt3+wwYVzkbwYQl9XZRCz4Um0JjP/o7N9vHM3rZ6wwwtr+BBe/L6iBO2sz0px6OWBzqZQ==", - "path": "microsoft.extensions.logging/2.1.1", - "hashPath": "microsoft.extensions.logging.2.1.1.nupkg.sha512" + "sha512": "sha512-Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "path": "microsoft.extensions.logging/2.2.0", + "hashPath": "microsoft.extensions.logging.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging.Abstractions/2.1.1": { + "Microsoft.Extensions.Logging.Abstractions/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-XRzK7ZF+O6FzdfWrlFTi1Rgj2080ZDsd46vzOjadHUB0Cz5kOvDG8vI7caa5YFrsHQpcfn0DxtjS4E46N4FZsA==", - "path": "microsoft.extensions.logging.abstractions/2.1.1", - "hashPath": "microsoft.extensions.logging.abstractions.2.1.1.nupkg.sha512" + "sha512": "sha512-B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==", + "path": "microsoft.extensions.logging.abstractions/2.2.0", + "hashPath": "microsoft.extensions.logging.abstractions.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Options/2.1.1": { + "Microsoft.Extensions.Options/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-V7lXCU78lAbzaulCGFKojcCyG8RTJicEbiBkPJjFqiqXwndEBBIehdXRMWEVU3UtzQ1yDvphiWUL9th6/4gJ7w==", - "path": "microsoft.extensions.options/2.1.1", - "hashPath": "microsoft.extensions.options.2.1.1.nupkg.sha512" + "sha512": "sha512-UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "path": "microsoft.extensions.options/2.2.0", + "hashPath": "microsoft.extensions.options.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Primitives/2.1.1": { + "Microsoft.Extensions.Primitives/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-scJ1GZNIxMmjpENh0UZ8XCQ6vzr/LzeF9WvEA51Ix2OQGAs9WPgPu8ABVUdvpKPLuor/t05gm6menJK3PwqOXg==", - "path": "microsoft.extensions.primitives/2.1.1", - "hashPath": "microsoft.extensions.primitives.2.1.1.nupkg.sha512" + "sha512": "sha512-azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "path": "microsoft.extensions.primitives/2.2.0", + "hashPath": "microsoft.extensions.primitives.2.2.0.nupkg.sha512" }, - "Microsoft.NETCore.App/2.1.6": { + "Microsoft.NETCore.App/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-4KShBFobByVw92OH1mYbXqy10D2AMSYZCjhVjYxDooIpYZPTJJ5ArkLRaoGk1+7+55MiSb52Ys2mDdO2JW7ddA==", - "path": "microsoft.netcore.app/2.1.6", - "hashPath": "microsoft.netcore.app.2.1.6.nupkg.sha512" + "sha512": "sha512-oVeSsnIqzD0VuS3xoZRA1SAfq/aLscEy12TaeIP5H6FIOBo9Ta1sMkyc7Pj3ZDJz3fsWeYf/4fR5Ft8Y+oqdzg==", + "path": "microsoft.netcore.app/2.1.12", + "hashPath": "microsoft.netcore.app.2.1.12.nupkg.sha512" }, - "Microsoft.NETCore.DotNetAppHost/2.1.6": { + "Microsoft.NETCore.DotNetAppHost/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-BbhLwFZNhT9mL6Wa8Me9VQN6kYSqb56G/epwh92x1ZJjcx+nFaf6X8tdpfmhVOGwztR62PEn9GvCJgkelIN6PQ==", - "path": "microsoft.netcore.dotnetapphost/2.1.6", - "hashPath": "microsoft.netcore.dotnetapphost.2.1.6.nupkg.sha512" + "sha512": "sha512-bjRuqLIp7JLORwwH5PTZOKIozs68ulLLcSMRcTmOymOqV35PFE+VE6M2SmR6OQsxG0ViIuxM1YwQdYwlIzG3cQ==", + "path": "microsoft.netcore.dotnetapphost/2.1.12", + "hashPath": "microsoft.netcore.dotnetapphost.2.1.12.nupkg.sha512" }, - "Microsoft.NETCore.DotNetHostPolicy/2.1.6": { + "Microsoft.NETCore.DotNetHostPolicy/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-kx3ZCtbdjnMYOO0nL9vhcgbW/oEPWOkefPm1vqE7ufwChhc/AiRHGY8iYNKQdCRKqE7nDrI6mXyOvIT4+aXrgw==", - "path": "microsoft.netcore.dotnethostpolicy/2.1.6", - "hashPath": "microsoft.netcore.dotnethostpolicy.2.1.6.nupkg.sha512" + "sha512": "sha512-A1tafTgEtO7yLIst4n7PrZJtqyc25JHEPII5/2tTIqTymaUA8p8wun9SpwX0dTYxcQbQmfK2yp402kuHU3oVcQ==", + "path": "microsoft.netcore.dotnethostpolicy/2.1.12", + "hashPath": "microsoft.netcore.dotnethostpolicy.2.1.12.nupkg.sha512" }, - "Microsoft.NETCore.DotNetHostResolver/2.1.6": { + "Microsoft.NETCore.DotNetHostResolver/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-0pd2Ts5l4LtCwlDSQMeX9IFdYUdB7cAinGrkMMKzJlyEhoHVHBvlQlDQEugIb70Ls4olG0UJcDtOGOqf38Dzbw==", - "path": "microsoft.netcore.dotnethostresolver/2.1.6", - "hashPath": "microsoft.netcore.dotnethostresolver.2.1.6.nupkg.sha512" + "sha512": "sha512-S7trRhPhQ/O+ZapKoKyjmiveC78yUAQ1usE3qsVT2W9NfI1Hk04aIwDwmio9GWNqUljXzCbK+B7h9CQe5GPJMQ==", + "path": "microsoft.netcore.dotnethostresolver/2.1.12", + "hashPath": "microsoft.netcore.dotnethostresolver.2.1.12.nupkg.sha512" }, - "Microsoft.NETCore.Platforms/2.1.2": { + "Microsoft.NETCore.Platforms/2.1.5": { "type": "package", "serviceable": true, - "sha512": "sha512-7J7veIH7Mu6zc4llWnM7YRgTv9+Ew+JWkkDj0K7cEe8wuFA6HRt6STtwux2g+qjpDXeYeWsK0UQ3uIgRiTYHIg==", - "path": "microsoft.netcore.platforms/2.1.2", - "hashPath": "microsoft.netcore.platforms.2.1.2.nupkg.sha512" + "sha512": "sha512-FW1dYOftgUODWh91w97B7fJL9oaderZzbIOGNRe3FS9Yl40yaMz+cHWdQ+X9uE9agCmLzuCx/Yyxt8QSnooHsA==", + "path": "microsoft.netcore.platforms/2.1.5", + "hashPath": "microsoft.netcore.platforms.2.1.5.nupkg.sha512" }, "Microsoft.NETCore.Targets/2.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-mJnCMoBfWL0lxxlBFJ/8cZKTfPpI82TekZkUqvSCBtunUaaqr2LVeWl1zQYdanAdk4Ddf1HCwb8+DNYaNFBk1w==", + "sha512": "sha512-odP/tJj1z6GylFpNo7pMtbd/xQgTC3Ex2If63dRTL38bBNMwsBnJ+RceUIyHdRBC0oik/3NehYT+oECwBhIM3Q==", "path": "microsoft.netcore.targets/2.0.0", "hashPath": "microsoft.netcore.targets.2.0.0.nupkg.sha512" }, @@ -2636,14 +2795,14 @@ "MSBuild.StructuredLogger/2.0.11": { "type": "package", "serviceable": true, - "sha512": "sha512-LYK6MOfPUEE/u10OepnvFOjFy12YWOjtXXIh3K0RtUzdjatIHZSAjU8MKPuGcegi06iblNH2Rlc78vc2AVokhg==", + "sha512": "sha512-youJH/f03XEYwre6DWT+a8Fjb6Vs/UfioczhKYohHK24ljUSLBCRaopXX2+VzeA/7aQjmRmr4HYpzD9cCCJM9w==", "path": "msbuild.structuredlogger/2.0.11", "hashPath": "msbuild.structuredlogger.2.0.11.nupkg.sha512" }, "MsBuildPipeLogger.Server/1.1.2": { "type": "package", "serviceable": true, - "sha512": "sha512-4gxSIkc4mMpHemehqDAZzGdKAhGJAxyt+56SUi6B4X2FWijojXzcIr7illkuEA7Ex05eoa5Cx4pr6d1hn4m8lg==", + "sha512": "sha512-3kIOap0qKW+/+Cd9o6tUM420ibgzCVuhTvLXVRv7M6EOmkH1iEiUsUTkFeQ+SqH5JuLHZfXmEZieDiWvRFtq1Q==", "path": "msbuildpipelogger.server/1.1.2", "hashPath": "msbuildpipelogger.server.1.1.2.nupkg.sha512" }, @@ -2654,12 +2813,12 @@ "path": "netstandard.library/2.0.3", "hashPath": "netstandard.library.2.0.3.nupkg.sha512" }, - "Newtonsoft.Json/9.0.1": { + "Newtonsoft.Json/11.0.2": { "type": "package", "serviceable": true, - "sha512": "sha512-U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", - "path": "newtonsoft.json/9.0.1", - "hashPath": "newtonsoft.json.9.0.1.nupkg.sha512" + "sha512": "sha512-IvJe1pj7JHEsP8B8J8DwlMEx8UInrs/x+9oVY+oCD13jpLu4JbJU2WCIsMRn5C4yW9+DgkaO8uiVE5VHKjpmdQ==", + "path": "newtonsoft.json/11.0.2", + "hashPath": "newtonsoft.json.11.0.2.nupkg.sha512" }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "type": "package", @@ -2682,33 +2841,33 @@ "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" }, - "runtime.linux-x64.Microsoft.NETCore.App/2.1.6": { + "runtime.linux-x64.Microsoft.NETCore.App/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-22CNvtYsY2oSw8BWoiLUNRH+wzih7gUDPVxZ+2487Tihav+GiR0jZ19aLDP5NTJ+eX7G6k9KDeXbr+avwnvXog==", - "path": "runtime.linux-x64.microsoft.netcore.app/2.1.6", - "hashPath": "runtime.linux-x64.microsoft.netcore.app.2.1.6.nupkg.sha512" + "sha512": "sha512-V1+XSc/6lp9xBmEygs6FLR0rhY5nugy8HHP24VXQshx6sf4uxgtXiMtdJhnQ8o80992BWzpSofy9L2F78/FPAw==", + "path": "runtime.linux-x64.microsoft.netcore.app/2.1.12", + "hashPath": "runtime.linux-x64.microsoft.netcore.app.2.1.12.nupkg.sha512" }, - "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost/2.1.6": { + "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-CLa9mCOLOpL3iybElab64zuLAF9+N8ZRPMm0vUcDnkvvYTYfDwK3OpOb+Zri4k5RcfPHnNDgjppUAM0qapqQaQ==", - "path": "runtime.linux-x64.microsoft.netcore.dotnetapphost/2.1.6", - "hashPath": "runtime.linux-x64.microsoft.netcore.dotnetapphost.2.1.6.nupkg.sha512" + "sha512": "sha512-sGJUhkT8h8vp4wWNLRpI8am7z3wBxV13DrKzOZAKg3JhbPrIP4+ekuU4hVbTDgRvc5CLksPXPxabqxUjMZIzsA==", + "path": "runtime.linux-x64.microsoft.netcore.dotnetapphost/2.1.12", + "hashPath": "runtime.linux-x64.microsoft.netcore.dotnetapphost.2.1.12.nupkg.sha512" }, - "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.6": { + "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-6IUMyD3ZbwA2bVyBfUqf592DiYlR6k/DSS6W3wbFu3QkA4AIOBO+ZozneeKXDLBxAbDQesGxNY9zAtp9kMMTjw==", - "path": "runtime.linux-x64.microsoft.netcore.dotnethostpolicy/2.1.6", - "hashPath": "runtime.linux-x64.microsoft.netcore.dotnethostpolicy.2.1.6.nupkg.sha512" + "sha512": "sha512-d7RpcaDJbfP2FFW0MDdake932VQtW7jdxcRPT6wtVg9nJITCkrD/E772DqshgyT/bO5Gz+AZBmUbIm09JwI8lQ==", + "path": "runtime.linux-x64.microsoft.netcore.dotnethostpolicy/2.1.12", + "hashPath": "runtime.linux-x64.microsoft.netcore.dotnethostpolicy.2.1.12.nupkg.sha512" }, - "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver/2.1.6": { + "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-JnOsn3tuGrAtV/bT+PlPaGs25qAf3JKZp3LeTy0KR+xIQp1NzyUxRaOziaUMaoPuDnCYI39mYciibcFIYrquLw==", - "path": "runtime.linux-x64.microsoft.netcore.dotnethostresolver/2.1.6", - "hashPath": "runtime.linux-x64.microsoft.netcore.dotnethostresolver.2.1.6.nupkg.sha512" + "sha512": "sha512-Cgn1enQnuUnKB3lcywqe2JTxQaSntpGrekovy9GjfKQU16qXsRcSo7sLtvWLIc8p7Oon12Q2fy7XByxH9u4shA==", + "path": "runtime.linux-x64.microsoft.netcore.dotnethostresolver/2.1.12", + "hashPath": "runtime.linux-x64.microsoft.netcore.dotnethostresolver.2.1.12.nupkg.sha512" }, "runtime.native.System/4.3.0": { "type": "package", @@ -2720,7 +2879,7 @@ "runtime.native.System.IO.Compression/4.3.0": { "type": "package", "serviceable": true, - "sha512": "sha512-INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", + "sha512": "sha512-b+V9JC/Ii3sR659flBeaBJww111425tgjcDS1k+hqV4sGh9FALRDBvJnDtQ895gAzpPTUOFDHdqaZ2Et7BpZMg==", "path": "runtime.native.system.io.compression/4.3.0", "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" }, @@ -2776,7 +2935,7 @@ "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "type": "package", "serviceable": true, - "sha512": "sha512-nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==", + "sha512": "sha512-T5NvFgmHX0WH4c7lP72krsnk+IJI10vJf2j2twGE+5QBRA4RyRAgD+ZjEgdmpLOjW4B+nZGaadewTCUcR899OQ==", "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" }, @@ -2818,7 +2977,7 @@ "System.CodeDom/4.4.0": { "type": "package", "serviceable": true, - "sha512": "sha512-E/lvSfMFPtNflAgdM6AuPU8JbZdqdSoGpU66G7SrduCqdrFyPflaqqV4gN2d0hrCBpu92HaoqpUP5d+g9Itcxw==", + "sha512": "sha512-2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA==", "path": "system.codedom/4.4.0", "hashPath": "system.codedom.4.4.0.nupkg.sha512" }, @@ -2843,6 +3002,13 @@ "path": "system.collections.immutable/1.5.0", "hashPath": "system.collections.immutable.1.5.0.nupkg.sha512" }, + "System.ComponentModel.Annotations/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==", + "path": "system.componentmodel.annotations/4.5.0", + "hashPath": "system.componentmodel.annotations.4.5.0.nupkg.sha512" + }, "System.Composition/1.0.31": { "type": "package", "serviceable": true, @@ -2937,7 +3103,7 @@ "System.Diagnostics.TraceSource/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-q5bGzzvXVi+dIMiPWRhXZV7r+Os3TEOuRW5LHsAUDGpqJHol8XiLokVpsgAfPqHHNkyx1bbv5lRZqRkRrGZKxQ==", + "sha512": "sha512-6WVCczFZKXwpWpzd/iJkYnsmWTSFFiU24Xx/YdHXBcu+nFI/ehTgeqdJQFbtRPzbrO3KtRNjvkhtj4t5/WwWsA==", "path": "system.diagnostics.tracesource/4.0.0", "hashPath": "system.diagnostics.tracesource.4.0.0.nupkg.sha512" }, @@ -3119,7 +3285,7 @@ "System.Resources.Writer/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-mGgwPBXGTqnw6lQeRI24ChoyPViWx36MVfN6Ys1ceLJMTQDMHcoLiMHOzSvA7ZgjX2tWBy8nfjzlN1kDL/G1gQ==", + "sha512": "sha512-Hz+ZS81dVSNy93YyJhhL3GwzmMhfcQ8FbUooAt9MO4joIe0vPM4gclv0C82ko1tuN/Kw6CvZFLYkgk6n9xvEkg==", "path": "system.resources.writer/4.0.0", "hashPath": "system.resources.writer.4.0.0.nupkg.sha512" }, @@ -3168,7 +3334,7 @@ "System.Runtime.Loader/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-AGWrywLI2B15/dnLuFnlHWFjXmq1Tl0kjWaKTHbaJ8T9kIxiQ8YGTtiMQc8rUr49l2JjfZa7QY0KKqlyzA7NNg==", + "sha512": "sha512-4UN78GOVU/mbDFcXkEWtetJT/sJ0yic2gGk1HSlSpWI0TDf421xnrZTDZnwNBapk1GQeYN7U1lTj/aQB1by6ow==", "path": "system.runtime.loader/4.0.0", "hashPath": "system.runtime.loader.4.0.0.nupkg.sha512" }, @@ -3266,7 +3432,7 @@ "System.Text.Encoding.CodePages/4.4.0": { "type": "package", "serviceable": true, - "sha512": "sha512-FpAgMC+BX6OOCiRebYqHP3r3aYU7o0lopPOo4zKyGc5LWXFEYRUaKtoXXvAJ3sP+IDOK/KBxZaiVAdi+QdZ0TA==", + "sha512": "sha512-6JX7ZdaceBiLKLkYt8zJcp4xTJd1uYyXXEkPw6mnlUIjh1gZPIVKPtRXPmY5kLf6DwZmf5YLwR3QUrRonl7l0A==", "path": "system.text.encoding.codepages/4.4.0", "hashPath": "system.text.encoding.codepages.4.4.0.nupkg.sha512" }, @@ -3301,16 +3467,16 @@ "System.Threading.Tasks.Dataflow/4.6.0": { "type": "package", "serviceable": true, - "sha512": "sha512-U+WVv+MkUi5T7PM3yJD7WsX0pnlzNcM08r+ua2P5MpvGXv69DE+3bBfhdz8U6ZxvPthkvDvqy/AaIxZhKKgUdw==", + "sha512": "sha512-2hRjGu2r2jxRZ55wmcHO/WbdX+YAOz9x6FE8xqkHZgPaoFMKQZRe9dk8xTZIas8fRjxRmzawnTEWIrhlM+Un7w==", "path": "system.threading.tasks.dataflow/4.6.0", "hashPath": "system.threading.tasks.dataflow.4.6.0.nupkg.sha512" }, - "System.Threading.Tasks.Extensions/4.3.0": { + "System.Threading.Tasks.Extensions/4.5.2": { "type": "package", "serviceable": true, - "sha512": "sha512-npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", - "path": "system.threading.tasks.extensions/4.3.0", - "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" + "sha512": "sha512-BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w==", + "path": "system.threading.tasks.extensions/4.5.2", + "hashPath": "system.threading.tasks.extensions.4.5.2.nupkg.sha512" }, "System.Threading.Tasks.Parallel/4.3.0": { "type": "package", @@ -3326,12 +3492,12 @@ "path": "system.threading.thread/4.3.0", "hashPath": "system.threading.thread.4.3.0.nupkg.sha512" }, - "System.ValueTuple/4.3.0": { + "System.ValueTuple/4.4.0": { "type": "package", "serviceable": true, - "sha512": "sha512-cNLEvBX3d6MMQRZe3SMFNukVbitDAEpVZO17qa0/2FHxZ7Y7PpFRpr6m2615XYM/tYYYf0B+WyHNujqIw8Luwg==", - "path": "system.valuetuple/4.3.0", - "hashPath": "system.valuetuple.4.3.0.nupkg.sha512" + "sha512": "sha512-BahUww/+mdP4ARCAh2RQhQTg13wYLVrBb9SYVgW8ZlrwjraGCXHGjo0oIiUfZ34LUZkMMR+RAzR7dEY4S1HeQQ==", + "path": "system.valuetuple/4.4.0", + "hashPath": "system.valuetuple.4.4.0.nupkg.sha512" }, "System.Xml.ReaderWriter/4.3.0": { "type": "package", @@ -3367,6 +3533,13 @@ "sha512": "sha512-jw9oHHEIVW53mHY9PgrQa98Xo2IZ0ZjrpdOTmtvk+Rvg4tq7dydmxdNqUvJ5YwjDqhn75mBXWttWjiKhWP53LQ==", "path": "system.xml.xpath.xdocument/4.3.0", "hashPath": "system.xml.xpath.xdocument.4.3.0.nupkg.sha512" + }, + "Utf8Json/1.3.7": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lMTNZWp6a6KGkgMc3rW41D3b0REb03fQycfb/2bNBpiUtsbGYYI/LrAhnX52vrHRe4ze7JxbtpWF1Y5ohdpipQ==", + "path": "utf8json/1.3.7", + "hashPath": "utf8json.1.3.7.nupkg.sha512" } } } \ No newline at end of file diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc.dll index 3410eb29d..d3b95d057 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc.xml b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc.xml new file mode 100644 index 000000000..9b4e0f0d8 --- /dev/null +++ b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/moc.xml @@ -0,0 +1,533 @@ + + + + moc + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/mscorlib.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/mscorlib.dll index 31ed34e3b..9b5d47b42 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/mscorlib.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/mscorlib.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/netstandard.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/netstandard.dll index 401b3a696..b67fc8ec8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/netstandard.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/linux-x64/netstandard.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/MicroBatchFramework.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/MicroBatchFramework.dll new file mode 100644 index 000000000..e827005d9 Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/MicroBatchFramework.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.CSharp.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.CSharp.dll index 5907e1322..5f0aaadd3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.CSharp.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.CSharp.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.Abstractions.dll index 80d73edd0..540e09431 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.Abstractions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.Binder.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.Binder.dll index 2415b679f..f05e2d84b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.Binder.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.Binder.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.EnvironmentVariables.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.EnvironmentVariables.dll new file mode 100644 index 000000000..e482d42a6 Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.EnvironmentVariables.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.FileExtensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.FileExtensions.dll new file mode 100644 index 000000000..15126f98d Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.FileExtensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.Json.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.Json.dll new file mode 100644 index 000000000..01f57dadf Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.Json.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.UserSecrets.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.UserSecrets.dll new file mode 100644 index 000000000..e989698a5 Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.UserSecrets.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.dll index aa1f010ce..50f78a0af 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Configuration.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll index 7d8769b80..be10eccde 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.DependencyInjection.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.DependencyInjection.dll new file mode 100644 index 000000000..7fa7c1f3f Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.DependencyInjection.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.FileProviders.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.FileProviders.Abstractions.dll new file mode 100644 index 000000000..bca33155e Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.FileProviders.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.FileProviders.Physical.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.FileProviders.Physical.dll new file mode 100644 index 000000000..54c1a8348 Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.FileProviders.Physical.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.FileSystemGlobbing.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.FileSystemGlobbing.dll new file mode 100644 index 000000000..0459c635a Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.FileSystemGlobbing.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Hosting.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Hosting.Abstractions.dll new file mode 100644 index 000000000..8f4da6fbd Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Hosting.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Hosting.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Hosting.dll new file mode 100644 index 000000000..e4ebcea2b Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Hosting.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Logging.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Logging.Abstractions.dll index 98b2019d5..4e8e3f2b4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Logging.Abstractions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Logging.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Logging.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Logging.dll index 662d975f2..ceb746240 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Logging.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Logging.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Options.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Options.dll index 065d0157b..b4017e0ad 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Options.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Options.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Primitives.dll index 1999bace8..62324a7a1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Extensions.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.VisualBasic.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.VisualBasic.dll index 44831f3dc..56ac0957d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.VisualBasic.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.VisualBasic.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Win32.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Win32.Primitives.dll index 7afb50d28..aa9374062 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Win32.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Win32.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Win32.Registry.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Win32.Registry.dll index 90a76d04b..009ce25a1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Win32.Registry.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Microsoft.Win32.Registry.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Newtonsoft.Json.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Newtonsoft.Json.dll index 5f2336e6c..e2118f9b9 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Newtonsoft.Json.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Newtonsoft.Json.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/SOS.NETCore.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/SOS.NETCore.dll index 1df757721..9409d3011 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/SOS.NETCore.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/SOS.NETCore.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.AppContext.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.AppContext.dll index 2cfde85ba..9338597f6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.AppContext.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.AppContext.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Buffers.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Buffers.dll index ce0573ea8..fec4621bc 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Buffers.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Buffers.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.Concurrent.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.Concurrent.dll index 5e82c23e3..2537d36a4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.Concurrent.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.Concurrent.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.Immutable.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.Immutable.dll index 049149f17..4bf08b163 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.Immutable.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.Immutable.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.NonGeneric.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.NonGeneric.dll index 85675cb03..19f688cc6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.NonGeneric.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.NonGeneric.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.Specialized.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.Specialized.dll index 64a75734c..0b1434991 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.Specialized.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.Specialized.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.dll index e0b39b087..4aeb033e4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Collections.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.Annotations.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.Annotations.dll index b48fa77f4..ee134d546 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.Annotations.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.Annotations.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.DataAnnotations.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.DataAnnotations.dll index 51076d0f0..efe48909c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.DataAnnotations.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.DataAnnotations.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.EventBasedAsync.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.EventBasedAsync.dll index 22652b950..15926d43d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.EventBasedAsync.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.EventBasedAsync.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.Primitives.dll index c435ca3eb..5a12f9f0d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.TypeConverter.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.TypeConverter.dll index c01dc50a7..3ac85f847 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.TypeConverter.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.TypeConverter.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.dll index a9781fde3..a0c564418 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ComponentModel.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Configuration.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Configuration.dll index 203c9dc7b..be469d8c2 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Configuration.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Configuration.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Console.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Console.dll index 0543f3e00..248918c40 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Console.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Console.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Core.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Core.dll index 415852183..ccc8ead15 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Core.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Core.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Data.Common.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Data.Common.dll index 3ff68e333..92d84b276 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Data.Common.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Data.Common.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Data.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Data.dll index 450449994..8fe9606e3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Data.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Data.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Contracts.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Contracts.dll index 3ae7e6263..732a5311d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Contracts.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Contracts.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Debug.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Debug.dll index 006cc68c7..609928f81 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Debug.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Debug.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.DiagnosticSource.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.DiagnosticSource.dll index be2b5f647..a5ae73c27 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.DiagnosticSource.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.DiagnosticSource.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.FileVersionInfo.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.FileVersionInfo.dll index f436f3d2f..0fc3ed6f3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.FileVersionInfo.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.FileVersionInfo.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Process.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Process.dll index d802bdacf..5db8ad1ff 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Process.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Process.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.StackTrace.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.StackTrace.dll index 286a87d66..879333ae2 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.StackTrace.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.StackTrace.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.TextWriterTraceListener.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.TextWriterTraceListener.dll index e9ab07657..9895d2d9e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.TextWriterTraceListener.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.TextWriterTraceListener.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Tools.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Tools.dll index f1f854aa6..53876b6ec 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Tools.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Tools.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.TraceSource.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.TraceSource.dll index c5504b791..a7b1329fb 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.TraceSource.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.TraceSource.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Tracing.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Tracing.dll index 93ca5f417..0daa7f1cb 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Tracing.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Diagnostics.Tracing.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Drawing.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Drawing.Primitives.dll index e7a8cd207..90dca89b9 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Drawing.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Drawing.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Drawing.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Drawing.dll index d4ac6de86..e6f29c1a4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Drawing.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Drawing.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Dynamic.Runtime.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Dynamic.Runtime.dll index 6258840cc..e92cb16b9 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Dynamic.Runtime.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Dynamic.Runtime.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.Calendars.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.Calendars.dll index 6befd5972..6df6f90fe 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.Calendars.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.Calendars.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.Extensions.dll index f5ecf2c85..dad29d9fe 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.Native.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.Native.dylib index 81654b8e0..7bdf95204 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.Native.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.Native.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.dll index d7e20595d..7bef3166d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Globalization.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.Brotli.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.Brotli.dll index cb9433b34..d861cc8a1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.Brotli.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.Brotli.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.FileSystem.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.FileSystem.dll index 66a21221b..819f199f4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.FileSystem.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.FileSystem.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.Native.a b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.Native.a index c21f9a292..636f6a2c8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.Native.a and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.Native.a differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.Native.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.Native.dylib index a111237da..fa76fce77 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.Native.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.Native.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.ZipFile.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.ZipFile.dll index 4a4f55f94..fdf601846 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.ZipFile.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.ZipFile.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.dll index 49643f480..7c2e1da9a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Compression.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.AccessControl.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.AccessControl.dll index c2507fc2a..f1f0a9465 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.AccessControl.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.AccessControl.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.DriveInfo.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.DriveInfo.dll index d2c1924e6..2694538a8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.DriveInfo.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.DriveInfo.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.Primitives.dll index 4f676362b..7cbe8efde 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.Watcher.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.Watcher.dll index 0372edfb2..46fa0eb42 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.Watcher.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.Watcher.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.dll index c0d445aba..ae156dce6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.FileSystem.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.IsolatedStorage.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.IsolatedStorage.dll index 497b8ddb9..2f740a070 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.IsolatedStorage.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.IsolatedStorage.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.MemoryMappedFiles.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.MemoryMappedFiles.dll index a6b093325..f2bf9b65a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.MemoryMappedFiles.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.MemoryMappedFiles.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Pipes.AccessControl.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Pipes.AccessControl.dll index 75191eebb..e19cd286a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Pipes.AccessControl.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Pipes.AccessControl.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Pipes.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Pipes.dll index 213f2f8ed..e9c8fb930 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Pipes.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.Pipes.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.UnmanagedMemoryStream.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.UnmanagedMemoryStream.dll index c6f25a87b..c39c7acee 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.UnmanagedMemoryStream.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.UnmanagedMemoryStream.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.dll index 9769089a9..a43209e69 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.IO.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.Expressions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.Expressions.dll index 671c3c622..6e6d1d184 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.Expressions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.Expressions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.Parallel.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.Parallel.dll index 3cca24786..2444635b6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.Parallel.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.Parallel.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.Queryable.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.Queryable.dll index b152f7d11..80ef305ee 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.Queryable.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.Queryable.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.dll index 8808b389a..c15c34e77 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Linq.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Memory.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Memory.dll index feb269255..c44fa5f01 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Memory.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Memory.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Native.a b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Native.a index f5f952b91..9429dddb8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Native.a and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Native.a differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Native.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Native.dylib index 3d8ac0032..3f2f8f7ac 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Native.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Native.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Http.Native.a b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Http.Native.a index 9775a34cf..2596b262c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Http.Native.a and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Http.Native.a differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Http.Native.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Http.Native.dylib index 575d9310a..9c0df7230 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Http.Native.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Http.Native.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Http.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Http.dll index bf1714f0a..3eefdb505 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Http.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Http.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.HttpListener.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.HttpListener.dll index 44cfa2dd7..e69fa4eac 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.HttpListener.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.HttpListener.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Mail.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Mail.dll index 26730410c..71ac18ce2 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Mail.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Mail.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.NameResolution.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.NameResolution.dll index c8795bdb7..71e202a92 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.NameResolution.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.NameResolution.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.NetworkInformation.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.NetworkInformation.dll index b38e88ca2..d0c6ade10 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.NetworkInformation.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.NetworkInformation.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Ping.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Ping.dll index 5fc3b3d2d..3285550aa 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Ping.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Ping.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Primitives.dll index 6b6a50bb9..f3e6d134f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Requests.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Requests.dll index 79bf8cdf5..ee647c66f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Requests.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Requests.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Security.Native.a b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Security.Native.a index d3c61dce1..e60b550de 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Security.Native.a and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Security.Native.a differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Security.Native.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Security.Native.dylib index 0e6bc2ca1..f9cefe92f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Security.Native.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Security.Native.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Security.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Security.dll index bc0c53c16..e7bc662b3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Security.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Security.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.ServicePoint.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.ServicePoint.dll index 9db462a91..1fe1b15bf 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.ServicePoint.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.ServicePoint.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Sockets.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Sockets.dll index 9628d3f57..2a857a67b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Sockets.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.Sockets.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebClient.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebClient.dll index e50d42db6..9459864f7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebClient.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebClient.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebHeaderCollection.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebHeaderCollection.dll index 3c99acad1..c4d8eba3f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebHeaderCollection.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebHeaderCollection.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebProxy.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebProxy.dll index 977f04819..4a74c0e01 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebProxy.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebProxy.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebSockets.Client.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebSockets.Client.dll index 90fa02c69..ae300a2db 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebSockets.Client.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebSockets.Client.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebSockets.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebSockets.dll index c5aaf7388..fb6fd778c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebSockets.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.WebSockets.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.dll index d3136c079..3c5acd17b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Net.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Numerics.Vectors.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Numerics.Vectors.dll index a673b2352..0e00909fc 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Numerics.Vectors.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Numerics.Vectors.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Numerics.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Numerics.dll index 5b2c2a64a..90a9ba0d6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Numerics.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Numerics.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ObjectModel.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ObjectModel.dll index d9f2600e9..ba3474f7e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ObjectModel.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ObjectModel.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.CoreLib.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.CoreLib.dll index fbbf4e35a..9424e09fb 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.CoreLib.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.CoreLib.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.DataContractSerialization.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.DataContractSerialization.dll index 3581b495c..fa4f99237 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.DataContractSerialization.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.DataContractSerialization.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.Uri.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.Uri.dll index c1f98917e..9dcf000c8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.Uri.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.Uri.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.Xml.Linq.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.Xml.Linq.dll index ae264ceaa..887016528 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.Xml.Linq.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.Xml.Linq.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.Xml.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.Xml.dll index 3f284084a..668c9c56c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.Xml.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Private.Xml.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.DispatchProxy.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.DispatchProxy.dll index a135c6f5e..2a013f46f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.DispatchProxy.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.DispatchProxy.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Emit.ILGeneration.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Emit.ILGeneration.dll index ee9dcb299..fa59af33f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Emit.ILGeneration.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Emit.ILGeneration.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Emit.Lightweight.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Emit.Lightweight.dll index 576fe5f8f..a1f282548 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Emit.Lightweight.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Emit.Lightweight.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Emit.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Emit.dll index 21186d0d1..142c2f36e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Emit.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Emit.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Extensions.dll index 6f90798f1..90aac2096 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Metadata.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Metadata.dll index 52082366b..309e2fee1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Metadata.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Metadata.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Primitives.dll index 9221c9448..43efda0ec 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.TypeExtensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.TypeExtensions.dll index eb137b762..f0aed4ef8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.TypeExtensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.TypeExtensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.dll index 09012c624..0b35dda79 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Reflection.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Resources.Reader.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Resources.Reader.dll index 4501e650f..240c8ac0c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Resources.Reader.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Resources.Reader.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Resources.ResourceManager.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Resources.ResourceManager.dll index 28b1baaec..ff016b267 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Resources.ResourceManager.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Resources.ResourceManager.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Resources.Writer.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Resources.Writer.dll index 31d6a2a1d..dcf0ba683 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Resources.Writer.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Resources.Writer.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.CompilerServices.VisualC.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.CompilerServices.VisualC.dll index ba5ec6813..9b6fa0192 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.CompilerServices.VisualC.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.CompilerServices.VisualC.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Extensions.dll index 71a118879..63e54b396 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Handles.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Handles.dll index d625bb8e6..117713206 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Handles.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Handles.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.InteropServices.RuntimeInformation.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.InteropServices.RuntimeInformation.dll index 995bd46d8..b284ebc32 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.InteropServices.RuntimeInformation.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.InteropServices.RuntimeInformation.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.InteropServices.WindowsRuntime.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.InteropServices.WindowsRuntime.dll index a0bee63fd..44680e3f7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.InteropServices.WindowsRuntime.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.InteropServices.WindowsRuntime.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.InteropServices.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.InteropServices.dll index 829624b7e..510a25708 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.InteropServices.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.InteropServices.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Loader.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Loader.dll index 6b50ff1f9..38ae86b31 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Loader.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Loader.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Numerics.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Numerics.dll index 56438c729..2a7f27182 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Numerics.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Numerics.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Formatters.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Formatters.dll index 40dfeef4d..be9ffae9a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Formatters.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Formatters.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Json.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Json.dll index 6de5f204f..b79c262c8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Json.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Json.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Primitives.dll index acf126916..bfb43beac 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Xml.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Xml.dll index e9c536e19..04868e3fc 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Xml.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.Xml.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.dll index 75d46741e..6b62abd3d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.Serialization.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.dll index f1cedd102..7eb242559 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Runtime.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.AccessControl.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.AccessControl.dll index 259794af2..6d0750133 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.AccessControl.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.AccessControl.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Claims.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Claims.dll index 469f378ce..e810e735b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Claims.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Claims.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Algorithms.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Algorithms.dll index 2ec3299ef..f26e9983a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Algorithms.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Algorithms.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Cng.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Cng.dll index 0474e6758..31088770f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Cng.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Cng.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Csp.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Csp.dll index 5d29a437b..9c2ed7e0a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Csp.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Csp.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Encoding.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Encoding.dll index 06a2794a2..a5e73eb77 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Encoding.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Encoding.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.Apple.a b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.Apple.a index 5ca96a3b9..b8bec44d1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.Apple.a and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.Apple.a differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.Apple.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.Apple.dylib index be6f4024e..f1f4fa9e4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.Apple.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.Apple.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.OpenSsl.a b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.OpenSsl.a index ba1122d16..66b7215a0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.OpenSsl.a and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.OpenSsl.a differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.OpenSsl.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.OpenSsl.dylib index a82349302..c624ca74f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.OpenSsl.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Native.OpenSsl.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.OpenSsl.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.OpenSsl.dll index d3c17737f..3bd511426 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.OpenSsl.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.OpenSsl.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Primitives.dll index 98930ea49..53a1bb986 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.X509Certificates.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.X509Certificates.dll index 5fadbfded..5dd58bc93 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.X509Certificates.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Cryptography.X509Certificates.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Principal.Windows.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Principal.Windows.dll index defdd1b96..4a5e88e7a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Principal.Windows.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Principal.Windows.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Principal.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Principal.dll index 6bf385f54..b26132e6d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Principal.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.Principal.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.SecureString.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.SecureString.dll index 0bf2d3b4e..8667a8c25 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.SecureString.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.SecureString.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.dll index 4c93b979d..74bb60ec7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Security.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ServiceModel.Web.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ServiceModel.Web.dll index 8272a7e3e..b1d9a4c74 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ServiceModel.Web.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ServiceModel.Web.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ServiceProcess.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ServiceProcess.dll index 4543a138f..d266e1fcb 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ServiceProcess.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ServiceProcess.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Text.Encoding.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Text.Encoding.Extensions.dll index ac46de121..f0b0c3f80 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Text.Encoding.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Text.Encoding.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Text.Encoding.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Text.Encoding.dll index 5b3d3437c..cfa37a981 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Text.Encoding.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Text.Encoding.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Text.RegularExpressions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Text.RegularExpressions.dll index a8055f689..d64d7fb9c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Text.RegularExpressions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Text.RegularExpressions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Overlapped.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Overlapped.dll index c49e00518..3ffa6093f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Overlapped.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Overlapped.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.Dataflow.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.Dataflow.dll index f318f0af3..d116e9218 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.Dataflow.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.Dataflow.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.Extensions.dll index c61ccc2e0..7e79d6420 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.Parallel.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.Parallel.dll index 91a419604..a49296cde 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.Parallel.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.Parallel.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.dll index f1e514839..5602074dc 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Tasks.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Thread.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Thread.dll index 37e680a8d..ed4ee24f3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Thread.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Thread.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.ThreadPool.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.ThreadPool.dll index db07bb2c1..2fcbfe38d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.ThreadPool.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.ThreadPool.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Timer.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Timer.dll index fa686b384..3902d065b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Timer.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.Timer.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.dll index c8b0f7d7d..83d79e622 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Threading.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Transactions.Local.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Transactions.Local.dll index 8081b0eef..33b988e15 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Transactions.Local.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Transactions.Local.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Transactions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Transactions.dll index 5d428d47b..abb23d111 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Transactions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Transactions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ValueTuple.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ValueTuple.dll index 40e2a3e49..2e5d6dfe4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ValueTuple.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.ValueTuple.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Web.HttpUtility.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Web.HttpUtility.dll index ff40c1fd1..fe5e23bfa 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Web.HttpUtility.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Web.HttpUtility.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Web.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Web.dll index 0d2e5379e..75f9cbeb3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Web.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Web.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Windows.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Windows.dll index e1802c6a3..930fa5ae0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Windows.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Windows.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.Linq.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.Linq.dll index 23ee0f872..b000ee3d7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.Linq.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.Linq.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.ReaderWriter.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.ReaderWriter.dll index 4fb4c6ccd..1c0324efa 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.ReaderWriter.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.ReaderWriter.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.Serialization.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.Serialization.dll index 0ef3a5f1a..f327458d0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.Serialization.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.Serialization.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XDocument.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XDocument.dll index c43ed8bd9..31bc28137 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XDocument.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XDocument.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XPath.XDocument.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XPath.XDocument.dll index 56eddc68f..570e29a7c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XPath.XDocument.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XPath.XDocument.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XPath.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XPath.dll index 88fed0af2..2cad32602 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XPath.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XPath.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XmlDocument.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XmlDocument.dll index e89aee3ea..cd1f821f6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XmlDocument.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XmlDocument.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XmlSerializer.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XmlSerializer.dll index 327747b57..818faf537 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XmlSerializer.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.XmlSerializer.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.dll index 1eb3f253d..0e25992f1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.Xml.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.dll index f77bd3c10..1c69a734f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/System.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Utf8Json.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Utf8Json.dll new file mode 100644 index 000000000..24ac36cfb Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/Utf8Json.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/WindowsBase.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/WindowsBase.dll index ea663daa5..21100838c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/WindowsBase.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/WindowsBase.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libclrjit.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libclrjit.dylib index 2a821c80d..544f57a0e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libclrjit.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libclrjit.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libcoreclr.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libcoreclr.dylib index 21abdd42c..ab8151c9b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libcoreclr.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libcoreclr.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libdbgshim.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libdbgshim.dylib index 5c9f7edad..046078ab8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libdbgshim.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libdbgshim.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libhostfxr.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libhostfxr.dylib index 5d78bee4f..285fd4464 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libhostfxr.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libhostfxr.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libhostpolicy.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libhostpolicy.dylib index 8517b7ac0..45c280350 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libhostpolicy.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libhostpolicy.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libmscordaccore.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libmscordaccore.dylib index 9cfeb940d..70ba00024 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libmscordaccore.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libmscordaccore.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libmscordbi.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libmscordbi.dylib index 8389501f6..ad520de1d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libmscordbi.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libmscordbi.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libsos.dylib b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libsos.dylib index c8805eb7f..1c37262b5 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libsos.dylib and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/libsos.dylib differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc index c6c6edb4c..9423b8f53 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc.deps.json b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc.deps.json index e16ab0aa6..f812d69e5 100644 --- a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc.deps.json +++ b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc.deps.json @@ -1,7 +1,7 @@ { "runtimeTarget": { "name": ".NETCoreApp,Version=v2.1/osx-x64", - "signature": "776ec154a4dca8aac1610fd3835c98d9b4d9e5b4" + "signature": "2e3bce28629893027bd176b11d15c8c8da48fa1f" }, "compilationOptions": {}, "targets": { @@ -10,7 +10,8 @@ "moc/1.0.0": { "dependencies": { "Buildalyzer.Workspaces": "2.2.0", - "Microsoft.NETCore.App": "2.1.6" + "MicroBatchFramework": "1.2.0", + "Microsoft.NETCore.App": "2.1.12" }, "runtime": { "moc.dll": {} @@ -25,8 +26,8 @@ "Microsoft.Build.Tasks.Core": "15.8.166", "Microsoft.Build.Utilities.Core": "15.8.166", "Microsoft.Extensions.DependencyModel": "2.1.0", - "Microsoft.Extensions.Logging": "2.1.1", - "Microsoft.Extensions.Logging.Abstractions": "2.1.1", + "Microsoft.Extensions.Logging": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", "MsBuildPipeLogger.Server": "1.1.2" }, "runtime": { @@ -64,6 +65,22 @@ } } }, + "MicroBatchFramework/1.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.EnvironmentVariables": "2.2.0", + "Microsoft.Extensions.Configuration.Json": "2.2.0", + "Microsoft.Extensions.Configuration.UserSecrets": "2.2.0", + "Microsoft.Extensions.Hosting": "2.2.0", + "System.Threading.Tasks.Extensions": "4.5.2", + "Utf8Json": "1.3.7" + }, + "runtime": { + "lib/netstandard2.0/MicroBatchFramework.dll": { + "assemblyVersion": "1.2.0.0", + "fileVersion": "1.2.0.0" + } + } + }, "Microsoft.Build/15.8.166": { "dependencies": { "Microsoft.Build.Framework": "15.8.166", @@ -169,10 +186,10 @@ "System.Text.Encoding.Extensions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0", + "System.Threading.Tasks.Extensions": "4.5.2", "System.Threading.Tasks.Parallel": "4.3.0", "System.Threading.Thread": "4.3.0", - "System.ValueTuple": "4.3.0", + "System.ValueTuple": "4.4.0", "System.Xml.ReaderWriter": "4.3.0", "System.Xml.XDocument": "4.3.0", "System.Xml.XPath.XDocument": "4.3.0", @@ -494,26 +511,6 @@ } } }, - "Microsoft.CSharp/4.0.1": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0" - } - }, "Microsoft.DotNet.PlatformAbstractions/2.1.0": { "dependencies": { "System.AppContext": "4.3.0", @@ -532,51 +529,109 @@ } } }, - "Microsoft.Extensions.Configuration/2.1.1": { + "Microsoft.Extensions.Configuration/2.2.0": { "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.1.1" + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { + "Microsoft.Extensions.Configuration.Abstractions/2.2.0": { "dependencies": { - "Microsoft.Extensions.Primitives": "2.1.1" + "Microsoft.Extensions.Primitives": "2.2.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Configuration.Binder/2.1.1": { + "Microsoft.Extensions.Configuration.Binder/2.2.0": { "dependencies": { - "Microsoft.Extensions.Configuration": "2.1.1" + "Microsoft.Extensions.Configuration": "2.2.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { + "Microsoft.Extensions.Configuration.FileExtensions/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0", + "Microsoft.Extensions.FileProviders.Physical": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Configuration.Json/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0", + "Microsoft.Extensions.Configuration.FileExtensions": "2.2.0", + "Newtonsoft.Json": "11.0.2" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Configuration.UserSecrets/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Json": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.DependencyInjection/2.2.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + }, + "runtime": { + "lib/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/2.2.0": { "runtime": { "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, "Microsoft.Extensions.DependencyModel/2.1.0": { "dependencies": { "Microsoft.DotNet.PlatformAbstractions": "2.1.0", - "Newtonsoft.Json": "9.0.1", + "Newtonsoft.Json": "11.0.2", "System.Diagnostics.Debug": "4.3.0", "System.Dynamic.Runtime": "4.3.0", "System.Linq": "4.3.0" @@ -588,90 +643,151 @@ } } }, - "Microsoft.Extensions.Logging/2.1.1": { + "Microsoft.Extensions.FileProviders.Abstractions/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.FileProviders.Physical/2.2.0": { + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Extensions.FileSystemGlobbing": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.FileSystemGlobbing/2.2.0": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Hosting/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0", + "Microsoft.Extensions.DependencyInjection": "2.2.0", + "Microsoft.Extensions.FileProviders.Physical": "2.2.0", + "Microsoft.Extensions.Hosting.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Hosting.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18316" + } + } + }, + "Microsoft.Extensions.Hosting.Abstractions/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Hosting.Abstractions.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18316" + } + } + }, + "Microsoft.Extensions.Logging/2.2.0": { "dependencies": { - "Microsoft.Extensions.Configuration.Binder": "2.1.1", - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", - "Microsoft.Extensions.Logging.Abstractions": "2.1.1", - "Microsoft.Extensions.Options": "2.1.1" + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Logging.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Logging.Abstractions/2.1.1": { + "Microsoft.Extensions.Logging.Abstractions/2.2.0": { "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Options/2.1.1": { + "Microsoft.Extensions.Options/2.2.0": { "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", - "Microsoft.Extensions.Primitives": "2.1.1" + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Options.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Primitives/2.1.1": { + "Microsoft.Extensions.Primitives/2.2.0": { "dependencies": { "System.Memory": "4.5.1", "System.Runtime.CompilerServices.Unsafe": "4.5.1" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.NETCore.App/2.1.6": { + "Microsoft.NETCore.App/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetHostPolicy": "2.1.6", - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.DotNetHostPolicy": "2.1.12", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "NETStandard.Library": "2.0.3", - "runtime.osx-x64.Microsoft.NETCore.App": "2.1.6" + "runtime.osx-x64.Microsoft.NETCore.App": "2.1.12" } }, - "Microsoft.NETCore.DotNetAppHost/2.1.6": { + "Microsoft.NETCore.DotNetAppHost/2.1.12": { "dependencies": { - "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost": "2.1.6" + "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost": "2.1.12" } }, - "Microsoft.NETCore.DotNetHostPolicy/2.1.6": { + "Microsoft.NETCore.DotNetHostPolicy/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetHostResolver": "2.1.6", - "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy": "2.1.6" + "Microsoft.NETCore.DotNetHostResolver": "2.1.12", + "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy": "2.1.12" } }, - "Microsoft.NETCore.DotNetHostResolver/2.1.6": { + "Microsoft.NETCore.DotNetHostResolver/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetAppHost": "2.1.6", - "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver": "2.1.6" + "Microsoft.NETCore.DotNetAppHost": "2.1.12", + "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver": "2.1.12" } }, - "Microsoft.NETCore.Platforms/2.1.2": {}, + "Microsoft.NETCore.Platforms/2.1.5": {}, "Microsoft.NETCore.Targets/2.0.0": {}, "Microsoft.Win32.Primitives/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "Microsoft.Win32.Registry/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", @@ -709,38 +825,14 @@ }, "NETStandard.Library/2.0.3": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2" + "Microsoft.NETCore.Platforms": "2.1.5" } }, - "Newtonsoft.Json/9.0.1": { - "dependencies": { - "Microsoft.CSharp": "4.0.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Serialization.Primitives": "4.1.1", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0" - }, + "Newtonsoft.Json/11.0.2": { "runtime": { - "lib/netstandard1.0/Newtonsoft.Json.dll": { - "assemblyVersion": "9.0.0.0", - "fileVersion": "9.0.1.19813" + "lib/netstandard2.0/Newtonsoft.Json.dll": { + "assemblyVersion": "11.0.0.0", + "fileVersion": "11.0.2.21924" } } }, @@ -749,19 +841,19 @@ "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, "runtime.native.System/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0" } }, "runtime.native.System.IO.Compression/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0" } }, "runtime.native.System.Net.Http/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0" } }, @@ -786,619 +878,627 @@ }, "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.osx-x64.Microsoft.NETCore.App/2.1.6": { + "runtime.osx-x64.Microsoft.NETCore.App/2.1.12": { "runtime": { "runtimes/osx-x64/lib/netcoreapp2.1/Microsoft.CSharp.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/Microsoft.VisualBasic.dll": { "assemblyVersion": "10.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/Microsoft.Win32.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/Microsoft.Win32.Registry.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/SOS.NETCore.dll": { "assemblyVersion": "1.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27817.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.AppContext.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Buffers.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.Concurrent.dll": { "assemblyVersion": "4.0.14.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.Immutable.dll": { + "assemblyVersion": "1.2.3.0", + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.NonGeneric.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.Specialized.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.Annotations.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.DataAnnotations.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.EventBasedAsync.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.Primitives.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.TypeConverter.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Configuration.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Console.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Core.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Data.Common.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Data.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Contracts.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Debug.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll": { "assemblyVersion": "4.0.3.1", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.FileVersionInfo.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Process.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.StackTrace.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.TextWriterTraceListener.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Tools.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.TraceSource.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Tracing.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Drawing.Primitives.dll": { "assemblyVersion": "4.2.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Drawing.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Dynamic.Runtime.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Globalization.Calendars.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Globalization.Extensions.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Globalization.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Compression.Brotli.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Compression.FileSystem.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Compression.ZipFile.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Compression.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.AccessControl.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.DriveInfo.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.Watcher.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.IsolatedStorage.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.MemoryMappedFiles.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Pipes.AccessControl.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Pipes.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.UnmanagedMemoryStream.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Linq.Expressions.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Linq.Parallel.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Linq.Queryable.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Linq.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Memory.dll": { "assemblyVersion": "4.1.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Http.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.HttpListener.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Mail.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.NameResolution.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.NetworkInformation.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Ping.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Requests.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Security.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.ServicePoint.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Sockets.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebClient.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebHeaderCollection.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebProxy.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebSockets.Client.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebSockets.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Numerics.Vectors.dll": { "assemblyVersion": "4.1.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Numerics.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.ObjectModel.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Private.DataContractSerialization.dll": { "assemblyVersion": "4.1.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Private.Uri.dll": { "assemblyVersion": "4.0.5.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Private.Xml.Linq.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Private.Xml.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.DispatchProxy.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Emit.ILGeneration.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Emit.Lightweight.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Emit.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Extensions.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Metadata.dll": { + "assemblyVersion": "1.4.3.0", + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.TypeExtensions.dll": { "assemblyVersion": "4.1.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Resources.Reader.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Resources.ResourceManager.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Resources.Writer.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.CompilerServices.VisualC.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Extensions.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Handles.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.RuntimeInformation.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.WindowsRuntime.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Loader.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Numerics.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Formatters.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Json.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Primitives.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Xml.dll": { "assemblyVersion": "4.1.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.AccessControl.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Claims.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Algorithms.dll": { "assemblyVersion": "4.3.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Cng.dll": { "assemblyVersion": "4.3.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Csp.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Encoding.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.OpenSsl.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "assemblyVersion": "4.1.1.1", + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.X509Certificates.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { "assemblyVersion": "4.1.1.1", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Principal.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.SecureString.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.ServiceModel.Web.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.ServiceProcess.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Text.Encoding.Extensions.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Text.Encoding.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Text.RegularExpressions.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Overlapped.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Tasks.Dataflow.dll": { "assemblyVersion": "4.6.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Tasks.Extensions.dll": { "assemblyVersion": "4.3.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Tasks.Parallel.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Tasks.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Thread.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.ThreadPool.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Timer.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Transactions.Local.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Transactions.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.ValueTuple.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Web.HttpUtility.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Web.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Windows.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.Linq.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.ReaderWriter.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.Serialization.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XDocument.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XPath.XDocument.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XPath.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XmlDocument.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XmlSerializer.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/System.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/WindowsBase.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/mscorlib.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/osx-x64/lib/netcoreapp2.1/netstandard.dll": { "assemblyVersion": "2.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27818.1" } }, "native": { @@ -1431,7 +1531,7 @@ }, "runtimes/osx-x64/native/System.Private.CoreLib.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.6.27817.1" }, "runtimes/osx-x64/native/System.Security.Cryptography.Native.Apple.a": { "fileVersion": "0.0.0.0" @@ -1468,16 +1568,16 @@ } } }, - "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost/2.1.6": { + "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost/2.1.12": { "native": { "runtimes/osx-x64/native/apphost": { "fileVersion": "0.0.0.0" } } }, - "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.6": { + "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetHostResolver": "2.1.6" + "Microsoft.NETCore.DotNetHostResolver": "2.1.12" }, "native": { "runtimes/osx-x64/native/libhostpolicy.dylib": { @@ -1485,9 +1585,9 @@ } } }, - "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver/2.1.6": { + "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetAppHost": "2.1.6" + "Microsoft.NETCore.DotNetAppHost": "2.1.12" }, "native": { "runtimes/osx-x64/native/libhostfxr.dylib": { @@ -1525,7 +1625,7 @@ }, "System.Collections/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -1544,14 +1644,8 @@ "System.Threading.Tasks": "4.3.0" } }, - "System.Collections.Immutable/1.5.0": { - "runtime": { - "lib/netstandard2.0/System.Collections.Immutable.dll": { - "assemblyVersion": "1.2.3.0", - "fileVersion": "4.6.26515.6" - } - } - }, + "System.Collections.Immutable/1.5.0": {}, + "System.ComponentModel.Annotations/4.5.0": {}, "System.Composition/1.0.31": { "dependencies": { "System.Composition.AttributedModel": "1.0.31", @@ -1662,7 +1756,7 @@ }, "System.Console/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.IO": "4.3.0", "System.Runtime": "4.3.0", @@ -1676,7 +1770,7 @@ }, "System.Diagnostics.Debug/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -1692,7 +1786,7 @@ }, "System.Diagnostics.FileVersionInfo/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", @@ -1713,14 +1807,14 @@ }, "System.Diagnostics.Tools/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Diagnostics.TraceSource/4.0.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", @@ -1733,7 +1827,7 @@ }, "System.Diagnostics.Tracing/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -1758,14 +1852,14 @@ }, "System.Globalization/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Globalization.Calendars/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Globalization": "4.3.0", "System.Runtime": "4.3.0" @@ -1773,7 +1867,7 @@ }, "System.Globalization.Extensions/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", @@ -1783,7 +1877,7 @@ }, "System.IO/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", @@ -1792,7 +1886,7 @@ }, "System.IO.Compression/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Buffers": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", @@ -1811,7 +1905,7 @@ }, "System.IO.FileSystem/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.IO": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", @@ -1873,7 +1967,7 @@ "System.Memory/4.5.1": {}, "System.Net.Http/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.DiagnosticSource": "4.3.0", @@ -1903,7 +1997,7 @@ }, "System.Net.Primitives/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0" @@ -1920,7 +2014,7 @@ }, "System.Reflection/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.IO": "4.3.0", "System.Reflection.Primitives": "4.3.0", @@ -1953,23 +2047,16 @@ }, "System.Reflection.Extensions/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" } }, - "System.Reflection.Metadata/1.6.0": { - "runtime": { - "lib/netstandard2.0/System.Reflection.Metadata.dll": { - "assemblyVersion": "1.4.3.0", - "fileVersion": "4.6.26515.6" - } - } - }, + "System.Reflection.Metadata/1.6.0": {}, "System.Reflection.Primitives/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -1982,7 +2069,7 @@ }, "System.Resources.ResourceManager/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Globalization": "4.3.0", "System.Reflection": "4.3.0", @@ -2001,7 +2088,7 @@ }, "System.Runtime/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0" } }, @@ -2009,27 +2096,27 @@ "runtime": { "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.0.0.0" } } }, "System.Runtime.Extensions/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Runtime.Handles/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Runtime.InteropServices/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Reflection": "4.3.0", "System.Reflection.Primitives": "4.3.0", @@ -2082,7 +2169,7 @@ }, "System.Security.Cryptography.Algorithms/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", @@ -2100,7 +2187,7 @@ }, "System.Security.Cryptography.Cng/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", @@ -2115,7 +2202,7 @@ }, "System.Security.Cryptography.Csp/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", @@ -2132,7 +2219,7 @@ }, "System.Security.Cryptography.Encoding/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Collections.Concurrent": "4.3.0", "System.Linq": "4.3.0", @@ -2176,7 +2263,7 @@ }, "System.Security.Cryptography.X509Certificates/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", @@ -2210,7 +2297,7 @@ }, "System.Security.Principal.Windows/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.Win32.Primitives": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", @@ -2228,14 +2315,14 @@ }, "System.Text.Encoding/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Text.Encoding.CodePages/4.4.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2" + "Microsoft.NETCore.Platforms": "2.1.5" }, "runtime": { "lib/netstandard2.0/System.Text.Encoding.CodePages.dll": { @@ -2246,7 +2333,7 @@ }, "System.Text.Encoding.Extensions/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0" @@ -2265,7 +2352,7 @@ }, "System.Threading.Tasks/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -2285,13 +2372,7 @@ "System.Threading.Tasks": "4.3.0" } }, - "System.Threading.Tasks.Extensions/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, + "System.Threading.Tasks.Extensions/4.5.2": {}, "System.Threading.Tasks.Parallel/4.3.0": { "dependencies": { "System.Collections.Concurrent": "4.3.0", @@ -2309,13 +2390,7 @@ "System.Runtime": "4.3.0" } }, - "System.ValueTuple/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - } - }, + "System.ValueTuple/4.4.0": {}, "System.Xml.ReaderWriter/4.3.0": { "dependencies": { "System.Collections": "4.3.0", @@ -2332,7 +2407,7 @@ "System.Text.Encoding.Extensions": "4.3.0", "System.Text.RegularExpressions": "4.3.0", "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0" + "System.Threading.Tasks.Extensions": "4.5.2" } }, "System.Xml.XDocument/4.3.0": { @@ -2390,6 +2465,20 @@ "System.Xml.XDocument": "4.3.0", "System.Xml.XPath": "4.3.0" } + }, + "Utf8Json/1.3.7": { + "dependencies": { + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Threading.Tasks.Extensions": "4.5.2", + "System.ValueTuple": "4.4.0" + }, + "runtime": { + "lib/netstandard2.0/Utf8Json.dll": { + "assemblyVersion": "1.3.7.0", + "fileVersion": "1.3.7.0" + } + } } } }, @@ -2402,108 +2491,108 @@ "Buildalyzer/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-5nO0Lkv0zcB5Ck8AaO9eXnRbAfVAB45QQ0ZGCAfPwRxqlqn7WFkn6ESL8EWD8jgTdodtIE8KpZFXm8zb1jIYBw==", + "sha512": "sha512-iQIgYkhnqu0pLG73wg9ABZy8mvUOPTiwbKWcRLuT4uvwtoT7XJcYyZ+i2fsfj1RKHFmR7ba5/jTSigm7318YgA==", "path": "buildalyzer/2.2.0", "hashPath": "buildalyzer.2.2.0.nupkg.sha512" }, "Buildalyzer.Logger/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-490kgGa+07Jwdsq0jqxUSG2QjVg65MJHMEI1/D/7pOjNY4/Zc5DJTKxuL1eJUFf+rzB7NtZKDV0IGABlH8Ihmw==", + "sha512": "sha512-RLS2YFz0vgq3spMZKsOMh1zQBOazEaNn51/AyhilMjJ5wUzisiMwEVih0QnmrPxw3l/1mWBSbofKs1BVtBcFKw==", "path": "buildalyzer.logger/2.2.0", "hashPath": "buildalyzer.logger.2.2.0.nupkg.sha512" }, "Buildalyzer.Workspaces/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-iItCd3jnCUCXryBbWPpRqzPco2vqWobEAoyXelVSfQ+xkZmEwRGYtjjxa+14qo9sNve/a+LTeYknWG/dyRIQOg==", + "sha512": "sha512-A2OBRP2b/JFUY/i82/CqjHyew6PEm1EDtyankmeDugQFJtURdzis+wy27jqWwHqwySP5n/I4x2GJYplh1H0JFQ==", "path": "buildalyzer.workspaces/2.2.0", "hashPath": "buildalyzer.workspaces.2.2.0.nupkg.sha512" }, + "MicroBatchFramework/1.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MvgnkL0qnJIV4se8KjbLejvJXxYT4aphpAcc1NrfpvEtqieEDrI4cAdGM+s6wRvYIOUooErRAByrS+AMdiaUyg==", + "path": "microbatchframework/1.2.0", + "hashPath": "microbatchframework.1.2.0.nupkg.sha512" + }, "Microsoft.Build/15.8.166": { "type": "package", "serviceable": true, - "sha512": "sha512-iDJUl4kiXxnWFQZ4RZTDL7913wckb5ZqzPVkey1FtyvdM/77feTWZ5yL4Vs3+vcpMJtt2PCUNd0wgVO8dl7YzA==", + "sha512": "sha512-h9dzE7bLEFVeY1fVOdbh3dQOtbWqe3jKzvV6JE9JnpmfLptP3gwp/rOLfWmpFJfcNEqetMYMfbcAwipyp/3DfQ==", "path": "microsoft.build/15.8.166", "hashPath": "microsoft.build.15.8.166.nupkg.sha512" }, "Microsoft.Build.Framework/15.8.166": { "type": "package", "serviceable": true, - "sha512": "sha512-0aEScH8KwZKzHXx3SMqOIcg98zJanvSmf+C/tBNmMotb7L+3ZsV1VbkH94UM7l81RQvTeB1eTAVkLpOffN+YqA==", + "sha512": "sha512-UxQvO36HtZTHJCRCbglZNU5D2M+x2Fs27O0ZvIOrZZo6m83S6ZynCzLW5BjQ9RxAlH/pH2iHiEU+w03OOmAw6Q==", "path": "microsoft.build.framework/15.8.166", "hashPath": "microsoft.build.framework.15.8.166.nupkg.sha512" }, "Microsoft.Build.Tasks.Core/15.8.166": { "type": "package", "serviceable": true, - "sha512": "sha512-S+KyOn73S6xQGF4Eg5XG0fBnTfvgqrLLhaMwSy1iQH+hZWKG7gakdavxwZ9ojCZ9vN2U5qdTR/kXmkFse41HKA==", + "sha512": "sha512-EOCh8vvBJvxI9egq70lySDZAdeteKmaVl3cUQCCmhBmHfIVuDVf7vnfwe0pDGZp95yo0Rf5WtSguiyX7R+xJ5w==", "path": "microsoft.build.tasks.core/15.8.166", "hashPath": "microsoft.build.tasks.core.15.8.166.nupkg.sha512" }, "Microsoft.Build.Utilities.Core/15.8.166": { "type": "package", "serviceable": true, - "sha512": "sha512-WSE8AR96B+mzUFxivxG0jCTDmz+D0PsrXG7GVApUFtSCrt7InnsOU538vxv7dlbn/Wwf8QdDNAE0Zsi+pJNsoQ==", + "sha512": "sha512-xtTrXMOlrH5GXObxN5G3ZVNhC1F9Cagje4ks9qC3btMokNoe/ryl5ncJaS5WshBtB76UPho5MZ8wN1meij2BKA==", "path": "microsoft.build.utilities.core/15.8.166", "hashPath": "microsoft.build.utilities.core.15.8.166.nupkg.sha512" }, "Microsoft.CodeAnalysis.Analyzers/2.6.1": { "type": "package", "serviceable": true, - "sha512": "sha512-eiCP8ZbkBuisHUjLbBHblFdXUd5k5z2Wvb6+H2Lwc/wpqcH9IF0D21S87Ko+dOG1NwOGG1+zqwBHF/vx1n+PGQ==", + "sha512": "sha512-VsT6gg2SPeToP8SK7PEcsH6Ftryb7aOqnXh9xg11zBeov05+63gP3k/TvrR+v85XIa8Nn0y3+qNl4M+qzNLBfw==", "path": "microsoft.codeanalysis.analyzers/2.6.1", "hashPath": "microsoft.codeanalysis.analyzers.2.6.1.nupkg.sha512" }, "Microsoft.CodeAnalysis.Common/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-2JUEHsfLlCE255KGhqfUGb3+MzPsflIRUOMDwoa1+/oFe3o2javC0bHbRzBy3lJ2KQM5uZX8cvoNvV6q/4JxiA==", + "sha512": "sha512-M06oYATUMAqL/ympQ09zNHOrRc6sEwgsiueK6z+QPOgyr028i54NviKy7Evfcvv7Kr0LX9MEmrKXPO2NZ+bZ5Q==", "path": "microsoft.codeanalysis.common/2.9.0", "hashPath": "microsoft.codeanalysis.common.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.CSharp/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-vwhUL6vnKVM7i3TdPhWdXsNvqSFpjY9MSOHr+bqT4jbHQ7lHfqiMRA6P8/18mv7HEWxujpoNsr1IJmyTPBJg/Q==", + "sha512": "sha512-oiCPHjCLZtyAz/vnMRJI0PrhR/amJiR9RIwPpQ3+DMs7TgegGn65/dqYEcoiWSj8YQvwOK/J640EXMydMDLJVQ==", "path": "microsoft.codeanalysis.csharp/2.9.0", "hashPath": "microsoft.codeanalysis.csharp.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-NgHl1H+n4fBdcwYT/jbfUi40ZhSXmZ8kUm1hpkAd0XSNBrHjEgDOpDP11f1sPavczUGaXb8Kv76urg+O8eY9jg==", + "sha512": "sha512-ZVPi+NQcxLbHbKb77qbtRcne5AjbYQXIJYjQMI2dwLKU8PlZaWajZEEhSbin4FED3t4KL6T0RaAx8m8uJtAX2A==", "path": "microsoft.codeanalysis.csharp.workspaces/2.9.0", "hashPath": "microsoft.codeanalysis.csharp.workspaces.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-KBAL4UKhQOMHUlp5rofqASVlOdV0ZyloEDGCMLiRoaSteV3YaNVgqu4tGxEWblYfXmAjWnp/cVv1o/cbhqX4og==", + "sha512": "sha512-dUKemkcCwT8TfXmvjps7RrI9G5C2XgRf3pjhcMEH+ikyLsXqFstDsA3uP4waeJ4gi+4gaCehjmdDGO3UaaKBSA==", "path": "microsoft.codeanalysis.visualbasic/2.9.0", "hashPath": "microsoft.codeanalysis.visualbasic.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-cc/d3g91LQiDloqognxEPm/+4XUkhpAjtrs9G4bgUj/OX2hiqJvzAnB7Em9r9DAWKg9F6127Lf3JidUp9E3I+w==", + "sha512": "sha512-FkFdX/incH1at2EapaBSAXeJHdilmyMOjS0FIaPfvd7Bau0b57/r312JxSGHslKjEWY+2UlWUPoPCYa9oH5hHw==", "path": "microsoft.codeanalysis.visualbasic.workspaces/2.9.0", "hashPath": "microsoft.codeanalysis.visualbasic.workspaces.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-JdctRx+SwpvGzQBz+PaUvPTNMxlVn74w7AqEMrinuVEIYjYIehp8FyQOsZMOJlBiRnSEygTy8WlHN2R/qcx24Q==", + "sha512": "sha512-Py0UX0Cdh04puqDoE6kBS60j+8nJeJqSUxWQPFpxW6btas5Y2A4io4daJIy0DFz4Y49jcMtS5ynvXdkyIWvl/Q==", "path": "microsoft.codeanalysis.workspaces.common/2.9.0", "hashPath": "microsoft.codeanalysis.workspaces.common.2.9.0.nupkg.sha512" }, - "Microsoft.CSharp/4.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-17h8b5mXa87XYKrrVqdgZ38JefSUqLChUQpXgSnpzsM0nDOhE40FTeNWOJ/YmySGV6tG6T8+hjz6vxbknHJr6A==", - "path": "microsoft.csharp/4.0.1", - "hashPath": "microsoft.csharp.4.0.1.nupkg.sha512" - }, "Microsoft.DotNet.PlatformAbstractions/2.1.0": { "type": "package", "serviceable": true, @@ -2511,33 +2600,68 @@ "path": "microsoft.dotnet.platformabstractions/2.1.0", "hashPath": "microsoft.dotnet.platformabstractions.2.1.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration/2.1.1": { + "Microsoft.Extensions.Configuration/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "path": "microsoft.extensions.configuration/2.2.0", + "hashPath": "microsoft.extensions.configuration.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "path": "microsoft.extensions.configuration.abstractions/2.2.0", + "hashPath": "microsoft.extensions.configuration.abstractions.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Binder/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "path": "microsoft.extensions.configuration.binder/2.2.0", + "hashPath": "microsoft.extensions.configuration.binder.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-gIqt9PkKO01hZ0zmHnWrZ1E45MDreZTVoyDbL1kMWKtDgxxWTJpYtESTEcgpvR1uB1iex1zKGYzJpOMgmuP5TQ==", + "path": "microsoft.extensions.configuration.environmentvariables/2.2.0", + "hashPath": "microsoft.extensions.configuration.environmentvariables.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.FileExtensions/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-H1qCpWBC8Ed4tguTR/qYkbb3F6DI5Su3t8xyFo3/5MzAd8PwPpHzgX8X04KbBxKmk173Pb64x7xMHarczVFQUA==", + "path": "microsoft.extensions.configuration.fileextensions/2.2.0", + "hashPath": "microsoft.extensions.configuration.fileextensions.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Json/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-LjVKO6P2y52c5ZhTLX/w8zc5H4Y3J/LJsgqTBj49TtFq/hAtVNue/WA0F6/7GMY90xhD7K0MDZ4qpOeWXbLvzg==", - "path": "microsoft.extensions.configuration/2.1.1", - "hashPath": "microsoft.extensions.configuration.2.1.1.nupkg.sha512" + "sha512": "sha512-jUDdmLyFmLf9V3mqnMzSAzAv4QigJ67tZh5Q7HBXeBnESL2UyeesNG6jSBti+b63JpxZf+EDyn+anx3gyrNxug==", + "path": "microsoft.extensions.configuration.json/2.2.0", + "hashPath": "microsoft.extensions.configuration.json.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { + "Microsoft.Extensions.Configuration.UserSecrets/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-VfuZJNa0WUshZ/+8BFZAhwFKiKuu/qOUCFntfdLpHj7vcRnsGHqd3G2Hse78DM+pgozczGM63lGPRLmy+uhUOA==", - "path": "microsoft.extensions.configuration.abstractions/2.1.1", - "hashPath": "microsoft.extensions.configuration.abstractions.2.1.1.nupkg.sha512" + "sha512": "sha512-2/N2xo6/sNbVshnKktmq5lwaQbsAR2SrzCVrJEeMP8OKZVI7SzT8P6/WXZF8/YC7dTYsMe3nrHzgl1cF9i5ZKQ==", + "path": "microsoft.extensions.configuration.usersecrets/2.2.0", + "hashPath": "microsoft.extensions.configuration.usersecrets.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.Binder/2.1.1": { + "Microsoft.Extensions.DependencyInjection/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-fcLCTS03poWE4v9tSNBr3pWn0QwGgAn1vzqHXlXgvqZeOc7LvQNzaWcKRQZTdEc3+YhQKwMsOtm3VKSA2aWQ8w==", - "path": "microsoft.extensions.configuration.binder/2.1.1", - "hashPath": "microsoft.extensions.configuration.binder.2.1.1.nupkg.sha512" + "sha512": "sha512-MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "path": "microsoft.extensions.dependencyinjection/2.2.0", + "hashPath": "microsoft.extensions.dependencyinjection.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { + "Microsoft.Extensions.DependencyInjection.Abstractions/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-MgYpU5cwZohUMKKg3sbPhvGG+eAZ/59E9UwPwlrUkyXU+PGzqwZg9yyQNjhxuAWmoNoFReoemeCku50prYSGzA==", - "path": "microsoft.extensions.dependencyinjection.abstractions/2.1.1", - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.1.1.nupkg.sha512" + "sha512": "sha512-f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==", + "path": "microsoft.extensions.dependencyinjection.abstractions/2.2.0", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.2.0.nupkg.sha512" }, "Microsoft.Extensions.DependencyModel/2.1.0": { "type": "package", @@ -2546,73 +2670,108 @@ "path": "microsoft.extensions.dependencymodel/2.1.0", "hashPath": "microsoft.extensions.dependencymodel.2.1.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging/2.1.1": { + "Microsoft.Extensions.FileProviders.Abstractions/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-EcnaSsPTqx2MGnHrmWOD0ugbuuqVT8iICqSqPzi45V5/MA1LjUNb0kwgcxBGqizV1R+WeBK7/Gw25Jzkyk9bIw==", + "path": "microsoft.extensions.fileproviders.abstractions/2.2.0", + "hashPath": "microsoft.extensions.fileproviders.abstractions.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileProviders.Physical/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tbDHZnBJkjYd9NjlRZ9ondDiv1Te3KYCTW2RWpR1B0e1Z8+EnFRo7qNnHkkSCixLdlPZzhjlX24d/PixQ7w2dA==", + "path": "microsoft.extensions.fileproviders.physical/2.2.0", + "hashPath": "microsoft.extensions.fileproviders.physical.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileSystemGlobbing/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZSsHZp3PyW6vk37tDEdypjgGlNtpJ0EixBMOfUod2Thx7GtwfFSAQXUQx8a8BN8vfWKGGMbp7jPWdoHx/At4wQ==", + "path": "microsoft.extensions.filesystemglobbing/2.2.0", + "hashPath": "microsoft.extensions.filesystemglobbing.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Hosting/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PxZPd5QbWr8+3JN2segEaD7IAYI+mR8ZmMqgo6GOk+E+UKnRcbC3RSQgJrZYuWVQwJCvdxesO5e64LSHC1zC8g==", + "path": "microsoft.extensions.hosting/2.2.0", + "hashPath": "microsoft.extensions.hosting.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Hosting.Abstractions/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+k4AEn68HOJat5gj1TWa6X28WlirNQO9sPIIeQbia+91n03esEtMSSoekSTpMjUzjqtJWQN3McVx0GvSPFHF/Q==", + "path": "microsoft.extensions.hosting.abstractions/2.2.0", + "hashPath": "microsoft.extensions.hosting.abstractions.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-hh+mkOAQDTp6XH80xJt3+wwYVzkbwYQl9XZRCz4Um0JjP/o7N9vHM3rZ6wwwtr+BBe/L6iBO2sz0px6OWBzqZQ==", - "path": "microsoft.extensions.logging/2.1.1", - "hashPath": "microsoft.extensions.logging.2.1.1.nupkg.sha512" + "sha512": "sha512-Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "path": "microsoft.extensions.logging/2.2.0", + "hashPath": "microsoft.extensions.logging.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging.Abstractions/2.1.1": { + "Microsoft.Extensions.Logging.Abstractions/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-XRzK7ZF+O6FzdfWrlFTi1Rgj2080ZDsd46vzOjadHUB0Cz5kOvDG8vI7caa5YFrsHQpcfn0DxtjS4E46N4FZsA==", - "path": "microsoft.extensions.logging.abstractions/2.1.1", - "hashPath": "microsoft.extensions.logging.abstractions.2.1.1.nupkg.sha512" + "sha512": "sha512-B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==", + "path": "microsoft.extensions.logging.abstractions/2.2.0", + "hashPath": "microsoft.extensions.logging.abstractions.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Options/2.1.1": { + "Microsoft.Extensions.Options/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-V7lXCU78lAbzaulCGFKojcCyG8RTJicEbiBkPJjFqiqXwndEBBIehdXRMWEVU3UtzQ1yDvphiWUL9th6/4gJ7w==", - "path": "microsoft.extensions.options/2.1.1", - "hashPath": "microsoft.extensions.options.2.1.1.nupkg.sha512" + "sha512": "sha512-UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "path": "microsoft.extensions.options/2.2.0", + "hashPath": "microsoft.extensions.options.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Primitives/2.1.1": { + "Microsoft.Extensions.Primitives/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-scJ1GZNIxMmjpENh0UZ8XCQ6vzr/LzeF9WvEA51Ix2OQGAs9WPgPu8ABVUdvpKPLuor/t05gm6menJK3PwqOXg==", - "path": "microsoft.extensions.primitives/2.1.1", - "hashPath": "microsoft.extensions.primitives.2.1.1.nupkg.sha512" + "sha512": "sha512-azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "path": "microsoft.extensions.primitives/2.2.0", + "hashPath": "microsoft.extensions.primitives.2.2.0.nupkg.sha512" }, - "Microsoft.NETCore.App/2.1.6": { + "Microsoft.NETCore.App/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-4KShBFobByVw92OH1mYbXqy10D2AMSYZCjhVjYxDooIpYZPTJJ5ArkLRaoGk1+7+55MiSb52Ys2mDdO2JW7ddA==", - "path": "microsoft.netcore.app/2.1.6", - "hashPath": "microsoft.netcore.app.2.1.6.nupkg.sha512" + "sha512": "sha512-oVeSsnIqzD0VuS3xoZRA1SAfq/aLscEy12TaeIP5H6FIOBo9Ta1sMkyc7Pj3ZDJz3fsWeYf/4fR5Ft8Y+oqdzg==", + "path": "microsoft.netcore.app/2.1.12", + "hashPath": "microsoft.netcore.app.2.1.12.nupkg.sha512" }, - "Microsoft.NETCore.DotNetAppHost/2.1.6": { + "Microsoft.NETCore.DotNetAppHost/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-BbhLwFZNhT9mL6Wa8Me9VQN6kYSqb56G/epwh92x1ZJjcx+nFaf6X8tdpfmhVOGwztR62PEn9GvCJgkelIN6PQ==", - "path": "microsoft.netcore.dotnetapphost/2.1.6", - "hashPath": "microsoft.netcore.dotnetapphost.2.1.6.nupkg.sha512" + "sha512": "sha512-bjRuqLIp7JLORwwH5PTZOKIozs68ulLLcSMRcTmOymOqV35PFE+VE6M2SmR6OQsxG0ViIuxM1YwQdYwlIzG3cQ==", + "path": "microsoft.netcore.dotnetapphost/2.1.12", + "hashPath": "microsoft.netcore.dotnetapphost.2.1.12.nupkg.sha512" }, - "Microsoft.NETCore.DotNetHostPolicy/2.1.6": { + "Microsoft.NETCore.DotNetHostPolicy/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-kx3ZCtbdjnMYOO0nL9vhcgbW/oEPWOkefPm1vqE7ufwChhc/AiRHGY8iYNKQdCRKqE7nDrI6mXyOvIT4+aXrgw==", - "path": "microsoft.netcore.dotnethostpolicy/2.1.6", - "hashPath": "microsoft.netcore.dotnethostpolicy.2.1.6.nupkg.sha512" + "sha512": "sha512-A1tafTgEtO7yLIst4n7PrZJtqyc25JHEPII5/2tTIqTymaUA8p8wun9SpwX0dTYxcQbQmfK2yp402kuHU3oVcQ==", + "path": "microsoft.netcore.dotnethostpolicy/2.1.12", + "hashPath": "microsoft.netcore.dotnethostpolicy.2.1.12.nupkg.sha512" }, - "Microsoft.NETCore.DotNetHostResolver/2.1.6": { + "Microsoft.NETCore.DotNetHostResolver/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-0pd2Ts5l4LtCwlDSQMeX9IFdYUdB7cAinGrkMMKzJlyEhoHVHBvlQlDQEugIb70Ls4olG0UJcDtOGOqf38Dzbw==", - "path": "microsoft.netcore.dotnethostresolver/2.1.6", - "hashPath": "microsoft.netcore.dotnethostresolver.2.1.6.nupkg.sha512" + "sha512": "sha512-S7trRhPhQ/O+ZapKoKyjmiveC78yUAQ1usE3qsVT2W9NfI1Hk04aIwDwmio9GWNqUljXzCbK+B7h9CQe5GPJMQ==", + "path": "microsoft.netcore.dotnethostresolver/2.1.12", + "hashPath": "microsoft.netcore.dotnethostresolver.2.1.12.nupkg.sha512" }, - "Microsoft.NETCore.Platforms/2.1.2": { + "Microsoft.NETCore.Platforms/2.1.5": { "type": "package", "serviceable": true, - "sha512": "sha512-7J7veIH7Mu6zc4llWnM7YRgTv9+Ew+JWkkDj0K7cEe8wuFA6HRt6STtwux2g+qjpDXeYeWsK0UQ3uIgRiTYHIg==", - "path": "microsoft.netcore.platforms/2.1.2", - "hashPath": "microsoft.netcore.platforms.2.1.2.nupkg.sha512" + "sha512": "sha512-FW1dYOftgUODWh91w97B7fJL9oaderZzbIOGNRe3FS9Yl40yaMz+cHWdQ+X9uE9agCmLzuCx/Yyxt8QSnooHsA==", + "path": "microsoft.netcore.platforms/2.1.5", + "hashPath": "microsoft.netcore.platforms.2.1.5.nupkg.sha512" }, "Microsoft.NETCore.Targets/2.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-mJnCMoBfWL0lxxlBFJ/8cZKTfPpI82TekZkUqvSCBtunUaaqr2LVeWl1zQYdanAdk4Ddf1HCwb8+DNYaNFBk1w==", + "sha512": "sha512-odP/tJj1z6GylFpNo7pMtbd/xQgTC3Ex2If63dRTL38bBNMwsBnJ+RceUIyHdRBC0oik/3NehYT+oECwBhIM3Q==", "path": "microsoft.netcore.targets/2.0.0", "hashPath": "microsoft.netcore.targets.2.0.0.nupkg.sha512" }, @@ -2633,14 +2792,14 @@ "MSBuild.StructuredLogger/2.0.11": { "type": "package", "serviceable": true, - "sha512": "sha512-LYK6MOfPUEE/u10OepnvFOjFy12YWOjtXXIh3K0RtUzdjatIHZSAjU8MKPuGcegi06iblNH2Rlc78vc2AVokhg==", + "sha512": "sha512-youJH/f03XEYwre6DWT+a8Fjb6Vs/UfioczhKYohHK24ljUSLBCRaopXX2+VzeA/7aQjmRmr4HYpzD9cCCJM9w==", "path": "msbuild.structuredlogger/2.0.11", "hashPath": "msbuild.structuredlogger.2.0.11.nupkg.sha512" }, "MsBuildPipeLogger.Server/1.1.2": { "type": "package", "serviceable": true, - "sha512": "sha512-4gxSIkc4mMpHemehqDAZzGdKAhGJAxyt+56SUi6B4X2FWijojXzcIr7illkuEA7Ex05eoa5Cx4pr6d1hn4m8lg==", + "sha512": "sha512-3kIOap0qKW+/+Cd9o6tUM420ibgzCVuhTvLXVRv7M6EOmkH1iEiUsUTkFeQ+SqH5JuLHZfXmEZieDiWvRFtq1Q==", "path": "msbuildpipelogger.server/1.1.2", "hashPath": "msbuildpipelogger.server.1.1.2.nupkg.sha512" }, @@ -2651,12 +2810,12 @@ "path": "netstandard.library/2.0.3", "hashPath": "netstandard.library.2.0.3.nupkg.sha512" }, - "Newtonsoft.Json/9.0.1": { + "Newtonsoft.Json/11.0.2": { "type": "package", "serviceable": true, - "sha512": "sha512-U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", - "path": "newtonsoft.json/9.0.1", - "hashPath": "newtonsoft.json.9.0.1.nupkg.sha512" + "sha512": "sha512-IvJe1pj7JHEsP8B8J8DwlMEx8UInrs/x+9oVY+oCD13jpLu4JbJU2WCIsMRn5C4yW9+DgkaO8uiVE5VHKjpmdQ==", + "path": "newtonsoft.json/11.0.2", + "hashPath": "newtonsoft.json.11.0.2.nupkg.sha512" }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "type": "package", @@ -2689,7 +2848,7 @@ "runtime.native.System.IO.Compression/4.3.0": { "type": "package", "serviceable": true, - "sha512": "sha512-INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", + "sha512": "sha512-b+V9JC/Ii3sR659flBeaBJww111425tgjcDS1k+hqV4sGh9FALRDBvJnDtQ895gAzpPTUOFDHdqaZ2Et7BpZMg==", "path": "runtime.native.system.io.compression/4.3.0", "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" }, @@ -2728,33 +2887,33 @@ "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" }, - "runtime.osx-x64.Microsoft.NETCore.App/2.1.6": { + "runtime.osx-x64.Microsoft.NETCore.App/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-F5OkENE4LPcPPegSHNM8BiV7pQEofeg1jIIoZgTNzNb3RziGnql7FX0TA2lYKzKYK5N1lWvMZQGkunFcKOoPFg==", - "path": "runtime.osx-x64.microsoft.netcore.app/2.1.6", - "hashPath": "runtime.osx-x64.microsoft.netcore.app.2.1.6.nupkg.sha512" + "sha512": "sha512-z1ShmFbJy2jLgCBndnAnY3KrAqzkKy7NLI8NxuvIohVDi8hV07bhZAUQpqK64hKKeCc/xXB79wsr7kpRNewm7A==", + "path": "runtime.osx-x64.microsoft.netcore.app/2.1.12", + "hashPath": "runtime.osx-x64.microsoft.netcore.app.2.1.12.nupkg.sha512" }, - "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost/2.1.6": { + "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-4QsAVVSDAr/omCriO/3JvxuQEI45VsUCQeOTnFI5g035t9EeVK5Gk++Z1WdTdpSKuRRhZ92Ua8jZ11Xv4dGKsQ==", - "path": "runtime.osx-x64.microsoft.netcore.dotnetapphost/2.1.6", - "hashPath": "runtime.osx-x64.microsoft.netcore.dotnetapphost.2.1.6.nupkg.sha512" + "sha512": "sha512-Ras3Fv8VvWri22o1HMOTuOtRvhpvsTJrfZunNczkq5vkEUlp6PdtYzRRU4UnszmJz68UlQpjoCN1KZIOflGbVw==", + "path": "runtime.osx-x64.microsoft.netcore.dotnetapphost/2.1.12", + "hashPath": "runtime.osx-x64.microsoft.netcore.dotnetapphost.2.1.12.nupkg.sha512" }, - "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.6": { + "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-MtXV4xILeeKehNEIkasVfm2cBg6bWOqllGsYSMIjPG/hMR6T+GD41W6fjWzGbWVikFzOQXdk8nUyGlaNslIUdw==", - "path": "runtime.osx-x64.microsoft.netcore.dotnethostpolicy/2.1.6", - "hashPath": "runtime.osx-x64.microsoft.netcore.dotnethostpolicy.2.1.6.nupkg.sha512" + "sha512": "sha512-8Y1lcAieh00gQRPSWJiL09ptd5oirYgPKR4Q+JJ30dHLE8WxnO6mAjjlUPOs4Kgqjgc2I5TAk+oc4pHDaSPzfg==", + "path": "runtime.osx-x64.microsoft.netcore.dotnethostpolicy/2.1.12", + "hashPath": "runtime.osx-x64.microsoft.netcore.dotnethostpolicy.2.1.12.nupkg.sha512" }, - "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver/2.1.6": { + "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-nDGUdqMZjvVSrF5eaazLnRvVW2DT0Uw8+bSR06k78F/PcSd9DAYjXJjSjPchgzy7iMwcjFLdiOeAms0Xaukl5A==", - "path": "runtime.osx-x64.microsoft.netcore.dotnethostresolver/2.1.6", - "hashPath": "runtime.osx-x64.microsoft.netcore.dotnethostresolver.2.1.6.nupkg.sha512" + "sha512": "sha512-BMWg0FBjtsukeEbqwpgnOF0Q9UDuEAeOXudANgqwAPToY98pcav0VAe9DaU47wCzUGEa6a4UysQJ2e8mHAxjSg==", + "path": "runtime.osx-x64.microsoft.netcore.dotnethostresolver/2.1.12", + "hashPath": "runtime.osx-x64.microsoft.netcore.dotnethostresolver.2.1.12.nupkg.sha512" }, "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { "type": "package", @@ -2773,7 +2932,7 @@ "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "type": "package", "serviceable": true, - "sha512": "sha512-nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==", + "sha512": "sha512-T5NvFgmHX0WH4c7lP72krsnk+IJI10vJf2j2twGE+5QBRA4RyRAgD+ZjEgdmpLOjW4B+nZGaadewTCUcR899OQ==", "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" }, @@ -2815,7 +2974,7 @@ "System.CodeDom/4.4.0": { "type": "package", "serviceable": true, - "sha512": "sha512-E/lvSfMFPtNflAgdM6AuPU8JbZdqdSoGpU66G7SrduCqdrFyPflaqqV4gN2d0hrCBpu92HaoqpUP5d+g9Itcxw==", + "sha512": "sha512-2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA==", "path": "system.codedom/4.4.0", "hashPath": "system.codedom.4.4.0.nupkg.sha512" }, @@ -2840,6 +2999,13 @@ "path": "system.collections.immutable/1.5.0", "hashPath": "system.collections.immutable.1.5.0.nupkg.sha512" }, + "System.ComponentModel.Annotations/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==", + "path": "system.componentmodel.annotations/4.5.0", + "hashPath": "system.componentmodel.annotations.4.5.0.nupkg.sha512" + }, "System.Composition/1.0.31": { "type": "package", "serviceable": true, @@ -2934,7 +3100,7 @@ "System.Diagnostics.TraceSource/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-q5bGzzvXVi+dIMiPWRhXZV7r+Os3TEOuRW5LHsAUDGpqJHol8XiLokVpsgAfPqHHNkyx1bbv5lRZqRkRrGZKxQ==", + "sha512": "sha512-6WVCczFZKXwpWpzd/iJkYnsmWTSFFiU24Xx/YdHXBcu+nFI/ehTgeqdJQFbtRPzbrO3KtRNjvkhtj4t5/WwWsA==", "path": "system.diagnostics.tracesource/4.0.0", "hashPath": "system.diagnostics.tracesource.4.0.0.nupkg.sha512" }, @@ -3116,7 +3282,7 @@ "System.Resources.Writer/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-mGgwPBXGTqnw6lQeRI24ChoyPViWx36MVfN6Ys1ceLJMTQDMHcoLiMHOzSvA7ZgjX2tWBy8nfjzlN1kDL/G1gQ==", + "sha512": "sha512-Hz+ZS81dVSNy93YyJhhL3GwzmMhfcQ8FbUooAt9MO4joIe0vPM4gclv0C82ko1tuN/Kw6CvZFLYkgk6n9xvEkg==", "path": "system.resources.writer/4.0.0", "hashPath": "system.resources.writer.4.0.0.nupkg.sha512" }, @@ -3165,7 +3331,7 @@ "System.Runtime.Loader/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-AGWrywLI2B15/dnLuFnlHWFjXmq1Tl0kjWaKTHbaJ8T9kIxiQ8YGTtiMQc8rUr49l2JjfZa7QY0KKqlyzA7NNg==", + "sha512": "sha512-4UN78GOVU/mbDFcXkEWtetJT/sJ0yic2gGk1HSlSpWI0TDf421xnrZTDZnwNBapk1GQeYN7U1lTj/aQB1by6ow==", "path": "system.runtime.loader/4.0.0", "hashPath": "system.runtime.loader.4.0.0.nupkg.sha512" }, @@ -3263,7 +3429,7 @@ "System.Text.Encoding.CodePages/4.4.0": { "type": "package", "serviceable": true, - "sha512": "sha512-FpAgMC+BX6OOCiRebYqHP3r3aYU7o0lopPOo4zKyGc5LWXFEYRUaKtoXXvAJ3sP+IDOK/KBxZaiVAdi+QdZ0TA==", + "sha512": "sha512-6JX7ZdaceBiLKLkYt8zJcp4xTJd1uYyXXEkPw6mnlUIjh1gZPIVKPtRXPmY5kLf6DwZmf5YLwR3QUrRonl7l0A==", "path": "system.text.encoding.codepages/4.4.0", "hashPath": "system.text.encoding.codepages.4.4.0.nupkg.sha512" }, @@ -3298,16 +3464,16 @@ "System.Threading.Tasks.Dataflow/4.6.0": { "type": "package", "serviceable": true, - "sha512": "sha512-U+WVv+MkUi5T7PM3yJD7WsX0pnlzNcM08r+ua2P5MpvGXv69DE+3bBfhdz8U6ZxvPthkvDvqy/AaIxZhKKgUdw==", + "sha512": "sha512-2hRjGu2r2jxRZ55wmcHO/WbdX+YAOz9x6FE8xqkHZgPaoFMKQZRe9dk8xTZIas8fRjxRmzawnTEWIrhlM+Un7w==", "path": "system.threading.tasks.dataflow/4.6.0", "hashPath": "system.threading.tasks.dataflow.4.6.0.nupkg.sha512" }, - "System.Threading.Tasks.Extensions/4.3.0": { + "System.Threading.Tasks.Extensions/4.5.2": { "type": "package", "serviceable": true, - "sha512": "sha512-npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", - "path": "system.threading.tasks.extensions/4.3.0", - "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" + "sha512": "sha512-BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w==", + "path": "system.threading.tasks.extensions/4.5.2", + "hashPath": "system.threading.tasks.extensions.4.5.2.nupkg.sha512" }, "System.Threading.Tasks.Parallel/4.3.0": { "type": "package", @@ -3323,12 +3489,12 @@ "path": "system.threading.thread/4.3.0", "hashPath": "system.threading.thread.4.3.0.nupkg.sha512" }, - "System.ValueTuple/4.3.0": { + "System.ValueTuple/4.4.0": { "type": "package", "serviceable": true, - "sha512": "sha512-cNLEvBX3d6MMQRZe3SMFNukVbitDAEpVZO17qa0/2FHxZ7Y7PpFRpr6m2615XYM/tYYYf0B+WyHNujqIw8Luwg==", - "path": "system.valuetuple/4.3.0", - "hashPath": "system.valuetuple.4.3.0.nupkg.sha512" + "sha512": "sha512-BahUww/+mdP4ARCAh2RQhQTg13wYLVrBb9SYVgW8ZlrwjraGCXHGjo0oIiUfZ34LUZkMMR+RAzR7dEY4S1HeQQ==", + "path": "system.valuetuple/4.4.0", + "hashPath": "system.valuetuple.4.4.0.nupkg.sha512" }, "System.Xml.ReaderWriter/4.3.0": { "type": "package", @@ -3364,6 +3530,13 @@ "sha512": "sha512-jw9oHHEIVW53mHY9PgrQa98Xo2IZ0ZjrpdOTmtvk+Rvg4tq7dydmxdNqUvJ5YwjDqhn75mBXWttWjiKhWP53LQ==", "path": "system.xml.xpath.xdocument/4.3.0", "hashPath": "system.xml.xpath.xdocument.4.3.0.nupkg.sha512" + }, + "Utf8Json/1.3.7": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lMTNZWp6a6KGkgMc3rW41D3b0REb03fQycfb/2bNBpiUtsbGYYI/LrAhnX52vrHRe4ze7JxbtpWF1Y5ohdpipQ==", + "path": "utf8json/1.3.7", + "hashPath": "utf8json.1.3.7.nupkg.sha512" } } } \ No newline at end of file diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc.dll index 12bdffe58..61a30835a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc.xml b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc.xml new file mode 100644 index 000000000..9b4e0f0d8 --- /dev/null +++ b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/moc.xml @@ -0,0 +1,533 @@ + + + + moc + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/mscorlib.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/mscorlib.dll index 0935302eb..d057ab771 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/mscorlib.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/mscorlib.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/netstandard.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/netstandard.dll index fc873961e..d8a751eed 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/netstandard.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/osx-x64/netstandard.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/MicroBatchFramework.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/MicroBatchFramework.dll new file mode 100644 index 000000000..e827005d9 Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/MicroBatchFramework.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.CSharp.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.CSharp.dll index 65d7a68b3..0c4972b4d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.CSharp.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.CSharp.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.Abstractions.dll index 80d73edd0..540e09431 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.Abstractions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.Binder.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.Binder.dll index 2415b679f..f05e2d84b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.Binder.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.Binder.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.EnvironmentVariables.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.EnvironmentVariables.dll new file mode 100644 index 000000000..e482d42a6 Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.EnvironmentVariables.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.FileExtensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.FileExtensions.dll new file mode 100644 index 000000000..15126f98d Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.FileExtensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.Json.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.Json.dll new file mode 100644 index 000000000..01f57dadf Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.Json.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.UserSecrets.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.UserSecrets.dll new file mode 100644 index 000000000..e989698a5 Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.UserSecrets.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.dll index aa1f010ce..50f78a0af 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Configuration.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll index 7d8769b80..be10eccde 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.DependencyInjection.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.DependencyInjection.dll new file mode 100644 index 000000000..7fa7c1f3f Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.DependencyInjection.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.FileProviders.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.FileProviders.Abstractions.dll new file mode 100644 index 000000000..bca33155e Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.FileProviders.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.FileProviders.Physical.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.FileProviders.Physical.dll new file mode 100644 index 000000000..54c1a8348 Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.FileProviders.Physical.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.FileSystemGlobbing.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.FileSystemGlobbing.dll new file mode 100644 index 000000000..0459c635a Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.FileSystemGlobbing.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Hosting.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Hosting.Abstractions.dll new file mode 100644 index 000000000..8f4da6fbd Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Hosting.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Hosting.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Hosting.dll new file mode 100644 index 000000000..e4ebcea2b Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Hosting.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Logging.Abstractions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Logging.Abstractions.dll index 98b2019d5..4e8e3f2b4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Logging.Abstractions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Logging.Abstractions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Logging.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Logging.dll index 662d975f2..ceb746240 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Logging.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Logging.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Options.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Options.dll index 065d0157b..b4017e0ad 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Options.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Options.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Primitives.dll index 1999bace8..62324a7a1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Extensions.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.VisualBasic.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.VisualBasic.dll index febd622b1..32f74c433 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.VisualBasic.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.VisualBasic.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Win32.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Win32.Primitives.dll index f741e9865..3ffa99a2c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Win32.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Win32.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Win32.Registry.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Win32.Registry.dll index 24bc3205f..770a155da 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Win32.Registry.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Microsoft.Win32.Registry.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Newtonsoft.Json.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Newtonsoft.Json.dll index 5f2336e6c..e2118f9b9 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Newtonsoft.Json.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Newtonsoft.Json.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/SOS.NETCore.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/SOS.NETCore.dll index 61ec30379..41dd5d0ee 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/SOS.NETCore.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/SOS.NETCore.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.AppContext.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.AppContext.dll index 4bf786995..1358171ce 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.AppContext.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.AppContext.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Buffers.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Buffers.dll index 924a8ea9f..3a54086cb 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Buffers.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Buffers.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.Concurrent.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.Concurrent.dll index 87239402e..a59a14a9e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.Concurrent.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.Concurrent.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.Immutable.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.Immutable.dll index 163a0ab26..181d243dd 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.Immutable.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.Immutable.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.NonGeneric.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.NonGeneric.dll index a4a2560dd..1aecfa645 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.NonGeneric.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.NonGeneric.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.Specialized.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.Specialized.dll index 58d5c3cad..91683da4d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.Specialized.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.Specialized.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.dll index 7445a5182..dcc2d8e10 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Collections.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.Annotations.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.Annotations.dll index 33b264a3b..3c384f187 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.Annotations.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.Annotations.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.DataAnnotations.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.DataAnnotations.dll index 8c385c74b..d0ba5f645 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.DataAnnotations.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.DataAnnotations.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.EventBasedAsync.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.EventBasedAsync.dll index c513e4c89..159b9f3b6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.EventBasedAsync.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.EventBasedAsync.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.Primitives.dll index 1b0130f26..7f04b3509 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.TypeConverter.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.TypeConverter.dll index 484823b5a..353f58cb5 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.TypeConverter.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.TypeConverter.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.dll index 4208f1632..94478ccf2 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ComponentModel.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Configuration.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Configuration.dll index 342607b26..ed61eccd8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Configuration.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Configuration.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Console.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Console.dll index 7f13288e7..517e95933 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Console.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Console.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Core.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Core.dll index cc41cf6db..95b242d76 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Core.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Core.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Data.Common.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Data.Common.dll index 4c5f2392e..80d172507 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Data.Common.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Data.Common.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Data.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Data.dll index 1c19df669..c8e190d1c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Data.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Data.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Contracts.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Contracts.dll index 1668c083c..d7b4bf768 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Contracts.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Contracts.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Debug.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Debug.dll index 8ea652994..152d5f98d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Debug.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Debug.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.DiagnosticSource.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.DiagnosticSource.dll index 599439acb..74949143c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.DiagnosticSource.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.DiagnosticSource.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.FileVersionInfo.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.FileVersionInfo.dll index 88e1479f9..c4c56f16f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.FileVersionInfo.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.FileVersionInfo.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Process.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Process.dll index ab4cf4ae6..fb3271aa7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Process.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Process.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.StackTrace.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.StackTrace.dll index 95323dbd8..298c55686 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.StackTrace.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.StackTrace.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.TextWriterTraceListener.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.TextWriterTraceListener.dll index 84d16bd04..da630db47 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.TextWriterTraceListener.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.TextWriterTraceListener.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Tools.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Tools.dll index c65036652..c0654b321 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Tools.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Tools.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.TraceSource.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.TraceSource.dll index 769405de1..633a9dc02 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.TraceSource.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.TraceSource.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Tracing.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Tracing.dll index 0c02f3ce9..0230e17d0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Tracing.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Diagnostics.Tracing.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Drawing.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Drawing.Primitives.dll index 93c890dd0..6473a8435 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Drawing.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Drawing.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Drawing.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Drawing.dll index ab47fe2f1..d097ead69 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Drawing.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Drawing.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Dynamic.Runtime.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Dynamic.Runtime.dll index b90ff1bd2..b0a791b2c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Dynamic.Runtime.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Dynamic.Runtime.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Globalization.Calendars.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Globalization.Calendars.dll index 6f9b3cbd4..d988363df 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Globalization.Calendars.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Globalization.Calendars.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Globalization.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Globalization.Extensions.dll index c530ae79c..ae67c8b0c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Globalization.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Globalization.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Globalization.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Globalization.dll index 2d6d2dd8c..133a02faf 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Globalization.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Globalization.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.Brotli.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.Brotli.dll index a050b3971..010c90446 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.Brotli.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.Brotli.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.FileSystem.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.FileSystem.dll index 6eaf363d7..6325f40a1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.FileSystem.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.FileSystem.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.ZipFile.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.ZipFile.dll index 3f73ee292..af2605271 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.ZipFile.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.ZipFile.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.dll index c7a57742c..22d3d7051 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Compression.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.AccessControl.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.AccessControl.dll index 28c91a491..c750aa570 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.AccessControl.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.AccessControl.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.DriveInfo.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.DriveInfo.dll index 518724e74..507df6094 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.DriveInfo.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.DriveInfo.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.Primitives.dll index 4945a379e..bd1f58540 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.Watcher.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.Watcher.dll index bad7eef2d..f5ec4337e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.Watcher.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.Watcher.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.dll index 0dd52664b..b6a63ef38 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.FileSystem.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.IsolatedStorage.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.IsolatedStorage.dll index cff07da30..137754c92 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.IsolatedStorage.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.IsolatedStorage.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.MemoryMappedFiles.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.MemoryMappedFiles.dll index 57ca30ece..5c9571471 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.MemoryMappedFiles.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.MemoryMappedFiles.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Pipes.AccessControl.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Pipes.AccessControl.dll index 8f9c15a39..7ab68580a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Pipes.AccessControl.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Pipes.AccessControl.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Pipes.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Pipes.dll index e0d625920..20db27dc5 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Pipes.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.Pipes.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.UnmanagedMemoryStream.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.UnmanagedMemoryStream.dll index 8bc74b817..1d26b5370 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.UnmanagedMemoryStream.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.UnmanagedMemoryStream.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.dll index 1589d3c1e..42b80136a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.IO.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.Expressions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.Expressions.dll index 6beb12167..5528d250e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.Expressions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.Expressions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.Parallel.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.Parallel.dll index 901542194..c1b22491b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.Parallel.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.Parallel.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.Queryable.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.Queryable.dll index 57fbb2211..4008f7a04 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.Queryable.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.Queryable.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.dll index 0f40b4dbc..b675025fa 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Linq.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Memory.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Memory.dll index 7fe2a9e58..b5510d2f9 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Memory.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Memory.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Http.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Http.dll index 844063ce9..4fa8541f7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Http.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Http.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.HttpListener.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.HttpListener.dll index 1ff937922..e2e92c95e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.HttpListener.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.HttpListener.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Mail.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Mail.dll index 721697c48..588513cb0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Mail.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Mail.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.NameResolution.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.NameResolution.dll index 661d890cf..2201371a3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.NameResolution.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.NameResolution.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.NetworkInformation.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.NetworkInformation.dll index eaf7ace41..9cf785dd0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.NetworkInformation.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.NetworkInformation.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Ping.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Ping.dll index b1dcf5721..1acc8681e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Ping.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Ping.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Primitives.dll index b366d418d..829513818 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Requests.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Requests.dll index 76089000f..705a08f68 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Requests.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Requests.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Security.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Security.dll index 75db4511f..943c688e3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Security.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Security.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.ServicePoint.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.ServicePoint.dll index 87ebf1123..a30a6f9e5 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.ServicePoint.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.ServicePoint.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Sockets.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Sockets.dll index 5862dfb67..6750bfbba 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Sockets.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.Sockets.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebClient.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebClient.dll index 826b61c86..e923c1901 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebClient.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebClient.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebHeaderCollection.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebHeaderCollection.dll index fd382611d..9749bf15f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebHeaderCollection.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebHeaderCollection.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebProxy.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebProxy.dll index d91bd06df..9185b7599 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebProxy.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebProxy.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebSockets.Client.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebSockets.Client.dll index c3c86abe9..0a17d7ff7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebSockets.Client.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebSockets.Client.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebSockets.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebSockets.dll index 42209e8cc..8ec2a2a3e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebSockets.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.WebSockets.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.dll index 8c1ff811a..da479e25a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Net.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Numerics.Vectors.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Numerics.Vectors.dll index 40a0c631b..71c94f1d5 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Numerics.Vectors.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Numerics.Vectors.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Numerics.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Numerics.dll index 6592a8f9d..082300451 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Numerics.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Numerics.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ObjectModel.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ObjectModel.dll index 85793a128..736d95f99 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ObjectModel.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ObjectModel.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.CoreLib.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.CoreLib.dll index e1cc5cc75..c3ef67dfb 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.CoreLib.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.CoreLib.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.DataContractSerialization.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.DataContractSerialization.dll index eaf4c8ede..8aaff846f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.DataContractSerialization.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.DataContractSerialization.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.Uri.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.Uri.dll index 036c4728f..72884f686 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.Uri.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.Uri.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.Xml.Linq.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.Xml.Linq.dll index 3664ab8d1..b413dd94d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.Xml.Linq.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.Xml.Linq.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.Xml.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.Xml.dll index 0e3ed2841..c1a0121fd 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.Xml.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Private.Xml.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.DispatchProxy.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.DispatchProxy.dll index 478875687..f85c24705 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.DispatchProxy.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.DispatchProxy.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Emit.ILGeneration.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Emit.ILGeneration.dll index 3c4b5b8d9..6dfecf3df 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Emit.ILGeneration.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Emit.ILGeneration.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Emit.Lightweight.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Emit.Lightweight.dll index 7fba9e4f5..9aa86974c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Emit.Lightweight.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Emit.Lightweight.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Emit.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Emit.dll index ee3835a4d..cac4ebe8d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Emit.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Emit.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Extensions.dll index 8addf8241..54811343b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Metadata.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Metadata.dll index e0c784017..465a7cd8b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Metadata.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Metadata.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Primitives.dll index 5f3e66fc8..58326605a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.TypeExtensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.TypeExtensions.dll index 17b576b6a..b73e9fa14 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.TypeExtensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.TypeExtensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.dll index 3ac6b37af..fa5feffbd 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Reflection.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Resources.Reader.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Resources.Reader.dll index cfdd32ab1..f88184c9b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Resources.Reader.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Resources.Reader.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Resources.ResourceManager.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Resources.ResourceManager.dll index 4dccfbd25..c36293020 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Resources.ResourceManager.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Resources.ResourceManager.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Resources.Writer.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Resources.Writer.dll index cbc36d455..33fde38a2 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Resources.Writer.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Resources.Writer.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.CompilerServices.VisualC.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.CompilerServices.VisualC.dll index 4aae81b4e..3e7360793 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.CompilerServices.VisualC.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.CompilerServices.VisualC.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Extensions.dll index 31f181138..3a1bd4c3d 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Handles.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Handles.dll index b87392dcd..1536f95fb 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Handles.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Handles.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.InteropServices.RuntimeInformation.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.InteropServices.RuntimeInformation.dll index cbdb96b7a..24102b81f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.InteropServices.RuntimeInformation.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.InteropServices.RuntimeInformation.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.InteropServices.WindowsRuntime.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.InteropServices.WindowsRuntime.dll index 2b280237d..b699fb4e1 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.InteropServices.WindowsRuntime.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.InteropServices.WindowsRuntime.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.InteropServices.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.InteropServices.dll index db629b33d..369a6a7c8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.InteropServices.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.InteropServices.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Loader.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Loader.dll index 43c283acb..f1a3dde2f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Loader.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Loader.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Numerics.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Numerics.dll index a9806300c..04bf985ed 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Numerics.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Numerics.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Formatters.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Formatters.dll index 54d9b1476..a3fd84023 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Formatters.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Formatters.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Json.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Json.dll index f4f274832..366e9966b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Json.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Json.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Primitives.dll index 2bc78c8a3..0c1949cb5 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Xml.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Xml.dll index e0341b368..058d3d71e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Xml.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.Xml.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.dll index a498a72ac..c09595644 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.Serialization.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.dll index 052ad0b3f..812af5495 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Runtime.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.AccessControl.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.AccessControl.dll index 7d73c1e66..4e96c9de2 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.AccessControl.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.AccessControl.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Claims.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Claims.dll index 3ae0170d5..39e7870ae 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Claims.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Claims.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Algorithms.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Algorithms.dll index 635f34fa0..b31c424ba 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Algorithms.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Algorithms.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Cng.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Cng.dll index deebc2880..bc94d5de8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Cng.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Cng.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Csp.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Csp.dll index a7494c31f..c531f6fc4 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Csp.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Csp.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Encoding.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Encoding.dll index 221a5fd79..7d41306c6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Encoding.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Encoding.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.OpenSsl.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.OpenSsl.dll index 359db05c5..cff9efc9e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.OpenSsl.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.OpenSsl.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Primitives.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Primitives.dll index 5210315ea..8b837cddd 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Primitives.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.Primitives.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.X509Certificates.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.X509Certificates.dll index 9697c6086..07dce87df 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.X509Certificates.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Cryptography.X509Certificates.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Principal.Windows.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Principal.Windows.dll index 5c1d0a339..35b5f60d8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Principal.Windows.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Principal.Windows.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Principal.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Principal.dll index 69307c117..f5536cc4a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Principal.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.Principal.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.SecureString.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.SecureString.dll index 3e5a1543a..ad5ae1bee 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.SecureString.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.SecureString.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.dll index 04794830a..597776a00 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Security.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ServiceModel.Web.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ServiceModel.Web.dll index 24d31e7c4..73564f125 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ServiceModel.Web.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ServiceModel.Web.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ServiceProcess.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ServiceProcess.dll index f5c56c679..5334a92b8 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ServiceProcess.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ServiceProcess.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Text.Encoding.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Text.Encoding.Extensions.dll index 5d51ace9c..b04d8eb65 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Text.Encoding.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Text.Encoding.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Text.Encoding.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Text.Encoding.dll index d8b55d299..b5b9c47ce 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Text.Encoding.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Text.Encoding.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Text.RegularExpressions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Text.RegularExpressions.dll index 2ea74883b..6e5c3f582 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Text.RegularExpressions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Text.RegularExpressions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Overlapped.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Overlapped.dll index af2836cf7..e81f205a7 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Overlapped.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Overlapped.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.Dataflow.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.Dataflow.dll index 2a8e6005f..19af60b40 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.Dataflow.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.Dataflow.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.Extensions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.Extensions.dll index 78442f5a7..5201b9854 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.Extensions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.Extensions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.Parallel.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.Parallel.dll index dee1f22fe..d1eb1c8b5 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.Parallel.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.Parallel.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.dll index 375cf239c..8afd4b3ad 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Tasks.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Thread.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Thread.dll index 76ea44929..1c2c8249b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Thread.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Thread.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.ThreadPool.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.ThreadPool.dll index f9b064e8c..6ca2796fe 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.ThreadPool.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.ThreadPool.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Timer.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Timer.dll index 4b5a2e03f..e65c50b8a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Timer.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.Timer.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.dll index b0da0b3f0..62a8cc8fc 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Threading.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Transactions.Local.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Transactions.Local.dll index d4677c7e7..408ac8815 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Transactions.Local.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Transactions.Local.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Transactions.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Transactions.dll index c3713da7b..9a862e2d6 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Transactions.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Transactions.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ValueTuple.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ValueTuple.dll index 5d8310215..fa7d4e140 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ValueTuple.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.ValueTuple.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Web.HttpUtility.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Web.HttpUtility.dll index 709fc3a16..7760f2599 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Web.HttpUtility.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Web.HttpUtility.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Web.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Web.dll index 3a6829c66..b11cef22b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Web.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Web.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Windows.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Windows.dll index 5be9b90ad..df6a1b23a 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Windows.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Windows.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.Linq.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.Linq.dll index e5f76c6e7..b1c40c911 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.Linq.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.Linq.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.ReaderWriter.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.ReaderWriter.dll index 8431cf63c..90b1ae255 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.ReaderWriter.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.ReaderWriter.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.Serialization.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.Serialization.dll index 0a4d675d9..1563cf261 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.Serialization.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.Serialization.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XDocument.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XDocument.dll index 8dbb5a8d5..d6dc487fb 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XDocument.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XDocument.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XPath.XDocument.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XPath.XDocument.dll index 6740d7321..5b684f60e 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XPath.XDocument.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XPath.XDocument.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XPath.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XPath.dll index a632401e9..963f08a92 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XPath.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XPath.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XmlDocument.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XmlDocument.dll index 8c57cc1e0..1f780644f 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XmlDocument.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XmlDocument.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XmlSerializer.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XmlSerializer.dll index de830c580..e39299c54 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XmlSerializer.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.XmlSerializer.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.dll index 041247678..6ac8a5312 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.Xml.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.dll index e1dc3c5ca..b47ddb5e3 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/System.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Utf8Json.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Utf8Json.dll new file mode 100644 index 000000000..24ac36cfb Binary files /dev/null and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/Utf8Json.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/WindowsBase.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/WindowsBase.dll index 308be8ecc..b1035a5ae 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/WindowsBase.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/WindowsBase.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/clrcompression.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/clrcompression.dll index 529512cb1..d04afc63b 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/clrcompression.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/clrcompression.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/clretwrc.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/clretwrc.dll index 788256189..a7d1cd9a5 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/clretwrc.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/clretwrc.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/clrjit.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/clrjit.dll index 1e007f883..9dfac37c0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/clrjit.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/clrjit.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/coreclr.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/coreclr.dll index 22fe63d2c..77df19202 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/coreclr.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/coreclr.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/dbgshim.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/dbgshim.dll index 46d6313fb..748ca2dfc 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/dbgshim.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/dbgshim.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/hostfxr.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/hostfxr.dll index 2a7e3d7e3..9e7abd822 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/hostfxr.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/hostfxr.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/hostpolicy.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/hostpolicy.dll index 2069df700..1239a6907 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/hostpolicy.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/hostpolicy.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.deps.json b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.deps.json index 0b9fc8f48..4f61b087e 100644 --- a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.deps.json +++ b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.deps.json @@ -1,7 +1,7 @@ { "runtimeTarget": { "name": ".NETCoreApp,Version=v2.1/win-x64", - "signature": "d2ce678943b5736fac973aaa79541348335c913f" + "signature": "695e94e03d618c64d2f48df31da10313cd8ba87a" }, "compilationOptions": {}, "targets": { @@ -10,7 +10,8 @@ "moc/1.0.0": { "dependencies": { "Buildalyzer.Workspaces": "2.2.0", - "Microsoft.NETCore.App": "2.1.6" + "MicroBatchFramework": "1.2.0", + "Microsoft.NETCore.App": "2.1.12" }, "runtime": { "moc.dll": {} @@ -25,8 +26,8 @@ "Microsoft.Build.Tasks.Core": "15.8.166", "Microsoft.Build.Utilities.Core": "15.8.166", "Microsoft.Extensions.DependencyModel": "2.1.0", - "Microsoft.Extensions.Logging": "2.1.1", - "Microsoft.Extensions.Logging.Abstractions": "2.1.1", + "Microsoft.Extensions.Logging": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", "MsBuildPipeLogger.Server": "1.1.2" }, "runtime": { @@ -64,6 +65,22 @@ } } }, + "MicroBatchFramework/1.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.EnvironmentVariables": "2.2.0", + "Microsoft.Extensions.Configuration.Json": "2.2.0", + "Microsoft.Extensions.Configuration.UserSecrets": "2.2.0", + "Microsoft.Extensions.Hosting": "2.2.0", + "System.Threading.Tasks.Extensions": "4.5.2", + "Utf8Json": "1.3.7" + }, + "runtime": { + "lib/netstandard2.0/MicroBatchFramework.dll": { + "assemblyVersion": "1.2.0.0", + "fileVersion": "1.2.0.0" + } + } + }, "Microsoft.Build/15.8.166": { "dependencies": { "Microsoft.Build.Framework": "15.8.166", @@ -169,10 +186,10 @@ "System.Text.Encoding.Extensions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0", + "System.Threading.Tasks.Extensions": "4.5.2", "System.Threading.Tasks.Parallel": "4.3.0", "System.Threading.Thread": "4.3.0", - "System.ValueTuple": "4.3.0", + "System.ValueTuple": "4.4.0", "System.Xml.ReaderWriter": "4.3.0", "System.Xml.XDocument": "4.3.0", "System.Xml.XPath.XDocument": "4.3.0", @@ -494,26 +511,6 @@ } } }, - "Microsoft.CSharp/4.0.1": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0" - } - }, "Microsoft.DotNet.PlatformAbstractions/2.1.0": { "dependencies": { "System.AppContext": "4.3.0", @@ -532,51 +529,109 @@ } } }, - "Microsoft.Extensions.Configuration/2.1.1": { + "Microsoft.Extensions.Configuration/2.2.0": { "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.1.1" + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { + "Microsoft.Extensions.Configuration.Abstractions/2.2.0": { "dependencies": { - "Microsoft.Extensions.Primitives": "2.1.1" + "Microsoft.Extensions.Primitives": "2.2.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Configuration.Binder/2.1.1": { + "Microsoft.Extensions.Configuration.Binder/2.2.0": { "dependencies": { - "Microsoft.Extensions.Configuration": "2.1.1" + "Microsoft.Extensions.Configuration": "2.2.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Configuration.FileExtensions/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0", + "Microsoft.Extensions.FileProviders.Physical": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Configuration.Json/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0", + "Microsoft.Extensions.Configuration.FileExtensions": "2.2.0", + "Newtonsoft.Json": "11.0.2" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Configuration.UserSecrets/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Json": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.DependencyInjection/2.2.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + }, + "runtime": { + "lib/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { + "Microsoft.Extensions.DependencyInjection.Abstractions/2.2.0": { "runtime": { "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, "Microsoft.Extensions.DependencyModel/2.1.0": { "dependencies": { "Microsoft.DotNet.PlatformAbstractions": "2.1.0", - "Newtonsoft.Json": "9.0.1", + "Newtonsoft.Json": "11.0.2", "System.Diagnostics.Debug": "4.3.0", "System.Dynamic.Runtime": "4.3.0", "System.Linq": "4.3.0" @@ -588,90 +643,151 @@ } } }, - "Microsoft.Extensions.Logging/2.1.1": { + "Microsoft.Extensions.FileProviders.Abstractions/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.FileProviders.Physical/2.2.0": { "dependencies": { - "Microsoft.Extensions.Configuration.Binder": "2.1.1", - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", - "Microsoft.Extensions.Logging.Abstractions": "2.1.1", - "Microsoft.Extensions.Options": "2.1.1" + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Extensions.FileSystemGlobbing": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.FileSystemGlobbing/2.2.0": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" + } + } + }, + "Microsoft.Extensions.Hosting/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0", + "Microsoft.Extensions.DependencyInjection": "2.2.0", + "Microsoft.Extensions.FileProviders.Physical": "2.2.0", + "Microsoft.Extensions.Hosting.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Hosting.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18316" + } + } + }, + "Microsoft.Extensions.Hosting.Abstractions/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Hosting.Abstractions.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18316" + } + } + }, + "Microsoft.Extensions.Logging/2.2.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Logging.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Logging.Abstractions/2.1.1": { + "Microsoft.Extensions.Logging.Abstractions/2.2.0": { "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Options/2.1.1": { + "Microsoft.Extensions.Options/2.2.0": { "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", - "Microsoft.Extensions.Primitives": "2.1.1" + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Options.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.Extensions.Primitives/2.1.1": { + "Microsoft.Extensions.Primitives/2.2.0": { "dependencies": { "System.Memory": "4.5.1", "System.Runtime.CompilerServices.Unsafe": "4.5.1" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.18315" } } }, - "Microsoft.NETCore.App/2.1.6": { + "Microsoft.NETCore.App/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetHostPolicy": "2.1.6", - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.DotNetHostPolicy": "2.1.12", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "NETStandard.Library": "2.0.3", - "runtime.win-x64.Microsoft.NETCore.App": "2.1.6" + "runtime.win-x64.Microsoft.NETCore.App": "2.1.12" } }, - "Microsoft.NETCore.DotNetAppHost/2.1.6": { + "Microsoft.NETCore.DotNetAppHost/2.1.12": { "dependencies": { - "runtime.win-x64.Microsoft.NETCore.DotNetAppHost": "2.1.6" + "runtime.win-x64.Microsoft.NETCore.DotNetAppHost": "2.1.12" } }, - "Microsoft.NETCore.DotNetHostPolicy/2.1.6": { + "Microsoft.NETCore.DotNetHostPolicy/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetHostResolver": "2.1.6", - "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy": "2.1.6" + "Microsoft.NETCore.DotNetHostResolver": "2.1.12", + "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy": "2.1.12" } }, - "Microsoft.NETCore.DotNetHostResolver/2.1.6": { + "Microsoft.NETCore.DotNetHostResolver/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetAppHost": "2.1.6", - "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver": "2.1.6" + "Microsoft.NETCore.DotNetAppHost": "2.1.12", + "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver": "2.1.12" } }, - "Microsoft.NETCore.Platforms/2.1.2": {}, + "Microsoft.NETCore.Platforms/2.1.5": {}, "Microsoft.NETCore.Targets/2.0.0": {}, "Microsoft.Win32.Primitives/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "Microsoft.Win32.Registry/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", @@ -709,38 +825,14 @@ }, "NETStandard.Library/2.0.3": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2" + "Microsoft.NETCore.Platforms": "2.1.5" } }, - "Newtonsoft.Json/9.0.1": { - "dependencies": { - "Microsoft.CSharp": "4.0.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Serialization.Primitives": "4.1.1", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0" - }, + "Newtonsoft.Json/11.0.2": { "runtime": { - "lib/netstandard1.0/Newtonsoft.Json.dll": { - "assemblyVersion": "9.0.0.0", - "fileVersion": "9.0.1.19813" + "lib/netstandard2.0/Newtonsoft.Json.dll": { + "assemblyVersion": "11.0.0.0", + "fileVersion": "11.0.2.21924" } } }, @@ -749,19 +841,19 @@ "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, "runtime.native.System/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0" } }, "runtime.native.System.IO.Compression/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0" } }, "runtime.native.System.Net.Http/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0" } }, @@ -792,822 +884,822 @@ "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.win-x64.Microsoft.NETCore.App/2.1.6": { + "runtime.win-x64.Microsoft.NETCore.App/2.1.12": { "runtime": { "runtimes/win-x64/lib/netcoreapp2.1/Microsoft.CSharp.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/Microsoft.VisualBasic.dll": { "assemblyVersion": "10.0.4.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/Microsoft.Win32.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/Microsoft.Win32.Registry.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/SOS.NETCore.dll": { "assemblyVersion": "1.0.0.0", - "fileVersion": "4.6.27019.6" + "fileVersion": "4.6.27817.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.AppContext.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Buffers.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.Concurrent.dll": { "assemblyVersion": "4.0.14.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.Immutable.dll": { "assemblyVersion": "1.2.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.NonGeneric.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.Specialized.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.Annotations.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.DataAnnotations.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.EventBasedAsync.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.Primitives.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.TypeConverter.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Configuration.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Console.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Core.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Data.Common.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Data.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Contracts.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Debug.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll": { "assemblyVersion": "4.0.3.1", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.FileVersionInfo.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Process.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.StackTrace.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.TextWriterTraceListener.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Tools.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.TraceSource.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Tracing.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Drawing.Primitives.dll": { "assemblyVersion": "4.2.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Drawing.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Dynamic.Runtime.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Globalization.Calendars.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Globalization.Extensions.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Globalization.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Compression.Brotli.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Compression.FileSystem.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Compression.ZipFile.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Compression.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.AccessControl.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.DriveInfo.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.Watcher.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.IsolatedStorage.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.MemoryMappedFiles.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Pipes.AccessControl.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Pipes.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.UnmanagedMemoryStream.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.IO.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Linq.Expressions.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Linq.Parallel.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Linq.Queryable.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Linq.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Memory.dll": { "assemblyVersion": "4.1.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Http.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.HttpListener.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Mail.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.NameResolution.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.NetworkInformation.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Ping.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Requests.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Security.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.ServicePoint.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Sockets.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebClient.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebHeaderCollection.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebProxy.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebSockets.Client.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebSockets.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Net.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Numerics.Vectors.dll": { "assemblyVersion": "4.1.4.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Numerics.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.ObjectModel.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Private.DataContractSerialization.dll": { "assemblyVersion": "4.1.4.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Private.Uri.dll": { "assemblyVersion": "4.0.5.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Private.Xml.Linq.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Private.Xml.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.DispatchProxy.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Emit.ILGeneration.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Emit.Lightweight.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Emit.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Extensions.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Metadata.dll": { "assemblyVersion": "1.4.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.TypeExtensions.dll": { "assemblyVersion": "4.1.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Resources.Reader.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Resources.ResourceManager.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Resources.Writer.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.CompilerServices.VisualC.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Extensions.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Handles.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.RuntimeInformation.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.WindowsRuntime.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Loader.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Numerics.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Formatters.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Json.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Primitives.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Xml.dll": { "assemblyVersion": "4.1.4.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.AccessControl.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Claims.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Algorithms.dll": { "assemblyVersion": "4.3.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Cng.dll": { "assemblyVersion": "4.3.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Csp.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Encoding.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.OpenSsl.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "assemblyVersion": "4.1.1.1", + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Primitives.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.X509Certificates.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { "assemblyVersion": "4.1.1.1", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Principal.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.SecureString.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Security.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.ServiceModel.Web.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.ServiceProcess.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Text.Encoding.Extensions.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Text.Encoding.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Text.RegularExpressions.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Overlapped.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Tasks.Dataflow.dll": { "assemblyVersion": "4.6.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Tasks.Extensions.dll": { "assemblyVersion": "4.3.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Tasks.Parallel.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Tasks.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Thread.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.ThreadPool.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Timer.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Transactions.Local.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Transactions.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.ValueTuple.dll": { "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Web.HttpUtility.dll": { "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Web.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Windows.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.Linq.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.ReaderWriter.dll": { "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.Serialization.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XDocument.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XPath.XDocument.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XPath.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XmlDocument.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XmlSerializer.dll": { "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/System.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/WindowsBase.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/mscorlib.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" }, "runtimes/win-x64/lib/netcoreapp2.1/netstandard.dll": { "assemblyVersion": "2.0.0.0", - "fileVersion": "4.6.27019.5" + "fileVersion": "4.6.27818.1" } }, "native": { "runtimes/win-x64/native/Microsoft.DiaSymReader.Native.amd64.dll": { - "fileVersion": "14.12.25830.2" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/System.Private.CoreLib.dll": { "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.27019.6" + "fileVersion": "4.6.27817.1" }, "runtimes/win-x64/native/api-ms-win-core-console-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-datetime-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-debug-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-errorhandling-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-file-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-file-l1-2-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-file-l2-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-handle-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-heap-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-interlocked-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-libraryloader-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-localization-l1-2-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-memory-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-namedpipe-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-processenvironment-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-processthreads-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-processthreads-l1-1-1.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-profile-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-rtlsupport-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-string-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-synch-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-synch-l1-2-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-sysinfo-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-timezone-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-core-util-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-conio-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-convert-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-environment-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-filesystem-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-heap-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-locale-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-math-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-multibyte-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-private-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-process-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-runtime-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-stdio-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-string-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-time-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/api-ms-win-crt-utility-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/clrcompression.dll": { - "fileVersion": "4.6.27019.5" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/clretwrc.dll": { - "fileVersion": "4.6.27019.6" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/clrjit.dll": { - "fileVersion": "4.6.27019.6" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/coreclr.dll": { - "fileVersion": "4.6.27019.6" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/dbgshim.dll": { - "fileVersion": "4.6.27019.6" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/mscordaccore.dll": { - "fileVersion": "4.6.27019.6" + "fileVersion": "0.0.0.0" }, - "runtimes/win-x64/native/mscordaccore_amd64_amd64_4.6.27019.06.dll": { - "fileVersion": "4.6.27019.6" + "runtimes/win-x64/native/mscordaccore_amd64_amd64_4.6.27817.01.dll": { + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/mscordbi.dll": { - "fileVersion": "4.6.27019.6" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/mscorrc.debug.dll": { - "fileVersion": "4.6.27019.6" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/mscorrc.dll": { - "fileVersion": "4.6.27019.6" + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/sos.dll": { - "fileVersion": "4.6.27019.6" + "fileVersion": "0.0.0.0" }, - "runtimes/win-x64/native/sos_amd64_amd64_4.6.27019.06.dll": { - "fileVersion": "4.6.27019.6" + "runtimes/win-x64/native/sos_amd64_amd64_4.6.27817.01.dll": { + "fileVersion": "0.0.0.0" }, "runtimes/win-x64/native/ucrtbase.dll": { - "fileVersion": "10.0.17134.12" + "fileVersion": "0.0.0.0" } } }, - "runtime.win-x64.Microsoft.NETCore.DotNetAppHost/2.1.6": { + "runtime.win-x64.Microsoft.NETCore.DotNetAppHost/2.1.12": { "native": { "runtimes/win-x64/native/apphost.exe": { "fileVersion": "0.0.0.0" } } }, - "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.6": { + "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetHostResolver": "2.1.6" + "Microsoft.NETCore.DotNetHostResolver": "2.1.12" }, "native": { "runtimes/win-x64/native/hostpolicy.dll": { - "fileVersion": "2.1.27019.6" + "fileVersion": "0.0.0.0" } } }, - "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver/2.1.6": { + "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver/2.1.12": { "dependencies": { - "Microsoft.NETCore.DotNetAppHost": "2.1.6" + "Microsoft.NETCore.DotNetAppHost": "2.1.12" }, "native": { "runtimes/win-x64/native/hostfxr.dll": { - "fileVersion": "2.1.27019.6" + "fileVersion": "0.0.0.0" } } }, @@ -1635,7 +1727,7 @@ }, "System.Collections/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -1655,6 +1747,7 @@ } }, "System.Collections.Immutable/1.5.0": {}, + "System.ComponentModel.Annotations/4.5.0": {}, "System.Composition/1.0.31": { "dependencies": { "System.Composition.AttributedModel": "1.0.31", @@ -1765,7 +1858,7 @@ }, "System.Console/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.IO": "4.3.0", "System.Runtime": "4.3.0", @@ -1779,7 +1872,7 @@ }, "System.Diagnostics.Debug/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -1795,7 +1888,7 @@ }, "System.Diagnostics.FileVersionInfo/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", @@ -1816,14 +1909,14 @@ }, "System.Diagnostics.Tools/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Diagnostics.TraceSource/4.0.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", @@ -1836,7 +1929,7 @@ }, "System.Diagnostics.Tracing/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -1861,14 +1954,14 @@ }, "System.Globalization/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Globalization.Calendars/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Globalization": "4.3.0", "System.Runtime": "4.3.0" @@ -1876,7 +1969,7 @@ }, "System.Globalization.Extensions/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", @@ -1886,7 +1979,7 @@ }, "System.IO/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", @@ -1895,7 +1988,7 @@ }, "System.IO.Compression/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Buffers": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", @@ -1914,7 +2007,7 @@ }, "System.IO.FileSystem/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.IO": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", @@ -1976,7 +2069,7 @@ "System.Memory/4.5.1": {}, "System.Net.Http/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.DiagnosticSource": "4.3.0", @@ -2006,7 +2099,7 @@ }, "System.Net.Primitives/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0" @@ -2023,7 +2116,7 @@ }, "System.Reflection/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.IO": "4.3.0", "System.Reflection.Primitives": "4.3.0", @@ -2056,7 +2149,7 @@ }, "System.Reflection.Extensions/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" @@ -2065,7 +2158,7 @@ "System.Reflection.Metadata/1.6.0": {}, "System.Reflection.Primitives/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -2078,7 +2171,7 @@ }, "System.Resources.ResourceManager/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Globalization": "4.3.0", "System.Reflection": "4.3.0", @@ -2097,7 +2190,7 @@ }, "System.Runtime/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0" } }, @@ -2105,27 +2198,27 @@ "runtime": { "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": { "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" + "fileVersion": "4.0.0.0" } } }, "System.Runtime.Extensions/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Runtime.Handles/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Runtime.InteropServices/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Reflection": "4.3.0", "System.Reflection.Primitives": "4.3.0", @@ -2178,7 +2271,7 @@ }, "System.Security.Cryptography.Algorithms/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", @@ -2196,7 +2289,7 @@ }, "System.Security.Cryptography.Cng/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", @@ -2211,7 +2304,7 @@ }, "System.Security.Cryptography.Csp/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", @@ -2228,7 +2321,7 @@ }, "System.Security.Cryptography.Encoding/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Collections.Concurrent": "4.3.0", "System.Linq": "4.3.0", @@ -2272,7 +2365,7 @@ }, "System.Security.Cryptography.X509Certificates/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", @@ -2306,7 +2399,7 @@ }, "System.Security.Principal.Windows/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.Win32.Primitives": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", @@ -2324,14 +2417,14 @@ }, "System.Text.Encoding/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } }, "System.Text.Encoding.CodePages/4.4.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2" + "Microsoft.NETCore.Platforms": "2.1.5" }, "runtime": { "runtimes/win/lib/netcoreapp2.0/System.Text.Encoding.CodePages.dll": { @@ -2342,7 +2435,7 @@ }, "System.Text.Encoding.Extensions/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0" @@ -2361,7 +2454,7 @@ }, "System.Threading.Tasks/4.3.0": { "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Platforms": "2.1.5", "Microsoft.NETCore.Targets": "2.0.0", "System.Runtime": "4.3.0" } @@ -2381,13 +2474,7 @@ "System.Threading.Tasks": "4.3.0" } }, - "System.Threading.Tasks.Extensions/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, + "System.Threading.Tasks.Extensions/4.5.2": {}, "System.Threading.Tasks.Parallel/4.3.0": { "dependencies": { "System.Collections.Concurrent": "4.3.0", @@ -2405,13 +2492,7 @@ "System.Runtime": "4.3.0" } }, - "System.ValueTuple/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - } - }, + "System.ValueTuple/4.4.0": {}, "System.Xml.ReaderWriter/4.3.0": { "dependencies": { "System.Collections": "4.3.0", @@ -2428,7 +2509,7 @@ "System.Text.Encoding.Extensions": "4.3.0", "System.Text.RegularExpressions": "4.3.0", "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0" + "System.Threading.Tasks.Extensions": "4.5.2" } }, "System.Xml.XDocument/4.3.0": { @@ -2486,6 +2567,20 @@ "System.Xml.XDocument": "4.3.0", "System.Xml.XPath": "4.3.0" } + }, + "Utf8Json/1.3.7": { + "dependencies": { + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Threading.Tasks.Extensions": "4.5.2", + "System.ValueTuple": "4.4.0" + }, + "runtime": { + "lib/netstandard2.0/Utf8Json.dll": { + "assemblyVersion": "1.3.7.0", + "fileVersion": "1.3.7.0" + } + } } } }, @@ -2498,108 +2593,108 @@ "Buildalyzer/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-5nO0Lkv0zcB5Ck8AaO9eXnRbAfVAB45QQ0ZGCAfPwRxqlqn7WFkn6ESL8EWD8jgTdodtIE8KpZFXm8zb1jIYBw==", + "sha512": "sha512-iQIgYkhnqu0pLG73wg9ABZy8mvUOPTiwbKWcRLuT4uvwtoT7XJcYyZ+i2fsfj1RKHFmR7ba5/jTSigm7318YgA==", "path": "buildalyzer/2.2.0", "hashPath": "buildalyzer.2.2.0.nupkg.sha512" }, "Buildalyzer.Logger/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-490kgGa+07Jwdsq0jqxUSG2QjVg65MJHMEI1/D/7pOjNY4/Zc5DJTKxuL1eJUFf+rzB7NtZKDV0IGABlH8Ihmw==", + "sha512": "sha512-RLS2YFz0vgq3spMZKsOMh1zQBOazEaNn51/AyhilMjJ5wUzisiMwEVih0QnmrPxw3l/1mWBSbofKs1BVtBcFKw==", "path": "buildalyzer.logger/2.2.0", "hashPath": "buildalyzer.logger.2.2.0.nupkg.sha512" }, "Buildalyzer.Workspaces/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-iItCd3jnCUCXryBbWPpRqzPco2vqWobEAoyXelVSfQ+xkZmEwRGYtjjxa+14qo9sNve/a+LTeYknWG/dyRIQOg==", + "sha512": "sha512-A2OBRP2b/JFUY/i82/CqjHyew6PEm1EDtyankmeDugQFJtURdzis+wy27jqWwHqwySP5n/I4x2GJYplh1H0JFQ==", "path": "buildalyzer.workspaces/2.2.0", "hashPath": "buildalyzer.workspaces.2.2.0.nupkg.sha512" }, + "MicroBatchFramework/1.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MvgnkL0qnJIV4se8KjbLejvJXxYT4aphpAcc1NrfpvEtqieEDrI4cAdGM+s6wRvYIOUooErRAByrS+AMdiaUyg==", + "path": "microbatchframework/1.2.0", + "hashPath": "microbatchframework.1.2.0.nupkg.sha512" + }, "Microsoft.Build/15.8.166": { "type": "package", "serviceable": true, - "sha512": "sha512-iDJUl4kiXxnWFQZ4RZTDL7913wckb5ZqzPVkey1FtyvdM/77feTWZ5yL4Vs3+vcpMJtt2PCUNd0wgVO8dl7YzA==", + "sha512": "sha512-h9dzE7bLEFVeY1fVOdbh3dQOtbWqe3jKzvV6JE9JnpmfLptP3gwp/rOLfWmpFJfcNEqetMYMfbcAwipyp/3DfQ==", "path": "microsoft.build/15.8.166", "hashPath": "microsoft.build.15.8.166.nupkg.sha512" }, "Microsoft.Build.Framework/15.8.166": { "type": "package", "serviceable": true, - "sha512": "sha512-0aEScH8KwZKzHXx3SMqOIcg98zJanvSmf+C/tBNmMotb7L+3ZsV1VbkH94UM7l81RQvTeB1eTAVkLpOffN+YqA==", + "sha512": "sha512-UxQvO36HtZTHJCRCbglZNU5D2M+x2Fs27O0ZvIOrZZo6m83S6ZynCzLW5BjQ9RxAlH/pH2iHiEU+w03OOmAw6Q==", "path": "microsoft.build.framework/15.8.166", "hashPath": "microsoft.build.framework.15.8.166.nupkg.sha512" }, "Microsoft.Build.Tasks.Core/15.8.166": { "type": "package", "serviceable": true, - "sha512": "sha512-S+KyOn73S6xQGF4Eg5XG0fBnTfvgqrLLhaMwSy1iQH+hZWKG7gakdavxwZ9ojCZ9vN2U5qdTR/kXmkFse41HKA==", + "sha512": "sha512-EOCh8vvBJvxI9egq70lySDZAdeteKmaVl3cUQCCmhBmHfIVuDVf7vnfwe0pDGZp95yo0Rf5WtSguiyX7R+xJ5w==", "path": "microsoft.build.tasks.core/15.8.166", "hashPath": "microsoft.build.tasks.core.15.8.166.nupkg.sha512" }, "Microsoft.Build.Utilities.Core/15.8.166": { "type": "package", "serviceable": true, - "sha512": "sha512-WSE8AR96B+mzUFxivxG0jCTDmz+D0PsrXG7GVApUFtSCrt7InnsOU538vxv7dlbn/Wwf8QdDNAE0Zsi+pJNsoQ==", + "sha512": "sha512-xtTrXMOlrH5GXObxN5G3ZVNhC1F9Cagje4ks9qC3btMokNoe/ryl5ncJaS5WshBtB76UPho5MZ8wN1meij2BKA==", "path": "microsoft.build.utilities.core/15.8.166", "hashPath": "microsoft.build.utilities.core.15.8.166.nupkg.sha512" }, "Microsoft.CodeAnalysis.Analyzers/2.6.1": { "type": "package", "serviceable": true, - "sha512": "sha512-eiCP8ZbkBuisHUjLbBHblFdXUd5k5z2Wvb6+H2Lwc/wpqcH9IF0D21S87Ko+dOG1NwOGG1+zqwBHF/vx1n+PGQ==", + "sha512": "sha512-VsT6gg2SPeToP8SK7PEcsH6Ftryb7aOqnXh9xg11zBeov05+63gP3k/TvrR+v85XIa8Nn0y3+qNl4M+qzNLBfw==", "path": "microsoft.codeanalysis.analyzers/2.6.1", "hashPath": "microsoft.codeanalysis.analyzers.2.6.1.nupkg.sha512" }, "Microsoft.CodeAnalysis.Common/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-2JUEHsfLlCE255KGhqfUGb3+MzPsflIRUOMDwoa1+/oFe3o2javC0bHbRzBy3lJ2KQM5uZX8cvoNvV6q/4JxiA==", + "sha512": "sha512-M06oYATUMAqL/ympQ09zNHOrRc6sEwgsiueK6z+QPOgyr028i54NviKy7Evfcvv7Kr0LX9MEmrKXPO2NZ+bZ5Q==", "path": "microsoft.codeanalysis.common/2.9.0", "hashPath": "microsoft.codeanalysis.common.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.CSharp/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-vwhUL6vnKVM7i3TdPhWdXsNvqSFpjY9MSOHr+bqT4jbHQ7lHfqiMRA6P8/18mv7HEWxujpoNsr1IJmyTPBJg/Q==", + "sha512": "sha512-oiCPHjCLZtyAz/vnMRJI0PrhR/amJiR9RIwPpQ3+DMs7TgegGn65/dqYEcoiWSj8YQvwOK/J640EXMydMDLJVQ==", "path": "microsoft.codeanalysis.csharp/2.9.0", "hashPath": "microsoft.codeanalysis.csharp.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-NgHl1H+n4fBdcwYT/jbfUi40ZhSXmZ8kUm1hpkAd0XSNBrHjEgDOpDP11f1sPavczUGaXb8Kv76urg+O8eY9jg==", + "sha512": "sha512-ZVPi+NQcxLbHbKb77qbtRcne5AjbYQXIJYjQMI2dwLKU8PlZaWajZEEhSbin4FED3t4KL6T0RaAx8m8uJtAX2A==", "path": "microsoft.codeanalysis.csharp.workspaces/2.9.0", "hashPath": "microsoft.codeanalysis.csharp.workspaces.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-KBAL4UKhQOMHUlp5rofqASVlOdV0ZyloEDGCMLiRoaSteV3YaNVgqu4tGxEWblYfXmAjWnp/cVv1o/cbhqX4og==", + "sha512": "sha512-dUKemkcCwT8TfXmvjps7RrI9G5C2XgRf3pjhcMEH+ikyLsXqFstDsA3uP4waeJ4gi+4gaCehjmdDGO3UaaKBSA==", "path": "microsoft.codeanalysis.visualbasic/2.9.0", "hashPath": "microsoft.codeanalysis.visualbasic.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-cc/d3g91LQiDloqognxEPm/+4XUkhpAjtrs9G4bgUj/OX2hiqJvzAnB7Em9r9DAWKg9F6127Lf3JidUp9E3I+w==", + "sha512": "sha512-FkFdX/incH1at2EapaBSAXeJHdilmyMOjS0FIaPfvd7Bau0b57/r312JxSGHslKjEWY+2UlWUPoPCYa9oH5hHw==", "path": "microsoft.codeanalysis.visualbasic.workspaces/2.9.0", "hashPath": "microsoft.codeanalysis.visualbasic.workspaces.2.9.0.nupkg.sha512" }, "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { "type": "package", "serviceable": true, - "sha512": "sha512-JdctRx+SwpvGzQBz+PaUvPTNMxlVn74w7AqEMrinuVEIYjYIehp8FyQOsZMOJlBiRnSEygTy8WlHN2R/qcx24Q==", + "sha512": "sha512-Py0UX0Cdh04puqDoE6kBS60j+8nJeJqSUxWQPFpxW6btas5Y2A4io4daJIy0DFz4Y49jcMtS5ynvXdkyIWvl/Q==", "path": "microsoft.codeanalysis.workspaces.common/2.9.0", "hashPath": "microsoft.codeanalysis.workspaces.common.2.9.0.nupkg.sha512" }, - "Microsoft.CSharp/4.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-17h8b5mXa87XYKrrVqdgZ38JefSUqLChUQpXgSnpzsM0nDOhE40FTeNWOJ/YmySGV6tG6T8+hjz6vxbknHJr6A==", - "path": "microsoft.csharp/4.0.1", - "hashPath": "microsoft.csharp.4.0.1.nupkg.sha512" - }, "Microsoft.DotNet.PlatformAbstractions/2.1.0": { "type": "package", "serviceable": true, @@ -2607,33 +2702,68 @@ "path": "microsoft.dotnet.platformabstractions/2.1.0", "hashPath": "microsoft.dotnet.platformabstractions.2.1.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration/2.1.1": { + "Microsoft.Extensions.Configuration/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "path": "microsoft.extensions.configuration/2.2.0", + "hashPath": "microsoft.extensions.configuration.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "path": "microsoft.extensions.configuration.abstractions/2.2.0", + "hashPath": "microsoft.extensions.configuration.abstractions.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Binder/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-LjVKO6P2y52c5ZhTLX/w8zc5H4Y3J/LJsgqTBj49TtFq/hAtVNue/WA0F6/7GMY90xhD7K0MDZ4qpOeWXbLvzg==", - "path": "microsoft.extensions.configuration/2.1.1", - "hashPath": "microsoft.extensions.configuration.2.1.1.nupkg.sha512" + "sha512": "sha512-vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "path": "microsoft.extensions.configuration.binder/2.2.0", + "hashPath": "microsoft.extensions.configuration.binder.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { + "Microsoft.Extensions.Configuration.EnvironmentVariables/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-VfuZJNa0WUshZ/+8BFZAhwFKiKuu/qOUCFntfdLpHj7vcRnsGHqd3G2Hse78DM+pgozczGM63lGPRLmy+uhUOA==", - "path": "microsoft.extensions.configuration.abstractions/2.1.1", - "hashPath": "microsoft.extensions.configuration.abstractions.2.1.1.nupkg.sha512" + "sha512": "sha512-gIqt9PkKO01hZ0zmHnWrZ1E45MDreZTVoyDbL1kMWKtDgxxWTJpYtESTEcgpvR1uB1iex1zKGYzJpOMgmuP5TQ==", + "path": "microsoft.extensions.configuration.environmentvariables/2.2.0", + "hashPath": "microsoft.extensions.configuration.environmentvariables.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.Binder/2.1.1": { + "Microsoft.Extensions.Configuration.FileExtensions/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-fcLCTS03poWE4v9tSNBr3pWn0QwGgAn1vzqHXlXgvqZeOc7LvQNzaWcKRQZTdEc3+YhQKwMsOtm3VKSA2aWQ8w==", - "path": "microsoft.extensions.configuration.binder/2.1.1", - "hashPath": "microsoft.extensions.configuration.binder.2.1.1.nupkg.sha512" + "sha512": "sha512-H1qCpWBC8Ed4tguTR/qYkbb3F6DI5Su3t8xyFo3/5MzAd8PwPpHzgX8X04KbBxKmk173Pb64x7xMHarczVFQUA==", + "path": "microsoft.extensions.configuration.fileextensions/2.2.0", + "hashPath": "microsoft.extensions.configuration.fileextensions.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { + "Microsoft.Extensions.Configuration.Json/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-MgYpU5cwZohUMKKg3sbPhvGG+eAZ/59E9UwPwlrUkyXU+PGzqwZg9yyQNjhxuAWmoNoFReoemeCku50prYSGzA==", - "path": "microsoft.extensions.dependencyinjection.abstractions/2.1.1", - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.1.1.nupkg.sha512" + "sha512": "sha512-jUDdmLyFmLf9V3mqnMzSAzAv4QigJ67tZh5Q7HBXeBnESL2UyeesNG6jSBti+b63JpxZf+EDyn+anx3gyrNxug==", + "path": "microsoft.extensions.configuration.json/2.2.0", + "hashPath": "microsoft.extensions.configuration.json.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.UserSecrets/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-2/N2xo6/sNbVshnKktmq5lwaQbsAR2SrzCVrJEeMP8OKZVI7SzT8P6/WXZF8/YC7dTYsMe3nrHzgl1cF9i5ZKQ==", + "path": "microsoft.extensions.configuration.usersecrets/2.2.0", + "hashPath": "microsoft.extensions.configuration.usersecrets.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "path": "microsoft.extensions.dependencyinjection/2.2.0", + "hashPath": "microsoft.extensions.dependencyinjection.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==", + "path": "microsoft.extensions.dependencyinjection.abstractions/2.2.0", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.2.0.nupkg.sha512" }, "Microsoft.Extensions.DependencyModel/2.1.0": { "type": "package", @@ -2642,73 +2772,108 @@ "path": "microsoft.extensions.dependencymodel/2.1.0", "hashPath": "microsoft.extensions.dependencymodel.2.1.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging/2.1.1": { + "Microsoft.Extensions.FileProviders.Abstractions/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-EcnaSsPTqx2MGnHrmWOD0ugbuuqVT8iICqSqPzi45V5/MA1LjUNb0kwgcxBGqizV1R+WeBK7/Gw25Jzkyk9bIw==", + "path": "microsoft.extensions.fileproviders.abstractions/2.2.0", + "hashPath": "microsoft.extensions.fileproviders.abstractions.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileProviders.Physical/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tbDHZnBJkjYd9NjlRZ9ondDiv1Te3KYCTW2RWpR1B0e1Z8+EnFRo7qNnHkkSCixLdlPZzhjlX24d/PixQ7w2dA==", + "path": "microsoft.extensions.fileproviders.physical/2.2.0", + "hashPath": "microsoft.extensions.fileproviders.physical.2.2.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileSystemGlobbing/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-hh+mkOAQDTp6XH80xJt3+wwYVzkbwYQl9XZRCz4Um0JjP/o7N9vHM3rZ6wwwtr+BBe/L6iBO2sz0px6OWBzqZQ==", - "path": "microsoft.extensions.logging/2.1.1", - "hashPath": "microsoft.extensions.logging.2.1.1.nupkg.sha512" + "sha512": "sha512-ZSsHZp3PyW6vk37tDEdypjgGlNtpJ0EixBMOfUod2Thx7GtwfFSAQXUQx8a8BN8vfWKGGMbp7jPWdoHx/At4wQ==", + "path": "microsoft.extensions.filesystemglobbing/2.2.0", + "hashPath": "microsoft.extensions.filesystemglobbing.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging.Abstractions/2.1.1": { + "Microsoft.Extensions.Hosting/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-XRzK7ZF+O6FzdfWrlFTi1Rgj2080ZDsd46vzOjadHUB0Cz5kOvDG8vI7caa5YFrsHQpcfn0DxtjS4E46N4FZsA==", - "path": "microsoft.extensions.logging.abstractions/2.1.1", - "hashPath": "microsoft.extensions.logging.abstractions.2.1.1.nupkg.sha512" + "sha512": "sha512-PxZPd5QbWr8+3JN2segEaD7IAYI+mR8ZmMqgo6GOk+E+UKnRcbC3RSQgJrZYuWVQwJCvdxesO5e64LSHC1zC8g==", + "path": "microsoft.extensions.hosting/2.2.0", + "hashPath": "microsoft.extensions.hosting.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Options/2.1.1": { + "Microsoft.Extensions.Hosting.Abstractions/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-V7lXCU78lAbzaulCGFKojcCyG8RTJicEbiBkPJjFqiqXwndEBBIehdXRMWEVU3UtzQ1yDvphiWUL9th6/4gJ7w==", - "path": "microsoft.extensions.options/2.1.1", - "hashPath": "microsoft.extensions.options.2.1.1.nupkg.sha512" + "sha512": "sha512-+k4AEn68HOJat5gj1TWa6X28WlirNQO9sPIIeQbia+91n03esEtMSSoekSTpMjUzjqtJWQN3McVx0GvSPFHF/Q==", + "path": "microsoft.extensions.hosting.abstractions/2.2.0", + "hashPath": "microsoft.extensions.hosting.abstractions.2.2.0.nupkg.sha512" }, - "Microsoft.Extensions.Primitives/2.1.1": { + "Microsoft.Extensions.Logging/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-scJ1GZNIxMmjpENh0UZ8XCQ6vzr/LzeF9WvEA51Ix2OQGAs9WPgPu8ABVUdvpKPLuor/t05gm6menJK3PwqOXg==", - "path": "microsoft.extensions.primitives/2.1.1", - "hashPath": "microsoft.extensions.primitives.2.1.1.nupkg.sha512" + "sha512": "sha512-Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "path": "microsoft.extensions.logging/2.2.0", + "hashPath": "microsoft.extensions.logging.2.2.0.nupkg.sha512" }, - "Microsoft.NETCore.App/2.1.6": { + "Microsoft.Extensions.Logging.Abstractions/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-4KShBFobByVw92OH1mYbXqy10D2AMSYZCjhVjYxDooIpYZPTJJ5ArkLRaoGk1+7+55MiSb52Ys2mDdO2JW7ddA==", - "path": "microsoft.netcore.app/2.1.6", - "hashPath": "microsoft.netcore.app.2.1.6.nupkg.sha512" + "sha512": "sha512-B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==", + "path": "microsoft.extensions.logging.abstractions/2.2.0", + "hashPath": "microsoft.extensions.logging.abstractions.2.2.0.nupkg.sha512" }, - "Microsoft.NETCore.DotNetAppHost/2.1.6": { + "Microsoft.Extensions.Options/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-BbhLwFZNhT9mL6Wa8Me9VQN6kYSqb56G/epwh92x1ZJjcx+nFaf6X8tdpfmhVOGwztR62PEn9GvCJgkelIN6PQ==", - "path": "microsoft.netcore.dotnetapphost/2.1.6", - "hashPath": "microsoft.netcore.dotnetapphost.2.1.6.nupkg.sha512" + "sha512": "sha512-UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "path": "microsoft.extensions.options/2.2.0", + "hashPath": "microsoft.extensions.options.2.2.0.nupkg.sha512" }, - "Microsoft.NETCore.DotNetHostPolicy/2.1.6": { + "Microsoft.Extensions.Primitives/2.2.0": { "type": "package", "serviceable": true, - "sha512": "sha512-kx3ZCtbdjnMYOO0nL9vhcgbW/oEPWOkefPm1vqE7ufwChhc/AiRHGY8iYNKQdCRKqE7nDrI6mXyOvIT4+aXrgw==", - "path": "microsoft.netcore.dotnethostpolicy/2.1.6", - "hashPath": "microsoft.netcore.dotnethostpolicy.2.1.6.nupkg.sha512" + "sha512": "sha512-azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "path": "microsoft.extensions.primitives/2.2.0", + "hashPath": "microsoft.extensions.primitives.2.2.0.nupkg.sha512" }, - "Microsoft.NETCore.DotNetHostResolver/2.1.6": { + "Microsoft.NETCore.App/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-0pd2Ts5l4LtCwlDSQMeX9IFdYUdB7cAinGrkMMKzJlyEhoHVHBvlQlDQEugIb70Ls4olG0UJcDtOGOqf38Dzbw==", - "path": "microsoft.netcore.dotnethostresolver/2.1.6", - "hashPath": "microsoft.netcore.dotnethostresolver.2.1.6.nupkg.sha512" + "sha512": "sha512-oVeSsnIqzD0VuS3xoZRA1SAfq/aLscEy12TaeIP5H6FIOBo9Ta1sMkyc7Pj3ZDJz3fsWeYf/4fR5Ft8Y+oqdzg==", + "path": "microsoft.netcore.app/2.1.12", + "hashPath": "microsoft.netcore.app.2.1.12.nupkg.sha512" }, - "Microsoft.NETCore.Platforms/2.1.2": { + "Microsoft.NETCore.DotNetAppHost/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-7J7veIH7Mu6zc4llWnM7YRgTv9+Ew+JWkkDj0K7cEe8wuFA6HRt6STtwux2g+qjpDXeYeWsK0UQ3uIgRiTYHIg==", - "path": "microsoft.netcore.platforms/2.1.2", - "hashPath": "microsoft.netcore.platforms.2.1.2.nupkg.sha512" + "sha512": "sha512-bjRuqLIp7JLORwwH5PTZOKIozs68ulLLcSMRcTmOymOqV35PFE+VE6M2SmR6OQsxG0ViIuxM1YwQdYwlIzG3cQ==", + "path": "microsoft.netcore.dotnetapphost/2.1.12", + "hashPath": "microsoft.netcore.dotnetapphost.2.1.12.nupkg.sha512" + }, + "Microsoft.NETCore.DotNetHostPolicy/2.1.12": { + "type": "package", + "serviceable": true, + "sha512": "sha512-A1tafTgEtO7yLIst4n7PrZJtqyc25JHEPII5/2tTIqTymaUA8p8wun9SpwX0dTYxcQbQmfK2yp402kuHU3oVcQ==", + "path": "microsoft.netcore.dotnethostpolicy/2.1.12", + "hashPath": "microsoft.netcore.dotnethostpolicy.2.1.12.nupkg.sha512" + }, + "Microsoft.NETCore.DotNetHostResolver/2.1.12": { + "type": "package", + "serviceable": true, + "sha512": "sha512-S7trRhPhQ/O+ZapKoKyjmiveC78yUAQ1usE3qsVT2W9NfI1Hk04aIwDwmio9GWNqUljXzCbK+B7h9CQe5GPJMQ==", + "path": "microsoft.netcore.dotnethostresolver/2.1.12", + "hashPath": "microsoft.netcore.dotnethostresolver.2.1.12.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FW1dYOftgUODWh91w97B7fJL9oaderZzbIOGNRe3FS9Yl40yaMz+cHWdQ+X9uE9agCmLzuCx/Yyxt8QSnooHsA==", + "path": "microsoft.netcore.platforms/2.1.5", + "hashPath": "microsoft.netcore.platforms.2.1.5.nupkg.sha512" }, "Microsoft.NETCore.Targets/2.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-mJnCMoBfWL0lxxlBFJ/8cZKTfPpI82TekZkUqvSCBtunUaaqr2LVeWl1zQYdanAdk4Ddf1HCwb8+DNYaNFBk1w==", + "sha512": "sha512-odP/tJj1z6GylFpNo7pMtbd/xQgTC3Ex2If63dRTL38bBNMwsBnJ+RceUIyHdRBC0oik/3NehYT+oECwBhIM3Q==", "path": "microsoft.netcore.targets/2.0.0", "hashPath": "microsoft.netcore.targets.2.0.0.nupkg.sha512" }, @@ -2729,14 +2894,14 @@ "MSBuild.StructuredLogger/2.0.11": { "type": "package", "serviceable": true, - "sha512": "sha512-LYK6MOfPUEE/u10OepnvFOjFy12YWOjtXXIh3K0RtUzdjatIHZSAjU8MKPuGcegi06iblNH2Rlc78vc2AVokhg==", + "sha512": "sha512-youJH/f03XEYwre6DWT+a8Fjb6Vs/UfioczhKYohHK24ljUSLBCRaopXX2+VzeA/7aQjmRmr4HYpzD9cCCJM9w==", "path": "msbuild.structuredlogger/2.0.11", "hashPath": "msbuild.structuredlogger.2.0.11.nupkg.sha512" }, "MsBuildPipeLogger.Server/1.1.2": { "type": "package", "serviceable": true, - "sha512": "sha512-4gxSIkc4mMpHemehqDAZzGdKAhGJAxyt+56SUi6B4X2FWijojXzcIr7illkuEA7Ex05eoa5Cx4pr6d1hn4m8lg==", + "sha512": "sha512-3kIOap0qKW+/+Cd9o6tUM420ibgzCVuhTvLXVRv7M6EOmkH1iEiUsUTkFeQ+SqH5JuLHZfXmEZieDiWvRFtq1Q==", "path": "msbuildpipelogger.server/1.1.2", "hashPath": "msbuildpipelogger.server.1.1.2.nupkg.sha512" }, @@ -2747,12 +2912,12 @@ "path": "netstandard.library/2.0.3", "hashPath": "netstandard.library.2.0.3.nupkg.sha512" }, - "Newtonsoft.Json/9.0.1": { + "Newtonsoft.Json/11.0.2": { "type": "package", "serviceable": true, - "sha512": "sha512-U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", - "path": "newtonsoft.json/9.0.1", - "hashPath": "newtonsoft.json.9.0.1.nupkg.sha512" + "sha512": "sha512-IvJe1pj7JHEsP8B8J8DwlMEx8UInrs/x+9oVY+oCD13jpLu4JbJU2WCIsMRn5C4yW9+DgkaO8uiVE5VHKjpmdQ==", + "path": "newtonsoft.json/11.0.2", + "hashPath": "newtonsoft.json.11.0.2.nupkg.sha512" }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "type": "package", @@ -2785,7 +2950,7 @@ "runtime.native.System.IO.Compression/4.3.0": { "type": "package", "serviceable": true, - "sha512": "sha512-INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", + "sha512": "sha512-b+V9JC/Ii3sR659flBeaBJww111425tgjcDS1k+hqV4sGh9FALRDBvJnDtQ895gAzpPTUOFDHdqaZ2Et7BpZMg==", "path": "runtime.native.system.io.compression/4.3.0", "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" }, @@ -2841,7 +3006,7 @@ "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "type": "package", "serviceable": true, - "sha512": "sha512-nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==", + "sha512": "sha512-T5NvFgmHX0WH4c7lP72krsnk+IJI10vJf2j2twGE+5QBRA4RyRAgD+ZjEgdmpLOjW4B+nZGaadewTCUcR899OQ==", "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" }, @@ -2866,33 +3031,33 @@ "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" }, - "runtime.win-x64.Microsoft.NETCore.App/2.1.6": { + "runtime.win-x64.Microsoft.NETCore.App/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-3e/EurS25c1cYXyfZgAat79Ua+zOtvolnWx4wjWjIcBMf4pfovfqzOt174CRU+hAVyZ/9cNNogUaXBLXUiWmHg==", - "path": "runtime.win-x64.microsoft.netcore.app/2.1.6", - "hashPath": "runtime.win-x64.microsoft.netcore.app.2.1.6.nupkg.sha512" + "sha512": "sha512-E3ilAWHx5mR0LxpWxSzSqw0cXm5QeBZYRKjdNRVQJdaa9chqTdfJJGBiZULyQ7VHdl9ALyn5dYJJN9cuhEx96w==", + "path": "runtime.win-x64.microsoft.netcore.app/2.1.12", + "hashPath": "runtime.win-x64.microsoft.netcore.app.2.1.12.nupkg.sha512" }, - "runtime.win-x64.Microsoft.NETCore.DotNetAppHost/2.1.6": { + "runtime.win-x64.Microsoft.NETCore.DotNetAppHost/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-/emzHEBKcoH8XnrpsdmpRp4tYhiJsxj2XnKMtzaq/MmcNFFad70RkdDNra8jv0dW4Pdh/LUeMpIZW7p84QjXjA==", - "path": "runtime.win-x64.microsoft.netcore.dotnetapphost/2.1.6", - "hashPath": "runtime.win-x64.microsoft.netcore.dotnetapphost.2.1.6.nupkg.sha512" + "sha512": "sha512-P2Yq/b5qWGt/9mwMH88EEPKR614SIMSktPcQsfuMZlJApPfK3glzQ3HMjl7ViQF6K6MPSIWMJZCxs+2pD9g+CQ==", + "path": "runtime.win-x64.microsoft.netcore.dotnetapphost/2.1.12", + "hashPath": "runtime.win-x64.microsoft.netcore.dotnetapphost.2.1.12.nupkg.sha512" }, - "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.6": { + "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-Hg9+g84cTUunHBmCUF/vmDGU9/y3JOrY0++P2S1oZtqm/lFjv0L2lF0e+WiOqJBdjP6p0+VZ5ssAJJm20FTgPw==", - "path": "runtime.win-x64.microsoft.netcore.dotnethostpolicy/2.1.6", - "hashPath": "runtime.win-x64.microsoft.netcore.dotnethostpolicy.2.1.6.nupkg.sha512" + "sha512": "sha512-EIUdCvhb7Qs+Y+8bk5iosYCjFlgTmsPpynumTvjD8rtds5d9jEkpdBl7UkTb3GOpQmYQDsZm9JGz5waKs7PC7g==", + "path": "runtime.win-x64.microsoft.netcore.dotnethostpolicy/2.1.12", + "hashPath": "runtime.win-x64.microsoft.netcore.dotnethostpolicy.2.1.12.nupkg.sha512" }, - "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver/2.1.6": { + "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver/2.1.12": { "type": "package", "serviceable": true, - "sha512": "sha512-nkeMtVqC+PtxyNqKmeBOpO7T0mnees+5BmnyWa//i1q1uT6fY3mGlArVZz2xb0MTgQfVrkVYR09hTdYsGjf4TA==", - "path": "runtime.win-x64.microsoft.netcore.dotnethostresolver/2.1.6", - "hashPath": "runtime.win-x64.microsoft.netcore.dotnethostresolver.2.1.6.nupkg.sha512" + "sha512": "sha512-aQcS3Mb+3NkJMozI4sSbmG7DSjBKuA9w/nu1ZoIW//WTY2Cm/NVaTqgSQJDg/4D9Ujz6qdlWg7Qp1wkR4jATDw==", + "path": "runtime.win-x64.microsoft.netcore.dotnethostresolver/2.1.12", + "hashPath": "runtime.win-x64.microsoft.netcore.dotnethostresolver.2.1.12.nupkg.sha512" }, "System.AppContext/4.3.0": { "type": "package", @@ -2911,7 +3076,7 @@ "System.CodeDom/4.4.0": { "type": "package", "serviceable": true, - "sha512": "sha512-E/lvSfMFPtNflAgdM6AuPU8JbZdqdSoGpU66G7SrduCqdrFyPflaqqV4gN2d0hrCBpu92HaoqpUP5d+g9Itcxw==", + "sha512": "sha512-2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA==", "path": "system.codedom/4.4.0", "hashPath": "system.codedom.4.4.0.nupkg.sha512" }, @@ -2936,6 +3101,13 @@ "path": "system.collections.immutable/1.5.0", "hashPath": "system.collections.immutable.1.5.0.nupkg.sha512" }, + "System.ComponentModel.Annotations/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==", + "path": "system.componentmodel.annotations/4.5.0", + "hashPath": "system.componentmodel.annotations.4.5.0.nupkg.sha512" + }, "System.Composition/1.0.31": { "type": "package", "serviceable": true, @@ -3030,7 +3202,7 @@ "System.Diagnostics.TraceSource/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-q5bGzzvXVi+dIMiPWRhXZV7r+Os3TEOuRW5LHsAUDGpqJHol8XiLokVpsgAfPqHHNkyx1bbv5lRZqRkRrGZKxQ==", + "sha512": "sha512-6WVCczFZKXwpWpzd/iJkYnsmWTSFFiU24Xx/YdHXBcu+nFI/ehTgeqdJQFbtRPzbrO3KtRNjvkhtj4t5/WwWsA==", "path": "system.diagnostics.tracesource/4.0.0", "hashPath": "system.diagnostics.tracesource.4.0.0.nupkg.sha512" }, @@ -3212,7 +3384,7 @@ "System.Resources.Writer/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-mGgwPBXGTqnw6lQeRI24ChoyPViWx36MVfN6Ys1ceLJMTQDMHcoLiMHOzSvA7ZgjX2tWBy8nfjzlN1kDL/G1gQ==", + "sha512": "sha512-Hz+ZS81dVSNy93YyJhhL3GwzmMhfcQ8FbUooAt9MO4joIe0vPM4gclv0C82ko1tuN/Kw6CvZFLYkgk6n9xvEkg==", "path": "system.resources.writer/4.0.0", "hashPath": "system.resources.writer.4.0.0.nupkg.sha512" }, @@ -3261,7 +3433,7 @@ "System.Runtime.Loader/4.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-AGWrywLI2B15/dnLuFnlHWFjXmq1Tl0kjWaKTHbaJ8T9kIxiQ8YGTtiMQc8rUr49l2JjfZa7QY0KKqlyzA7NNg==", + "sha512": "sha512-4UN78GOVU/mbDFcXkEWtetJT/sJ0yic2gGk1HSlSpWI0TDf421xnrZTDZnwNBapk1GQeYN7U1lTj/aQB1by6ow==", "path": "system.runtime.loader/4.0.0", "hashPath": "system.runtime.loader.4.0.0.nupkg.sha512" }, @@ -3359,7 +3531,7 @@ "System.Text.Encoding.CodePages/4.4.0": { "type": "package", "serviceable": true, - "sha512": "sha512-FpAgMC+BX6OOCiRebYqHP3r3aYU7o0lopPOo4zKyGc5LWXFEYRUaKtoXXvAJ3sP+IDOK/KBxZaiVAdi+QdZ0TA==", + "sha512": "sha512-6JX7ZdaceBiLKLkYt8zJcp4xTJd1uYyXXEkPw6mnlUIjh1gZPIVKPtRXPmY5kLf6DwZmf5YLwR3QUrRonl7l0A==", "path": "system.text.encoding.codepages/4.4.0", "hashPath": "system.text.encoding.codepages.4.4.0.nupkg.sha512" }, @@ -3394,16 +3566,16 @@ "System.Threading.Tasks.Dataflow/4.6.0": { "type": "package", "serviceable": true, - "sha512": "sha512-U+WVv+MkUi5T7PM3yJD7WsX0pnlzNcM08r+ua2P5MpvGXv69DE+3bBfhdz8U6ZxvPthkvDvqy/AaIxZhKKgUdw==", + "sha512": "sha512-2hRjGu2r2jxRZ55wmcHO/WbdX+YAOz9x6FE8xqkHZgPaoFMKQZRe9dk8xTZIas8fRjxRmzawnTEWIrhlM+Un7w==", "path": "system.threading.tasks.dataflow/4.6.0", "hashPath": "system.threading.tasks.dataflow.4.6.0.nupkg.sha512" }, - "System.Threading.Tasks.Extensions/4.3.0": { + "System.Threading.Tasks.Extensions/4.5.2": { "type": "package", "serviceable": true, - "sha512": "sha512-npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", - "path": "system.threading.tasks.extensions/4.3.0", - "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" + "sha512": "sha512-BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w==", + "path": "system.threading.tasks.extensions/4.5.2", + "hashPath": "system.threading.tasks.extensions.4.5.2.nupkg.sha512" }, "System.Threading.Tasks.Parallel/4.3.0": { "type": "package", @@ -3419,12 +3591,12 @@ "path": "system.threading.thread/4.3.0", "hashPath": "system.threading.thread.4.3.0.nupkg.sha512" }, - "System.ValueTuple/4.3.0": { + "System.ValueTuple/4.4.0": { "type": "package", "serviceable": true, - "sha512": "sha512-cNLEvBX3d6MMQRZe3SMFNukVbitDAEpVZO17qa0/2FHxZ7Y7PpFRpr6m2615XYM/tYYYf0B+WyHNujqIw8Luwg==", - "path": "system.valuetuple/4.3.0", - "hashPath": "system.valuetuple.4.3.0.nupkg.sha512" + "sha512": "sha512-BahUww/+mdP4ARCAh2RQhQTg13wYLVrBb9SYVgW8ZlrwjraGCXHGjo0oIiUfZ34LUZkMMR+RAzR7dEY4S1HeQQ==", + "path": "system.valuetuple/4.4.0", + "hashPath": "system.valuetuple.4.4.0.nupkg.sha512" }, "System.Xml.ReaderWriter/4.3.0": { "type": "package", @@ -3460,6 +3632,13 @@ "sha512": "sha512-jw9oHHEIVW53mHY9PgrQa98Xo2IZ0ZjrpdOTmtvk+Rvg4tq7dydmxdNqUvJ5YwjDqhn75mBXWttWjiKhWP53LQ==", "path": "system.xml.xpath.xdocument/4.3.0", "hashPath": "system.xml.xpath.xdocument.4.3.0.nupkg.sha512" + }, + "Utf8Json/1.3.7": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lMTNZWp6a6KGkgMc3rW41D3b0REb03fQycfb/2bNBpiUtsbGYYI/LrAhnX52vrHRe4ze7JxbtpWF1Y5ohdpipQ==", + "path": "utf8json/1.3.7", + "hashPath": "utf8json.1.3.7.nupkg.sha512" } } } \ No newline at end of file diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.dll index 8753bfc20..717a85860 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.exe b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.exe index 77b4aa748..eb35840c0 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.exe and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.exe differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.xml b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.xml new file mode 100644 index 000000000..9b4e0f0d8 --- /dev/null +++ b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/moc.xml @@ -0,0 +1,533 @@ + + + + moc + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + + Class to produce the template output + + + + + Create the template output + + + + + Base class for this transformation + + + + + The string builder that generation-time code is using to assemble generated output + + + + + The error collection for the generation process + + + + + A list of the lengths of each indent that was added with PushIndent + + + + + Gets the current indent we use when adding lines to the output + + + + + Current transformation session + + + + + Write text directly into the generated output + + + + + Write text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Write formatted text directly into the generated output + + + + + Raise an error + + + + + Raise a warning + + + + + Increase the indent + + + + + Remove the last indent that was added with PushIndent + + + + + Remove any indentation + + + + + Utility class to produce culture-oriented representation of an object as a string. + + + + + Gets or sets format provider to be used by ToStringWithCulture method. + + + + + This is called from the compile/run appdomain to convert objects within an expression block to a string + + + + + Helper to produce culture-oriented representation of an object as a string + + + + diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordaccore.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordaccore.dll index b5ea467e0..ec15cef46 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordaccore.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordaccore.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordaccore_amd64_amd64_4.6.27019.06.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordaccore_amd64_amd64_4.6.27817.01.dll similarity index 99% rename from samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordaccore_amd64_amd64_4.6.27019.06.dll rename to samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordaccore_amd64_amd64_4.6.27817.01.dll index b5ea467e0..ec15cef46 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordaccore_amd64_amd64_4.6.27019.06.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordaccore_amd64_amd64_4.6.27817.01.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordbi.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordbi.dll index 89a5e10f7..812ee6836 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordbi.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscordbi.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscorlib.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscorlib.dll index d4795587a..7cb121814 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscorlib.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscorlib.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscorrc.debug.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscorrc.debug.dll index 10d7023be..1b27c0340 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscorrc.debug.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscorrc.debug.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscorrc.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscorrc.dll index fa3bc4751..f70ab607c 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscorrc.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/mscorrc.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/netstandard.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/netstandard.dll index c2faf435d..08fee4a69 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/netstandard.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/netstandard.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/sos.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/sos.dll index 62984be2c..071d39507 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/sos.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/sos.dll differ diff --git a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/sos_amd64_amd64_4.6.27019.06.dll b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/sos_amd64_amd64_4.6.27817.01.dll similarity index 98% rename from samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/sos_amd64_amd64_4.6.27019.06.dll rename to samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/sos_amd64_amd64_4.6.27817.01.dll index 62984be2c..071d39507 100644 Binary files a/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/sos_amd64_amd64_4.6.27019.06.dll and b/samples/ChatApp/GeneratorTools/MagicOnionCodeGenerator/win-x64/sos_amd64_amd64_4.6.27817.01.dll differ diff --git a/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/linux-x64/mpc.deps.json b/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/linux-x64/mpc.deps.json index a8c7f2687..69057db31 100644 --- a/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/linux-x64/mpc.deps.json +++ b/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/linux-x64/mpc.deps.json @@ -1,3372 +1,3372 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v2.1/linux-x64", - "signature": "09b5d44043dfd8ef3b9b182f6a118945b484122f" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v2.1": {}, - ".NETCoreApp,Version=v2.1/linux-x64": { - "mpc/1.0.0": { - "dependencies": { - "Buildalyzer.Workspaces": "2.2.0", - "Microsoft.NETCore.App": "2.1.5" - }, - "runtime": { - "mpc.dll": {} - } - }, - "Buildalyzer/2.2.0": { - "dependencies": { - "Buildalyzer.Logger": "2.2.0", - "MSBuild.StructuredLogger": "2.0.11", - "Microsoft.Build": "15.8.166", - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Build.Tasks.Core": "15.8.166", - "Microsoft.Build.Utilities.Core": "15.8.166", - "Microsoft.Extensions.DependencyModel": "2.1.0", - "Microsoft.Extensions.Logging": "2.1.1", - "Microsoft.Extensions.Logging.Abstractions": "2.1.1", - "MsBuildPipeLogger.Server": "1.1.2" - }, - "runtime": { - "lib/netstandard2.0/Buildalyzer.dll": { - "assemblyVersion": "2.2.0.0", - "fileVersion": "2.2.0.0" - } - } - }, - "Buildalyzer.Logger/2.2.0": { - "dependencies": { - "NETStandard.Library": "2.0.3" - }, - "runtime": { - "lib/netstandard1.3/Buildalyzer.Logger.dll": { - "assemblyVersion": "2.2.0.0", - "fileVersion": "2.2.0.0" - }, - "lib/netstandard1.3/MsBuildPipeLogger.Logger.dll": { - "assemblyVersion": "1.1.2.0", - "fileVersion": "1.1.2.0" - } - } - }, - "Buildalyzer.Workspaces/2.2.0": { - "dependencies": { - "Buildalyzer": "2.2.0", - "Microsoft.CodeAnalysis.CSharp.Workspaces": "2.9.0", - "Microsoft.CodeAnalysis.VisualBasic.Workspaces": "2.9.0" - }, - "runtime": { - "lib/netstandard2.0/Buildalyzer.Workspaces.dll": { - "assemblyVersion": "2.2.0.0", - "fileVersion": "2.2.0.0" - } - } - }, - "Microsoft.Build/15.8.166": { - "dependencies": { - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Win32.Registry": "4.3.0", - "System.Collections.Immutable": "1.5.0", - "System.Diagnostics.TraceSource": "4.0.0", - "System.IO.Compression": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", - "System.Runtime.Loader": "4.0.0", - "System.Security.Principal.Windows": "4.3.0", - "System.Text.Encoding.CodePages": "4.4.0", - "System.Threading.Tasks.Dataflow": "4.6.0" - }, - "runtime": { - "lib/netcoreapp2.1/Microsoft.Build.dll": { - "assemblyVersion": "15.1.0.0", - "fileVersion": "15.8.166.59604" - } - } - }, - "Microsoft.Build.Framework/15.8.166": { - "dependencies": { - "System.Runtime.Serialization.Primitives": "4.1.1", - "System.Threading.Thread": "4.3.0" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Build.Framework.dll": { - "assemblyVersion": "15.1.0.0", - "fileVersion": "15.8.166.59604" - } - } - }, - "Microsoft.Build.Tasks.Core/15.8.166": { - "dependencies": { - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Build.Utilities.Core": "15.8.166", - "Microsoft.Win32.Registry": "4.3.0", - "System.CodeDom": "4.4.0", - "System.Collections.Immutable": "1.5.0", - "System.Linq.Parallel": "4.3.0", - "System.Net.Http": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.Writer": "4.0.0", - "System.Threading.Tasks.Dataflow": "4.6.0" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Build.Tasks.Core.dll": { - "assemblyVersion": "15.1.0.0", - "fileVersion": "15.8.166.59604" - } - } - }, - "Microsoft.Build.Utilities.Core/15.8.166": { - "dependencies": { - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Win32.Registry": "4.3.0", - "System.Collections.Immutable": "1.5.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", - "System.Text.Encoding.CodePages": "4.4.0" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll": { - "assemblyVersion": "15.1.0.0", - "fileVersion": "15.8.166.59604" - } - } - }, - "Microsoft.CodeAnalysis.Analyzers/2.6.1": {}, - "Microsoft.CodeAnalysis.Common/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.Analyzers": "2.6.1", - "System.AppContext": "4.3.0", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Collections.Immutable": "1.5.0", - "System.Console": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.FileVersionInfo": "4.3.0", - "System.Diagnostics.StackTrace": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO.Compression": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.CodePages": "4.4.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0", - "System.Threading.Tasks.Parallel": "4.3.0", - "System.Threading.Thread": "4.3.0", - "System.ValueTuple": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0", - "System.Xml.XPath.XDocument": "4.3.0", - "System.Xml.XmlDocument": "4.3.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.CSharp/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.Common": "2.9.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.CSharp": "2.9.0", - "Microsoft.CodeAnalysis.Workspaces.Common": "2.9.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.Common": "2.9.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.VisualBasic": "2.9.0", - "Microsoft.CodeAnalysis.Workspaces.Common": "2.9.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.Common": "2.9.0", - "System.Composition": "1.0.31", - "System.Diagnostics.Contracts": "4.3.0", - "System.Linq.Parallel": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading.Tasks.Parallel": "4.3.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.Workspaces.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CSharp/4.0.1": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "Microsoft.DotNet.PlatformAbstractions/2.1.0": { - "dependencies": { - "System.AppContext": "4.3.0", - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.DotNet.PlatformAbstractions.dll": { - "assemblyVersion": "2.1.0.0", - "fileVersion": "2.1.0.0" - } - } - }, - "Microsoft.Extensions.Configuration/2.1.1": { - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { - "dependencies": { - "Microsoft.Extensions.Primitives": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Configuration.Binder/2.1.1": { - "dependencies": { - "Microsoft.Extensions.Configuration": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.DependencyModel/2.1.0": { - "dependencies": { - "Microsoft.DotNet.PlatformAbstractions": "2.1.0", - "Newtonsoft.Json": "9.0.1", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Linq": "4.3.0" - }, - "runtime": { - "lib/netstandard1.6/Microsoft.Extensions.DependencyModel.dll": { - "assemblyVersion": "2.1.0.0", - "fileVersion": "2.1.0.0" - } - } - }, - "Microsoft.Extensions.Logging/2.1.1": { - "dependencies": { - "Microsoft.Extensions.Configuration.Binder": "2.1.1", - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", - "Microsoft.Extensions.Logging.Abstractions": "2.1.1", - "Microsoft.Extensions.Options": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Logging.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Logging.Abstractions/2.1.1": { - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Options/2.1.1": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", - "Microsoft.Extensions.Primitives": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Options.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Primitives/2.1.1": { - "dependencies": { - "System.Memory": "4.5.1", - "System.Runtime.CompilerServices.Unsafe": "4.5.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.NETCore.App/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetHostPolicy": "2.1.5", - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "NETStandard.Library": "2.0.3", - "runtime.linux-x64.Microsoft.NETCore.App": "2.1.5" - } - }, - "Microsoft.NETCore.DotNetAppHost/2.1.5": { - "dependencies": { - "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost": "2.1.5" - } - }, - "Microsoft.NETCore.DotNetHostPolicy/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetHostResolver": "2.1.5", - "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy": "2.1.5" - } - }, - "Microsoft.NETCore.DotNetHostResolver/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetAppHost": "2.1.5", - "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver": "2.1.5" - } - }, - "Microsoft.NETCore.Platforms/2.1.1": {}, - "Microsoft.NETCore.Targets/2.0.0": {}, - "Microsoft.Win32.Primitives/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "Microsoft.Win32.Registry/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - } - }, - "MSBuild.StructuredLogger/2.0.11": { - "dependencies": { - "Microsoft.Build": "15.8.166", - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Build.Tasks.Core": "15.8.166", - "Microsoft.Build.Utilities.Core": "15.8.166" - }, - "runtime": { - "lib/netstandard2.0/StructuredLogger.dll": { - "assemblyVersion": "2.0.11.0", - "fileVersion": "2.0.11.26510" - } - } - }, - "MsBuildPipeLogger.Server/1.1.2": { - "dependencies": { - "Microsoft.Build": "15.8.166", - "NETStandard.Library": "2.0.3" - }, - "runtime": { - "lib/netstandard1.5/MsBuildPipeLogger.Server.dll": { - "assemblyVersion": "1.1.2.0", - "fileVersion": "1.1.2.0" - } - } - }, - "NETStandard.Library/2.0.3": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1" - } - }, - "Newtonsoft.Json/9.0.1": { - "dependencies": { - "Microsoft.CSharp": "4.0.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Serialization.Primitives": "4.1.1", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/Newtonsoft.Json.dll": { - "assemblyVersion": "9.0.0.0", - "fileVersion": "9.0.1.19813" - } - } - }, - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.linux-x64.Microsoft.NETCore.App/2.1.5": { - "runtime": { - "runtimes/linux-x64/lib/netcoreapp2.1/Microsoft.CSharp.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/Microsoft.VisualBasic.dll": { - "assemblyVersion": "10.0.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/Microsoft.Win32.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/Microsoft.Win32.Registry.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/SOS.NETCore.dll": { - "assemblyVersion": "1.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.AppContext.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Buffers.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.Concurrent.dll": { - "assemblyVersion": "4.0.14.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.NonGeneric.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.Specialized.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.Annotations.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.DataAnnotations.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.EventBasedAsync.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.Primitives.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.TypeConverter.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Configuration.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Console.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Core.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Data.Common.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Data.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Contracts.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Debug.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll": { - "assemblyVersion": "4.0.3.1", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.FileVersionInfo.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Process.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.StackTrace.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.TextWriterTraceListener.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Tools.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.TraceSource.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Tracing.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Drawing.Primitives.dll": { - "assemblyVersion": "4.2.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Drawing.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Dynamic.Runtime.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Globalization.Calendars.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Globalization.Extensions.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Globalization.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Compression.Brotli.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Compression.FileSystem.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Compression.ZipFile.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Compression.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.AccessControl.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.DriveInfo.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.Watcher.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.IsolatedStorage.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.MemoryMappedFiles.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Pipes.AccessControl.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Pipes.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.UnmanagedMemoryStream.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Linq.Expressions.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Linq.Parallel.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Linq.Queryable.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Linq.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Memory.dll": { - "assemblyVersion": "4.1.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Http.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.HttpListener.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Mail.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.NameResolution.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.NetworkInformation.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Ping.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Requests.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Security.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.ServicePoint.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Sockets.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebClient.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebHeaderCollection.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebProxy.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebSockets.Client.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebSockets.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Numerics.Vectors.dll": { - "assemblyVersion": "4.1.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Numerics.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.ObjectModel.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Private.DataContractSerialization.dll": { - "assemblyVersion": "4.1.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Private.Uri.dll": { - "assemblyVersion": "4.0.5.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Private.Xml.Linq.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Private.Xml.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.DispatchProxy.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Emit.ILGeneration.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Emit.Lightweight.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Emit.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Extensions.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.TypeExtensions.dll": { - "assemblyVersion": "4.1.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Resources.Reader.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Resources.ResourceManager.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Resources.Writer.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.CompilerServices.VisualC.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Extensions.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Handles.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.RuntimeInformation.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.WindowsRuntime.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Loader.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Numerics.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Formatters.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Json.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Primitives.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Xml.dll": { - "assemblyVersion": "4.1.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.AccessControl.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Claims.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Algorithms.dll": { - "assemblyVersion": "4.3.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Cng.dll": { - "assemblyVersion": "4.3.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Csp.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Encoding.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.OpenSsl.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.X509Certificates.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { - "assemblyVersion": "4.1.1.1", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Principal.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.SecureString.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.ServiceModel.Web.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.ServiceProcess.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Text.Encoding.Extensions.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Text.Encoding.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Text.RegularExpressions.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Overlapped.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Tasks.Dataflow.dll": { - "assemblyVersion": "4.6.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Tasks.Extensions.dll": { - "assemblyVersion": "4.3.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Tasks.Parallel.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Tasks.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Thread.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.ThreadPool.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Timer.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Transactions.Local.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Transactions.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.ValueTuple.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Web.HttpUtility.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Web.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Windows.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.Linq.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.ReaderWriter.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.Serialization.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XDocument.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XPath.XDocument.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XPath.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XmlDocument.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XmlSerializer.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/System.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/WindowsBase.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/mscorlib.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/linux-x64/lib/netcoreapp2.1/netstandard.dll": { - "assemblyVersion": "2.0.0.0", - "fileVersion": "0.0.0.0" - } - }, - "native": { - "runtimes/linux-x64/native/System.Globalization.Native.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/System.IO.Compression.Native.a": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/System.IO.Compression.Native.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/System.Native.a": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/System.Native.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/System.Net.Http.Native.a": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/System.Net.Http.Native.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/System.Net.Security.Native.a": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/System.Net.Security.Native.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/System.Private.CoreLib.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/System.Security.Cryptography.Native.OpenSsl.a": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/createdump": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/libclrjit.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/libcoreclr.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/libcoreclrtraceptprovider.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/libdbgshim.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/libmscordaccore.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/libmscordbi.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/libsos.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/libsosplugin.so": { - "fileVersion": "0.0.0.0" - }, - "runtimes/linux-x64/native/sosdocsunix.txt": { - "fileVersion": "0.0.0.0" - } - } - }, - "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost/2.1.5": { - "native": { - "runtimes/linux-x64/native/apphost": { - "fileVersion": "0.0.0.0" - } - } - }, - "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetHostResolver": "2.1.5" - }, - "native": { - "runtimes/linux-x64/native/libhostpolicy.so": { - "fileVersion": "0.0.0.0" - } - } - }, - "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetAppHost": "2.1.5" - }, - "native": { - "runtimes/linux-x64/native/libhostfxr.so": { - "fileVersion": "0.0.0.0" - } - } - }, - "runtime.native.System/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0" - } - }, - "runtime.native.System.IO.Compression/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0" - } - }, - "runtime.native.System.Net.Http/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0" - } - }, - "runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "dependencies": { - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" - } - }, - "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "dependencies": { - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {}, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "System.AppContext/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Buffers/4.3.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.CodeDom/4.4.0": { - "runtime": { - "lib/netstandard2.0/System.CodeDom.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.25519.3" - } - } - }, - "System.Collections/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Collections.Concurrent/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Collections.Immutable/1.5.0": { - "runtime": { - "lib/netstandard2.0/System.Collections.Immutable.dll": { - "assemblyVersion": "1.2.3.0", - "fileVersion": "4.6.26515.6" - } - } - }, - "System.Composition/1.0.31": { - "dependencies": { - "System.Composition.AttributedModel": "1.0.31", - "System.Composition.Convention": "1.0.31", - "System.Composition.Hosting": "1.0.31", - "System.Composition.Runtime": "1.0.31", - "System.Composition.TypedParts": "1.0.31" - } - }, - "System.Composition.AttributedModel/1.0.31": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.AttributedModel.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Composition.Convention/1.0.31": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Composition.AttributedModel": "1.0.31", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.Convention.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Composition.Hosting/1.0.31": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Composition.Runtime": "1.0.31", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.Hosting.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Composition.Runtime/1.0.31": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.Runtime.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Composition.TypedParts/1.0.31": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Composition.AttributedModel": "1.0.31", - "System.Composition.Hosting": "1.0.31", - "System.Composition.Runtime": "1.0.31", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.TypedParts.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Console/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.IO": "4.3.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Diagnostics.Contracts/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.Debug/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.DiagnosticSource/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Diagnostics.FileVersionInfo/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - } - }, - "System.Diagnostics.StackTrace/4.3.0": { - "dependencies": { - "System.IO.FileSystem": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.Tools/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.TraceSource/4.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0" - } - }, - "System.Diagnostics.Tracing/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Dynamic.Runtime/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Globalization/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Globalization.Calendars/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Globalization": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Globalization.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - } - }, - "System.IO/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.Compression/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Buffers": "4.3.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.IO.Compression": "4.3.0" - } - }, - "System.IO.FileSystem/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.IO": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.FileSystem.Primitives/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Linq/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Linq.Expressions/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Emit.Lightweight": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Linq.Parallel/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Memory/4.5.1": {}, - "System.Net.Http/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.DiagnosticSource": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Extensions": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Net.Primitives/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.ObjectModel/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Reflection/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit/4.3.0": { - "dependencies": { - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit.ILGeneration/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit.Lightweight/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Metadata/1.6.0": { - "runtime": { - "lib/netstandard2.0/System.Reflection.Metadata.dll": { - "assemblyVersion": "1.4.3.0", - "fileVersion": "4.6.26515.6" - } - } - }, - "System.Reflection.Primitives/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.TypeExtensions/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.ResourceManager/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.Writer/4.0.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Runtime/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0" - } - }, - "System.Runtime.CompilerServices.Unsafe/4.5.1": { - "runtime": { - "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" - } - } - }, - "System.Runtime.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.Handles/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.InteropServices/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0" - } - }, - "System.Runtime.Loader/4.0.0": { - "dependencies": { - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.Numerics/4.3.0": { - "dependencies": { - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Runtime.Serialization.Primitives/4.1.1": { - "dependencies": { - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Security.Claims/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Security.Principal": "4.3.0" - } - }, - "System.Security.Cryptography.Algorithms/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.Apple": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Cng/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Security.Cryptography.Csp/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Security.Cryptography.Encoding/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.OpenSsl/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Primitives/4.3.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Security.Cryptography.X509Certificates/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Calendars": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Cng": "4.3.0", - "System.Security.Cryptography.Csp": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Principal/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Security.Principal.Windows/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.Win32.Primitives": "4.3.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Claims": "4.3.0", - "System.Security.Principal": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Text.Encoding/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Text.Encoding.CodePages/4.4.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/System.Text.Encoding.CodePages.dll": { - "assemblyVersion": "4.1.0.0", - "fileVersion": "4.6.25519.3" - } - } - }, - "System.Text.Encoding.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Text.RegularExpressions/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Threading/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Threading.Tasks.Dataflow/4.6.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks.Extensions/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks.Parallel/4.3.0": { - "dependencies": { - "System.Collections.Concurrent": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Thread/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.ValueTuple/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Xml.ReaderWriter/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0" - } - }, - "System.Xml.XDocument/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XmlDocument/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XPath/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XPath.XDocument/4.3.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0", - "System.Xml.XPath": "4.3.0" - } - } - } - }, - "libraries": { - "mpc/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "Buildalyzer/2.2.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-5nO0Lkv0zcB5Ck8AaO9eXnRbAfVAB45QQ0ZGCAfPwRxqlqn7WFkn6ESL8EWD8jgTdodtIE8KpZFXm8zb1jIYBw==", - "path": "buildalyzer/2.2.0", - "hashPath": "buildalyzer.2.2.0.nupkg.sha512" - }, - "Buildalyzer.Logger/2.2.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-490kgGa+07Jwdsq0jqxUSG2QjVg65MJHMEI1/D/7pOjNY4/Zc5DJTKxuL1eJUFf+rzB7NtZKDV0IGABlH8Ihmw==", - "path": "buildalyzer.logger/2.2.0", - "hashPath": "buildalyzer.logger.2.2.0.nupkg.sha512" - }, - "Buildalyzer.Workspaces/2.2.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-iItCd3jnCUCXryBbWPpRqzPco2vqWobEAoyXelVSfQ+xkZmEwRGYtjjxa+14qo9sNve/a+LTeYknWG/dyRIQOg==", - "path": "buildalyzer.workspaces/2.2.0", - "hashPath": "buildalyzer.workspaces.2.2.0.nupkg.sha512" - }, - "Microsoft.Build/15.8.166": { - "type": "package", - "serviceable": true, - "sha512": "sha512-MH3/LhMZZEAkWyMxUkRmNoMqO4A4XhXz7c1OywTKs9n0bvrCPD4S5k7p0YfyEpSY4JVIzbUFvHCR/uaFXtACEA==", - "path": "microsoft.build/15.8.166", - "hashPath": "microsoft.build.15.8.166.nupkg.sha512" - }, - "Microsoft.Build.Framework/15.8.166": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Bw7ebVvOQQC5zgM0AsyZFB23aJvEISa1vABkWCgjGueopq+fG6JDhwHeAXloLcwtQldvDobivLDFw6/8QDN9cg==", - "path": "microsoft.build.framework/15.8.166", - "hashPath": "microsoft.build.framework.15.8.166.nupkg.sha512" - }, - "Microsoft.Build.Tasks.Core/15.8.166": { - "type": "package", - "serviceable": true, - "sha512": "sha512-NCTTEPkSUkxE7dZiVfnaSzjEMs7AiQYJ9hVHzGyreQzZFrR9fajwBc2KAjjH3pS8nBcx/rmjH9T0b5ZMOJviEw==", - "path": "microsoft.build.tasks.core/15.8.166", - "hashPath": "microsoft.build.tasks.core.15.8.166.nupkg.sha512" - }, - "Microsoft.Build.Utilities.Core/15.8.166": { - "type": "package", - "serviceable": true, - "sha512": "sha512-AZ7pSCGDeRlBm3TIOrnSOCWB2+Wea4rL7sMsinyChF3NJUAb//lF0fUyZfjbukE5eCqba17gw0FnbMjnNgtecw==", - "path": "microsoft.build.utilities.core/15.8.166", - "hashPath": "microsoft.build.utilities.core.15.8.166.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.Analyzers/2.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-x9MfOXfTj/tdgm3rV15niL/J0T36ZPiVrIfO3Tax9Lv4fLGnVZJXSQatZezJ+tX+YYk2ZAPbq87vnSFwh1Je9w==", - "path": "microsoft.codeanalysis.analyzers/2.6.1", - "hashPath": "microsoft.codeanalysis.analyzers.2.6.1.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.Common/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-gWTphgR8eHu39XcrfhxE8WwD35C/vaR06QiKM1TaCbjmgPafZ9G3TY7eeT44BfHVMQEGYZmjV5NZNQLm2F7ZTQ==", - "path": "microsoft.codeanalysis.common/2.9.0", - "hashPath": "microsoft.codeanalysis.common.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.CSharp/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-RNACUadFXlT3/Y4XIVI1+g3hpGgToYJyVTRBVFmhE8gtRA2snM5dPKv2e4Qz7K/3Ap7Ky+YgIKCO4YsmWqal/A==", - "path": "microsoft.codeanalysis.csharp/2.9.0", - "hashPath": "microsoft.codeanalysis.csharp.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Kis5VedBJjtdlYlI9erCAnqz2fVgRWLHCDYMIKRXsD4CVWrwrm8sCq3qmY9Drmit85StquRPFw5z8YMhDCB7RQ==", - "path": "microsoft.codeanalysis.csharp.workspaces/2.9.0", - "hashPath": "microsoft.codeanalysis.csharp.workspaces.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4nxVFgxywDHttOSLh9z36QGUdsTFz80A/M+qc2bgZ3GBuTR9+FeDPIap8DQrBcDZWO1Kb+0QC6b65jZvgcZP5g==", - "path": "microsoft.codeanalysis.visualbasic/2.9.0", - "hashPath": "microsoft.codeanalysis.visualbasic.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-dL9+IJPk7mZ9LFY0saaXk1adKbEDhHe+U+1fG4F7o4NsvZqcOS/6sRcEWl253gi2ZoFoonDDB3sffhrlg1ITIQ==", - "path": "microsoft.codeanalysis.visualbasic.workspaces/2.9.0", - "hashPath": "microsoft.codeanalysis.visualbasic.workspaces.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-KGkaumh6O0gS0RBWHHIfx34u5sm7vhgTDaFOcKm60tELh6Jy6OYNtdB/Iyefvvwb+PaZIcUg+9hbGBQ1GdCHqA==", - "path": "microsoft.codeanalysis.workspaces.common/2.9.0", - "hashPath": "microsoft.codeanalysis.workspaces.common.2.9.0.nupkg.sha512" - }, - "Microsoft.CSharp/4.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CLd4nvEjFlopxG7O6y4d2h46ZP+pfBw0cT/7WuZpMYduIthUO8dEJzfq8l+WJm8nOEg3LJcdKu8KG8N28vomBA==", - "path": "microsoft.csharp/4.0.1", - "hashPath": "microsoft.csharp.4.0.1.nupkg.sha512" - }, - "Microsoft.DotNet.PlatformAbstractions/2.1.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ae/c3pX6vhCs17caUrVZrb8n9gDTzr6usnZKZEHla7uy7ZcjQLfm09gS7m+IneVtmGwXm5hcSDa5qwqwLaH2Ug==", - "path": "microsoft.dotnet.platformabstractions/2.1.0", - "hashPath": "microsoft.dotnet.platformabstractions.2.1.0.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-1JaydycXzbfAExlsD7XIWykzVnU/wZM86KzrHyGlXuxqnqzcWSXLJn4Ejn8bDnq07CEJNZ+GjsxWKlJ8kFfnvQ==", - "path": "microsoft.extensions.configuration/2.1.1", - "hashPath": "microsoft.extensions.configuration.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-9EMhOWU2eOQOtMIJ+vfwKJpnLRc1Wl3vXu8qXeevA91cSY4j3WvArmF7ApGtJwa7yKewJTvlQlBSn9OSnLFg6Q==", - "path": "microsoft.extensions.configuration.abstractions/2.1.1", - "hashPath": "microsoft.extensions.configuration.abstractions.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.Binder/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-t7KFAv6AxyUsZj9QN8FAbusg+X5baCELl+XtscyuP1IGUv5UctyY7/rNZLyiKaV7HhAcDQ1zC5ZQNQQFn6JpAA==", - "path": "microsoft.extensions.configuration.binder/2.1.1", - "hashPath": "microsoft.extensions.configuration.binder.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PW1596sF97gpIc1JuUuYvTmeLfeqC5whbWPsWgJhN0fdwz683him3b/HB0dqhFesVssOjnnA0fEz4+S0gUeBqA==", - "path": "microsoft.extensions.dependencyinjection.abstractions/2.1.1", - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyModel/2.1.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3KPT6CLH0VEGr2um9aG1rYTmqfMVlkRuueFpN6AxeIKpcMA4OVHf4aNpgYXZ6oF+x4uh9VhK/66FgPCd1mMlnQ==", - "path": "microsoft.extensions.dependencymodel/2.1.0", - "hashPath": "microsoft.extensions.dependencymodel.2.1.0.nupkg.sha512" - }, - "Microsoft.Extensions.Logging/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-x4/RzeReQSIi4nVpOjXEySm/xUSr6lBjuecdYnlUboWxbLSm2j3vhFV5OLGRp3gfte3cRMdysMNa/wyZN0t/Tw==", - "path": "microsoft.extensions.logging/2.1.1", - "hashPath": "microsoft.extensions.logging.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Logging.Abstractions/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QWFWKrdeoDSEr8nVJaBAVDMj24wnh9clGzDNmMdgHHRsOIwTUMeh4XljeZXJhIKPT00jWuzwEzn3uNxOtO4cYg==", - "path": "microsoft.extensions.logging.abstractions/2.1.1", - "hashPath": "microsoft.extensions.logging.abstractions.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Options/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-j0zOfTt1Qm+JDW2m+6Q/aj1m4C8+onudUu4ls/fN69VxruZkMWmX1bPKkbkYIPNNxJsf4k7FOkVq5o1vEFq9pQ==", - "path": "microsoft.extensions.options/2.1.1", - "hashPath": "microsoft.extensions.options.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Primitives/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Svz25/egj1TsNL4118jyMqkhDiu0l8QYWq2p52P4BBN0GbqwR18ZRIctSP5TTDJy0m0EFC8aB2FOVjGtvEGWSA==", - "path": "microsoft.extensions.primitives/2.1.1", - "hashPath": "microsoft.extensions.primitives.2.1.1.nupkg.sha512" - }, - "Microsoft.NETCore.App/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-oTQd5w0qQp32QSKPE6TqhhcybkkTKqtn4YVnNsYHwFR28s1kUAI/xg+hmKwF/G+u4vUjgy7Y7ghC0cIwRP5wdg==", - "path": "microsoft.netcore.app/2.1.5", - "hashPath": "microsoft.netcore.app.2.1.5.nupkg.sha512" - }, - "Microsoft.NETCore.DotNetAppHost/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ir7AI1ywRriX1fLTLYOyiDTYSj+zpdAfTBFH0dLwvLvC8obU0EYnmrjTzbYJ8GSnza1H1Rv3Lo/lJBSccmTGMA==", - "path": "microsoft.netcore.dotnetapphost/2.1.5", - "hashPath": "microsoft.netcore.dotnetapphost.2.1.5.nupkg.sha512" - }, - "Microsoft.NETCore.DotNetHostPolicy/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fkTeZ7G1Tf0aT+P1bMyn/qJXByFIaATNAt0DKrZ3nC7jMRAWBHJifOrOe5XnGvvc0YzqVLmHARYtzSG00/9NVw==", - "path": "microsoft.netcore.dotnethostpolicy/2.1.5", - "hashPath": "microsoft.netcore.dotnethostpolicy.2.1.5.nupkg.sha512" - }, - "Microsoft.NETCore.DotNetHostResolver/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/rPHOsRWubviDEGlxQcNKtJ7G6ML0F/Pg5vG1E+lgfdmoyLRKqrE3ZjVlYCxS18ExZGekBq9LEVb+eOKMxlJEA==", - "path": "microsoft.netcore.dotnethostresolver/2.1.5", - "hashPath": "microsoft.netcore.dotnethostresolver.2.1.5.nupkg.sha512" - }, - "Microsoft.NETCore.Platforms/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-iXcQc19h5oECLVokgt6hvLOOPP/d9kYQh9miF9zbcxGVZenuTN9IMB+f+gP26/+Rc5r2KLES5Of45Qdqo0NJeA==", - "path": "microsoft.netcore.platforms/2.1.1", - "hashPath": "microsoft.netcore.platforms.2.1.1.nupkg.sha512" - }, - "Microsoft.NETCore.Targets/2.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-mJnCMoBfWL0lxxlBFJ/8cZKTfPpI82TekZkUqvSCBtunUaaqr2LVeWl1zQYdanAdk4Ddf1HCwb8+DNYaNFBk1w==", - "path": "microsoft.netcore.targets/2.0.0", - "hashPath": "microsoft.netcore.targets.2.0.0.nupkg.sha512" - }, - "Microsoft.Win32.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-d2YDDsTDnU/+ERiLxkHMviiQlclT6/G2iddWPPH4xLbS0P0+RYcqOZxqauVHX6s3Uv2cUkL226qXKpfn/fL98Q==", - "path": "microsoft.win32.primitives/4.3.0", - "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512" - }, - "Microsoft.Win32.Registry/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-OHAvcu6tVh40PncTYFkpLItsw9O8sUc59C4eqSqEd+U5rY7t0+u7Xoi6Mw2QOfvPJ2HUJlwIEVqxklDIfn757Q==", - "path": "microsoft.win32.registry/4.3.0", - "hashPath": "microsoft.win32.registry.4.3.0.nupkg.sha512" - }, - "MSBuild.StructuredLogger/2.0.11": { - "type": "package", - "serviceable": true, - "sha512": "sha512-LYK6MOfPUEE/u10OepnvFOjFy12YWOjtXXIh3K0RtUzdjatIHZSAjU8MKPuGcegi06iblNH2Rlc78vc2AVokhg==", - "path": "msbuild.structuredlogger/2.0.11", - "hashPath": "msbuild.structuredlogger.2.0.11.nupkg.sha512" - }, - "MsBuildPipeLogger.Server/1.1.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4gxSIkc4mMpHemehqDAZzGdKAhGJAxyt+56SUi6B4X2FWijojXzcIr7illkuEA7Ex05eoa5Cx4pr6d1hn4m8lg==", - "path": "msbuildpipelogger.server/1.1.2", - "hashPath": "msbuildpipelogger.server.1.1.2.nupkg.sha512" - }, - "NETStandard.Library/2.0.3": { - "type": "package", - "serviceable": true, - "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", - "path": "netstandard.library/2.0.3", - "hashPath": "netstandard.library.2.0.3.nupkg.sha512" - }, - "Newtonsoft.Json/9.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", - "path": "newtonsoft.json/9.0.1", - "hashPath": "newtonsoft.json.9.0.1.nupkg.sha512" - }, - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-+HIVh+8SOZS56Hqm/5wKUEAiz3BgjQRTQ6OG4K3FwSXT3JckhZbH4A/Xdwb7Z/GPQW4HocnFbq5CSuVXwy6ylg==", - "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-tRFXi8EvFI+yB0DBDu52piUGKBlNebhT1swNbiTvUeZnkCuabY41eJnQaHESk1PGTiHs0Lh2FSwZYG5cUCnrrw==", - "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-DPnni2nk3x2Iz/6Do1tme5F8sM4Jo5xUNsHJxlRJ686v/WcFeuTR8r72Bwr/8iJxRJepn/ke/XLHphnWme1OpQ==", - "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.linux-x64.Microsoft.NETCore.App/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-M8TIs0nh7paefSmhxCWmirqNYODnFea0qj6c6ybURb3pSiWYhlwHOZKEDFCM9/DLSMGn2brqAuoNDktrvdIneQ==", - "path": "runtime.linux-x64.microsoft.netcore.app/2.1.5", - "hashPath": "runtime.linux-x64.microsoft.netcore.app.2.1.5.nupkg.sha512" - }, - "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-KFs8THSZ8wxXeJ46l1QVOQurYBcdGXHa6Y3avZZ2PyahWOK0RRqacRwxx0X2vDr1yT921PzRF6DZw3/RmZh2VQ==", - "path": "runtime.linux-x64.microsoft.netcore.dotnetapphost/2.1.5", - "hashPath": "runtime.linux-x64.microsoft.netcore.dotnetapphost.2.1.5.nupkg.sha512" - }, - "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Lg1HHUwiD988XlYQYM0YY6MtrsFmWEjJEgH0KUojP4QUFOvR2p2yAWtsnD/5oQTpeqUjCvg8qz3Sa2XHebBe5g==", - "path": "runtime.linux-x64.microsoft.netcore.dotnethostpolicy/2.1.5", - "hashPath": "runtime.linux-x64.microsoft.netcore.dotnethostpolicy.2.1.5.nupkg.sha512" - }, - "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-oU5ciqaPf3XAaT4Iqyzj1VBncrEKGSNzn0Ore/jBiVy0lmKB1MSJr5uHtn0jTJbGjiXKzgQseBa70Ss3PQ50Mg==", - "path": "runtime.linux-x64.microsoft.netcore.dotnethostresolver/2.1.5", - "hashPath": "runtime.linux-x64.microsoft.netcore.dotnethostresolver.2.1.5.nupkg.sha512" - }, - "runtime.native.System/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-6l0Dkix8bgJVwfFQg1yPNBa3J3hmOdSuZLYI06QlheipqU0hT2XCfN8otCPhD4M2Aq+Xhy1B5+9Jr9WWhfdusw==", - "path": "runtime.native.system/4.3.0", - "hashPath": "runtime.native.system.4.3.0.nupkg.sha512" - }, - "runtime.native.System.IO.Compression/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-FBMFTXHy9kGuYs/bj62XyVrQB44HZcZ1fTj3Iv04eFGVcg65vac5o9Rv3hdYqNPmWK/DVgLUV8aeeTzcaqB5hg==", - "path": "runtime.native.system.io.compression/4.3.0", - "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" - }, - "runtime.native.System.Net.Http/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-g8FnRWqvKQwR0pjrB9bG1cLGSR4EFAu+7U34Q+ptucNLvBfWEAWcm54vrZCMAT6H9VU6VfDruGHA4nc1gu1i2w==", - "path": "runtime.native.system.net.http/4.3.0", - "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512" - }, - "runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-cgjvRwk6uDocZbujiZcZ90OYnErFqpN26H56Xfe8nnZIvErpRHe0RxP16DsLzY5dBuVqChNb+hLN7R8ixk1xVg==", - "path": "runtime.native.system.security.cryptography.apple/4.3.0", - "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" - }, - "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-uvqanMQDxKS+7ADCRVzNqoa9IQuxuBOVrtWvNNuNyNe/Gb03SxR9QgoRKKvIrvwMUGrudNDhrEITDRGWLIXqGA==", - "path": "runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-6uH/bLrHHChHf1v+ZZCnVjKiaeCFOjd7RUBG4/MqBBRheByueBEGTvPrv2hSrpxPrwYZuNACAmYanbB7MtcflA==", - "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7fcf887lmwAHbWfCeQUVA/A8PaEkj0nwYDqUlytKP78+BJUjbVWTJqjFkM+jBeTCOElrt1RzrH0Hil+1tNLVBw==", - "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fuh5u2mOjEjHx2bQHHZTryMCWNOY9N7I0rCN3KldGRU6brnMOuZRTB3uh6AYK/9eioywbNerYDZAL6M3C4c7MQ==", - "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", - "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-W3mGmFCN5ei6jegKyBX8eMB+OEMAzcYvZBCocfrwOBMBsyv0YB9XuxZ9xxqsQJ71T4LGImi8+A8ntNkdwk4OhQ==", - "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-nwK59n0Ink7MhkZKGxzAOdbxniOBQEbfV3fqvE0Q/AcuenNkdNlu6fbeeGWVzJWeliFIgzk1Rp/hCR/aAbs32g==", - "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fSj8+HzPXcEnBA+svDivS1/dhfwhG1LgQvyN7Jxvaqt97aMfGC1mdlMVUEoS+5awAHIZtmi8GZWtq+rXK5zaUw==", - "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-xtUCr/NeowVrQ3e8uWRzppefx6yBvXYPKoHYjFaZKyO6HVZ7yFd7PM6P/QwAKejYRnlZElOL01lz5arTfKNeDA==", - "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Zja3A4KNQzxx07aAwgNoD55qGAntIwaRruMdRZaUNo2PB8czzPJE9GMFR/6im2rMoriWfxR+G90gXdQUx7v8KQ==", - "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "System.AppContext/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-uEIyp9GUT2U5UD4KjUU2bIdmBFuRXGn0VeAbWZvqqfSdXfyADZQnmfCVxc18BbXpr4Axum0MY/gtQhiWroNcNw==", - "path": "system.appcontext/4.3.0", - "hashPath": "system.appcontext.4.3.0.nupkg.sha512" - }, - "System.Buffers/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Mm9RDuBQ6CIi0BP75sMq0boRBmztwc1MGfHSoeXdoOyJnyvG6Dri9GE1mNebbVWEkxNRe4CbXHTJYyKq/3WEmQ==", - "path": "system.buffers/4.3.0", - "hashPath": "system.buffers.4.3.0.nupkg.sha512" - }, - "System.CodeDom/4.4.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-E/lvSfMFPtNflAgdM6AuPU8JbZdqdSoGpU66G7SrduCqdrFyPflaqqV4gN2d0hrCBpu92HaoqpUP5d+g9Itcxw==", - "path": "system.codedom/4.4.0", - "hashPath": "system.codedom.4.4.0.nupkg.sha512" - }, - "System.Collections/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/RO6DxDIzcceka4RmnJ6P8anXxdkmdRGKpliRZKVB84y4LzpqMMWTLAGRQXLc5ET15z1Xr7YaNZx1rbWuqRVcg==", - "path": "system.collections/4.3.0", - "hashPath": "system.collections.4.3.0.nupkg.sha512" - }, - "System.Collections.Concurrent/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fu4SvisargPpI4z2+69ocBNmQLS98WyvsA1dP35c2dxRJnEd/+cSmGnv/GSNxbIs7wtveGB8tzFLYABPFkX7Kg==", - "path": "system.collections.concurrent/4.3.0", - "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" - }, - "System.Collections.Immutable/1.5.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-erLSnZLBCA8EKIE2bKtXynjWBWSoMlmCFrOOYN+sPKCeYd3oGj9h8hqRPODtsRlPANkOW7L8tEQlEadHbUXC6A==", - "path": "system.collections.immutable/1.5.0", - "hashPath": "system.collections.immutable.1.5.0.nupkg.sha512" - }, - "System.Composition/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CbzwbjxT04VU+JzQuPOYfUCybzBtbGZdqGJS9482dDBoBHbt3Zz0QAJ/Cjzpmq5xdL+hhW4FYWf/3wq2OCVXgg==", - "path": "system.composition/1.0.31", - "hashPath": "system.composition.1.0.31.nupkg.sha512" - }, - "System.Composition.AttributedModel/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-rhZeg+i71Q0MZjYIdIpyfzKM7E9EsvytXxq+CaZ/vWCV09ZfMnb0MOEkfM4wfKhTo7Xoo3TJkkfTLx8kUCltkg==", - "path": "system.composition.attributedmodel/1.0.31", - "hashPath": "system.composition.attributedmodel.1.0.31.nupkg.sha512" - }, - "System.Composition.Convention/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-9GFJIdwg0zr8s2KHVVgVikYfPJ/KntH1D79Z7VzCovUZwDNNq66MMKkLJIOCztXsgDdgYKOp3BAYASRS9EvYGw==", - "path": "system.composition.convention/1.0.31", - "hashPath": "system.composition.convention.1.0.31.nupkg.sha512" - }, - "System.Composition.Hosting/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-KlZ4qkaa1p/U2WKr353XeQ9bjrxBwn9FcD5k9WFEuV1MloDMnTnhUwQU7h1WigvsCYykzoRdnDLq33wnUPwBeg==", - "path": "system.composition.hosting/1.0.31", - "hashPath": "system.composition.hosting.1.0.31.nupkg.sha512" - }, - "System.Composition.Runtime/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-iZH3/g2js6fmV3atN2Ym/o+dM2ZMA1GA0GXc70nhbIqK67L29Lh3YrAWiBlyoOIUjNEggA6L4i++7PSID2wMdQ==", - "path": "system.composition.runtime/1.0.31", - "hashPath": "system.composition.runtime.1.0.31.nupkg.sha512" - }, - "System.Composition.TypedParts/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-H6fLWxFy+cy+YsHRcvUBskvDYkpDdUJky+GkqYvi8B/5cm/KIQ5QVDOLKuul4PHFZ/x0yRacS8CpY3x/PxiBeA==", - "path": "system.composition.typedparts/1.0.31", - "hashPath": "system.composition.typedparts.1.0.31.nupkg.sha512" - }, - "System.Console/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-NXaPmAD2UQOwcXA0CdsTCi1g/BUmuxwwGok2guCrS/pLpAv79v5TQLWYPnUoysNbn3p8v1WLguJHLMa782C5Yw==", - "path": "system.console/4.3.0", - "hashPath": "system.console.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.Contracts/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-clL6acqvIbbx3JYunlkrWV5sP9qGd0sLl612eXrBVVwakTTlMNtvZB5RiC2rU2uYxSnIt2ssUQgA2adrYSqYhA==", - "path": "system.diagnostics.contracts/4.3.0", - "hashPath": "system.diagnostics.contracts.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.Debug/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-j3oXzv/QxCZcBxSIzreks9gAMenRyZTvSntLbDYGWczEhLQX4Ob3ajnXpAC9IXymWI+N4AFV7/pXLPwn+2ItAA==", - "path": "system.diagnostics.debug/4.3.0", - "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.DiagnosticSource/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-wu5+BNFredYlzZEmih3pMlR0ekaWCd9KZ8MPWqIQ4KVKo+RpzuhsIAfteI5OYQ2zSVzg1uOfQBrJ8KFkz+XfRQ==", - "path": "system.diagnostics.diagnosticsource/4.3.0", - "hashPath": "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.FileVersionInfo/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-OEshwk5wkdxtGkFZYSErv6dnUuz0z8C01htylGwOwFnCVFRcrvleBtplMDCk9nMyWP41cbMZGEIBfy7HV1Loug==", - "path": "system.diagnostics.fileversioninfo/4.3.0", - "hashPath": "system.diagnostics.fileversioninfo.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.StackTrace/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-BZY9Q0RiOSp/hp13jXe97aVOgPDzlqOdYdixs5fl/e3K/vz1SoJYDddY8CPE3wH9m043tJ65L8i+WMiPzGxdtQ==", - "path": "system.diagnostics.stacktrace/4.3.0", - "hashPath": "system.diagnostics.stacktrace.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.Tools/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7gcA6FsKiySf+s9PeyenhSuUmxbxrpEDZ+/UcZBUbIu92JR804efdbIy4bEYcHg1htFbhxewu8vIV5pWYhc2Sg==", - "path": "system.diagnostics.tools/4.3.0", - "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.TraceSource/4.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-bGUeY5wiCHYSWbYZS3QjbaQ1hNoJ1RQBQMB3E0Cgh6AH//4rXfXIOHKIW46HDOsTEDoNfvFNDXphL5W5B/XMwQ==", - "path": "system.diagnostics.tracesource/4.0.0", - "hashPath": "system.diagnostics.tracesource.4.0.0.nupkg.sha512" - }, - "System.Diagnostics.Tracing/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7IXKSUQm7wC+beoAINYrIqawpecwtyiM5NKv96whUmWOvg2vPn60WYqLopKbWu3GSPCH/ZJxAiHrS7tYlhb5Dg==", - "path": "system.diagnostics.tracing/4.3.0", - "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" - }, - "System.Dynamic.Runtime/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PyiPySIERuk05CtVuHEQOijQChY4L77ZcUe+fee7lyZxPbU/hlduSfUIXw8XF/T+R1jOIDoOZXEQ+ZoFEgOzYQ==", - "path": "system.dynamic.runtime/4.3.0", - "hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512" - }, - "System.Globalization/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Gp7Z/4kR92caisVDNbXXYdGYZuAECXZGIaG7kAOs3cEM3zVMp078Yn3qVRGzUidYSYEAauQ0hx7mbXEmuimhYA==", - "path": "system.globalization/4.3.0", - "hashPath": "system.globalization.4.3.0.nupkg.sha512" - }, - "System.Globalization.Calendars/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-cr50CLRa9Egfe0Cg2aQPrnLqDpcE794AKTmpgiTIZpz+3N7lN+5yGtNUhTrUbMeSZycoFHTGIEArIlv8J2aX/A==", - "path": "system.globalization.calendars/4.3.0", - "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512" - }, - "System.Globalization.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4OvZWmZyTOaSygNnIdnu/p0zvu+HU9WnoZshyo3wzU5lLqiVa1pli0iY/VegQoJ7NPk5hd0RVxU+XrSOr5aauw==", - "path": "system.globalization.extensions/4.3.0", - "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" - }, - "System.IO/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Ep3xyKDltu0EsCk1BvoWBC7NltwFqRlYCjwKTV7+d4sAH0lVk5P3Q2XydNm6dYxUJZdUgmBLf52F3pAwzKIJBg==", - "path": "system.io/4.3.0", - "hashPath": "system.io.4.3.0.nupkg.sha512" - }, - "System.IO.Compression/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-RTb1FGyGEZkNrxrFee3FZsMJSmK6Lmxaef2mHdK23qn9IxlEZbeK14hb0KPNM8k6QzzU+kqR1rTD8bYopx6fYQ==", - "path": "system.io.compression/4.3.0", - "hashPath": "system.io.compression.4.3.0.nupkg.sha512" - }, - "System.IO.FileSystem/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4mTkw3zbrqvWAMLqgMxr4lg2ggjcCPAhJqRSKy+ZhrPlXztqYAKf7d5sDDJmCkZjNJxsM/k9ZvlQZR6/zUCihQ==", - "path": "system.io.filesystem/4.3.0", - "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" - }, - "System.IO.FileSystem.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-l8suI9sMTsWzpZraleWE3z1KQqTCqBITJJmeT0AVj6Kk6EWLv9iKDb47O8zBktZqWAxEF1nvUnwhevYW9DToPQ==", - "path": "system.io.filesystem.primitives/4.3.0", - "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" - }, - "System.Linq/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4GusFyZYZE8W5IX9MjqCzucdLArml/j5zxVw2R0VS+JhrTaibL6M2SQSi7lIpGwwBuxU1Dwe2Sx1putAQ5d2BQ==", - "path": "system.linq/4.3.0", - "hashPath": "system.linq.4.3.0.nupkg.sha512" - }, - "System.Linq.Expressions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-jlZ1AKYgns90hbPp83uM5SQCWRrqLZWHS3q33zeMlAdKfQ4+KT4VVbWmgWqh6nVw7pB/7dXiR8TjHUPcXwIEKA==", - "path": "system.linq.expressions/4.3.0", - "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" - }, - "System.Linq.Parallel/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-td7x21K8LalpjTWCzW/nQboQIFbq9i0r+PCyBBCdLWWnm4NBcdN18vpz/G9hCpUaCIfRL+ZxJNVTywlNlB1aLQ==", - "path": "system.linq.parallel/4.3.0", - "hashPath": "system.linq.parallel.4.3.0.nupkg.sha512" - }, - "System.Memory/4.5.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-oonnLQPZAGD21qtNMG4EtVmbYOInk2jV7M+g108B6OHOb67ZOaWnA/K8P5oQ6uK9wxKzB1iEXSChQOi2scKOqA==", - "path": "system.memory/4.5.1", - "hashPath": "system.memory.4.5.1.nupkg.sha512" - }, - "System.Net.Http/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Z1UfSF6dlpCdZdxh6LeoGlYH+q6ptG/iiIWgUUeKhE3DbQACmZkU7Sz2nOX0qdHjz72MOdYRbkSJ5Qwl6sZgvg==", - "path": "system.net.http/4.3.0", - "hashPath": "system.net.http.4.3.0.nupkg.sha512" - }, - "System.Net.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-zpJLsVc5gRgTZR1QEi0H3s0bV26t7yug0WcersFr/pVqDvEBiqQm6z3YjYtWkVlMJ65ko1sSvGW5WXqaykOQ+g==", - "path": "system.net.primitives/4.3.0", - "hashPath": "system.net.primitives.4.3.0.nupkg.sha512" - }, - "System.ObjectModel/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-jeoLKRPL6N8492mNbyrUFhMkEEFb4ihgZmIuAXqv7lxkWQjzs+UqBPDKqmS2gQfFAUO2wXaaZPVEcKUfhETR2w==", - "path": "system.objectmodel/4.3.0", - "hashPath": "system.objectmodel.4.3.0.nupkg.sha512" - }, - "System.Reflection/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-DyOo4oJzP4JDP+GmJmZRTUoMN1T7MDlQLCgptPKJ5oB9AhRZ/RDIhAw0XrLAC6BpBxSPWk+fv6rMzfZcYPIjyQ==", - "path": "system.reflection/4.3.0", - "hashPath": "system.reflection.4.3.0.nupkg.sha512" - }, - "System.Reflection.Emit/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/rKEzbnRq6H1LUkLmlqT6YaD8S625rZIuK+EQvBwfdHjJbLni0c9SP0XSM2gv1Khnn9ehU5MSz/WmH7gwt2QGQ==", - "path": "system.reflection.emit/4.3.0", - "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" - }, - "System.Reflection.Emit.ILGeneration/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-popK0u8UUkrlKadna04k1polWd1mdATZeKu/Qd0jiMZf4NTZ/GFzwpuuyTxYgUaPtqS2gJZ8rVkBWfYS4IdDQQ==", - "path": "system.reflection.emit.ilgeneration/4.3.0", - "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" - }, - "System.Reflection.Emit.Lightweight/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-TCmTVOvOkWf7QNHMuzbfSD1y7hO0PNhFfTGLzKAJYkh7Ta+lUX2pb+Rrnx/i3Ism6H2qCDzagRbnsluJQ1U0Kw==", - "path": "system.reflection.emit.lightweight/4.3.0", - "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" - }, - "System.Reflection.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-VaItSJxypiIW7jglQPcywfByp9jLFkfGE6kZG17ft/q7xnFuS6GcDL/pPvnBqHpC0f0NCPV4utazuQ225DrxQg==", - "path": "system.reflection.extensions/4.3.0", - "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" - }, - "System.Reflection.Metadata/1.6.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-sARURAx/ZV3f3lL/40TG9y2Wqk60DXUlvzowM5oYeHlcpuEMIxoKnDBhNwBzwRs3i+vWUwIbU7Kk/+mG+hzckA==", - "path": "system.reflection.metadata/1.6.0", - "hashPath": "system.reflection.metadata.1.6.0.nupkg.sha512" - }, - "System.Reflection.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-6j+W57PZnjErWr1OBi7ORmwBBLycDB4N9aEOBKHAHXF/9sLOA30IQkqyOWGUUbQUgjHZwuZSVtgaUzW8wIbFTg==", - "path": "system.reflection.primitives/4.3.0", - "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" - }, - "System.Reflection.TypeExtensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-O0FhlnCiyHTpu0WBl5/0bbWvJpLjLdUNkDomPCaZP4baItazJDHl7666HrWQ1LB9iv5Wt36g08eZrlUB/JXNvw==", - "path": "system.reflection.typeextensions/4.3.0", - "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" - }, - "System.Resources.ResourceManager/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-u8AA+wa4EtOtkOf7OqxYryXnZ2zwv83qP1Dfnv3ZoA1k9Gx0HR/ERccyc1/HBpjbIdrcsyTVHivNQSYlGwGT8A==", - "path": "system.resources.resourcemanager/4.3.0", - "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" - }, - "System.Resources.Writer/4.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-mGgwPBXGTqnw6lQeRI24ChoyPViWx36MVfN6Ys1ceLJMTQDMHcoLiMHOzSvA7ZgjX2tWBy8nfjzlN1kDL/G1gQ==", - "path": "system.resources.writer/4.0.0", - "hashPath": "system.resources.writer.4.0.0.nupkg.sha512" - }, - "System.Runtime/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-wLlTiM4b/Un90BM6s3voqYybZEGra4WiIaXfTeB9kVPZr6QDP97xjG+rZYzdP2jiuQnij1bA8q4PzmrY6l5QTw==", - "path": "system.runtime/4.3.0", - "hashPath": "system.runtime.4.3.0.nupkg.sha512" - }, - "System.Runtime.CompilerServices.Unsafe/4.5.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-qUJMNWhbm9oZ3XaMFiEMiYmRPszbnXIkRIi7+4b2Md2xZ6JUOepf0/kY3S85qistRohl9OdMe4PsO+RdG2kTIQ==", - "path": "system.runtime.compilerservices.unsafe/4.5.1", - "hashPath": "system.runtime.compilerservices.unsafe.4.5.1.nupkg.sha512" - }, - "System.Runtime.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Xz+DgcN+a9LcFJJ9uir7Za7hAye4Hon6CxufXiVkfoQ9IQLn1w0NGr7kuwosXFJ892JA8zNTx7QWjRc9qrmN3w==", - "path": "system.runtime.extensions/4.3.0", - "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" - }, - "System.Runtime.Handles/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-LinND4TnXOL/oD28kxybu+XrwrvxSfEa+px6xVx5ndCBTmRoRLmiQrPQAHktupQ5ObRWsTzHot/K8cfK5b3jdw==", - "path": "system.runtime.handles/4.3.0", - "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" - }, - "System.Runtime.InteropServices/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-xm8UVPKs/QFYrTDRzsmpKlGKHYsy5uXre2R6hD73R0NbJ1757Cc//5iedolR03ppxOkG5o1oRYkjxNq0Mb30pw==", - "path": "system.runtime.interopservices/4.3.0", - "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" - }, - "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-p0Ks5JJnrUJbbJUBoTRyEdd8dvbjZywKxkmwl1ldjyu767RxUG9+wZGsSN1c8SMiJ8zfvsoO2flilpHKYZtWkg==", - "path": "system.runtime.interopservices.runtimeinformation/4.3.0", - "hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512" - }, - "System.Runtime.Loader/4.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/ol/Y9N+MghH5YPeeFuad34s2mclOPJJ4fs2hnFHr04QfGpUSBlcbpp/P3fggCNrZXwVKQEKgHu7SnA43Y8ang==", - "path": "system.runtime.loader/4.0.0", - "hashPath": "system.runtime.loader.4.0.0.nupkg.sha512" - }, - "System.Runtime.Numerics/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-K+WIriZO8+5TbeVtQY6+4d9Uipq5lJ0BaRr8j+DBXnqcjdcwguqZCsd1ZPBu8bo0b4r6sCnluiWnu3qVGQuLvg==", - "path": "system.runtime.numerics/4.3.0", - "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512" - }, - "System.Runtime.Serialization.Primitives/4.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-RVu/CQgW96/pzEE1pV6fCMhwvkA2Exkt2v6D6jce5WaU76CpS1cavqeS8WtYzcnj2o3VQyqpktB/KGlnLkxC2g==", - "path": "system.runtime.serialization.primitives/4.1.1", - "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512" - }, - "System.Security.Claims/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-aA3tDOv5FORzSWN4DVrbX2nE0INo5zbOrJbwmcN+XKKoBrfl6XIqUVoy53pa9lYSbSrASVXRxZGtQ/+wF2P6Hw==", - "path": "system.security.claims/4.3.0", - "hashPath": "system.security.claims.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Algorithms/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Wwoz0ThoFf4pTpfWy79PN7vob1nlrEF2lX59qfPPnsmZKBq7YER9FShbNx6QiEMnvacx7ZB1OU2WV91KttfJYg==", - "path": "system.security.cryptography.algorithms/4.3.0", - "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Cng/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/EuVr1biVzo7h8wlFel3WN2nh2Dusx30Nsu8k5Dna3rUPYJuWGzoysNMRXQ4YxGWWNnFabDlM7z7EAGbXqL/Og==", - "path": "system.security.cryptography.cng/4.3.0", - "hashPath": "system.security.cryptography.cng.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Csp/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-YkD7nbzlPBmcW84gV2mwLWToT7naB8WK7LRNSmkfLuswEBapQqYOeq+4E3UBGu6bOHCnAomgrgiZkk45DZpiNQ==", - "path": "system.security.cryptography.csp/4.3.0", - "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Encoding/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4K76Y6CMYqnuj/2uvucQGdq2X2j5C8wM7/Yl2oxjEGTWepuAzXuvzxQcIccZcqchK/AAmsaiZe24lZNdno7VyA==", - "path": "system.security.cryptography.encoding/4.3.0", - "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3LIgk/eAMyj/OrlxNvPCJRYkKZbJiJ/nhF1mIV8sLibNJJBheEyglXsEIkBYERywzAMW8RIJ5cP3BkYfLq+eKQ==", - "path": "system.security.cryptography.openssl/4.3.0", - "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-jeRd2cHsedEcqHT1rcAK4j41VLlcSKj+dfv7d4rIEcUIi2/MvSNviTXjKXBSNxpG40UzlPrYlRZ7pzUadmBJtw==", - "path": "system.security.cryptography.primitives/4.3.0", - "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.X509Certificates/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-8QkPGkoZWHZx6zRljnbomuOaJDHxGdJ64Fz4fKtG4g1ztro2dEZ9gnrmCKIJaHWPDKHLVG2Sc4B7D46W8Ur4Ww==", - "path": "system.security.cryptography.x509certificates/4.3.0", - "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512" - }, - "System.Security.Principal/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QpsTE5TJpZw/ciAHRxxXLgGyMr1YgQJhjmhAEtM9ueq9SS6SktfLW1eMOLcDteHR9ksODY/BB3Cb1tIhvd3wnA==", - "path": "system.security.principal/4.3.0", - "hashPath": "system.security.principal.4.3.0.nupkg.sha512" - }, - "System.Security.Principal.Windows/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-KhIQOIe7lZgn6tMQEQkgL6qLZvgLm2YhroCgsvpz//RUXnsOYx8pa6cmTARWhtf3Ift0ECtoiPkTajDonwEL5w==", - "path": "system.security.principal.windows/4.3.0", - "hashPath": "system.security.principal.windows.4.3.0.nupkg.sha512" - }, - "System.Text.Encoding/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-U564F0gK8wI5A+SXUg99g/sxG9Fgynj90qgtUzMcK8wDF6iAktFXpZfY9cETcz3NKvKR/rQpyhstguPcAA2lUA==", - "path": "system.text.encoding/4.3.0", - "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" - }, - "System.Text.Encoding.CodePages/4.4.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-epF1P00AFbqPy5jZx3fpEn5qwlBDZ+dck71xYc/jLibfY6BtoFKOqoj84YHcQWV9HcWb7M13aVJ61XCdK8/3XA==", - "path": "system.text.encoding.codepages/4.4.0", - "hashPath": "system.text.encoding.codepages.4.4.0.nupkg.sha512" - }, - "System.Text.Encoding.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-SLRvag/jlOLLtZy5GwsK1+p6AGP6YmOazNhx7ZdYuxpo5eSh0L1YS9ozte+DEeyNmd/u4/vGQ297wObM7ULAhQ==", - "path": "system.text.encoding.extensions/4.3.0", - "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" - }, - "System.Text.RegularExpressions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-R3r6OE8Nl3SHl0lX7gQhFd1qvzEiIf5+gcf2vs/JAXG7kSl8l03HB2Jbyp/6JQ6rsv9XW47qCH8Nnc2kew4P4g==", - "path": "system.text.regularexpressions/4.3.0", - "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" - }, - "System.Threading/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4j+rHu0q/NVTrCrtwVeVy1WXpzMTB+V63DG2pI2aopEurxLtjYxqYFB0RQRahClkAzonmF7rTTPLnAGRfbV37w==", - "path": "system.threading/4.3.0", - "hashPath": "system.threading.4.3.0.nupkg.sha512" - }, - "System.Threading.Tasks/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-E3rywGOEzJJvjVzTIZHYWYIja/zs9UTq3hEuUAyBc1Y4fYKG4013HRD9Y2JymL7eHUfaujLhh8UM4yeTnAwZCQ==", - "path": "system.threading.tasks/4.3.0", - "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" - }, - "System.Threading.Tasks.Dataflow/4.6.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-C6u7OtH7Vvy+wbq4xx53E7evhrJ+I3nBWXCKh7/imxn3cKDUa2iAQ8uhzL0YnviXlJspBXXVmAbOFL1s9UHBuQ==", - "path": "system.threading.tasks.dataflow/4.6.0", - "hashPath": "system.threading.tasks.dataflow.4.6.0.nupkg.sha512" - }, - "System.Threading.Tasks.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-H/qEiAmcJa9kowqQtBFkosed9A3IRfw/OkQSTlih2v97cFpAr/irN0rpX0lZ+NEGnM6EhSxIEDGPLHh9DIBZjQ==", - "path": "system.threading.tasks.extensions/4.3.0", - "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" - }, - "System.Threading.Tasks.Parallel/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Wn3GV5YIWjxvv9muD9FSZxH4PLx98Y4D1Z5mpYTowK1RLPtFvusnVKnT0OzmzEpYCMtVNgqfk3kPc9xRGsWrLA==", - "path": "system.threading.tasks.parallel/4.3.0", - "hashPath": "system.threading.tasks.parallel.4.3.0.nupkg.sha512" - }, - "System.Threading.Thread/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-XzzZm9Q5FOttt418yyPwRcMPyq7m570YZdRYtx1YvB37a0lYfODD/lWg/rtKrs8b87iTS09FAtgm/2v6Nh+j6w==", - "path": "system.threading.thread/4.3.0", - "hashPath": "system.threading.thread.4.3.0.nupkg.sha512" - }, - "System.ValueTuple/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-HiwjNp4lGpyqFXPbWe/GUV3VDn4URlp85xNinOXT+lXQCeJAVdtPm70kH/9PmjbhJjdF1zpPm3obvrT4defjCA==", - "path": "system.valuetuple/4.3.0", - "hashPath": "system.valuetuple.4.3.0.nupkg.sha512" - }, - "System.Xml.ReaderWriter/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-8zETm01mtgiyTl3xO+QenvD6TLsDcopZQM0cxyf3maICj4HqP8nxLS9N7aRNsf+RWdWQW+QrKVmh5aD4w1jyQg==", - "path": "system.xml.readerwriter/4.3.0", - "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" - }, - "System.Xml.XDocument/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-VRYzRdAdsQFbx8oiblJC1QuAz+Ck792eArsccHxP0vfFv8055l25yhhLVqWCo3j9GEFYcku85bpdaMwXXDeY/w==", - "path": "system.xml.xdocument/4.3.0", - "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" - }, - "System.Xml.XmlDocument/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ykIwRe9zpjElOMTvobLQrSvva9P8Pm1l7BFU/jq/u/INyoPS3mOr4z45kQWaNcWSuq3jGFA/6iU4+z3rPNakgg==", - "path": "system.xml.xmldocument/4.3.0", - "hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512" - }, - "System.Xml.XPath/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-8Eo7vuasWRqXfiBRCIKz20Rq1h6n+NMp6nW2RmyUwF4VDekg8xbRZu8S3N21P5XGAhv+kaqUwI3xydEkcw+D5w==", - "path": "system.xml.xpath/4.3.0", - "hashPath": "system.xml.xpath.4.3.0.nupkg.sha512" - }, - "System.Xml.XPath.XDocument/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-I50WmmXa9mUUujJOWKjyjqMnZcJklN5oc6XfHk5bfp9gt6eCJQ74qmi7IYEMa2YHPoFuA93uwssBlfU51i53QA==", - "path": "system.xml.xpath.xdocument/4.3.0", - "hashPath": "system.xml.xpath.xdocument.4.3.0.nupkg.sha512" - } - } +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v2.1/linux-x64", + "signature": "09b5d44043dfd8ef3b9b182f6a118945b484122f" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v2.1": {}, + ".NETCoreApp,Version=v2.1/linux-x64": { + "mpc/1.0.0": { + "dependencies": { + "Buildalyzer.Workspaces": "2.2.0", + "Microsoft.NETCore.App": "2.1.5" + }, + "runtime": { + "mpc.dll": {} + } + }, + "Buildalyzer/2.2.0": { + "dependencies": { + "Buildalyzer.Logger": "2.2.0", + "MSBuild.StructuredLogger": "2.0.11", + "Microsoft.Build": "15.8.166", + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Build.Tasks.Core": "15.8.166", + "Microsoft.Build.Utilities.Core": "15.8.166", + "Microsoft.Extensions.DependencyModel": "2.1.0", + "Microsoft.Extensions.Logging": "2.1.1", + "Microsoft.Extensions.Logging.Abstractions": "2.1.1", + "MsBuildPipeLogger.Server": "1.1.2" + }, + "runtime": { + "lib/netstandard2.0/Buildalyzer.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.0" + } + } + }, + "Buildalyzer.Logger/2.2.0": { + "dependencies": { + "NETStandard.Library": "2.0.3" + }, + "runtime": { + "lib/netstandard1.3/Buildalyzer.Logger.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.0" + }, + "lib/netstandard1.3/MsBuildPipeLogger.Logger.dll": { + "assemblyVersion": "1.1.2.0", + "fileVersion": "1.1.2.0" + } + } + }, + "Buildalyzer.Workspaces/2.2.0": { + "dependencies": { + "Buildalyzer": "2.2.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "2.9.0", + "Microsoft.CodeAnalysis.VisualBasic.Workspaces": "2.9.0" + }, + "runtime": { + "lib/netstandard2.0/Buildalyzer.Workspaces.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.0" + } + } + }, + "Microsoft.Build/15.8.166": { + "dependencies": { + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Win32.Registry": "4.3.0", + "System.Collections.Immutable": "1.5.0", + "System.Diagnostics.TraceSource": "4.0.0", + "System.IO.Compression": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Runtime.Loader": "4.0.0", + "System.Security.Principal.Windows": "4.3.0", + "System.Text.Encoding.CodePages": "4.4.0", + "System.Threading.Tasks.Dataflow": "4.6.0" + }, + "runtime": { + "lib/netcoreapp2.1/Microsoft.Build.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "15.8.166.59604" + } + } + }, + "Microsoft.Build.Framework/15.8.166": { + "dependencies": { + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Threading.Thread": "4.3.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Framework.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "15.8.166.59604" + } + } + }, + "Microsoft.Build.Tasks.Core/15.8.166": { + "dependencies": { + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Build.Utilities.Core": "15.8.166", + "Microsoft.Win32.Registry": "4.3.0", + "System.CodeDom": "4.4.0", + "System.Collections.Immutable": "1.5.0", + "System.Linq.Parallel": "4.3.0", + "System.Net.Http": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.Writer": "4.0.0", + "System.Threading.Tasks.Dataflow": "4.6.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Tasks.Core.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "15.8.166.59604" + } + } + }, + "Microsoft.Build.Utilities.Core/15.8.166": { + "dependencies": { + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Win32.Registry": "4.3.0", + "System.Collections.Immutable": "1.5.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Text.Encoding.CodePages": "4.4.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "15.8.166.59604" + } + } + }, + "Microsoft.CodeAnalysis.Analyzers/2.6.1": {}, + "Microsoft.CodeAnalysis.Common/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "2.6.1", + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Collections.Immutable": "1.5.0", + "System.Console": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.FileVersionInfo": "4.3.0", + "System.Diagnostics.StackTrace": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.CodePages": "4.4.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0", + "System.Threading.Tasks.Parallel": "4.3.0", + "System.Threading.Thread": "4.3.0", + "System.ValueTuple": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0", + "System.Xml.XPath.XDocument": "4.3.0", + "System.Xml.XmlDocument": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "2.9.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.CSharp": "2.9.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "2.9.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "2.9.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.VisualBasic": "2.9.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "2.9.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "2.9.0", + "System.Composition": "1.0.31", + "System.Diagnostics.Contracts": "4.3.0", + "System.Linq.Parallel": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks.Parallel": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.Workspaces.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CSharp/4.0.1": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "Microsoft.DotNet.PlatformAbstractions/2.1.0": { + "dependencies": { + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.DotNet.PlatformAbstractions.dll": { + "assemblyVersion": "2.1.0.0", + "fileVersion": "2.1.0.0" + } + } + }, + "Microsoft.Extensions.Configuration/2.1.1": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { + "dependencies": { + "Microsoft.Extensions.Primitives": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Configuration.Binder/2.1.1": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.DependencyModel/2.1.0": { + "dependencies": { + "Microsoft.DotNet.PlatformAbstractions": "2.1.0", + "Newtonsoft.Json": "9.0.1", + "System.Diagnostics.Debug": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Linq": "4.3.0" + }, + "runtime": { + "lib/netstandard1.6/Microsoft.Extensions.DependencyModel.dll": { + "assemblyVersion": "2.1.0.0", + "fileVersion": "2.1.0.0" + } + } + }, + "Microsoft.Extensions.Logging/2.1.1": { + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.1.1", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", + "Microsoft.Extensions.Logging.Abstractions": "2.1.1", + "Microsoft.Extensions.Options": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/2.1.1": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Options/2.1.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", + "Microsoft.Extensions.Primitives": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Primitives/2.1.1": { + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.NETCore.App/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetHostPolicy": "2.1.5", + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "NETStandard.Library": "2.0.3", + "runtime.linux-x64.Microsoft.NETCore.App": "2.1.5" + } + }, + "Microsoft.NETCore.DotNetAppHost/2.1.5": { + "dependencies": { + "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost": "2.1.5" + } + }, + "Microsoft.NETCore.DotNetHostPolicy/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetHostResolver": "2.1.5", + "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy": "2.1.5" + } + }, + "Microsoft.NETCore.DotNetHostResolver/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetAppHost": "2.1.5", + "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver": "2.1.5" + } + }, + "Microsoft.NETCore.Platforms/2.1.1": {}, + "Microsoft.NETCore.Targets/2.0.0": {}, + "Microsoft.Win32.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "Microsoft.Win32.Registry/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "MSBuild.StructuredLogger/2.0.11": { + "dependencies": { + "Microsoft.Build": "15.8.166", + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Build.Tasks.Core": "15.8.166", + "Microsoft.Build.Utilities.Core": "15.8.166" + }, + "runtime": { + "lib/netstandard2.0/StructuredLogger.dll": { + "assemblyVersion": "2.0.11.0", + "fileVersion": "2.0.11.26510" + } + } + }, + "MsBuildPipeLogger.Server/1.1.2": { + "dependencies": { + "Microsoft.Build": "15.8.166", + "NETStandard.Library": "2.0.3" + }, + "runtime": { + "lib/netstandard1.5/MsBuildPipeLogger.Server.dll": { + "assemblyVersion": "1.1.2.0", + "fileVersion": "1.1.2.0" + } + } + }, + "NETStandard.Library/2.0.3": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1" + } + }, + "Newtonsoft.Json/9.0.1": { + "dependencies": { + "Microsoft.CSharp": "4.0.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/Newtonsoft.Json.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.1.19813" + } + } + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.linux-x64.Microsoft.NETCore.App/2.1.5": { + "runtime": { + "runtimes/linux-x64/lib/netcoreapp2.1/Microsoft.CSharp.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/Microsoft.VisualBasic.dll": { + "assemblyVersion": "10.0.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/Microsoft.Win32.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/Microsoft.Win32.Registry.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/SOS.NETCore.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.AppContext.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Buffers.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.Concurrent.dll": { + "assemblyVersion": "4.0.14.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.NonGeneric.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.Specialized.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Collections.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.Annotations.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.DataAnnotations.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.EventBasedAsync.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.Primitives.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.TypeConverter.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.ComponentModel.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Configuration.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Console.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Core.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Data.Common.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Data.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Contracts.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Debug.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll": { + "assemblyVersion": "4.0.3.1", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.FileVersionInfo.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Process.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.StackTrace.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.TextWriterTraceListener.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Tools.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.TraceSource.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Diagnostics.Tracing.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Drawing.Primitives.dll": { + "assemblyVersion": "4.2.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Drawing.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Dynamic.Runtime.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Globalization.Calendars.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Globalization.Extensions.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Globalization.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Compression.Brotli.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Compression.FileSystem.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Compression.ZipFile.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Compression.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.AccessControl.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.DriveInfo.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.Watcher.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.FileSystem.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.IsolatedStorage.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.MemoryMappedFiles.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Pipes.AccessControl.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.Pipes.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.UnmanagedMemoryStream.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.IO.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Linq.Expressions.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Linq.Parallel.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Linq.Queryable.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Linq.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Memory.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Http.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.HttpListener.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Mail.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.NameResolution.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.NetworkInformation.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Ping.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Requests.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Security.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.ServicePoint.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.Sockets.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebClient.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebHeaderCollection.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebProxy.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebSockets.Client.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.WebSockets.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Net.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Numerics.Vectors.dll": { + "assemblyVersion": "4.1.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Numerics.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.ObjectModel.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Private.DataContractSerialization.dll": { + "assemblyVersion": "4.1.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Private.Uri.dll": { + "assemblyVersion": "4.0.5.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Private.Xml.Linq.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Private.Xml.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.DispatchProxy.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Emit.ILGeneration.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Emit.Lightweight.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Emit.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Extensions.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.TypeExtensions.dll": { + "assemblyVersion": "4.1.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Reflection.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Resources.Reader.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Resources.ResourceManager.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Resources.Writer.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.CompilerServices.VisualC.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Extensions.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Handles.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.RuntimeInformation.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.WindowsRuntime.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Loader.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Numerics.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Formatters.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Json.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Primitives.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Xml.dll": { + "assemblyVersion": "4.1.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.Serialization.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Runtime.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.AccessControl.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Claims.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Algorithms.dll": { + "assemblyVersion": "4.3.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Cng.dll": { + "assemblyVersion": "4.3.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Csp.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Encoding.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.OpenSsl.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Cryptography.X509Certificates.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { + "assemblyVersion": "4.1.1.1", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.Principal.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.SecureString.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Security.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.ServiceModel.Web.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.ServiceProcess.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Text.Encoding.Extensions.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Text.Encoding.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Text.RegularExpressions.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Overlapped.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Tasks.Dataflow.dll": { + "assemblyVersion": "4.6.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Tasks.Extensions.dll": { + "assemblyVersion": "4.3.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Tasks.Parallel.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Tasks.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Thread.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.ThreadPool.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.Timer.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Threading.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Transactions.Local.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Transactions.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.ValueTuple.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Web.HttpUtility.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Web.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Windows.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.Linq.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.ReaderWriter.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.Serialization.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XDocument.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XPath.XDocument.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XPath.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XmlDocument.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.XmlSerializer.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.Xml.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/System.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/WindowsBase.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/mscorlib.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/linux-x64/lib/netcoreapp2.1/netstandard.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "0.0.0.0" + } + }, + "native": { + "runtimes/linux-x64/native/System.Globalization.Native.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/System.IO.Compression.Native.a": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/System.IO.Compression.Native.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/System.Native.a": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/System.Native.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/System.Net.Http.Native.a": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/System.Net.Http.Native.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/System.Net.Security.Native.a": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/System.Net.Security.Native.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/System.Private.CoreLib.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/System.Security.Cryptography.Native.OpenSsl.a": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/createdump": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/libclrjit.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/libcoreclr.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/libcoreclrtraceptprovider.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/libdbgshim.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/libmscordaccore.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/libmscordbi.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/libsos.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/libsosplugin.so": { + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/sosdocsunix.txt": { + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost/2.1.5": { + "native": { + "runtimes/linux-x64/native/apphost": { + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetHostResolver": "2.1.5" + }, + "native": { + "runtimes/linux-x64/native/libhostpolicy.so": { + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetAppHost": "2.1.5" + }, + "native": { + "runtimes/linux-x64/native/libhostfxr.so": { + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.native.System/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0" + } + }, + "runtime.native.System.IO.Compression/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0" + } + }, + "runtime.native.System.Net.Http/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0" + } + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {}, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "System.AppContext/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Buffers/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.CodeDom/4.4.0": { + "runtime": { + "lib/netstandard2.0/System.CodeDom.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.25519.3" + } + } + }, + "System.Collections/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Concurrent/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Collections.Immutable/1.5.0": { + "runtime": { + "lib/netstandard2.0/System.Collections.Immutable.dll": { + "assemblyVersion": "1.2.3.0", + "fileVersion": "4.6.26515.6" + } + } + }, + "System.Composition/1.0.31": { + "dependencies": { + "System.Composition.AttributedModel": "1.0.31", + "System.Composition.Convention": "1.0.31", + "System.Composition.Hosting": "1.0.31", + "System.Composition.Runtime": "1.0.31", + "System.Composition.TypedParts": "1.0.31" + } + }, + "System.Composition.AttributedModel/1.0.31": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.AttributedModel.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.Convention/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Composition.AttributedModel": "1.0.31", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.Convention.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.Hosting/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Composition.Runtime": "1.0.31", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.Hosting.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.Runtime/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.Runtime.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.TypedParts/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Composition.AttributedModel": "1.0.31", + "System.Composition.Hosting": "1.0.31", + "System.Composition.Runtime": "1.0.31", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.TypedParts.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Console/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Diagnostics.Contracts/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.Debug/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Diagnostics.FileVersionInfo/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "System.Diagnostics.StackTrace/4.3.0": { + "dependencies": { + "System.IO.FileSystem": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.Tools/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.TraceSource/4.0.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Diagnostics.Tracing/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Dynamic.Runtime/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Globalization/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Calendars/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "System.IO/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.Compression/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Buffers": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.IO.Compression": "4.3.0" + } + }, + "System.IO.FileSystem/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Linq/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Linq.Expressions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Linq.Parallel/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Memory/4.5.1": {}, + "System.Net.Http/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Net.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.ObjectModel/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Reflection/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit/4.3.0": { + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Metadata/1.6.0": { + "runtime": { + "lib/netstandard2.0/System.Reflection.Metadata.dll": { + "assemblyVersion": "1.4.3.0", + "fileVersion": "4.6.26515.6" + } + } + }, + "System.Reflection.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.TypeExtensions/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.ResourceManager/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.Writer/4.0.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Runtime/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0" + } + }, + "System.Runtime.CompilerServices.Unsafe/4.5.1": { + "runtime": { + "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "0.0.0.0" + } + } + }, + "System.Runtime.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Handles/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Runtime.Loader/4.0.0": { + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Numerics/4.3.0": { + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Runtime.Serialization.Primitives/4.1.1": { + "dependencies": { + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Security.Claims/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Security.Principal": "4.3.0" + } + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Cng/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Security.Cryptography.Csp/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.3.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Principal/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Security.Principal.Windows/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.Win32.Primitives": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Claims": "4.3.0", + "System.Security.Principal": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Text.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding.CodePages/4.4.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/System.Text.Encoding.CodePages.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "4.6.25519.3" + } + } + }, + "System.Text.Encoding.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Text.RegularExpressions/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Threading/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Threading.Tasks.Dataflow/4.6.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks.Parallel/4.3.0": { + "dependencies": { + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Thread/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.ValueTuple/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Xml.ReaderWriter/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + } + }, + "System.Xml.XDocument/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XmlDocument/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XPath/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XPath.XDocument/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0", + "System.Xml.XPath": "4.3.0" + } + } + } + }, + "libraries": { + "mpc/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Buildalyzer/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5nO0Lkv0zcB5Ck8AaO9eXnRbAfVAB45QQ0ZGCAfPwRxqlqn7WFkn6ESL8EWD8jgTdodtIE8KpZFXm8zb1jIYBw==", + "path": "buildalyzer/2.2.0", + "hashPath": "buildalyzer.2.2.0.nupkg.sha512" + }, + "Buildalyzer.Logger/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-490kgGa+07Jwdsq0jqxUSG2QjVg65MJHMEI1/D/7pOjNY4/Zc5DJTKxuL1eJUFf+rzB7NtZKDV0IGABlH8Ihmw==", + "path": "buildalyzer.logger/2.2.0", + "hashPath": "buildalyzer.logger.2.2.0.nupkg.sha512" + }, + "Buildalyzer.Workspaces/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iItCd3jnCUCXryBbWPpRqzPco2vqWobEAoyXelVSfQ+xkZmEwRGYtjjxa+14qo9sNve/a+LTeYknWG/dyRIQOg==", + "path": "buildalyzer.workspaces/2.2.0", + "hashPath": "buildalyzer.workspaces.2.2.0.nupkg.sha512" + }, + "Microsoft.Build/15.8.166": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MH3/LhMZZEAkWyMxUkRmNoMqO4A4XhXz7c1OywTKs9n0bvrCPD4S5k7p0YfyEpSY4JVIzbUFvHCR/uaFXtACEA==", + "path": "microsoft.build/15.8.166", + "hashPath": "microsoft.build.15.8.166.nupkg.sha512" + }, + "Microsoft.Build.Framework/15.8.166": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Bw7ebVvOQQC5zgM0AsyZFB23aJvEISa1vABkWCgjGueopq+fG6JDhwHeAXloLcwtQldvDobivLDFw6/8QDN9cg==", + "path": "microsoft.build.framework/15.8.166", + "hashPath": "microsoft.build.framework.15.8.166.nupkg.sha512" + }, + "Microsoft.Build.Tasks.Core/15.8.166": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NCTTEPkSUkxE7dZiVfnaSzjEMs7AiQYJ9hVHzGyreQzZFrR9fajwBc2KAjjH3pS8nBcx/rmjH9T0b5ZMOJviEw==", + "path": "microsoft.build.tasks.core/15.8.166", + "hashPath": "microsoft.build.tasks.core.15.8.166.nupkg.sha512" + }, + "Microsoft.Build.Utilities.Core/15.8.166": { + "type": "package", + "serviceable": true, + "sha512": "sha512-AZ7pSCGDeRlBm3TIOrnSOCWB2+Wea4rL7sMsinyChF3NJUAb//lF0fUyZfjbukE5eCqba17gw0FnbMjnNgtecw==", + "path": "microsoft.build.utilities.core/15.8.166", + "hashPath": "microsoft.build.utilities.core.15.8.166.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Analyzers/2.6.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-x9MfOXfTj/tdgm3rV15niL/J0T36ZPiVrIfO3Tax9Lv4fLGnVZJXSQatZezJ+tX+YYk2ZAPbq87vnSFwh1Je9w==", + "path": "microsoft.codeanalysis.analyzers/2.6.1", + "hashPath": "microsoft.codeanalysis.analyzers.2.6.1.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Common/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-gWTphgR8eHu39XcrfhxE8WwD35C/vaR06QiKM1TaCbjmgPafZ9G3TY7eeT44BfHVMQEGYZmjV5NZNQLm2F7ZTQ==", + "path": "microsoft.codeanalysis.common/2.9.0", + "hashPath": "microsoft.codeanalysis.common.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RNACUadFXlT3/Y4XIVI1+g3hpGgToYJyVTRBVFmhE8gtRA2snM5dPKv2e4Qz7K/3Ap7Ky+YgIKCO4YsmWqal/A==", + "path": "microsoft.codeanalysis.csharp/2.9.0", + "hashPath": "microsoft.codeanalysis.csharp.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Kis5VedBJjtdlYlI9erCAnqz2fVgRWLHCDYMIKRXsD4CVWrwrm8sCq3qmY9Drmit85StquRPFw5z8YMhDCB7RQ==", + "path": "microsoft.codeanalysis.csharp.workspaces/2.9.0", + "hashPath": "microsoft.codeanalysis.csharp.workspaces.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4nxVFgxywDHttOSLh9z36QGUdsTFz80A/M+qc2bgZ3GBuTR9+FeDPIap8DQrBcDZWO1Kb+0QC6b65jZvgcZP5g==", + "path": "microsoft.codeanalysis.visualbasic/2.9.0", + "hashPath": "microsoft.codeanalysis.visualbasic.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dL9+IJPk7mZ9LFY0saaXk1adKbEDhHe+U+1fG4F7o4NsvZqcOS/6sRcEWl253gi2ZoFoonDDB3sffhrlg1ITIQ==", + "path": "microsoft.codeanalysis.visualbasic.workspaces/2.9.0", + "hashPath": "microsoft.codeanalysis.visualbasic.workspaces.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KGkaumh6O0gS0RBWHHIfx34u5sm7vhgTDaFOcKm60tELh6Jy6OYNtdB/Iyefvvwb+PaZIcUg+9hbGBQ1GdCHqA==", + "path": "microsoft.codeanalysis.workspaces.common/2.9.0", + "hashPath": "microsoft.codeanalysis.workspaces.common.2.9.0.nupkg.sha512" + }, + "Microsoft.CSharp/4.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CLd4nvEjFlopxG7O6y4d2h46ZP+pfBw0cT/7WuZpMYduIthUO8dEJzfq8l+WJm8nOEg3LJcdKu8KG8N28vomBA==", + "path": "microsoft.csharp/4.0.1", + "hashPath": "microsoft.csharp.4.0.1.nupkg.sha512" + }, + "Microsoft.DotNet.PlatformAbstractions/2.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ae/c3pX6vhCs17caUrVZrb8n9gDTzr6usnZKZEHla7uy7ZcjQLfm09gS7m+IneVtmGwXm5hcSDa5qwqwLaH2Ug==", + "path": "microsoft.dotnet.platformabstractions/2.1.0", + "hashPath": "microsoft.dotnet.platformabstractions.2.1.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1JaydycXzbfAExlsD7XIWykzVnU/wZM86KzrHyGlXuxqnqzcWSXLJn4Ejn8bDnq07CEJNZ+GjsxWKlJ8kFfnvQ==", + "path": "microsoft.extensions.configuration/2.1.1", + "hashPath": "microsoft.extensions.configuration.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-9EMhOWU2eOQOtMIJ+vfwKJpnLRc1Wl3vXu8qXeevA91cSY4j3WvArmF7ApGtJwa7yKewJTvlQlBSn9OSnLFg6Q==", + "path": "microsoft.extensions.configuration.abstractions/2.1.1", + "hashPath": "microsoft.extensions.configuration.abstractions.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Binder/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-t7KFAv6AxyUsZj9QN8FAbusg+X5baCELl+XtscyuP1IGUv5UctyY7/rNZLyiKaV7HhAcDQ1zC5ZQNQQFn6JpAA==", + "path": "microsoft.extensions.configuration.binder/2.1.1", + "hashPath": "microsoft.extensions.configuration.binder.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PW1596sF97gpIc1JuUuYvTmeLfeqC5whbWPsWgJhN0fdwz683him3b/HB0dqhFesVssOjnnA0fEz4+S0gUeBqA==", + "path": "microsoft.extensions.dependencyinjection.abstractions/2.1.1", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyModel/2.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3KPT6CLH0VEGr2um9aG1rYTmqfMVlkRuueFpN6AxeIKpcMA4OVHf4aNpgYXZ6oF+x4uh9VhK/66FgPCd1mMlnQ==", + "path": "microsoft.extensions.dependencymodel/2.1.0", + "hashPath": "microsoft.extensions.dependencymodel.2.1.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-x4/RzeReQSIi4nVpOjXEySm/xUSr6lBjuecdYnlUboWxbLSm2j3vhFV5OLGRp3gfte3cRMdysMNa/wyZN0t/Tw==", + "path": "microsoft.extensions.logging/2.1.1", + "hashPath": "microsoft.extensions.logging.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-QWFWKrdeoDSEr8nVJaBAVDMj24wnh9clGzDNmMdgHHRsOIwTUMeh4XljeZXJhIKPT00jWuzwEzn3uNxOtO4cYg==", + "path": "microsoft.extensions.logging.abstractions/2.1.1", + "hashPath": "microsoft.extensions.logging.abstractions.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Options/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-j0zOfTt1Qm+JDW2m+6Q/aj1m4C8+onudUu4ls/fN69VxruZkMWmX1bPKkbkYIPNNxJsf4k7FOkVq5o1vEFq9pQ==", + "path": "microsoft.extensions.options/2.1.1", + "hashPath": "microsoft.extensions.options.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Svz25/egj1TsNL4118jyMqkhDiu0l8QYWq2p52P4BBN0GbqwR18ZRIctSP5TTDJy0m0EFC8aB2FOVjGtvEGWSA==", + "path": "microsoft.extensions.primitives/2.1.1", + "hashPath": "microsoft.extensions.primitives.2.1.1.nupkg.sha512" + }, + "Microsoft.NETCore.App/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oTQd5w0qQp32QSKPE6TqhhcybkkTKqtn4YVnNsYHwFR28s1kUAI/xg+hmKwF/G+u4vUjgy7Y7ghC0cIwRP5wdg==", + "path": "microsoft.netcore.app/2.1.5", + "hashPath": "microsoft.netcore.app.2.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.DotNetAppHost/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ir7AI1ywRriX1fLTLYOyiDTYSj+zpdAfTBFH0dLwvLvC8obU0EYnmrjTzbYJ8GSnza1H1Rv3Lo/lJBSccmTGMA==", + "path": "microsoft.netcore.dotnetapphost/2.1.5", + "hashPath": "microsoft.netcore.dotnetapphost.2.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.DotNetHostPolicy/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fkTeZ7G1Tf0aT+P1bMyn/qJXByFIaATNAt0DKrZ3nC7jMRAWBHJifOrOe5XnGvvc0YzqVLmHARYtzSG00/9NVw==", + "path": "microsoft.netcore.dotnethostpolicy/2.1.5", + "hashPath": "microsoft.netcore.dotnethostpolicy.2.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.DotNetHostResolver/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/rPHOsRWubviDEGlxQcNKtJ7G6ML0F/Pg5vG1E+lgfdmoyLRKqrE3ZjVlYCxS18ExZGekBq9LEVb+eOKMxlJEA==", + "path": "microsoft.netcore.dotnethostresolver/2.1.5", + "hashPath": "microsoft.netcore.dotnethostresolver.2.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iXcQc19h5oECLVokgt6hvLOOPP/d9kYQh9miF9zbcxGVZenuTN9IMB+f+gP26/+Rc5r2KLES5Of45Qdqo0NJeA==", + "path": "microsoft.netcore.platforms/2.1.1", + "hashPath": "microsoft.netcore.platforms.2.1.1.nupkg.sha512" + }, + "Microsoft.NETCore.Targets/2.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mJnCMoBfWL0lxxlBFJ/8cZKTfPpI82TekZkUqvSCBtunUaaqr2LVeWl1zQYdanAdk4Ddf1HCwb8+DNYaNFBk1w==", + "path": "microsoft.netcore.targets/2.0.0", + "hashPath": "microsoft.netcore.targets.2.0.0.nupkg.sha512" + }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-d2YDDsTDnU/+ERiLxkHMviiQlclT6/G2iddWPPH4xLbS0P0+RYcqOZxqauVHX6s3Uv2cUkL226qXKpfn/fL98Q==", + "path": "microsoft.win32.primitives/4.3.0", + "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512" + }, + "Microsoft.Win32.Registry/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OHAvcu6tVh40PncTYFkpLItsw9O8sUc59C4eqSqEd+U5rY7t0+u7Xoi6Mw2QOfvPJ2HUJlwIEVqxklDIfn757Q==", + "path": "microsoft.win32.registry/4.3.0", + "hashPath": "microsoft.win32.registry.4.3.0.nupkg.sha512" + }, + "MSBuild.StructuredLogger/2.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LYK6MOfPUEE/u10OepnvFOjFy12YWOjtXXIh3K0RtUzdjatIHZSAjU8MKPuGcegi06iblNH2Rlc78vc2AVokhg==", + "path": "msbuild.structuredlogger/2.0.11", + "hashPath": "msbuild.structuredlogger.2.0.11.nupkg.sha512" + }, + "MsBuildPipeLogger.Server/1.1.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4gxSIkc4mMpHemehqDAZzGdKAhGJAxyt+56SUi6B4X2FWijojXzcIr7illkuEA7Ex05eoa5Cx4pr6d1hn4m8lg==", + "path": "msbuildpipelogger.server/1.1.2", + "hashPath": "msbuildpipelogger.server.1.1.2.nupkg.sha512" + }, + "NETStandard.Library/2.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", + "path": "netstandard.library/2.0.3", + "hashPath": "netstandard.library.2.0.3.nupkg.sha512" + }, + "Newtonsoft.Json/9.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", + "path": "newtonsoft.json/9.0.1", + "hashPath": "newtonsoft.json.9.0.1.nupkg.sha512" + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+HIVh+8SOZS56Hqm/5wKUEAiz3BgjQRTQ6OG4K3FwSXT3JckhZbH4A/Xdwb7Z/GPQW4HocnFbq5CSuVXwy6ylg==", + "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tRFXi8EvFI+yB0DBDu52piUGKBlNebhT1swNbiTvUeZnkCuabY41eJnQaHESk1PGTiHs0Lh2FSwZYG5cUCnrrw==", + "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DPnni2nk3x2Iz/6Do1tme5F8sM4Jo5xUNsHJxlRJ686v/WcFeuTR8r72Bwr/8iJxRJepn/ke/XLHphnWme1OpQ==", + "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.linux-x64.Microsoft.NETCore.App/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-M8TIs0nh7paefSmhxCWmirqNYODnFea0qj6c6ybURb3pSiWYhlwHOZKEDFCM9/DLSMGn2brqAuoNDktrvdIneQ==", + "path": "runtime.linux-x64.microsoft.netcore.app/2.1.5", + "hashPath": "runtime.linux-x64.microsoft.netcore.app.2.1.5.nupkg.sha512" + }, + "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KFs8THSZ8wxXeJ46l1QVOQurYBcdGXHa6Y3avZZ2PyahWOK0RRqacRwxx0X2vDr1yT921PzRF6DZw3/RmZh2VQ==", + "path": "runtime.linux-x64.microsoft.netcore.dotnetapphost/2.1.5", + "hashPath": "runtime.linux-x64.microsoft.netcore.dotnetapphost.2.1.5.nupkg.sha512" + }, + "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Lg1HHUwiD988XlYQYM0YY6MtrsFmWEjJEgH0KUojP4QUFOvR2p2yAWtsnD/5oQTpeqUjCvg8qz3Sa2XHebBe5g==", + "path": "runtime.linux-x64.microsoft.netcore.dotnethostpolicy/2.1.5", + "hashPath": "runtime.linux-x64.microsoft.netcore.dotnethostpolicy.2.1.5.nupkg.sha512" + }, + "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oU5ciqaPf3XAaT4Iqyzj1VBncrEKGSNzn0Ore/jBiVy0lmKB1MSJr5uHtn0jTJbGjiXKzgQseBa70Ss3PQ50Mg==", + "path": "runtime.linux-x64.microsoft.netcore.dotnethostresolver/2.1.5", + "hashPath": "runtime.linux-x64.microsoft.netcore.dotnethostresolver.2.1.5.nupkg.sha512" + }, + "runtime.native.System/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6l0Dkix8bgJVwfFQg1yPNBa3J3hmOdSuZLYI06QlheipqU0hT2XCfN8otCPhD4M2Aq+Xhy1B5+9Jr9WWhfdusw==", + "path": "runtime.native.system/4.3.0", + "hashPath": "runtime.native.system.4.3.0.nupkg.sha512" + }, + "runtime.native.System.IO.Compression/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FBMFTXHy9kGuYs/bj62XyVrQB44HZcZ1fTj3Iv04eFGVcg65vac5o9Rv3hdYqNPmWK/DVgLUV8aeeTzcaqB5hg==", + "path": "runtime.native.system.io.compression/4.3.0", + "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Net.Http/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-g8FnRWqvKQwR0pjrB9bG1cLGSR4EFAu+7U34Q+ptucNLvBfWEAWcm54vrZCMAT6H9VU6VfDruGHA4nc1gu1i2w==", + "path": "runtime.native.system.net.http/4.3.0", + "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cgjvRwk6uDocZbujiZcZ90OYnErFqpN26H56Xfe8nnZIvErpRHe0RxP16DsLzY5dBuVqChNb+hLN7R8ixk1xVg==", + "path": "runtime.native.system.security.cryptography.apple/4.3.0", + "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uvqanMQDxKS+7ADCRVzNqoa9IQuxuBOVrtWvNNuNyNe/Gb03SxR9QgoRKKvIrvwMUGrudNDhrEITDRGWLIXqGA==", + "path": "runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6uH/bLrHHChHf1v+ZZCnVjKiaeCFOjd7RUBG4/MqBBRheByueBEGTvPrv2hSrpxPrwYZuNACAmYanbB7MtcflA==", + "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7fcf887lmwAHbWfCeQUVA/A8PaEkj0nwYDqUlytKP78+BJUjbVWTJqjFkM+jBeTCOElrt1RzrH0Hil+1tNLVBw==", + "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fuh5u2mOjEjHx2bQHHZTryMCWNOY9N7I0rCN3KldGRU6brnMOuZRTB3uh6AYK/9eioywbNerYDZAL6M3C4c7MQ==", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", + "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-W3mGmFCN5ei6jegKyBX8eMB+OEMAzcYvZBCocfrwOBMBsyv0YB9XuxZ9xxqsQJ71T4LGImi8+A8ntNkdwk4OhQ==", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nwK59n0Ink7MhkZKGxzAOdbxniOBQEbfV3fqvE0Q/AcuenNkdNlu6fbeeGWVzJWeliFIgzk1Rp/hCR/aAbs32g==", + "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fSj8+HzPXcEnBA+svDivS1/dhfwhG1LgQvyN7Jxvaqt97aMfGC1mdlMVUEoS+5awAHIZtmi8GZWtq+rXK5zaUw==", + "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xtUCr/NeowVrQ3e8uWRzppefx6yBvXYPKoHYjFaZKyO6HVZ7yFd7PM6P/QwAKejYRnlZElOL01lz5arTfKNeDA==", + "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Zja3A4KNQzxx07aAwgNoD55qGAntIwaRruMdRZaUNo2PB8czzPJE9GMFR/6im2rMoriWfxR+G90gXdQUx7v8KQ==", + "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "System.AppContext/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uEIyp9GUT2U5UD4KjUU2bIdmBFuRXGn0VeAbWZvqqfSdXfyADZQnmfCVxc18BbXpr4Axum0MY/gtQhiWroNcNw==", + "path": "system.appcontext/4.3.0", + "hashPath": "system.appcontext.4.3.0.nupkg.sha512" + }, + "System.Buffers/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Mm9RDuBQ6CIi0BP75sMq0boRBmztwc1MGfHSoeXdoOyJnyvG6Dri9GE1mNebbVWEkxNRe4CbXHTJYyKq/3WEmQ==", + "path": "system.buffers/4.3.0", + "hashPath": "system.buffers.4.3.0.nupkg.sha512" + }, + "System.CodeDom/4.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-E/lvSfMFPtNflAgdM6AuPU8JbZdqdSoGpU66G7SrduCqdrFyPflaqqV4gN2d0hrCBpu92HaoqpUP5d+g9Itcxw==", + "path": "system.codedom/4.4.0", + "hashPath": "system.codedom.4.4.0.nupkg.sha512" + }, + "System.Collections/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/RO6DxDIzcceka4RmnJ6P8anXxdkmdRGKpliRZKVB84y4LzpqMMWTLAGRQXLc5ET15z1Xr7YaNZx1rbWuqRVcg==", + "path": "system.collections/4.3.0", + "hashPath": "system.collections.4.3.0.nupkg.sha512" + }, + "System.Collections.Concurrent/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fu4SvisargPpI4z2+69ocBNmQLS98WyvsA1dP35c2dxRJnEd/+cSmGnv/GSNxbIs7wtveGB8tzFLYABPFkX7Kg==", + "path": "system.collections.concurrent/4.3.0", + "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" + }, + "System.Collections.Immutable/1.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-erLSnZLBCA8EKIE2bKtXynjWBWSoMlmCFrOOYN+sPKCeYd3oGj9h8hqRPODtsRlPANkOW7L8tEQlEadHbUXC6A==", + "path": "system.collections.immutable/1.5.0", + "hashPath": "system.collections.immutable.1.5.0.nupkg.sha512" + }, + "System.Composition/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CbzwbjxT04VU+JzQuPOYfUCybzBtbGZdqGJS9482dDBoBHbt3Zz0QAJ/Cjzpmq5xdL+hhW4FYWf/3wq2OCVXgg==", + "path": "system.composition/1.0.31", + "hashPath": "system.composition.1.0.31.nupkg.sha512" + }, + "System.Composition.AttributedModel/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rhZeg+i71Q0MZjYIdIpyfzKM7E9EsvytXxq+CaZ/vWCV09ZfMnb0MOEkfM4wfKhTo7Xoo3TJkkfTLx8kUCltkg==", + "path": "system.composition.attributedmodel/1.0.31", + "hashPath": "system.composition.attributedmodel.1.0.31.nupkg.sha512" + }, + "System.Composition.Convention/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-9GFJIdwg0zr8s2KHVVgVikYfPJ/KntH1D79Z7VzCovUZwDNNq66MMKkLJIOCztXsgDdgYKOp3BAYASRS9EvYGw==", + "path": "system.composition.convention/1.0.31", + "hashPath": "system.composition.convention.1.0.31.nupkg.sha512" + }, + "System.Composition.Hosting/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KlZ4qkaa1p/U2WKr353XeQ9bjrxBwn9FcD5k9WFEuV1MloDMnTnhUwQU7h1WigvsCYykzoRdnDLq33wnUPwBeg==", + "path": "system.composition.hosting/1.0.31", + "hashPath": "system.composition.hosting.1.0.31.nupkg.sha512" + }, + "System.Composition.Runtime/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iZH3/g2js6fmV3atN2Ym/o+dM2ZMA1GA0GXc70nhbIqK67L29Lh3YrAWiBlyoOIUjNEggA6L4i++7PSID2wMdQ==", + "path": "system.composition.runtime/1.0.31", + "hashPath": "system.composition.runtime.1.0.31.nupkg.sha512" + }, + "System.Composition.TypedParts/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-H6fLWxFy+cy+YsHRcvUBskvDYkpDdUJky+GkqYvi8B/5cm/KIQ5QVDOLKuul4PHFZ/x0yRacS8CpY3x/PxiBeA==", + "path": "system.composition.typedparts/1.0.31", + "hashPath": "system.composition.typedparts.1.0.31.nupkg.sha512" + }, + "System.Console/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NXaPmAD2UQOwcXA0CdsTCi1g/BUmuxwwGok2guCrS/pLpAv79v5TQLWYPnUoysNbn3p8v1WLguJHLMa782C5Yw==", + "path": "system.console/4.3.0", + "hashPath": "system.console.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Contracts/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-clL6acqvIbbx3JYunlkrWV5sP9qGd0sLl612eXrBVVwakTTlMNtvZB5RiC2rU2uYxSnIt2ssUQgA2adrYSqYhA==", + "path": "system.diagnostics.contracts/4.3.0", + "hashPath": "system.diagnostics.contracts.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Debug/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-j3oXzv/QxCZcBxSIzreks9gAMenRyZTvSntLbDYGWczEhLQX4Ob3ajnXpAC9IXymWI+N4AFV7/pXLPwn+2ItAA==", + "path": "system.diagnostics.debug/4.3.0", + "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wu5+BNFredYlzZEmih3pMlR0ekaWCd9KZ8MPWqIQ4KVKo+RpzuhsIAfteI5OYQ2zSVzg1uOfQBrJ8KFkz+XfRQ==", + "path": "system.diagnostics.diagnosticsource/4.3.0", + "hashPath": "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.FileVersionInfo/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OEshwk5wkdxtGkFZYSErv6dnUuz0z8C01htylGwOwFnCVFRcrvleBtplMDCk9nMyWP41cbMZGEIBfy7HV1Loug==", + "path": "system.diagnostics.fileversioninfo/4.3.0", + "hashPath": "system.diagnostics.fileversioninfo.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.StackTrace/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BZY9Q0RiOSp/hp13jXe97aVOgPDzlqOdYdixs5fl/e3K/vz1SoJYDddY8CPE3wH9m043tJ65L8i+WMiPzGxdtQ==", + "path": "system.diagnostics.stacktrace/4.3.0", + "hashPath": "system.diagnostics.stacktrace.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Tools/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7gcA6FsKiySf+s9PeyenhSuUmxbxrpEDZ+/UcZBUbIu92JR804efdbIy4bEYcHg1htFbhxewu8vIV5pWYhc2Sg==", + "path": "system.diagnostics.tools/4.3.0", + "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.TraceSource/4.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bGUeY5wiCHYSWbYZS3QjbaQ1hNoJ1RQBQMB3E0Cgh6AH//4rXfXIOHKIW46HDOsTEDoNfvFNDXphL5W5B/XMwQ==", + "path": "system.diagnostics.tracesource/4.0.0", + "hashPath": "system.diagnostics.tracesource.4.0.0.nupkg.sha512" + }, + "System.Diagnostics.Tracing/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7IXKSUQm7wC+beoAINYrIqawpecwtyiM5NKv96whUmWOvg2vPn60WYqLopKbWu3GSPCH/ZJxAiHrS7tYlhb5Dg==", + "path": "system.diagnostics.tracing/4.3.0", + "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" + }, + "System.Dynamic.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PyiPySIERuk05CtVuHEQOijQChY4L77ZcUe+fee7lyZxPbU/hlduSfUIXw8XF/T+R1jOIDoOZXEQ+ZoFEgOzYQ==", + "path": "system.dynamic.runtime/4.3.0", + "hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512" + }, + "System.Globalization/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Gp7Z/4kR92caisVDNbXXYdGYZuAECXZGIaG7kAOs3cEM3zVMp078Yn3qVRGzUidYSYEAauQ0hx7mbXEmuimhYA==", + "path": "system.globalization/4.3.0", + "hashPath": "system.globalization.4.3.0.nupkg.sha512" + }, + "System.Globalization.Calendars/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cr50CLRa9Egfe0Cg2aQPrnLqDpcE794AKTmpgiTIZpz+3N7lN+5yGtNUhTrUbMeSZycoFHTGIEArIlv8J2aX/A==", + "path": "system.globalization.calendars/4.3.0", + "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512" + }, + "System.Globalization.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4OvZWmZyTOaSygNnIdnu/p0zvu+HU9WnoZshyo3wzU5lLqiVa1pli0iY/VegQoJ7NPk5hd0RVxU+XrSOr5aauw==", + "path": "system.globalization.extensions/4.3.0", + "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" + }, + "System.IO/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Ep3xyKDltu0EsCk1BvoWBC7NltwFqRlYCjwKTV7+d4sAH0lVk5P3Q2XydNm6dYxUJZdUgmBLf52F3pAwzKIJBg==", + "path": "system.io/4.3.0", + "hashPath": "system.io.4.3.0.nupkg.sha512" + }, + "System.IO.Compression/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RTb1FGyGEZkNrxrFee3FZsMJSmK6Lmxaef2mHdK23qn9IxlEZbeK14hb0KPNM8k6QzzU+kqR1rTD8bYopx6fYQ==", + "path": "system.io.compression/4.3.0", + "hashPath": "system.io.compression.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4mTkw3zbrqvWAMLqgMxr4lg2ggjcCPAhJqRSKy+ZhrPlXztqYAKf7d5sDDJmCkZjNJxsM/k9ZvlQZR6/zUCihQ==", + "path": "system.io.filesystem/4.3.0", + "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-l8suI9sMTsWzpZraleWE3z1KQqTCqBITJJmeT0AVj6Kk6EWLv9iKDb47O8zBktZqWAxEF1nvUnwhevYW9DToPQ==", + "path": "system.io.filesystem.primitives/4.3.0", + "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" + }, + "System.Linq/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4GusFyZYZE8W5IX9MjqCzucdLArml/j5zxVw2R0VS+JhrTaibL6M2SQSi7lIpGwwBuxU1Dwe2Sx1putAQ5d2BQ==", + "path": "system.linq/4.3.0", + "hashPath": "system.linq.4.3.0.nupkg.sha512" + }, + "System.Linq.Expressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-jlZ1AKYgns90hbPp83uM5SQCWRrqLZWHS3q33zeMlAdKfQ4+KT4VVbWmgWqh6nVw7pB/7dXiR8TjHUPcXwIEKA==", + "path": "system.linq.expressions/4.3.0", + "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" + }, + "System.Linq.Parallel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-td7x21K8LalpjTWCzW/nQboQIFbq9i0r+PCyBBCdLWWnm4NBcdN18vpz/G9hCpUaCIfRL+ZxJNVTywlNlB1aLQ==", + "path": "system.linq.parallel/4.3.0", + "hashPath": "system.linq.parallel.4.3.0.nupkg.sha512" + }, + "System.Memory/4.5.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oonnLQPZAGD21qtNMG4EtVmbYOInk2jV7M+g108B6OHOb67ZOaWnA/K8P5oQ6uK9wxKzB1iEXSChQOi2scKOqA==", + "path": "system.memory/4.5.1", + "hashPath": "system.memory.4.5.1.nupkg.sha512" + }, + "System.Net.Http/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Z1UfSF6dlpCdZdxh6LeoGlYH+q6ptG/iiIWgUUeKhE3DbQACmZkU7Sz2nOX0qdHjz72MOdYRbkSJ5Qwl6sZgvg==", + "path": "system.net.http/4.3.0", + "hashPath": "system.net.http.4.3.0.nupkg.sha512" + }, + "System.Net.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zpJLsVc5gRgTZR1QEi0H3s0bV26t7yug0WcersFr/pVqDvEBiqQm6z3YjYtWkVlMJ65ko1sSvGW5WXqaykOQ+g==", + "path": "system.net.primitives/4.3.0", + "hashPath": "system.net.primitives.4.3.0.nupkg.sha512" + }, + "System.ObjectModel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-jeoLKRPL6N8492mNbyrUFhMkEEFb4ihgZmIuAXqv7lxkWQjzs+UqBPDKqmS2gQfFAUO2wXaaZPVEcKUfhETR2w==", + "path": "system.objectmodel/4.3.0", + "hashPath": "system.objectmodel.4.3.0.nupkg.sha512" + }, + "System.Reflection/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DyOo4oJzP4JDP+GmJmZRTUoMN1T7MDlQLCgptPKJ5oB9AhRZ/RDIhAw0XrLAC6BpBxSPWk+fv6rMzfZcYPIjyQ==", + "path": "system.reflection/4.3.0", + "hashPath": "system.reflection.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/rKEzbnRq6H1LUkLmlqT6YaD8S625rZIuK+EQvBwfdHjJbLni0c9SP0XSM2gv1Khnn9ehU5MSz/WmH7gwt2QGQ==", + "path": "system.reflection.emit/4.3.0", + "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-popK0u8UUkrlKadna04k1polWd1mdATZeKu/Qd0jiMZf4NTZ/GFzwpuuyTxYgUaPtqS2gJZ8rVkBWfYS4IdDQQ==", + "path": "system.reflection.emit.ilgeneration/4.3.0", + "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-TCmTVOvOkWf7QNHMuzbfSD1y7hO0PNhFfTGLzKAJYkh7Ta+lUX2pb+Rrnx/i3Ism6H2qCDzagRbnsluJQ1U0Kw==", + "path": "system.reflection.emit.lightweight/4.3.0", + "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" + }, + "System.Reflection.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VaItSJxypiIW7jglQPcywfByp9jLFkfGE6kZG17ft/q7xnFuS6GcDL/pPvnBqHpC0f0NCPV4utazuQ225DrxQg==", + "path": "system.reflection.extensions/4.3.0", + "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" + }, + "System.Reflection.Metadata/1.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-sARURAx/ZV3f3lL/40TG9y2Wqk60DXUlvzowM5oYeHlcpuEMIxoKnDBhNwBzwRs3i+vWUwIbU7Kk/+mG+hzckA==", + "path": "system.reflection.metadata/1.6.0", + "hashPath": "system.reflection.metadata.1.6.0.nupkg.sha512" + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6j+W57PZnjErWr1OBi7ORmwBBLycDB4N9aEOBKHAHXF/9sLOA30IQkqyOWGUUbQUgjHZwuZSVtgaUzW8wIbFTg==", + "path": "system.reflection.primitives/4.3.0", + "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" + }, + "System.Reflection.TypeExtensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-O0FhlnCiyHTpu0WBl5/0bbWvJpLjLdUNkDomPCaZP4baItazJDHl7666HrWQ1LB9iv5Wt36g08eZrlUB/JXNvw==", + "path": "system.reflection.typeextensions/4.3.0", + "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-u8AA+wa4EtOtkOf7OqxYryXnZ2zwv83qP1Dfnv3ZoA1k9Gx0HR/ERccyc1/HBpjbIdrcsyTVHivNQSYlGwGT8A==", + "path": "system.resources.resourcemanager/4.3.0", + "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" + }, + "System.Resources.Writer/4.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mGgwPBXGTqnw6lQeRI24ChoyPViWx36MVfN6Ys1ceLJMTQDMHcoLiMHOzSvA7ZgjX2tWBy8nfjzlN1kDL/G1gQ==", + "path": "system.resources.writer/4.0.0", + "hashPath": "system.resources.writer.4.0.0.nupkg.sha512" + }, + "System.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wLlTiM4b/Un90BM6s3voqYybZEGra4WiIaXfTeB9kVPZr6QDP97xjG+rZYzdP2jiuQnij1bA8q4PzmrY6l5QTw==", + "path": "system.runtime/4.3.0", + "hashPath": "system.runtime.4.3.0.nupkg.sha512" + }, + "System.Runtime.CompilerServices.Unsafe/4.5.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qUJMNWhbm9oZ3XaMFiEMiYmRPszbnXIkRIi7+4b2Md2xZ6JUOepf0/kY3S85qistRohl9OdMe4PsO+RdG2kTIQ==", + "path": "system.runtime.compilerservices.unsafe/4.5.1", + "hashPath": "system.runtime.compilerservices.unsafe.4.5.1.nupkg.sha512" + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Xz+DgcN+a9LcFJJ9uir7Za7hAye4Hon6CxufXiVkfoQ9IQLn1w0NGr7kuwosXFJ892JA8zNTx7QWjRc9qrmN3w==", + "path": "system.runtime.extensions/4.3.0", + "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LinND4TnXOL/oD28kxybu+XrwrvxSfEa+px6xVx5ndCBTmRoRLmiQrPQAHktupQ5ObRWsTzHot/K8cfK5b3jdw==", + "path": "system.runtime.handles/4.3.0", + "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xm8UVPKs/QFYrTDRzsmpKlGKHYsy5uXre2R6hD73R0NbJ1757Cc//5iedolR03ppxOkG5o1oRYkjxNq0Mb30pw==", + "path": "system.runtime.interopservices/4.3.0", + "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-p0Ks5JJnrUJbbJUBoTRyEdd8dvbjZywKxkmwl1ldjyu767RxUG9+wZGsSN1c8SMiJ8zfvsoO2flilpHKYZtWkg==", + "path": "system.runtime.interopservices.runtimeinformation/4.3.0", + "hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512" + }, + "System.Runtime.Loader/4.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/ol/Y9N+MghH5YPeeFuad34s2mclOPJJ4fs2hnFHr04QfGpUSBlcbpp/P3fggCNrZXwVKQEKgHu7SnA43Y8ang==", + "path": "system.runtime.loader/4.0.0", + "hashPath": "system.runtime.loader.4.0.0.nupkg.sha512" + }, + "System.Runtime.Numerics/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-K+WIriZO8+5TbeVtQY6+4d9Uipq5lJ0BaRr8j+DBXnqcjdcwguqZCsd1ZPBu8bo0b4r6sCnluiWnu3qVGQuLvg==", + "path": "system.runtime.numerics/4.3.0", + "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512" + }, + "System.Runtime.Serialization.Primitives/4.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RVu/CQgW96/pzEE1pV6fCMhwvkA2Exkt2v6D6jce5WaU76CpS1cavqeS8WtYzcnj2o3VQyqpktB/KGlnLkxC2g==", + "path": "system.runtime.serialization.primitives/4.1.1", + "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512" + }, + "System.Security.Claims/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aA3tDOv5FORzSWN4DVrbX2nE0INo5zbOrJbwmcN+XKKoBrfl6XIqUVoy53pa9lYSbSrASVXRxZGtQ/+wF2P6Hw==", + "path": "system.security.claims/4.3.0", + "hashPath": "system.security.claims.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Wwoz0ThoFf4pTpfWy79PN7vob1nlrEF2lX59qfPPnsmZKBq7YER9FShbNx6QiEMnvacx7ZB1OU2WV91KttfJYg==", + "path": "system.security.cryptography.algorithms/4.3.0", + "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Cng/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/EuVr1biVzo7h8wlFel3WN2nh2Dusx30Nsu8k5Dna3rUPYJuWGzoysNMRXQ4YxGWWNnFabDlM7z7EAGbXqL/Og==", + "path": "system.security.cryptography.cng/4.3.0", + "hashPath": "system.security.cryptography.cng.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Csp/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YkD7nbzlPBmcW84gV2mwLWToT7naB8WK7LRNSmkfLuswEBapQqYOeq+4E3UBGu6bOHCnAomgrgiZkk45DZpiNQ==", + "path": "system.security.cryptography.csp/4.3.0", + "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4K76Y6CMYqnuj/2uvucQGdq2X2j5C8wM7/Yl2oxjEGTWepuAzXuvzxQcIccZcqchK/AAmsaiZe24lZNdno7VyA==", + "path": "system.security.cryptography.encoding/4.3.0", + "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3LIgk/eAMyj/OrlxNvPCJRYkKZbJiJ/nhF1mIV8sLibNJJBheEyglXsEIkBYERywzAMW8RIJ5cP3BkYfLq+eKQ==", + "path": "system.security.cryptography.openssl/4.3.0", + "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-jeRd2cHsedEcqHT1rcAK4j41VLlcSKj+dfv7d4rIEcUIi2/MvSNviTXjKXBSNxpG40UzlPrYlRZ7pzUadmBJtw==", + "path": "system.security.cryptography.primitives/4.3.0", + "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8QkPGkoZWHZx6zRljnbomuOaJDHxGdJ64Fz4fKtG4g1ztro2dEZ9gnrmCKIJaHWPDKHLVG2Sc4B7D46W8Ur4Ww==", + "path": "system.security.cryptography.x509certificates/4.3.0", + "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512" + }, + "System.Security.Principal/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-QpsTE5TJpZw/ciAHRxxXLgGyMr1YgQJhjmhAEtM9ueq9SS6SktfLW1eMOLcDteHR9ksODY/BB3Cb1tIhvd3wnA==", + "path": "system.security.principal/4.3.0", + "hashPath": "system.security.principal.4.3.0.nupkg.sha512" + }, + "System.Security.Principal.Windows/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KhIQOIe7lZgn6tMQEQkgL6qLZvgLm2YhroCgsvpz//RUXnsOYx8pa6cmTARWhtf3Ift0ECtoiPkTajDonwEL5w==", + "path": "system.security.principal.windows/4.3.0", + "hashPath": "system.security.principal.windows.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-U564F0gK8wI5A+SXUg99g/sxG9Fgynj90qgtUzMcK8wDF6iAktFXpZfY9cETcz3NKvKR/rQpyhstguPcAA2lUA==", + "path": "system.text.encoding/4.3.0", + "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding.CodePages/4.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-epF1P00AFbqPy5jZx3fpEn5qwlBDZ+dck71xYc/jLibfY6BtoFKOqoj84YHcQWV9HcWb7M13aVJ61XCdK8/3XA==", + "path": "system.text.encoding.codepages/4.4.0", + "hashPath": "system.text.encoding.codepages.4.4.0.nupkg.sha512" + }, + "System.Text.Encoding.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-SLRvag/jlOLLtZy5GwsK1+p6AGP6YmOazNhx7ZdYuxpo5eSh0L1YS9ozte+DEeyNmd/u4/vGQ297wObM7ULAhQ==", + "path": "system.text.encoding.extensions/4.3.0", + "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" + }, + "System.Text.RegularExpressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-R3r6OE8Nl3SHl0lX7gQhFd1qvzEiIf5+gcf2vs/JAXG7kSl8l03HB2Jbyp/6JQ6rsv9XW47qCH8Nnc2kew4P4g==", + "path": "system.text.regularexpressions/4.3.0", + "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" + }, + "System.Threading/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4j+rHu0q/NVTrCrtwVeVy1WXpzMTB+V63DG2pI2aopEurxLtjYxqYFB0RQRahClkAzonmF7rTTPLnAGRfbV37w==", + "path": "system.threading/4.3.0", + "hashPath": "system.threading.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-E3rywGOEzJJvjVzTIZHYWYIja/zs9UTq3hEuUAyBc1Y4fYKG4013HRD9Y2JymL7eHUfaujLhh8UM4yeTnAwZCQ==", + "path": "system.threading.tasks/4.3.0", + "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks.Dataflow/4.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-C6u7OtH7Vvy+wbq4xx53E7evhrJ+I3nBWXCKh7/imxn3cKDUa2iAQ8uhzL0YnviXlJspBXXVmAbOFL1s9UHBuQ==", + "path": "system.threading.tasks.dataflow/4.6.0", + "hashPath": "system.threading.tasks.dataflow.4.6.0.nupkg.sha512" + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-H/qEiAmcJa9kowqQtBFkosed9A3IRfw/OkQSTlih2v97cFpAr/irN0rpX0lZ+NEGnM6EhSxIEDGPLHh9DIBZjQ==", + "path": "system.threading.tasks.extensions/4.3.0", + "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks.Parallel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Wn3GV5YIWjxvv9muD9FSZxH4PLx98Y4D1Z5mpYTowK1RLPtFvusnVKnT0OzmzEpYCMtVNgqfk3kPc9xRGsWrLA==", + "path": "system.threading.tasks.parallel/4.3.0", + "hashPath": "system.threading.tasks.parallel.4.3.0.nupkg.sha512" + }, + "System.Threading.Thread/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-XzzZm9Q5FOttt418yyPwRcMPyq7m570YZdRYtx1YvB37a0lYfODD/lWg/rtKrs8b87iTS09FAtgm/2v6Nh+j6w==", + "path": "system.threading.thread/4.3.0", + "hashPath": "system.threading.thread.4.3.0.nupkg.sha512" + }, + "System.ValueTuple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HiwjNp4lGpyqFXPbWe/GUV3VDn4URlp85xNinOXT+lXQCeJAVdtPm70kH/9PmjbhJjdF1zpPm3obvrT4defjCA==", + "path": "system.valuetuple/4.3.0", + "hashPath": "system.valuetuple.4.3.0.nupkg.sha512" + }, + "System.Xml.ReaderWriter/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8zETm01mtgiyTl3xO+QenvD6TLsDcopZQM0cxyf3maICj4HqP8nxLS9N7aRNsf+RWdWQW+QrKVmh5aD4w1jyQg==", + "path": "system.xml.readerwriter/4.3.0", + "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" + }, + "System.Xml.XDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VRYzRdAdsQFbx8oiblJC1QuAz+Ck792eArsccHxP0vfFv8055l25yhhLVqWCo3j9GEFYcku85bpdaMwXXDeY/w==", + "path": "system.xml.xdocument/4.3.0", + "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" + }, + "System.Xml.XmlDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ykIwRe9zpjElOMTvobLQrSvva9P8Pm1l7BFU/jq/u/INyoPS3mOr4z45kQWaNcWSuq3jGFA/6iU4+z3rPNakgg==", + "path": "system.xml.xmldocument/4.3.0", + "hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512" + }, + "System.Xml.XPath/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8Eo7vuasWRqXfiBRCIKz20Rq1h6n+NMp6nW2RmyUwF4VDekg8xbRZu8S3N21P5XGAhv+kaqUwI3xydEkcw+D5w==", + "path": "system.xml.xpath/4.3.0", + "hashPath": "system.xml.xpath.4.3.0.nupkg.sha512" + }, + "System.Xml.XPath.XDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-I50WmmXa9mUUujJOWKjyjqMnZcJklN5oc6XfHk5bfp9gt6eCJQ74qmi7IYEMa2YHPoFuA93uwssBlfU51i53QA==", + "path": "system.xml.xpath.xdocument/4.3.0", + "hashPath": "system.xml.xpath.xdocument.4.3.0.nupkg.sha512" + } + } } \ No newline at end of file diff --git a/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/linux-x64/mpc.runtimeconfig.json b/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/linux-x64/mpc.runtimeconfig.json index 153e1cf4f..a2882f9c3 100644 --- a/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/linux-x64/mpc.runtimeconfig.json +++ b/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/linux-x64/mpc.runtimeconfig.json @@ -1,3 +1,3 @@ -{ - "runtimeOptions": {} +{ + "runtimeOptions": {} } \ No newline at end of file diff --git a/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/osx-x64/mpc.deps.json b/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/osx-x64/mpc.deps.json index 6972afbeb..15f3df2c3 100644 --- a/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/osx-x64/mpc.deps.json +++ b/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/osx-x64/mpc.deps.json @@ -1,3369 +1,3369 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v2.1/osx-x64", - "signature": "9d7b4faeebf3c0c6b8648d5493e03a4886e70936" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v2.1": {}, - ".NETCoreApp,Version=v2.1/osx-x64": { - "mpc/1.0.0": { - "dependencies": { - "Buildalyzer.Workspaces": "2.2.0", - "Microsoft.NETCore.App": "2.1.5" - }, - "runtime": { - "mpc.dll": {} - } - }, - "Buildalyzer/2.2.0": { - "dependencies": { - "Buildalyzer.Logger": "2.2.0", - "MSBuild.StructuredLogger": "2.0.11", - "Microsoft.Build": "15.8.166", - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Build.Tasks.Core": "15.8.166", - "Microsoft.Build.Utilities.Core": "15.8.166", - "Microsoft.Extensions.DependencyModel": "2.1.0", - "Microsoft.Extensions.Logging": "2.1.1", - "Microsoft.Extensions.Logging.Abstractions": "2.1.1", - "MsBuildPipeLogger.Server": "1.1.2" - }, - "runtime": { - "lib/netstandard2.0/Buildalyzer.dll": { - "assemblyVersion": "2.2.0.0", - "fileVersion": "2.2.0.0" - } - } - }, - "Buildalyzer.Logger/2.2.0": { - "dependencies": { - "NETStandard.Library": "2.0.3" - }, - "runtime": { - "lib/netstandard1.3/Buildalyzer.Logger.dll": { - "assemblyVersion": "2.2.0.0", - "fileVersion": "2.2.0.0" - }, - "lib/netstandard1.3/MsBuildPipeLogger.Logger.dll": { - "assemblyVersion": "1.1.2.0", - "fileVersion": "1.1.2.0" - } - } - }, - "Buildalyzer.Workspaces/2.2.0": { - "dependencies": { - "Buildalyzer": "2.2.0", - "Microsoft.CodeAnalysis.CSharp.Workspaces": "2.9.0", - "Microsoft.CodeAnalysis.VisualBasic.Workspaces": "2.9.0" - }, - "runtime": { - "lib/netstandard2.0/Buildalyzer.Workspaces.dll": { - "assemblyVersion": "2.2.0.0", - "fileVersion": "2.2.0.0" - } - } - }, - "Microsoft.Build/15.8.166": { - "dependencies": { - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Win32.Registry": "4.3.0", - "System.Collections.Immutable": "1.5.0", - "System.Diagnostics.TraceSource": "4.0.0", - "System.IO.Compression": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", - "System.Runtime.Loader": "4.0.0", - "System.Security.Principal.Windows": "4.3.0", - "System.Text.Encoding.CodePages": "4.4.0", - "System.Threading.Tasks.Dataflow": "4.6.0" - }, - "runtime": { - "lib/netcoreapp2.1/Microsoft.Build.dll": { - "assemblyVersion": "15.1.0.0", - "fileVersion": "15.8.166.59604" - } - } - }, - "Microsoft.Build.Framework/15.8.166": { - "dependencies": { - "System.Runtime.Serialization.Primitives": "4.1.1", - "System.Threading.Thread": "4.3.0" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Build.Framework.dll": { - "assemblyVersion": "15.1.0.0", - "fileVersion": "15.8.166.59604" - } - } - }, - "Microsoft.Build.Tasks.Core/15.8.166": { - "dependencies": { - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Build.Utilities.Core": "15.8.166", - "Microsoft.Win32.Registry": "4.3.0", - "System.CodeDom": "4.4.0", - "System.Collections.Immutable": "1.5.0", - "System.Linq.Parallel": "4.3.0", - "System.Net.Http": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.Writer": "4.0.0", - "System.Threading.Tasks.Dataflow": "4.6.0" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Build.Tasks.Core.dll": { - "assemblyVersion": "15.1.0.0", - "fileVersion": "15.8.166.59604" - } - } - }, - "Microsoft.Build.Utilities.Core/15.8.166": { - "dependencies": { - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Win32.Registry": "4.3.0", - "System.Collections.Immutable": "1.5.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", - "System.Text.Encoding.CodePages": "4.4.0" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll": { - "assemblyVersion": "15.1.0.0", - "fileVersion": "15.8.166.59604" - } - } - }, - "Microsoft.CodeAnalysis.Analyzers/2.6.1": {}, - "Microsoft.CodeAnalysis.Common/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.Analyzers": "2.6.1", - "System.AppContext": "4.3.0", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Collections.Immutable": "1.5.0", - "System.Console": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.FileVersionInfo": "4.3.0", - "System.Diagnostics.StackTrace": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO.Compression": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.CodePages": "4.4.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0", - "System.Threading.Tasks.Parallel": "4.3.0", - "System.Threading.Thread": "4.3.0", - "System.ValueTuple": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0", - "System.Xml.XPath.XDocument": "4.3.0", - "System.Xml.XmlDocument": "4.3.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.CSharp/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.Common": "2.9.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.CSharp": "2.9.0", - "Microsoft.CodeAnalysis.Workspaces.Common": "2.9.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.Common": "2.9.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.VisualBasic": "2.9.0", - "Microsoft.CodeAnalysis.Workspaces.Common": "2.9.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.Common": "2.9.0", - "System.Composition": "1.0.31", - "System.Diagnostics.Contracts": "4.3.0", - "System.Linq.Parallel": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading.Tasks.Parallel": "4.3.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.Workspaces.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CSharp/4.0.1": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "Microsoft.DotNet.PlatformAbstractions/2.1.0": { - "dependencies": { - "System.AppContext": "4.3.0", - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.DotNet.PlatformAbstractions.dll": { - "assemblyVersion": "2.1.0.0", - "fileVersion": "2.1.0.0" - } - } - }, - "Microsoft.Extensions.Configuration/2.1.1": { - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { - "dependencies": { - "Microsoft.Extensions.Primitives": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Configuration.Binder/2.1.1": { - "dependencies": { - "Microsoft.Extensions.Configuration": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.DependencyModel/2.1.0": { - "dependencies": { - "Microsoft.DotNet.PlatformAbstractions": "2.1.0", - "Newtonsoft.Json": "9.0.1", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Linq": "4.3.0" - }, - "runtime": { - "lib/netstandard1.6/Microsoft.Extensions.DependencyModel.dll": { - "assemblyVersion": "2.1.0.0", - "fileVersion": "2.1.0.0" - } - } - }, - "Microsoft.Extensions.Logging/2.1.1": { - "dependencies": { - "Microsoft.Extensions.Configuration.Binder": "2.1.1", - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", - "Microsoft.Extensions.Logging.Abstractions": "2.1.1", - "Microsoft.Extensions.Options": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Logging.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Logging.Abstractions/2.1.1": { - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Options/2.1.1": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", - "Microsoft.Extensions.Primitives": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Options.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Primitives/2.1.1": { - "dependencies": { - "System.Memory": "4.5.1", - "System.Runtime.CompilerServices.Unsafe": "4.5.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.NETCore.App/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetHostPolicy": "2.1.5", - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "NETStandard.Library": "2.0.3", - "runtime.osx-x64.Microsoft.NETCore.App": "2.1.5" - } - }, - "Microsoft.NETCore.DotNetAppHost/2.1.5": { - "dependencies": { - "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost": "2.1.5" - } - }, - "Microsoft.NETCore.DotNetHostPolicy/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetHostResolver": "2.1.5", - "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy": "2.1.5" - } - }, - "Microsoft.NETCore.DotNetHostResolver/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetAppHost": "2.1.5", - "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver": "2.1.5" - } - }, - "Microsoft.NETCore.Platforms/2.1.1": {}, - "Microsoft.NETCore.Targets/2.0.0": {}, - "Microsoft.Win32.Primitives/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "Microsoft.Win32.Registry/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - } - }, - "MSBuild.StructuredLogger/2.0.11": { - "dependencies": { - "Microsoft.Build": "15.8.166", - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Build.Tasks.Core": "15.8.166", - "Microsoft.Build.Utilities.Core": "15.8.166" - }, - "runtime": { - "lib/netstandard2.0/StructuredLogger.dll": { - "assemblyVersion": "2.0.11.0", - "fileVersion": "2.0.11.26510" - } - } - }, - "MsBuildPipeLogger.Server/1.1.2": { - "dependencies": { - "Microsoft.Build": "15.8.166", - "NETStandard.Library": "2.0.3" - }, - "runtime": { - "lib/netstandard1.5/MsBuildPipeLogger.Server.dll": { - "assemblyVersion": "1.1.2.0", - "fileVersion": "1.1.2.0" - } - } - }, - "NETStandard.Library/2.0.3": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1" - } - }, - "Newtonsoft.Json/9.0.1": { - "dependencies": { - "Microsoft.CSharp": "4.0.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Serialization.Primitives": "4.1.1", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/Newtonsoft.Json.dll": { - "assemblyVersion": "9.0.0.0", - "fileVersion": "9.0.1.19813" - } - } - }, - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.native.System/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0" - } - }, - "runtime.native.System.IO.Compression/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0" - } - }, - "runtime.native.System.Net.Http/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0" - } - }, - "runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "dependencies": { - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" - } - }, - "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "dependencies": { - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.osx-x64.Microsoft.NETCore.App/2.1.5": { - "runtime": { - "runtimes/osx-x64/lib/netcoreapp2.1/Microsoft.CSharp.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/Microsoft.VisualBasic.dll": { - "assemblyVersion": "10.0.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/Microsoft.Win32.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/Microsoft.Win32.Registry.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/SOS.NETCore.dll": { - "assemblyVersion": "1.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.AppContext.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Buffers.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.Concurrent.dll": { - "assemblyVersion": "4.0.14.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.NonGeneric.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.Specialized.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.Annotations.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.DataAnnotations.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.EventBasedAsync.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.Primitives.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.TypeConverter.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Configuration.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Console.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Core.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Data.Common.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Data.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Contracts.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Debug.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll": { - "assemblyVersion": "4.0.3.1", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.FileVersionInfo.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Process.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.StackTrace.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.TextWriterTraceListener.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Tools.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.TraceSource.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Tracing.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Drawing.Primitives.dll": { - "assemblyVersion": "4.2.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Drawing.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Dynamic.Runtime.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Globalization.Calendars.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Globalization.Extensions.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Globalization.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Compression.Brotli.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Compression.FileSystem.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Compression.ZipFile.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Compression.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.AccessControl.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.DriveInfo.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.Watcher.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.IsolatedStorage.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.MemoryMappedFiles.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Pipes.AccessControl.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Pipes.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.UnmanagedMemoryStream.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Linq.Expressions.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Linq.Parallel.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Linq.Queryable.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Linq.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Memory.dll": { - "assemblyVersion": "4.1.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Http.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.HttpListener.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Mail.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.NameResolution.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.NetworkInformation.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Ping.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Requests.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Security.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.ServicePoint.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Sockets.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebClient.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebHeaderCollection.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebProxy.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebSockets.Client.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebSockets.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Numerics.Vectors.dll": { - "assemblyVersion": "4.1.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Numerics.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.ObjectModel.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Private.DataContractSerialization.dll": { - "assemblyVersion": "4.1.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Private.Uri.dll": { - "assemblyVersion": "4.0.5.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Private.Xml.Linq.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Private.Xml.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.DispatchProxy.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Emit.ILGeneration.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Emit.Lightweight.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Emit.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Extensions.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.TypeExtensions.dll": { - "assemblyVersion": "4.1.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Resources.Reader.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Resources.ResourceManager.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Resources.Writer.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.CompilerServices.VisualC.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Extensions.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Handles.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.RuntimeInformation.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.WindowsRuntime.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Loader.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Numerics.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Formatters.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Json.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Primitives.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Xml.dll": { - "assemblyVersion": "4.1.4.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.AccessControl.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Claims.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Algorithms.dll": { - "assemblyVersion": "4.3.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Cng.dll": { - "assemblyVersion": "4.3.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Csp.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Encoding.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.OpenSsl.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.X509Certificates.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { - "assemblyVersion": "4.1.1.1", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Principal.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.SecureString.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.ServiceModel.Web.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.ServiceProcess.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Text.Encoding.Extensions.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Text.Encoding.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Text.RegularExpressions.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Overlapped.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Tasks.Dataflow.dll": { - "assemblyVersion": "4.6.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Tasks.Extensions.dll": { - "assemblyVersion": "4.3.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Tasks.Parallel.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Tasks.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Thread.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.ThreadPool.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Timer.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Transactions.Local.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Transactions.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.ValueTuple.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Web.HttpUtility.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Web.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Windows.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.Linq.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.ReaderWriter.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.Serialization.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XDocument.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XPath.XDocument.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XPath.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XmlDocument.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XmlSerializer.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/System.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/WindowsBase.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/mscorlib.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/osx-x64/lib/netcoreapp2.1/netstandard.dll": { - "assemblyVersion": "2.0.0.0", - "fileVersion": "0.0.0.0" - } - }, - "native": { - "runtimes/osx-x64/native/System.Globalization.Native.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.IO.Compression.Native.a": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.IO.Compression.Native.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.Native.a": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.Native.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.Net.Http.Native.a": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.Net.Http.Native.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.Net.Security.Native.a": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.Net.Security.Native.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.Private.CoreLib.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.Security.Cryptography.Native.Apple.a": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.Security.Cryptography.Native.Apple.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.Security.Cryptography.Native.OpenSsl.a": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/System.Security.Cryptography.Native.OpenSsl.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/libclrjit.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/libcoreclr.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/libdbgshim.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/libmscordaccore.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/libmscordbi.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/libsos.dylib": { - "fileVersion": "0.0.0.0" - }, - "runtimes/osx-x64/native/sosdocsunix.txt": { - "fileVersion": "0.0.0.0" - } - } - }, - "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost/2.1.5": { - "native": { - "runtimes/osx-x64/native/apphost": { - "fileVersion": "0.0.0.0" - } - } - }, - "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetHostResolver": "2.1.5" - }, - "native": { - "runtimes/osx-x64/native/libhostpolicy.dylib": { - "fileVersion": "0.0.0.0" - } - } - }, - "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetAppHost": "2.1.5" - }, - "native": { - "runtimes/osx-x64/native/libhostfxr.dylib": { - "fileVersion": "0.0.0.0" - } - } - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {}, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "System.AppContext/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Buffers/4.3.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.CodeDom/4.4.0": { - "runtime": { - "lib/netstandard2.0/System.CodeDom.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.25519.3" - } - } - }, - "System.Collections/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Collections.Concurrent/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Collections.Immutable/1.5.0": { - "runtime": { - "lib/netstandard2.0/System.Collections.Immutable.dll": { - "assemblyVersion": "1.2.3.0", - "fileVersion": "4.6.26515.6" - } - } - }, - "System.Composition/1.0.31": { - "dependencies": { - "System.Composition.AttributedModel": "1.0.31", - "System.Composition.Convention": "1.0.31", - "System.Composition.Hosting": "1.0.31", - "System.Composition.Runtime": "1.0.31", - "System.Composition.TypedParts": "1.0.31" - } - }, - "System.Composition.AttributedModel/1.0.31": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.AttributedModel.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Composition.Convention/1.0.31": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Composition.AttributedModel": "1.0.31", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.Convention.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Composition.Hosting/1.0.31": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Composition.Runtime": "1.0.31", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.Hosting.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Composition.Runtime/1.0.31": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.Runtime.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Composition.TypedParts/1.0.31": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Composition.AttributedModel": "1.0.31", - "System.Composition.Hosting": "1.0.31", - "System.Composition.Runtime": "1.0.31", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.TypedParts.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Console/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.IO": "4.3.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Diagnostics.Contracts/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.Debug/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.DiagnosticSource/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Diagnostics.FileVersionInfo/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - } - }, - "System.Diagnostics.StackTrace/4.3.0": { - "dependencies": { - "System.IO.FileSystem": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.Tools/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.TraceSource/4.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0" - } - }, - "System.Diagnostics.Tracing/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Dynamic.Runtime/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Globalization/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Globalization.Calendars/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Globalization": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Globalization.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - } - }, - "System.IO/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.Compression/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Buffers": "4.3.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.IO.Compression": "4.3.0" - } - }, - "System.IO.FileSystem/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.IO": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.FileSystem.Primitives/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Linq/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Linq.Expressions/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Emit.Lightweight": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Linq.Parallel/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Memory/4.5.1": {}, - "System.Net.Http/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.DiagnosticSource": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Extensions": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Net.Primitives/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.ObjectModel/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Reflection/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit/4.3.0": { - "dependencies": { - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit.ILGeneration/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit.Lightweight/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Metadata/1.6.0": { - "runtime": { - "lib/netstandard2.0/System.Reflection.Metadata.dll": { - "assemblyVersion": "1.4.3.0", - "fileVersion": "4.6.26515.6" - } - } - }, - "System.Reflection.Primitives/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.TypeExtensions/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.ResourceManager/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.Writer/4.0.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Runtime/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0" - } - }, - "System.Runtime.CompilerServices.Unsafe/4.5.1": { - "runtime": { - "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" - } - } - }, - "System.Runtime.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.Handles/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.InteropServices/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0" - } - }, - "System.Runtime.Loader/4.0.0": { - "dependencies": { - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.Numerics/4.3.0": { - "dependencies": { - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Runtime.Serialization.Primitives/4.1.1": { - "dependencies": { - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Security.Claims/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Security.Principal": "4.3.0" - } - }, - "System.Security.Cryptography.Algorithms/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.Apple": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Cng/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Security.Cryptography.Csp/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Security.Cryptography.Encoding/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.OpenSsl/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Primitives/4.3.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Security.Cryptography.X509Certificates/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Calendars": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Cng": "4.3.0", - "System.Security.Cryptography.Csp": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Principal/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Security.Principal.Windows/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.Win32.Primitives": "4.3.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Claims": "4.3.0", - "System.Security.Principal": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Text.Encoding/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Text.Encoding.CodePages/4.4.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/System.Text.Encoding.CodePages.dll": { - "assemblyVersion": "4.1.0.0", - "fileVersion": "4.6.25519.3" - } - } - }, - "System.Text.Encoding.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Text.RegularExpressions/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Threading/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Threading.Tasks.Dataflow/4.6.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks.Extensions/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks.Parallel/4.3.0": { - "dependencies": { - "System.Collections.Concurrent": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Thread/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.ValueTuple/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Xml.ReaderWriter/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0" - } - }, - "System.Xml.XDocument/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XmlDocument/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XPath/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XPath.XDocument/4.3.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0", - "System.Xml.XPath": "4.3.0" - } - } - } - }, - "libraries": { - "mpc/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "Buildalyzer/2.2.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-5nO0Lkv0zcB5Ck8AaO9eXnRbAfVAB45QQ0ZGCAfPwRxqlqn7WFkn6ESL8EWD8jgTdodtIE8KpZFXm8zb1jIYBw==", - "path": "buildalyzer/2.2.0", - "hashPath": "buildalyzer.2.2.0.nupkg.sha512" - }, - "Buildalyzer.Logger/2.2.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-490kgGa+07Jwdsq0jqxUSG2QjVg65MJHMEI1/D/7pOjNY4/Zc5DJTKxuL1eJUFf+rzB7NtZKDV0IGABlH8Ihmw==", - "path": "buildalyzer.logger/2.2.0", - "hashPath": "buildalyzer.logger.2.2.0.nupkg.sha512" - }, - "Buildalyzer.Workspaces/2.2.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-iItCd3jnCUCXryBbWPpRqzPco2vqWobEAoyXelVSfQ+xkZmEwRGYtjjxa+14qo9sNve/a+LTeYknWG/dyRIQOg==", - "path": "buildalyzer.workspaces/2.2.0", - "hashPath": "buildalyzer.workspaces.2.2.0.nupkg.sha512" - }, - "Microsoft.Build/15.8.166": { - "type": "package", - "serviceable": true, - "sha512": "sha512-MH3/LhMZZEAkWyMxUkRmNoMqO4A4XhXz7c1OywTKs9n0bvrCPD4S5k7p0YfyEpSY4JVIzbUFvHCR/uaFXtACEA==", - "path": "microsoft.build/15.8.166", - "hashPath": "microsoft.build.15.8.166.nupkg.sha512" - }, - "Microsoft.Build.Framework/15.8.166": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Bw7ebVvOQQC5zgM0AsyZFB23aJvEISa1vABkWCgjGueopq+fG6JDhwHeAXloLcwtQldvDobivLDFw6/8QDN9cg==", - "path": "microsoft.build.framework/15.8.166", - "hashPath": "microsoft.build.framework.15.8.166.nupkg.sha512" - }, - "Microsoft.Build.Tasks.Core/15.8.166": { - "type": "package", - "serviceable": true, - "sha512": "sha512-NCTTEPkSUkxE7dZiVfnaSzjEMs7AiQYJ9hVHzGyreQzZFrR9fajwBc2KAjjH3pS8nBcx/rmjH9T0b5ZMOJviEw==", - "path": "microsoft.build.tasks.core/15.8.166", - "hashPath": "microsoft.build.tasks.core.15.8.166.nupkg.sha512" - }, - "Microsoft.Build.Utilities.Core/15.8.166": { - "type": "package", - "serviceable": true, - "sha512": "sha512-AZ7pSCGDeRlBm3TIOrnSOCWB2+Wea4rL7sMsinyChF3NJUAb//lF0fUyZfjbukE5eCqba17gw0FnbMjnNgtecw==", - "path": "microsoft.build.utilities.core/15.8.166", - "hashPath": "microsoft.build.utilities.core.15.8.166.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.Analyzers/2.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-x9MfOXfTj/tdgm3rV15niL/J0T36ZPiVrIfO3Tax9Lv4fLGnVZJXSQatZezJ+tX+YYk2ZAPbq87vnSFwh1Je9w==", - "path": "microsoft.codeanalysis.analyzers/2.6.1", - "hashPath": "microsoft.codeanalysis.analyzers.2.6.1.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.Common/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-gWTphgR8eHu39XcrfhxE8WwD35C/vaR06QiKM1TaCbjmgPafZ9G3TY7eeT44BfHVMQEGYZmjV5NZNQLm2F7ZTQ==", - "path": "microsoft.codeanalysis.common/2.9.0", - "hashPath": "microsoft.codeanalysis.common.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.CSharp/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-RNACUadFXlT3/Y4XIVI1+g3hpGgToYJyVTRBVFmhE8gtRA2snM5dPKv2e4Qz7K/3Ap7Ky+YgIKCO4YsmWqal/A==", - "path": "microsoft.codeanalysis.csharp/2.9.0", - "hashPath": "microsoft.codeanalysis.csharp.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Kis5VedBJjtdlYlI9erCAnqz2fVgRWLHCDYMIKRXsD4CVWrwrm8sCq3qmY9Drmit85StquRPFw5z8YMhDCB7RQ==", - "path": "microsoft.codeanalysis.csharp.workspaces/2.9.0", - "hashPath": "microsoft.codeanalysis.csharp.workspaces.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4nxVFgxywDHttOSLh9z36QGUdsTFz80A/M+qc2bgZ3GBuTR9+FeDPIap8DQrBcDZWO1Kb+0QC6b65jZvgcZP5g==", - "path": "microsoft.codeanalysis.visualbasic/2.9.0", - "hashPath": "microsoft.codeanalysis.visualbasic.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-dL9+IJPk7mZ9LFY0saaXk1adKbEDhHe+U+1fG4F7o4NsvZqcOS/6sRcEWl253gi2ZoFoonDDB3sffhrlg1ITIQ==", - "path": "microsoft.codeanalysis.visualbasic.workspaces/2.9.0", - "hashPath": "microsoft.codeanalysis.visualbasic.workspaces.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-KGkaumh6O0gS0RBWHHIfx34u5sm7vhgTDaFOcKm60tELh6Jy6OYNtdB/Iyefvvwb+PaZIcUg+9hbGBQ1GdCHqA==", - "path": "microsoft.codeanalysis.workspaces.common/2.9.0", - "hashPath": "microsoft.codeanalysis.workspaces.common.2.9.0.nupkg.sha512" - }, - "Microsoft.CSharp/4.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CLd4nvEjFlopxG7O6y4d2h46ZP+pfBw0cT/7WuZpMYduIthUO8dEJzfq8l+WJm8nOEg3LJcdKu8KG8N28vomBA==", - "path": "microsoft.csharp/4.0.1", - "hashPath": "microsoft.csharp.4.0.1.nupkg.sha512" - }, - "Microsoft.DotNet.PlatformAbstractions/2.1.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ae/c3pX6vhCs17caUrVZrb8n9gDTzr6usnZKZEHla7uy7ZcjQLfm09gS7m+IneVtmGwXm5hcSDa5qwqwLaH2Ug==", - "path": "microsoft.dotnet.platformabstractions/2.1.0", - "hashPath": "microsoft.dotnet.platformabstractions.2.1.0.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-1JaydycXzbfAExlsD7XIWykzVnU/wZM86KzrHyGlXuxqnqzcWSXLJn4Ejn8bDnq07CEJNZ+GjsxWKlJ8kFfnvQ==", - "path": "microsoft.extensions.configuration/2.1.1", - "hashPath": "microsoft.extensions.configuration.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-9EMhOWU2eOQOtMIJ+vfwKJpnLRc1Wl3vXu8qXeevA91cSY4j3WvArmF7ApGtJwa7yKewJTvlQlBSn9OSnLFg6Q==", - "path": "microsoft.extensions.configuration.abstractions/2.1.1", - "hashPath": "microsoft.extensions.configuration.abstractions.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.Binder/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-t7KFAv6AxyUsZj9QN8FAbusg+X5baCELl+XtscyuP1IGUv5UctyY7/rNZLyiKaV7HhAcDQ1zC5ZQNQQFn6JpAA==", - "path": "microsoft.extensions.configuration.binder/2.1.1", - "hashPath": "microsoft.extensions.configuration.binder.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PW1596sF97gpIc1JuUuYvTmeLfeqC5whbWPsWgJhN0fdwz683him3b/HB0dqhFesVssOjnnA0fEz4+S0gUeBqA==", - "path": "microsoft.extensions.dependencyinjection.abstractions/2.1.1", - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyModel/2.1.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3KPT6CLH0VEGr2um9aG1rYTmqfMVlkRuueFpN6AxeIKpcMA4OVHf4aNpgYXZ6oF+x4uh9VhK/66FgPCd1mMlnQ==", - "path": "microsoft.extensions.dependencymodel/2.1.0", - "hashPath": "microsoft.extensions.dependencymodel.2.1.0.nupkg.sha512" - }, - "Microsoft.Extensions.Logging/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-x4/RzeReQSIi4nVpOjXEySm/xUSr6lBjuecdYnlUboWxbLSm2j3vhFV5OLGRp3gfte3cRMdysMNa/wyZN0t/Tw==", - "path": "microsoft.extensions.logging/2.1.1", - "hashPath": "microsoft.extensions.logging.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Logging.Abstractions/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QWFWKrdeoDSEr8nVJaBAVDMj24wnh9clGzDNmMdgHHRsOIwTUMeh4XljeZXJhIKPT00jWuzwEzn3uNxOtO4cYg==", - "path": "microsoft.extensions.logging.abstractions/2.1.1", - "hashPath": "microsoft.extensions.logging.abstractions.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Options/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-j0zOfTt1Qm+JDW2m+6Q/aj1m4C8+onudUu4ls/fN69VxruZkMWmX1bPKkbkYIPNNxJsf4k7FOkVq5o1vEFq9pQ==", - "path": "microsoft.extensions.options/2.1.1", - "hashPath": "microsoft.extensions.options.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Primitives/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Svz25/egj1TsNL4118jyMqkhDiu0l8QYWq2p52P4BBN0GbqwR18ZRIctSP5TTDJy0m0EFC8aB2FOVjGtvEGWSA==", - "path": "microsoft.extensions.primitives/2.1.1", - "hashPath": "microsoft.extensions.primitives.2.1.1.nupkg.sha512" - }, - "Microsoft.NETCore.App/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-oTQd5w0qQp32QSKPE6TqhhcybkkTKqtn4YVnNsYHwFR28s1kUAI/xg+hmKwF/G+u4vUjgy7Y7ghC0cIwRP5wdg==", - "path": "microsoft.netcore.app/2.1.5", - "hashPath": "microsoft.netcore.app.2.1.5.nupkg.sha512" - }, - "Microsoft.NETCore.DotNetAppHost/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ir7AI1ywRriX1fLTLYOyiDTYSj+zpdAfTBFH0dLwvLvC8obU0EYnmrjTzbYJ8GSnza1H1Rv3Lo/lJBSccmTGMA==", - "path": "microsoft.netcore.dotnetapphost/2.1.5", - "hashPath": "microsoft.netcore.dotnetapphost.2.1.5.nupkg.sha512" - }, - "Microsoft.NETCore.DotNetHostPolicy/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fkTeZ7G1Tf0aT+P1bMyn/qJXByFIaATNAt0DKrZ3nC7jMRAWBHJifOrOe5XnGvvc0YzqVLmHARYtzSG00/9NVw==", - "path": "microsoft.netcore.dotnethostpolicy/2.1.5", - "hashPath": "microsoft.netcore.dotnethostpolicy.2.1.5.nupkg.sha512" - }, - "Microsoft.NETCore.DotNetHostResolver/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/rPHOsRWubviDEGlxQcNKtJ7G6ML0F/Pg5vG1E+lgfdmoyLRKqrE3ZjVlYCxS18ExZGekBq9LEVb+eOKMxlJEA==", - "path": "microsoft.netcore.dotnethostresolver/2.1.5", - "hashPath": "microsoft.netcore.dotnethostresolver.2.1.5.nupkg.sha512" - }, - "Microsoft.NETCore.Platforms/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-iXcQc19h5oECLVokgt6hvLOOPP/d9kYQh9miF9zbcxGVZenuTN9IMB+f+gP26/+Rc5r2KLES5Of45Qdqo0NJeA==", - "path": "microsoft.netcore.platforms/2.1.1", - "hashPath": "microsoft.netcore.platforms.2.1.1.nupkg.sha512" - }, - "Microsoft.NETCore.Targets/2.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-mJnCMoBfWL0lxxlBFJ/8cZKTfPpI82TekZkUqvSCBtunUaaqr2LVeWl1zQYdanAdk4Ddf1HCwb8+DNYaNFBk1w==", - "path": "microsoft.netcore.targets/2.0.0", - "hashPath": "microsoft.netcore.targets.2.0.0.nupkg.sha512" - }, - "Microsoft.Win32.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-d2YDDsTDnU/+ERiLxkHMviiQlclT6/G2iddWPPH4xLbS0P0+RYcqOZxqauVHX6s3Uv2cUkL226qXKpfn/fL98Q==", - "path": "microsoft.win32.primitives/4.3.0", - "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512" - }, - "Microsoft.Win32.Registry/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-OHAvcu6tVh40PncTYFkpLItsw9O8sUc59C4eqSqEd+U5rY7t0+u7Xoi6Mw2QOfvPJ2HUJlwIEVqxklDIfn757Q==", - "path": "microsoft.win32.registry/4.3.0", - "hashPath": "microsoft.win32.registry.4.3.0.nupkg.sha512" - }, - "MSBuild.StructuredLogger/2.0.11": { - "type": "package", - "serviceable": true, - "sha512": "sha512-LYK6MOfPUEE/u10OepnvFOjFy12YWOjtXXIh3K0RtUzdjatIHZSAjU8MKPuGcegi06iblNH2Rlc78vc2AVokhg==", - "path": "msbuild.structuredlogger/2.0.11", - "hashPath": "msbuild.structuredlogger.2.0.11.nupkg.sha512" - }, - "MsBuildPipeLogger.Server/1.1.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4gxSIkc4mMpHemehqDAZzGdKAhGJAxyt+56SUi6B4X2FWijojXzcIr7illkuEA7Ex05eoa5Cx4pr6d1hn4m8lg==", - "path": "msbuildpipelogger.server/1.1.2", - "hashPath": "msbuildpipelogger.server.1.1.2.nupkg.sha512" - }, - "NETStandard.Library/2.0.3": { - "type": "package", - "serviceable": true, - "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", - "path": "netstandard.library/2.0.3", - "hashPath": "netstandard.library.2.0.3.nupkg.sha512" - }, - "Newtonsoft.Json/9.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", - "path": "newtonsoft.json/9.0.1", - "hashPath": "newtonsoft.json.9.0.1.nupkg.sha512" - }, - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-+HIVh+8SOZS56Hqm/5wKUEAiz3BgjQRTQ6OG4K3FwSXT3JckhZbH4A/Xdwb7Z/GPQW4HocnFbq5CSuVXwy6ylg==", - "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-tRFXi8EvFI+yB0DBDu52piUGKBlNebhT1swNbiTvUeZnkCuabY41eJnQaHESk1PGTiHs0Lh2FSwZYG5cUCnrrw==", - "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-DPnni2nk3x2Iz/6Do1tme5F8sM4Jo5xUNsHJxlRJ686v/WcFeuTR8r72Bwr/8iJxRJepn/ke/XLHphnWme1OpQ==", - "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.native.System/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-6l0Dkix8bgJVwfFQg1yPNBa3J3hmOdSuZLYI06QlheipqU0hT2XCfN8otCPhD4M2Aq+Xhy1B5+9Jr9WWhfdusw==", - "path": "runtime.native.system/4.3.0", - "hashPath": "runtime.native.system.4.3.0.nupkg.sha512" - }, - "runtime.native.System.IO.Compression/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-FBMFTXHy9kGuYs/bj62XyVrQB44HZcZ1fTj3Iv04eFGVcg65vac5o9Rv3hdYqNPmWK/DVgLUV8aeeTzcaqB5hg==", - "path": "runtime.native.system.io.compression/4.3.0", - "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" - }, - "runtime.native.System.Net.Http/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-g8FnRWqvKQwR0pjrB9bG1cLGSR4EFAu+7U34Q+ptucNLvBfWEAWcm54vrZCMAT6H9VU6VfDruGHA4nc1gu1i2w==", - "path": "runtime.native.system.net.http/4.3.0", - "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512" - }, - "runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-cgjvRwk6uDocZbujiZcZ90OYnErFqpN26H56Xfe8nnZIvErpRHe0RxP16DsLzY5dBuVqChNb+hLN7R8ixk1xVg==", - "path": "runtime.native.system.security.cryptography.apple/4.3.0", - "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" - }, - "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-uvqanMQDxKS+7ADCRVzNqoa9IQuxuBOVrtWvNNuNyNe/Gb03SxR9QgoRKKvIrvwMUGrudNDhrEITDRGWLIXqGA==", - "path": "runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-6uH/bLrHHChHf1v+ZZCnVjKiaeCFOjd7RUBG4/MqBBRheByueBEGTvPrv2hSrpxPrwYZuNACAmYanbB7MtcflA==", - "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7fcf887lmwAHbWfCeQUVA/A8PaEkj0nwYDqUlytKP78+BJUjbVWTJqjFkM+jBeTCOElrt1RzrH0Hil+1tNLVBw==", - "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.osx-x64.Microsoft.NETCore.App/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-DOaNPGUlBQ/1yzSPXx0+EaXsaqIUWfYY1kd0KdpZ6NxOOajEBbfZsqJvBGLV/FcHYXfhoppD5RNrRgPfZq59Jw==", - "path": "runtime.osx-x64.microsoft.netcore.app/2.1.5", - "hashPath": "runtime.osx-x64.microsoft.netcore.app.2.1.5.nupkg.sha512" - }, - "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-lK/1rDguZwnSLBYVxoAJypmPzvP59HWstepjY9LzhTtBBS2XyG9GyvzpOBk3IsV2TNvgPaJhkozZvxChklDV6Q==", - "path": "runtime.osx-x64.microsoft.netcore.dotnetapphost/2.1.5", - "hashPath": "runtime.osx-x64.microsoft.netcore.dotnetapphost.2.1.5.nupkg.sha512" - }, - "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-GvSNZ5XxcPFDIyvEprycWtsRQyDczaSQVGcuhw3B4FWNIXLzFLrs8dqraoAbP8+zC8A2vVEl4x9eqJ/nkrRA3g==", - "path": "runtime.osx-x64.microsoft.netcore.dotnethostpolicy/2.1.5", - "hashPath": "runtime.osx-x64.microsoft.netcore.dotnethostpolicy.2.1.5.nupkg.sha512" - }, - "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4B2HOalQrBa+YUTd2gWXMvQJSt4yRhJVHbGHtVOc9Wmhq/PxhDhcuiN8XBfuCl9NUcTdxL95KYFehoNWCRTqeA==", - "path": "runtime.osx-x64.microsoft.netcore.dotnethostresolver/2.1.5", - "hashPath": "runtime.osx-x64.microsoft.netcore.dotnethostresolver.2.1.5.nupkg.sha512" - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fuh5u2mOjEjHx2bQHHZTryMCWNOY9N7I0rCN3KldGRU6brnMOuZRTB3uh6AYK/9eioywbNerYDZAL6M3C4c7MQ==", - "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", - "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-W3mGmFCN5ei6jegKyBX8eMB+OEMAzcYvZBCocfrwOBMBsyv0YB9XuxZ9xxqsQJ71T4LGImi8+A8ntNkdwk4OhQ==", - "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-nwK59n0Ink7MhkZKGxzAOdbxniOBQEbfV3fqvE0Q/AcuenNkdNlu6fbeeGWVzJWeliFIgzk1Rp/hCR/aAbs32g==", - "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fSj8+HzPXcEnBA+svDivS1/dhfwhG1LgQvyN7Jxvaqt97aMfGC1mdlMVUEoS+5awAHIZtmi8GZWtq+rXK5zaUw==", - "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-xtUCr/NeowVrQ3e8uWRzppefx6yBvXYPKoHYjFaZKyO6HVZ7yFd7PM6P/QwAKejYRnlZElOL01lz5arTfKNeDA==", - "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Zja3A4KNQzxx07aAwgNoD55qGAntIwaRruMdRZaUNo2PB8czzPJE9GMFR/6im2rMoriWfxR+G90gXdQUx7v8KQ==", - "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "System.AppContext/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-uEIyp9GUT2U5UD4KjUU2bIdmBFuRXGn0VeAbWZvqqfSdXfyADZQnmfCVxc18BbXpr4Axum0MY/gtQhiWroNcNw==", - "path": "system.appcontext/4.3.0", - "hashPath": "system.appcontext.4.3.0.nupkg.sha512" - }, - "System.Buffers/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Mm9RDuBQ6CIi0BP75sMq0boRBmztwc1MGfHSoeXdoOyJnyvG6Dri9GE1mNebbVWEkxNRe4CbXHTJYyKq/3WEmQ==", - "path": "system.buffers/4.3.0", - "hashPath": "system.buffers.4.3.0.nupkg.sha512" - }, - "System.CodeDom/4.4.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-E/lvSfMFPtNflAgdM6AuPU8JbZdqdSoGpU66G7SrduCqdrFyPflaqqV4gN2d0hrCBpu92HaoqpUP5d+g9Itcxw==", - "path": "system.codedom/4.4.0", - "hashPath": "system.codedom.4.4.0.nupkg.sha512" - }, - "System.Collections/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/RO6DxDIzcceka4RmnJ6P8anXxdkmdRGKpliRZKVB84y4LzpqMMWTLAGRQXLc5ET15z1Xr7YaNZx1rbWuqRVcg==", - "path": "system.collections/4.3.0", - "hashPath": "system.collections.4.3.0.nupkg.sha512" - }, - "System.Collections.Concurrent/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fu4SvisargPpI4z2+69ocBNmQLS98WyvsA1dP35c2dxRJnEd/+cSmGnv/GSNxbIs7wtveGB8tzFLYABPFkX7Kg==", - "path": "system.collections.concurrent/4.3.0", - "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" - }, - "System.Collections.Immutable/1.5.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-erLSnZLBCA8EKIE2bKtXynjWBWSoMlmCFrOOYN+sPKCeYd3oGj9h8hqRPODtsRlPANkOW7L8tEQlEadHbUXC6A==", - "path": "system.collections.immutable/1.5.0", - "hashPath": "system.collections.immutable.1.5.0.nupkg.sha512" - }, - "System.Composition/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CbzwbjxT04VU+JzQuPOYfUCybzBtbGZdqGJS9482dDBoBHbt3Zz0QAJ/Cjzpmq5xdL+hhW4FYWf/3wq2OCVXgg==", - "path": "system.composition/1.0.31", - "hashPath": "system.composition.1.0.31.nupkg.sha512" - }, - "System.Composition.AttributedModel/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-rhZeg+i71Q0MZjYIdIpyfzKM7E9EsvytXxq+CaZ/vWCV09ZfMnb0MOEkfM4wfKhTo7Xoo3TJkkfTLx8kUCltkg==", - "path": "system.composition.attributedmodel/1.0.31", - "hashPath": "system.composition.attributedmodel.1.0.31.nupkg.sha512" - }, - "System.Composition.Convention/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-9GFJIdwg0zr8s2KHVVgVikYfPJ/KntH1D79Z7VzCovUZwDNNq66MMKkLJIOCztXsgDdgYKOp3BAYASRS9EvYGw==", - "path": "system.composition.convention/1.0.31", - "hashPath": "system.composition.convention.1.0.31.nupkg.sha512" - }, - "System.Composition.Hosting/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-KlZ4qkaa1p/U2WKr353XeQ9bjrxBwn9FcD5k9WFEuV1MloDMnTnhUwQU7h1WigvsCYykzoRdnDLq33wnUPwBeg==", - "path": "system.composition.hosting/1.0.31", - "hashPath": "system.composition.hosting.1.0.31.nupkg.sha512" - }, - "System.Composition.Runtime/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-iZH3/g2js6fmV3atN2Ym/o+dM2ZMA1GA0GXc70nhbIqK67L29Lh3YrAWiBlyoOIUjNEggA6L4i++7PSID2wMdQ==", - "path": "system.composition.runtime/1.0.31", - "hashPath": "system.composition.runtime.1.0.31.nupkg.sha512" - }, - "System.Composition.TypedParts/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-H6fLWxFy+cy+YsHRcvUBskvDYkpDdUJky+GkqYvi8B/5cm/KIQ5QVDOLKuul4PHFZ/x0yRacS8CpY3x/PxiBeA==", - "path": "system.composition.typedparts/1.0.31", - "hashPath": "system.composition.typedparts.1.0.31.nupkg.sha512" - }, - "System.Console/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-NXaPmAD2UQOwcXA0CdsTCi1g/BUmuxwwGok2guCrS/pLpAv79v5TQLWYPnUoysNbn3p8v1WLguJHLMa782C5Yw==", - "path": "system.console/4.3.0", - "hashPath": "system.console.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.Contracts/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-clL6acqvIbbx3JYunlkrWV5sP9qGd0sLl612eXrBVVwakTTlMNtvZB5RiC2rU2uYxSnIt2ssUQgA2adrYSqYhA==", - "path": "system.diagnostics.contracts/4.3.0", - "hashPath": "system.diagnostics.contracts.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.Debug/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-j3oXzv/QxCZcBxSIzreks9gAMenRyZTvSntLbDYGWczEhLQX4Ob3ajnXpAC9IXymWI+N4AFV7/pXLPwn+2ItAA==", - "path": "system.diagnostics.debug/4.3.0", - "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.DiagnosticSource/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-wu5+BNFredYlzZEmih3pMlR0ekaWCd9KZ8MPWqIQ4KVKo+RpzuhsIAfteI5OYQ2zSVzg1uOfQBrJ8KFkz+XfRQ==", - "path": "system.diagnostics.diagnosticsource/4.3.0", - "hashPath": "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.FileVersionInfo/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-OEshwk5wkdxtGkFZYSErv6dnUuz0z8C01htylGwOwFnCVFRcrvleBtplMDCk9nMyWP41cbMZGEIBfy7HV1Loug==", - "path": "system.diagnostics.fileversioninfo/4.3.0", - "hashPath": "system.diagnostics.fileversioninfo.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.StackTrace/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-BZY9Q0RiOSp/hp13jXe97aVOgPDzlqOdYdixs5fl/e3K/vz1SoJYDddY8CPE3wH9m043tJ65L8i+WMiPzGxdtQ==", - "path": "system.diagnostics.stacktrace/4.3.0", - "hashPath": "system.diagnostics.stacktrace.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.Tools/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7gcA6FsKiySf+s9PeyenhSuUmxbxrpEDZ+/UcZBUbIu92JR804efdbIy4bEYcHg1htFbhxewu8vIV5pWYhc2Sg==", - "path": "system.diagnostics.tools/4.3.0", - "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.TraceSource/4.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-bGUeY5wiCHYSWbYZS3QjbaQ1hNoJ1RQBQMB3E0Cgh6AH//4rXfXIOHKIW46HDOsTEDoNfvFNDXphL5W5B/XMwQ==", - "path": "system.diagnostics.tracesource/4.0.0", - "hashPath": "system.diagnostics.tracesource.4.0.0.nupkg.sha512" - }, - "System.Diagnostics.Tracing/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7IXKSUQm7wC+beoAINYrIqawpecwtyiM5NKv96whUmWOvg2vPn60WYqLopKbWu3GSPCH/ZJxAiHrS7tYlhb5Dg==", - "path": "system.diagnostics.tracing/4.3.0", - "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" - }, - "System.Dynamic.Runtime/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PyiPySIERuk05CtVuHEQOijQChY4L77ZcUe+fee7lyZxPbU/hlduSfUIXw8XF/T+R1jOIDoOZXEQ+ZoFEgOzYQ==", - "path": "system.dynamic.runtime/4.3.0", - "hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512" - }, - "System.Globalization/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Gp7Z/4kR92caisVDNbXXYdGYZuAECXZGIaG7kAOs3cEM3zVMp078Yn3qVRGzUidYSYEAauQ0hx7mbXEmuimhYA==", - "path": "system.globalization/4.3.0", - "hashPath": "system.globalization.4.3.0.nupkg.sha512" - }, - "System.Globalization.Calendars/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-cr50CLRa9Egfe0Cg2aQPrnLqDpcE794AKTmpgiTIZpz+3N7lN+5yGtNUhTrUbMeSZycoFHTGIEArIlv8J2aX/A==", - "path": "system.globalization.calendars/4.3.0", - "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512" - }, - "System.Globalization.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4OvZWmZyTOaSygNnIdnu/p0zvu+HU9WnoZshyo3wzU5lLqiVa1pli0iY/VegQoJ7NPk5hd0RVxU+XrSOr5aauw==", - "path": "system.globalization.extensions/4.3.0", - "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" - }, - "System.IO/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Ep3xyKDltu0EsCk1BvoWBC7NltwFqRlYCjwKTV7+d4sAH0lVk5P3Q2XydNm6dYxUJZdUgmBLf52F3pAwzKIJBg==", - "path": "system.io/4.3.0", - "hashPath": "system.io.4.3.0.nupkg.sha512" - }, - "System.IO.Compression/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-RTb1FGyGEZkNrxrFee3FZsMJSmK6Lmxaef2mHdK23qn9IxlEZbeK14hb0KPNM8k6QzzU+kqR1rTD8bYopx6fYQ==", - "path": "system.io.compression/4.3.0", - "hashPath": "system.io.compression.4.3.0.nupkg.sha512" - }, - "System.IO.FileSystem/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4mTkw3zbrqvWAMLqgMxr4lg2ggjcCPAhJqRSKy+ZhrPlXztqYAKf7d5sDDJmCkZjNJxsM/k9ZvlQZR6/zUCihQ==", - "path": "system.io.filesystem/4.3.0", - "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" - }, - "System.IO.FileSystem.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-l8suI9sMTsWzpZraleWE3z1KQqTCqBITJJmeT0AVj6Kk6EWLv9iKDb47O8zBktZqWAxEF1nvUnwhevYW9DToPQ==", - "path": "system.io.filesystem.primitives/4.3.0", - "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" - }, - "System.Linq/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4GusFyZYZE8W5IX9MjqCzucdLArml/j5zxVw2R0VS+JhrTaibL6M2SQSi7lIpGwwBuxU1Dwe2Sx1putAQ5d2BQ==", - "path": "system.linq/4.3.0", - "hashPath": "system.linq.4.3.0.nupkg.sha512" - }, - "System.Linq.Expressions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-jlZ1AKYgns90hbPp83uM5SQCWRrqLZWHS3q33zeMlAdKfQ4+KT4VVbWmgWqh6nVw7pB/7dXiR8TjHUPcXwIEKA==", - "path": "system.linq.expressions/4.3.0", - "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" - }, - "System.Linq.Parallel/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-td7x21K8LalpjTWCzW/nQboQIFbq9i0r+PCyBBCdLWWnm4NBcdN18vpz/G9hCpUaCIfRL+ZxJNVTywlNlB1aLQ==", - "path": "system.linq.parallel/4.3.0", - "hashPath": "system.linq.parallel.4.3.0.nupkg.sha512" - }, - "System.Memory/4.5.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-oonnLQPZAGD21qtNMG4EtVmbYOInk2jV7M+g108B6OHOb67ZOaWnA/K8P5oQ6uK9wxKzB1iEXSChQOi2scKOqA==", - "path": "system.memory/4.5.1", - "hashPath": "system.memory.4.5.1.nupkg.sha512" - }, - "System.Net.Http/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Z1UfSF6dlpCdZdxh6LeoGlYH+q6ptG/iiIWgUUeKhE3DbQACmZkU7Sz2nOX0qdHjz72MOdYRbkSJ5Qwl6sZgvg==", - "path": "system.net.http/4.3.0", - "hashPath": "system.net.http.4.3.0.nupkg.sha512" - }, - "System.Net.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-zpJLsVc5gRgTZR1QEi0H3s0bV26t7yug0WcersFr/pVqDvEBiqQm6z3YjYtWkVlMJ65ko1sSvGW5WXqaykOQ+g==", - "path": "system.net.primitives/4.3.0", - "hashPath": "system.net.primitives.4.3.0.nupkg.sha512" - }, - "System.ObjectModel/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-jeoLKRPL6N8492mNbyrUFhMkEEFb4ihgZmIuAXqv7lxkWQjzs+UqBPDKqmS2gQfFAUO2wXaaZPVEcKUfhETR2w==", - "path": "system.objectmodel/4.3.0", - "hashPath": "system.objectmodel.4.3.0.nupkg.sha512" - }, - "System.Reflection/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-DyOo4oJzP4JDP+GmJmZRTUoMN1T7MDlQLCgptPKJ5oB9AhRZ/RDIhAw0XrLAC6BpBxSPWk+fv6rMzfZcYPIjyQ==", - "path": "system.reflection/4.3.0", - "hashPath": "system.reflection.4.3.0.nupkg.sha512" - }, - "System.Reflection.Emit/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/rKEzbnRq6H1LUkLmlqT6YaD8S625rZIuK+EQvBwfdHjJbLni0c9SP0XSM2gv1Khnn9ehU5MSz/WmH7gwt2QGQ==", - "path": "system.reflection.emit/4.3.0", - "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" - }, - "System.Reflection.Emit.ILGeneration/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-popK0u8UUkrlKadna04k1polWd1mdATZeKu/Qd0jiMZf4NTZ/GFzwpuuyTxYgUaPtqS2gJZ8rVkBWfYS4IdDQQ==", - "path": "system.reflection.emit.ilgeneration/4.3.0", - "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" - }, - "System.Reflection.Emit.Lightweight/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-TCmTVOvOkWf7QNHMuzbfSD1y7hO0PNhFfTGLzKAJYkh7Ta+lUX2pb+Rrnx/i3Ism6H2qCDzagRbnsluJQ1U0Kw==", - "path": "system.reflection.emit.lightweight/4.3.0", - "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" - }, - "System.Reflection.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-VaItSJxypiIW7jglQPcywfByp9jLFkfGE6kZG17ft/q7xnFuS6GcDL/pPvnBqHpC0f0NCPV4utazuQ225DrxQg==", - "path": "system.reflection.extensions/4.3.0", - "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" - }, - "System.Reflection.Metadata/1.6.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-sARURAx/ZV3f3lL/40TG9y2Wqk60DXUlvzowM5oYeHlcpuEMIxoKnDBhNwBzwRs3i+vWUwIbU7Kk/+mG+hzckA==", - "path": "system.reflection.metadata/1.6.0", - "hashPath": "system.reflection.metadata.1.6.0.nupkg.sha512" - }, - "System.Reflection.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-6j+W57PZnjErWr1OBi7ORmwBBLycDB4N9aEOBKHAHXF/9sLOA30IQkqyOWGUUbQUgjHZwuZSVtgaUzW8wIbFTg==", - "path": "system.reflection.primitives/4.3.0", - "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" - }, - "System.Reflection.TypeExtensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-O0FhlnCiyHTpu0WBl5/0bbWvJpLjLdUNkDomPCaZP4baItazJDHl7666HrWQ1LB9iv5Wt36g08eZrlUB/JXNvw==", - "path": "system.reflection.typeextensions/4.3.0", - "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" - }, - "System.Resources.ResourceManager/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-u8AA+wa4EtOtkOf7OqxYryXnZ2zwv83qP1Dfnv3ZoA1k9Gx0HR/ERccyc1/HBpjbIdrcsyTVHivNQSYlGwGT8A==", - "path": "system.resources.resourcemanager/4.3.0", - "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" - }, - "System.Resources.Writer/4.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-mGgwPBXGTqnw6lQeRI24ChoyPViWx36MVfN6Ys1ceLJMTQDMHcoLiMHOzSvA7ZgjX2tWBy8nfjzlN1kDL/G1gQ==", - "path": "system.resources.writer/4.0.0", - "hashPath": "system.resources.writer.4.0.0.nupkg.sha512" - }, - "System.Runtime/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-wLlTiM4b/Un90BM6s3voqYybZEGra4WiIaXfTeB9kVPZr6QDP97xjG+rZYzdP2jiuQnij1bA8q4PzmrY6l5QTw==", - "path": "system.runtime/4.3.0", - "hashPath": "system.runtime.4.3.0.nupkg.sha512" - }, - "System.Runtime.CompilerServices.Unsafe/4.5.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-qUJMNWhbm9oZ3XaMFiEMiYmRPszbnXIkRIi7+4b2Md2xZ6JUOepf0/kY3S85qistRohl9OdMe4PsO+RdG2kTIQ==", - "path": "system.runtime.compilerservices.unsafe/4.5.1", - "hashPath": "system.runtime.compilerservices.unsafe.4.5.1.nupkg.sha512" - }, - "System.Runtime.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Xz+DgcN+a9LcFJJ9uir7Za7hAye4Hon6CxufXiVkfoQ9IQLn1w0NGr7kuwosXFJ892JA8zNTx7QWjRc9qrmN3w==", - "path": "system.runtime.extensions/4.3.0", - "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" - }, - "System.Runtime.Handles/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-LinND4TnXOL/oD28kxybu+XrwrvxSfEa+px6xVx5ndCBTmRoRLmiQrPQAHktupQ5ObRWsTzHot/K8cfK5b3jdw==", - "path": "system.runtime.handles/4.3.0", - "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" - }, - "System.Runtime.InteropServices/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-xm8UVPKs/QFYrTDRzsmpKlGKHYsy5uXre2R6hD73R0NbJ1757Cc//5iedolR03ppxOkG5o1oRYkjxNq0Mb30pw==", - "path": "system.runtime.interopservices/4.3.0", - "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" - }, - "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-p0Ks5JJnrUJbbJUBoTRyEdd8dvbjZywKxkmwl1ldjyu767RxUG9+wZGsSN1c8SMiJ8zfvsoO2flilpHKYZtWkg==", - "path": "system.runtime.interopservices.runtimeinformation/4.3.0", - "hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512" - }, - "System.Runtime.Loader/4.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/ol/Y9N+MghH5YPeeFuad34s2mclOPJJ4fs2hnFHr04QfGpUSBlcbpp/P3fggCNrZXwVKQEKgHu7SnA43Y8ang==", - "path": "system.runtime.loader/4.0.0", - "hashPath": "system.runtime.loader.4.0.0.nupkg.sha512" - }, - "System.Runtime.Numerics/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-K+WIriZO8+5TbeVtQY6+4d9Uipq5lJ0BaRr8j+DBXnqcjdcwguqZCsd1ZPBu8bo0b4r6sCnluiWnu3qVGQuLvg==", - "path": "system.runtime.numerics/4.3.0", - "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512" - }, - "System.Runtime.Serialization.Primitives/4.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-RVu/CQgW96/pzEE1pV6fCMhwvkA2Exkt2v6D6jce5WaU76CpS1cavqeS8WtYzcnj2o3VQyqpktB/KGlnLkxC2g==", - "path": "system.runtime.serialization.primitives/4.1.1", - "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512" - }, - "System.Security.Claims/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-aA3tDOv5FORzSWN4DVrbX2nE0INo5zbOrJbwmcN+XKKoBrfl6XIqUVoy53pa9lYSbSrASVXRxZGtQ/+wF2P6Hw==", - "path": "system.security.claims/4.3.0", - "hashPath": "system.security.claims.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Algorithms/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Wwoz0ThoFf4pTpfWy79PN7vob1nlrEF2lX59qfPPnsmZKBq7YER9FShbNx6QiEMnvacx7ZB1OU2WV91KttfJYg==", - "path": "system.security.cryptography.algorithms/4.3.0", - "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Cng/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/EuVr1biVzo7h8wlFel3WN2nh2Dusx30Nsu8k5Dna3rUPYJuWGzoysNMRXQ4YxGWWNnFabDlM7z7EAGbXqL/Og==", - "path": "system.security.cryptography.cng/4.3.0", - "hashPath": "system.security.cryptography.cng.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Csp/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-YkD7nbzlPBmcW84gV2mwLWToT7naB8WK7LRNSmkfLuswEBapQqYOeq+4E3UBGu6bOHCnAomgrgiZkk45DZpiNQ==", - "path": "system.security.cryptography.csp/4.3.0", - "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Encoding/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4K76Y6CMYqnuj/2uvucQGdq2X2j5C8wM7/Yl2oxjEGTWepuAzXuvzxQcIccZcqchK/AAmsaiZe24lZNdno7VyA==", - "path": "system.security.cryptography.encoding/4.3.0", - "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3LIgk/eAMyj/OrlxNvPCJRYkKZbJiJ/nhF1mIV8sLibNJJBheEyglXsEIkBYERywzAMW8RIJ5cP3BkYfLq+eKQ==", - "path": "system.security.cryptography.openssl/4.3.0", - "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-jeRd2cHsedEcqHT1rcAK4j41VLlcSKj+dfv7d4rIEcUIi2/MvSNviTXjKXBSNxpG40UzlPrYlRZ7pzUadmBJtw==", - "path": "system.security.cryptography.primitives/4.3.0", - "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.X509Certificates/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-8QkPGkoZWHZx6zRljnbomuOaJDHxGdJ64Fz4fKtG4g1ztro2dEZ9gnrmCKIJaHWPDKHLVG2Sc4B7D46W8Ur4Ww==", - "path": "system.security.cryptography.x509certificates/4.3.0", - "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512" - }, - "System.Security.Principal/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QpsTE5TJpZw/ciAHRxxXLgGyMr1YgQJhjmhAEtM9ueq9SS6SktfLW1eMOLcDteHR9ksODY/BB3Cb1tIhvd3wnA==", - "path": "system.security.principal/4.3.0", - "hashPath": "system.security.principal.4.3.0.nupkg.sha512" - }, - "System.Security.Principal.Windows/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-KhIQOIe7lZgn6tMQEQkgL6qLZvgLm2YhroCgsvpz//RUXnsOYx8pa6cmTARWhtf3Ift0ECtoiPkTajDonwEL5w==", - "path": "system.security.principal.windows/4.3.0", - "hashPath": "system.security.principal.windows.4.3.0.nupkg.sha512" - }, - "System.Text.Encoding/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-U564F0gK8wI5A+SXUg99g/sxG9Fgynj90qgtUzMcK8wDF6iAktFXpZfY9cETcz3NKvKR/rQpyhstguPcAA2lUA==", - "path": "system.text.encoding/4.3.0", - "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" - }, - "System.Text.Encoding.CodePages/4.4.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-epF1P00AFbqPy5jZx3fpEn5qwlBDZ+dck71xYc/jLibfY6BtoFKOqoj84YHcQWV9HcWb7M13aVJ61XCdK8/3XA==", - "path": "system.text.encoding.codepages/4.4.0", - "hashPath": "system.text.encoding.codepages.4.4.0.nupkg.sha512" - }, - "System.Text.Encoding.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-SLRvag/jlOLLtZy5GwsK1+p6AGP6YmOazNhx7ZdYuxpo5eSh0L1YS9ozte+DEeyNmd/u4/vGQ297wObM7ULAhQ==", - "path": "system.text.encoding.extensions/4.3.0", - "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" - }, - "System.Text.RegularExpressions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-R3r6OE8Nl3SHl0lX7gQhFd1qvzEiIf5+gcf2vs/JAXG7kSl8l03HB2Jbyp/6JQ6rsv9XW47qCH8Nnc2kew4P4g==", - "path": "system.text.regularexpressions/4.3.0", - "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" - }, - "System.Threading/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4j+rHu0q/NVTrCrtwVeVy1WXpzMTB+V63DG2pI2aopEurxLtjYxqYFB0RQRahClkAzonmF7rTTPLnAGRfbV37w==", - "path": "system.threading/4.3.0", - "hashPath": "system.threading.4.3.0.nupkg.sha512" - }, - "System.Threading.Tasks/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-E3rywGOEzJJvjVzTIZHYWYIja/zs9UTq3hEuUAyBc1Y4fYKG4013HRD9Y2JymL7eHUfaujLhh8UM4yeTnAwZCQ==", - "path": "system.threading.tasks/4.3.0", - "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" - }, - "System.Threading.Tasks.Dataflow/4.6.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-C6u7OtH7Vvy+wbq4xx53E7evhrJ+I3nBWXCKh7/imxn3cKDUa2iAQ8uhzL0YnviXlJspBXXVmAbOFL1s9UHBuQ==", - "path": "system.threading.tasks.dataflow/4.6.0", - "hashPath": "system.threading.tasks.dataflow.4.6.0.nupkg.sha512" - }, - "System.Threading.Tasks.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-H/qEiAmcJa9kowqQtBFkosed9A3IRfw/OkQSTlih2v97cFpAr/irN0rpX0lZ+NEGnM6EhSxIEDGPLHh9DIBZjQ==", - "path": "system.threading.tasks.extensions/4.3.0", - "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" - }, - "System.Threading.Tasks.Parallel/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Wn3GV5YIWjxvv9muD9FSZxH4PLx98Y4D1Z5mpYTowK1RLPtFvusnVKnT0OzmzEpYCMtVNgqfk3kPc9xRGsWrLA==", - "path": "system.threading.tasks.parallel/4.3.0", - "hashPath": "system.threading.tasks.parallel.4.3.0.nupkg.sha512" - }, - "System.Threading.Thread/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-XzzZm9Q5FOttt418yyPwRcMPyq7m570YZdRYtx1YvB37a0lYfODD/lWg/rtKrs8b87iTS09FAtgm/2v6Nh+j6w==", - "path": "system.threading.thread/4.3.0", - "hashPath": "system.threading.thread.4.3.0.nupkg.sha512" - }, - "System.ValueTuple/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-HiwjNp4lGpyqFXPbWe/GUV3VDn4URlp85xNinOXT+lXQCeJAVdtPm70kH/9PmjbhJjdF1zpPm3obvrT4defjCA==", - "path": "system.valuetuple/4.3.0", - "hashPath": "system.valuetuple.4.3.0.nupkg.sha512" - }, - "System.Xml.ReaderWriter/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-8zETm01mtgiyTl3xO+QenvD6TLsDcopZQM0cxyf3maICj4HqP8nxLS9N7aRNsf+RWdWQW+QrKVmh5aD4w1jyQg==", - "path": "system.xml.readerwriter/4.3.0", - "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" - }, - "System.Xml.XDocument/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-VRYzRdAdsQFbx8oiblJC1QuAz+Ck792eArsccHxP0vfFv8055l25yhhLVqWCo3j9GEFYcku85bpdaMwXXDeY/w==", - "path": "system.xml.xdocument/4.3.0", - "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" - }, - "System.Xml.XmlDocument/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ykIwRe9zpjElOMTvobLQrSvva9P8Pm1l7BFU/jq/u/INyoPS3mOr4z45kQWaNcWSuq3jGFA/6iU4+z3rPNakgg==", - "path": "system.xml.xmldocument/4.3.0", - "hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512" - }, - "System.Xml.XPath/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-8Eo7vuasWRqXfiBRCIKz20Rq1h6n+NMp6nW2RmyUwF4VDekg8xbRZu8S3N21P5XGAhv+kaqUwI3xydEkcw+D5w==", - "path": "system.xml.xpath/4.3.0", - "hashPath": "system.xml.xpath.4.3.0.nupkg.sha512" - }, - "System.Xml.XPath.XDocument/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-I50WmmXa9mUUujJOWKjyjqMnZcJklN5oc6XfHk5bfp9gt6eCJQ74qmi7IYEMa2YHPoFuA93uwssBlfU51i53QA==", - "path": "system.xml.xpath.xdocument/4.3.0", - "hashPath": "system.xml.xpath.xdocument.4.3.0.nupkg.sha512" - } - } +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v2.1/osx-x64", + "signature": "9d7b4faeebf3c0c6b8648d5493e03a4886e70936" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v2.1": {}, + ".NETCoreApp,Version=v2.1/osx-x64": { + "mpc/1.0.0": { + "dependencies": { + "Buildalyzer.Workspaces": "2.2.0", + "Microsoft.NETCore.App": "2.1.5" + }, + "runtime": { + "mpc.dll": {} + } + }, + "Buildalyzer/2.2.0": { + "dependencies": { + "Buildalyzer.Logger": "2.2.0", + "MSBuild.StructuredLogger": "2.0.11", + "Microsoft.Build": "15.8.166", + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Build.Tasks.Core": "15.8.166", + "Microsoft.Build.Utilities.Core": "15.8.166", + "Microsoft.Extensions.DependencyModel": "2.1.0", + "Microsoft.Extensions.Logging": "2.1.1", + "Microsoft.Extensions.Logging.Abstractions": "2.1.1", + "MsBuildPipeLogger.Server": "1.1.2" + }, + "runtime": { + "lib/netstandard2.0/Buildalyzer.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.0" + } + } + }, + "Buildalyzer.Logger/2.2.0": { + "dependencies": { + "NETStandard.Library": "2.0.3" + }, + "runtime": { + "lib/netstandard1.3/Buildalyzer.Logger.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.0" + }, + "lib/netstandard1.3/MsBuildPipeLogger.Logger.dll": { + "assemblyVersion": "1.1.2.0", + "fileVersion": "1.1.2.0" + } + } + }, + "Buildalyzer.Workspaces/2.2.0": { + "dependencies": { + "Buildalyzer": "2.2.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "2.9.0", + "Microsoft.CodeAnalysis.VisualBasic.Workspaces": "2.9.0" + }, + "runtime": { + "lib/netstandard2.0/Buildalyzer.Workspaces.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.0" + } + } + }, + "Microsoft.Build/15.8.166": { + "dependencies": { + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Win32.Registry": "4.3.0", + "System.Collections.Immutable": "1.5.0", + "System.Diagnostics.TraceSource": "4.0.0", + "System.IO.Compression": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Runtime.Loader": "4.0.0", + "System.Security.Principal.Windows": "4.3.0", + "System.Text.Encoding.CodePages": "4.4.0", + "System.Threading.Tasks.Dataflow": "4.6.0" + }, + "runtime": { + "lib/netcoreapp2.1/Microsoft.Build.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "15.8.166.59604" + } + } + }, + "Microsoft.Build.Framework/15.8.166": { + "dependencies": { + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Threading.Thread": "4.3.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Framework.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "15.8.166.59604" + } + } + }, + "Microsoft.Build.Tasks.Core/15.8.166": { + "dependencies": { + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Build.Utilities.Core": "15.8.166", + "Microsoft.Win32.Registry": "4.3.0", + "System.CodeDom": "4.4.0", + "System.Collections.Immutable": "1.5.0", + "System.Linq.Parallel": "4.3.0", + "System.Net.Http": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.Writer": "4.0.0", + "System.Threading.Tasks.Dataflow": "4.6.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Tasks.Core.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "15.8.166.59604" + } + } + }, + "Microsoft.Build.Utilities.Core/15.8.166": { + "dependencies": { + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Win32.Registry": "4.3.0", + "System.Collections.Immutable": "1.5.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Text.Encoding.CodePages": "4.4.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "15.8.166.59604" + } + } + }, + "Microsoft.CodeAnalysis.Analyzers/2.6.1": {}, + "Microsoft.CodeAnalysis.Common/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "2.6.1", + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Collections.Immutable": "1.5.0", + "System.Console": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.FileVersionInfo": "4.3.0", + "System.Diagnostics.StackTrace": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.CodePages": "4.4.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0", + "System.Threading.Tasks.Parallel": "4.3.0", + "System.Threading.Thread": "4.3.0", + "System.ValueTuple": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0", + "System.Xml.XPath.XDocument": "4.3.0", + "System.Xml.XmlDocument": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "2.9.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.CSharp": "2.9.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "2.9.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "2.9.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.VisualBasic": "2.9.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "2.9.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "2.9.0", + "System.Composition": "1.0.31", + "System.Diagnostics.Contracts": "4.3.0", + "System.Linq.Parallel": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks.Parallel": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.Workspaces.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CSharp/4.0.1": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "Microsoft.DotNet.PlatformAbstractions/2.1.0": { + "dependencies": { + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.DotNet.PlatformAbstractions.dll": { + "assemblyVersion": "2.1.0.0", + "fileVersion": "2.1.0.0" + } + } + }, + "Microsoft.Extensions.Configuration/2.1.1": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { + "dependencies": { + "Microsoft.Extensions.Primitives": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Configuration.Binder/2.1.1": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.DependencyModel/2.1.0": { + "dependencies": { + "Microsoft.DotNet.PlatformAbstractions": "2.1.0", + "Newtonsoft.Json": "9.0.1", + "System.Diagnostics.Debug": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Linq": "4.3.0" + }, + "runtime": { + "lib/netstandard1.6/Microsoft.Extensions.DependencyModel.dll": { + "assemblyVersion": "2.1.0.0", + "fileVersion": "2.1.0.0" + } + } + }, + "Microsoft.Extensions.Logging/2.1.1": { + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.1.1", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", + "Microsoft.Extensions.Logging.Abstractions": "2.1.1", + "Microsoft.Extensions.Options": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/2.1.1": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Options/2.1.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", + "Microsoft.Extensions.Primitives": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Primitives/2.1.1": { + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.NETCore.App/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetHostPolicy": "2.1.5", + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "NETStandard.Library": "2.0.3", + "runtime.osx-x64.Microsoft.NETCore.App": "2.1.5" + } + }, + "Microsoft.NETCore.DotNetAppHost/2.1.5": { + "dependencies": { + "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost": "2.1.5" + } + }, + "Microsoft.NETCore.DotNetHostPolicy/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetHostResolver": "2.1.5", + "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy": "2.1.5" + } + }, + "Microsoft.NETCore.DotNetHostResolver/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetAppHost": "2.1.5", + "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver": "2.1.5" + } + }, + "Microsoft.NETCore.Platforms/2.1.1": {}, + "Microsoft.NETCore.Targets/2.0.0": {}, + "Microsoft.Win32.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "Microsoft.Win32.Registry/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "MSBuild.StructuredLogger/2.0.11": { + "dependencies": { + "Microsoft.Build": "15.8.166", + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Build.Tasks.Core": "15.8.166", + "Microsoft.Build.Utilities.Core": "15.8.166" + }, + "runtime": { + "lib/netstandard2.0/StructuredLogger.dll": { + "assemblyVersion": "2.0.11.0", + "fileVersion": "2.0.11.26510" + } + } + }, + "MsBuildPipeLogger.Server/1.1.2": { + "dependencies": { + "Microsoft.Build": "15.8.166", + "NETStandard.Library": "2.0.3" + }, + "runtime": { + "lib/netstandard1.5/MsBuildPipeLogger.Server.dll": { + "assemblyVersion": "1.1.2.0", + "fileVersion": "1.1.2.0" + } + } + }, + "NETStandard.Library/2.0.3": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1" + } + }, + "Newtonsoft.Json/9.0.1": { + "dependencies": { + "Microsoft.CSharp": "4.0.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/Newtonsoft.Json.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.1.19813" + } + } + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.native.System/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0" + } + }, + "runtime.native.System.IO.Compression/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0" + } + }, + "runtime.native.System.Net.Http/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0" + } + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.osx-x64.Microsoft.NETCore.App/2.1.5": { + "runtime": { + "runtimes/osx-x64/lib/netcoreapp2.1/Microsoft.CSharp.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/Microsoft.VisualBasic.dll": { + "assemblyVersion": "10.0.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/Microsoft.Win32.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/Microsoft.Win32.Registry.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/SOS.NETCore.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.AppContext.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Buffers.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.Concurrent.dll": { + "assemblyVersion": "4.0.14.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.NonGeneric.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.Specialized.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Collections.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.Annotations.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.DataAnnotations.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.EventBasedAsync.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.Primitives.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.TypeConverter.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.ComponentModel.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Configuration.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Console.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Core.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Data.Common.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Data.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Contracts.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Debug.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll": { + "assemblyVersion": "4.0.3.1", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.FileVersionInfo.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Process.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.StackTrace.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.TextWriterTraceListener.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Tools.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.TraceSource.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Diagnostics.Tracing.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Drawing.Primitives.dll": { + "assemblyVersion": "4.2.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Drawing.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Dynamic.Runtime.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Globalization.Calendars.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Globalization.Extensions.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Globalization.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Compression.Brotli.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Compression.FileSystem.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Compression.ZipFile.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Compression.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.AccessControl.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.DriveInfo.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.Watcher.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.FileSystem.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.IsolatedStorage.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.MemoryMappedFiles.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Pipes.AccessControl.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.Pipes.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.UnmanagedMemoryStream.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.IO.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Linq.Expressions.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Linq.Parallel.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Linq.Queryable.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Linq.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Memory.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Http.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.HttpListener.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Mail.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.NameResolution.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.NetworkInformation.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Ping.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Requests.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Security.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.ServicePoint.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.Sockets.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebClient.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebHeaderCollection.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebProxy.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebSockets.Client.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.WebSockets.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Net.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Numerics.Vectors.dll": { + "assemblyVersion": "4.1.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Numerics.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.ObjectModel.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Private.DataContractSerialization.dll": { + "assemblyVersion": "4.1.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Private.Uri.dll": { + "assemblyVersion": "4.0.5.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Private.Xml.Linq.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Private.Xml.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.DispatchProxy.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Emit.ILGeneration.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Emit.Lightweight.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Emit.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Extensions.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.TypeExtensions.dll": { + "assemblyVersion": "4.1.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Reflection.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Resources.Reader.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Resources.ResourceManager.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Resources.Writer.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.CompilerServices.VisualC.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Extensions.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Handles.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.RuntimeInformation.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.WindowsRuntime.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Loader.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Numerics.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Formatters.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Json.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Primitives.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Xml.dll": { + "assemblyVersion": "4.1.4.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.Serialization.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Runtime.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.AccessControl.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Claims.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Algorithms.dll": { + "assemblyVersion": "4.3.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Cng.dll": { + "assemblyVersion": "4.3.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Csp.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Encoding.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.OpenSsl.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Cryptography.X509Certificates.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { + "assemblyVersion": "4.1.1.1", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.Principal.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.SecureString.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Security.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.ServiceModel.Web.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.ServiceProcess.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Text.Encoding.Extensions.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Text.Encoding.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Text.RegularExpressions.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Overlapped.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Tasks.Dataflow.dll": { + "assemblyVersion": "4.6.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Tasks.Extensions.dll": { + "assemblyVersion": "4.3.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Tasks.Parallel.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Tasks.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Thread.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.ThreadPool.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.Timer.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Threading.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Transactions.Local.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Transactions.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.ValueTuple.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Web.HttpUtility.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Web.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Windows.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.Linq.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.ReaderWriter.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.Serialization.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XDocument.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XPath.XDocument.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XPath.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XmlDocument.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.XmlSerializer.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.Xml.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/System.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/WindowsBase.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/mscorlib.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/osx-x64/lib/netcoreapp2.1/netstandard.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "0.0.0.0" + } + }, + "native": { + "runtimes/osx-x64/native/System.Globalization.Native.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.IO.Compression.Native.a": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.IO.Compression.Native.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.Native.a": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.Native.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.Net.Http.Native.a": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.Net.Http.Native.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.Net.Security.Native.a": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.Net.Security.Native.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.Private.CoreLib.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.Security.Cryptography.Native.Apple.a": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.Security.Cryptography.Native.Apple.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.Security.Cryptography.Native.OpenSsl.a": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/System.Security.Cryptography.Native.OpenSsl.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/libclrjit.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/libcoreclr.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/libdbgshim.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/libmscordaccore.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/libmscordbi.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/libsos.dylib": { + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/sosdocsunix.txt": { + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost/2.1.5": { + "native": { + "runtimes/osx-x64/native/apphost": { + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetHostResolver": "2.1.5" + }, + "native": { + "runtimes/osx-x64/native/libhostpolicy.dylib": { + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetAppHost": "2.1.5" + }, + "native": { + "runtimes/osx-x64/native/libhostfxr.dylib": { + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {}, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "System.AppContext/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Buffers/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.CodeDom/4.4.0": { + "runtime": { + "lib/netstandard2.0/System.CodeDom.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.25519.3" + } + } + }, + "System.Collections/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Concurrent/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Collections.Immutable/1.5.0": { + "runtime": { + "lib/netstandard2.0/System.Collections.Immutable.dll": { + "assemblyVersion": "1.2.3.0", + "fileVersion": "4.6.26515.6" + } + } + }, + "System.Composition/1.0.31": { + "dependencies": { + "System.Composition.AttributedModel": "1.0.31", + "System.Composition.Convention": "1.0.31", + "System.Composition.Hosting": "1.0.31", + "System.Composition.Runtime": "1.0.31", + "System.Composition.TypedParts": "1.0.31" + } + }, + "System.Composition.AttributedModel/1.0.31": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.AttributedModel.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.Convention/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Composition.AttributedModel": "1.0.31", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.Convention.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.Hosting/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Composition.Runtime": "1.0.31", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.Hosting.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.Runtime/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.Runtime.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.TypedParts/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Composition.AttributedModel": "1.0.31", + "System.Composition.Hosting": "1.0.31", + "System.Composition.Runtime": "1.0.31", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.TypedParts.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Console/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Diagnostics.Contracts/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.Debug/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Diagnostics.FileVersionInfo/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "System.Diagnostics.StackTrace/4.3.0": { + "dependencies": { + "System.IO.FileSystem": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.Tools/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.TraceSource/4.0.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Diagnostics.Tracing/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Dynamic.Runtime/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Globalization/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Calendars/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "System.IO/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.Compression/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Buffers": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.IO.Compression": "4.3.0" + } + }, + "System.IO.FileSystem/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Linq/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Linq.Expressions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Linq.Parallel/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Memory/4.5.1": {}, + "System.Net.Http/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Net.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.ObjectModel/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Reflection/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit/4.3.0": { + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Metadata/1.6.0": { + "runtime": { + "lib/netstandard2.0/System.Reflection.Metadata.dll": { + "assemblyVersion": "1.4.3.0", + "fileVersion": "4.6.26515.6" + } + } + }, + "System.Reflection.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.TypeExtensions/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.ResourceManager/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.Writer/4.0.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Runtime/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0" + } + }, + "System.Runtime.CompilerServices.Unsafe/4.5.1": { + "runtime": { + "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "0.0.0.0" + } + } + }, + "System.Runtime.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Handles/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Runtime.Loader/4.0.0": { + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Numerics/4.3.0": { + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Runtime.Serialization.Primitives/4.1.1": { + "dependencies": { + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Security.Claims/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Security.Principal": "4.3.0" + } + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Cng/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Security.Cryptography.Csp/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.3.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Principal/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Security.Principal.Windows/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.Win32.Primitives": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Claims": "4.3.0", + "System.Security.Principal": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Text.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding.CodePages/4.4.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/System.Text.Encoding.CodePages.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "4.6.25519.3" + } + } + }, + "System.Text.Encoding.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Text.RegularExpressions/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Threading/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Threading.Tasks.Dataflow/4.6.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks.Parallel/4.3.0": { + "dependencies": { + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Thread/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.ValueTuple/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Xml.ReaderWriter/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + } + }, + "System.Xml.XDocument/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XmlDocument/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XPath/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XPath.XDocument/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0", + "System.Xml.XPath": "4.3.0" + } + } + } + }, + "libraries": { + "mpc/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Buildalyzer/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5nO0Lkv0zcB5Ck8AaO9eXnRbAfVAB45QQ0ZGCAfPwRxqlqn7WFkn6ESL8EWD8jgTdodtIE8KpZFXm8zb1jIYBw==", + "path": "buildalyzer/2.2.0", + "hashPath": "buildalyzer.2.2.0.nupkg.sha512" + }, + "Buildalyzer.Logger/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-490kgGa+07Jwdsq0jqxUSG2QjVg65MJHMEI1/D/7pOjNY4/Zc5DJTKxuL1eJUFf+rzB7NtZKDV0IGABlH8Ihmw==", + "path": "buildalyzer.logger/2.2.0", + "hashPath": "buildalyzer.logger.2.2.0.nupkg.sha512" + }, + "Buildalyzer.Workspaces/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iItCd3jnCUCXryBbWPpRqzPco2vqWobEAoyXelVSfQ+xkZmEwRGYtjjxa+14qo9sNve/a+LTeYknWG/dyRIQOg==", + "path": "buildalyzer.workspaces/2.2.0", + "hashPath": "buildalyzer.workspaces.2.2.0.nupkg.sha512" + }, + "Microsoft.Build/15.8.166": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MH3/LhMZZEAkWyMxUkRmNoMqO4A4XhXz7c1OywTKs9n0bvrCPD4S5k7p0YfyEpSY4JVIzbUFvHCR/uaFXtACEA==", + "path": "microsoft.build/15.8.166", + "hashPath": "microsoft.build.15.8.166.nupkg.sha512" + }, + "Microsoft.Build.Framework/15.8.166": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Bw7ebVvOQQC5zgM0AsyZFB23aJvEISa1vABkWCgjGueopq+fG6JDhwHeAXloLcwtQldvDobivLDFw6/8QDN9cg==", + "path": "microsoft.build.framework/15.8.166", + "hashPath": "microsoft.build.framework.15.8.166.nupkg.sha512" + }, + "Microsoft.Build.Tasks.Core/15.8.166": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NCTTEPkSUkxE7dZiVfnaSzjEMs7AiQYJ9hVHzGyreQzZFrR9fajwBc2KAjjH3pS8nBcx/rmjH9T0b5ZMOJviEw==", + "path": "microsoft.build.tasks.core/15.8.166", + "hashPath": "microsoft.build.tasks.core.15.8.166.nupkg.sha512" + }, + "Microsoft.Build.Utilities.Core/15.8.166": { + "type": "package", + "serviceable": true, + "sha512": "sha512-AZ7pSCGDeRlBm3TIOrnSOCWB2+Wea4rL7sMsinyChF3NJUAb//lF0fUyZfjbukE5eCqba17gw0FnbMjnNgtecw==", + "path": "microsoft.build.utilities.core/15.8.166", + "hashPath": "microsoft.build.utilities.core.15.8.166.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Analyzers/2.6.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-x9MfOXfTj/tdgm3rV15niL/J0T36ZPiVrIfO3Tax9Lv4fLGnVZJXSQatZezJ+tX+YYk2ZAPbq87vnSFwh1Je9w==", + "path": "microsoft.codeanalysis.analyzers/2.6.1", + "hashPath": "microsoft.codeanalysis.analyzers.2.6.1.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Common/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-gWTphgR8eHu39XcrfhxE8WwD35C/vaR06QiKM1TaCbjmgPafZ9G3TY7eeT44BfHVMQEGYZmjV5NZNQLm2F7ZTQ==", + "path": "microsoft.codeanalysis.common/2.9.0", + "hashPath": "microsoft.codeanalysis.common.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RNACUadFXlT3/Y4XIVI1+g3hpGgToYJyVTRBVFmhE8gtRA2snM5dPKv2e4Qz7K/3Ap7Ky+YgIKCO4YsmWqal/A==", + "path": "microsoft.codeanalysis.csharp/2.9.0", + "hashPath": "microsoft.codeanalysis.csharp.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Kis5VedBJjtdlYlI9erCAnqz2fVgRWLHCDYMIKRXsD4CVWrwrm8sCq3qmY9Drmit85StquRPFw5z8YMhDCB7RQ==", + "path": "microsoft.codeanalysis.csharp.workspaces/2.9.0", + "hashPath": "microsoft.codeanalysis.csharp.workspaces.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4nxVFgxywDHttOSLh9z36QGUdsTFz80A/M+qc2bgZ3GBuTR9+FeDPIap8DQrBcDZWO1Kb+0QC6b65jZvgcZP5g==", + "path": "microsoft.codeanalysis.visualbasic/2.9.0", + "hashPath": "microsoft.codeanalysis.visualbasic.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dL9+IJPk7mZ9LFY0saaXk1adKbEDhHe+U+1fG4F7o4NsvZqcOS/6sRcEWl253gi2ZoFoonDDB3sffhrlg1ITIQ==", + "path": "microsoft.codeanalysis.visualbasic.workspaces/2.9.0", + "hashPath": "microsoft.codeanalysis.visualbasic.workspaces.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KGkaumh6O0gS0RBWHHIfx34u5sm7vhgTDaFOcKm60tELh6Jy6OYNtdB/Iyefvvwb+PaZIcUg+9hbGBQ1GdCHqA==", + "path": "microsoft.codeanalysis.workspaces.common/2.9.0", + "hashPath": "microsoft.codeanalysis.workspaces.common.2.9.0.nupkg.sha512" + }, + "Microsoft.CSharp/4.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CLd4nvEjFlopxG7O6y4d2h46ZP+pfBw0cT/7WuZpMYduIthUO8dEJzfq8l+WJm8nOEg3LJcdKu8KG8N28vomBA==", + "path": "microsoft.csharp/4.0.1", + "hashPath": "microsoft.csharp.4.0.1.nupkg.sha512" + }, + "Microsoft.DotNet.PlatformAbstractions/2.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ae/c3pX6vhCs17caUrVZrb8n9gDTzr6usnZKZEHla7uy7ZcjQLfm09gS7m+IneVtmGwXm5hcSDa5qwqwLaH2Ug==", + "path": "microsoft.dotnet.platformabstractions/2.1.0", + "hashPath": "microsoft.dotnet.platformabstractions.2.1.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1JaydycXzbfAExlsD7XIWykzVnU/wZM86KzrHyGlXuxqnqzcWSXLJn4Ejn8bDnq07CEJNZ+GjsxWKlJ8kFfnvQ==", + "path": "microsoft.extensions.configuration/2.1.1", + "hashPath": "microsoft.extensions.configuration.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-9EMhOWU2eOQOtMIJ+vfwKJpnLRc1Wl3vXu8qXeevA91cSY4j3WvArmF7ApGtJwa7yKewJTvlQlBSn9OSnLFg6Q==", + "path": "microsoft.extensions.configuration.abstractions/2.1.1", + "hashPath": "microsoft.extensions.configuration.abstractions.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Binder/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-t7KFAv6AxyUsZj9QN8FAbusg+X5baCELl+XtscyuP1IGUv5UctyY7/rNZLyiKaV7HhAcDQ1zC5ZQNQQFn6JpAA==", + "path": "microsoft.extensions.configuration.binder/2.1.1", + "hashPath": "microsoft.extensions.configuration.binder.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PW1596sF97gpIc1JuUuYvTmeLfeqC5whbWPsWgJhN0fdwz683him3b/HB0dqhFesVssOjnnA0fEz4+S0gUeBqA==", + "path": "microsoft.extensions.dependencyinjection.abstractions/2.1.1", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyModel/2.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3KPT6CLH0VEGr2um9aG1rYTmqfMVlkRuueFpN6AxeIKpcMA4OVHf4aNpgYXZ6oF+x4uh9VhK/66FgPCd1mMlnQ==", + "path": "microsoft.extensions.dependencymodel/2.1.0", + "hashPath": "microsoft.extensions.dependencymodel.2.1.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-x4/RzeReQSIi4nVpOjXEySm/xUSr6lBjuecdYnlUboWxbLSm2j3vhFV5OLGRp3gfte3cRMdysMNa/wyZN0t/Tw==", + "path": "microsoft.extensions.logging/2.1.1", + "hashPath": "microsoft.extensions.logging.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-QWFWKrdeoDSEr8nVJaBAVDMj24wnh9clGzDNmMdgHHRsOIwTUMeh4XljeZXJhIKPT00jWuzwEzn3uNxOtO4cYg==", + "path": "microsoft.extensions.logging.abstractions/2.1.1", + "hashPath": "microsoft.extensions.logging.abstractions.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Options/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-j0zOfTt1Qm+JDW2m+6Q/aj1m4C8+onudUu4ls/fN69VxruZkMWmX1bPKkbkYIPNNxJsf4k7FOkVq5o1vEFq9pQ==", + "path": "microsoft.extensions.options/2.1.1", + "hashPath": "microsoft.extensions.options.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Svz25/egj1TsNL4118jyMqkhDiu0l8QYWq2p52P4BBN0GbqwR18ZRIctSP5TTDJy0m0EFC8aB2FOVjGtvEGWSA==", + "path": "microsoft.extensions.primitives/2.1.1", + "hashPath": "microsoft.extensions.primitives.2.1.1.nupkg.sha512" + }, + "Microsoft.NETCore.App/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oTQd5w0qQp32QSKPE6TqhhcybkkTKqtn4YVnNsYHwFR28s1kUAI/xg+hmKwF/G+u4vUjgy7Y7ghC0cIwRP5wdg==", + "path": "microsoft.netcore.app/2.1.5", + "hashPath": "microsoft.netcore.app.2.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.DotNetAppHost/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ir7AI1ywRriX1fLTLYOyiDTYSj+zpdAfTBFH0dLwvLvC8obU0EYnmrjTzbYJ8GSnza1H1Rv3Lo/lJBSccmTGMA==", + "path": "microsoft.netcore.dotnetapphost/2.1.5", + "hashPath": "microsoft.netcore.dotnetapphost.2.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.DotNetHostPolicy/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fkTeZ7G1Tf0aT+P1bMyn/qJXByFIaATNAt0DKrZ3nC7jMRAWBHJifOrOe5XnGvvc0YzqVLmHARYtzSG00/9NVw==", + "path": "microsoft.netcore.dotnethostpolicy/2.1.5", + "hashPath": "microsoft.netcore.dotnethostpolicy.2.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.DotNetHostResolver/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/rPHOsRWubviDEGlxQcNKtJ7G6ML0F/Pg5vG1E+lgfdmoyLRKqrE3ZjVlYCxS18ExZGekBq9LEVb+eOKMxlJEA==", + "path": "microsoft.netcore.dotnethostresolver/2.1.5", + "hashPath": "microsoft.netcore.dotnethostresolver.2.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iXcQc19h5oECLVokgt6hvLOOPP/d9kYQh9miF9zbcxGVZenuTN9IMB+f+gP26/+Rc5r2KLES5Of45Qdqo0NJeA==", + "path": "microsoft.netcore.platforms/2.1.1", + "hashPath": "microsoft.netcore.platforms.2.1.1.nupkg.sha512" + }, + "Microsoft.NETCore.Targets/2.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mJnCMoBfWL0lxxlBFJ/8cZKTfPpI82TekZkUqvSCBtunUaaqr2LVeWl1zQYdanAdk4Ddf1HCwb8+DNYaNFBk1w==", + "path": "microsoft.netcore.targets/2.0.0", + "hashPath": "microsoft.netcore.targets.2.0.0.nupkg.sha512" + }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-d2YDDsTDnU/+ERiLxkHMviiQlclT6/G2iddWPPH4xLbS0P0+RYcqOZxqauVHX6s3Uv2cUkL226qXKpfn/fL98Q==", + "path": "microsoft.win32.primitives/4.3.0", + "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512" + }, + "Microsoft.Win32.Registry/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OHAvcu6tVh40PncTYFkpLItsw9O8sUc59C4eqSqEd+U5rY7t0+u7Xoi6Mw2QOfvPJ2HUJlwIEVqxklDIfn757Q==", + "path": "microsoft.win32.registry/4.3.0", + "hashPath": "microsoft.win32.registry.4.3.0.nupkg.sha512" + }, + "MSBuild.StructuredLogger/2.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LYK6MOfPUEE/u10OepnvFOjFy12YWOjtXXIh3K0RtUzdjatIHZSAjU8MKPuGcegi06iblNH2Rlc78vc2AVokhg==", + "path": "msbuild.structuredlogger/2.0.11", + "hashPath": "msbuild.structuredlogger.2.0.11.nupkg.sha512" + }, + "MsBuildPipeLogger.Server/1.1.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4gxSIkc4mMpHemehqDAZzGdKAhGJAxyt+56SUi6B4X2FWijojXzcIr7illkuEA7Ex05eoa5Cx4pr6d1hn4m8lg==", + "path": "msbuildpipelogger.server/1.1.2", + "hashPath": "msbuildpipelogger.server.1.1.2.nupkg.sha512" + }, + "NETStandard.Library/2.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", + "path": "netstandard.library/2.0.3", + "hashPath": "netstandard.library.2.0.3.nupkg.sha512" + }, + "Newtonsoft.Json/9.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", + "path": "newtonsoft.json/9.0.1", + "hashPath": "newtonsoft.json.9.0.1.nupkg.sha512" + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+HIVh+8SOZS56Hqm/5wKUEAiz3BgjQRTQ6OG4K3FwSXT3JckhZbH4A/Xdwb7Z/GPQW4HocnFbq5CSuVXwy6ylg==", + "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tRFXi8EvFI+yB0DBDu52piUGKBlNebhT1swNbiTvUeZnkCuabY41eJnQaHESk1PGTiHs0Lh2FSwZYG5cUCnrrw==", + "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DPnni2nk3x2Iz/6Do1tme5F8sM4Jo5xUNsHJxlRJ686v/WcFeuTR8r72Bwr/8iJxRJepn/ke/XLHphnWme1OpQ==", + "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.native.System/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6l0Dkix8bgJVwfFQg1yPNBa3J3hmOdSuZLYI06QlheipqU0hT2XCfN8otCPhD4M2Aq+Xhy1B5+9Jr9WWhfdusw==", + "path": "runtime.native.system/4.3.0", + "hashPath": "runtime.native.system.4.3.0.nupkg.sha512" + }, + "runtime.native.System.IO.Compression/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FBMFTXHy9kGuYs/bj62XyVrQB44HZcZ1fTj3Iv04eFGVcg65vac5o9Rv3hdYqNPmWK/DVgLUV8aeeTzcaqB5hg==", + "path": "runtime.native.system.io.compression/4.3.0", + "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Net.Http/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-g8FnRWqvKQwR0pjrB9bG1cLGSR4EFAu+7U34Q+ptucNLvBfWEAWcm54vrZCMAT6H9VU6VfDruGHA4nc1gu1i2w==", + "path": "runtime.native.system.net.http/4.3.0", + "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cgjvRwk6uDocZbujiZcZ90OYnErFqpN26H56Xfe8nnZIvErpRHe0RxP16DsLzY5dBuVqChNb+hLN7R8ixk1xVg==", + "path": "runtime.native.system.security.cryptography.apple/4.3.0", + "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uvqanMQDxKS+7ADCRVzNqoa9IQuxuBOVrtWvNNuNyNe/Gb03SxR9QgoRKKvIrvwMUGrudNDhrEITDRGWLIXqGA==", + "path": "runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6uH/bLrHHChHf1v+ZZCnVjKiaeCFOjd7RUBG4/MqBBRheByueBEGTvPrv2hSrpxPrwYZuNACAmYanbB7MtcflA==", + "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7fcf887lmwAHbWfCeQUVA/A8PaEkj0nwYDqUlytKP78+BJUjbVWTJqjFkM+jBeTCOElrt1RzrH0Hil+1tNLVBw==", + "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.osx-x64.Microsoft.NETCore.App/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DOaNPGUlBQ/1yzSPXx0+EaXsaqIUWfYY1kd0KdpZ6NxOOajEBbfZsqJvBGLV/FcHYXfhoppD5RNrRgPfZq59Jw==", + "path": "runtime.osx-x64.microsoft.netcore.app/2.1.5", + "hashPath": "runtime.osx-x64.microsoft.netcore.app.2.1.5.nupkg.sha512" + }, + "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lK/1rDguZwnSLBYVxoAJypmPzvP59HWstepjY9LzhTtBBS2XyG9GyvzpOBk3IsV2TNvgPaJhkozZvxChklDV6Q==", + "path": "runtime.osx-x64.microsoft.netcore.dotnetapphost/2.1.5", + "hashPath": "runtime.osx-x64.microsoft.netcore.dotnetapphost.2.1.5.nupkg.sha512" + }, + "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-GvSNZ5XxcPFDIyvEprycWtsRQyDczaSQVGcuhw3B4FWNIXLzFLrs8dqraoAbP8+zC8A2vVEl4x9eqJ/nkrRA3g==", + "path": "runtime.osx-x64.microsoft.netcore.dotnethostpolicy/2.1.5", + "hashPath": "runtime.osx-x64.microsoft.netcore.dotnethostpolicy.2.1.5.nupkg.sha512" + }, + "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4B2HOalQrBa+YUTd2gWXMvQJSt4yRhJVHbGHtVOc9Wmhq/PxhDhcuiN8XBfuCl9NUcTdxL95KYFehoNWCRTqeA==", + "path": "runtime.osx-x64.microsoft.netcore.dotnethostresolver/2.1.5", + "hashPath": "runtime.osx-x64.microsoft.netcore.dotnethostresolver.2.1.5.nupkg.sha512" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fuh5u2mOjEjHx2bQHHZTryMCWNOY9N7I0rCN3KldGRU6brnMOuZRTB3uh6AYK/9eioywbNerYDZAL6M3C4c7MQ==", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", + "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-W3mGmFCN5ei6jegKyBX8eMB+OEMAzcYvZBCocfrwOBMBsyv0YB9XuxZ9xxqsQJ71T4LGImi8+A8ntNkdwk4OhQ==", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nwK59n0Ink7MhkZKGxzAOdbxniOBQEbfV3fqvE0Q/AcuenNkdNlu6fbeeGWVzJWeliFIgzk1Rp/hCR/aAbs32g==", + "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fSj8+HzPXcEnBA+svDivS1/dhfwhG1LgQvyN7Jxvaqt97aMfGC1mdlMVUEoS+5awAHIZtmi8GZWtq+rXK5zaUw==", + "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xtUCr/NeowVrQ3e8uWRzppefx6yBvXYPKoHYjFaZKyO6HVZ7yFd7PM6P/QwAKejYRnlZElOL01lz5arTfKNeDA==", + "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Zja3A4KNQzxx07aAwgNoD55qGAntIwaRruMdRZaUNo2PB8czzPJE9GMFR/6im2rMoriWfxR+G90gXdQUx7v8KQ==", + "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "System.AppContext/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uEIyp9GUT2U5UD4KjUU2bIdmBFuRXGn0VeAbWZvqqfSdXfyADZQnmfCVxc18BbXpr4Axum0MY/gtQhiWroNcNw==", + "path": "system.appcontext/4.3.0", + "hashPath": "system.appcontext.4.3.0.nupkg.sha512" + }, + "System.Buffers/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Mm9RDuBQ6CIi0BP75sMq0boRBmztwc1MGfHSoeXdoOyJnyvG6Dri9GE1mNebbVWEkxNRe4CbXHTJYyKq/3WEmQ==", + "path": "system.buffers/4.3.0", + "hashPath": "system.buffers.4.3.0.nupkg.sha512" + }, + "System.CodeDom/4.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-E/lvSfMFPtNflAgdM6AuPU8JbZdqdSoGpU66G7SrduCqdrFyPflaqqV4gN2d0hrCBpu92HaoqpUP5d+g9Itcxw==", + "path": "system.codedom/4.4.0", + "hashPath": "system.codedom.4.4.0.nupkg.sha512" + }, + "System.Collections/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/RO6DxDIzcceka4RmnJ6P8anXxdkmdRGKpliRZKVB84y4LzpqMMWTLAGRQXLc5ET15z1Xr7YaNZx1rbWuqRVcg==", + "path": "system.collections/4.3.0", + "hashPath": "system.collections.4.3.0.nupkg.sha512" + }, + "System.Collections.Concurrent/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fu4SvisargPpI4z2+69ocBNmQLS98WyvsA1dP35c2dxRJnEd/+cSmGnv/GSNxbIs7wtveGB8tzFLYABPFkX7Kg==", + "path": "system.collections.concurrent/4.3.0", + "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" + }, + "System.Collections.Immutable/1.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-erLSnZLBCA8EKIE2bKtXynjWBWSoMlmCFrOOYN+sPKCeYd3oGj9h8hqRPODtsRlPANkOW7L8tEQlEadHbUXC6A==", + "path": "system.collections.immutable/1.5.0", + "hashPath": "system.collections.immutable.1.5.0.nupkg.sha512" + }, + "System.Composition/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CbzwbjxT04VU+JzQuPOYfUCybzBtbGZdqGJS9482dDBoBHbt3Zz0QAJ/Cjzpmq5xdL+hhW4FYWf/3wq2OCVXgg==", + "path": "system.composition/1.0.31", + "hashPath": "system.composition.1.0.31.nupkg.sha512" + }, + "System.Composition.AttributedModel/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rhZeg+i71Q0MZjYIdIpyfzKM7E9EsvytXxq+CaZ/vWCV09ZfMnb0MOEkfM4wfKhTo7Xoo3TJkkfTLx8kUCltkg==", + "path": "system.composition.attributedmodel/1.0.31", + "hashPath": "system.composition.attributedmodel.1.0.31.nupkg.sha512" + }, + "System.Composition.Convention/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-9GFJIdwg0zr8s2KHVVgVikYfPJ/KntH1D79Z7VzCovUZwDNNq66MMKkLJIOCztXsgDdgYKOp3BAYASRS9EvYGw==", + "path": "system.composition.convention/1.0.31", + "hashPath": "system.composition.convention.1.0.31.nupkg.sha512" + }, + "System.Composition.Hosting/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KlZ4qkaa1p/U2WKr353XeQ9bjrxBwn9FcD5k9WFEuV1MloDMnTnhUwQU7h1WigvsCYykzoRdnDLq33wnUPwBeg==", + "path": "system.composition.hosting/1.0.31", + "hashPath": "system.composition.hosting.1.0.31.nupkg.sha512" + }, + "System.Composition.Runtime/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iZH3/g2js6fmV3atN2Ym/o+dM2ZMA1GA0GXc70nhbIqK67L29Lh3YrAWiBlyoOIUjNEggA6L4i++7PSID2wMdQ==", + "path": "system.composition.runtime/1.0.31", + "hashPath": "system.composition.runtime.1.0.31.nupkg.sha512" + }, + "System.Composition.TypedParts/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-H6fLWxFy+cy+YsHRcvUBskvDYkpDdUJky+GkqYvi8B/5cm/KIQ5QVDOLKuul4PHFZ/x0yRacS8CpY3x/PxiBeA==", + "path": "system.composition.typedparts/1.0.31", + "hashPath": "system.composition.typedparts.1.0.31.nupkg.sha512" + }, + "System.Console/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NXaPmAD2UQOwcXA0CdsTCi1g/BUmuxwwGok2guCrS/pLpAv79v5TQLWYPnUoysNbn3p8v1WLguJHLMa782C5Yw==", + "path": "system.console/4.3.0", + "hashPath": "system.console.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Contracts/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-clL6acqvIbbx3JYunlkrWV5sP9qGd0sLl612eXrBVVwakTTlMNtvZB5RiC2rU2uYxSnIt2ssUQgA2adrYSqYhA==", + "path": "system.diagnostics.contracts/4.3.0", + "hashPath": "system.diagnostics.contracts.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Debug/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-j3oXzv/QxCZcBxSIzreks9gAMenRyZTvSntLbDYGWczEhLQX4Ob3ajnXpAC9IXymWI+N4AFV7/pXLPwn+2ItAA==", + "path": "system.diagnostics.debug/4.3.0", + "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wu5+BNFredYlzZEmih3pMlR0ekaWCd9KZ8MPWqIQ4KVKo+RpzuhsIAfteI5OYQ2zSVzg1uOfQBrJ8KFkz+XfRQ==", + "path": "system.diagnostics.diagnosticsource/4.3.0", + "hashPath": "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.FileVersionInfo/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OEshwk5wkdxtGkFZYSErv6dnUuz0z8C01htylGwOwFnCVFRcrvleBtplMDCk9nMyWP41cbMZGEIBfy7HV1Loug==", + "path": "system.diagnostics.fileversioninfo/4.3.0", + "hashPath": "system.diagnostics.fileversioninfo.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.StackTrace/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BZY9Q0RiOSp/hp13jXe97aVOgPDzlqOdYdixs5fl/e3K/vz1SoJYDddY8CPE3wH9m043tJ65L8i+WMiPzGxdtQ==", + "path": "system.diagnostics.stacktrace/4.3.0", + "hashPath": "system.diagnostics.stacktrace.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Tools/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7gcA6FsKiySf+s9PeyenhSuUmxbxrpEDZ+/UcZBUbIu92JR804efdbIy4bEYcHg1htFbhxewu8vIV5pWYhc2Sg==", + "path": "system.diagnostics.tools/4.3.0", + "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.TraceSource/4.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bGUeY5wiCHYSWbYZS3QjbaQ1hNoJ1RQBQMB3E0Cgh6AH//4rXfXIOHKIW46HDOsTEDoNfvFNDXphL5W5B/XMwQ==", + "path": "system.diagnostics.tracesource/4.0.0", + "hashPath": "system.diagnostics.tracesource.4.0.0.nupkg.sha512" + }, + "System.Diagnostics.Tracing/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7IXKSUQm7wC+beoAINYrIqawpecwtyiM5NKv96whUmWOvg2vPn60WYqLopKbWu3GSPCH/ZJxAiHrS7tYlhb5Dg==", + "path": "system.diagnostics.tracing/4.3.0", + "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" + }, + "System.Dynamic.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PyiPySIERuk05CtVuHEQOijQChY4L77ZcUe+fee7lyZxPbU/hlduSfUIXw8XF/T+R1jOIDoOZXEQ+ZoFEgOzYQ==", + "path": "system.dynamic.runtime/4.3.0", + "hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512" + }, + "System.Globalization/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Gp7Z/4kR92caisVDNbXXYdGYZuAECXZGIaG7kAOs3cEM3zVMp078Yn3qVRGzUidYSYEAauQ0hx7mbXEmuimhYA==", + "path": "system.globalization/4.3.0", + "hashPath": "system.globalization.4.3.0.nupkg.sha512" + }, + "System.Globalization.Calendars/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cr50CLRa9Egfe0Cg2aQPrnLqDpcE794AKTmpgiTIZpz+3N7lN+5yGtNUhTrUbMeSZycoFHTGIEArIlv8J2aX/A==", + "path": "system.globalization.calendars/4.3.0", + "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512" + }, + "System.Globalization.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4OvZWmZyTOaSygNnIdnu/p0zvu+HU9WnoZshyo3wzU5lLqiVa1pli0iY/VegQoJ7NPk5hd0RVxU+XrSOr5aauw==", + "path": "system.globalization.extensions/4.3.0", + "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" + }, + "System.IO/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Ep3xyKDltu0EsCk1BvoWBC7NltwFqRlYCjwKTV7+d4sAH0lVk5P3Q2XydNm6dYxUJZdUgmBLf52F3pAwzKIJBg==", + "path": "system.io/4.3.0", + "hashPath": "system.io.4.3.0.nupkg.sha512" + }, + "System.IO.Compression/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RTb1FGyGEZkNrxrFee3FZsMJSmK6Lmxaef2mHdK23qn9IxlEZbeK14hb0KPNM8k6QzzU+kqR1rTD8bYopx6fYQ==", + "path": "system.io.compression/4.3.0", + "hashPath": "system.io.compression.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4mTkw3zbrqvWAMLqgMxr4lg2ggjcCPAhJqRSKy+ZhrPlXztqYAKf7d5sDDJmCkZjNJxsM/k9ZvlQZR6/zUCihQ==", + "path": "system.io.filesystem/4.3.0", + "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-l8suI9sMTsWzpZraleWE3z1KQqTCqBITJJmeT0AVj6Kk6EWLv9iKDb47O8zBktZqWAxEF1nvUnwhevYW9DToPQ==", + "path": "system.io.filesystem.primitives/4.3.0", + "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" + }, + "System.Linq/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4GusFyZYZE8W5IX9MjqCzucdLArml/j5zxVw2R0VS+JhrTaibL6M2SQSi7lIpGwwBuxU1Dwe2Sx1putAQ5d2BQ==", + "path": "system.linq/4.3.0", + "hashPath": "system.linq.4.3.0.nupkg.sha512" + }, + "System.Linq.Expressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-jlZ1AKYgns90hbPp83uM5SQCWRrqLZWHS3q33zeMlAdKfQ4+KT4VVbWmgWqh6nVw7pB/7dXiR8TjHUPcXwIEKA==", + "path": "system.linq.expressions/4.3.0", + "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" + }, + "System.Linq.Parallel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-td7x21K8LalpjTWCzW/nQboQIFbq9i0r+PCyBBCdLWWnm4NBcdN18vpz/G9hCpUaCIfRL+ZxJNVTywlNlB1aLQ==", + "path": "system.linq.parallel/4.3.0", + "hashPath": "system.linq.parallel.4.3.0.nupkg.sha512" + }, + "System.Memory/4.5.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oonnLQPZAGD21qtNMG4EtVmbYOInk2jV7M+g108B6OHOb67ZOaWnA/K8P5oQ6uK9wxKzB1iEXSChQOi2scKOqA==", + "path": "system.memory/4.5.1", + "hashPath": "system.memory.4.5.1.nupkg.sha512" + }, + "System.Net.Http/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Z1UfSF6dlpCdZdxh6LeoGlYH+q6ptG/iiIWgUUeKhE3DbQACmZkU7Sz2nOX0qdHjz72MOdYRbkSJ5Qwl6sZgvg==", + "path": "system.net.http/4.3.0", + "hashPath": "system.net.http.4.3.0.nupkg.sha512" + }, + "System.Net.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zpJLsVc5gRgTZR1QEi0H3s0bV26t7yug0WcersFr/pVqDvEBiqQm6z3YjYtWkVlMJ65ko1sSvGW5WXqaykOQ+g==", + "path": "system.net.primitives/4.3.0", + "hashPath": "system.net.primitives.4.3.0.nupkg.sha512" + }, + "System.ObjectModel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-jeoLKRPL6N8492mNbyrUFhMkEEFb4ihgZmIuAXqv7lxkWQjzs+UqBPDKqmS2gQfFAUO2wXaaZPVEcKUfhETR2w==", + "path": "system.objectmodel/4.3.0", + "hashPath": "system.objectmodel.4.3.0.nupkg.sha512" + }, + "System.Reflection/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DyOo4oJzP4JDP+GmJmZRTUoMN1T7MDlQLCgptPKJ5oB9AhRZ/RDIhAw0XrLAC6BpBxSPWk+fv6rMzfZcYPIjyQ==", + "path": "system.reflection/4.3.0", + "hashPath": "system.reflection.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/rKEzbnRq6H1LUkLmlqT6YaD8S625rZIuK+EQvBwfdHjJbLni0c9SP0XSM2gv1Khnn9ehU5MSz/WmH7gwt2QGQ==", + "path": "system.reflection.emit/4.3.0", + "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-popK0u8UUkrlKadna04k1polWd1mdATZeKu/Qd0jiMZf4NTZ/GFzwpuuyTxYgUaPtqS2gJZ8rVkBWfYS4IdDQQ==", + "path": "system.reflection.emit.ilgeneration/4.3.0", + "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-TCmTVOvOkWf7QNHMuzbfSD1y7hO0PNhFfTGLzKAJYkh7Ta+lUX2pb+Rrnx/i3Ism6H2qCDzagRbnsluJQ1U0Kw==", + "path": "system.reflection.emit.lightweight/4.3.0", + "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" + }, + "System.Reflection.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VaItSJxypiIW7jglQPcywfByp9jLFkfGE6kZG17ft/q7xnFuS6GcDL/pPvnBqHpC0f0NCPV4utazuQ225DrxQg==", + "path": "system.reflection.extensions/4.3.0", + "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" + }, + "System.Reflection.Metadata/1.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-sARURAx/ZV3f3lL/40TG9y2Wqk60DXUlvzowM5oYeHlcpuEMIxoKnDBhNwBzwRs3i+vWUwIbU7Kk/+mG+hzckA==", + "path": "system.reflection.metadata/1.6.0", + "hashPath": "system.reflection.metadata.1.6.0.nupkg.sha512" + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6j+W57PZnjErWr1OBi7ORmwBBLycDB4N9aEOBKHAHXF/9sLOA30IQkqyOWGUUbQUgjHZwuZSVtgaUzW8wIbFTg==", + "path": "system.reflection.primitives/4.3.0", + "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" + }, + "System.Reflection.TypeExtensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-O0FhlnCiyHTpu0WBl5/0bbWvJpLjLdUNkDomPCaZP4baItazJDHl7666HrWQ1LB9iv5Wt36g08eZrlUB/JXNvw==", + "path": "system.reflection.typeextensions/4.3.0", + "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-u8AA+wa4EtOtkOf7OqxYryXnZ2zwv83qP1Dfnv3ZoA1k9Gx0HR/ERccyc1/HBpjbIdrcsyTVHivNQSYlGwGT8A==", + "path": "system.resources.resourcemanager/4.3.0", + "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" + }, + "System.Resources.Writer/4.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mGgwPBXGTqnw6lQeRI24ChoyPViWx36MVfN6Ys1ceLJMTQDMHcoLiMHOzSvA7ZgjX2tWBy8nfjzlN1kDL/G1gQ==", + "path": "system.resources.writer/4.0.0", + "hashPath": "system.resources.writer.4.0.0.nupkg.sha512" + }, + "System.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wLlTiM4b/Un90BM6s3voqYybZEGra4WiIaXfTeB9kVPZr6QDP97xjG+rZYzdP2jiuQnij1bA8q4PzmrY6l5QTw==", + "path": "system.runtime/4.3.0", + "hashPath": "system.runtime.4.3.0.nupkg.sha512" + }, + "System.Runtime.CompilerServices.Unsafe/4.5.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qUJMNWhbm9oZ3XaMFiEMiYmRPszbnXIkRIi7+4b2Md2xZ6JUOepf0/kY3S85qistRohl9OdMe4PsO+RdG2kTIQ==", + "path": "system.runtime.compilerservices.unsafe/4.5.1", + "hashPath": "system.runtime.compilerservices.unsafe.4.5.1.nupkg.sha512" + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Xz+DgcN+a9LcFJJ9uir7Za7hAye4Hon6CxufXiVkfoQ9IQLn1w0NGr7kuwosXFJ892JA8zNTx7QWjRc9qrmN3w==", + "path": "system.runtime.extensions/4.3.0", + "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LinND4TnXOL/oD28kxybu+XrwrvxSfEa+px6xVx5ndCBTmRoRLmiQrPQAHktupQ5ObRWsTzHot/K8cfK5b3jdw==", + "path": "system.runtime.handles/4.3.0", + "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xm8UVPKs/QFYrTDRzsmpKlGKHYsy5uXre2R6hD73R0NbJ1757Cc//5iedolR03ppxOkG5o1oRYkjxNq0Mb30pw==", + "path": "system.runtime.interopservices/4.3.0", + "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-p0Ks5JJnrUJbbJUBoTRyEdd8dvbjZywKxkmwl1ldjyu767RxUG9+wZGsSN1c8SMiJ8zfvsoO2flilpHKYZtWkg==", + "path": "system.runtime.interopservices.runtimeinformation/4.3.0", + "hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512" + }, + "System.Runtime.Loader/4.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/ol/Y9N+MghH5YPeeFuad34s2mclOPJJ4fs2hnFHr04QfGpUSBlcbpp/P3fggCNrZXwVKQEKgHu7SnA43Y8ang==", + "path": "system.runtime.loader/4.0.0", + "hashPath": "system.runtime.loader.4.0.0.nupkg.sha512" + }, + "System.Runtime.Numerics/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-K+WIriZO8+5TbeVtQY6+4d9Uipq5lJ0BaRr8j+DBXnqcjdcwguqZCsd1ZPBu8bo0b4r6sCnluiWnu3qVGQuLvg==", + "path": "system.runtime.numerics/4.3.0", + "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512" + }, + "System.Runtime.Serialization.Primitives/4.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RVu/CQgW96/pzEE1pV6fCMhwvkA2Exkt2v6D6jce5WaU76CpS1cavqeS8WtYzcnj2o3VQyqpktB/KGlnLkxC2g==", + "path": "system.runtime.serialization.primitives/4.1.1", + "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512" + }, + "System.Security.Claims/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aA3tDOv5FORzSWN4DVrbX2nE0INo5zbOrJbwmcN+XKKoBrfl6XIqUVoy53pa9lYSbSrASVXRxZGtQ/+wF2P6Hw==", + "path": "system.security.claims/4.3.0", + "hashPath": "system.security.claims.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Wwoz0ThoFf4pTpfWy79PN7vob1nlrEF2lX59qfPPnsmZKBq7YER9FShbNx6QiEMnvacx7ZB1OU2WV91KttfJYg==", + "path": "system.security.cryptography.algorithms/4.3.0", + "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Cng/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/EuVr1biVzo7h8wlFel3WN2nh2Dusx30Nsu8k5Dna3rUPYJuWGzoysNMRXQ4YxGWWNnFabDlM7z7EAGbXqL/Og==", + "path": "system.security.cryptography.cng/4.3.0", + "hashPath": "system.security.cryptography.cng.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Csp/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YkD7nbzlPBmcW84gV2mwLWToT7naB8WK7LRNSmkfLuswEBapQqYOeq+4E3UBGu6bOHCnAomgrgiZkk45DZpiNQ==", + "path": "system.security.cryptography.csp/4.3.0", + "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4K76Y6CMYqnuj/2uvucQGdq2X2j5C8wM7/Yl2oxjEGTWepuAzXuvzxQcIccZcqchK/AAmsaiZe24lZNdno7VyA==", + "path": "system.security.cryptography.encoding/4.3.0", + "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3LIgk/eAMyj/OrlxNvPCJRYkKZbJiJ/nhF1mIV8sLibNJJBheEyglXsEIkBYERywzAMW8RIJ5cP3BkYfLq+eKQ==", + "path": "system.security.cryptography.openssl/4.3.0", + "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-jeRd2cHsedEcqHT1rcAK4j41VLlcSKj+dfv7d4rIEcUIi2/MvSNviTXjKXBSNxpG40UzlPrYlRZ7pzUadmBJtw==", + "path": "system.security.cryptography.primitives/4.3.0", + "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8QkPGkoZWHZx6zRljnbomuOaJDHxGdJ64Fz4fKtG4g1ztro2dEZ9gnrmCKIJaHWPDKHLVG2Sc4B7D46W8Ur4Ww==", + "path": "system.security.cryptography.x509certificates/4.3.0", + "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512" + }, + "System.Security.Principal/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-QpsTE5TJpZw/ciAHRxxXLgGyMr1YgQJhjmhAEtM9ueq9SS6SktfLW1eMOLcDteHR9ksODY/BB3Cb1tIhvd3wnA==", + "path": "system.security.principal/4.3.0", + "hashPath": "system.security.principal.4.3.0.nupkg.sha512" + }, + "System.Security.Principal.Windows/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KhIQOIe7lZgn6tMQEQkgL6qLZvgLm2YhroCgsvpz//RUXnsOYx8pa6cmTARWhtf3Ift0ECtoiPkTajDonwEL5w==", + "path": "system.security.principal.windows/4.3.0", + "hashPath": "system.security.principal.windows.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-U564F0gK8wI5A+SXUg99g/sxG9Fgynj90qgtUzMcK8wDF6iAktFXpZfY9cETcz3NKvKR/rQpyhstguPcAA2lUA==", + "path": "system.text.encoding/4.3.0", + "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding.CodePages/4.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-epF1P00AFbqPy5jZx3fpEn5qwlBDZ+dck71xYc/jLibfY6BtoFKOqoj84YHcQWV9HcWb7M13aVJ61XCdK8/3XA==", + "path": "system.text.encoding.codepages/4.4.0", + "hashPath": "system.text.encoding.codepages.4.4.0.nupkg.sha512" + }, + "System.Text.Encoding.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-SLRvag/jlOLLtZy5GwsK1+p6AGP6YmOazNhx7ZdYuxpo5eSh0L1YS9ozte+DEeyNmd/u4/vGQ297wObM7ULAhQ==", + "path": "system.text.encoding.extensions/4.3.0", + "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" + }, + "System.Text.RegularExpressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-R3r6OE8Nl3SHl0lX7gQhFd1qvzEiIf5+gcf2vs/JAXG7kSl8l03HB2Jbyp/6JQ6rsv9XW47qCH8Nnc2kew4P4g==", + "path": "system.text.regularexpressions/4.3.0", + "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" + }, + "System.Threading/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4j+rHu0q/NVTrCrtwVeVy1WXpzMTB+V63DG2pI2aopEurxLtjYxqYFB0RQRahClkAzonmF7rTTPLnAGRfbV37w==", + "path": "system.threading/4.3.0", + "hashPath": "system.threading.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-E3rywGOEzJJvjVzTIZHYWYIja/zs9UTq3hEuUAyBc1Y4fYKG4013HRD9Y2JymL7eHUfaujLhh8UM4yeTnAwZCQ==", + "path": "system.threading.tasks/4.3.0", + "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks.Dataflow/4.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-C6u7OtH7Vvy+wbq4xx53E7evhrJ+I3nBWXCKh7/imxn3cKDUa2iAQ8uhzL0YnviXlJspBXXVmAbOFL1s9UHBuQ==", + "path": "system.threading.tasks.dataflow/4.6.0", + "hashPath": "system.threading.tasks.dataflow.4.6.0.nupkg.sha512" + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-H/qEiAmcJa9kowqQtBFkosed9A3IRfw/OkQSTlih2v97cFpAr/irN0rpX0lZ+NEGnM6EhSxIEDGPLHh9DIBZjQ==", + "path": "system.threading.tasks.extensions/4.3.0", + "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks.Parallel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Wn3GV5YIWjxvv9muD9FSZxH4PLx98Y4D1Z5mpYTowK1RLPtFvusnVKnT0OzmzEpYCMtVNgqfk3kPc9xRGsWrLA==", + "path": "system.threading.tasks.parallel/4.3.0", + "hashPath": "system.threading.tasks.parallel.4.3.0.nupkg.sha512" + }, + "System.Threading.Thread/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-XzzZm9Q5FOttt418yyPwRcMPyq7m570YZdRYtx1YvB37a0lYfODD/lWg/rtKrs8b87iTS09FAtgm/2v6Nh+j6w==", + "path": "system.threading.thread/4.3.0", + "hashPath": "system.threading.thread.4.3.0.nupkg.sha512" + }, + "System.ValueTuple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HiwjNp4lGpyqFXPbWe/GUV3VDn4URlp85xNinOXT+lXQCeJAVdtPm70kH/9PmjbhJjdF1zpPm3obvrT4defjCA==", + "path": "system.valuetuple/4.3.0", + "hashPath": "system.valuetuple.4.3.0.nupkg.sha512" + }, + "System.Xml.ReaderWriter/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8zETm01mtgiyTl3xO+QenvD6TLsDcopZQM0cxyf3maICj4HqP8nxLS9N7aRNsf+RWdWQW+QrKVmh5aD4w1jyQg==", + "path": "system.xml.readerwriter/4.3.0", + "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" + }, + "System.Xml.XDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VRYzRdAdsQFbx8oiblJC1QuAz+Ck792eArsccHxP0vfFv8055l25yhhLVqWCo3j9GEFYcku85bpdaMwXXDeY/w==", + "path": "system.xml.xdocument/4.3.0", + "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" + }, + "System.Xml.XmlDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ykIwRe9zpjElOMTvobLQrSvva9P8Pm1l7BFU/jq/u/INyoPS3mOr4z45kQWaNcWSuq3jGFA/6iU4+z3rPNakgg==", + "path": "system.xml.xmldocument/4.3.0", + "hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512" + }, + "System.Xml.XPath/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8Eo7vuasWRqXfiBRCIKz20Rq1h6n+NMp6nW2RmyUwF4VDekg8xbRZu8S3N21P5XGAhv+kaqUwI3xydEkcw+D5w==", + "path": "system.xml.xpath/4.3.0", + "hashPath": "system.xml.xpath.4.3.0.nupkg.sha512" + }, + "System.Xml.XPath.XDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-I50WmmXa9mUUujJOWKjyjqMnZcJklN5oc6XfHk5bfp9gt6eCJQ74qmi7IYEMa2YHPoFuA93uwssBlfU51i53QA==", + "path": "system.xml.xpath.xdocument/4.3.0", + "hashPath": "system.xml.xpath.xdocument.4.3.0.nupkg.sha512" + } + } } \ No newline at end of file diff --git a/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/osx-x64/mpc.runtimeconfig.json b/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/osx-x64/mpc.runtimeconfig.json index 153e1cf4f..a2882f9c3 100644 --- a/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/osx-x64/mpc.runtimeconfig.json +++ b/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/osx-x64/mpc.runtimeconfig.json @@ -1,3 +1,3 @@ -{ - "runtimeOptions": {} +{ + "runtimeOptions": {} } \ No newline at end of file diff --git a/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/win-x64/mpc.deps.json b/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/win-x64/mpc.deps.json index c6637c3f9..c22219b2e 100644 --- a/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/win-x64/mpc.deps.json +++ b/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/win-x64/mpc.deps.json @@ -1,3465 +1,3465 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v2.1/win-x64", - "signature": "c38a3bccead34b7cf6ceaffd147b8a94c7f91c93" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v2.1": {}, - ".NETCoreApp,Version=v2.1/win-x64": { - "mpc/1.0.0": { - "dependencies": { - "Buildalyzer.Workspaces": "2.2.0", - "Microsoft.NETCore.App": "2.1.5" - }, - "runtime": { - "mpc.dll": {} - } - }, - "Buildalyzer/2.2.0": { - "dependencies": { - "Buildalyzer.Logger": "2.2.0", - "MSBuild.StructuredLogger": "2.0.11", - "Microsoft.Build": "15.8.166", - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Build.Tasks.Core": "15.8.166", - "Microsoft.Build.Utilities.Core": "15.8.166", - "Microsoft.Extensions.DependencyModel": "2.1.0", - "Microsoft.Extensions.Logging": "2.1.1", - "Microsoft.Extensions.Logging.Abstractions": "2.1.1", - "MsBuildPipeLogger.Server": "1.1.2" - }, - "runtime": { - "lib/netstandard2.0/Buildalyzer.dll": { - "assemblyVersion": "2.2.0.0", - "fileVersion": "2.2.0.0" - } - } - }, - "Buildalyzer.Logger/2.2.0": { - "dependencies": { - "NETStandard.Library": "2.0.3" - }, - "runtime": { - "lib/netstandard1.3/Buildalyzer.Logger.dll": { - "assemblyVersion": "2.2.0.0", - "fileVersion": "2.2.0.0" - }, - "lib/netstandard1.3/MsBuildPipeLogger.Logger.dll": { - "assemblyVersion": "1.1.2.0", - "fileVersion": "1.1.2.0" - } - } - }, - "Buildalyzer.Workspaces/2.2.0": { - "dependencies": { - "Buildalyzer": "2.2.0", - "Microsoft.CodeAnalysis.CSharp.Workspaces": "2.9.0", - "Microsoft.CodeAnalysis.VisualBasic.Workspaces": "2.9.0" - }, - "runtime": { - "lib/netstandard2.0/Buildalyzer.Workspaces.dll": { - "assemblyVersion": "2.2.0.0", - "fileVersion": "2.2.0.0" - } - } - }, - "Microsoft.Build/15.8.166": { - "dependencies": { - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Win32.Registry": "4.3.0", - "System.Collections.Immutable": "1.5.0", - "System.Diagnostics.TraceSource": "4.0.0", - "System.IO.Compression": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", - "System.Runtime.Loader": "4.0.0", - "System.Security.Principal.Windows": "4.3.0", - "System.Text.Encoding.CodePages": "4.4.0", - "System.Threading.Tasks.Dataflow": "4.6.0" - }, - "runtime": { - "lib/netcoreapp2.1/Microsoft.Build.dll": { - "assemblyVersion": "15.1.0.0", - "fileVersion": "15.8.166.59604" - } - } - }, - "Microsoft.Build.Framework/15.8.166": { - "dependencies": { - "System.Runtime.Serialization.Primitives": "4.1.1", - "System.Threading.Thread": "4.3.0" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Build.Framework.dll": { - "assemblyVersion": "15.1.0.0", - "fileVersion": "15.8.166.59604" - } - } - }, - "Microsoft.Build.Tasks.Core/15.8.166": { - "dependencies": { - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Build.Utilities.Core": "15.8.166", - "Microsoft.Win32.Registry": "4.3.0", - "System.CodeDom": "4.4.0", - "System.Collections.Immutable": "1.5.0", - "System.Linq.Parallel": "4.3.0", - "System.Net.Http": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.Writer": "4.0.0", - "System.Threading.Tasks.Dataflow": "4.6.0" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Build.Tasks.Core.dll": { - "assemblyVersion": "15.1.0.0", - "fileVersion": "15.8.166.59604" - } - } - }, - "Microsoft.Build.Utilities.Core/15.8.166": { - "dependencies": { - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Win32.Registry": "4.3.0", - "System.Collections.Immutable": "1.5.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", - "System.Text.Encoding.CodePages": "4.4.0" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll": { - "assemblyVersion": "15.1.0.0", - "fileVersion": "15.8.166.59604" - } - } - }, - "Microsoft.CodeAnalysis.Analyzers/2.6.1": {}, - "Microsoft.CodeAnalysis.Common/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.Analyzers": "2.6.1", - "System.AppContext": "4.3.0", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Collections.Immutable": "1.5.0", - "System.Console": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.FileVersionInfo": "4.3.0", - "System.Diagnostics.StackTrace": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO.Compression": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.CodePages": "4.4.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0", - "System.Threading.Tasks.Parallel": "4.3.0", - "System.Threading.Thread": "4.3.0", - "System.ValueTuple": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0", - "System.Xml.XPath.XDocument": "4.3.0", - "System.Xml.XmlDocument": "4.3.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.CSharp/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.Common": "2.9.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.CSharp": "2.9.0", - "Microsoft.CodeAnalysis.Workspaces.Common": "2.9.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.Common": "2.9.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.VisualBasic": "2.9.0", - "Microsoft.CodeAnalysis.Workspaces.Common": "2.9.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { - "dependencies": { - "Microsoft.CodeAnalysis.Common": "2.9.0", - "System.Composition": "1.0.31", - "System.Diagnostics.Contracts": "4.3.0", - "System.Linq.Parallel": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading.Tasks.Parallel": "4.3.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CodeAnalysis.Workspaces.dll": { - "assemblyVersion": "2.9.0.0", - "fileVersion": "2.9.0.63208" - } - }, - "resources": { - "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "cs" - }, - "lib/netstandard1.3/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "de" - }, - "lib/netstandard1.3/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "es" - }, - "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "fr" - }, - "lib/netstandard1.3/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "it" - }, - "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "ja" - }, - "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "ko" - }, - "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "pl" - }, - "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "pt-BR" - }, - "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "ru" - }, - "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "tr" - }, - "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.CSharp/4.0.1": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "Microsoft.DotNet.PlatformAbstractions/2.1.0": { - "dependencies": { - "System.AppContext": "4.3.0", - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0" - }, - "runtime": { - "lib/netstandard1.3/Microsoft.DotNet.PlatformAbstractions.dll": { - "assemblyVersion": "2.1.0.0", - "fileVersion": "2.1.0.0" - } - } - }, - "Microsoft.Extensions.Configuration/2.1.1": { - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { - "dependencies": { - "Microsoft.Extensions.Primitives": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Configuration.Binder/2.1.1": { - "dependencies": { - "Microsoft.Extensions.Configuration": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.DependencyModel/2.1.0": { - "dependencies": { - "Microsoft.DotNet.PlatformAbstractions": "2.1.0", - "Newtonsoft.Json": "9.0.1", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Linq": "4.3.0" - }, - "runtime": { - "lib/netstandard1.6/Microsoft.Extensions.DependencyModel.dll": { - "assemblyVersion": "2.1.0.0", - "fileVersion": "2.1.0.0" - } - } - }, - "Microsoft.Extensions.Logging/2.1.1": { - "dependencies": { - "Microsoft.Extensions.Configuration.Binder": "2.1.1", - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", - "Microsoft.Extensions.Logging.Abstractions": "2.1.1", - "Microsoft.Extensions.Options": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Logging.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Logging.Abstractions/2.1.1": { - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Options/2.1.1": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", - "Microsoft.Extensions.Primitives": "2.1.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Options.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.Extensions.Primitives/2.1.1": { - "dependencies": { - "System.Memory": "4.5.1", - "System.Runtime.CompilerServices.Unsafe": "4.5.1" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": { - "assemblyVersion": "2.1.1.0", - "fileVersion": "2.1.1.18157" - } - } - }, - "Microsoft.NETCore.App/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetHostPolicy": "2.1.5", - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "NETStandard.Library": "2.0.3", - "runtime.win-x64.Microsoft.NETCore.App": "2.1.5" - } - }, - "Microsoft.NETCore.DotNetAppHost/2.1.5": { - "dependencies": { - "runtime.win-x64.Microsoft.NETCore.DotNetAppHost": "2.1.5" - } - }, - "Microsoft.NETCore.DotNetHostPolicy/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetHostResolver": "2.1.5", - "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy": "2.1.5" - } - }, - "Microsoft.NETCore.DotNetHostResolver/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetAppHost": "2.1.5", - "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver": "2.1.5" - } - }, - "Microsoft.NETCore.Platforms/2.1.1": {}, - "Microsoft.NETCore.Targets/2.0.0": {}, - "Microsoft.Win32.Primitives/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "Microsoft.Win32.Registry/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - } - }, - "MSBuild.StructuredLogger/2.0.11": { - "dependencies": { - "Microsoft.Build": "15.8.166", - "Microsoft.Build.Framework": "15.8.166", - "Microsoft.Build.Tasks.Core": "15.8.166", - "Microsoft.Build.Utilities.Core": "15.8.166" - }, - "runtime": { - "lib/netstandard2.0/StructuredLogger.dll": { - "assemblyVersion": "2.0.11.0", - "fileVersion": "2.0.11.26510" - } - } - }, - "MsBuildPipeLogger.Server/1.1.2": { - "dependencies": { - "Microsoft.Build": "15.8.166", - "NETStandard.Library": "2.0.3" - }, - "runtime": { - "lib/netstandard1.5/MsBuildPipeLogger.Server.dll": { - "assemblyVersion": "1.1.2.0", - "fileVersion": "1.1.2.0" - } - } - }, - "NETStandard.Library/2.0.3": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1" - } - }, - "Newtonsoft.Json/9.0.1": { - "dependencies": { - "Microsoft.CSharp": "4.0.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Serialization.Primitives": "4.1.1", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/Newtonsoft.Json.dll": { - "assemblyVersion": "9.0.0.0", - "fileVersion": "9.0.1.19813" - } - } - }, - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.native.System/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0" - } - }, - "runtime.native.System.IO.Compression/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0" - } - }, - "runtime.native.System.Net.Http/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0" - } - }, - "runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "dependencies": { - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" - } - }, - "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "dependencies": { - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {}, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.win-x64.Microsoft.NETCore.App/2.1.5": { - "runtime": { - "runtimes/win-x64/lib/netcoreapp2.1/Microsoft.CSharp.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/Microsoft.VisualBasic.dll": { - "assemblyVersion": "10.0.4.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/Microsoft.Win32.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/Microsoft.Win32.Registry.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/SOS.NETCore.dll": { - "assemblyVersion": "1.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.AppContext.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Buffers.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.Concurrent.dll": { - "assemblyVersion": "4.0.14.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.Immutable.dll": { - "assemblyVersion": "1.2.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.NonGeneric.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.Specialized.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.Annotations.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.DataAnnotations.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.EventBasedAsync.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.Primitives.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.TypeConverter.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Configuration.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Console.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Core.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Data.Common.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Data.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Contracts.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Debug.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll": { - "assemblyVersion": "4.0.3.1", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.FileVersionInfo.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Process.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.StackTrace.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.TextWriterTraceListener.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Tools.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.TraceSource.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Tracing.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Drawing.Primitives.dll": { - "assemblyVersion": "4.2.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Drawing.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Dynamic.Runtime.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Globalization.Calendars.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Globalization.Extensions.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Globalization.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Compression.Brotli.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Compression.FileSystem.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Compression.ZipFile.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Compression.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.AccessControl.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.DriveInfo.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.Watcher.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.IsolatedStorage.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.MemoryMappedFiles.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Pipes.AccessControl.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Pipes.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.UnmanagedMemoryStream.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.IO.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Linq.Expressions.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Linq.Parallel.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Linq.Queryable.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Linq.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Memory.dll": { - "assemblyVersion": "4.1.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Http.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.HttpListener.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Mail.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.NameResolution.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.NetworkInformation.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Ping.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Requests.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Security.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.ServicePoint.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Sockets.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebClient.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebHeaderCollection.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebProxy.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebSockets.Client.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebSockets.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Net.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Numerics.Vectors.dll": { - "assemblyVersion": "4.1.4.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Numerics.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.ObjectModel.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Private.DataContractSerialization.dll": { - "assemblyVersion": "4.1.4.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Private.Uri.dll": { - "assemblyVersion": "4.0.5.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Private.Xml.Linq.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Private.Xml.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.DispatchProxy.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Emit.ILGeneration.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Emit.Lightweight.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Emit.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Extensions.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Metadata.dll": { - "assemblyVersion": "1.4.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.TypeExtensions.dll": { - "assemblyVersion": "4.1.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Resources.Reader.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Resources.ResourceManager.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Resources.Writer.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.CompilerServices.VisualC.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Extensions.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Handles.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.RuntimeInformation.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.WindowsRuntime.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Loader.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Numerics.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Formatters.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Json.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Primitives.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Xml.dll": { - "assemblyVersion": "4.1.4.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.AccessControl.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Claims.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Algorithms.dll": { - "assemblyVersion": "4.3.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Cng.dll": { - "assemblyVersion": "4.3.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Csp.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Encoding.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.OpenSsl.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.X509Certificates.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { - "assemblyVersion": "4.1.1.1", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Principal.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.SecureString.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Security.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.ServiceModel.Web.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.ServiceProcess.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Text.Encoding.Extensions.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Text.Encoding.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Text.RegularExpressions.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Overlapped.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Tasks.Dataflow.dll": { - "assemblyVersion": "4.6.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Tasks.Extensions.dll": { - "assemblyVersion": "4.3.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Tasks.Parallel.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Tasks.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Thread.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.ThreadPool.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Timer.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Transactions.Local.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Transactions.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.ValueTuple.dll": { - "assemblyVersion": "4.0.3.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Web.HttpUtility.dll": { - "assemblyVersion": "4.0.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Web.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Windows.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.Linq.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.ReaderWriter.dll": { - "assemblyVersion": "4.2.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.Serialization.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XDocument.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XPath.XDocument.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XPath.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XmlDocument.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XmlSerializer.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/System.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/WindowsBase.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/mscorlib.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/lib/netcoreapp2.1/netstandard.dll": { - "assemblyVersion": "2.0.0.0", - "fileVersion": "4.6.26919.2" - } - }, - "native": { - "runtimes/win-x64/native/Microsoft.DiaSymReader.Native.amd64.dll": { - "fileVersion": "14.12.25830.2" - }, - "runtimes/win-x64/native/System.Private.CoreLib.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/api-ms-win-core-console-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-datetime-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-debug-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-errorhandling-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-file-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-file-l1-2-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-file-l2-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-handle-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-heap-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-interlocked-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-libraryloader-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-localization-l1-2-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-memory-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-namedpipe-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-processenvironment-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-processthreads-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-processthreads-l1-1-1.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-profile-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-rtlsupport-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-string-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-synch-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-synch-l1-2-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-sysinfo-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-timezone-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-core-util-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-conio-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-convert-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-environment-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-filesystem-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-heap-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-locale-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-math-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-multibyte-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-private-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-process-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-runtime-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-stdio-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-string-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-time-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/api-ms-win-crt-utility-l1-1-0.dll": { - "fileVersion": "10.0.17134.12" - }, - "runtimes/win-x64/native/clrcompression.dll": { - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/clretwrc.dll": { - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/clrjit.dll": { - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/coreclr.dll": { - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/dbgshim.dll": { - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/mscordaccore.dll": { - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/mscordaccore_amd64_amd64_4.6.26919.02.dll": { - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/mscordbi.dll": { - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/mscorrc.debug.dll": { - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/mscorrc.dll": { - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/sos.dll": { - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/sos_amd64_amd64_4.6.26919.02.dll": { - "fileVersion": "4.6.26919.2" - }, - "runtimes/win-x64/native/ucrtbase.dll": { - "fileVersion": "10.0.17134.12" - } - } - }, - "runtime.win-x64.Microsoft.NETCore.DotNetAppHost/2.1.5": { - "native": { - "runtimes/win-x64/native/apphost.exe": { - "fileVersion": "0.0.0.0" - } - } - }, - "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetHostResolver": "2.1.5" - }, - "native": { - "runtimes/win-x64/native/hostpolicy.dll": { - "fileVersion": "2.1.26919.1" - } - } - }, - "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver/2.1.5": { - "dependencies": { - "Microsoft.NETCore.DotNetAppHost": "2.1.5" - }, - "native": { - "runtimes/win-x64/native/hostfxr.dll": { - "fileVersion": "2.1.26919.1" - } - } - }, - "System.AppContext/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Buffers/4.3.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.CodeDom/4.4.0": { - "runtime": { - "lib/netstandard2.0/System.CodeDom.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.6.25519.3" - } - } - }, - "System.Collections/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Collections.Concurrent/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Collections.Immutable/1.5.0": {}, - "System.Composition/1.0.31": { - "dependencies": { - "System.Composition.AttributedModel": "1.0.31", - "System.Composition.Convention": "1.0.31", - "System.Composition.Hosting": "1.0.31", - "System.Composition.Runtime": "1.0.31", - "System.Composition.TypedParts": "1.0.31" - } - }, - "System.Composition.AttributedModel/1.0.31": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.AttributedModel.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Composition.Convention/1.0.31": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Composition.AttributedModel": "1.0.31", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.Convention.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Composition.Hosting/1.0.31": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Composition.Runtime": "1.0.31", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.Hosting.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Composition.Runtime/1.0.31": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.Runtime.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Composition.TypedParts/1.0.31": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Composition.AttributedModel": "1.0.31", - "System.Composition.Hosting": "1.0.31", - "System.Composition.Runtime": "1.0.31", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - }, - "runtime": { - "lib/netstandard1.0/System.Composition.TypedParts.dll": { - "assemblyVersion": "1.0.31.0", - "fileVersion": "4.6.24705.1" - } - } - }, - "System.Console/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.IO": "4.3.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Diagnostics.Contracts/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.Debug/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.DiagnosticSource/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Diagnostics.FileVersionInfo/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - } - }, - "System.Diagnostics.StackTrace/4.3.0": { - "dependencies": { - "System.IO.FileSystem": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Metadata": "1.6.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.Tools/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.TraceSource/4.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0" - } - }, - "System.Diagnostics.Tracing/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Dynamic.Runtime/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Globalization/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Globalization.Calendars/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Globalization": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Globalization.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - } - }, - "System.IO/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.Compression/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Buffers": "4.3.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.IO.Compression": "4.3.0" - } - }, - "System.IO.FileSystem/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.IO": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.FileSystem.Primitives/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Linq/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Linq.Expressions/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Emit.Lightweight": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Linq.Parallel/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Memory/4.5.1": {}, - "System.Net.Http/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.DiagnosticSource": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Extensions": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Net.Primitives/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.ObjectModel/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Reflection/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit/4.3.0": { - "dependencies": { - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit.ILGeneration/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit.Lightweight/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Metadata/1.6.0": {}, - "System.Reflection.Primitives/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.TypeExtensions/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.ResourceManager/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.Writer/4.0.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Runtime/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0" - } - }, - "System.Runtime.CompilerServices.Unsafe/4.5.1": { - "runtime": { - "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": { - "assemblyVersion": "4.0.4.0", - "fileVersion": "0.0.0.0" - } - } - }, - "System.Runtime.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.Handles/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.InteropServices/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0" - } - }, - "System.Runtime.Loader/4.0.0": { - "dependencies": { - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.Numerics/4.3.0": { - "dependencies": { - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Runtime.Serialization.Primitives/4.1.1": { - "dependencies": { - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Security.Claims/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Security.Principal": "4.3.0" - } - }, - "System.Security.Cryptography.Algorithms/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.Apple": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Cng/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Security.Cryptography.Csp/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Security.Cryptography.Encoding/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.OpenSsl/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Primitives/4.3.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Security.Cryptography.X509Certificates/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Calendars": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Cng": "4.3.0", - "System.Security.Cryptography.Csp": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Principal/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Security.Principal.Windows/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.Win32.Primitives": "4.3.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Claims": "4.3.0", - "System.Security.Principal": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Text.Encoding/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Text.Encoding.CodePages/4.4.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1" - }, - "runtime": { - "runtimes/win/lib/netcoreapp2.0/System.Text.Encoding.CodePages.dll": { - "assemblyVersion": "4.1.0.0", - "fileVersion": "4.6.25519.3" - } - } - }, - "System.Text.Encoding.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Text.RegularExpressions/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Threading/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.1", - "Microsoft.NETCore.Targets": "2.0.0", - "System.Runtime": "4.3.0" - } - }, - "System.Threading.Tasks.Dataflow/4.6.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks.Extensions/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks.Parallel/4.3.0": { - "dependencies": { - "System.Collections.Concurrent": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Thread/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.ValueTuple/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Xml.ReaderWriter/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0" - } - }, - "System.Xml.XDocument/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XmlDocument/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XPath/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XPath.XDocument/4.3.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0", - "System.Xml.XPath": "4.3.0" - } - } - } - }, - "libraries": { - "mpc/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "Buildalyzer/2.2.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-5nO0Lkv0zcB5Ck8AaO9eXnRbAfVAB45QQ0ZGCAfPwRxqlqn7WFkn6ESL8EWD8jgTdodtIE8KpZFXm8zb1jIYBw==", - "path": "buildalyzer/2.2.0", - "hashPath": "buildalyzer.2.2.0.nupkg.sha512" - }, - "Buildalyzer.Logger/2.2.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-490kgGa+07Jwdsq0jqxUSG2QjVg65MJHMEI1/D/7pOjNY4/Zc5DJTKxuL1eJUFf+rzB7NtZKDV0IGABlH8Ihmw==", - "path": "buildalyzer.logger/2.2.0", - "hashPath": "buildalyzer.logger.2.2.0.nupkg.sha512" - }, - "Buildalyzer.Workspaces/2.2.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-iItCd3jnCUCXryBbWPpRqzPco2vqWobEAoyXelVSfQ+xkZmEwRGYtjjxa+14qo9sNve/a+LTeYknWG/dyRIQOg==", - "path": "buildalyzer.workspaces/2.2.0", - "hashPath": "buildalyzer.workspaces.2.2.0.nupkg.sha512" - }, - "Microsoft.Build/15.8.166": { - "type": "package", - "serviceable": true, - "sha512": "sha512-MH3/LhMZZEAkWyMxUkRmNoMqO4A4XhXz7c1OywTKs9n0bvrCPD4S5k7p0YfyEpSY4JVIzbUFvHCR/uaFXtACEA==", - "path": "microsoft.build/15.8.166", - "hashPath": "microsoft.build.15.8.166.nupkg.sha512" - }, - "Microsoft.Build.Framework/15.8.166": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Bw7ebVvOQQC5zgM0AsyZFB23aJvEISa1vABkWCgjGueopq+fG6JDhwHeAXloLcwtQldvDobivLDFw6/8QDN9cg==", - "path": "microsoft.build.framework/15.8.166", - "hashPath": "microsoft.build.framework.15.8.166.nupkg.sha512" - }, - "Microsoft.Build.Tasks.Core/15.8.166": { - "type": "package", - "serviceable": true, - "sha512": "sha512-NCTTEPkSUkxE7dZiVfnaSzjEMs7AiQYJ9hVHzGyreQzZFrR9fajwBc2KAjjH3pS8nBcx/rmjH9T0b5ZMOJviEw==", - "path": "microsoft.build.tasks.core/15.8.166", - "hashPath": "microsoft.build.tasks.core.15.8.166.nupkg.sha512" - }, - "Microsoft.Build.Utilities.Core/15.8.166": { - "type": "package", - "serviceable": true, - "sha512": "sha512-AZ7pSCGDeRlBm3TIOrnSOCWB2+Wea4rL7sMsinyChF3NJUAb//lF0fUyZfjbukE5eCqba17gw0FnbMjnNgtecw==", - "path": "microsoft.build.utilities.core/15.8.166", - "hashPath": "microsoft.build.utilities.core.15.8.166.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.Analyzers/2.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-x9MfOXfTj/tdgm3rV15niL/J0T36ZPiVrIfO3Tax9Lv4fLGnVZJXSQatZezJ+tX+YYk2ZAPbq87vnSFwh1Je9w==", - "path": "microsoft.codeanalysis.analyzers/2.6.1", - "hashPath": "microsoft.codeanalysis.analyzers.2.6.1.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.Common/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-gWTphgR8eHu39XcrfhxE8WwD35C/vaR06QiKM1TaCbjmgPafZ9G3TY7eeT44BfHVMQEGYZmjV5NZNQLm2F7ZTQ==", - "path": "microsoft.codeanalysis.common/2.9.0", - "hashPath": "microsoft.codeanalysis.common.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.CSharp/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-RNACUadFXlT3/Y4XIVI1+g3hpGgToYJyVTRBVFmhE8gtRA2snM5dPKv2e4Qz7K/3Ap7Ky+YgIKCO4YsmWqal/A==", - "path": "microsoft.codeanalysis.csharp/2.9.0", - "hashPath": "microsoft.codeanalysis.csharp.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Kis5VedBJjtdlYlI9erCAnqz2fVgRWLHCDYMIKRXsD4CVWrwrm8sCq3qmY9Drmit85StquRPFw5z8YMhDCB7RQ==", - "path": "microsoft.codeanalysis.csharp.workspaces/2.9.0", - "hashPath": "microsoft.codeanalysis.csharp.workspaces.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4nxVFgxywDHttOSLh9z36QGUdsTFz80A/M+qc2bgZ3GBuTR9+FeDPIap8DQrBcDZWO1Kb+0QC6b65jZvgcZP5g==", - "path": "microsoft.codeanalysis.visualbasic/2.9.0", - "hashPath": "microsoft.codeanalysis.visualbasic.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-dL9+IJPk7mZ9LFY0saaXk1adKbEDhHe+U+1fG4F7o4NsvZqcOS/6sRcEWl253gi2ZoFoonDDB3sffhrlg1ITIQ==", - "path": "microsoft.codeanalysis.visualbasic.workspaces/2.9.0", - "hashPath": "microsoft.codeanalysis.visualbasic.workspaces.2.9.0.nupkg.sha512" - }, - "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-KGkaumh6O0gS0RBWHHIfx34u5sm7vhgTDaFOcKm60tELh6Jy6OYNtdB/Iyefvvwb+PaZIcUg+9hbGBQ1GdCHqA==", - "path": "microsoft.codeanalysis.workspaces.common/2.9.0", - "hashPath": "microsoft.codeanalysis.workspaces.common.2.9.0.nupkg.sha512" - }, - "Microsoft.CSharp/4.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CLd4nvEjFlopxG7O6y4d2h46ZP+pfBw0cT/7WuZpMYduIthUO8dEJzfq8l+WJm8nOEg3LJcdKu8KG8N28vomBA==", - "path": "microsoft.csharp/4.0.1", - "hashPath": "microsoft.csharp.4.0.1.nupkg.sha512" - }, - "Microsoft.DotNet.PlatformAbstractions/2.1.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ae/c3pX6vhCs17caUrVZrb8n9gDTzr6usnZKZEHla7uy7ZcjQLfm09gS7m+IneVtmGwXm5hcSDa5qwqwLaH2Ug==", - "path": "microsoft.dotnet.platformabstractions/2.1.0", - "hashPath": "microsoft.dotnet.platformabstractions.2.1.0.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-1JaydycXzbfAExlsD7XIWykzVnU/wZM86KzrHyGlXuxqnqzcWSXLJn4Ejn8bDnq07CEJNZ+GjsxWKlJ8kFfnvQ==", - "path": "microsoft.extensions.configuration/2.1.1", - "hashPath": "microsoft.extensions.configuration.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-9EMhOWU2eOQOtMIJ+vfwKJpnLRc1Wl3vXu8qXeevA91cSY4j3WvArmF7ApGtJwa7yKewJTvlQlBSn9OSnLFg6Q==", - "path": "microsoft.extensions.configuration.abstractions/2.1.1", - "hashPath": "microsoft.extensions.configuration.abstractions.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.Binder/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-t7KFAv6AxyUsZj9QN8FAbusg+X5baCELl+XtscyuP1IGUv5UctyY7/rNZLyiKaV7HhAcDQ1zC5ZQNQQFn6JpAA==", - "path": "microsoft.extensions.configuration.binder/2.1.1", - "hashPath": "microsoft.extensions.configuration.binder.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PW1596sF97gpIc1JuUuYvTmeLfeqC5whbWPsWgJhN0fdwz683him3b/HB0dqhFesVssOjnnA0fEz4+S0gUeBqA==", - "path": "microsoft.extensions.dependencyinjection.abstractions/2.1.1", - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyModel/2.1.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3KPT6CLH0VEGr2um9aG1rYTmqfMVlkRuueFpN6AxeIKpcMA4OVHf4aNpgYXZ6oF+x4uh9VhK/66FgPCd1mMlnQ==", - "path": "microsoft.extensions.dependencymodel/2.1.0", - "hashPath": "microsoft.extensions.dependencymodel.2.1.0.nupkg.sha512" - }, - "Microsoft.Extensions.Logging/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-x4/RzeReQSIi4nVpOjXEySm/xUSr6lBjuecdYnlUboWxbLSm2j3vhFV5OLGRp3gfte3cRMdysMNa/wyZN0t/Tw==", - "path": "microsoft.extensions.logging/2.1.1", - "hashPath": "microsoft.extensions.logging.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Logging.Abstractions/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QWFWKrdeoDSEr8nVJaBAVDMj24wnh9clGzDNmMdgHHRsOIwTUMeh4XljeZXJhIKPT00jWuzwEzn3uNxOtO4cYg==", - "path": "microsoft.extensions.logging.abstractions/2.1.1", - "hashPath": "microsoft.extensions.logging.abstractions.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Options/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-j0zOfTt1Qm+JDW2m+6Q/aj1m4C8+onudUu4ls/fN69VxruZkMWmX1bPKkbkYIPNNxJsf4k7FOkVq5o1vEFq9pQ==", - "path": "microsoft.extensions.options/2.1.1", - "hashPath": "microsoft.extensions.options.2.1.1.nupkg.sha512" - }, - "Microsoft.Extensions.Primitives/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Svz25/egj1TsNL4118jyMqkhDiu0l8QYWq2p52P4BBN0GbqwR18ZRIctSP5TTDJy0m0EFC8aB2FOVjGtvEGWSA==", - "path": "microsoft.extensions.primitives/2.1.1", - "hashPath": "microsoft.extensions.primitives.2.1.1.nupkg.sha512" - }, - "Microsoft.NETCore.App/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-oTQd5w0qQp32QSKPE6TqhhcybkkTKqtn4YVnNsYHwFR28s1kUAI/xg+hmKwF/G+u4vUjgy7Y7ghC0cIwRP5wdg==", - "path": "microsoft.netcore.app/2.1.5", - "hashPath": "microsoft.netcore.app.2.1.5.nupkg.sha512" - }, - "Microsoft.NETCore.DotNetAppHost/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ir7AI1ywRriX1fLTLYOyiDTYSj+zpdAfTBFH0dLwvLvC8obU0EYnmrjTzbYJ8GSnza1H1Rv3Lo/lJBSccmTGMA==", - "path": "microsoft.netcore.dotnetapphost/2.1.5", - "hashPath": "microsoft.netcore.dotnetapphost.2.1.5.nupkg.sha512" - }, - "Microsoft.NETCore.DotNetHostPolicy/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fkTeZ7G1Tf0aT+P1bMyn/qJXByFIaATNAt0DKrZ3nC7jMRAWBHJifOrOe5XnGvvc0YzqVLmHARYtzSG00/9NVw==", - "path": "microsoft.netcore.dotnethostpolicy/2.1.5", - "hashPath": "microsoft.netcore.dotnethostpolicy.2.1.5.nupkg.sha512" - }, - "Microsoft.NETCore.DotNetHostResolver/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/rPHOsRWubviDEGlxQcNKtJ7G6ML0F/Pg5vG1E+lgfdmoyLRKqrE3ZjVlYCxS18ExZGekBq9LEVb+eOKMxlJEA==", - "path": "microsoft.netcore.dotnethostresolver/2.1.5", - "hashPath": "microsoft.netcore.dotnethostresolver.2.1.5.nupkg.sha512" - }, - "Microsoft.NETCore.Platforms/2.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-iXcQc19h5oECLVokgt6hvLOOPP/d9kYQh9miF9zbcxGVZenuTN9IMB+f+gP26/+Rc5r2KLES5Of45Qdqo0NJeA==", - "path": "microsoft.netcore.platforms/2.1.1", - "hashPath": "microsoft.netcore.platforms.2.1.1.nupkg.sha512" - }, - "Microsoft.NETCore.Targets/2.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-mJnCMoBfWL0lxxlBFJ/8cZKTfPpI82TekZkUqvSCBtunUaaqr2LVeWl1zQYdanAdk4Ddf1HCwb8+DNYaNFBk1w==", - "path": "microsoft.netcore.targets/2.0.0", - "hashPath": "microsoft.netcore.targets.2.0.0.nupkg.sha512" - }, - "Microsoft.Win32.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-d2YDDsTDnU/+ERiLxkHMviiQlclT6/G2iddWPPH4xLbS0P0+RYcqOZxqauVHX6s3Uv2cUkL226qXKpfn/fL98Q==", - "path": "microsoft.win32.primitives/4.3.0", - "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512" - }, - "Microsoft.Win32.Registry/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-OHAvcu6tVh40PncTYFkpLItsw9O8sUc59C4eqSqEd+U5rY7t0+u7Xoi6Mw2QOfvPJ2HUJlwIEVqxklDIfn757Q==", - "path": "microsoft.win32.registry/4.3.0", - "hashPath": "microsoft.win32.registry.4.3.0.nupkg.sha512" - }, - "MSBuild.StructuredLogger/2.0.11": { - "type": "package", - "serviceable": true, - "sha512": "sha512-LYK6MOfPUEE/u10OepnvFOjFy12YWOjtXXIh3K0RtUzdjatIHZSAjU8MKPuGcegi06iblNH2Rlc78vc2AVokhg==", - "path": "msbuild.structuredlogger/2.0.11", - "hashPath": "msbuild.structuredlogger.2.0.11.nupkg.sha512" - }, - "MsBuildPipeLogger.Server/1.1.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4gxSIkc4mMpHemehqDAZzGdKAhGJAxyt+56SUi6B4X2FWijojXzcIr7illkuEA7Ex05eoa5Cx4pr6d1hn4m8lg==", - "path": "msbuildpipelogger.server/1.1.2", - "hashPath": "msbuildpipelogger.server.1.1.2.nupkg.sha512" - }, - "NETStandard.Library/2.0.3": { - "type": "package", - "serviceable": true, - "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", - "path": "netstandard.library/2.0.3", - "hashPath": "netstandard.library.2.0.3.nupkg.sha512" - }, - "Newtonsoft.Json/9.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", - "path": "newtonsoft.json/9.0.1", - "hashPath": "newtonsoft.json.9.0.1.nupkg.sha512" - }, - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-+HIVh+8SOZS56Hqm/5wKUEAiz3BgjQRTQ6OG4K3FwSXT3JckhZbH4A/Xdwb7Z/GPQW4HocnFbq5CSuVXwy6ylg==", - "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-tRFXi8EvFI+yB0DBDu52piUGKBlNebhT1swNbiTvUeZnkCuabY41eJnQaHESk1PGTiHs0Lh2FSwZYG5cUCnrrw==", - "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-DPnni2nk3x2Iz/6Do1tme5F8sM4Jo5xUNsHJxlRJ686v/WcFeuTR8r72Bwr/8iJxRJepn/ke/XLHphnWme1OpQ==", - "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.native.System/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-6l0Dkix8bgJVwfFQg1yPNBa3J3hmOdSuZLYI06QlheipqU0hT2XCfN8otCPhD4M2Aq+Xhy1B5+9Jr9WWhfdusw==", - "path": "runtime.native.system/4.3.0", - "hashPath": "runtime.native.system.4.3.0.nupkg.sha512" - }, - "runtime.native.System.IO.Compression/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-FBMFTXHy9kGuYs/bj62XyVrQB44HZcZ1fTj3Iv04eFGVcg65vac5o9Rv3hdYqNPmWK/DVgLUV8aeeTzcaqB5hg==", - "path": "runtime.native.system.io.compression/4.3.0", - "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" - }, - "runtime.native.System.Net.Http/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-g8FnRWqvKQwR0pjrB9bG1cLGSR4EFAu+7U34Q+ptucNLvBfWEAWcm54vrZCMAT6H9VU6VfDruGHA4nc1gu1i2w==", - "path": "runtime.native.system.net.http/4.3.0", - "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512" - }, - "runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-cgjvRwk6uDocZbujiZcZ90OYnErFqpN26H56Xfe8nnZIvErpRHe0RxP16DsLzY5dBuVqChNb+hLN7R8ixk1xVg==", - "path": "runtime.native.system.security.cryptography.apple/4.3.0", - "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" - }, - "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-uvqanMQDxKS+7ADCRVzNqoa9IQuxuBOVrtWvNNuNyNe/Gb03SxR9QgoRKKvIrvwMUGrudNDhrEITDRGWLIXqGA==", - "path": "runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-6uH/bLrHHChHf1v+ZZCnVjKiaeCFOjd7RUBG4/MqBBRheByueBEGTvPrv2hSrpxPrwYZuNACAmYanbB7MtcflA==", - "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7fcf887lmwAHbWfCeQUVA/A8PaEkj0nwYDqUlytKP78+BJUjbVWTJqjFkM+jBeTCOElrt1RzrH0Hil+1tNLVBw==", - "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fuh5u2mOjEjHx2bQHHZTryMCWNOY9N7I0rCN3KldGRU6brnMOuZRTB3uh6AYK/9eioywbNerYDZAL6M3C4c7MQ==", - "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", - "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-W3mGmFCN5ei6jegKyBX8eMB+OEMAzcYvZBCocfrwOBMBsyv0YB9XuxZ9xxqsQJ71T4LGImi8+A8ntNkdwk4OhQ==", - "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-nwK59n0Ink7MhkZKGxzAOdbxniOBQEbfV3fqvE0Q/AcuenNkdNlu6fbeeGWVzJWeliFIgzk1Rp/hCR/aAbs32g==", - "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fSj8+HzPXcEnBA+svDivS1/dhfwhG1LgQvyN7Jxvaqt97aMfGC1mdlMVUEoS+5awAHIZtmi8GZWtq+rXK5zaUw==", - "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-xtUCr/NeowVrQ3e8uWRzppefx6yBvXYPKoHYjFaZKyO6HVZ7yFd7PM6P/QwAKejYRnlZElOL01lz5arTfKNeDA==", - "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Zja3A4KNQzxx07aAwgNoD55qGAntIwaRruMdRZaUNo2PB8czzPJE9GMFR/6im2rMoriWfxR+G90gXdQUx7v8KQ==", - "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.win-x64.Microsoft.NETCore.App/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-rSRi1EnEPpe+p90DyVkOJDBT0mBT06+qFlMdHmMBD+e8SznqkkgmYzK5WbPsrVSpxsZZZjOBseqKsgINW/E3Hw==", - "path": "runtime.win-x64.microsoft.netcore.app/2.1.5", - "hashPath": "runtime.win-x64.microsoft.netcore.app.2.1.5.nupkg.sha512" - }, - "runtime.win-x64.Microsoft.NETCore.DotNetAppHost/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-0qZSFFY+5cCiUMoiFUWcA02+d2F1qrDalBOQ8bdtrQ6xauUNq7of96a1IGYB55gZPBwg18N3k2mKkT8toBgX8g==", - "path": "runtime.win-x64.microsoft.netcore.dotnetapphost/2.1.5", - "hashPath": "runtime.win-x64.microsoft.netcore.dotnetapphost.2.1.5.nupkg.sha512" - }, - "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-zNanEWbXKa8E/KPg8b77VWzrxJgE3lnDcFIu16k5k496yMmqgqqh6o0pOAdVqmolxnXjp021lcEKR/TRA8/yzQ==", - "path": "runtime.win-x64.microsoft.netcore.dotnethostpolicy/2.1.5", - "hashPath": "runtime.win-x64.microsoft.netcore.dotnethostpolicy.2.1.5.nupkg.sha512" - }, - "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver/2.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-wJA02vuwaVvaJ+5ZoKcad6Bm/z9MMO7HO8TLyMTk7uaxDtShD8AykBoXnn0zqvO8nMUmqhxgl8gQM4ZtKAHcqw==", - "path": "runtime.win-x64.microsoft.netcore.dotnethostresolver/2.1.5", - "hashPath": "runtime.win-x64.microsoft.netcore.dotnethostresolver.2.1.5.nupkg.sha512" - }, - "System.AppContext/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-uEIyp9GUT2U5UD4KjUU2bIdmBFuRXGn0VeAbWZvqqfSdXfyADZQnmfCVxc18BbXpr4Axum0MY/gtQhiWroNcNw==", - "path": "system.appcontext/4.3.0", - "hashPath": "system.appcontext.4.3.0.nupkg.sha512" - }, - "System.Buffers/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Mm9RDuBQ6CIi0BP75sMq0boRBmztwc1MGfHSoeXdoOyJnyvG6Dri9GE1mNebbVWEkxNRe4CbXHTJYyKq/3WEmQ==", - "path": "system.buffers/4.3.0", - "hashPath": "system.buffers.4.3.0.nupkg.sha512" - }, - "System.CodeDom/4.4.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-E/lvSfMFPtNflAgdM6AuPU8JbZdqdSoGpU66G7SrduCqdrFyPflaqqV4gN2d0hrCBpu92HaoqpUP5d+g9Itcxw==", - "path": "system.codedom/4.4.0", - "hashPath": "system.codedom.4.4.0.nupkg.sha512" - }, - "System.Collections/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/RO6DxDIzcceka4RmnJ6P8anXxdkmdRGKpliRZKVB84y4LzpqMMWTLAGRQXLc5ET15z1Xr7YaNZx1rbWuqRVcg==", - "path": "system.collections/4.3.0", - "hashPath": "system.collections.4.3.0.nupkg.sha512" - }, - "System.Collections.Concurrent/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fu4SvisargPpI4z2+69ocBNmQLS98WyvsA1dP35c2dxRJnEd/+cSmGnv/GSNxbIs7wtveGB8tzFLYABPFkX7Kg==", - "path": "system.collections.concurrent/4.3.0", - "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" - }, - "System.Collections.Immutable/1.5.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-erLSnZLBCA8EKIE2bKtXynjWBWSoMlmCFrOOYN+sPKCeYd3oGj9h8hqRPODtsRlPANkOW7L8tEQlEadHbUXC6A==", - "path": "system.collections.immutable/1.5.0", - "hashPath": "system.collections.immutable.1.5.0.nupkg.sha512" - }, - "System.Composition/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CbzwbjxT04VU+JzQuPOYfUCybzBtbGZdqGJS9482dDBoBHbt3Zz0QAJ/Cjzpmq5xdL+hhW4FYWf/3wq2OCVXgg==", - "path": "system.composition/1.0.31", - "hashPath": "system.composition.1.0.31.nupkg.sha512" - }, - "System.Composition.AttributedModel/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-rhZeg+i71Q0MZjYIdIpyfzKM7E9EsvytXxq+CaZ/vWCV09ZfMnb0MOEkfM4wfKhTo7Xoo3TJkkfTLx8kUCltkg==", - "path": "system.composition.attributedmodel/1.0.31", - "hashPath": "system.composition.attributedmodel.1.0.31.nupkg.sha512" - }, - "System.Composition.Convention/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-9GFJIdwg0zr8s2KHVVgVikYfPJ/KntH1D79Z7VzCovUZwDNNq66MMKkLJIOCztXsgDdgYKOp3BAYASRS9EvYGw==", - "path": "system.composition.convention/1.0.31", - "hashPath": "system.composition.convention.1.0.31.nupkg.sha512" - }, - "System.Composition.Hosting/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-KlZ4qkaa1p/U2WKr353XeQ9bjrxBwn9FcD5k9WFEuV1MloDMnTnhUwQU7h1WigvsCYykzoRdnDLq33wnUPwBeg==", - "path": "system.composition.hosting/1.0.31", - "hashPath": "system.composition.hosting.1.0.31.nupkg.sha512" - }, - "System.Composition.Runtime/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-iZH3/g2js6fmV3atN2Ym/o+dM2ZMA1GA0GXc70nhbIqK67L29Lh3YrAWiBlyoOIUjNEggA6L4i++7PSID2wMdQ==", - "path": "system.composition.runtime/1.0.31", - "hashPath": "system.composition.runtime.1.0.31.nupkg.sha512" - }, - "System.Composition.TypedParts/1.0.31": { - "type": "package", - "serviceable": true, - "sha512": "sha512-H6fLWxFy+cy+YsHRcvUBskvDYkpDdUJky+GkqYvi8B/5cm/KIQ5QVDOLKuul4PHFZ/x0yRacS8CpY3x/PxiBeA==", - "path": "system.composition.typedparts/1.0.31", - "hashPath": "system.composition.typedparts.1.0.31.nupkg.sha512" - }, - "System.Console/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-NXaPmAD2UQOwcXA0CdsTCi1g/BUmuxwwGok2guCrS/pLpAv79v5TQLWYPnUoysNbn3p8v1WLguJHLMa782C5Yw==", - "path": "system.console/4.3.0", - "hashPath": "system.console.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.Contracts/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-clL6acqvIbbx3JYunlkrWV5sP9qGd0sLl612eXrBVVwakTTlMNtvZB5RiC2rU2uYxSnIt2ssUQgA2adrYSqYhA==", - "path": "system.diagnostics.contracts/4.3.0", - "hashPath": "system.diagnostics.contracts.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.Debug/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-j3oXzv/QxCZcBxSIzreks9gAMenRyZTvSntLbDYGWczEhLQX4Ob3ajnXpAC9IXymWI+N4AFV7/pXLPwn+2ItAA==", - "path": "system.diagnostics.debug/4.3.0", - "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.DiagnosticSource/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-wu5+BNFredYlzZEmih3pMlR0ekaWCd9KZ8MPWqIQ4KVKo+RpzuhsIAfteI5OYQ2zSVzg1uOfQBrJ8KFkz+XfRQ==", - "path": "system.diagnostics.diagnosticsource/4.3.0", - "hashPath": "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.FileVersionInfo/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-OEshwk5wkdxtGkFZYSErv6dnUuz0z8C01htylGwOwFnCVFRcrvleBtplMDCk9nMyWP41cbMZGEIBfy7HV1Loug==", - "path": "system.diagnostics.fileversioninfo/4.3.0", - "hashPath": "system.diagnostics.fileversioninfo.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.StackTrace/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-BZY9Q0RiOSp/hp13jXe97aVOgPDzlqOdYdixs5fl/e3K/vz1SoJYDddY8CPE3wH9m043tJ65L8i+WMiPzGxdtQ==", - "path": "system.diagnostics.stacktrace/4.3.0", - "hashPath": "system.diagnostics.stacktrace.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.Tools/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7gcA6FsKiySf+s9PeyenhSuUmxbxrpEDZ+/UcZBUbIu92JR804efdbIy4bEYcHg1htFbhxewu8vIV5pWYhc2Sg==", - "path": "system.diagnostics.tools/4.3.0", - "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.TraceSource/4.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-bGUeY5wiCHYSWbYZS3QjbaQ1hNoJ1RQBQMB3E0Cgh6AH//4rXfXIOHKIW46HDOsTEDoNfvFNDXphL5W5B/XMwQ==", - "path": "system.diagnostics.tracesource/4.0.0", - "hashPath": "system.diagnostics.tracesource.4.0.0.nupkg.sha512" - }, - "System.Diagnostics.Tracing/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7IXKSUQm7wC+beoAINYrIqawpecwtyiM5NKv96whUmWOvg2vPn60WYqLopKbWu3GSPCH/ZJxAiHrS7tYlhb5Dg==", - "path": "system.diagnostics.tracing/4.3.0", - "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" - }, - "System.Dynamic.Runtime/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PyiPySIERuk05CtVuHEQOijQChY4L77ZcUe+fee7lyZxPbU/hlduSfUIXw8XF/T+R1jOIDoOZXEQ+ZoFEgOzYQ==", - "path": "system.dynamic.runtime/4.3.0", - "hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512" - }, - "System.Globalization/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Gp7Z/4kR92caisVDNbXXYdGYZuAECXZGIaG7kAOs3cEM3zVMp078Yn3qVRGzUidYSYEAauQ0hx7mbXEmuimhYA==", - "path": "system.globalization/4.3.0", - "hashPath": "system.globalization.4.3.0.nupkg.sha512" - }, - "System.Globalization.Calendars/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-cr50CLRa9Egfe0Cg2aQPrnLqDpcE794AKTmpgiTIZpz+3N7lN+5yGtNUhTrUbMeSZycoFHTGIEArIlv8J2aX/A==", - "path": "system.globalization.calendars/4.3.0", - "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512" - }, - "System.Globalization.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4OvZWmZyTOaSygNnIdnu/p0zvu+HU9WnoZshyo3wzU5lLqiVa1pli0iY/VegQoJ7NPk5hd0RVxU+XrSOr5aauw==", - "path": "system.globalization.extensions/4.3.0", - "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" - }, - "System.IO/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Ep3xyKDltu0EsCk1BvoWBC7NltwFqRlYCjwKTV7+d4sAH0lVk5P3Q2XydNm6dYxUJZdUgmBLf52F3pAwzKIJBg==", - "path": "system.io/4.3.0", - "hashPath": "system.io.4.3.0.nupkg.sha512" - }, - "System.IO.Compression/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-RTb1FGyGEZkNrxrFee3FZsMJSmK6Lmxaef2mHdK23qn9IxlEZbeK14hb0KPNM8k6QzzU+kqR1rTD8bYopx6fYQ==", - "path": "system.io.compression/4.3.0", - "hashPath": "system.io.compression.4.3.0.nupkg.sha512" - }, - "System.IO.FileSystem/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4mTkw3zbrqvWAMLqgMxr4lg2ggjcCPAhJqRSKy+ZhrPlXztqYAKf7d5sDDJmCkZjNJxsM/k9ZvlQZR6/zUCihQ==", - "path": "system.io.filesystem/4.3.0", - "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" - }, - "System.IO.FileSystem.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-l8suI9sMTsWzpZraleWE3z1KQqTCqBITJJmeT0AVj6Kk6EWLv9iKDb47O8zBktZqWAxEF1nvUnwhevYW9DToPQ==", - "path": "system.io.filesystem.primitives/4.3.0", - "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" - }, - "System.Linq/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4GusFyZYZE8W5IX9MjqCzucdLArml/j5zxVw2R0VS+JhrTaibL6M2SQSi7lIpGwwBuxU1Dwe2Sx1putAQ5d2BQ==", - "path": "system.linq/4.3.0", - "hashPath": "system.linq.4.3.0.nupkg.sha512" - }, - "System.Linq.Expressions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-jlZ1AKYgns90hbPp83uM5SQCWRrqLZWHS3q33zeMlAdKfQ4+KT4VVbWmgWqh6nVw7pB/7dXiR8TjHUPcXwIEKA==", - "path": "system.linq.expressions/4.3.0", - "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" - }, - "System.Linq.Parallel/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-td7x21K8LalpjTWCzW/nQboQIFbq9i0r+PCyBBCdLWWnm4NBcdN18vpz/G9hCpUaCIfRL+ZxJNVTywlNlB1aLQ==", - "path": "system.linq.parallel/4.3.0", - "hashPath": "system.linq.parallel.4.3.0.nupkg.sha512" - }, - "System.Memory/4.5.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-oonnLQPZAGD21qtNMG4EtVmbYOInk2jV7M+g108B6OHOb67ZOaWnA/K8P5oQ6uK9wxKzB1iEXSChQOi2scKOqA==", - "path": "system.memory/4.5.1", - "hashPath": "system.memory.4.5.1.nupkg.sha512" - }, - "System.Net.Http/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Z1UfSF6dlpCdZdxh6LeoGlYH+q6ptG/iiIWgUUeKhE3DbQACmZkU7Sz2nOX0qdHjz72MOdYRbkSJ5Qwl6sZgvg==", - "path": "system.net.http/4.3.0", - "hashPath": "system.net.http.4.3.0.nupkg.sha512" - }, - "System.Net.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-zpJLsVc5gRgTZR1QEi0H3s0bV26t7yug0WcersFr/pVqDvEBiqQm6z3YjYtWkVlMJ65ko1sSvGW5WXqaykOQ+g==", - "path": "system.net.primitives/4.3.0", - "hashPath": "system.net.primitives.4.3.0.nupkg.sha512" - }, - "System.ObjectModel/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-jeoLKRPL6N8492mNbyrUFhMkEEFb4ihgZmIuAXqv7lxkWQjzs+UqBPDKqmS2gQfFAUO2wXaaZPVEcKUfhETR2w==", - "path": "system.objectmodel/4.3.0", - "hashPath": "system.objectmodel.4.3.0.nupkg.sha512" - }, - "System.Reflection/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-DyOo4oJzP4JDP+GmJmZRTUoMN1T7MDlQLCgptPKJ5oB9AhRZ/RDIhAw0XrLAC6BpBxSPWk+fv6rMzfZcYPIjyQ==", - "path": "system.reflection/4.3.0", - "hashPath": "system.reflection.4.3.0.nupkg.sha512" - }, - "System.Reflection.Emit/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/rKEzbnRq6H1LUkLmlqT6YaD8S625rZIuK+EQvBwfdHjJbLni0c9SP0XSM2gv1Khnn9ehU5MSz/WmH7gwt2QGQ==", - "path": "system.reflection.emit/4.3.0", - "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" - }, - "System.Reflection.Emit.ILGeneration/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-popK0u8UUkrlKadna04k1polWd1mdATZeKu/Qd0jiMZf4NTZ/GFzwpuuyTxYgUaPtqS2gJZ8rVkBWfYS4IdDQQ==", - "path": "system.reflection.emit.ilgeneration/4.3.0", - "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" - }, - "System.Reflection.Emit.Lightweight/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-TCmTVOvOkWf7QNHMuzbfSD1y7hO0PNhFfTGLzKAJYkh7Ta+lUX2pb+Rrnx/i3Ism6H2qCDzagRbnsluJQ1U0Kw==", - "path": "system.reflection.emit.lightweight/4.3.0", - "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" - }, - "System.Reflection.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-VaItSJxypiIW7jglQPcywfByp9jLFkfGE6kZG17ft/q7xnFuS6GcDL/pPvnBqHpC0f0NCPV4utazuQ225DrxQg==", - "path": "system.reflection.extensions/4.3.0", - "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" - }, - "System.Reflection.Metadata/1.6.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-sARURAx/ZV3f3lL/40TG9y2Wqk60DXUlvzowM5oYeHlcpuEMIxoKnDBhNwBzwRs3i+vWUwIbU7Kk/+mG+hzckA==", - "path": "system.reflection.metadata/1.6.0", - "hashPath": "system.reflection.metadata.1.6.0.nupkg.sha512" - }, - "System.Reflection.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-6j+W57PZnjErWr1OBi7ORmwBBLycDB4N9aEOBKHAHXF/9sLOA30IQkqyOWGUUbQUgjHZwuZSVtgaUzW8wIbFTg==", - "path": "system.reflection.primitives/4.3.0", - "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" - }, - "System.Reflection.TypeExtensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-O0FhlnCiyHTpu0WBl5/0bbWvJpLjLdUNkDomPCaZP4baItazJDHl7666HrWQ1LB9iv5Wt36g08eZrlUB/JXNvw==", - "path": "system.reflection.typeextensions/4.3.0", - "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" - }, - "System.Resources.ResourceManager/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-u8AA+wa4EtOtkOf7OqxYryXnZ2zwv83qP1Dfnv3ZoA1k9Gx0HR/ERccyc1/HBpjbIdrcsyTVHivNQSYlGwGT8A==", - "path": "system.resources.resourcemanager/4.3.0", - "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" - }, - "System.Resources.Writer/4.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-mGgwPBXGTqnw6lQeRI24ChoyPViWx36MVfN6Ys1ceLJMTQDMHcoLiMHOzSvA7ZgjX2tWBy8nfjzlN1kDL/G1gQ==", - "path": "system.resources.writer/4.0.0", - "hashPath": "system.resources.writer.4.0.0.nupkg.sha512" - }, - "System.Runtime/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-wLlTiM4b/Un90BM6s3voqYybZEGra4WiIaXfTeB9kVPZr6QDP97xjG+rZYzdP2jiuQnij1bA8q4PzmrY6l5QTw==", - "path": "system.runtime/4.3.0", - "hashPath": "system.runtime.4.3.0.nupkg.sha512" - }, - "System.Runtime.CompilerServices.Unsafe/4.5.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-qUJMNWhbm9oZ3XaMFiEMiYmRPszbnXIkRIi7+4b2Md2xZ6JUOepf0/kY3S85qistRohl9OdMe4PsO+RdG2kTIQ==", - "path": "system.runtime.compilerservices.unsafe/4.5.1", - "hashPath": "system.runtime.compilerservices.unsafe.4.5.1.nupkg.sha512" - }, - "System.Runtime.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Xz+DgcN+a9LcFJJ9uir7Za7hAye4Hon6CxufXiVkfoQ9IQLn1w0NGr7kuwosXFJ892JA8zNTx7QWjRc9qrmN3w==", - "path": "system.runtime.extensions/4.3.0", - "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" - }, - "System.Runtime.Handles/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-LinND4TnXOL/oD28kxybu+XrwrvxSfEa+px6xVx5ndCBTmRoRLmiQrPQAHktupQ5ObRWsTzHot/K8cfK5b3jdw==", - "path": "system.runtime.handles/4.3.0", - "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" - }, - "System.Runtime.InteropServices/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-xm8UVPKs/QFYrTDRzsmpKlGKHYsy5uXre2R6hD73R0NbJ1757Cc//5iedolR03ppxOkG5o1oRYkjxNq0Mb30pw==", - "path": "system.runtime.interopservices/4.3.0", - "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" - }, - "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-p0Ks5JJnrUJbbJUBoTRyEdd8dvbjZywKxkmwl1ldjyu767RxUG9+wZGsSN1c8SMiJ8zfvsoO2flilpHKYZtWkg==", - "path": "system.runtime.interopservices.runtimeinformation/4.3.0", - "hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512" - }, - "System.Runtime.Loader/4.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/ol/Y9N+MghH5YPeeFuad34s2mclOPJJ4fs2hnFHr04QfGpUSBlcbpp/P3fggCNrZXwVKQEKgHu7SnA43Y8ang==", - "path": "system.runtime.loader/4.0.0", - "hashPath": "system.runtime.loader.4.0.0.nupkg.sha512" - }, - "System.Runtime.Numerics/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-K+WIriZO8+5TbeVtQY6+4d9Uipq5lJ0BaRr8j+DBXnqcjdcwguqZCsd1ZPBu8bo0b4r6sCnluiWnu3qVGQuLvg==", - "path": "system.runtime.numerics/4.3.0", - "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512" - }, - "System.Runtime.Serialization.Primitives/4.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-RVu/CQgW96/pzEE1pV6fCMhwvkA2Exkt2v6D6jce5WaU76CpS1cavqeS8WtYzcnj2o3VQyqpktB/KGlnLkxC2g==", - "path": "system.runtime.serialization.primitives/4.1.1", - "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512" - }, - "System.Security.Claims/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-aA3tDOv5FORzSWN4DVrbX2nE0INo5zbOrJbwmcN+XKKoBrfl6XIqUVoy53pa9lYSbSrASVXRxZGtQ/+wF2P6Hw==", - "path": "system.security.claims/4.3.0", - "hashPath": "system.security.claims.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Algorithms/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Wwoz0ThoFf4pTpfWy79PN7vob1nlrEF2lX59qfPPnsmZKBq7YER9FShbNx6QiEMnvacx7ZB1OU2WV91KttfJYg==", - "path": "system.security.cryptography.algorithms/4.3.0", - "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Cng/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/EuVr1biVzo7h8wlFel3WN2nh2Dusx30Nsu8k5Dna3rUPYJuWGzoysNMRXQ4YxGWWNnFabDlM7z7EAGbXqL/Og==", - "path": "system.security.cryptography.cng/4.3.0", - "hashPath": "system.security.cryptography.cng.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Csp/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-YkD7nbzlPBmcW84gV2mwLWToT7naB8WK7LRNSmkfLuswEBapQqYOeq+4E3UBGu6bOHCnAomgrgiZkk45DZpiNQ==", - "path": "system.security.cryptography.csp/4.3.0", - "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Encoding/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4K76Y6CMYqnuj/2uvucQGdq2X2j5C8wM7/Yl2oxjEGTWepuAzXuvzxQcIccZcqchK/AAmsaiZe24lZNdno7VyA==", - "path": "system.security.cryptography.encoding/4.3.0", - "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3LIgk/eAMyj/OrlxNvPCJRYkKZbJiJ/nhF1mIV8sLibNJJBheEyglXsEIkBYERywzAMW8RIJ5cP3BkYfLq+eKQ==", - "path": "system.security.cryptography.openssl/4.3.0", - "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-jeRd2cHsedEcqHT1rcAK4j41VLlcSKj+dfv7d4rIEcUIi2/MvSNviTXjKXBSNxpG40UzlPrYlRZ7pzUadmBJtw==", - "path": "system.security.cryptography.primitives/4.3.0", - "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.X509Certificates/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-8QkPGkoZWHZx6zRljnbomuOaJDHxGdJ64Fz4fKtG4g1ztro2dEZ9gnrmCKIJaHWPDKHLVG2Sc4B7D46W8Ur4Ww==", - "path": "system.security.cryptography.x509certificates/4.3.0", - "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512" - }, - "System.Security.Principal/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QpsTE5TJpZw/ciAHRxxXLgGyMr1YgQJhjmhAEtM9ueq9SS6SktfLW1eMOLcDteHR9ksODY/BB3Cb1tIhvd3wnA==", - "path": "system.security.principal/4.3.0", - "hashPath": "system.security.principal.4.3.0.nupkg.sha512" - }, - "System.Security.Principal.Windows/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-KhIQOIe7lZgn6tMQEQkgL6qLZvgLm2YhroCgsvpz//RUXnsOYx8pa6cmTARWhtf3Ift0ECtoiPkTajDonwEL5w==", - "path": "system.security.principal.windows/4.3.0", - "hashPath": "system.security.principal.windows.4.3.0.nupkg.sha512" - }, - "System.Text.Encoding/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-U564F0gK8wI5A+SXUg99g/sxG9Fgynj90qgtUzMcK8wDF6iAktFXpZfY9cETcz3NKvKR/rQpyhstguPcAA2lUA==", - "path": "system.text.encoding/4.3.0", - "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" - }, - "System.Text.Encoding.CodePages/4.4.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-epF1P00AFbqPy5jZx3fpEn5qwlBDZ+dck71xYc/jLibfY6BtoFKOqoj84YHcQWV9HcWb7M13aVJ61XCdK8/3XA==", - "path": "system.text.encoding.codepages/4.4.0", - "hashPath": "system.text.encoding.codepages.4.4.0.nupkg.sha512" - }, - "System.Text.Encoding.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-SLRvag/jlOLLtZy5GwsK1+p6AGP6YmOazNhx7ZdYuxpo5eSh0L1YS9ozte+DEeyNmd/u4/vGQ297wObM7ULAhQ==", - "path": "system.text.encoding.extensions/4.3.0", - "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" - }, - "System.Text.RegularExpressions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-R3r6OE8Nl3SHl0lX7gQhFd1qvzEiIf5+gcf2vs/JAXG7kSl8l03HB2Jbyp/6JQ6rsv9XW47qCH8Nnc2kew4P4g==", - "path": "system.text.regularexpressions/4.3.0", - "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" - }, - "System.Threading/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-4j+rHu0q/NVTrCrtwVeVy1WXpzMTB+V63DG2pI2aopEurxLtjYxqYFB0RQRahClkAzonmF7rTTPLnAGRfbV37w==", - "path": "system.threading/4.3.0", - "hashPath": "system.threading.4.3.0.nupkg.sha512" - }, - "System.Threading.Tasks/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-E3rywGOEzJJvjVzTIZHYWYIja/zs9UTq3hEuUAyBc1Y4fYKG4013HRD9Y2JymL7eHUfaujLhh8UM4yeTnAwZCQ==", - "path": "system.threading.tasks/4.3.0", - "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" - }, - "System.Threading.Tasks.Dataflow/4.6.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-C6u7OtH7Vvy+wbq4xx53E7evhrJ+I3nBWXCKh7/imxn3cKDUa2iAQ8uhzL0YnviXlJspBXXVmAbOFL1s9UHBuQ==", - "path": "system.threading.tasks.dataflow/4.6.0", - "hashPath": "system.threading.tasks.dataflow.4.6.0.nupkg.sha512" - }, - "System.Threading.Tasks.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-H/qEiAmcJa9kowqQtBFkosed9A3IRfw/OkQSTlih2v97cFpAr/irN0rpX0lZ+NEGnM6EhSxIEDGPLHh9DIBZjQ==", - "path": "system.threading.tasks.extensions/4.3.0", - "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" - }, - "System.Threading.Tasks.Parallel/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Wn3GV5YIWjxvv9muD9FSZxH4PLx98Y4D1Z5mpYTowK1RLPtFvusnVKnT0OzmzEpYCMtVNgqfk3kPc9xRGsWrLA==", - "path": "system.threading.tasks.parallel/4.3.0", - "hashPath": "system.threading.tasks.parallel.4.3.0.nupkg.sha512" - }, - "System.Threading.Thread/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-XzzZm9Q5FOttt418yyPwRcMPyq7m570YZdRYtx1YvB37a0lYfODD/lWg/rtKrs8b87iTS09FAtgm/2v6Nh+j6w==", - "path": "system.threading.thread/4.3.0", - "hashPath": "system.threading.thread.4.3.0.nupkg.sha512" - }, - "System.ValueTuple/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-HiwjNp4lGpyqFXPbWe/GUV3VDn4URlp85xNinOXT+lXQCeJAVdtPm70kH/9PmjbhJjdF1zpPm3obvrT4defjCA==", - "path": "system.valuetuple/4.3.0", - "hashPath": "system.valuetuple.4.3.0.nupkg.sha512" - }, - "System.Xml.ReaderWriter/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-8zETm01mtgiyTl3xO+QenvD6TLsDcopZQM0cxyf3maICj4HqP8nxLS9N7aRNsf+RWdWQW+QrKVmh5aD4w1jyQg==", - "path": "system.xml.readerwriter/4.3.0", - "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" - }, - "System.Xml.XDocument/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-VRYzRdAdsQFbx8oiblJC1QuAz+Ck792eArsccHxP0vfFv8055l25yhhLVqWCo3j9GEFYcku85bpdaMwXXDeY/w==", - "path": "system.xml.xdocument/4.3.0", - "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" - }, - "System.Xml.XmlDocument/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ykIwRe9zpjElOMTvobLQrSvva9P8Pm1l7BFU/jq/u/INyoPS3mOr4z45kQWaNcWSuq3jGFA/6iU4+z3rPNakgg==", - "path": "system.xml.xmldocument/4.3.0", - "hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512" - }, - "System.Xml.XPath/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-8Eo7vuasWRqXfiBRCIKz20Rq1h6n+NMp6nW2RmyUwF4VDekg8xbRZu8S3N21P5XGAhv+kaqUwI3xydEkcw+D5w==", - "path": "system.xml.xpath/4.3.0", - "hashPath": "system.xml.xpath.4.3.0.nupkg.sha512" - }, - "System.Xml.XPath.XDocument/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-I50WmmXa9mUUujJOWKjyjqMnZcJklN5oc6XfHk5bfp9gt6eCJQ74qmi7IYEMa2YHPoFuA93uwssBlfU51i53QA==", - "path": "system.xml.xpath.xdocument/4.3.0", - "hashPath": "system.xml.xpath.xdocument.4.3.0.nupkg.sha512" - } - } +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v2.1/win-x64", + "signature": "c38a3bccead34b7cf6ceaffd147b8a94c7f91c93" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v2.1": {}, + ".NETCoreApp,Version=v2.1/win-x64": { + "mpc/1.0.0": { + "dependencies": { + "Buildalyzer.Workspaces": "2.2.0", + "Microsoft.NETCore.App": "2.1.5" + }, + "runtime": { + "mpc.dll": {} + } + }, + "Buildalyzer/2.2.0": { + "dependencies": { + "Buildalyzer.Logger": "2.2.0", + "MSBuild.StructuredLogger": "2.0.11", + "Microsoft.Build": "15.8.166", + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Build.Tasks.Core": "15.8.166", + "Microsoft.Build.Utilities.Core": "15.8.166", + "Microsoft.Extensions.DependencyModel": "2.1.0", + "Microsoft.Extensions.Logging": "2.1.1", + "Microsoft.Extensions.Logging.Abstractions": "2.1.1", + "MsBuildPipeLogger.Server": "1.1.2" + }, + "runtime": { + "lib/netstandard2.0/Buildalyzer.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.0" + } + } + }, + "Buildalyzer.Logger/2.2.0": { + "dependencies": { + "NETStandard.Library": "2.0.3" + }, + "runtime": { + "lib/netstandard1.3/Buildalyzer.Logger.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.0" + }, + "lib/netstandard1.3/MsBuildPipeLogger.Logger.dll": { + "assemblyVersion": "1.1.2.0", + "fileVersion": "1.1.2.0" + } + } + }, + "Buildalyzer.Workspaces/2.2.0": { + "dependencies": { + "Buildalyzer": "2.2.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "2.9.0", + "Microsoft.CodeAnalysis.VisualBasic.Workspaces": "2.9.0" + }, + "runtime": { + "lib/netstandard2.0/Buildalyzer.Workspaces.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.0.0" + } + } + }, + "Microsoft.Build/15.8.166": { + "dependencies": { + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Win32.Registry": "4.3.0", + "System.Collections.Immutable": "1.5.0", + "System.Diagnostics.TraceSource": "4.0.0", + "System.IO.Compression": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Runtime.Loader": "4.0.0", + "System.Security.Principal.Windows": "4.3.0", + "System.Text.Encoding.CodePages": "4.4.0", + "System.Threading.Tasks.Dataflow": "4.6.0" + }, + "runtime": { + "lib/netcoreapp2.1/Microsoft.Build.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "15.8.166.59604" + } + } + }, + "Microsoft.Build.Framework/15.8.166": { + "dependencies": { + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Threading.Thread": "4.3.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Framework.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "15.8.166.59604" + } + } + }, + "Microsoft.Build.Tasks.Core/15.8.166": { + "dependencies": { + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Build.Utilities.Core": "15.8.166", + "Microsoft.Win32.Registry": "4.3.0", + "System.CodeDom": "4.4.0", + "System.Collections.Immutable": "1.5.0", + "System.Linq.Parallel": "4.3.0", + "System.Net.Http": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.Writer": "4.0.0", + "System.Threading.Tasks.Dataflow": "4.6.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Tasks.Core.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "15.8.166.59604" + } + } + }, + "Microsoft.Build.Utilities.Core/15.8.166": { + "dependencies": { + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Win32.Registry": "4.3.0", + "System.Collections.Immutable": "1.5.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Text.Encoding.CodePages": "4.4.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "15.8.166.59604" + } + } + }, + "Microsoft.CodeAnalysis.Analyzers/2.6.1": {}, + "Microsoft.CodeAnalysis.Common/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "2.6.1", + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Collections.Immutable": "1.5.0", + "System.Console": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.FileVersionInfo": "4.3.0", + "System.Diagnostics.StackTrace": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.CodePages": "4.4.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0", + "System.Threading.Tasks.Parallel": "4.3.0", + "System.Threading.Thread": "4.3.0", + "System.ValueTuple": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0", + "System.Xml.XPath.XDocument": "4.3.0", + "System.Xml.XmlDocument": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "2.9.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.CSharp": "2.9.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "2.9.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "2.9.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.VisualBasic": "2.9.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "2.9.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "2.9.0", + "System.Composition": "1.0.31", + "System.Diagnostics.Contracts": "4.3.0", + "System.Linq.Parallel": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks.Parallel": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.Workspaces.dll": { + "assemblyVersion": "2.9.0.0", + "fileVersion": "2.9.0.63208" + } + }, + "resources": { + "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netstandard1.3/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netstandard1.3/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netstandard1.3/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CSharp/4.0.1": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "Microsoft.DotNet.PlatformAbstractions/2.1.0": { + "dependencies": { + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/Microsoft.DotNet.PlatformAbstractions.dll": { + "assemblyVersion": "2.1.0.0", + "fileVersion": "2.1.0.0" + } + } + }, + "Microsoft.Extensions.Configuration/2.1.1": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { + "dependencies": { + "Microsoft.Extensions.Primitives": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Configuration.Binder/2.1.1": { + "dependencies": { + "Microsoft.Extensions.Configuration": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.DependencyModel/2.1.0": { + "dependencies": { + "Microsoft.DotNet.PlatformAbstractions": "2.1.0", + "Newtonsoft.Json": "9.0.1", + "System.Diagnostics.Debug": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Linq": "4.3.0" + }, + "runtime": { + "lib/netstandard1.6/Microsoft.Extensions.DependencyModel.dll": { + "assemblyVersion": "2.1.0.0", + "fileVersion": "2.1.0.0" + } + } + }, + "Microsoft.Extensions.Logging/2.1.1": { + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.1.1", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", + "Microsoft.Extensions.Logging.Abstractions": "2.1.1", + "Microsoft.Extensions.Options": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/2.1.1": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Options/2.1.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.1", + "Microsoft.Extensions.Primitives": "2.1.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.Extensions.Primitives/2.1.1": { + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": { + "assemblyVersion": "2.1.1.0", + "fileVersion": "2.1.1.18157" + } + } + }, + "Microsoft.NETCore.App/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetHostPolicy": "2.1.5", + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "NETStandard.Library": "2.0.3", + "runtime.win-x64.Microsoft.NETCore.App": "2.1.5" + } + }, + "Microsoft.NETCore.DotNetAppHost/2.1.5": { + "dependencies": { + "runtime.win-x64.Microsoft.NETCore.DotNetAppHost": "2.1.5" + } + }, + "Microsoft.NETCore.DotNetHostPolicy/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetHostResolver": "2.1.5", + "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy": "2.1.5" + } + }, + "Microsoft.NETCore.DotNetHostResolver/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetAppHost": "2.1.5", + "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver": "2.1.5" + } + }, + "Microsoft.NETCore.Platforms/2.1.1": {}, + "Microsoft.NETCore.Targets/2.0.0": {}, + "Microsoft.Win32.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "Microsoft.Win32.Registry/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "MSBuild.StructuredLogger/2.0.11": { + "dependencies": { + "Microsoft.Build": "15.8.166", + "Microsoft.Build.Framework": "15.8.166", + "Microsoft.Build.Tasks.Core": "15.8.166", + "Microsoft.Build.Utilities.Core": "15.8.166" + }, + "runtime": { + "lib/netstandard2.0/StructuredLogger.dll": { + "assemblyVersion": "2.0.11.0", + "fileVersion": "2.0.11.26510" + } + } + }, + "MsBuildPipeLogger.Server/1.1.2": { + "dependencies": { + "Microsoft.Build": "15.8.166", + "NETStandard.Library": "2.0.3" + }, + "runtime": { + "lib/netstandard1.5/MsBuildPipeLogger.Server.dll": { + "assemblyVersion": "1.1.2.0", + "fileVersion": "1.1.2.0" + } + } + }, + "NETStandard.Library/2.0.3": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1" + } + }, + "Newtonsoft.Json/9.0.1": { + "dependencies": { + "Microsoft.CSharp": "4.0.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/Newtonsoft.Json.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.1.19813" + } + } + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.native.System/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0" + } + }, + "runtime.native.System.IO.Compression/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0" + } + }, + "runtime.native.System.Net.Http/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0" + } + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {}, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.win-x64.Microsoft.NETCore.App/2.1.5": { + "runtime": { + "runtimes/win-x64/lib/netcoreapp2.1/Microsoft.CSharp.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/Microsoft.VisualBasic.dll": { + "assemblyVersion": "10.0.4.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/Microsoft.Win32.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/Microsoft.Win32.Registry.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/SOS.NETCore.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.AppContext.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Buffers.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.Concurrent.dll": { + "assemblyVersion": "4.0.14.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.Immutable.dll": { + "assemblyVersion": "1.2.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.NonGeneric.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.Specialized.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Collections.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.Annotations.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.DataAnnotations.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.EventBasedAsync.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.Primitives.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.TypeConverter.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.ComponentModel.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Configuration.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Console.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Core.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Data.Common.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Data.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Contracts.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Debug.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll": { + "assemblyVersion": "4.0.3.1", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.FileVersionInfo.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Process.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.StackTrace.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.TextWriterTraceListener.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Tools.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.TraceSource.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Diagnostics.Tracing.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Drawing.Primitives.dll": { + "assemblyVersion": "4.2.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Drawing.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Dynamic.Runtime.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Globalization.Calendars.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Globalization.Extensions.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Globalization.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Compression.Brotli.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Compression.FileSystem.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Compression.ZipFile.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Compression.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.AccessControl.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.DriveInfo.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.Watcher.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.FileSystem.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.IsolatedStorage.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.MemoryMappedFiles.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Pipes.AccessControl.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.Pipes.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.UnmanagedMemoryStream.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.IO.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Linq.Expressions.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Linq.Parallel.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Linq.Queryable.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Linq.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Memory.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Http.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.HttpListener.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Mail.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.NameResolution.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.NetworkInformation.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Ping.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Requests.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Security.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.ServicePoint.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.Sockets.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebClient.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebHeaderCollection.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebProxy.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebSockets.Client.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.WebSockets.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Net.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Numerics.Vectors.dll": { + "assemblyVersion": "4.1.4.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Numerics.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.ObjectModel.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Private.DataContractSerialization.dll": { + "assemblyVersion": "4.1.4.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Private.Uri.dll": { + "assemblyVersion": "4.0.5.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Private.Xml.Linq.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Private.Xml.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.DispatchProxy.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Emit.ILGeneration.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Emit.Lightweight.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Emit.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Extensions.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Metadata.dll": { + "assemblyVersion": "1.4.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.TypeExtensions.dll": { + "assemblyVersion": "4.1.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Reflection.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Resources.Reader.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Resources.ResourceManager.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Resources.Writer.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.CompilerServices.VisualC.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Extensions.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Handles.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.RuntimeInformation.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.WindowsRuntime.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.InteropServices.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Loader.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Numerics.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Formatters.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Json.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Primitives.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.Xml.dll": { + "assemblyVersion": "4.1.4.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.Serialization.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Runtime.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.AccessControl.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Claims.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Algorithms.dll": { + "assemblyVersion": "4.3.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Cng.dll": { + "assemblyVersion": "4.3.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Csp.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Encoding.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.OpenSsl.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Cryptography.X509Certificates.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { + "assemblyVersion": "4.1.1.1", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.Principal.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.SecureString.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Security.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.ServiceModel.Web.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.ServiceProcess.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Text.Encoding.Extensions.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Text.Encoding.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Text.RegularExpressions.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Overlapped.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Tasks.Dataflow.dll": { + "assemblyVersion": "4.6.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Tasks.Extensions.dll": { + "assemblyVersion": "4.3.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Tasks.Parallel.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Tasks.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Thread.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.ThreadPool.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.Timer.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Threading.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Transactions.Local.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Transactions.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.ValueTuple.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Web.HttpUtility.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Web.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Windows.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.Linq.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.ReaderWriter.dll": { + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.Serialization.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XDocument.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XPath.XDocument.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XPath.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XmlDocument.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.XmlSerializer.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.Xml.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/System.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/WindowsBase.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/mscorlib.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/lib/netcoreapp2.1/netstandard.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "4.6.26919.2" + } + }, + "native": { + "runtimes/win-x64/native/Microsoft.DiaSymReader.Native.amd64.dll": { + "fileVersion": "14.12.25830.2" + }, + "runtimes/win-x64/native/System.Private.CoreLib.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/api-ms-win-core-console-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-datetime-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-debug-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-errorhandling-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-file-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-file-l1-2-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-file-l2-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-handle-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-heap-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-interlocked-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-libraryloader-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-localization-l1-2-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-memory-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-namedpipe-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-processenvironment-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-processthreads-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-processthreads-l1-1-1.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-profile-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-rtlsupport-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-string-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-synch-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-synch-l1-2-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-sysinfo-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-timezone-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-core-util-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-conio-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-convert-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-environment-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-filesystem-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-heap-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-locale-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-math-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-multibyte-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-private-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-process-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-runtime-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-stdio-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-string-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-time-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/api-ms-win-crt-utility-l1-1-0.dll": { + "fileVersion": "10.0.17134.12" + }, + "runtimes/win-x64/native/clrcompression.dll": { + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/clretwrc.dll": { + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/clrjit.dll": { + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/coreclr.dll": { + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/dbgshim.dll": { + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/mscordaccore.dll": { + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/mscordaccore_amd64_amd64_4.6.26919.02.dll": { + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/mscordbi.dll": { + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/mscorrc.debug.dll": { + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/mscorrc.dll": { + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/sos.dll": { + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/sos_amd64_amd64_4.6.26919.02.dll": { + "fileVersion": "4.6.26919.2" + }, + "runtimes/win-x64/native/ucrtbase.dll": { + "fileVersion": "10.0.17134.12" + } + } + }, + "runtime.win-x64.Microsoft.NETCore.DotNetAppHost/2.1.5": { + "native": { + "runtimes/win-x64/native/apphost.exe": { + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetHostResolver": "2.1.5" + }, + "native": { + "runtimes/win-x64/native/hostpolicy.dll": { + "fileVersion": "2.1.26919.1" + } + } + }, + "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver/2.1.5": { + "dependencies": { + "Microsoft.NETCore.DotNetAppHost": "2.1.5" + }, + "native": { + "runtimes/win-x64/native/hostfxr.dll": { + "fileVersion": "2.1.26919.1" + } + } + }, + "System.AppContext/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Buffers/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.CodeDom/4.4.0": { + "runtime": { + "lib/netstandard2.0/System.CodeDom.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.25519.3" + } + } + }, + "System.Collections/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Concurrent/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Collections.Immutable/1.5.0": {}, + "System.Composition/1.0.31": { + "dependencies": { + "System.Composition.AttributedModel": "1.0.31", + "System.Composition.Convention": "1.0.31", + "System.Composition.Hosting": "1.0.31", + "System.Composition.Runtime": "1.0.31", + "System.Composition.TypedParts": "1.0.31" + } + }, + "System.Composition.AttributedModel/1.0.31": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.AttributedModel.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.Convention/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Composition.AttributedModel": "1.0.31", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.Convention.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.Hosting/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Composition.Runtime": "1.0.31", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.Hosting.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.Runtime/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.Runtime.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.TypedParts/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Composition.AttributedModel": "1.0.31", + "System.Composition.Hosting": "1.0.31", + "System.Composition.Runtime": "1.0.31", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.TypedParts.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Console/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Diagnostics.Contracts/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.Debug/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Diagnostics.FileVersionInfo/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "System.Diagnostics.StackTrace/4.3.0": { + "dependencies": { + "System.IO.FileSystem": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Metadata": "1.6.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.Tools/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.TraceSource/4.0.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Diagnostics.Tracing/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Dynamic.Runtime/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Globalization/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Calendars/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "System.IO/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.Compression/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Buffers": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.IO.Compression": "4.3.0" + } + }, + "System.IO.FileSystem/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Linq/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Linq.Expressions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Linq.Parallel/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Memory/4.5.1": {}, + "System.Net.Http/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Net.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.ObjectModel/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Reflection/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit/4.3.0": { + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Metadata/1.6.0": {}, + "System.Reflection.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.TypeExtensions/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.ResourceManager/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.Writer/4.0.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Runtime/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0" + } + }, + "System.Runtime.CompilerServices.Unsafe/4.5.1": { + "runtime": { + "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": { + "assemblyVersion": "4.0.4.0", + "fileVersion": "0.0.0.0" + } + } + }, + "System.Runtime.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Handles/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Runtime.Loader/4.0.0": { + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Numerics/4.3.0": { + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Runtime.Serialization.Primitives/4.1.1": { + "dependencies": { + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Security.Claims/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Security.Principal": "4.3.0" + } + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Cng/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Security.Cryptography.Csp/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.3.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Principal/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Security.Principal.Windows/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.Win32.Primitives": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Claims": "4.3.0", + "System.Security.Principal": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Text.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding.CodePages/4.4.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1" + }, + "runtime": { + "runtimes/win/lib/netcoreapp2.0/System.Text.Encoding.CodePages.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "4.6.25519.3" + } + } + }, + "System.Text.Encoding.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Text.RegularExpressions/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Threading/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.1", + "Microsoft.NETCore.Targets": "2.0.0", + "System.Runtime": "4.3.0" + } + }, + "System.Threading.Tasks.Dataflow/4.6.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks.Parallel/4.3.0": { + "dependencies": { + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Thread/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.ValueTuple/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Xml.ReaderWriter/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + } + }, + "System.Xml.XDocument/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XmlDocument/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XPath/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XPath.XDocument/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0", + "System.Xml.XPath": "4.3.0" + } + } + } + }, + "libraries": { + "mpc/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Buildalyzer/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5nO0Lkv0zcB5Ck8AaO9eXnRbAfVAB45QQ0ZGCAfPwRxqlqn7WFkn6ESL8EWD8jgTdodtIE8KpZFXm8zb1jIYBw==", + "path": "buildalyzer/2.2.0", + "hashPath": "buildalyzer.2.2.0.nupkg.sha512" + }, + "Buildalyzer.Logger/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-490kgGa+07Jwdsq0jqxUSG2QjVg65MJHMEI1/D/7pOjNY4/Zc5DJTKxuL1eJUFf+rzB7NtZKDV0IGABlH8Ihmw==", + "path": "buildalyzer.logger/2.2.0", + "hashPath": "buildalyzer.logger.2.2.0.nupkg.sha512" + }, + "Buildalyzer.Workspaces/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iItCd3jnCUCXryBbWPpRqzPco2vqWobEAoyXelVSfQ+xkZmEwRGYtjjxa+14qo9sNve/a+LTeYknWG/dyRIQOg==", + "path": "buildalyzer.workspaces/2.2.0", + "hashPath": "buildalyzer.workspaces.2.2.0.nupkg.sha512" + }, + "Microsoft.Build/15.8.166": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MH3/LhMZZEAkWyMxUkRmNoMqO4A4XhXz7c1OywTKs9n0bvrCPD4S5k7p0YfyEpSY4JVIzbUFvHCR/uaFXtACEA==", + "path": "microsoft.build/15.8.166", + "hashPath": "microsoft.build.15.8.166.nupkg.sha512" + }, + "Microsoft.Build.Framework/15.8.166": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Bw7ebVvOQQC5zgM0AsyZFB23aJvEISa1vABkWCgjGueopq+fG6JDhwHeAXloLcwtQldvDobivLDFw6/8QDN9cg==", + "path": "microsoft.build.framework/15.8.166", + "hashPath": "microsoft.build.framework.15.8.166.nupkg.sha512" + }, + "Microsoft.Build.Tasks.Core/15.8.166": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NCTTEPkSUkxE7dZiVfnaSzjEMs7AiQYJ9hVHzGyreQzZFrR9fajwBc2KAjjH3pS8nBcx/rmjH9T0b5ZMOJviEw==", + "path": "microsoft.build.tasks.core/15.8.166", + "hashPath": "microsoft.build.tasks.core.15.8.166.nupkg.sha512" + }, + "Microsoft.Build.Utilities.Core/15.8.166": { + "type": "package", + "serviceable": true, + "sha512": "sha512-AZ7pSCGDeRlBm3TIOrnSOCWB2+Wea4rL7sMsinyChF3NJUAb//lF0fUyZfjbukE5eCqba17gw0FnbMjnNgtecw==", + "path": "microsoft.build.utilities.core/15.8.166", + "hashPath": "microsoft.build.utilities.core.15.8.166.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Analyzers/2.6.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-x9MfOXfTj/tdgm3rV15niL/J0T36ZPiVrIfO3Tax9Lv4fLGnVZJXSQatZezJ+tX+YYk2ZAPbq87vnSFwh1Je9w==", + "path": "microsoft.codeanalysis.analyzers/2.6.1", + "hashPath": "microsoft.codeanalysis.analyzers.2.6.1.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Common/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-gWTphgR8eHu39XcrfhxE8WwD35C/vaR06QiKM1TaCbjmgPafZ9G3TY7eeT44BfHVMQEGYZmjV5NZNQLm2F7ZTQ==", + "path": "microsoft.codeanalysis.common/2.9.0", + "hashPath": "microsoft.codeanalysis.common.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RNACUadFXlT3/Y4XIVI1+g3hpGgToYJyVTRBVFmhE8gtRA2snM5dPKv2e4Qz7K/3Ap7Ky+YgIKCO4YsmWqal/A==", + "path": "microsoft.codeanalysis.csharp/2.9.0", + "hashPath": "microsoft.codeanalysis.csharp.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Kis5VedBJjtdlYlI9erCAnqz2fVgRWLHCDYMIKRXsD4CVWrwrm8sCq3qmY9Drmit85StquRPFw5z8YMhDCB7RQ==", + "path": "microsoft.codeanalysis.csharp.workspaces/2.9.0", + "hashPath": "microsoft.codeanalysis.csharp.workspaces.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.VisualBasic/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4nxVFgxywDHttOSLh9z36QGUdsTFz80A/M+qc2bgZ3GBuTR9+FeDPIap8DQrBcDZWO1Kb+0QC6b65jZvgcZP5g==", + "path": "microsoft.codeanalysis.visualbasic/2.9.0", + "hashPath": "microsoft.codeanalysis.visualbasic.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.VisualBasic.Workspaces/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dL9+IJPk7mZ9LFY0saaXk1adKbEDhHe+U+1fG4F7o4NsvZqcOS/6sRcEWl253gi2ZoFoonDDB3sffhrlg1ITIQ==", + "path": "microsoft.codeanalysis.visualbasic.workspaces/2.9.0", + "hashPath": "microsoft.codeanalysis.visualbasic.workspaces.2.9.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Workspaces.Common/2.9.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KGkaumh6O0gS0RBWHHIfx34u5sm7vhgTDaFOcKm60tELh6Jy6OYNtdB/Iyefvvwb+PaZIcUg+9hbGBQ1GdCHqA==", + "path": "microsoft.codeanalysis.workspaces.common/2.9.0", + "hashPath": "microsoft.codeanalysis.workspaces.common.2.9.0.nupkg.sha512" + }, + "Microsoft.CSharp/4.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CLd4nvEjFlopxG7O6y4d2h46ZP+pfBw0cT/7WuZpMYduIthUO8dEJzfq8l+WJm8nOEg3LJcdKu8KG8N28vomBA==", + "path": "microsoft.csharp/4.0.1", + "hashPath": "microsoft.csharp.4.0.1.nupkg.sha512" + }, + "Microsoft.DotNet.PlatformAbstractions/2.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ae/c3pX6vhCs17caUrVZrb8n9gDTzr6usnZKZEHla7uy7ZcjQLfm09gS7m+IneVtmGwXm5hcSDa5qwqwLaH2Ug==", + "path": "microsoft.dotnet.platformabstractions/2.1.0", + "hashPath": "microsoft.dotnet.platformabstractions.2.1.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1JaydycXzbfAExlsD7XIWykzVnU/wZM86KzrHyGlXuxqnqzcWSXLJn4Ejn8bDnq07CEJNZ+GjsxWKlJ8kFfnvQ==", + "path": "microsoft.extensions.configuration/2.1.1", + "hashPath": "microsoft.extensions.configuration.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-9EMhOWU2eOQOtMIJ+vfwKJpnLRc1Wl3vXu8qXeevA91cSY4j3WvArmF7ApGtJwa7yKewJTvlQlBSn9OSnLFg6Q==", + "path": "microsoft.extensions.configuration.abstractions/2.1.1", + "hashPath": "microsoft.extensions.configuration.abstractions.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Binder/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-t7KFAv6AxyUsZj9QN8FAbusg+X5baCELl+XtscyuP1IGUv5UctyY7/rNZLyiKaV7HhAcDQ1zC5ZQNQQFn6JpAA==", + "path": "microsoft.extensions.configuration.binder/2.1.1", + "hashPath": "microsoft.extensions.configuration.binder.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PW1596sF97gpIc1JuUuYvTmeLfeqC5whbWPsWgJhN0fdwz683him3b/HB0dqhFesVssOjnnA0fEz4+S0gUeBqA==", + "path": "microsoft.extensions.dependencyinjection.abstractions/2.1.1", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyModel/2.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3KPT6CLH0VEGr2um9aG1rYTmqfMVlkRuueFpN6AxeIKpcMA4OVHf4aNpgYXZ6oF+x4uh9VhK/66FgPCd1mMlnQ==", + "path": "microsoft.extensions.dependencymodel/2.1.0", + "hashPath": "microsoft.extensions.dependencymodel.2.1.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-x4/RzeReQSIi4nVpOjXEySm/xUSr6lBjuecdYnlUboWxbLSm2j3vhFV5OLGRp3gfte3cRMdysMNa/wyZN0t/Tw==", + "path": "microsoft.extensions.logging/2.1.1", + "hashPath": "microsoft.extensions.logging.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-QWFWKrdeoDSEr8nVJaBAVDMj24wnh9clGzDNmMdgHHRsOIwTUMeh4XljeZXJhIKPT00jWuzwEzn3uNxOtO4cYg==", + "path": "microsoft.extensions.logging.abstractions/2.1.1", + "hashPath": "microsoft.extensions.logging.abstractions.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Options/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-j0zOfTt1Qm+JDW2m+6Q/aj1m4C8+onudUu4ls/fN69VxruZkMWmX1bPKkbkYIPNNxJsf4k7FOkVq5o1vEFq9pQ==", + "path": "microsoft.extensions.options/2.1.1", + "hashPath": "microsoft.extensions.options.2.1.1.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Svz25/egj1TsNL4118jyMqkhDiu0l8QYWq2p52P4BBN0GbqwR18ZRIctSP5TTDJy0m0EFC8aB2FOVjGtvEGWSA==", + "path": "microsoft.extensions.primitives/2.1.1", + "hashPath": "microsoft.extensions.primitives.2.1.1.nupkg.sha512" + }, + "Microsoft.NETCore.App/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oTQd5w0qQp32QSKPE6TqhhcybkkTKqtn4YVnNsYHwFR28s1kUAI/xg+hmKwF/G+u4vUjgy7Y7ghC0cIwRP5wdg==", + "path": "microsoft.netcore.app/2.1.5", + "hashPath": "microsoft.netcore.app.2.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.DotNetAppHost/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ir7AI1ywRriX1fLTLYOyiDTYSj+zpdAfTBFH0dLwvLvC8obU0EYnmrjTzbYJ8GSnza1H1Rv3Lo/lJBSccmTGMA==", + "path": "microsoft.netcore.dotnetapphost/2.1.5", + "hashPath": "microsoft.netcore.dotnetapphost.2.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.DotNetHostPolicy/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fkTeZ7G1Tf0aT+P1bMyn/qJXByFIaATNAt0DKrZ3nC7jMRAWBHJifOrOe5XnGvvc0YzqVLmHARYtzSG00/9NVw==", + "path": "microsoft.netcore.dotnethostpolicy/2.1.5", + "hashPath": "microsoft.netcore.dotnethostpolicy.2.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.DotNetHostResolver/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/rPHOsRWubviDEGlxQcNKtJ7G6ML0F/Pg5vG1E+lgfdmoyLRKqrE3ZjVlYCxS18ExZGekBq9LEVb+eOKMxlJEA==", + "path": "microsoft.netcore.dotnethostresolver/2.1.5", + "hashPath": "microsoft.netcore.dotnethostresolver.2.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/2.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iXcQc19h5oECLVokgt6hvLOOPP/d9kYQh9miF9zbcxGVZenuTN9IMB+f+gP26/+Rc5r2KLES5Of45Qdqo0NJeA==", + "path": "microsoft.netcore.platforms/2.1.1", + "hashPath": "microsoft.netcore.platforms.2.1.1.nupkg.sha512" + }, + "Microsoft.NETCore.Targets/2.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mJnCMoBfWL0lxxlBFJ/8cZKTfPpI82TekZkUqvSCBtunUaaqr2LVeWl1zQYdanAdk4Ddf1HCwb8+DNYaNFBk1w==", + "path": "microsoft.netcore.targets/2.0.0", + "hashPath": "microsoft.netcore.targets.2.0.0.nupkg.sha512" + }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-d2YDDsTDnU/+ERiLxkHMviiQlclT6/G2iddWPPH4xLbS0P0+RYcqOZxqauVHX6s3Uv2cUkL226qXKpfn/fL98Q==", + "path": "microsoft.win32.primitives/4.3.0", + "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512" + }, + "Microsoft.Win32.Registry/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OHAvcu6tVh40PncTYFkpLItsw9O8sUc59C4eqSqEd+U5rY7t0+u7Xoi6Mw2QOfvPJ2HUJlwIEVqxklDIfn757Q==", + "path": "microsoft.win32.registry/4.3.0", + "hashPath": "microsoft.win32.registry.4.3.0.nupkg.sha512" + }, + "MSBuild.StructuredLogger/2.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LYK6MOfPUEE/u10OepnvFOjFy12YWOjtXXIh3K0RtUzdjatIHZSAjU8MKPuGcegi06iblNH2Rlc78vc2AVokhg==", + "path": "msbuild.structuredlogger/2.0.11", + "hashPath": "msbuild.structuredlogger.2.0.11.nupkg.sha512" + }, + "MsBuildPipeLogger.Server/1.1.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4gxSIkc4mMpHemehqDAZzGdKAhGJAxyt+56SUi6B4X2FWijojXzcIr7illkuEA7Ex05eoa5Cx4pr6d1hn4m8lg==", + "path": "msbuildpipelogger.server/1.1.2", + "hashPath": "msbuildpipelogger.server.1.1.2.nupkg.sha512" + }, + "NETStandard.Library/2.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", + "path": "netstandard.library/2.0.3", + "hashPath": "netstandard.library.2.0.3.nupkg.sha512" + }, + "Newtonsoft.Json/9.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", + "path": "newtonsoft.json/9.0.1", + "hashPath": "newtonsoft.json.9.0.1.nupkg.sha512" + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+HIVh+8SOZS56Hqm/5wKUEAiz3BgjQRTQ6OG4K3FwSXT3JckhZbH4A/Xdwb7Z/GPQW4HocnFbq5CSuVXwy6ylg==", + "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tRFXi8EvFI+yB0DBDu52piUGKBlNebhT1swNbiTvUeZnkCuabY41eJnQaHESk1PGTiHs0Lh2FSwZYG5cUCnrrw==", + "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DPnni2nk3x2Iz/6Do1tme5F8sM4Jo5xUNsHJxlRJ686v/WcFeuTR8r72Bwr/8iJxRJepn/ke/XLHphnWme1OpQ==", + "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.native.System/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6l0Dkix8bgJVwfFQg1yPNBa3J3hmOdSuZLYI06QlheipqU0hT2XCfN8otCPhD4M2Aq+Xhy1B5+9Jr9WWhfdusw==", + "path": "runtime.native.system/4.3.0", + "hashPath": "runtime.native.system.4.3.0.nupkg.sha512" + }, + "runtime.native.System.IO.Compression/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FBMFTXHy9kGuYs/bj62XyVrQB44HZcZ1fTj3Iv04eFGVcg65vac5o9Rv3hdYqNPmWK/DVgLUV8aeeTzcaqB5hg==", + "path": "runtime.native.system.io.compression/4.3.0", + "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Net.Http/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-g8FnRWqvKQwR0pjrB9bG1cLGSR4EFAu+7U34Q+ptucNLvBfWEAWcm54vrZCMAT6H9VU6VfDruGHA4nc1gu1i2w==", + "path": "runtime.native.system.net.http/4.3.0", + "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cgjvRwk6uDocZbujiZcZ90OYnErFqpN26H56Xfe8nnZIvErpRHe0RxP16DsLzY5dBuVqChNb+hLN7R8ixk1xVg==", + "path": "runtime.native.system.security.cryptography.apple/4.3.0", + "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uvqanMQDxKS+7ADCRVzNqoa9IQuxuBOVrtWvNNuNyNe/Gb03SxR9QgoRKKvIrvwMUGrudNDhrEITDRGWLIXqGA==", + "path": "runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6uH/bLrHHChHf1v+ZZCnVjKiaeCFOjd7RUBG4/MqBBRheByueBEGTvPrv2hSrpxPrwYZuNACAmYanbB7MtcflA==", + "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7fcf887lmwAHbWfCeQUVA/A8PaEkj0nwYDqUlytKP78+BJUjbVWTJqjFkM+jBeTCOElrt1RzrH0Hil+1tNLVBw==", + "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fuh5u2mOjEjHx2bQHHZTryMCWNOY9N7I0rCN3KldGRU6brnMOuZRTB3uh6AYK/9eioywbNerYDZAL6M3C4c7MQ==", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", + "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-W3mGmFCN5ei6jegKyBX8eMB+OEMAzcYvZBCocfrwOBMBsyv0YB9XuxZ9xxqsQJ71T4LGImi8+A8ntNkdwk4OhQ==", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nwK59n0Ink7MhkZKGxzAOdbxniOBQEbfV3fqvE0Q/AcuenNkdNlu6fbeeGWVzJWeliFIgzk1Rp/hCR/aAbs32g==", + "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fSj8+HzPXcEnBA+svDivS1/dhfwhG1LgQvyN7Jxvaqt97aMfGC1mdlMVUEoS+5awAHIZtmi8GZWtq+rXK5zaUw==", + "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xtUCr/NeowVrQ3e8uWRzppefx6yBvXYPKoHYjFaZKyO6HVZ7yFd7PM6P/QwAKejYRnlZElOL01lz5arTfKNeDA==", + "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Zja3A4KNQzxx07aAwgNoD55qGAntIwaRruMdRZaUNo2PB8czzPJE9GMFR/6im2rMoriWfxR+G90gXdQUx7v8KQ==", + "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.win-x64.Microsoft.NETCore.App/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rSRi1EnEPpe+p90DyVkOJDBT0mBT06+qFlMdHmMBD+e8SznqkkgmYzK5WbPsrVSpxsZZZjOBseqKsgINW/E3Hw==", + "path": "runtime.win-x64.microsoft.netcore.app/2.1.5", + "hashPath": "runtime.win-x64.microsoft.netcore.app.2.1.5.nupkg.sha512" + }, + "runtime.win-x64.Microsoft.NETCore.DotNetAppHost/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0qZSFFY+5cCiUMoiFUWcA02+d2F1qrDalBOQ8bdtrQ6xauUNq7of96a1IGYB55gZPBwg18N3k2mKkT8toBgX8g==", + "path": "runtime.win-x64.microsoft.netcore.dotnetapphost/2.1.5", + "hashPath": "runtime.win-x64.microsoft.netcore.dotnetapphost.2.1.5.nupkg.sha512" + }, + "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zNanEWbXKa8E/KPg8b77VWzrxJgE3lnDcFIu16k5k496yMmqgqqh6o0pOAdVqmolxnXjp021lcEKR/TRA8/yzQ==", + "path": "runtime.win-x64.microsoft.netcore.dotnethostpolicy/2.1.5", + "hashPath": "runtime.win-x64.microsoft.netcore.dotnethostpolicy.2.1.5.nupkg.sha512" + }, + "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver/2.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wJA02vuwaVvaJ+5ZoKcad6Bm/z9MMO7HO8TLyMTk7uaxDtShD8AykBoXnn0zqvO8nMUmqhxgl8gQM4ZtKAHcqw==", + "path": "runtime.win-x64.microsoft.netcore.dotnethostresolver/2.1.5", + "hashPath": "runtime.win-x64.microsoft.netcore.dotnethostresolver.2.1.5.nupkg.sha512" + }, + "System.AppContext/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uEIyp9GUT2U5UD4KjUU2bIdmBFuRXGn0VeAbWZvqqfSdXfyADZQnmfCVxc18BbXpr4Axum0MY/gtQhiWroNcNw==", + "path": "system.appcontext/4.3.0", + "hashPath": "system.appcontext.4.3.0.nupkg.sha512" + }, + "System.Buffers/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Mm9RDuBQ6CIi0BP75sMq0boRBmztwc1MGfHSoeXdoOyJnyvG6Dri9GE1mNebbVWEkxNRe4CbXHTJYyKq/3WEmQ==", + "path": "system.buffers/4.3.0", + "hashPath": "system.buffers.4.3.0.nupkg.sha512" + }, + "System.CodeDom/4.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-E/lvSfMFPtNflAgdM6AuPU8JbZdqdSoGpU66G7SrduCqdrFyPflaqqV4gN2d0hrCBpu92HaoqpUP5d+g9Itcxw==", + "path": "system.codedom/4.4.0", + "hashPath": "system.codedom.4.4.0.nupkg.sha512" + }, + "System.Collections/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/RO6DxDIzcceka4RmnJ6P8anXxdkmdRGKpliRZKVB84y4LzpqMMWTLAGRQXLc5ET15z1Xr7YaNZx1rbWuqRVcg==", + "path": "system.collections/4.3.0", + "hashPath": "system.collections.4.3.0.nupkg.sha512" + }, + "System.Collections.Concurrent/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fu4SvisargPpI4z2+69ocBNmQLS98WyvsA1dP35c2dxRJnEd/+cSmGnv/GSNxbIs7wtveGB8tzFLYABPFkX7Kg==", + "path": "system.collections.concurrent/4.3.0", + "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" + }, + "System.Collections.Immutable/1.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-erLSnZLBCA8EKIE2bKtXynjWBWSoMlmCFrOOYN+sPKCeYd3oGj9h8hqRPODtsRlPANkOW7L8tEQlEadHbUXC6A==", + "path": "system.collections.immutable/1.5.0", + "hashPath": "system.collections.immutable.1.5.0.nupkg.sha512" + }, + "System.Composition/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CbzwbjxT04VU+JzQuPOYfUCybzBtbGZdqGJS9482dDBoBHbt3Zz0QAJ/Cjzpmq5xdL+hhW4FYWf/3wq2OCVXgg==", + "path": "system.composition/1.0.31", + "hashPath": "system.composition.1.0.31.nupkg.sha512" + }, + "System.Composition.AttributedModel/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rhZeg+i71Q0MZjYIdIpyfzKM7E9EsvytXxq+CaZ/vWCV09ZfMnb0MOEkfM4wfKhTo7Xoo3TJkkfTLx8kUCltkg==", + "path": "system.composition.attributedmodel/1.0.31", + "hashPath": "system.composition.attributedmodel.1.0.31.nupkg.sha512" + }, + "System.Composition.Convention/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-9GFJIdwg0zr8s2KHVVgVikYfPJ/KntH1D79Z7VzCovUZwDNNq66MMKkLJIOCztXsgDdgYKOp3BAYASRS9EvYGw==", + "path": "system.composition.convention/1.0.31", + "hashPath": "system.composition.convention.1.0.31.nupkg.sha512" + }, + "System.Composition.Hosting/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KlZ4qkaa1p/U2WKr353XeQ9bjrxBwn9FcD5k9WFEuV1MloDMnTnhUwQU7h1WigvsCYykzoRdnDLq33wnUPwBeg==", + "path": "system.composition.hosting/1.0.31", + "hashPath": "system.composition.hosting.1.0.31.nupkg.sha512" + }, + "System.Composition.Runtime/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iZH3/g2js6fmV3atN2Ym/o+dM2ZMA1GA0GXc70nhbIqK67L29Lh3YrAWiBlyoOIUjNEggA6L4i++7PSID2wMdQ==", + "path": "system.composition.runtime/1.0.31", + "hashPath": "system.composition.runtime.1.0.31.nupkg.sha512" + }, + "System.Composition.TypedParts/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-H6fLWxFy+cy+YsHRcvUBskvDYkpDdUJky+GkqYvi8B/5cm/KIQ5QVDOLKuul4PHFZ/x0yRacS8CpY3x/PxiBeA==", + "path": "system.composition.typedparts/1.0.31", + "hashPath": "system.composition.typedparts.1.0.31.nupkg.sha512" + }, + "System.Console/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NXaPmAD2UQOwcXA0CdsTCi1g/BUmuxwwGok2guCrS/pLpAv79v5TQLWYPnUoysNbn3p8v1WLguJHLMa782C5Yw==", + "path": "system.console/4.3.0", + "hashPath": "system.console.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Contracts/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-clL6acqvIbbx3JYunlkrWV5sP9qGd0sLl612eXrBVVwakTTlMNtvZB5RiC2rU2uYxSnIt2ssUQgA2adrYSqYhA==", + "path": "system.diagnostics.contracts/4.3.0", + "hashPath": "system.diagnostics.contracts.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Debug/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-j3oXzv/QxCZcBxSIzreks9gAMenRyZTvSntLbDYGWczEhLQX4Ob3ajnXpAC9IXymWI+N4AFV7/pXLPwn+2ItAA==", + "path": "system.diagnostics.debug/4.3.0", + "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wu5+BNFredYlzZEmih3pMlR0ekaWCd9KZ8MPWqIQ4KVKo+RpzuhsIAfteI5OYQ2zSVzg1uOfQBrJ8KFkz+XfRQ==", + "path": "system.diagnostics.diagnosticsource/4.3.0", + "hashPath": "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.FileVersionInfo/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OEshwk5wkdxtGkFZYSErv6dnUuz0z8C01htylGwOwFnCVFRcrvleBtplMDCk9nMyWP41cbMZGEIBfy7HV1Loug==", + "path": "system.diagnostics.fileversioninfo/4.3.0", + "hashPath": "system.diagnostics.fileversioninfo.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.StackTrace/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BZY9Q0RiOSp/hp13jXe97aVOgPDzlqOdYdixs5fl/e3K/vz1SoJYDddY8CPE3wH9m043tJ65L8i+WMiPzGxdtQ==", + "path": "system.diagnostics.stacktrace/4.3.0", + "hashPath": "system.diagnostics.stacktrace.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Tools/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7gcA6FsKiySf+s9PeyenhSuUmxbxrpEDZ+/UcZBUbIu92JR804efdbIy4bEYcHg1htFbhxewu8vIV5pWYhc2Sg==", + "path": "system.diagnostics.tools/4.3.0", + "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.TraceSource/4.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bGUeY5wiCHYSWbYZS3QjbaQ1hNoJ1RQBQMB3E0Cgh6AH//4rXfXIOHKIW46HDOsTEDoNfvFNDXphL5W5B/XMwQ==", + "path": "system.diagnostics.tracesource/4.0.0", + "hashPath": "system.diagnostics.tracesource.4.0.0.nupkg.sha512" + }, + "System.Diagnostics.Tracing/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7IXKSUQm7wC+beoAINYrIqawpecwtyiM5NKv96whUmWOvg2vPn60WYqLopKbWu3GSPCH/ZJxAiHrS7tYlhb5Dg==", + "path": "system.diagnostics.tracing/4.3.0", + "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" + }, + "System.Dynamic.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PyiPySIERuk05CtVuHEQOijQChY4L77ZcUe+fee7lyZxPbU/hlduSfUIXw8XF/T+R1jOIDoOZXEQ+ZoFEgOzYQ==", + "path": "system.dynamic.runtime/4.3.0", + "hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512" + }, + "System.Globalization/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Gp7Z/4kR92caisVDNbXXYdGYZuAECXZGIaG7kAOs3cEM3zVMp078Yn3qVRGzUidYSYEAauQ0hx7mbXEmuimhYA==", + "path": "system.globalization/4.3.0", + "hashPath": "system.globalization.4.3.0.nupkg.sha512" + }, + "System.Globalization.Calendars/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cr50CLRa9Egfe0Cg2aQPrnLqDpcE794AKTmpgiTIZpz+3N7lN+5yGtNUhTrUbMeSZycoFHTGIEArIlv8J2aX/A==", + "path": "system.globalization.calendars/4.3.0", + "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512" + }, + "System.Globalization.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4OvZWmZyTOaSygNnIdnu/p0zvu+HU9WnoZshyo3wzU5lLqiVa1pli0iY/VegQoJ7NPk5hd0RVxU+XrSOr5aauw==", + "path": "system.globalization.extensions/4.3.0", + "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" + }, + "System.IO/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Ep3xyKDltu0EsCk1BvoWBC7NltwFqRlYCjwKTV7+d4sAH0lVk5P3Q2XydNm6dYxUJZdUgmBLf52F3pAwzKIJBg==", + "path": "system.io/4.3.0", + "hashPath": "system.io.4.3.0.nupkg.sha512" + }, + "System.IO.Compression/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RTb1FGyGEZkNrxrFee3FZsMJSmK6Lmxaef2mHdK23qn9IxlEZbeK14hb0KPNM8k6QzzU+kqR1rTD8bYopx6fYQ==", + "path": "system.io.compression/4.3.0", + "hashPath": "system.io.compression.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4mTkw3zbrqvWAMLqgMxr4lg2ggjcCPAhJqRSKy+ZhrPlXztqYAKf7d5sDDJmCkZjNJxsM/k9ZvlQZR6/zUCihQ==", + "path": "system.io.filesystem/4.3.0", + "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-l8suI9sMTsWzpZraleWE3z1KQqTCqBITJJmeT0AVj6Kk6EWLv9iKDb47O8zBktZqWAxEF1nvUnwhevYW9DToPQ==", + "path": "system.io.filesystem.primitives/4.3.0", + "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" + }, + "System.Linq/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4GusFyZYZE8W5IX9MjqCzucdLArml/j5zxVw2R0VS+JhrTaibL6M2SQSi7lIpGwwBuxU1Dwe2Sx1putAQ5d2BQ==", + "path": "system.linq/4.3.0", + "hashPath": "system.linq.4.3.0.nupkg.sha512" + }, + "System.Linq.Expressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-jlZ1AKYgns90hbPp83uM5SQCWRrqLZWHS3q33zeMlAdKfQ4+KT4VVbWmgWqh6nVw7pB/7dXiR8TjHUPcXwIEKA==", + "path": "system.linq.expressions/4.3.0", + "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" + }, + "System.Linq.Parallel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-td7x21K8LalpjTWCzW/nQboQIFbq9i0r+PCyBBCdLWWnm4NBcdN18vpz/G9hCpUaCIfRL+ZxJNVTywlNlB1aLQ==", + "path": "system.linq.parallel/4.3.0", + "hashPath": "system.linq.parallel.4.3.0.nupkg.sha512" + }, + "System.Memory/4.5.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oonnLQPZAGD21qtNMG4EtVmbYOInk2jV7M+g108B6OHOb67ZOaWnA/K8P5oQ6uK9wxKzB1iEXSChQOi2scKOqA==", + "path": "system.memory/4.5.1", + "hashPath": "system.memory.4.5.1.nupkg.sha512" + }, + "System.Net.Http/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Z1UfSF6dlpCdZdxh6LeoGlYH+q6ptG/iiIWgUUeKhE3DbQACmZkU7Sz2nOX0qdHjz72MOdYRbkSJ5Qwl6sZgvg==", + "path": "system.net.http/4.3.0", + "hashPath": "system.net.http.4.3.0.nupkg.sha512" + }, + "System.Net.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zpJLsVc5gRgTZR1QEi0H3s0bV26t7yug0WcersFr/pVqDvEBiqQm6z3YjYtWkVlMJ65ko1sSvGW5WXqaykOQ+g==", + "path": "system.net.primitives/4.3.0", + "hashPath": "system.net.primitives.4.3.0.nupkg.sha512" + }, + "System.ObjectModel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-jeoLKRPL6N8492mNbyrUFhMkEEFb4ihgZmIuAXqv7lxkWQjzs+UqBPDKqmS2gQfFAUO2wXaaZPVEcKUfhETR2w==", + "path": "system.objectmodel/4.3.0", + "hashPath": "system.objectmodel.4.3.0.nupkg.sha512" + }, + "System.Reflection/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DyOo4oJzP4JDP+GmJmZRTUoMN1T7MDlQLCgptPKJ5oB9AhRZ/RDIhAw0XrLAC6BpBxSPWk+fv6rMzfZcYPIjyQ==", + "path": "system.reflection/4.3.0", + "hashPath": "system.reflection.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/rKEzbnRq6H1LUkLmlqT6YaD8S625rZIuK+EQvBwfdHjJbLni0c9SP0XSM2gv1Khnn9ehU5MSz/WmH7gwt2QGQ==", + "path": "system.reflection.emit/4.3.0", + "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-popK0u8UUkrlKadna04k1polWd1mdATZeKu/Qd0jiMZf4NTZ/GFzwpuuyTxYgUaPtqS2gJZ8rVkBWfYS4IdDQQ==", + "path": "system.reflection.emit.ilgeneration/4.3.0", + "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-TCmTVOvOkWf7QNHMuzbfSD1y7hO0PNhFfTGLzKAJYkh7Ta+lUX2pb+Rrnx/i3Ism6H2qCDzagRbnsluJQ1U0Kw==", + "path": "system.reflection.emit.lightweight/4.3.0", + "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" + }, + "System.Reflection.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VaItSJxypiIW7jglQPcywfByp9jLFkfGE6kZG17ft/q7xnFuS6GcDL/pPvnBqHpC0f0NCPV4utazuQ225DrxQg==", + "path": "system.reflection.extensions/4.3.0", + "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" + }, + "System.Reflection.Metadata/1.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-sARURAx/ZV3f3lL/40TG9y2Wqk60DXUlvzowM5oYeHlcpuEMIxoKnDBhNwBzwRs3i+vWUwIbU7Kk/+mG+hzckA==", + "path": "system.reflection.metadata/1.6.0", + "hashPath": "system.reflection.metadata.1.6.0.nupkg.sha512" + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6j+W57PZnjErWr1OBi7ORmwBBLycDB4N9aEOBKHAHXF/9sLOA30IQkqyOWGUUbQUgjHZwuZSVtgaUzW8wIbFTg==", + "path": "system.reflection.primitives/4.3.0", + "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" + }, + "System.Reflection.TypeExtensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-O0FhlnCiyHTpu0WBl5/0bbWvJpLjLdUNkDomPCaZP4baItazJDHl7666HrWQ1LB9iv5Wt36g08eZrlUB/JXNvw==", + "path": "system.reflection.typeextensions/4.3.0", + "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-u8AA+wa4EtOtkOf7OqxYryXnZ2zwv83qP1Dfnv3ZoA1k9Gx0HR/ERccyc1/HBpjbIdrcsyTVHivNQSYlGwGT8A==", + "path": "system.resources.resourcemanager/4.3.0", + "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" + }, + "System.Resources.Writer/4.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mGgwPBXGTqnw6lQeRI24ChoyPViWx36MVfN6Ys1ceLJMTQDMHcoLiMHOzSvA7ZgjX2tWBy8nfjzlN1kDL/G1gQ==", + "path": "system.resources.writer/4.0.0", + "hashPath": "system.resources.writer.4.0.0.nupkg.sha512" + }, + "System.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wLlTiM4b/Un90BM6s3voqYybZEGra4WiIaXfTeB9kVPZr6QDP97xjG+rZYzdP2jiuQnij1bA8q4PzmrY6l5QTw==", + "path": "system.runtime/4.3.0", + "hashPath": "system.runtime.4.3.0.nupkg.sha512" + }, + "System.Runtime.CompilerServices.Unsafe/4.5.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qUJMNWhbm9oZ3XaMFiEMiYmRPszbnXIkRIi7+4b2Md2xZ6JUOepf0/kY3S85qistRohl9OdMe4PsO+RdG2kTIQ==", + "path": "system.runtime.compilerservices.unsafe/4.5.1", + "hashPath": "system.runtime.compilerservices.unsafe.4.5.1.nupkg.sha512" + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Xz+DgcN+a9LcFJJ9uir7Za7hAye4Hon6CxufXiVkfoQ9IQLn1w0NGr7kuwosXFJ892JA8zNTx7QWjRc9qrmN3w==", + "path": "system.runtime.extensions/4.3.0", + "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LinND4TnXOL/oD28kxybu+XrwrvxSfEa+px6xVx5ndCBTmRoRLmiQrPQAHktupQ5ObRWsTzHot/K8cfK5b3jdw==", + "path": "system.runtime.handles/4.3.0", + "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xm8UVPKs/QFYrTDRzsmpKlGKHYsy5uXre2R6hD73R0NbJ1757Cc//5iedolR03ppxOkG5o1oRYkjxNq0Mb30pw==", + "path": "system.runtime.interopservices/4.3.0", + "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-p0Ks5JJnrUJbbJUBoTRyEdd8dvbjZywKxkmwl1ldjyu767RxUG9+wZGsSN1c8SMiJ8zfvsoO2flilpHKYZtWkg==", + "path": "system.runtime.interopservices.runtimeinformation/4.3.0", + "hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512" + }, + "System.Runtime.Loader/4.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/ol/Y9N+MghH5YPeeFuad34s2mclOPJJ4fs2hnFHr04QfGpUSBlcbpp/P3fggCNrZXwVKQEKgHu7SnA43Y8ang==", + "path": "system.runtime.loader/4.0.0", + "hashPath": "system.runtime.loader.4.0.0.nupkg.sha512" + }, + "System.Runtime.Numerics/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-K+WIriZO8+5TbeVtQY6+4d9Uipq5lJ0BaRr8j+DBXnqcjdcwguqZCsd1ZPBu8bo0b4r6sCnluiWnu3qVGQuLvg==", + "path": "system.runtime.numerics/4.3.0", + "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512" + }, + "System.Runtime.Serialization.Primitives/4.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RVu/CQgW96/pzEE1pV6fCMhwvkA2Exkt2v6D6jce5WaU76CpS1cavqeS8WtYzcnj2o3VQyqpktB/KGlnLkxC2g==", + "path": "system.runtime.serialization.primitives/4.1.1", + "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512" + }, + "System.Security.Claims/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aA3tDOv5FORzSWN4DVrbX2nE0INo5zbOrJbwmcN+XKKoBrfl6XIqUVoy53pa9lYSbSrASVXRxZGtQ/+wF2P6Hw==", + "path": "system.security.claims/4.3.0", + "hashPath": "system.security.claims.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Wwoz0ThoFf4pTpfWy79PN7vob1nlrEF2lX59qfPPnsmZKBq7YER9FShbNx6QiEMnvacx7ZB1OU2WV91KttfJYg==", + "path": "system.security.cryptography.algorithms/4.3.0", + "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Cng/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/EuVr1biVzo7h8wlFel3WN2nh2Dusx30Nsu8k5Dna3rUPYJuWGzoysNMRXQ4YxGWWNnFabDlM7z7EAGbXqL/Og==", + "path": "system.security.cryptography.cng/4.3.0", + "hashPath": "system.security.cryptography.cng.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Csp/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YkD7nbzlPBmcW84gV2mwLWToT7naB8WK7LRNSmkfLuswEBapQqYOeq+4E3UBGu6bOHCnAomgrgiZkk45DZpiNQ==", + "path": "system.security.cryptography.csp/4.3.0", + "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4K76Y6CMYqnuj/2uvucQGdq2X2j5C8wM7/Yl2oxjEGTWepuAzXuvzxQcIccZcqchK/AAmsaiZe24lZNdno7VyA==", + "path": "system.security.cryptography.encoding/4.3.0", + "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3LIgk/eAMyj/OrlxNvPCJRYkKZbJiJ/nhF1mIV8sLibNJJBheEyglXsEIkBYERywzAMW8RIJ5cP3BkYfLq+eKQ==", + "path": "system.security.cryptography.openssl/4.3.0", + "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-jeRd2cHsedEcqHT1rcAK4j41VLlcSKj+dfv7d4rIEcUIi2/MvSNviTXjKXBSNxpG40UzlPrYlRZ7pzUadmBJtw==", + "path": "system.security.cryptography.primitives/4.3.0", + "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8QkPGkoZWHZx6zRljnbomuOaJDHxGdJ64Fz4fKtG4g1ztro2dEZ9gnrmCKIJaHWPDKHLVG2Sc4B7D46W8Ur4Ww==", + "path": "system.security.cryptography.x509certificates/4.3.0", + "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512" + }, + "System.Security.Principal/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-QpsTE5TJpZw/ciAHRxxXLgGyMr1YgQJhjmhAEtM9ueq9SS6SktfLW1eMOLcDteHR9ksODY/BB3Cb1tIhvd3wnA==", + "path": "system.security.principal/4.3.0", + "hashPath": "system.security.principal.4.3.0.nupkg.sha512" + }, + "System.Security.Principal.Windows/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KhIQOIe7lZgn6tMQEQkgL6qLZvgLm2YhroCgsvpz//RUXnsOYx8pa6cmTARWhtf3Ift0ECtoiPkTajDonwEL5w==", + "path": "system.security.principal.windows/4.3.0", + "hashPath": "system.security.principal.windows.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-U564F0gK8wI5A+SXUg99g/sxG9Fgynj90qgtUzMcK8wDF6iAktFXpZfY9cETcz3NKvKR/rQpyhstguPcAA2lUA==", + "path": "system.text.encoding/4.3.0", + "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding.CodePages/4.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-epF1P00AFbqPy5jZx3fpEn5qwlBDZ+dck71xYc/jLibfY6BtoFKOqoj84YHcQWV9HcWb7M13aVJ61XCdK8/3XA==", + "path": "system.text.encoding.codepages/4.4.0", + "hashPath": "system.text.encoding.codepages.4.4.0.nupkg.sha512" + }, + "System.Text.Encoding.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-SLRvag/jlOLLtZy5GwsK1+p6AGP6YmOazNhx7ZdYuxpo5eSh0L1YS9ozte+DEeyNmd/u4/vGQ297wObM7ULAhQ==", + "path": "system.text.encoding.extensions/4.3.0", + "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" + }, + "System.Text.RegularExpressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-R3r6OE8Nl3SHl0lX7gQhFd1qvzEiIf5+gcf2vs/JAXG7kSl8l03HB2Jbyp/6JQ6rsv9XW47qCH8Nnc2kew4P4g==", + "path": "system.text.regularexpressions/4.3.0", + "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" + }, + "System.Threading/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4j+rHu0q/NVTrCrtwVeVy1WXpzMTB+V63DG2pI2aopEurxLtjYxqYFB0RQRahClkAzonmF7rTTPLnAGRfbV37w==", + "path": "system.threading/4.3.0", + "hashPath": "system.threading.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-E3rywGOEzJJvjVzTIZHYWYIja/zs9UTq3hEuUAyBc1Y4fYKG4013HRD9Y2JymL7eHUfaujLhh8UM4yeTnAwZCQ==", + "path": "system.threading.tasks/4.3.0", + "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks.Dataflow/4.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-C6u7OtH7Vvy+wbq4xx53E7evhrJ+I3nBWXCKh7/imxn3cKDUa2iAQ8uhzL0YnviXlJspBXXVmAbOFL1s9UHBuQ==", + "path": "system.threading.tasks.dataflow/4.6.0", + "hashPath": "system.threading.tasks.dataflow.4.6.0.nupkg.sha512" + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-H/qEiAmcJa9kowqQtBFkosed9A3IRfw/OkQSTlih2v97cFpAr/irN0rpX0lZ+NEGnM6EhSxIEDGPLHh9DIBZjQ==", + "path": "system.threading.tasks.extensions/4.3.0", + "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks.Parallel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Wn3GV5YIWjxvv9muD9FSZxH4PLx98Y4D1Z5mpYTowK1RLPtFvusnVKnT0OzmzEpYCMtVNgqfk3kPc9xRGsWrLA==", + "path": "system.threading.tasks.parallel/4.3.0", + "hashPath": "system.threading.tasks.parallel.4.3.0.nupkg.sha512" + }, + "System.Threading.Thread/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-XzzZm9Q5FOttt418yyPwRcMPyq7m570YZdRYtx1YvB37a0lYfODD/lWg/rtKrs8b87iTS09FAtgm/2v6Nh+j6w==", + "path": "system.threading.thread/4.3.0", + "hashPath": "system.threading.thread.4.3.0.nupkg.sha512" + }, + "System.ValueTuple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HiwjNp4lGpyqFXPbWe/GUV3VDn4URlp85xNinOXT+lXQCeJAVdtPm70kH/9PmjbhJjdF1zpPm3obvrT4defjCA==", + "path": "system.valuetuple/4.3.0", + "hashPath": "system.valuetuple.4.3.0.nupkg.sha512" + }, + "System.Xml.ReaderWriter/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8zETm01mtgiyTl3xO+QenvD6TLsDcopZQM0cxyf3maICj4HqP8nxLS9N7aRNsf+RWdWQW+QrKVmh5aD4w1jyQg==", + "path": "system.xml.readerwriter/4.3.0", + "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" + }, + "System.Xml.XDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VRYzRdAdsQFbx8oiblJC1QuAz+Ck792eArsccHxP0vfFv8055l25yhhLVqWCo3j9GEFYcku85bpdaMwXXDeY/w==", + "path": "system.xml.xdocument/4.3.0", + "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" + }, + "System.Xml.XmlDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ykIwRe9zpjElOMTvobLQrSvva9P8Pm1l7BFU/jq/u/INyoPS3mOr4z45kQWaNcWSuq3jGFA/6iU4+z3rPNakgg==", + "path": "system.xml.xmldocument/4.3.0", + "hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512" + }, + "System.Xml.XPath/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8Eo7vuasWRqXfiBRCIKz20Rq1h6n+NMp6nW2RmyUwF4VDekg8xbRZu8S3N21P5XGAhv+kaqUwI3xydEkcw+D5w==", + "path": "system.xml.xpath/4.3.0", + "hashPath": "system.xml.xpath.4.3.0.nupkg.sha512" + }, + "System.Xml.XPath.XDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-I50WmmXa9mUUujJOWKjyjqMnZcJklN5oc6XfHk5bfp9gt6eCJQ74qmi7IYEMa2YHPoFuA93uwssBlfU51i53QA==", + "path": "system.xml.xpath.xdocument/4.3.0", + "hashPath": "system.xml.xpath.xdocument.4.3.0.nupkg.sha512" + } + } } \ No newline at end of file diff --git a/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/win-x64/mpc.runtimeconfig.json b/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/win-x64/mpc.runtimeconfig.json index 153e1cf4f..a2882f9c3 100644 --- a/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/win-x64/mpc.runtimeconfig.json +++ b/samples/ChatApp/GeneratorTools/MessagePackUniversalCodeGenerator/win-x64/mpc.runtimeconfig.json @@ -1,3 +1,3 @@ -{ - "runtimeOptions": {} +{ + "runtimeOptions": {} } \ No newline at end of file diff --git a/samples/README.md b/samples/README.md index f6e40c4ef..00c831ed3 100644 --- a/samples/README.md +++ b/samples/README.md @@ -13,6 +13,11 @@ Sample Clientside Unity can ran with Unity 2019.1.10f1, then start on unity edit Now unity client automatically connect to MagicOnion, try chat app! +*Notes +The Sample does not contain a library of gRPCs in the repository that are required for operation. +Before running the app, select the latest build ID from the link below, download the Unity support library for gRPC, and import it into Unity. +[gRPC Packages](https://packages.grpc.io/) + ## Solution configuration Create a Shared folder in the Unity project, and store the source code that you want to share with Server. diff --git a/sandbox/Sandbox.Hosting/Program.cs b/sandbox/Sandbox.Hosting/Program.cs index 447799a95..20dc1567b 100644 --- a/sandbox/Sandbox.Hosting/Program.cs +++ b/sandbox/Sandbox.Hosting/Program.cs @@ -49,7 +49,7 @@ static async Task Main(string[] args) .RunConsoleAsync(); - var isDevelopment = Environment.GetEnvironmentVariable("NETCORE_ENVIRONMENT") == "Development"; + var isDevelopment = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") == "Development"; var creds = isDevelopment ? ChannelCredentials.Insecure : new SslCredentials(File.ReadAllText("./server.crt")); var clientMyService = MagicOnionClient.Create(new Channel("localhost", 12345, creds)); diff --git a/sandbox/Sandbox.Hosting/Properties/launchSettings.json b/sandbox/Sandbox.Hosting/Properties/launchSettings.json index 8f1067180..a9274981d 100644 --- a/sandbox/Sandbox.Hosting/Properties/launchSettings.json +++ b/sandbox/Sandbox.Hosting/Properties/launchSettings.json @@ -1,15 +1,20 @@ { "profiles": { + "Sandbox.Hosting": { + "commandName": "Project", + "environmentVariables": { + } + }, "Sandbox.Hosting (Development)": { "commandName": "Project", "environmentVariables": { - "NETCORE_ENVIRONMENT": "Development" + "DOTNET_ENVIRONMENT": "Development" } }, "Sandbox.Hosting (Production)": { "commandName": "Project", "environmentVariables": { - "NETCORE_ENVIRONMENT": "Production" + "DOTNET_ENVIRONMENT": "Production" } } } diff --git a/src/MagicOnion.Hosting/MagicOnionHost.cs b/src/MagicOnion.Hosting/MagicOnionHost.cs index 473ee706d..a3305b398 100644 --- a/src/MagicOnion.Hosting/MagicOnionHost.cs +++ b/src/MagicOnion.Hosting/MagicOnionHost.cs @@ -1,9 +1,10 @@ -using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.IO; +using System.Linq; using MagicOnion.Hosting.Logging; using System.Reflection; @@ -62,32 +63,49 @@ public static class MagicOnionHost /// The initialized . public static IHostBuilder CreateDefaultBuilder(bool useSimpleConsoleLogger, LogLevel minSimpleConsoleLoggerLogLevel, string hostEnvironmentVariable) { - var builder = new HostBuilder(); + var builder = CreateDefaultBuilderHosting3_0_Or_Later() ?? + CreateDefaultBuilderHosting2_2(); ConfigureHostConfigurationDefault(builder, hostEnvironmentVariable); - ConfigureAppConfigurationDefault(builder); ConfigureLoggingDefault(builder, useSimpleConsoleLogger, minSimpleConsoleLoggerLogLevel); return builder; } - internal static void ConfigureHostConfigurationDefault(IHostBuilder builder, string hostEnvironmentVariable) + private static IHostBuilder CreateDefaultBuilderHosting3_0_Or_Later() + { + // Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(string args[]); + var hostingHostType = Type.GetType("Microsoft.Extensions.Hosting.Host, Microsoft.Extensions.Hosting"); + if (hostingHostType == null) return null; + var createDefaultBuilderMethod = hostingHostType.GetMethod("CreateDefaultBuilder", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(string[]) }, null); + + return (IHostBuilder)createDefaultBuilderMethod.Invoke(null, new [] { default(string) }); + } + + // TODO: When upgrading Microsoft.Extensions.Hosting to v3.x, We need to remove these workarounds and use `Host.CreateDefaultBuilder`. + #region Implementation for Microsoft.Extensions.Hosting 2.2 + private static IHostBuilder CreateDefaultBuilderHosting2_2() + { + var builder = new HostBuilder(); + + ConfigureHostConfigurationHosting2_2(builder); + ConfigureAppConfigurationHosting2_2(builder); + + return builder; + } + + internal static void ConfigureHostConfigurationHosting2_2(IHostBuilder builder) { builder.UseContentRoot(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); builder.ConfigureHostConfiguration(config => { - config.AddEnvironmentVariables(prefix: "NETCORE_"); - config.AddInMemoryCollection(new[] { new KeyValuePair(HostDefaults.ApplicationKey, Assembly.GetExecutingAssembly().GetName().Name) }); + // NOTE: Treat prefix "DOTNET_" as the same as Microsoft.Extensions.Hosting 3.x. + config.AddEnvironmentVariables(prefix: "DOTNET_"); }); - - if (!string.IsNullOrWhiteSpace(hostEnvironmentVariable)) - { - builder.UseEnvironment(System.Environment.GetEnvironmentVariable(hostEnvironmentVariable) ?? "Production"); - } } - internal static void ConfigureAppConfigurationDefault(IHostBuilder builder) + internal static void ConfigureAppConfigurationHosting2_2(IHostBuilder builder) { builder.ConfigureAppConfiguration((hostingContext, config) => { @@ -109,6 +127,24 @@ internal static void ConfigureAppConfigurationDefault(IHostBuilder builder) config.AddEnvironmentVariables(); }); } + #endregion + + internal static void ConfigureHostConfigurationDefault(IHostBuilder builder, string hostEnvironmentVariable) + { + builder.ConfigureHostConfiguration(config => + { + // NOTE: This is backward compatibility for older versions. + // It's strongly recommended to use "DOTNET_" prefix expected by GenericHost. (e.g. DOTNET_ENVIRONMENT) + config.AddEnvironmentVariables(prefix: "NETCORE_"); + + config.AddInMemoryCollection(new[] { new KeyValuePair(HostDefaults.ApplicationKey, Assembly.GetExecutingAssembly().GetName().Name) }); + }); + + if (!string.IsNullOrWhiteSpace(hostEnvironmentVariable)) + { + builder.UseEnvironment(System.Environment.GetEnvironmentVariable(hostEnvironmentVariable) ?? "Production"); + } + } internal static void ConfigureLoggingDefault(IHostBuilder builder, bool useSimpleConsoleLogger, LogLevel minSimpleConsoleLoggerLogLevel) { @@ -116,6 +152,13 @@ internal static void ConfigureLoggingDefault(IHostBuilder builder, bool useSimpl { builder.ConfigureLogging(logging => { + // Use SimpleConsoleLogger instead of the default ConsoleLogger. + var consoleLogger = logging.Services.FirstOrDefault(x => x.ImplementationType?.FullName == "Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider"); + if (consoleLogger != null) + { + logging.Services.Remove(consoleLogger); + } + logging.AddSimpleConsole(); logging.AddFilter((category, level) => {