+ WARNING: When using the default connection pool implementation,
+ setting this property to True should be avoided by applications that make
+ use of COM (either directly or indirectly) due to possible deadlocks that
+ can occur during the finalization of some COM objects.
+
+ N
+ False
+
+
+ FailIfMissing
+
+ True - Don't create the database if it does not exist, throw an error instead
+
+ False - Automatically create the database if it does not exist
+
+ N
+ False
+
+
+ Max Page Count
+ {size in pages} - Limits the maximum number of pages (limits the size) of the database
+ N
+ 0
+
+
+ Legacy Format
+
+ True - Use the more compatible legacy 3.x database format
+
+ False - Use the newer 3.3x database format which compresses numbers more effectively
+
+ N
+ False
+
+
+ Default Timeout
+ {time in seconds} The default command timeout
+ N
+ 30
+
+
+ BusyTimeout
+ {time in milliseconds} Sets the busy timeout for the core library.
+ N
+ 0
+
+
+ WaitTimeout
+ {time in milliseconds}
+ EXPERIMENTAL -- The wait timeout to use with
+ method. This is only used when
+ waiting for the enlistment to be reset prior to enlisting in a transaction,
+ and then only when the appropriate connection flag is set.
+ N
+ 30000
+
+
+ Journal Mode
+
+ Delete - Delete the journal file after a commit.
+
+ Persist - Zero out and leave the journal file on disk after a
+ commit.
+
+ Off - Disable the rollback journal entirely. This saves disk I/O
+ but at the expense of database safety and integrity. If the application
+ using SQLite crashes in the middle of a transaction when this journaling
+ mode is set, then the database file will very likely go corrupt.
+
+ Truncate - Truncate the journal file to zero-length instead of
+ deleting it.
+
+ Memory - Store the journal in volatile RAM. This saves disk I/O
+ but at the expense of database safety and integrity. If the application
+ using SQLite crashes in the middle of a transaction when this journaling
+ mode is set, then the database file will very likely go corrupt.
+
+ Wal - Use a write-ahead log instead of a rollback journal.
+
+ N
+ Delete
+
+
+ Read Only
+
+ True - Open the database for read only access
+
+ False - Open the database for normal read/write access
+
+ N
+ False
+
+
+ Max Pool Size
+ The maximum number of connections for the given connection string that can be in the connection pool
+ N
+ 100
+
+
+ Default IsolationLevel
+ The default transaciton isolation level
+ N
+ Serializable
+
+
+ Foreign Keys
+ Enable foreign key constraints
+ N
+ False
+
+
+ Flags
+ Extra behavioral flags for the connection. See the enumeration for possible values.
+ N
+ Default
+
+
+ SetDefaults
+
+ True - Apply the default connection settings to the opened database.
+ False - Skip applying the default connection settings to the opened database.
+
+ N
+ True
+
+
+ ToFullPath
+
+ True - Attempt to expand the data source file name to a fully qualified path before opening.
+
+ False - Skip attempting to expand the data source file name to a fully qualified path before opening.
+
+ N
+ True
+
+
+ PrepareRetries
+
+ The maximum number of retries when preparing SQL to be executed. This
+ normally only applies to preparation errors resulting from the database
+ schema being changed.
+
+ N
+ 3
+
+
+ ProgressOps
+
+ The approximate number of virtual machine instructions between progress
+ events. In order for progress events to actually fire, the event handler
+ must be added to the event as well.
+
+ N
+ 0
+
+
+ Recursive Triggers
+
+ True - Enable the recursive trigger capability.
+ False - Disable the recursive trigger capability.
+
+ N
+ False
+
+
+
+
+
+
+ The "invalid value" for the enumeration used
+ by the property. This constant is shared
+ by this class and the SQLiteConnectionStringBuilder class.
+
+
+
+
+ The default "stub" (i.e. placeholder) base schema name to use when
+ returning column schema information. Used as the initial value of
+ the BaseSchemaName property. This should start with "sqlite_*"
+ because those names are reserved for use by SQLite (i.e. they cannot
+ be confused with the names of user objects).
+
+
+
+
+ The managed assembly containing this type.
+
+
+
+
+ Object used to synchronize access to the static instance data
+ for this class.
+
+
+
+
+ Static variable to store the connection event handlers to call.
+
+
+
+
+ The extra connection flags to be used for all opened connections.
+
+
+
+
+ The instance (for this thread) that
+ had the most recent call to .
+
+
+
+
+ State of the current connection
+
+
+
+
+ The connection string
+
+
+
+
+ Nesting level of the transactions open on the connection
+
+
+
+
+ Transaction counter for the connection. Currently, this is only used
+ to build SAVEPOINT names.
+
+
+
+
+ If this flag is non-zero, the method will have
+ no effect; however, the method will continue to
+ behave as normal.
+
+
+
+
+ If set, then the connection is currently being disposed.
+
+
+
+
+ The default isolation level for new transactions
+
+
+
+
+ This object is used with lock statements to synchronize access to the
+ field, below.
+
+
+
+
+ Whether or not the connection is enlisted in a distrubuted transaction
+
+
+
+
+ The per-connection mappings between type names and
+ values. These mappings override the corresponding global mappings.
+
+
+
+
+ The per-connection mappings between type names and optional callbacks
+ for parameter binding and value reading.
+
+
+
+
+ The base SQLite object to interop with
+
+
+
+
+ The database filename minus path and extension
+
+
+
+
+ Temporary password storage, emptied after the database has been opened
+
+
+
+
+ The "stub" (i.e. placeholder) base schema name to use when returning
+ column schema information.
+
+
+
+
+ The extra behavioral flags for this connection, if any. See the
+ enumeration for a list of
+ possible values.
+
+
+
+
+ The cached values for all settings that have been fetched on behalf
+ of this connection. This cache may be cleared by calling the
+ method.
+
+
+
+
+ The default databse type for this connection. This value will only
+ be used if the
+ flag is set.
+
+
+
+
+ The default databse type name for this connection. This value will only
+ be used if the
+ flag is set.
+
+
+
+
+ The name of the VFS to be used when opening the database connection.
+
+
+
+
+ Default command timeout
+
+
+
+
+ The default busy timeout to use with the SQLite core library. This is
+ only used when opening a connection.
+
+
+
+
+ The default wait timeout to use with
+ method. This is only used when waiting for the enlistment to be reset
+ prior to enlisting in a transaction, and then only when the appropriate
+ connection flag is set.
+
+
+
+
+ The maximum number of retries when preparing SQL to be executed. This
+ normally only applies to preparation errors resulting from the database
+ schema being changed.
+
+
+
+
+ The approximate number of virtual machine instructions between progress
+ events. In order for progress events to actually fire, the event handler
+ must be added to the event as
+ well. This value will only be used when opening the database.
+
+
+
+
+ Non-zero if the built-in (i.e. framework provided) connection string
+ parser should be used when opening the connection.
+
+
+
+
+ This event is raised whenever the database is opened or closed.
+
+
+
+
+ Constructs a new SQLiteConnection object
+
+
+ Default constructor
+
+
+
+
+ Initializes the connection with the specified connection string.
+
+ The connection string to use.
+
+
+
+ Initializes the connection with a pre-existing native connection handle.
+ This constructor overload is intended to be used only by the private
+ method.
+
+
+ The native connection handle to use.
+
+
+ The file name corresponding to the native connection handle.
+
+
+ Non-zero if this instance owns the native connection handle and
+ should dispose of it when it is no longer needed.
+
+
+
+
+ Initializes the connection with the specified connection string.
+
+
+ The connection string to use.
+
+
+ Non-zero to parse the connection string using the built-in (i.e.
+ framework provided) parser when opening the connection.
+
+
+
+
+ Clones the settings and connection string from an existing connection. If the existing connection is already open, this
+ function will open its own connection, enumerate any attached databases of the original connection, and automatically
+ attach to them.
+
+ The connection to copy the settings from.
+
+
+
+ Attempts to lookup the native handle associated with the connection. An exception will
+ be thrown if this cannot be accomplished.
+
+
+ The connection associated with the desired native handle.
+
+
+ The native handle associated with the connection or if it
+ cannot be determined.
+
+
+
+
+ Raises the event.
+
+
+ The connection associated with this event. If this parameter is not
+ null and the specified connection cannot raise events, then the
+ registered event handlers will not be invoked.
+
+
+ A that contains the event data.
+
+
+
+
+ This event is raised when events related to the lifecycle of a
+ SQLiteConnection object occur.
+
+
+
+
+ This property is used to obtain or set the custom connection pool
+ implementation to use, if any. Setting this property to null will
+ cause the default connection pool implementation to be used.
+
+
+
+
+ Creates and returns a new managed database connection handle. This
+ method is intended to be used by implementations of the
+ interface only. In theory, it
+ could be used by other classes; however, that usage is not supported.
+
+
+ This must be a native database connection handle returned by the
+ SQLite core library and it must remain valid and open during the
+ entire duration of the calling method.
+
+
+ The new managed database connection handle or null if it cannot be
+ created.
+
+
+
+
+ Backs up the database, using the specified database connection as the
+ destination.
+
+ The destination database connection.
+ The destination database name.
+ The source database name.
+
+ The number of pages to copy at a time -OR- a negative value to copy all
+ pages. When a negative value is used, the
+ may never be invoked.
+
+
+ The method to invoke between each step of the backup process. This
+ parameter may be null (i.e. no callbacks will be performed). If the
+ callback returns false -OR- throws an exception, the backup is canceled.
+
+
+ The number of milliseconds to sleep after encountering a locking error
+ during the backup process. A value less than zero means that no sleep
+ should be performed.
+
+
+
+
+ Clears the per-connection cached settings.
+
+
+ The total number of per-connection settings cleared.
+
+
+
+
+ Queries and returns the value of the specified setting, using the
+ cached setting names and values for this connection, when available.
+
+
+ The name of the setting.
+
+
+ The value to be returned if the setting has not been set explicitly
+ or cannot be determined.
+
+
+ The value of the cached setting is stored here if found; otherwise,
+ the value of is stored here.
+
+
+ Non-zero if the cached setting was found; otherwise, zero.
+
+
+
+
+ Adds or sets the cached setting specified by
+ to the value specified by .
+
+
+ The name of the cached setting to add or replace.
+
+
+ The new value of the cached setting.
+
+
+
+
+ Clears the per-connection type mappings.
+
+
+ The total number of per-connection type mappings cleared.
+
+
+
+
+ Returns the per-connection type mappings.
+
+
+ The per-connection type mappings -OR- null if they are unavailable.
+
+
+
+
+ Adds a per-connection type mapping, possibly replacing one or more
+ that already exist.
+
+
+ The case-insensitive database type name (e.g. "MYDATE"). The value
+ of this parameter cannot be null. Using an empty string value (or
+ a string value consisting entirely of whitespace) for this parameter
+ is not recommended.
+
+
+ The value that should be associated with the
+ specified type name.
+
+
+ Non-zero if this mapping should be considered to be the primary one
+ for the specified .
+
+
+ A negative value if nothing was done. Zero if no per-connection type
+ mappings were replaced (i.e. it was a pure add operation). More than
+ zero if some per-connection type mappings were replaced.
+
+
+
+
+ Clears the per-connection type callbacks.
+
+
+ The total number of per-connection type callbacks cleared.
+
+
+
+
+ Attempts to get the per-connection type callbacks for the specified
+ database type name.
+
+
+ The database type name.
+
+
+ Upon success, this parameter will contain the object holding the
+ callbacks for the database type name. Upon failure, this parameter
+ will be null.
+
+
+ Non-zero upon success; otherwise, zero.
+
+
+
+
+ Sets, resets, or clears the per-connection type callbacks for the
+ specified database type name.
+
+
+ The database type name.
+
+
+ The object holding the callbacks for the database type name. If
+ this parameter is null, any callbacks for the database type name
+ will be removed if they are present.
+
+
+ Non-zero if callbacks were set or removed; otherwise, zero.
+
+
+
+
+ Attempts to bind the specified object
+ instance to this connection.
+
+
+ The object instance containing
+ the metadata for the function to be bound.
+
+
+ The object instance that implements the
+ function to be bound.
+
+
+
+
+ Attempts to bind the specified object
+ instance to this connection.
+
+
+ The object instance containing
+ the metadata for the function to be bound.
+
+
+ A object instance that helps implement the
+ function to be bound. For scalar functions, this corresponds to the
+ type. For aggregate functions,
+ this corresponds to the type. For
+ collation functions, this corresponds to the
+ type.
+
+
+ A object instance that helps implement the
+ function to be bound. For aggregate functions, this corresponds to the
+ type. For other callback types, it
+ is not used and must be null.
+
+
+
+
+ Attempts to unbind the specified object
+ instance to this connection.
+
+
+ The object instance containing
+ the metadata for the function to be unbound.
+
+ Non-zero if the function was unbound.
+
+
+
+ This method unbinds all registered (known) functions -OR- all previously
+ bound user-defined functions from this connection.
+
+
+ Non-zero to unbind all registered (known) functions -OR- zero to unbind
+ all functions currently bound to the connection.
+
+
+ Non-zero if all the specified user-defined functions were unbound.
+
+
+
+
+ Parses a connection string into component parts using the custom
+ connection string parser. An exception may be thrown if the syntax
+ of the connection string is incorrect.
+
+
+ The connection string to parse.
+
+
+ Non-zero to parse the connection string using the algorithm provided
+ by the framework itself. This is not applicable when running on the
+ .NET Compact Framework.
+
+
+ Non-zero if names are allowed without values.
+
+
+ The list of key/value pairs corresponding to the parameters specified
+ within the connection string.
+
+
+
+
+ Parses a connection string into component parts using the custom
+ connection string parser. An exception may be thrown if the syntax
+ of the connection string is incorrect.
+
+
+ The connection that will be using the parsed connection string.
+
+
+ The connection string to parse.
+
+
+ Non-zero to parse the connection string using the algorithm provided
+ by the framework itself. This is not applicable when running on the
+ .NET Compact Framework.
+
+
+ Non-zero if names are allowed without values.
+
+
+ The list of key/value pairs corresponding to the parameters specified
+ within the connection string.
+
+
+
+
+ Attempts to escape the specified connection string property name or
+ value in a way that is compatible with the connection string parser.
+
+
+ The connection string property name or value to escape.
+
+
+ Non-zero if the equals sign is permitted in the string. If this is
+ zero and the string contains an equals sign, an exception will be
+ thrown.
+
+
+ The original string, with all special characters escaped. If the
+ original string contains equals signs, they will not be escaped.
+ Instead, they will be preserved verbatim.
+
+
+
+
+ Builds a connection string from a list of key/value pairs.
+
+
+ The list of key/value pairs corresponding to the parameters to be
+ specified within the connection string.
+
+
+ The connection string. Depending on how the connection string was
+ originally parsed, the returned connection string value may not be
+ usable in a subsequent call to the method.
+
+
+
+
+ Disposes and finalizes the connection, if applicable.
+
+
+
+
+ Cleans up resources (native and managed) associated with the current instance.
+
+
+ Zero when being disposed via garbage collection; otherwise, non-zero.
+
+
+
+
+ Creates a clone of the connection. All attached databases and user-defined functions are cloned. If the existing connection is open, the cloned connection
+ will also be opened.
+
+
+
+
+
+ Creates a database file. This just creates a zero-byte file which SQLite
+ will turn into a database when the file is opened properly.
+
+ The file to create
+
+
+
+ Raises the state change event when the state of the connection changes
+
+ The new connection state. If this is different
+ from the previous state, the event is
+ raised.
+ The event data created for the raised event, if
+ it was actually raised.
+
+
+
+ Determines and returns the fallback default isolation level when one cannot be
+ obtained from an existing connection instance.
+
+
+ The fallback default isolation level for this connection instance -OR-
+ if it cannot be determined.
+
+
+
+
+ Determines and returns the default isolation level for this connection instance.
+
+
+ The default isolation level for this connection instance -OR-
+ if it cannot be determined.
+
+
+
+
+ OBSOLETE. Creates a new SQLiteTransaction if one isn't already active on the connection.
+
+ This parameter is ignored.
+ When TRUE, SQLite defers obtaining a write lock until a write operation is requested.
+ When FALSE, a writelock is obtained immediately. The default is TRUE, but in a multi-threaded multi-writer
+ environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock.
+ Returns a SQLiteTransaction object.
+
+
+
+ OBSOLETE. Creates a new SQLiteTransaction if one isn't already active on the connection.
+
+ When TRUE, SQLite defers obtaining a write lock until a write operation is requested.
+ When FALSE, a writelock is obtained immediately. The default is false, but in a multi-threaded multi-writer
+ environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock.
+ Returns a SQLiteTransaction object.
+
+
+
+ Creates a new if one isn't already active on the connection.
+
+ Supported isolation levels are Serializable, ReadCommitted and Unspecified.
+
+ Unspecified will use the default isolation level specified in the connection string. If no isolation level is specified in the
+ connection string, Serializable is used.
+ Serializable transactions are the default. In this mode, the engine gets an immediate lock on the database, and no other threads
+ may begin a transaction. Other threads may read from the database, but not write.
+ With a ReadCommitted isolation level, locks are deferred and elevated as needed. It is possible for multiple threads to start
+ a transaction in ReadCommitted mode, but if a thread attempts to commit a transaction while another thread
+ has a ReadCommitted lock, it may timeout or cause a deadlock on both threads until both threads' CommandTimeout's are reached.
+
+ Returns a SQLiteTransaction object.
+
+
+
+ Creates a new if one isn't already
+ active on the connection.
+
+ Returns the new transaction object.
+
+
+
+ Forwards to the local function
+
+ Supported isolation levels are Unspecified, Serializable, and ReadCommitted
+
+
+
+
+ This method is not implemented; however, the
+ event will still be raised.
+
+
+
+
+
+ When the database connection is closed, all commands linked to this connection are automatically reset.
+
+
+
+
+ Returns the number of pool entries for the file name associated with this connection.
+
+
+
+
+ Clears the connection pool associated with the connection. Any other active connections using the same database file
+ will be discarded instead of returned to the pool when they are closed.
+
+
+
+
+
+ Clears all connection pools. Any active connections will be discarded instead of sent to the pool when they are closed.
+
+
+
+
+ The connection string containing the parameters for the connection
+
+
+ For the complete list of supported connection string properties,
+ please see .
+
+
+
+
+ Create a new and associate it with this connection.
+
+ Returns a new command object already assigned to this connection.
+
+
+
+ Forwards to the local function.
+
+
+
+
+
+ Attempts to create a new object instance
+ using this connection and the specified database name.
+
+
+ The name of the database for the newly created session.
+
+
+ The newly created session -OR- null if it cannot be created.
+
+
+
+
+ Attempts to create a new object instance
+ using this connection and the specified raw data.
+
+
+ The raw data that contains a change set (or patch set).
+
+
+ The newly created change set -OR- null if it cannot be created.
+
+
+
+
+ Attempts to create a new object instance
+ using this connection and the specified raw data.
+
+
+ The raw data that contains a change set (or patch set).
+
+
+ The flags used to create the change set iterator.
+
+
+ The newly created change set -OR- null if it cannot be created.
+
+
+
+
+ Attempts to create a new object instance
+ using this connection and the specified stream.
+
+
+ The stream where the raw data that contains a change set (or patch set)
+ may be read.
+
+
+ The stream where the raw data that contains a change set (or patch set)
+ may be written.
+
+
+ The newly created change set -OR- null if it cannot be created.
+
+
+
+
+ Attempts to create a new object instance
+ using this connection and the specified stream.
+
+
+ The stream where the raw data that contains a change set (or patch set)
+ may be read.
+
+
+ The stream where the raw data that contains a change set (or patch set)
+ may be written.
+
+
+ The flags used to create the change set iterator.
+
+
+ The newly created change set -OR- null if it cannot be created.
+
+
+
+
+ Attempts to create a new object
+ instance using this connection.
+
+
+ The newly created change group -OR- null if it cannot be created.
+
+
+
+
+ Returns the data source file name without extension or path.
+
+
+
+
+ Returns the fully qualified path and file name for the currently open
+ database, if any.
+
+
+
+
+ Returns the string "main".
+
+
+
+
+ Determines if the legacy connection string parser should be used.
+
+
+ The connection that will be using the parsed connection string.
+
+
+ Non-zero if the legacy connection string parser should be used.
+
+
+
+
+ Parses a connection string into component parts using the custom
+ connection string parser. An exception may be thrown if the syntax
+ of the connection string is incorrect.
+
+
+ The connection string to parse.
+
+
+ Non-zero if names are allowed without values.
+
+
+ The list of key/value pairs corresponding to the parameters specified
+ within the connection string.
+
+
+
+
+ Parses a connection string into component parts using the custom
+ connection string parser. An exception may be thrown if the syntax
+ of the connection string is incorrect.
+
+
+ The connection that will be using the parsed connection string.
+
+
+ The connection string to parse.
+
+
+ Non-zero if names are allowed without values.
+
+
+ The list of key/value pairs corresponding to the parameters specified
+ within the connection string.
+
+
+
+
+ Parses a connection string using the built-in (i.e. framework provided)
+ connection string parser class and returns the key/value pairs. An
+ exception may be thrown if the connection string is invalid or cannot be
+ parsed. When compiled for the .NET Compact Framework, the custom
+ connection string parser is always used instead because the framework
+ provided one is unavailable there.
+
+
+ The connection that will be using the parsed connection string.
+
+
+ The connection string to parse.
+
+
+ Non-zero to throw an exception if any connection string values are not of
+ the type. This is not applicable when running on
+ the .NET Compact Framework.
+
+ The list of key/value pairs.
+
+
+
+ Manual distributed transaction enlistment support
+
+ The distributed transaction to enlist in
+
+
+
+ EXPERIMENTAL --
+ Waits for the enlistment associated with this connection to be reset.
+ This method always throws when
+ running on the .NET Compact Framework.
+
+
+ The approximate maximum number of milliseconds to wait before timing
+ out the wait operation.
+
+
+ The return value to use if the connection has been disposed; if this
+ value is null, will be raised
+ if the connection has been disposed.
+
+
+ Non-zero if the enlistment assciated with this connection was reset;
+ otherwise, zero. It should be noted that this method returning a
+ non-zero value does not necessarily guarantee that the connection
+ can enlist in a new transaction (i.e. due to potentical race with
+ other threads); therefore, callers should generally use try/catch
+ when calling the method.
+
+
+
+
+ Looks for a key in the array of key/values of the parameter string. If not found, return the specified default value
+
+ The list to look in
+ The key to find
+ The default value to return if the key is not found
+ The value corresponding to the specified key, or the default value if not found.
+
+
+
+ Attempts to convert the string value to an enumerated value of the specified type.
+
+ The enumerated type to convert the string value to.
+ The string value to be converted.
+ Non-zero to make the conversion case-insensitive.
+ The enumerated value upon success or null upon error.
+
+
+
+ Attempts to convert an input string into a byte value.
+
+
+ The string value to be converted.
+
+
+ The number styles to use for the conversion.
+
+
+ Upon sucess, this will contain the parsed byte value.
+ Upon failure, the value of this parameter is undefined.
+
+
+ Non-zero upon success; zero on failure.
+
+
+
+
+ Change a configuration option value for the database.
+
+
+ The database configuration option to change.
+
+
+ The new value for the specified configuration option.
+
+
+
+
+ Enables or disabled extension loading.
+
+
+ True to enable loading of extensions, false to disable.
+
+
+
+
+ Loads a SQLite extension library from the named dynamic link library file.
+
+
+ The name of the dynamic link library file containing the extension.
+
+
+
+
+ Loads a SQLite extension library from the named dynamic link library file.
+
+
+ The name of the dynamic link library file containing the extension.
+
+
+ The name of the exported function used to initialize the extension.
+ If null, the default "sqlite3_extension_init" will be used.
+
+
+
+
+ Creates a disposable module containing the implementation of a virtual
+ table.
+
+
+ The module object to be used when creating the disposable module.
+
+
+
+
+ Parses a string containing a sequence of zero or more hexadecimal
+ encoded byte values and returns the resulting byte array. The
+ "0x" prefix is not allowed on the input string.
+
+
+ The input string containing zero or more hexadecimal encoded byte
+ values.
+
+
+ A byte array containing the parsed byte values or null if an error
+ was encountered.
+
+
+
+
+ Creates and returns a string containing the hexadecimal encoded byte
+ values from the input array.
+
+
+ The input array of bytes.
+
+
+ The resulting string or null upon failure.
+
+
+
+
+ Parses a string containing a sequence of zero or more hexadecimal
+ encoded byte values and returns the resulting byte array. The
+ "0x" prefix is not allowed on the input string.
+
+
+ The input string containing zero or more hexadecimal encoded byte
+ values.
+
+
+ Upon failure, this will contain an appropriate error message.
+
+
+ A byte array containing the parsed byte values or null if an error
+ was encountered.
+
+
+
+
+ This method figures out what the default connection pool setting should
+ be based on the connection flags. When present, the "Pooling" connection
+ string property value always overrides the value returned by this method.
+
+
+ Non-zero if the connection pool should be enabled by default; otherwise,
+ zero.
+
+
+
+
+ Determines the transaction isolation level that should be used by
+ the caller, primarily based upon the one specified by the caller.
+ If mapping of transaction isolation levels is enabled, the returned
+ transaction isolation level may be significantly different than the
+ originally specified one.
+
+
+ The originally specified transaction isolation level.
+
+
+ The transaction isolation level that should be used.
+
+
+
+
+ Opens the connection using the parameters found in the .
+
+
+
+
+ Opens the connection using the parameters found in the and then returns it.
+
+ The current connection object.
+
+
+
+ Gets/sets the default command timeout for newly-created commands. This is especially useful for
+ commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible.
+ This can also be set in the ConnectionString with "Default Timeout"
+
+
+
+
+ Gets/sets the default busy timeout to use with the SQLite core library. This is only used when
+ opening a connection.
+
+
+
+
+ EXPERIMENTAL --
+ The wait timeout to use with method.
+ This is only used when waiting for the enlistment to be reset prior to
+ enlisting in a transaction, and then only when the appropriate connection
+ flag is set.
+
+
+
+
+ The maximum number of retries when preparing SQL to be executed. This
+ normally only applies to preparation errors resulting from the database
+ schema being changed.
+
+
+
+
+ The approximate number of virtual machine instructions between progress
+ events. In order for progress events to actually fire, the event handler
+ must be added to the event as
+ well. This value will only be used when the underlying native progress
+ callback needs to be changed.
+
+
+
+
+ Non-zero if the built-in (i.e. framework provided) connection string
+ parser should be used when opening the connection.
+
+
+
+
+ Gets/sets the extra behavioral flags for this connection. See the
+ enumeration for a list of
+ possible values.
+
+
+
+
+ Gets/sets the default database type for this connection. This value
+ will only be used when not null.
+
+
+
+
+ Gets/sets the default database type name for this connection. This
+ value will only be used when not null.
+
+
+
+
+ Gets/sets the VFS name for this connection. This value will only be
+ used when opening the database.
+
+
+
+
+ Returns non-zero if the underlying native connection handle is
+ owned by this instance.
+
+
+
+
+ Returns the version of the underlying SQLite database engine
+
+
+
+
+ Returns the rowid of the most recent successful INSERT into the database from this connection.
+
+
+
+
+ This method causes any pending database operation to abort and return at
+ its earliest opportunity. This routine is typically called in response
+ to a user action such as pressing "Cancel" or Ctrl-C where the user wants
+ a long query operation to halt immediately. It is safe to call this
+ routine from any thread. However, it is not safe to call this routine
+ with a database connection that is closed or might close before this method
+ returns.
+
+
+
+
+ Returns the number of rows changed by the last INSERT, UPDATE, or DELETE statement executed on
+ this connection.
+
+
+
+
+ Checks if this connection to the specified database should be considered
+ read-only. An exception will be thrown if the database name specified
+ via cannot be found.
+
+
+ The name of a database associated with this connection -OR- null for the
+ main database.
+
+
+ Non-zero if this connection to the specified database should be considered
+ read-only.
+
+
+
+
+ Returns non-zero if the given database connection is in autocommit mode.
+ Autocommit mode is on by default. Autocommit mode is disabled by a BEGIN
+ statement. Autocommit mode is re-enabled by a COMMIT or ROLLBACK.
+
+
+
+
+ Returns the amount of memory (in bytes) currently in use by the SQLite core library.
+
+
+
+
+ Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset.
+
+
+
+
+ Returns various global memory statistics for the SQLite core library via
+ a dictionary of key/value pairs. Currently, only the "MemoryUsed" and
+ "MemoryHighwater" keys are returned and they have values that correspond
+ to the values that could be obtained via the
+ and connection properties.
+
+
+ This dictionary will be populated with the global memory statistics. It
+ will be created if necessary.
+
+
+
+
+ Attempts to free as much heap memory as possible for this database connection.
+
+
+
+
+ Attempts to free N bytes of heap memory by deallocating non-essential memory
+ allocations held by the database library. Memory used to cache database pages
+ to improve performance is an example of non-essential memory. This is a no-op
+ returning zero if the SQLite core library was not compiled with the compile-time
+ option SQLITE_ENABLE_MEMORY_MANAGEMENT. Optionally, attempts to reset and/or
+ compact the Win32 native heap, if applicable.
+
+
+ The requested number of bytes to free.
+
+
+ Non-zero to attempt a heap reset.
+
+
+ Non-zero to attempt heap compaction.
+
+
+ The number of bytes actually freed. This value may be zero.
+
+
+ This value will be non-zero if the heap reset was successful.
+
+
+ The size of the largest committed free block in the heap, in bytes.
+ This value will be zero unless heap compaction is enabled.
+
+
+ A standard SQLite return code (i.e. zero for success and non-zero
+ for failure).
+
+
+
+
+ Sets the status of the memory usage tracking subsystem in the SQLite core library. By default, this is enabled.
+ If this is disabled, memory usage tracking will not be performed. This is not really a per-connection value, it is
+ global to the process.
+
+ Non-zero to enable memory usage tracking, zero otherwise.
+ A standard SQLite return code (i.e. zero for success and non-zero for failure).
+
+
+
+ Returns a string containing the define constants (i.e. compile-time
+ options) used to compile the core managed assembly, delimited with
+ spaces.
+
+
+
+
+ Returns the version of the underlying SQLite core library.
+
+
+
+
+ This method returns the string whose value is the same as the
+ SQLITE_SOURCE_ID C preprocessor macro used when compiling the
+ SQLite core library.
+
+
+
+
+ Returns a string containing the compile-time options used to
+ compile the SQLite core native library, delimited with spaces.
+
+
+
+
+ This method returns the version of the interop SQLite assembly
+ used. If the SQLite interop assembly is not in use or the
+ necessary information cannot be obtained for any reason, a null
+ value may be returned.
+
+
+
+
+ This method returns the string whose value contains the unique
+ identifier for the source checkout used to build the interop
+ assembly. If the SQLite interop assembly is not in use or the
+ necessary information cannot be obtained for any reason, a null
+ value may be returned.
+
+
+
+
+ Returns a string containing the compile-time options used to
+ compile the SQLite interop assembly, delimited with spaces.
+
+
+
+
+ This method returns the version of the managed components used
+ to interact with the SQLite core library. If the necessary
+ information cannot be obtained for any reason, a null value may
+ be returned.
+
+
+
+
+ This method returns the string whose value contains the unique
+ identifier for the source checkout used to build the managed
+ components currently executing. If the necessary information
+ cannot be obtained for any reason, a null value may be returned.
+
+
+
+
+ Queries and returns the value of the specified setting, using the
+ cached setting names and values for the last connection that used
+ the method, when available.
+
+
+ The name of the setting.
+
+
+ The value to be returned if the setting has not been set explicitly
+ or cannot be determined.
+
+
+ The value of the cached setting is stored here if found; otherwise,
+ the value of is stored here.
+
+
+ Non-zero if the cached setting was found; otherwise, zero.
+
+
+
+
+ Adds or sets the cached setting specified by
+ to the value specified by using the cached
+ setting names and values for the last connection that used the
+ method, when available.
+
+
+ The name of the cached setting to add or replace.
+
+
+ The new value of the cached setting.
+
+
+
+
+ The default connection flags to be used for all opened connections
+ when they are not present in the connection string.
+
+
+
+
+ The extra connection flags to be used for all opened connections.
+
+
+
+
+ Returns the state of the connection.
+
+
+
+
+ Passes a shutdown request to the SQLite core library. Does not throw
+ an exception if the shutdown request fails.
+
+
+ A standard SQLite return code (i.e. zero for success and non-zero for
+ failure).
+
+
+
+
+ Passes a shutdown request to the SQLite core library. Throws an
+ exception if the shutdown request fails and the no-throw parameter
+ is non-zero.
+
+
+ Non-zero to reset the database and temporary directories to their
+ default values, which should be null for both.
+
+
+ When non-zero, throw an exception if the shutdown request fails.
+
+
+
+ Enables or disabled extended result codes returned by SQLite
+
+
+ Enables or disabled extended result codes returned by SQLite
+
+
+ Enables or disabled extended result codes returned by SQLite
+
+
+ Add a log message via the SQLite sqlite3_log interface.
+
+
+ Add a log message via the SQLite sqlite3_log interface.
+
+
+
+ Change the password (or assign a password) to an open database.
+
+
+ No readers or writers may be active for this process. The database must already be open
+ and if it already was password protected, the existing password must already have been supplied.
+
+ The new password to assign to the database
+
+
+
+ Change the password (or assign a password) to an open database.
+
+
+ No readers or writers may be active for this process. The database must already be open
+ and if it already was password protected, the existing password must already have been supplied.
+
+ The new password to assign to the database
+
+
+
+ Sets the password for a password-protected database. A password-protected database is
+ unusable for any operation until the password has been set.
+
+ The password for the database
+
+
+
+ Sets the password for a password-protected database. A password-protected database is
+ unusable for any operation until the password has been set.
+
+ The password for the database
+
+
+
+ Queries or modifies the number of retries or the retry interval (in milliseconds) for
+ certain I/O operations that may fail due to anti-virus software.
+
+ The number of times to retry the I/O operation. A negative value
+ will cause the current count to be queried and replace that negative value.
+ The number of milliseconds to wait before retrying the I/O
+ operation. This number is multiplied by the number of retry attempts so far to come
+ up with the final number of milliseconds to wait. A negative value will cause the
+ current interval to be queried and replace that negative value.
+ Zero for success, non-zero for error.
+
+
+
+ Sets the chunk size for the primary file associated with this database
+ connection.
+
+
+ The new chunk size for the main database, in bytes.
+
+
+ Zero for success, non-zero for error.
+
+
+
+
+ Removes one set of surrounding single -OR- double quotes from the string
+ value and returns the resulting string value. If the string is null, empty,
+ or contains quotes that are not balanced, nothing is done and the original
+ string value will be returned.
+
+ The string value to process.
+
+ The string value, modified to remove one set of surrounding single -OR-
+ double quotes, if applicable.
+
+
+
+
+ Determines the directory to be used when dealing with the "|DataDirectory|"
+ macro in a database file name.
+
+
+ The directory to use in place of the "|DataDirectory|" macro -OR- null if it
+ cannot be determined.
+
+
+
+
+ Expand the filename of the data source, resolving the |DataDirectory|
+ macro as appropriate.
+
+ The database filename to expand
+
+ Non-zero if the returned file name should be converted to a full path
+ (except when using the .NET Compact Framework).
+
+ The expanded path and filename of the filename
+
+
+
+ The following commands are used to extract schema information out of the database. Valid schema types are:
+
+
+ MetaDataCollections
+
+
+ DataSourceInformation
+
+
+ Catalogs
+
+
+ Columns
+
+
+ ForeignKeys
+
+
+ Indexes
+
+
+ IndexColumns
+
+
+ Tables
+
+
+ Views
+
+
+ ViewColumns
+
+
+
+
+ Returns the MetaDataCollections schema
+
+ A DataTable of the MetaDataCollections schema
+
+
+
+ Returns schema information of the specified collection
+
+ The schema collection to retrieve
+ A DataTable of the specified collection
+
+
+
+ Retrieves schema information using the specified constraint(s) for the specified collection
+
+ The collection to retrieve.
+
+ The restrictions to impose. Typically, this may include:
+
+
+ restrictionValues element index
+ usage
+
+
+ 0
+ The database (or catalog) name, if applicable.
+
+
+ 1
+ The schema name. This is not used by this provider.
+
+
+ 2
+ The table name, if applicable.
+
+
+ 3
+
+ Depends on .
+ When "IndexColumns", it is the index name; otherwise, it is the column name.
+
+
+
+ 4
+
+ Depends on .
+ When "IndexColumns", it is the column name; otherwise, it is not used.
+
+
+
+
+ A DataTable of the specified collection
+
+
+
+ Builds a MetaDataCollections schema datatable
+
+ DataTable
+
+
+
+ Builds a DataSourceInformation datatable
+
+ DataTable
+
+
+
+ Build a Columns schema
+
+ The catalog (attached database) to query, can be null
+ The table to retrieve schema information for, can be null
+ The column to retrieve schema information for, can be null
+ DataTable
+
+
+
+ Returns index information for the given database and catalog
+
+ The catalog (attached database) to query, can be null
+ The name of the index to retrieve information for, can be null
+ The table to retrieve index information for, can be null
+ DataTable
+
+
+
+ Retrieves table schema information for the database and catalog
+
+ The catalog (attached database) to retrieve tables on
+ The table to retrieve, can be null
+ The table type, can be null
+ DataTable
+
+
+
+ Retrieves view schema information for the database
+
+ The catalog (attached database) to retrieve views on
+ The view name, can be null
+ DataTable
+
+
+
+ Retrieves catalog (attached databases) schema information for the database
+
+ The catalog to retrieve, can be null
+ DataTable
+
+
+
+ Returns the base column information for indexes in a database
+
+ The catalog to retrieve indexes for (can be null)
+ The table to restrict index information by (can be null)
+ The index to restrict index information by (can be null)
+ The source column to restrict index information by (can be null)
+ A DataTable containing the results
+
+
+
+ Returns detailed column information for a specified view
+
+ The catalog to retrieve columns for (can be null)
+ The view to restrict column information by (can be null)
+ The source column to restrict column information by (can be null)
+ A DataTable containing the results
+
+
+
+ Retrieves foreign key information from the specified set of filters
+
+ An optional catalog to restrict results on
+ An optional table to restrict results on
+ An optional foreign key name to restrict results on
+ A DataTable with the results of the query
+
+
+
+ This event is raised periodically during long running queries. Changing
+ the value of the property will
+ determine if the operation in progress will continue or be interrupted.
+ For the entire duration of the event, the associated connection and
+ statement objects must not be modified, either directly or indirectly, by
+ the called code.
+
+
+
+
+ This event is raised whenever SQLite encounters an action covered by the
+ authorizer during query preparation. Changing the value of the
+ property will determine if
+ the specific action will be allowed, ignored, or denied. For the entire
+ duration of the event, the associated connection and statement objects
+ must not be modified, either directly or indirectly, by the called code.
+
+
+
+
+ This event is raised whenever SQLite makes an update/delete/insert into the database on
+ this connection. It only applies to the given connection.
+
+
+
+
+ This event is raised whenever SQLite is committing a transaction.
+ Return non-zero to trigger a rollback.
+
+
+
+
+ This event is raised whenever SQLite statement first begins executing on
+ this connection. It only applies to the given connection.
+
+
+
+
+ This event is raised whenever SQLite is rolling back a transaction.
+
+
+
+
+ Returns the instance.
+
+
+
+
+ The I/O file cache flushing behavior for the connection
+
+
+
+
+ Normal file flushing at critical sections of the code
+
+
+
+
+ Full file flushing after every write operation
+
+
+
+
+ Use the default operating system's file flushing, SQLite does not explicitly flush the file buffers after writing
+
+
+
+
+ Raised each time the number of virtual machine instructions is
+ approximately equal to the value of the
+ property.
+
+ The connection performing the operation.
+ A that contains the
+ event data.
+
+
+
+ Raised when authorization is required to perform an action contained
+ within a SQL query.
+
+ The connection performing the action.
+ A that contains the
+ event data.
+
+
+
+ Raised when a transaction is about to be committed. To roll back a transaction, set the
+ rollbackTrans boolean value to true.
+
+ The connection committing the transaction
+ Event arguments on the transaction
+
+
+
+ Raised when data is inserted, updated and deleted on a given connection
+
+ The connection committing the transaction
+ The event parameters which triggered the event
+
+
+
+ Raised when a statement first begins executing on a given connection
+
+ The connection executing the statement
+ Event arguments of the trace
+
+
+
+ Raised between each backup step.
+
+
+ The source database connection.
+
+
+ The source database name.
+
+
+ The destination database connection.
+
+
+ The destination database name.
+
+
+ The number of pages copied with each step.
+
+
+ The number of pages remaining to be copied.
+
+
+ The total number of pages in the source database.
+
+
+ Set to true if the operation needs to be retried due to database
+ locking issues; otherwise, set to false.
+
+
+ True to continue with the backup process or false to halt the backup
+ process, rolling back any changes that have been made so far.
+
+
+
+
+ The event data associated with progress reporting events.
+
+
+
+
+ The user-defined native data associated with this event. Currently,
+ this will always contain the value of .
+
+
+
+
+ The return code for the current call into the progress callback.
+
+
+
+
+ Constructs an instance of this class with default property values.
+
+
+
+
+ Constructs an instance of this class with specific property values.
+
+
+ The user-defined native data associated with this event.
+
+
+ The progress return code.
+
+
+
+
+ The data associated with a call into the authorizer.
+
+
+
+
+ The user-defined native data associated with this event. Currently,
+ this will always contain the value of .
+
+
+
+
+ The action code responsible for the current call into the authorizer.
+
+
+
+
+ The first string argument for the current call into the authorizer.
+ The exact value will vary based on the action code, see the
+ enumeration for possible
+ values.
+
+
+
+
+ The second string argument for the current call into the authorizer.
+ The exact value will vary based on the action code, see the
+ enumeration for possible
+ values.
+
+
+
+
+ The database name for the current call into the authorizer, if
+ applicable.
+
+
+
+
+ The name of the inner-most trigger or view that is responsible for
+ the access attempt or a null value if this access attempt is directly
+ from top-level SQL code.
+
+
+
+
+ The return code for the current call into the authorizer.
+
+
+
+
+ Constructs an instance of this class with default property values.
+
+
+
+
+ Constructs an instance of this class with specific property values.
+
+
+ The user-defined native data associated with this event.
+
+
+ The authorizer action code.
+
+
+ The first authorizer argument.
+
+
+ The second authorizer argument.
+
+
+ The database name, if applicable.
+
+
+ The name of the inner-most trigger or view that is responsible for
+ the access attempt or a null value if this access attempt is directly
+ from top-level SQL code.
+
+
+ The authorizer return code.
+
+
+
+
+ Whenever an update event is triggered on a connection, this enum will indicate
+ exactly what type of operation is being performed.
+
+
+
+
+ A row is being deleted from the given database and table
+
+
+
+
+ A row is being inserted into the table.
+
+
+
+
+ A row is being updated in the table.
+
+
+
+
+ Passed during an Update callback, these event arguments detail the type of update operation being performed
+ on the given connection.
+
+
+
+
+ The name of the database being updated (usually "main" but can be any attached or temporary database)
+
+
+
+
+ The name of the table being updated
+
+
+
+
+ The type of update being performed (insert/update/delete)
+
+
+
+
+ The RowId affected by this update.
+
+
+
+
+ Event arguments raised when a transaction is being committed
+
+
+
+
+ Set to true to abort the transaction and trigger a rollback
+
+
+
+
+ Passed during an Trace callback, these event arguments contain the UTF-8 rendering of the SQL statement text
+
+
+
+
+ SQL statement text as the statement first begins executing
+
+
+
+
+ This interface represents a custom connection pool implementation
+ usable by System.Data.SQLite.
+
+
+
+
+ Counts the number of pool entries matching the specified file name.
+
+
+ The file name to match or null to match all files.
+
+
+ The pool entry counts for each matching file.
+
+
+ The total number of connections successfully opened from any pool.
+
+
+ The total number of connections successfully closed from any pool.
+
+
+ The total number of pool entries for all matching files.
+
+
+
+
+ Disposes of all pooled connections associated with the specified
+ database file name.
+
+
+ The database file name.
+
+
+
+
+ Disposes of all pooled connections.
+
+
+
+
+ Adds a connection to the pool of those associated with the
+ specified database file name.
+
+
+ The database file name.
+
+
+ The database connection handle.
+
+
+ The connection pool version at the point the database connection
+ handle was received from the connection pool. This is also the
+ connection pool version that the database connection handle was
+ created under.
+
+
+
+
+ Removes a connection from the pool of those associated with the
+ specified database file name with the intent of using it to
+ interact with the database.
+
+
+ The database file name.
+
+
+ The new maximum size of the connection pool for the specified
+ database file name.
+
+
+ The connection pool version associated with the returned database
+ connection handle, if any.
+
+
+ The database connection handle associated with the specified
+ database file name or null if it cannot be obtained.
+
+
+
+
+ This default method implementations in this class should not be used by
+ applications that make use of COM (either directly or indirectly) due
+ to possible deadlocks that can occur during finalization of some COM
+ objects.
+
+
+
+
+ Keeps track of connections made on a specified file. The PoolVersion
+ dictates whether old objects get returned to the pool or discarded
+ when no longer in use.
+
+
+
+
+ The queue of weak references to the actual database connection
+ handles.
+
+
+
+
+ This pool version associated with the database connection
+ handles in this pool queue.
+
+
+
+
+ The maximum size of this pool queue.
+
+
+
+
+ Constructs a connection pool queue using the specified version
+ and maximum size. Normally, all the database connection
+ handles in this pool are associated with a single database file
+ name.
+
+
+ The initial pool version for this connection pool queue.
+
+
+ The initial maximum size for this connection pool queue.
+
+
+
+
+ This field is used to synchronize access to the private static data
+ in this class.
+
+
+
+
+ When this field is non-null, it will be used to provide the
+ implementation of all the connection pool methods; otherwise,
+ the default method implementations will be used.
+
+
+
+
+ The dictionary of connection pools, based on the normalized file
+ name of the SQLite database.
+
+
+
+
+ The default version number new pools will get.
+
+
+
+
+ The number of connections successfully opened from any pool.
+ This value is incremented by the Remove method.
+
+
+
+
+ The number of connections successfully closed from any pool.
+ This value is incremented by the Add method.
+
+
+
+
+ Counts the number of pool entries matching the specified file name.
+
+
+ The file name to match or null to match all files.
+
+
+ The pool entry counts for each matching file.
+
+
+ The total number of connections successfully opened from any pool.
+
+
+ The total number of connections successfully closed from any pool.
+
+
+ The total number of pool entries for all matching files.
+
+
+
+
+ Disposes of all pooled connections associated with the specified
+ database file name.
+
+
+ The database file name.
+
+
+
+
+ Disposes of all pooled connections.
+
+
+
+
+ Adds a connection to the pool of those associated with the
+ specified database file name.
+
+
+ The database file name.
+
+
+ The database connection handle.
+
+
+ The connection pool version at the point the database connection
+ handle was received from the connection pool. This is also the
+ connection pool version that the database connection handle was
+ created under.
+
+
+
+
+ Removes a connection from the pool of those associated with the
+ specified database file name with the intent of using it to
+ interact with the database.
+
+
+ The database file name.
+
+
+ The new maximum size of the connection pool for the specified
+ database file name.
+
+
+ The connection pool version associated with the returned database
+ connection handle, if any.
+
+
+ The database connection handle associated with the specified
+ database file name or null if it cannot be obtained.
+
+
+
+
+ This method is used to obtain a reference to the custom connection
+ pool implementation currently in use, if any.
+
+
+ The custom connection pool implementation or null if the default
+ connection pool implementation should be used.
+
+
+
+
+ This method is used to set the reference to the custom connection
+ pool implementation to use, if any.
+
+
+ The custom connection pool implementation to use or null if the
+ default connection pool implementation should be used.
+
+
+
+
+ We do not have to thread-lock anything in this function, because it
+ is only called by other functions above which already take the lock.
+
+
+ The pool queue to resize.
+
+
+ If a function intends to add to the pool, this is true, which
+ forces the resize to take one more than it needs from the pool.
+
+
+
+
+ SQLite implementation of DbConnectionStringBuilder.
+
+
+
+
+ Properties of this class
+
+
+
+
+ Constructs a new instance of the class
+
+
+ Default constructor
+
+
+
+
+ Constructs a new instance of the class using the specified connection string.
+
+ The connection string to parse
+
+
+
+ Private initializer, which assigns the connection string and resets the builder
+
+ The connection string to assign
+
+
+
+ Gets/Sets the default version of the SQLite engine to instantiate. Currently the only valid value is 3, indicating version 3 of the sqlite library.
+
+
+
+
+ Gets/Sets the synchronization mode (file flushing) of the connection string. Default is "Normal".
+
+
+
+
+ Gets/Sets the encoding for the connection string. The default is "False" which indicates UTF-8 encoding.
+
+
+
+
+ Gets/Sets whether or not to use connection pooling. The default is "False"
+
+
+
+
+ Gets/Sets whethor not to store GUID's in binary format. The default is True
+ which saves space in the database.
+
+
+
+
+ Gets/Sets the filename to open on the connection string.
+
+
+
+
+ An alternate to the data source property
+
+
+
+
+ An alternate to the data source property that uses the SQLite URI syntax.
+
+
+
+
+ Gets/sets the default command timeout for newly-created commands. This is especially useful for
+ commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible.
+
+
+
+
+ Gets/sets the busy timeout to use with the SQLite core library.
+
+
+
+
+ EXPERIMENTAL --
+ The wait timeout to use with
+ method.
+ This is only used when waiting for the enlistment to be reset
+ prior to enlisting in a transaction, and then only when the
+ appropriate connection flag is set.
+
+
+
+
+ Gets/sets the maximum number of retries when preparing SQL to be executed.
+ This normally only applies to preparation errors resulting from the database
+ schema being changed.
+
+
+
+
+ Gets/sets the approximate number of virtual machine instructions between
+ progress events. In order for progress events to actually fire, the event
+ handler must be added to the event
+ as well.
+
+
+
+
+ Determines whether or not the connection will automatically participate
+ in the current distributed transaction (if one exists)
+
+
+
+
+ If set to true, will throw an exception if the database specified in the connection
+ string does not exist. If false, the database will be created automatically.
+
+
+
+
+ If enabled, uses the legacy 3.xx format for maximum compatibility, but results in larger
+ database sizes.
+
+
+
+
+ When enabled, the database will be opened for read-only access and writing will be disabled.
+
+
+
+
+ Gets/sets the database encryption password
+
+
+
+
+ Gets/sets the database encryption hexadecimal password
+
+
+
+
+ Gets/Sets the page size for the connection.
+
+
+
+
+ Gets/Sets the maximum number of pages the database may hold
+
+
+
+
+ Gets/Sets the cache size for the connection.
+
+
+
+
+ Gets/Sets the DateTime format for the connection.
+
+
+
+
+ Gets/Sets the DateTime kind for the connection.
+
+
+
+
+ Gets/sets the DateTime format string used for formatting
+ and parsing purposes.
+
+
+
+
+ Gets/Sets the placeholder base schema name used for
+ .NET Framework compatibility purposes.
+
+
+
+
+ Determines how SQLite handles the transaction journal file.
+
+
+
+
+ Sets the default isolation level for transactions on the connection.
+
+
+
+
+ Gets/sets the default database type for the connection.
+
+
+
+
+ Gets/sets the default type name for the connection.
+
+
+
+
+ Gets/sets the VFS name for the connection.
+
+
+
+
+ If enabled, use foreign key constraints
+
+
+
+
+ Enable or disable the recursive trigger capability.
+
+
+
+
+ If non-null, this is the version of ZipVFS to use. This requires the
+ System.Data.SQLite interop assembly -AND- primary managed assembly to
+ be compiled with the INTEROP_INCLUDE_ZIPVFS option; otherwise, this
+ property does nothing.
+
+
+
+
+ Gets/Sets the extra behavioral flags.
+
+
+
+
+ If enabled, apply the default connection settings to opened databases.
+
+
+
+
+ If enabled, attempt to resolve the provided data source file name to a
+ full path before opening.
+
+
+
+
+ If enabled, skip using the configured default connection flags.
+
+
+
+
+ If enabled, skip using the configured shared connection flags.
+
+
+
+
+ Helper function for retrieving values from the connectionstring
+
+ The keyword to retrieve settings for
+ The resulting parameter value
+ Returns true if the value was found and returned
+
+
+
+ Fallback method for MONO, which doesn't implement DbConnectionStringBuilder.GetProperties()
+
+ The hashtable to fill with property descriptors
+
+
+
+ This base class provides datatype conversion services for the SQLite provider.
+
+
+
+
+ This character is used to escape other characters, including itself, in
+ connection string property names and values.
+
+
+
+
+ This character can be used to wrap connection string property names and
+ values. Normally, it is optional; however, when used, it must be the
+ first -AND- last character of that connection string property name -OR-
+ value.
+
+
+
+
+ This character can be used to wrap connection string property names and
+ values. Normally, it is optional; however, when used, it must be the
+ first -AND- last character of that connection string property name -OR-
+ value.
+
+
+
+
+ The character is used to separate the name and value for a connection
+ string property. This character cannot be present in any connection
+ string property name. This character can be present in a connection
+ string property value; however, this should be avoided unless deemed
+ absolutely necessary.
+
+
+
+
+ This character is used to separate connection string properties. When
+ the "No_SQLiteConnectionNewParser" setting is enabled, this character
+ may not appear in connection string property names -OR- values.
+
+
+
+
+ These are the characters that are special to the connection string
+ parser.
+
+
+
+
+ The fallback default database type when one cannot be obtained from an
+ existing connection instance.
+
+
+
+
+ The fallback default database type name when one cannot be obtained from
+ an existing connection instance.
+
+
+
+
+ The value for the Unix epoch (e.g. January 1, 1970 at midnight, in UTC).
+
+
+
+
+ The value of the OLE Automation epoch represented as a Julian day. This
+ field cannot be removed as the test suite relies upon it.
+
+
+
+
+ The format string for DateTime values when using the InvariantCulture or CurrentCulture formats.
+
+
+
+
+ This is the minimum Julian Day value supported by this library
+ (148731163200000).
+
+
+
+
+ This is the maximum Julian Day value supported by this library
+ (464269060799000).
+
+
+
+
+ An array of ISO-8601 DateTime formats that we support parsing.
+
+
+
+
+ The internal default format for UTC DateTime values when converting
+ to a string.
+
+
+
+
+ The internal default format for local DateTime values when converting
+ to a string.
+
+
+
+
+ An UTF-8 Encoding instance, so we can convert strings to and from UTF-8
+
+
+
+
+ The default DateTime format for this instance.
+
+
+
+
+ The default DateTimeKind for this instance.
+
+
+
+
+ The default DateTime format string for this instance.
+
+
+
+
+ Initializes the conversion class
+
+ The default date/time format to use for this instance
+ The DateTimeKind to use.
+ The DateTime format string to use.
+
+
+
+ Converts a string to a UTF-8 encoded byte array sized to include a null-terminating character.
+
+ The string to convert to UTF-8
+ A byte array containing the converted string plus an extra 0 terminating byte at the end of the array.
+
+
+
+ Convert a DateTime to a UTF-8 encoded, zero-terminated byte array.
+
+
+ This function is a convenience function, which first calls ToString() on the DateTime, and then calls ToUTF8() with the
+ string result.
+
+ The DateTime to convert.
+ The UTF-8 encoded string, including a 0 terminating byte at the end of the array.
+
+
+
+ Converts a UTF-8 encoded IntPtr of the specified length into a .NET string
+
+ The pointer to the memory where the UTF-8 string is encoded
+ The number of bytes to decode
+ A string containing the translated character(s)
+
+
+
+ Converts a UTF-8 encoded IntPtr of the specified length into a .NET string
+
+ The pointer to the memory where the UTF-8 string is encoded
+ The number of bytes to decode
+ A string containing the translated character(s)
+
+
+
+ Checks if the specified is within the
+ supported range for a Julian Day value.
+
+
+ The Julian Day value to check.
+
+
+ Non-zero if the specified Julian Day value is in the supported
+ range; otherwise, zero.
+
+
+
+
+ Converts a Julian Day value from a to an
+ .
+
+
+ The Julian Day value to convert.
+
+
+ The resulting Julian Day value.
+
+
+
+
+ Converts a Julian Day value from an to a
+ .
+
+
+ The Julian Day value to convert.
+
+
+ The resulting Julian Day value.
+
+
+
+
+ Converts a Julian Day value to a .
+ This method was translated from the "computeYMD" function in the
+ "date.c" file belonging to the SQLite core library.
+
+
+ The Julian Day value to convert.
+
+
+ The value to return in the event that the
+ Julian Day is out of the supported range. If this value is null,
+ an exception will be thrown instead.
+
+
+ A value that contains the year, month, and
+ day values that are closest to the specified Julian Day value.
+
+
+
+
+ Converts a Julian Day value to a .
+ This method was translated from the "computeHMS" function in the
+ "date.c" file belonging to the SQLite core library.
+
+
+ The Julian Day value to convert.
+
+
+ The value to return in the event that the
+ Julian Day value is out of the supported range. If this value is
+ null, an exception will be thrown instead.
+
+
+ A value that contains the hour, minute, and
+ second, and millisecond values that are closest to the specified
+ Julian Day value.
+
+
+
+
+ Converts a to a Julian Day value.
+ This method was translated from the "computeJD" function in
+ the "date.c" file belonging to the SQLite core library.
+ Since the range of Julian Day values supported by this method
+ includes all possible (valid) values of a
+ value, it should be extremely difficult for this method to
+ raise an exception or return an undefined result.
+
+
+ The value to convert. This value
+ will be within the range of
+ (00:00:00.0000000, January 1, 0001) to
+ (23:59:59.9999999, December
+ 31, 9999).
+
+
+ The nearest Julian Day value corresponding to the specified
+ value.
+
+
+
+
+ Converts a string into a DateTime, using the DateTimeFormat, DateTimeKind,
+ and DateTimeFormatString specified for the connection when it was opened.
+
+
+ Acceptable ISO8601 DateTime formats are:
+
+ THHmmssK
+ THHmmK
+ HH:mm:ss.FFFFFFFK
+ HH:mm:ssK
+ HH:mmK
+ yyyy-MM-dd HH:mm:ss.FFFFFFFK
+ yyyy-MM-dd HH:mm:ssK
+ yyyy-MM-dd HH:mmK
+ yyyy-MM-ddTHH:mm:ss.FFFFFFFK
+ yyyy-MM-ddTHH:mmK
+ yyyy-MM-ddTHH:mm:ssK
+ yyyyMMddHHmmssK
+ yyyyMMddHHmmK
+ yyyyMMddTHHmmssFFFFFFFK
+ THHmmss
+ THHmm
+ HH:mm:ss.FFFFFFF
+ HH:mm:ss
+ HH:mm
+ yyyy-MM-dd HH:mm:ss.FFFFFFF
+ yyyy-MM-dd HH:mm:ss
+ yyyy-MM-dd HH:mm
+ yyyy-MM-ddTHH:mm:ss.FFFFFFF
+ yyyy-MM-ddTHH:mm
+ yyyy-MM-ddTHH:mm:ss
+ yyyyMMddHHmmss
+ yyyyMMddHHmm
+ yyyyMMddTHHmmssFFFFFFF
+ yyyy-MM-dd
+ yyyyMMdd
+ yy-MM-dd
+
+ If the string cannot be matched to one of the above formats -OR-
+ the DateTimeFormatString if one was provided, an exception will
+ be thrown.
+
+ The string containing either a long integer number of 100-nanosecond units since
+ System.DateTime.MinValue, a Julian day double, an integer number of seconds since the Unix epoch, a
+ culture-independent formatted date and time string, a formatted date and time string in the current
+ culture, or an ISO8601-format string.
+ A DateTime value
+
+
+
+ Converts a string into a DateTime, using the specified DateTimeFormat,
+ DateTimeKind and DateTimeFormatString.
+
+
+ Acceptable ISO8601 DateTime formats are:
+
+ THHmmssK
+ THHmmK
+ HH:mm:ss.FFFFFFFK
+ HH:mm:ssK
+ HH:mmK
+ yyyy-MM-dd HH:mm:ss.FFFFFFFK
+ yyyy-MM-dd HH:mm:ssK
+ yyyy-MM-dd HH:mmK
+ yyyy-MM-ddTHH:mm:ss.FFFFFFFK
+ yyyy-MM-ddTHH:mmK
+ yyyy-MM-ddTHH:mm:ssK
+ yyyyMMddHHmmssK
+ yyyyMMddHHmmK
+ yyyyMMddTHHmmssFFFFFFFK
+ THHmmss
+ THHmm
+ HH:mm:ss.FFFFFFF
+ HH:mm:ss
+ HH:mm
+ yyyy-MM-dd HH:mm:ss.FFFFFFF
+ yyyy-MM-dd HH:mm:ss
+ yyyy-MM-dd HH:mm
+ yyyy-MM-ddTHH:mm:ss.FFFFFFF
+ yyyy-MM-ddTHH:mm
+ yyyy-MM-ddTHH:mm:ss
+ yyyyMMddHHmmss
+ yyyyMMddHHmm
+ yyyyMMddTHHmmssFFFFFFF
+ yyyy-MM-dd
+ yyyyMMdd
+ yy-MM-dd
+
+ If the string cannot be matched to one of the above formats -OR-
+ the DateTimeFormatString if one was provided, an exception will
+ be thrown.
+
+ The string containing either a long integer number of 100-nanosecond units since
+ System.DateTime.MinValue, a Julian day double, an integer number of seconds since the Unix epoch, a
+ culture-independent formatted date and time string, a formatted date and time string in the current
+ culture, or an ISO8601-format string.
+ The SQLiteDateFormats to use.
+ The DateTimeKind to use.
+ The DateTime format string to use.
+ A DateTime value
+
+
+
+ Converts a julianday value into a DateTime
+
+ The value to convert
+ A .NET DateTime
+
+
+
+ Converts a julianday value into a DateTime
+
+ The value to convert
+ The DateTimeKind to use.
+ A .NET DateTime
+
+
+
+ Converts the specified number of seconds from the Unix epoch into a
+ value.
+
+
+ The number of whole seconds since the Unix epoch.
+
+
+ Either Utc or Local time.
+
+
+ The new value.
+
+
+
+
+ Converts the specified number of ticks since the epoch into a
+ value.
+
+
+ The number of whole ticks since the epoch.
+
+
+ Either Utc or Local time.
+
+
+ The new value.
+
+
+
+
+ Converts a DateTime struct to a JulianDay double
+
+ The DateTime to convert
+ The JulianDay value the Datetime represents
+
+
+
+ Converts a DateTime struct to the whole number of seconds since the
+ Unix epoch.
+
+ The DateTime to convert
+ The whole number of seconds since the Unix epoch
+
+
+
+ Returns the DateTime format string to use for the specified DateTimeKind.
+ If is not null, it will be returned verbatim.
+
+ The DateTimeKind to use.
+ The DateTime format string to use.
+
+ The DateTime format string to use for the specified DateTimeKind.
+
+
+
+
+ Converts a string into a DateTime, using the DateTimeFormat, DateTimeKind,
+ and DateTimeFormatString specified for the connection when it was opened.
+
+ The DateTime value to convert
+ Either a string containing the long integer number of 100-nanosecond units since System.DateTime.MinValue, a
+ Julian day double, an integer number of seconds since the Unix epoch, a culture-independent formatted date and time
+ string, a formatted date and time string in the current culture, or an ISO8601-format date/time string.
+
+
+
+ Converts a string into a DateTime, using the DateTimeFormat, DateTimeKind,
+ and DateTimeFormatString specified for the connection when it was opened.
+
+ The DateTime value to convert
+ The SQLiteDateFormats to use.
+ The DateTimeKind to use.
+ The DateTime format string to use.
+ Either a string containing the long integer number of 100-nanosecond units since System.DateTime.MinValue, a
+ Julian day double, an integer number of seconds since the Unix epoch, a culture-independent formatted date and time
+ string, a formatted date and time string in the current culture, or an ISO8601-format date/time string.
+
+
+
+ Internal function to convert a UTF-8 encoded IntPtr of the specified length to a DateTime.
+
+
+ This is a convenience function, which first calls ToString() on the IntPtr to convert it to a string, then calls
+ ToDateTime() on the string to return a DateTime.
+
+ A pointer to the UTF-8 encoded string
+ The length in bytes of the string
+ The parsed DateTime value
+
+
+
+ Smart method of splitting a string. Skips quoted elements, removes the quotes.
+
+
+ This split function works somewhat like the String.Split() function in that it breaks apart a string into
+ pieces and returns the pieces as an array. The primary differences are:
+
+ Only one character can be provided as a separator character
+ Quoted text inside the string is skipped over when searching for the separator, and the quotes are removed.
+
+ Thus, if splitting the following string looking for a comma:
+ One,Two, "Three, Four", Five
+
+ The resulting array would contain
+ [0] One
+ [1] Two
+ [2] Three, Four
+ [3] Five
+
+ Note that the leading and trailing spaces were removed from each item during the split.
+
+ Source string to split apart
+ Separator character
+ A string array of the split up elements
+
+
+
+ Splits the specified string into multiple strings based on a separator
+ and returns the result as an array of strings.
+
+
+ The string to split into pieces based on the separator character. If
+ this string is null, null will always be returned. If this string is
+ empty, an array of zero strings will always be returned.
+
+
+ The character used to divide the original string into sub-strings.
+ This character cannot be a backslash or a double-quote; otherwise, no
+ work will be performed and null will be returned.
+
+
+ If this parameter is non-zero, all double-quote characters will be
+ retained in the returned list of strings; otherwise, they will be
+ dropped.
+
+
+ Upon failure, this parameter will be modified to contain an appropriate
+ error message.
+
+
+ The new array of strings or null if the input string is null -OR- the
+ separator character is a backslash or a double-quote -OR- the string
+ contains an unbalanced backslash or double-quote character.
+
+
+
+
+ Queries and returns the string representation for an object, using the
+ specified (or current) format provider.
+
+
+ The object instance to return the string representation for.
+
+
+ The format provider to use -OR- null if the current format provider for
+ the thread should be used instead.
+
+
+ The string representation for the object instance -OR- null if the
+ object instance is also null.
+
+
+
+
+ Attempts to convert an arbitrary object to the Boolean data type.
+ Null object values are converted to false. Throws an exception
+ upon failure.
+
+
+ The object value to convert.
+
+
+ The format provider to use.
+
+
+ If non-zero, a string value will be converted using the
+
+ method; otherwise, the
+ method will be used.
+
+
+ The converted boolean value.
+
+
+
+
+ Convert a value to true or false.
+
+ A string or number representing true or false
+
+
+
+
+ Converts an integer to a string that can be round-tripped using the
+ invariant culture.
+
+
+ The integer value to return the string representation for.
+
+
+ The string representation of the specified integer value, using the
+ invariant culture.
+
+
+
+
+ Attempts to convert a into a .
+
+
+ The to convert, cannot be null.
+
+
+ The converted value.
+
+
+ The supported strings are "yes", "no", "y", "n", "on", "off", "0", "1",
+ as well as any prefix of the strings
+ and . All strings are treated in a
+ case-insensitive manner.
+
+
+
+
+ Converts a SQLiteType to a .NET Type object
+
+ The SQLiteType to convert
+ Returns a .NET Type object
+
+
+
+ For a given intrinsic type, return a DbType
+
+ The native type to convert
+ The corresponding (closest match) DbType
+
+
+
+ Returns the ColumnSize for the given DbType
+
+ The DbType to get the size of
+
+
+
+
+ Determines the default database type name to be used when a
+ per-connection value is not available.
+
+
+ The connection context for type mappings, if any.
+
+
+ The default database type name to use.
+
+
+
+
+ If applicable, issues a trace log message warning about falling back to
+ the default database type name.
+
+
+ The database value type.
+
+
+ The flags associated with the parent connection object.
+
+
+ The textual name of the database type.
+
+
+
+
+ If applicable, issues a trace log message warning about falling back to
+ the default database value type.
+
+
+ The textual name of the database type.
+
+
+ The flags associated with the parent connection object.
+
+
+ The database value type.
+
+
+
+
+ For a given database value type, return the "closest-match" textual database type name.
+
+ The connection context for custom type mappings, if any.
+ The database value type.
+ The flags associated with the parent connection object.
+ The type name or an empty string if it cannot be determined.
+
+
+
+ Convert a DbType to a Type
+
+ The DbType to convert from
+ The closest-match .NET type
+
+
+
+ For a given type, return the closest-match SQLite TypeAffinity, which only understands a very limited subset of types.
+
+ The type to evaluate
+ The flags associated with the connection.
+ The SQLite type affinity for that type.
+
+
+
+ Builds and returns a map containing the database column types
+ recognized by this provider.
+
+
+ A map containing the database column types recognized by this
+ provider.
+
+
+
+
+ Determines if a database type is considered to be a string.
+
+
+ The database type to check.
+
+
+ Non-zero if the database type is considered to be a string, zero
+ otherwise.
+
+
+
+
+ Determines and returns the runtime configuration setting string that
+ should be used in place of the specified object value.
+
+
+ The object value to convert to a string.
+
+
+ Either the string to use in place of the object value -OR- null if it
+ cannot be determined.
+
+
+
+
+ Determines the default value to be used when a
+ per-connection value is not available.
+
+
+ The connection context for type mappings, if any.
+
+
+ The default value to use.
+
+
+
+
+ Converts the object value, which is assumed to have originated
+ from a , to a string value.
+
+
+ The value to be converted to a string.
+
+
+ A null value will be returned if the original value is null -OR-
+ the original value is . Otherwise,
+ the original value will be converted to a string, using its
+ (possibly overridden) method and
+ then returned.
+
+
+
+
+ Determines if the specified textual value appears to be a
+ value.
+
+
+ The textual value to inspect.
+
+
+ Non-zero if the text looks like a value,
+ zero otherwise.
+
+
+
+
+ Determines if the specified textual value appears to be an
+ value.
+
+
+ The textual value to inspect.
+
+
+ Non-zero if the text looks like an value,
+ zero otherwise.
+
+
+
+
+ Determines if the specified textual value appears to be a
+ value.
+
+
+ The textual value to inspect.
+
+
+ Non-zero if the text looks like a value,
+ zero otherwise.
+
+
+
+
+ Determines if the specified textual value appears to be a
+ value.
+
+
+ The object instance configured with
+ the chosen format.
+
+
+ The textual value to inspect.
+
+
+ Non-zero if the text looks like a in the
+ configured format, zero otherwise.
+
+
+
+
+ For a given textual database type name, return the "closest-match" database type.
+ This method is called during query result processing; therefore, its performance
+ is critical.
+
+ The connection context for custom type mappings, if any.
+ The textual name of the database type to match.
+ The flags associated with the parent connection object.
+ The .NET DBType the text evaluates to.
+
+
+
+ SQLite has very limited types, and is inherently text-based. The first 5 types below represent the sum of all types SQLite
+ understands. The DateTime extension to the spec is for internal use only.
+
+
+
+
+ Not used
+
+
+
+
+ All integers in SQLite default to Int64
+
+
+
+
+ All floating point numbers in SQLite default to double
+
+
+
+
+ The default data type of SQLite is text
+
+
+
+
+ Typically blob types are only seen when returned from a function
+
+
+
+
+ Null types can be returned from functions
+
+
+
+
+ Used internally by this provider
+
+
+
+
+ Used internally by this provider
+
+
+
+
+ These are the event types associated with the
+
+ delegate (and its corresponding event) and the
+ class.
+
+
+
+
+ Not used.
+
+
+
+
+ Not used.
+
+
+
+
+ The connection is being opened.
+
+
+
+
+ The connection string has been parsed.
+
+
+
+
+ The connection was opened.
+
+
+
+
+ The method was called on the
+ connection.
+
+
+
+
+ A transaction was created using the connection.
+
+
+
+
+ The connection was enlisted into a transaction.
+
+
+
+
+ A command was created using the connection.
+
+
+
+
+ A data reader was created using the connection.
+
+
+
+
+ An instance of a derived class has
+ been created to wrap a native resource.
+
+
+
+
+ The connection is being closed.
+
+
+
+
+ The connection was closed.
+
+
+
+
+ A command is being disposed.
+
+
+
+
+ A data reader is being disposed.
+
+
+
+
+ A data reader is being closed.
+
+
+
+
+ A native resource was opened (i.e. obtained) from the pool.
+
+
+
+
+ A native resource was closed (i.e. released) to the pool.
+
+
+
+
+ This implementation of SQLite for ADO.NET can process date/time fields in
+ databases in one of six formats.
+
+
+ ISO8601 format is more compatible, readable, fully-processable, but less
+ accurate as it does not provide time down to fractions of a second.
+ JulianDay is the numeric format the SQLite uses internally and is arguably
+ the most compatible with 3rd party tools. It is not readable as text
+ without post-processing. Ticks less compatible with 3rd party tools that
+ query the database, and renders the DateTime field unreadable as text
+ without post-processing. UnixEpoch is more compatible with Unix systems.
+ InvariantCulture allows the configured format for the invariant culture
+ format to be used and is human readable. CurrentCulture allows the
+ configured format for the current culture to be used and is also human
+ readable.
+
+ The preferred order of choosing a DateTime format is JulianDay, ISO8601,
+ and then Ticks. Ticks is mainly present for legacy code support.
+
+
+
+
+ Use the value of DateTime.Ticks. This value is not recommended and is not well supported with LINQ.
+
+
+
+
+ Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC DateTime values and
+ "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values).
+
+
+
+
+ The interval of time in days and fractions of a day since January 1, 4713 BC.
+
+
+
+
+ The whole number of seconds since the Unix epoch (January 1, 1970).
+
+
+
+
+ Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.
+
+
+
+
+ Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.
+
+
+
+
+ The default format for this provider.
+
+
+
+
+ This enum determines how SQLite treats its journal file.
+
+
+ By default SQLite will create and delete the journal file when needed during a transaction.
+ However, for some computers running certain filesystem monitoring tools, the rapid
+ creation and deletion of the journal file can cause those programs to fail, or to interfere with SQLite.
+
+ If a program or virus scanner is interfering with SQLite's journal file, you may receive errors like "unable to open database file"
+ when starting a transaction. If this is happening, you may want to change the default journal mode to Persist.
+
+
+
+
+ The default mode, this causes SQLite to use the existing journaling mode for the database.
+
+
+
+
+ SQLite will create and destroy the journal file as-needed.
+
+
+
+
+ When this is set, SQLite will keep the journal file even after a transaction has completed. It's contents will be erased,
+ and the journal re-used as often as needed. If it is deleted, it will be recreated the next time it is needed.
+
+
+
+
+ This option disables the rollback journal entirely. Interrupted transactions or a program crash can cause database
+ corruption in this mode!
+
+
+
+
+ SQLite will truncate the journal file to zero-length instead of deleting it.
+
+
+
+
+ SQLite will store the journal in volatile RAM. This saves disk I/O but at the expense of database safety and integrity.
+ If the application using SQLite crashes in the middle of a transaction when the MEMORY journaling mode is set, then the
+ database file will very likely go corrupt.
+
+
+
+
+ SQLite uses a write-ahead log instead of a rollback journal to implement transactions. The WAL journaling mode is persistent;
+ after being set it stays in effect across multiple database connections and after closing and reopening the database. A database
+ in WAL journaling mode can only be accessed by SQLite version 3.7.0 or later.
+
+
+
+
+ Possible values for the "synchronous" database setting. This setting determines
+ how often the database engine calls the xSync method of the VFS.
+
+
+
+
+ Use the default "synchronous" database setting. Currently, this should be
+ the same as using the FULL mode.
+
+
+
+
+ The database engine continues without syncing as soon as it has handed
+ data off to the operating system. If the application running SQLite
+ crashes, the data will be safe, but the database might become corrupted
+ if the operating system crashes or the computer loses power before that
+ data has been written to the disk surface.
+
+
+
+
+ The database engine will still sync at the most critical moments, but
+ less often than in FULL mode. There is a very small (though non-zero)
+ chance that a power failure at just the wrong time could corrupt the
+ database in NORMAL mode.
+
+
+
+
+ The database engine will use the xSync method of the VFS to ensure that
+ all content is safely written to the disk surface prior to continuing.
+ This ensures that an operating system crash or power failure will not
+ corrupt the database. FULL synchronous is very safe, but it is also
+ slower.
+
+
+
+
+ The requested command execution type. This controls which method of the
+ object will be called.
+
+
+
+
+ Do nothing. No method will be called.
+
+
+
+
+ The command is not expected to return a result -OR- the result is not
+ needed. The or
+ method
+ will be called.
+
+
+
+
+ The command is expected to return a scalar result -OR- the result should
+ be limited to a scalar result. The
+ or method will
+ be called.
+
+
+
+
+ The command is expected to return result.
+ The or
+ method will
+ be called.
+
+
+
+
+ Use the default command execution type. Using this value is the same
+ as using the value.
+
+
+
+
+ The action code responsible for the current call into the authorizer.
+
+
+
+
+ No action is being performed. This value should not be used from
+ external code.
+
+
+
+
+ No longer used.
+
+
+
+
+ An index will be created. The action-specific arguments are the
+ index name and the table name.
+
+
+
+
+
+ A table will be created. The action-specific arguments are the
+ table name and a null value.
+
+
+
+
+ A temporary index will be created. The action-specific arguments
+ are the index name and the table name.
+
+
+
+
+ A temporary table will be created. The action-specific arguments
+ are the table name and a null value.
+
+
+
+
+ A temporary trigger will be created. The action-specific arguments
+ are the trigger name and the table name.
+
+
+
+
+ A temporary view will be created. The action-specific arguments are
+ the view name and a null value.
+
+
+
+
+ A trigger will be created. The action-specific arguments are the
+ trigger name and the table name.
+
+
+
+
+ A view will be created. The action-specific arguments are the view
+ name and a null value.
+
+
+
+
+ A DELETE statement will be executed. The action-specific arguments
+ are the table name and a null value.
+
+
+
+
+ An index will be dropped. The action-specific arguments are the
+ index name and the table name.
+
+
+
+
+ A table will be dropped. The action-specific arguments are the tables
+ name and a null value.
+
+
+
+
+ A temporary index will be dropped. The action-specific arguments are
+ the index name and the table name.
+
+
+
+
+ A temporary table will be dropped. The action-specific arguments are
+ the table name and a null value.
+
+
+
+
+ A temporary trigger will be dropped. The action-specific arguments
+ are the trigger name and the table name.
+
+
+
+
+ A temporary view will be dropped. The action-specific arguments are
+ the view name and a null value.
+
+
+
+
+ A trigger will be dropped. The action-specific arguments are the
+ trigger name and the table name.
+
+
+
+
+ A view will be dropped. The action-specific arguments are the view
+ name and a null value.
+
+
+
+
+ An INSERT statement will be executed. The action-specific arguments
+ are the table name and a null value.
+
+
+
+
+ A PRAGMA statement will be executed. The action-specific arguments
+ are the name of the PRAGMA and the new value or a null value.
+
+
+
+
+ A table column will be read. The action-specific arguments are the
+ table name and the column name.
+
+
+
+
+ A SELECT statement will be executed. The action-specific arguments
+ are both null values.
+
+
+
+
+ A transaction will be started, committed, or rolled back. The
+ action-specific arguments are the name of the operation (BEGIN,
+ COMMIT, or ROLLBACK) and a null value.
+
+
+
+
+ An UPDATE statement will be executed. The action-specific arguments
+ are the table name and the column name.
+
+
+
+
+ A database will be attached to the connection. The action-specific
+ arguments are the database file name and a null value.
+
+
+
+
+ A database will be detached from the connection. The action-specific
+ arguments are the database name and a null value.
+
+
+
+
+ The schema of a table will be altered. The action-specific arguments
+ are the database name and the table name.
+
+
+
+
+ An index will be deleted and then recreated. The action-specific
+ arguments are the index name and a null value.
+
+
+
+
+ A table will be analyzed to gathers statistics about it. The
+ action-specific arguments are the table name and a null value.
+
+
+
+
+ A virtual table will be created. The action-specific arguments are
+ the table name and the module name.
+
+
+
+
+ A virtual table will be dropped. The action-specific arguments are
+ the table name and the module name.
+
+
+
+
+ A SQL function will be called. The action-specific arguments are a
+ null value and the function name.
+
+
+
+
+ A savepoint will be created, released, or rolled back. The
+ action-specific arguments are the name of the operation (BEGIN,
+ RELEASE, or ROLLBACK) and the savepoint name.
+
+
+
+
+ A recursive query will be executed. The action-specific arguments
+ are two null values.
+
+
+
+
+ The possible return codes for the progress callback.
+
+
+
+
+ The operation should continue.
+
+
+
+
+ The operation should be interrupted.
+
+
+
+
+ The return code for the current call into the authorizer.
+
+
+
+
+ The action will be allowed.
+
+
+
+
+ The overall action will be disallowed and an error message will be
+ returned from the query preparation method.
+
+
+
+
+ The specific action will be disallowed; however, the overall action
+ will continue. The exact effects of this return code vary depending
+ on the specific action, please refer to the SQLite core library
+ documentation for futher details.
+
+
+
+
+ Class used internally to determine the datatype of a column in a resultset
+
+
+
+
+ The DbType of the column, or DbType.Object if it cannot be determined
+
+
+
+
+ The affinity of a column, used for expressions or when Type is DbType.Object
+
+
+
+
+ Constructs a default instance of this type.
+
+
+
+
+ Constructs an instance of this type with the specified field values.
+
+
+ The type affinity to use for the new instance.
+
+
+ The database type to use for the new instance.
+
+
+
+
+ SQLite implementation of DbDataAdapter.
+
+
+
+
+ This class is just a shell around the DbDataAdapter. Nothing from
+ DbDataAdapter is overridden here, just a few constructors are defined.
+
+
+ Default constructor.
+
+
+
+
+ Constructs a data adapter using the specified select command.
+
+
+ The select command to associate with the adapter.
+
+
+
+
+ Constructs a data adapter with the supplied select command text and
+ associated with the specified connection.
+
+
+ The select command text to associate with the data adapter.
+
+
+ The connection to associate with the select command.
+
+
+
+
+ Constructs a data adapter with the specified select command text,
+ and using the specified database connection string.
+
+
+ The select command text to use to construct a select command.
+
+
+ A connection string suitable for passing to a new SQLiteConnection,
+ which is associated with the select command.
+
+
+
+
+ Constructs a data adapter with the specified select command text,
+ and using the specified database connection string.
+
+
+ The select command text to use to construct a select command.
+
+
+ A connection string suitable for passing to a new SQLiteConnection,
+ which is associated with the select command.
+
+
+ Non-zero to parse the connection string using the built-in (i.e.
+ framework provided) parser when opening the connection.
+
+
+
+
+ Cleans up resources (native and managed) associated with the current instance.
+
+
+ Zero when being disposed via garbage collection; otherwise, non-zero.
+
+
+
+
+ Row updating event handler
+
+
+
+
+ Row updated event handler
+
+
+
+
+ Raised by the underlying DbDataAdapter when a row is being updated
+
+ The event's specifics
+
+
+
+ Raised by DbDataAdapter after a row is updated
+
+ The event's specifics
+
+
+
+ Gets/sets the select command for this DataAdapter
+
+
+
+
+ Gets/sets the insert command for this DataAdapter
+
+
+
+
+ Gets/sets the update command for this DataAdapter
+
+
+
+
+ Gets/sets the delete command for this DataAdapter
+
+
+
+
+ SQLite implementation of DbDataReader.
+
+
+
+
+ Underlying command this reader is attached to
+
+
+
+
+ The flags pertaining to the associated connection (via the command).
+
+
+
+
+ Index of the current statement in the command being processed
+
+
+
+
+ Current statement being Read()
+
+
+
+
+ State of the current statement being processed.
+ -1 = First Step() executed, so the first Read() will be ignored
+ 0 = Actively reading
+ 1 = Finished reading
+ 2 = Non-row-returning statement, no records
+
+
+
+
+ Number of records affected by the insert/update statements executed on the command
+
+
+
+
+ Count of fields (columns) in the row-returning statement currently being processed
+
+
+
+
+ The number of calls to Step() that have returned true (i.e. the number of rows that
+ have been read in the current result set).
+
+
+
+
+ Maps the field (column) names to their corresponding indexes within the results.
+
+
+
+
+ Datatypes of active fields (columns) in the current statement, used for type-restricting data
+
+
+
+
+ The behavior of the datareader
+
+
+
+
+ If set, then dispose of the command object when the reader is finished
+
+
+
+
+ If set, then raise an exception when the object is accessed after being disposed.
+
+
+
+
+ An array of rowid's for the active statement if CommandBehavior.KeyInfo is specified
+
+
+
+
+ Matches the version of the connection.
+
+
+
+
+ The "stub" (i.e. placeholder) base schema name to use when returning
+ column schema information. Matches the base schema name used by the
+ associated connection.
+
+
+
+
+ Internal constructor, initializes the datareader and sets up to begin executing statements
+
+ The SQLiteCommand this data reader is for
+ The expected behavior of the data reader
+
+
+
+ Dispose of all resources used by this datareader.
+
+
+
+
+
+ Closes the datareader, potentially closing the connection as well if CommandBehavior.CloseConnection was specified.
+
+
+
+
+ Throw an error if the datareader is closed
+
+
+
+
+ Throw an error if a row is not loaded
+
+
+
+
+ Enumerator support
+
+ Returns a DbEnumerator object.
+
+
+
+ Not implemented. Returns 0
+
+
+
+
+ Returns the number of columns in the current resultset
+
+
+
+
+ Forces the connection flags cached by this data reader to be refreshed
+ from the underlying connection.
+
+
+
+
+ Returns the number of rows seen so far in the current result set.
+
+
+
+
+ Returns the number of visible fields in the current resultset
+
+
+
+
+ This method is used to make sure the result set is open and a row is currently available.
+
+
+
+
+ SQLite is inherently un-typed. All datatypes in SQLite are natively strings. The definition of the columns of a table
+ and the affinity of returned types are all we have to go on to type-restrict data in the reader.
+
+ This function attempts to verify that the type of data being requested of a column matches the datatype of the column. In
+ the case of columns that are not backed into a table definition, we attempt to match up the affinity of a column (int, double, string or blob)
+ to a set of known types that closely match that affinity. It's not an exact science, but its the best we can do.
+
+
+ This function throws an InvalidTypeCast() exception if the requested type doesn't match the column's definition or affinity.
+
+ The index of the column to type-check
+ The type we want to get out of the column
+
+
+
+ Invokes the data reader value callback configured for the database
+ type name associated with the specified column. If no data reader
+ value callback is available for the database type name, do nothing.
+
+
+ The index of the column being read.
+
+
+ The extra event data to pass into the callback.
+
+
+ Non-zero if the default handling for the data reader call should be
+ skipped. If this is set to non-zero and the necessary return value
+ is unavailable or unsuitable, an exception will be thrown.
+
+
+
+
+ Attempts to query the integer identifier for the current row. This
+ will not work for tables that were created WITHOUT ROWID -OR- if the
+ query does not include the "rowid" column or one of its aliases -OR-
+ if the was not created with the
+ flag.
+
+
+ The index of the BLOB column.
+
+
+ The integer identifier for the current row -OR- null if it could not
+ be determined.
+
+
+
+
+ Retrieves the column as a object.
+ This will not work for tables that were created WITHOUT ROWID
+ -OR- if the query does not include the "rowid" column or one
+ of its aliases -OR- if the was
+ not created with the
+ flag.
+
+ The index of the column.
+
+ Non-zero to open the blob object for read-only access.
+
+ A new object.
+
+
+
+ Retrieves the column as a boolean value
+
+ The index of the column.
+ bool
+
+
+
+ Retrieves the column as a single byte value
+
+ The index of the column.
+ byte
+
+
+
+ Retrieves a column as an array of bytes (blob)
+
+ The index of the column.
+ The zero-based index of where to begin reading the data
+ The buffer to write the bytes into
+ The zero-based index of where to begin writing into the array
+ The number of bytes to retrieve
+ The actual number of bytes written into the array
+
+ To determine the number of bytes in the column, pass a null value for the buffer. The total length will be returned.
+
+
+
+
+ Returns the column as a single character
+
+ The index of the column.
+ char
+
+
+
+ Retrieves a column as an array of chars (blob)
+
+ The index of the column.
+ The zero-based index of where to begin reading the data
+ The buffer to write the characters into
+ The zero-based index of where to begin writing into the array
+ The number of bytes to retrieve
+ The actual number of characters written into the array
+
+ To determine the number of characters in the column, pass a null value for the buffer. The total length will be returned.
+
+
+
+
+ Retrieves the name of the back-end datatype of the column
+
+ The index of the column.
+ string
+
+
+
+ Retrieve the column as a date/time value
+
+ The index of the column.
+ DateTime
+
+
+
+ Retrieve the column as a decimal value
+
+ The index of the column.
+ decimal
+
+
+
+ Returns the column as a double
+
+ The index of the column.
+ double
+
+
+
+ Determines and returns the of the
+ specified column.
+
+
+ The index of the column.
+
+
+ The associated with the specified
+ column, if any.
+
+
+
+
+ Returns the .NET type of a given column
+
+ The index of the column.
+ Type
+
+
+
+ Returns a column as a float value
+
+ The index of the column.
+ float
+
+
+
+ Returns the column as a Guid
+
+ The index of the column.
+ Guid
+
+
+
+ Returns the column as a short
+
+ The index of the column.
+ Int16
+
+
+
+ Retrieves the column as an int
+
+ The index of the column.
+ Int32
+
+
+
+ Retrieves the column as a long
+
+ The index of the column.
+ Int64
+
+
+
+ Retrieves the name of the column
+
+ The index of the column.
+ string
+
+
+
+ Returns the name of the database associated with the specified column.
+
+ The index of the column.
+ string
+
+
+
+ Returns the name of the table associated with the specified column.
+
+ The index of the column.
+ string
+
+
+
+ Returns the original name of the specified column.
+
+ The index of the column.
+ string
+
+
+
+ Retrieves the i of a column, given its name
+
+ The name of the column to retrieve
+ The int i of the column
+
+
+
+ Schema information in SQLite is difficult to map into .NET conventions, so a lot of work must be done
+ to gather the necessary information so it can be represented in an ADO.NET manner.
+
+ Returns a DataTable containing the schema information for the active SELECT statement being processed.
+
+
+
+ Retrieves the column as a string
+
+ The index of the column.
+ string
+
+
+
+ Retrieves the column as an object corresponding to the underlying datatype of the column
+
+ The index of the column.
+ object
+
+
+
+ Retreives the values of multiple columns, up to the size of the supplied array
+
+ The array to fill with values from the columns in the current resultset
+ The number of columns retrieved
+
+
+
+ Returns a collection containing all the column names and values for the
+ current row of data in the current resultset, if any. If there is no
+ current row or no current resultset, an exception may be thrown.
+
+
+ The collection containing the column name and value information for the
+ current row of data in the current resultset or null if this information
+ cannot be obtained.
+
+
+
+
+ Returns True if the resultset has rows that can be fetched
+
+
+
+
+ Returns True if the data reader is closed
+
+
+
+
+ Returns True if the specified column is null
+
+ The index of the column.
+ True or False
+
+
+
+ Moves to the next resultset in multiple row-returning SQL command.
+
+ True if the command was successful and a new resultset is available, False otherwise.
+
+
+
+ This method attempts to query the database connection associated with
+ the data reader in use. If the underlying command or connection is
+ unavailable, a null value will be returned.
+
+
+ The connection object -OR- null if it is unavailable.
+
+
+
+
+ Retrieves the SQLiteType for a given column and row value.
+
+
+ The original SQLiteType structure, based only on the column.
+
+
+ The textual value of the column for a given row.
+
+
+ The SQLiteType structure.
+
+
+
+
+ Retrieves the SQLiteType for a given column, and caches it to avoid repetetive interop calls.
+
+ The flags associated with the parent connection object.
+ The index of the column.
+ A SQLiteType structure
+
+
+
+ Reads the next row from the resultset
+
+ True if a new row was successfully loaded and is ready for processing
+
+
+
+ Returns the number of rows affected by the statement being executed.
+ The value returned may not be accurate for DDL statements. Also, it
+ will be -1 for any statement that does not modify the database (e.g.
+ SELECT). If an otherwise read-only statement modifies the database
+ indirectly (e.g. via a virtual table or user-defined function), the
+ value returned is undefined.
+
+
+
+
+ Indexer to retrieve data from a column given its name
+
+ The name of the column to retrieve data for
+ The value contained in the column
+
+
+
+ Indexer to retrieve data from a column given its i
+
+ The index of the column.
+ The value contained in the column
+
+
+
+ SQLite exception class.
+
+
+
+
+ This value was copied from the "WinError.h" file included with the
+ Platform SDK for Windows 10.
+
+
+
+
+ Private constructor for use with serialization.
+
+
+ Holds the serialized object data about the exception being thrown.
+
+
+ Contains contextual information about the source or destination.
+
+
+
+
+ Public constructor for generating a SQLite exception given the error
+ code and message.
+
+
+ The SQLite return code to report.
+
+
+ Message text to go along with the return code message text.
+
+
+
+
+ Public constructor that uses the base class constructor for the error
+ message.
+
+ Error message text.
+
+
+
+ Public constructor that uses the default base class constructor.
+
+
+
+
+ Public constructor that uses the base class constructor for the error
+ message and inner exception.
+
+ Error message text.
+ The original (inner) exception.
+
+
+
+ Adds extra information to the serialized object data specific to this
+ class type. This is only used for serialization.
+
+
+ Holds the serialized object data about the exception being thrown.
+
+
+ Contains contextual information about the source or destination.
+
+
+
+
+ Gets the associated SQLite result code for this exception as a
+ . This property returns the same
+ underlying value as the property.
+
+
+
+
+ Gets the associated SQLite return code for this exception as an
+ . For desktop versions of the .NET Framework,
+ this property overrides the property of the same name within the
+
+ class. This property returns the same underlying value as the
+ property.
+
+
+
+
+ This method performs extra initialization tasks. It may be called by
+ any of the constructors of this class. It must not throw exceptions.
+
+
+
+
+ Maps a Win32 error code to an HRESULT.
+
+
+ The specified Win32 error code. It must be within the range of zero
+ (0) to 0xFFFF (65535).
+
+
+ Non-zero if the HRESULT should indicate success; otherwise, zero.
+
+
+ The integer value of the HRESULT.
+
+
+
+
+ Attempts to map the specified onto an
+ existing HRESULT -OR- a Win32 error code wrapped in an HRESULT. The
+ mappings may not have perfectly matching semantics; however, they do
+ have the benefit of being unique within the context of this exception
+ type.
+
+
+ The to map.
+
+
+ The integer HRESULT value -OR- null if there is no known mapping.
+
+
+
+
+ Returns the error message for the specified SQLite return code.
+
+ The SQLite return code.
+ The error message or null if it cannot be found.
+
+
+
+ Returns the composite error message based on the SQLite return code
+ and the optional detailed error message.
+
+ The SQLite return code.
+ Optional detailed error message.
+ Error message text for the return code.
+
+
+
+ SQLite error codes. Actually, this enumeration represents a return code,
+ which may also indicate success in one of several ways (e.g. SQLITE_OK,
+ SQLITE_ROW, and SQLITE_DONE). Therefore, the name of this enumeration is
+ something of a misnomer.
+
+
+
+
+ The error code is unknown. This error code
+ is only used by the managed wrapper itself.
+
+
+
+
+ Successful result
+
+
+
+
+ SQL error or missing database
+
+
+
+
+ Internal logic error in SQLite
+
+
+
+
+ Access permission denied
+
+
+
+
+ Callback routine requested an abort
+
+
+
+
+ The database file is locked
+
+
+
+
+ A table in the database is locked
+
+
+
+
+ A malloc() failed
+
+
+
+
+ Attempt to write a readonly database
+
+
+
+
+ Operation terminated by sqlite3_interrupt()
+
+
+
+
+ Some kind of disk I/O error occurred
+
+
+
+
+ The database disk image is malformed
+
+
+
+
+ Unknown opcode in sqlite3_file_control()
+
+
+
+
+ Insertion failed because database is full
+
+
+
+
+ Unable to open the database file
+
+
+
+
+ Database lock protocol error
+
+
+
+
+ Database is empty
+
+
+
+
+ The database schema changed
+
+
+
+
+ String or BLOB exceeds size limit
+
+
+
+
+ Abort due to constraint violation
+
+
+
+
+ Data type mismatch
+
+
+
+
+ Library used incorrectly
+
+
+
+
+ Uses OS features not supported on host
+
+
+
+
+ Authorization denied
+
+
+
+
+ Auxiliary database format error
+
+
+
+
+ 2nd parameter to sqlite3_bind out of range
+
+
+
+
+ File opened that is not a database file
+
+
+
+
+ Notifications from sqlite3_log()
+
+
+
+
+ Warnings from sqlite3_log()
+
+
+
+
+ sqlite3_step() has another row ready
+
+
+
+
+ sqlite3_step() has finished executing
+
+
+
+
+ Used to mask off extended result codes
+
+
+
+
+ A collation sequence was referenced by a schema and it cannot be
+ found.
+
+
+
+
+ An internal operation failed and it may succeed if retried.
+
+
+
+
+ A file read operation failed.
+
+
+
+
+ A file read operation returned less data than requested.
+
+
+
+
+ A file write operation failed.
+
+
+
+
+ A file synchronization operation failed.
+
+
+
+
+ A directory synchronization operation failed.
+
+
+
+
+ A file truncate operation failed.
+
+
+
+
+ A file metadata operation failed.
+
+
+
+
+ A file unlock operation failed.
+
+
+
+
+ A file lock operation failed.
+
+
+
+
+ A file delete operation failed.
+
+
+
+
+ Not currently used.
+
+
+
+
+ Out-of-memory during a file operation.
+
+
+
+
+ A file existence/status operation failed.
+
+
+
+
+ A check for a reserved lock failed.
+
+
+
+
+ A file lock operation failed.
+
+
+
+
+ A file close operation failed.
+
+
+
+
+ A directory close operation failed.
+
+
+
+
+ A shared memory open operation failed.
+
+
+
+
+ A shared memory size operation failed.
+
+
+
+
+ A shared memory lock operation failed.
+
+
+
+
+ A shared memory map operation failed.
+
+
+
+
+ A file seek operation failed.
+
+
+
+
+ A file delete operation failed because it does not exist.
+
+
+
+
+ A file memory mapping operation failed.
+
+
+
+
+ The temporary directory path could not be obtained.
+
+
+
+
+ A path string conversion operation failed.
+
+
+
+
+ Reserved.
+
+
+
+
+ An attempt to authenticate failed.
+
+
+
+
+ An attempt to begin a file system transaction failed.
+
+
+
+
+ An attempt to commit a file system transaction failed.
+
+
+
+
+ An attempt to rollback a file system transaction failed.
+
+
+
+
+ A database table is locked in shared-cache mode.
+
+
+
+
+ A virtual table in the database is locked.
+
+
+
+
+ A database file is locked due to a recovery operation.
+
+
+
+
+ A database file is locked due to snapshot semantics.
+
+
+
+
+ A database file cannot be opened because no temporary directory is available.
+
+
+
+
+ A database file cannot be opened because its path represents a directory.
+
+
+
+
+ A database file cannot be opened because its full path could not be obtained.
+
+
+
+
+ A database file cannot be opened because a path string conversion operation failed.
+
+
+
+
+ A virtual table is malformed.
+
+
+
+
+ A required sequence table is missing or corrupt.
+
+
+
+
+ A database file is read-only due to a recovery operation.
+
+
+
+
+ A database file is read-only because a lock could not be obtained.
+
+
+
+
+ A database file is read-only because it needs rollback processing.
+
+
+
+
+ A database file is read-only because it was moved while open.
+
+
+
+
+ The shared-memory file is read-only and it should be read-write.
+
+
+
+
+ Unable to create journal file because the directory is read-only.
+
+
+
+
+ An operation is being aborted due to rollback processing.
+
+
+
+
+ A CHECK constraint failed.
+
+
+
+
+ A commit hook produced a unsuccessful return code.
+
+
+
+
+ A FOREIGN KEY constraint failed.
+
+
+
+
+ Not currently used.
+
+
+
+
+ A NOT NULL constraint failed.
+
+
+
+
+ A PRIMARY KEY constraint failed.
+
+
+
+
+ The RAISE function was used by a trigger-program.
+
+
+
+
+ A UNIQUE constraint failed.
+
+
+
+
+ Not currently used.
+
+
+
+
+ A ROWID constraint failed.
+
+
+
+
+ Frames were recovered from the WAL log file.
+
+
+
+
+ Pages were recovered from the journal file.
+
+
+
+
+ An automatic index was created to process a query.
+
+
+
+
+ User authentication failed.
+
+
+
+
+ Success. Prevents the extension from unloading until the process
+ terminates.
+
+
+
+
+ SQLite implementation of .
+
+
+ SQLite implementation of .
+
+
+
+
+ Constructs a new instance.
+
+
+
+
+ Cleans up resources (native and managed) associated with the current instance.
+
+
+
+
+ Cleans up resources associated with the current instance.
+
+
+
+
+ This event is raised whenever SQLite raises a logging event.
+ Note that this should be set as one of the first things in the
+ application. This event is provided for backward compatibility only.
+ New code should use the class instead.
+
+
+
+
+ Static instance member which returns an instanced class.
+
+
+
+
+ Creates and returns a new object.
+
+ The new object.
+
+
+
+ Creates and returns a new object.
+
+ The new object.
+
+
+
+ Creates and returns a new object.
+
+ The new object.
+
+
+
+ Creates and returns a new object.
+
+ The new object.
+
+
+
+ Creates and returns a new object.
+
+ The new object.
+
+
+
+ Creates and returns a new object.
+
+ The new object.
+
+
+
+ Will provide a object in .NET 3.5.
+
+ The class or interface type to query for.
+
+
+
+
+ This abstract class is designed to handle user-defined functions easily. An instance of the derived class is made for each
+ connection to the database.
+
+
+ Although there is one instance of a class derived from SQLiteFunction per database connection, the derived class has no access
+ to the underlying connection. This is necessary to deter implementers from thinking it would be a good idea to make database
+ calls during processing.
+
+ It is important to distinguish between a per-connection instance, and a per-SQL statement context. One instance of this class
+ services all SQL statements being stepped through on that connection, and there can be many. One should never store per-statement
+ information in member variables of user-defined function classes.
+
+ For aggregate functions, always create and store your per-statement data in the contextData object on the 1st step. This data will
+ be automatically freed for you (and Dispose() called if the item supports IDisposable) when the statement completes.
+
+
+
+
+ The base connection this function is attached to
+
+
+
+
+ Internal array used to keep track of aggregate function context data
+
+
+
+
+ The connection flags associated with this object (this should be the
+ same value as the flags associated with the parent connection object).
+
+
+
+
+ Holds a reference to the callback function for user functions
+
+
+
+
+ Holds a reference to the callbakc function for stepping in an aggregate function
+
+
+
+
+ Holds a reference to the callback function for finalizing an aggregate function
+
+
+
+
+ Holds a reference to the callback function for collating sequences
+
+
+
+
+ Current context of the current callback. Only valid during a callback
+
+
+
+
+ This static dictionary contains all the registered (known) user-defined
+ functions declared using the proper attributes. The contained dictionary
+ values are always null and are not currently used.
+
+
+
+
+ Internal constructor, initializes the function's internal variables.
+
+
+
+
+ Constructs an instance of this class using the specified data-type
+ conversion parameters.
+
+
+ The DateTime format to be used when converting string values to a
+ DateTime and binding DateTime parameters.
+
+
+ The to be used when creating DateTime
+ values.
+
+
+ The format string to be used when parsing and formatting DateTime
+ values.
+
+
+ Non-zero to create a UTF-16 data-type conversion context; otherwise,
+ a UTF-8 data-type conversion context will be created.
+
+
+
+
+ Disposes of any active contextData variables that were not automatically cleaned up. Sometimes this can happen if
+ someone closes the connection while a DataReader is open.
+
+
+
+
+ Placeholder for a user-defined disposal routine
+
+ True if the object is being disposed explicitly
+
+
+
+ Cleans up resources associated with the current instance.
+
+
+
+
+ Returns a reference to the underlying connection's SQLiteConvert class, which can be used to convert
+ strings and DateTime's into the current connection's encoding schema.
+
+
+
+
+ Scalar functions override this method to do their magic.
+
+
+ Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available
+ to force them into a certain type. Therefore the only types you will ever see as parameters are
+ DBNull.Value, Int64, Double, String or byte[] array.
+
+ The arguments for the command to process
+ You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or
+ you may return an Exception-derived class if you wish to return an error to SQLite. Do not actually throw the error,
+ just return it!
+
+
+
+ Aggregate functions override this method to do their magic.
+
+
+ Typically you'll be updating whatever you've placed in the contextData field and returning as quickly as possible.
+
+ The arguments for the command to process
+ The 1-based step number. This is incrememted each time the step method is called.
+ A placeholder for implementers to store contextual data pertaining to the current context.
+
+
+
+ Aggregate functions override this method to finish their aggregate processing.
+
+
+ If you implemented your aggregate function properly,
+ you've been recording and keeping track of your data in the contextData object provided, and now at this stage you should have
+ all the information you need in there to figure out what to return.
+ NOTE: It is possible to arrive here without receiving a previous call to Step(), in which case the contextData will
+ be null. This can happen when no rows were returned. You can either return null, or 0 or some other custom return value
+ if that is the case.
+
+ Your own assigned contextData, provided for you so you can return your final results.
+ You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or
+ you may return an Exception-derived class if you wish to return an error to SQLite. Do not actually throw the error,
+ just return it!
+
+
+
+
+ User-defined collating sequences override this method to provide a custom string sorting algorithm.
+
+ The first string to compare.
+ The second strnig to compare.
+ 1 if param1 is greater than param2, 0 if they are equal, or -1 if param1 is less than param2.
+
+
+
+ Converts an IntPtr array of context arguments to an object array containing the resolved parameters the pointers point to.
+
+
+ Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available
+ to force them into a certain type. Therefore the only types you will ever see as parameters are
+ DBNull.Value, Int64, Double, String or byte[] array.
+
+ The number of arguments
+ A pointer to the array of arguments
+ An object array of the arguments once they've been converted to .NET values
+
+
+
+ Takes the return value from Invoke() and Final() and figures out how to return it to SQLite's context.
+
+ The context the return value applies to
+ The parameter to return to SQLite
+
+
+
+ Internal scalar callback function, which wraps the raw context pointer and calls the virtual Invoke() method.
+ WARNING: Must not throw exceptions.
+
+ A raw context pointer
+ Number of arguments passed in
+ A pointer to the array of arguments
+
+
+
+ Internal collating sequence function, which wraps up the raw string pointers and executes the Compare() virtual function.
+ WARNING: Must not throw exceptions.
+
+ Not used
+ Length of the string pv1
+ Pointer to the first string to compare
+ Length of the string pv2
+ Pointer to the second string to compare
+ Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater
+ than the second. Returns 0 if an exception is caught.
+
+
+
+ Internal collating sequence function, which wraps up the raw string pointers and executes the Compare() virtual function.
+ WARNING: Must not throw exceptions.
+
+ Not used
+ Length of the string pv1
+ Pointer to the first string to compare
+ Length of the string pv2
+ Pointer to the second string to compare
+ Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater
+ than the second. Returns 0 if an exception is caught.
+
+
+
+ The internal aggregate Step function callback, which wraps the raw context pointer and calls the virtual Step() method.
+ WARNING: Must not throw exceptions.
+
+
+ This function takes care of doing the lookups and getting the important information put together to call the Step() function.
+ That includes pulling out the user's contextData and updating it after the call is made. We use a sorted list for this so
+ binary searches can be done to find the data.
+
+ A raw context pointer
+ Number of arguments passed in
+ A pointer to the array of arguments
+
+
+
+ An internal aggregate Final function callback, which wraps the context pointer and calls the virtual Final() method.
+ WARNING: Must not throw exceptions.
+
+ A raw context pointer
+
+
+
+ Using reflection, enumerate all assemblies in the current appdomain looking for classes that
+ have a SQLiteFunctionAttribute attribute, and registering them accordingly.
+
+
+
+
+ Manual method of registering a function. The type must still have the SQLiteFunctionAttributes in order to work
+ properly, but this is a workaround for the Compact Framework where enumerating assemblies is not currently supported.
+
+ The type of the function to register
+
+
+
+ Alternative method of registering a function. This method
+ does not require the specified type to be annotated with
+ .
+
+
+ The name of the function to register.
+
+
+ The number of arguments accepted by the function.
+
+
+ The type of SQLite function being resitered (e.g. scalar,
+ aggregate, or collating sequence).
+
+
+ The that actually implements the function.
+ This will only be used if the
+ and parameters are null.
+
+
+ The to be used for all calls into the
+ ,
+ ,
+ and virtual methods.
+
+
+ The to be used for all calls into the
+ virtual method. This
+ parameter is only necessary for aggregate functions.
+
+
+
+
+ Replaces a registered function, disposing of the associated (old)
+ value if necessary.
+
+
+ The attribute that describes the function to replace.
+
+
+ The new value to use.
+
+
+ Non-zero if an existing registered function was replaced; otherwise,
+ zero.
+
+
+
+
+ Creates a instance based on the specified
+ .
+
+
+ The containing the metadata about
+ the function to create.
+
+
+ The created function -OR- null if the function could not be created.
+
+
+ Non-zero if the function was created; otherwise, zero.
+
+
+
+
+ Called by the SQLiteBase derived classes, this method binds all registered (known) user-defined functions to a connection.
+ It is done this way so that all user-defined functions will access the database using the same encoding scheme
+ as the connection (UTF-8 or UTF-16).
+
+
+ The wrapper functions that interop with SQLite will create a unique cookie value, which internally is a pointer to
+ all the wrapped callback functions. The interop function uses it to map CDecl callbacks to StdCall callbacks.
+
+ The base object on which the functions are to bind.
+ The flags associated with the parent connection object.
+ Returns a logical list of functions which the connection should retain until it is closed.
+
+
+
+ Called by the SQLiteBase derived classes, this method unbinds all registered (known)
+ functions -OR- all previously bound user-defined functions from a connection.
+
+ The base object from which the functions are to be unbound.
+ The flags associated with the parent connection object.
+
+ Non-zero to unbind all registered (known) functions -OR- zero to unbind all functions
+ currently bound to the connection.
+
+ Non-zero if all the specified user-defined functions were unbound.
+
+
+
+ This function binds a user-defined function to a connection.
+
+
+ The object instance associated with the
+ that the function should be bound to.
+
+
+ The object instance containing
+ the metadata for the function to be bound.
+
+
+ The object instance that implements the
+ function to be bound.
+
+
+ The flags associated with the parent connection object.
+
+
+
+
+ This function unbinds a user-defined functions from a connection.
+
+
+ The object instance associated with the
+ that the function should be bound to.
+
+
+ The object instance containing
+ the metadata for the function to be bound.
+
+
+ The object instance that implements the
+ function to be bound.
+
+
+ The flags associated with the parent connection object.
+
+ Non-zero if the function was unbound.
+
+
+
+ This type is used with the
+ method.
+
+
+ This is always the string literal "Invoke".
+
+
+ The arguments for the scalar function.
+
+
+ The result of the scalar function.
+
+
+
+
+ This type is used with the
+ method.
+
+
+ This is always the string literal "Step".
+
+
+ The arguments for the aggregate function.
+
+
+ The step number (one based). This is incrememted each time the
+ method is called.
+
+
+ A placeholder for implementers to store contextual data pertaining
+ to the current context.
+
+
+
+
+ This type is used with the
+ method.
+
+
+ This is always the string literal "Final".
+
+
+ A placeholder for implementers to store contextual data pertaining
+ to the current context.
+
+
+ The result of the aggregate function.
+
+
+
+
+ This type is used with the
+ method.
+
+
+ This is always the string literal "Compare".
+
+
+ The first string to compare.
+
+
+ The second strnig to compare.
+
+
+ A positive integer if the parameter is
+ greater than the parameter, a negative
+ integer if the parameter is less than
+ the parameter, or zero if they are
+ equal.
+
+
+
+
+ This class implements a SQLite function using a .
+ All the virtual methods of the class are
+ implemented using calls to the ,
+ , ,
+ and strongly typed delegate types
+ or via the method.
+ The arguments are presented in the same order they appear in
+ the associated methods with one exception:
+ the first argument is the name of the virtual method being implemented.
+
+
+
+
+ This error message is used by the overridden virtual methods when
+ a required property (e.g.
+ or ) has not been
+ set.
+
+
+
+
+ This error message is used by the overridden
+ method when the result does not have a type of .
+
+
+
+
+ Constructs an empty instance of this class.
+
+
+
+
+ Constructs an instance of this class using the specified
+ as the
+ implementation.
+
+
+ The to be used for all calls into the
+ , , and
+ virtual methods needed by the
+ base class.
+
+
+ The to be used for all calls into the
+ virtual methods needed by the
+ base class.
+
+
+
+
+ Returns the list of arguments for the method,
+ as an of . The first
+ argument is always the literal string "Invoke".
+
+
+ The original arguments received by the method.
+
+
+ Non-zero if the returned arguments are going to be used with the
+ type; otherwise, zero.
+
+
+ The arguments to pass to the configured .
+
+
+
+
+ Returns the list of arguments for the method,
+ as an of . The first
+ argument is always the literal string "Step".
+
+
+ The original arguments received by the method.
+
+
+ The step number (one based). This is incrememted each time the
+ method is called.
+
+
+ A placeholder for implementers to store contextual data pertaining
+ to the current context.
+
+
+ Non-zero if the returned arguments are going to be used with the
+ type; otherwise, zero.
+
+
+ The arguments to pass to the configured .
+
+
+
+
+ Updates the output arguments for the method,
+ using an of . The first
+ argument is always the literal string "Step". Currently, only the
+ parameter is updated.
+
+
+ The original arguments received by the method.
+
+
+ A placeholder for implementers to store contextual data pertaining
+ to the current context.
+
+
+ Non-zero if the returned arguments are going to be used with the
+ type; otherwise, zero.
+
+
+ The arguments to pass to the configured .
+
+
+
+
+ Returns the list of arguments for the method,
+ as an of . The first
+ argument is always the literal string "Final".
+
+
+ A placeholder for implementers to store contextual data pertaining
+ to the current context.
+
+
+ Non-zero if the returned arguments are going to be used with the
+ type; otherwise, zero.
+
+
+ The arguments to pass to the configured .
+
+
+
+
+ Returns the list of arguments for the method,
+ as an of . The first
+ argument is always the literal string "Compare".
+
+
+ The first string to compare.
+
+
+ The second strnig to compare.
+
+
+ Non-zero if the returned arguments are going to be used with the
+ type; otherwise, zero.
+
+
+ The arguments to pass to the configured .
+
+
+
+
+ The to be used for all calls into the
+ , , and
+ virtual methods needed by the
+ base class.
+
+
+
+
+ The to be used for all calls into the
+ virtual methods needed by the
+ base class.
+
+
+
+
+ This virtual method is the implementation for scalar functions.
+ See the method for more
+ details.
+
+
+ The arguments for the scalar function.
+
+
+ The result of the scalar function.
+
+
+
+
+ This virtual method is part of the implementation for aggregate
+ functions. See the method
+ for more details.
+
+
+ The arguments for the aggregate function.
+
+
+ The step number (one based). This is incrememted each time the
+ method is called.
+
+
+ A placeholder for implementers to store contextual data pertaining
+ to the current context.
+
+
+
+
+ This virtual method is part of the implementation for aggregate
+ functions. See the method
+ for more details.
+
+
+ A placeholder for implementers to store contextual data pertaining
+ to the current context.
+
+
+ The result of the aggregate function.
+
+
+
+
+ This virtual method is part of the implementation for collating
+ sequences. See the method
+ for more details.
+
+
+ The first string to compare.
+
+
+ The second strnig to compare.
+
+
+ A positive integer if the parameter is
+ greater than the parameter, a negative
+ integer if the parameter is less than
+ the parameter, or zero if they are
+ equal.
+
+
+
+
+ Extends SQLiteFunction and allows an inherited class to obtain the collating sequence associated with a function call.
+
+
+ User-defined functions can call the GetCollationSequence() method in this class and use it to compare strings and char arrays.
+
+
+
+
+ Obtains the collating sequence in effect for the given function.
+
+
+
+
+
+ Cleans up resources (native and managed) associated with the current instance.
+
+
+ Zero when being disposed via garbage collection; otherwise, non-zero.
+
+
+
+
+ The type of user-defined function to declare
+
+
+
+
+ Scalar functions are designed to be called and return a result immediately. Examples include ABS(), Upper(), Lower(), etc.
+
+
+
+
+ Aggregate functions are designed to accumulate data until the end of a call and then return a result gleaned from the accumulated data.
+ Examples include SUM(), COUNT(), AVG(), etc.
+
+
+
+
+ Collating sequences are used to sort textual data in a custom manner, and appear in an ORDER BY clause. Typically text in an ORDER BY is
+ sorted using a straight case-insensitive comparison function. Custom collating sequences can be used to alter the behavior of text sorting
+ in a user-defined manner.
+
+
+
+
+ An internal callback delegate declaration.
+
+ Raw native context pointer for the user function.
+ Total number of arguments to the user function.
+ Raw native pointer to the array of raw native argument pointers.
+
+
+
+ An internal final callback delegate declaration.
+
+ Raw context pointer for the user function
+
+
+
+ Internal callback delegate for implementing collating sequences
+
+ Not used
+ Length of the string pv1
+ Pointer to the first string to compare
+ Length of the string pv2
+ Pointer to the second string to compare
+ Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater
+ than the second.
+
+
+
+ The type of collating sequence
+
+
+
+
+ The built-in BINARY collating sequence
+
+
+
+
+ The built-in NOCASE collating sequence
+
+
+
+
+ The built-in REVERSE collating sequence
+
+
+
+
+ A custom user-defined collating sequence
+
+
+
+
+ The encoding type the collation sequence uses
+
+
+
+
+ The collation sequence is UTF8
+
+
+
+
+ The collation sequence is UTF16 little-endian
+
+
+
+
+ The collation sequence is UTF16 big-endian
+
+
+
+
+ A struct describing the collating sequence a function is executing in
+
+
+
+
+ The name of the collating sequence
+
+
+
+
+ The type of collating sequence
+
+
+
+
+ The text encoding of the collation sequence
+
+
+
+
+ Context of the function that requested the collating sequence
+
+
+
+
+ Calls the base collating sequence to compare two strings
+
+ The first string to compare
+ The second string to compare
+ -1 if s1 is less than s2, 0 if s1 is equal to s2, and 1 if s1 is greater than s2
+
+
+
+ Calls the base collating sequence to compare two character arrays
+
+ The first array to compare
+ The second array to compare
+ -1 if c1 is less than c2, 0 if c1 is equal to c2, and 1 if c1 is greater than c2
+
+
+
+ A simple custom attribute to enable us to easily find user-defined functions in
+ the loaded assemblies and initialize them in SQLite as connections are made.
+
+
+
+
+ Default constructor, initializes the internal variables for the function.
+
+
+
+
+ Constructs an instance of this class. This sets the initial
+ , , and
+ properties to null.
+
+
+ The name of the function, as seen by the SQLite core library.
+
+
+ The number of arguments that the function will accept.
+
+
+ The type of function being declared. This will either be Scalar,
+ Aggregate, or Collation.
+
+
+
+
+ The function's name as it will be used in SQLite command text.
+
+
+
+
+ The number of arguments this function expects. -1 if the number of arguments is variable.
+
+
+
+
+ The type of function this implementation will be.
+
+
+
+
+ The object instance that describes the class
+ containing the implementation for the associated function. The value of
+ this property will not be used if either the or
+ property values are set to non-null.
+
+
+
+
+ The that refers to the implementation for the
+ associated function. If this property value is set to non-null, it will
+ be used instead of the property value.
+
+
+
+
+ The that refers to the implementation for the
+ associated function. If this property value is set to non-null, it will
+ be used instead of the property value.
+
+
+
+
+ This class provides key info for a given SQLite statement.
+
+ Providing key information for a given statement is non-trivial :(
+
+
+
+
+
+ Used to support CommandBehavior.KeyInfo
+
+
+
+
+ Used to keep track of the per-table RowId column metadata.
+
+
+
+
+ A single sub-query for a given table/database.
+
+
+
+
+ This function does all the nasty work at determining what keys need to be returned for
+ a given statement.
+
+
+
+
+
+
+
+ How many additional columns of keyinfo we're holding
+
+
+
+
+ Make sure all the subqueries are open and ready and sync'd with the current rowid
+ of the table they're supporting
+
+
+
+
+ Release any readers on any subqueries
+
+
+
+
+ Append all the columns we've added to the original query to the schema
+
+
+
+
+
+ Event data for logging event handlers.
+
+
+
+
+ The error code. The type of this object value should be
+ or .
+
+
+
+
+ SQL statement text as the statement first begins executing
+
+
+
+
+ Extra data associated with this event, if any.
+
+
+
+
+ Constructs the object.
+
+ Should be null.
+
+ The error code. The type of this object value should be
+ or .
+
+ The error message, if any.
+ The extra data, if any.
+
+
+
+ Raised when a log event occurs.
+
+ The current connection
+ Event arguments of the trace
+
+
+
+ Manages the SQLite custom logging functionality and the associated
+ callback for the whole process.
+
+
+
+
+ Object used to synchronize access to the static instance data
+ for this class.
+
+
+
+
+ Member variable to store the AppDomain.DomainUnload event handler.
+
+
+
+
+ Member variable to store the application log handler to call.
+
+
+
+
+ The default log event handler.
+
+
+
+
+ The log callback passed to native SQLite engine. This must live
+ as long as the SQLite library has a pointer to it.
+
+
+
+
+ The base SQLite object to interop with.
+
+
+
+
+ This will be non-zero if an attempt was already made to initialize
+ the (managed) logging subsystem.
+
+
+
+
+ This will be non-zero if logging is currently enabled.
+
+
+
+
+ Initializes the SQLite logging facilities.
+
+
+
+
+ Initializes the SQLite logging facilities.
+
+
+ The name of the managed class that called this method. This
+ parameter may be null.
+
+
+
+
+ Handles the AppDomain being unloaded.
+
+ Should be null.
+ The data associated with this event.
+
+
+
+ This event is raised whenever SQLite raises a logging event.
+ Note that this should be set as one of the first things in the
+ application.
+
+
+
+
+ If this property is true, logging is enabled; otherwise, logging is
+ disabled. When logging is disabled, no logging events will fire.
+
+
+
+
+ Log a message to all the registered log event handlers without going
+ through the SQLite library.
+
+ The message to be logged.
+
+
+
+ Log a message to all the registered log event handlers without going
+ through the SQLite library.
+
+ The SQLite error code.
+ The message to be logged.
+
+
+
+ Log a message to all the registered log event handlers without going
+ through the SQLite library.
+
+ The integer error code.
+ The message to be logged.
+
+
+
+ Log a message to all the registered log event handlers without going
+ through the SQLite library.
+
+
+ The error code. The type of this object value should be
+ System.Int32 or SQLiteErrorCode.
+
+ The message to be logged.
+
+
+
+ Creates and initializes the default log event handler.
+
+
+
+
+ Adds the default log event handler to the list of handlers.
+
+
+
+
+ Removes the default log event handler from the list of handlers.
+
+
+
+
+ Internal proxy function that calls any registered application log
+ event handlers.
+
+ WARNING: This method is used more-or-less directly by native code,
+ do not modify its type signature.
+
+
+ The extra data associated with this message, if any.
+
+
+ The error code associated with this message.
+
+
+ The message string to be logged.
+
+
+
+
+ Default logger. Currently, uses the Trace class (i.e. sends events
+ to the current trace listeners, if any).
+
+ Should be null.
+ The data associated with this event.
+
+
+
+ MetaDataCollections specific to SQLite
+
+
+
+
+ Returns a list of databases attached to the connection
+
+
+
+
+ Returns column information for the specified table
+
+
+
+
+ Returns index information for the optionally-specified table
+
+
+
+
+ Returns base columns for the given index
+
+
+
+
+ Returns the tables in the given catalog
+
+
+
+
+ Returns user-defined views in the given catalog
+
+
+
+
+ Returns underlying column information on the given view
+
+
+
+
+ Returns foreign key information for the given catalog
+
+
+
+
+ Returns the triggers on the database
+
+
+
+
+ SQLite implementation of DbParameter.
+
+
+
+
+ This value represents an "unknown" .
+
+
+
+
+ The command associated with this parameter.
+
+
+
+
+ The data type of the parameter
+
+
+
+
+ The version information for mapping the parameter
+
+
+
+
+ The value of the data in the parameter
+
+
+
+
+ The source column for the parameter
+
+
+
+
+ The column name
+
+
+
+
+ The data size, unused by SQLite
+
+
+
+
+ The database type name associated with this parameter, if any.
+
+
+
+
+ Constructor used when creating for use with a specific command.
+
+
+ The command associated with this parameter.
+
+
+
+
+ Default constructor
+
+
+
+
+ Constructs a named parameter given the specified parameter name
+
+ The parameter name
+
+
+
+ Constructs a named parameter given the specified parameter name and initial value
+
+ The parameter name
+ The initial value of the parameter
+
+
+
+ Constructs a named parameter of the specified type
+
+ The parameter name
+ The datatype of the parameter
+
+
+
+ Constructs a named parameter of the specified type and source column reference
+
+ The parameter name
+ The data type
+ The source column
+
+
+
+ Constructs a named parameter of the specified type, source column and row version
+
+ The parameter name
+ The data type
+ The source column
+ The row version information
+
+
+
+ Constructs an unnamed parameter of the specified data type
+
+ The datatype of the parameter
+
+
+
+ Constructs an unnamed parameter of the specified data type and sets the initial value
+
+ The datatype of the parameter
+ The initial value of the parameter
+
+
+
+ Constructs an unnamed parameter of the specified data type and source column
+
+ The datatype of the parameter
+ The source column
+
+
+
+ Constructs an unnamed parameter of the specified data type, source column and row version
+
+ The data type
+ The source column
+ The row version information
+
+
+
+ Constructs a named parameter of the specified type and size
+
+ The parameter name
+ The data type
+ The size of the parameter
+
+
+
+ Constructs a named parameter of the specified type, size and source column
+
+ The name of the parameter
+ The data type
+ The size of the parameter
+ The source column
+
+
+
+ Constructs a named parameter of the specified type, size, source column and row version
+
+ The name of the parameter
+ The data type
+ The size of the parameter
+ The source column
+ The row version information
+
+
+
+ Constructs a named parameter of the specified type, size, source column and row version
+
+ The name of the parameter
+ The data type
+ The size of the parameter
+ Only input parameters are supported in SQLite
+ Ignored
+ Ignored
+ Ignored
+ The source column
+ The row version information
+ The initial value to assign the parameter
+
+
+
+ Constructs a named parameter, yet another flavor
+
+ The name of the parameter
+ The data type
+ The size of the parameter
+ Only input parameters are supported in SQLite
+ Ignored
+ Ignored
+ The source column
+ The row version information
+ Whether or not this parameter is for comparing NULL's
+ The intial value to assign the parameter
+
+
+
+ Constructs an unnamed parameter of the specified type and size
+
+ The data type
+ The size of the parameter
+
+
+
+ Constructs an unnamed parameter of the specified type, size, and source column
+
+ The data type
+ The size of the parameter
+ The source column
+
+
+
+ Constructs an unnamed parameter of the specified type, size, source column and row version
+
+ The data type
+ The size of the parameter
+ The source column
+ The row version information
+
+
+
+ The command associated with this parameter.
+
+
+
+
+ Whether or not the parameter can contain a null value
+
+
+
+
+ Returns the datatype of the parameter
+
+
+
+
+ Supports only input parameters
+
+
+
+
+ Returns the parameter name
+
+
+
+
+ Resets the DbType of the parameter so it can be inferred from the value
+
+
+
+
+ Returns the size of the parameter
+
+
+
+
+ Gets/sets the source column
+
+
+
+
+ Used by DbCommandBuilder to determine the mapping for nullable fields
+
+
+
+
+ Gets and sets the row version
+
+
+
+
+ Gets and sets the parameter value. If no datatype was specified, the datatype will assume the type from the value given.
+
+
+
+
+ The database type name associated with this parameter, if any.
+
+
+
+
+ Clones a parameter
+
+ A new, unassociated SQLiteParameter
+
+
+
+ SQLite implementation of DbParameterCollection.
+
+
+
+
+ The underlying command to which this collection belongs
+
+
+
+
+ The internal array of parameters in this collection
+
+
+
+
+ Determines whether or not all parameters have been bound to their statement(s)
+
+
+
+
+ Initializes the collection
+
+ The command to which the collection belongs
+
+
+
+ Returns false
+
+
+
+
+ Returns false
+
+
+
+
+ Returns false
+
+
+
+
+ Returns null
+
+
+
+
+ Retrieves an enumerator for the collection
+
+ An enumerator for the underlying array
+
+
+
+ Adds a parameter to the collection
+
+ The parameter name
+ The data type
+ The size of the value
+ The source column
+ A SQLiteParameter object
+
+
+
+ Adds a parameter to the collection
+
+ The parameter name
+ The data type
+ The size of the value
+ A SQLiteParameter object
+
+
+
+ Adds a parameter to the collection
+
+ The parameter name
+ The data type
+ A SQLiteParameter object
+
+
+
+ Adds a parameter to the collection
+
+ The parameter to add
+ A zero-based index of where the parameter is located in the array
+
+
+
+ Adds a parameter to the collection
+
+ The parameter to add
+ A zero-based index of where the parameter is located in the array
+
+
+
+ Adds a named/unnamed parameter and its value to the parameter collection.
+
+ Name of the parameter, or null to indicate an unnamed parameter
+ The initial value of the parameter
+ Returns the SQLiteParameter object created during the call.
+
+
+
+ Adds an array of parameters to the collection
+
+ The array of parameters to add
+
+
+
+ Adds an array of parameters to the collection
+
+ The array of parameters to add
+
+
+
+ Clears the array and resets the collection
+
+
+
+
+ Determines if the named parameter exists in the collection
+
+ The name of the parameter to check
+ True if the parameter is in the collection
+
+
+
+ Determines if the parameter exists in the collection
+
+ The SQLiteParameter to check
+ True if the parameter is in the collection
+
+
+
+ Not implemented
+
+
+
+
+
+
+ Returns a count of parameters in the collection
+
+
+
+
+ Overloaded to specialize the return value of the default indexer
+
+ Name of the parameter to get/set
+ The specified named SQLite parameter
+
+
+
+ Overloaded to specialize the return value of the default indexer
+
+ The index of the parameter to get/set
+ The specified SQLite parameter
+
+
+
+ Retrieve a parameter by name from the collection
+
+ The name of the parameter to fetch
+ A DbParameter object
+
+
+
+ Retrieves a parameter by its index in the collection
+
+ The index of the parameter to retrieve
+ A DbParameter object
+
+
+
+ Returns the index of a parameter given its name
+
+ The name of the parameter to find
+ -1 if not found, otherwise a zero-based index of the parameter
+
+
+
+ Returns the index of a parameter
+
+ The parameter to find
+ -1 if not found, otherwise a zero-based index of the parameter
+
+
+
+ Inserts a parameter into the array at the specified location
+
+ The zero-based index to insert the parameter at
+ The parameter to insert
+
+
+
+ Removes a parameter from the collection
+
+ The parameter to remove
+
+
+
+ Removes a parameter from the collection given its name
+
+ The name of the parameter to remove
+
+
+
+ Removes a parameter from the collection given its index
+
+ The zero-based parameter index to remove
+
+
+
+ Re-assign the named parameter to a new parameter object
+
+ The name of the parameter to replace
+ The new parameter
+
+
+
+ Re-assign a parameter at the specified index
+
+ The zero-based index of the parameter to replace
+ The new parameter
+
+
+
+ Un-binds all parameters from their statements
+
+
+
+
+ This function attempts to map all parameters in the collection to all statements in a Command.
+ Since named parameters may span multiple statements, this function makes sure all statements are bound
+ to the same named parameter. Unnamed parameters are bound in sequence.
+
+
+
+
+ Represents a single SQL statement in SQLite.
+
+
+
+
+ The underlying SQLite object this statement is bound to
+
+
+
+
+ The command text of this SQL statement
+
+
+
+
+ The actual statement pointer
+
+
+
+
+ An index from which unnamed parameters begin
+
+
+
+
+ Names of the parameters as SQLite understands them to be
+
+
+
+
+ Parameters for this statement
+
+
+
+
+ Command this statement belongs to (if any)
+
+
+
+
+ The flags associated with the parent connection object.
+
+
+
+
+ Initializes the statement and attempts to get all information about parameters in the statement
+
+ The base SQLite object
+ The flags associated with the parent connection object
+ The statement
+ The command text for this statement
+ The previous command in a multi-statement command
+
+
+
+ Disposes and finalizes the statement
+
+
+
+
+ If the underlying database connection is open, fetches the number of changed rows
+ resulting from the most recent query; otherwise, does nothing.
+
+
+ The number of changes when true is returned.
+ Undefined if false is returned.
+
+
+ The read-only flag when true is returned.
+ Undefined if false is returned.
+
+ Non-zero if the number of changed rows was fetched.
+
+
+
+ Called by SQLiteParameterCollection, this function determines if the specified parameter name belongs to
+ this statement, and if so, keeps a reference to the parameter so it can be bound later.
+
+ The parameter name to map
+ The parameter to assign it
+
+
+
+ Bind all parameters, making sure the caller didn't miss any
+
+
+
+
+ This method attempts to query the database connection associated with
+ the statement in use. If the underlying command or connection is
+ unavailable, a null value will be returned.
+
+
+ The connection object -OR- null if it is unavailable.
+
+
+
+
+ Invokes the parameter binding callback configured for the database
+ type name associated with the specified column. If no parameter
+ binding callback is available for the database type name, do
+ nothing.
+
+
+ The index of the column being read.
+
+
+ The instance being bound to the
+ command.
+
+
+ Non-zero if the default handling for the parameter binding call
+ should be skipped (i.e. the parameter should not be bound at all).
+ Great care should be used when setting this to non-zero.
+
+
+
+
+ Perform the bind operation for an individual parameter
+
+ The index of the parameter to bind
+ The parameter we're binding
+
+
+
+ SQLite implementation of DbTransaction that does not support nested transactions.
+
+
+
+
+ Constructs the transaction object, binding it to the supplied connection
+
+ The connection to open a transaction on
+ TRUE to defer the writelock, or FALSE to lock immediately
+
+
+
+ Disposes the transaction. If it is currently active, any changes are rolled back.
+
+
+
+
+ Commits the current transaction.
+
+
+
+
+ Attempts to start a transaction. An exception will be thrown if the transaction cannot
+ be started for any reason.
+
+ TRUE to defer the writelock, or FALSE to lock immediately
+
+
+
+ Issue a ROLLBACK command against the database connection,
+ optionally re-throwing any caught exception.
+
+
+ Non-zero to re-throw caught exceptions.
+
+
+
+
+ SQLite implementation of DbTransaction that does support nested transactions.
+
+
+
+
+ The original transaction level for the associated connection
+ when this transaction was created (i.e. begun).
+
+
+
+
+ The SAVEPOINT name for this transaction, if any. This will
+ only be non-null if this transaction is a nested one.
+
+
+
+
+ Constructs the transaction object, binding it to the supplied connection
+
+ The connection to open a transaction on
+ TRUE to defer the writelock, or FALSE to lock immediately
+
+
+
+ Disposes the transaction. If it is currently active, any changes are rolled back.
+
+
+
+
+ Commits the current transaction.
+
+
+
+
+ Attempts to start a transaction. An exception will be thrown if the transaction cannot
+ be started for any reason.
+
+ TRUE to defer the writelock, or FALSE to lock immediately
+
+
+
+ Issue a ROLLBACK command against the database connection,
+ optionally re-throwing any caught exception.
+
+
+ Non-zero to re-throw caught exceptions.
+
+
+
+
+ Constructs the name of a new savepoint for this transaction. It
+ should only be called from the constructor of this class.
+
+
+ The name of the new savepoint -OR- null if it cannot be constructed.
+
+
+
+
+ Base class used by to implement DbTransaction for SQLite.
+
+
+
+
+ The connection to which this transaction is bound.
+
+
+
+
+ Matches the version of the connection.
+
+
+
+
+ The isolation level for this transaction.
+
+
+
+
+ Constructs the transaction object, binding it to the supplied connection
+
+ The connection to open a transaction on
+ TRUE to defer the writelock, or FALSE to lock immediately
+
+
+
+ Gets the isolation level of the transaction. SQLite only supports Serializable transactions.
+
+
+
+
+ Disposes the transaction. If it is currently active, any changes are rolled back.
+
+
+
+
+ Returns the underlying connection to which this transaction applies.
+
+
+
+
+ Forwards to the local Connection property
+
+
+
+
+ Rolls back the active transaction.
+
+
+
+
+ Attempts to start a transaction. An exception will be thrown if the transaction cannot
+ be started for any reason.
+
+ TRUE to defer the writelock, or FALSE to lock immediately
+
+
+
+ Issue a ROLLBACK command against the database connection,
+ optionally re-throwing any caught exception.
+
+
+ Non-zero to re-throw caught exceptions.
+
+
+
+
+ Checks the state of this transaction, optionally throwing an exception if a state
+ inconsistency is found.
+
+
+ Non-zero to throw an exception if a state inconsistency is found.
+
+
+ Non-zero if this transaction is valid; otherwise, false.
+
+
+
+
+ This static class provides some methods that are shared between the
+ native library pre-loader and other classes.
+
+
+
+
+ This lock is used to protect the static and
+ fields.
+
+
+
+
+ This type is only present when running on Mono.
+
+
+
+
+ This type is only present when running on .NET Core.
+
+
+
+
+ Keeps track of whether we are running on Mono. Initially null, it is
+ set by the method on its first call. Later, it
+ is returned verbatim by the method.
+
+
+
+
+ Keeps track of whether we are running on .NET Core. Initially null,
+ it is set by the method on its first
+ call. Later, it is returned verbatim by the
+ method.
+
+
+
+
+ Keeps track of whether we successfully invoked the
+ method. Initially null, it is set by
+ the method on its first call.
+
+
+
+
+ Determines the ID of the current process. Only used for debugging.
+
+
+ The ID of the current process -OR- zero if it cannot be determined.
+
+
+
+
+ Determines whether or not this assembly is running on Mono.
+
+
+ Non-zero if this assembly is running on Mono.
+
+
+
+
+ Determines whether or not this assembly is running on .NET Core.
+
+
+ Non-zero if this assembly is running on .NET Core.
+
+
+
+
+ Resets the cached value for the "PreLoadSQLite_BreakIntoDebugger"
+ configuration setting.
+
+
+
+
+ If the "PreLoadSQLite_BreakIntoDebugger" configuration setting is
+ present (e.g. via the environment), give the interactive user an
+ opportunity to attach a debugger to the current process; otherwise,
+ do nothing.
+
+
+
+
+ Determines the ID of the current thread. Only used for debugging.
+
+
+ The ID of the current thread -OR- zero if it cannot be determined.
+
+
+
+
+ Determines if the specified flags are present within the flags
+ associated with the parent connection object.
+
+
+ The flags associated with the parent connection object.
+
+
+ The flags to check for.
+
+
+ Non-zero if the specified flag or flags were present; otherwise,
+ zero.
+
+
+
+
+ Determines if preparing a query should be logged.
+
+
+ The flags associated with the parent connection object.
+
+
+ Non-zero if the query preparation should be logged; otherwise, zero.
+
+
+
+
+ Determines if pre-parameter binding should be logged.
+
+
+ The flags associated with the parent connection object.
+
+
+ Non-zero if the pre-parameter binding should be logged; otherwise,
+ zero.
+
+
+
+
+ Determines if parameter binding should be logged.
+
+
+ The flags associated with the parent connection object.
+
+
+ Non-zero if the parameter binding should be logged; otherwise, zero.
+
+
+
+
+ Determines if an exception in a native callback should be logged.
+
+
+ The flags associated with the parent connection object.
+
+
+ Non-zero if the exception should be logged; otherwise, zero.
+
+
+
+
+ Determines if backup API errors should be logged.
+
+
+ The flags associated with the parent connection object.
+
+
+ Non-zero if the backup API error should be logged; otherwise, zero.
+
+
+
+
+ Determines if logging for the class is
+ disabled.
+
+
+ The flags associated with the parent connection object.
+
+
+ Non-zero if logging for the class is
+ disabled; otherwise, zero.
+
+
+
+
+ Determines if errors should be logged.
+
+
+ The flags associated with the parent connection object.
+
+
+ Non-zero if the error should be logged;
+ otherwise, zero.
+
+
+
+
+ Determines if exceptions should be
+ logged.
+
+
+ The flags associated with the parent connection object.
+
+
+ Non-zero if the exception should be
+ logged; otherwise, zero.
+
+
+
+
+ Determines if the current process is running on one of the Windows
+ [sub-]platforms.
+
+
+ Non-zero when running on Windows; otherwise, zero.
+
+
+
+
+ This is a wrapper around the
+ method.
+ On Mono, it has to call the method overload without the
+ parameter, due to a bug in Mono.
+
+
+ This is used for culture-specific formatting.
+
+
+ The format string.
+
+
+ An array the objects to format.
+
+
+ The resulting string.
+
+
+
+
+ This static class provides a thin wrapper around the native library
+ loading features of the underlying platform.
+
+
+
+
+ This delegate is used to wrap the concept of loading a native
+ library, based on a file name, and returning the loaded module
+ handle.
+
+
+ The file name of the native library to load.
+
+
+ The native module handle upon success -OR- IntPtr.Zero on failure.
+
+
+
+
+ This delegate is used to wrap the concept of querying the machine
+ name of the current process.
+
+
+ The machine name for the current process -OR- null on failure.
+
+
+
+
+ Attempts to load the specified native library file using the Win32
+ API.
+
+
+ The file name of the native library to load.
+
+
+ The native module handle upon success -OR- IntPtr.Zero on failure.
+
+
+
+
+ Attempts to determine the machine name of the current process using
+ the Win32 API.
+
+
+ The machine name for the current process -OR- null on failure.
+
+
+
+
+ Attempts to load the specified native library file using the POSIX
+ API.
+
+
+ The file name of the native library to load.
+
+
+ The native module handle upon success -OR- IntPtr.Zero on failure.
+
+
+
+
+ Attempts to determine the machine name of the current process using
+ the POSIX API.
+
+
+ The machine name for the current process -OR- null on failure.
+
+
+
+
+ Attempts to load the specified native library file.
+
+
+ The file name of the native library to load.
+
+
+ The native module handle upon success -OR- IntPtr.Zero on failure.
+
+
+
+
+ Attempts to determine the machine name of the current process.
+
+
+ The machine name for the current process -OR- null on failure.
+
+
+
+
+ This class declares P/Invoke methods to call native POSIX APIs.
+
+
+
+
+ This structure is used when running on POSIX operating systems
+ to store information about the current machine, including the
+ human readable name of the operating system as well as that of
+ the underlying hardware.
+
+
+
+
+ This structure is passed directly to the P/Invoke method to
+ obtain the information about the current machine, including
+ the human readable name of the operating system as well as
+ that of the underlying hardware.
+
+
+
+
+ This is the P/Invoke method that wraps the native Unix uname
+ function. See the POSIX documentation for full details on what it
+ does.
+
+
+ Structure containing a preallocated byte buffer to fill with the
+ requested information.
+
+
+ Zero for success and less than zero upon failure.
+
+
+
+
+ This is the P/Invoke method that wraps the native Unix dlopen
+ function. See the POSIX documentation for full details on what it
+ does.
+
+
+ The name of the executable library.
+
+
+ This must be a combination of the individual bit flags RTLD_LAZY,
+ RTLD_NOW, RTLD_GLOBAL, and/or RTLD_LOCAL.
+
+
+ The native module handle upon success -OR- IntPtr.Zero on failure.
+
+
+
+
+ This is the P/Invoke method that wraps the native Unix dlclose
+ function. See the POSIX documentation for full details on what it
+ does.
+
+
+ The handle to the loaded native library.
+
+
+ Zero upon success -OR- non-zero on failure.
+
+
+
+
+ For use with dlopen(), bind function calls lazily.
+
+
+
+
+ For use with dlopen(), bind function calls immediately.
+
+
+
+
+ For use with dlopen(), make symbols globally available.
+
+
+
+
+ For use with dlopen(), opposite of RTLD_GLOBAL, and the default.
+
+
+
+
+ For use with dlopen(), the defaults used by this class.
+
+
+
+
+ These are the characters used to separate the string fields within
+ the raw buffer returned by the P/Invoke method.
+
+
+
+
+ This method is a wrapper around the P/Invoke
+ method that extracts and returns the human readable strings from
+ the raw buffer.
+
+
+ This structure, which contains strings, will be filled based on the
+ data placed in the raw buffer returned by the
+ P/Invoke method.
+
+
+ Non-zero upon success; otherwise, zero.
+
+
+
+
+ This class declares P/Invoke methods to call native Win32 APIs.
+
+
+
+
+ This is the P/Invoke method that wraps the native Win32 LoadLibrary
+ function. See the MSDN documentation for full details on what it
+ does.
+
+
+ The name of the executable library.
+
+
+ The native module handle upon success -OR- IntPtr.Zero on failure.
+
+
+
+
+ This is the P/Invoke method that wraps the native Win32 GetSystemInfo
+ function. See the MSDN documentation for full details on what it
+ does.
+
+
+ The system information structure to be filled in by the function.
+
+
+
+
+ This enumeration contains the possible values for the processor
+ architecture field of the system information structure.
+
+
+
+
+ This structure contains information about the current computer. This
+ includes the processor type, page size, memory addresses, etc.
+
+
+
+
+ This class declares P/Invoke methods to call native SQLite APIs.
+
+
+
+
+ The file extension used for dynamic link libraries.
+
+
+
+
+ The file extension used for the XML configuration file.
+
+
+
+
+ This is the name of the XML configuration file specific to the
+ System.Data.SQLite assembly.
+
+
+
+
+ This is the XML configuratrion file token that will be replaced with
+ the qualified path to the directory containing the XML configuration
+ file.
+
+
+
+
+ This is the environment variable token that will be replaced with
+ the qualified path to the directory containing this assembly.
+
+
+
+
+ This is the environment variable token that will be replaced with an
+ abbreviation of the target framework attribute value associated with
+ this assembly.
+
+
+
+
+ This lock is used to protect the static _SQLiteNativeModuleFileName,
+ _SQLiteNativeModuleHandle, and processorArchitecturePlatforms fields.
+
+
+
+
+ This dictionary stores the mappings between processor architecture
+ names and platform names. These mappings are now used for two
+ purposes. First, they are used to determine if the assembly code
+ base should be used instead of the location, based upon whether one
+ or more of the named sub-directories exist within the assembly code
+ base. Second, they are used to assist in loading the appropriate
+ SQLite interop assembly into the current process.
+
+
+
+
+ This is the cached return value from the
+ method -OR- null if that method
+ has never returned a valid value.
+
+
+
+
+ When this field is non-zero, it indicates the
+ method was not able to locate a
+ suitable assembly directory. The
+ method will check this
+ field and skips calls into the
+ method whenever it is non-zero.
+
+
+
+
+ This is the cached return value from the
+ method -OR- null if that method
+ has never returned a valid value.
+
+
+
+
+ When this field is non-zero, it indicates the
+ method was not able to locate a
+ suitable XML configuration file name. The
+ method will check this
+ field and skips calls into the
+ method whenever it is non-zero.
+
+
+
+
+ For now, this method simply calls the Initialize method.
+
+
+
+
+ Attempts to initialize this class by pre-loading the native SQLite
+ library for the processor architecture of the current process.
+
+
+
+
+ Combines two path strings.
+
+
+ The first path -OR- null.
+
+
+ The second path -OR- null.
+
+
+ The combined path string -OR- null if both of the original path
+ strings are null.
+
+
+
+
+ Resets the cached XML configuration file name value, thus forcing the
+ next call to method to rely
+ upon the method to fetch the
+ XML configuration file name.
+
+
+
+
+ Queries and returns the cached XML configuration file name for the
+ assembly containing the managed System.Data.SQLite components, if
+ available. If the cached XML configuration file name value is not
+ available, the method will
+ be used to obtain the XML configuration file name.
+
+
+ The XML configuration file name -OR- null if it cannot be determined
+ or does not exist.
+
+
+
+
+ Queries and returns the XML configuration file name for the assembly
+ containing the managed System.Data.SQLite components.
+
+
+ The XML configuration file name -OR- null if it cannot be determined
+ or does not exist.
+
+
+
+
+ If necessary, replaces all supported XML configuration file tokens
+ with their associated values.
+
+
+ The name of the XML configuration file being read.
+
+
+ A setting value read from the XML configuration file.
+
+
+ The value of the will all supported XML
+ configuration file tokens replaced. No return value is reserved
+ to indicate an error. This method cannot fail.
+
+
+
+
+ Queries and returns the value of the specified setting, using the
+ specified XML configuration file.
+
+
+ The name of the XML configuration file to read.
+
+
+ The name of the setting.
+
+
+ The value to be returned if the setting has not been set explicitly
+ or cannot be determined.
+
+
+ Non-zero to expand any environment variable references contained in
+ the setting value to be returned. This has no effect on the .NET
+ Compact Framework.
+
+
+ The value of the setting -OR- the default value specified by
+ if it has not been set explicitly or
+ cannot be determined.
+
+
+
+
+ Attempts to determine the target framework attribute value that is
+ associated with the specified managed assembly, if applicable.
+
+
+ The managed assembly to read the target framework attribute value
+ from.
+
+
+ The value of the target framework attribute value for the specified
+ managed assembly -OR- null if it cannot be determined. If this
+ assembly was compiled with a version of the .NET Framework prior to
+ version 4.0, the value returned MAY reflect that version of the .NET
+ Framework instead of the one associated with the specified managed
+ assembly.
+
+
+
+
+ Accepts a long target framework attribute value and makes it into a
+ much shorter version, suitable for use with NuGet packages.
+
+
+ The long target framework attribute value to convert.
+
+
+ The short target framework attribute value -OR- null if it cannot
+ be determined or converted.
+
+
+
+
+ If necessary, replaces all supported environment variable tokens
+ with their associated values.
+
+
+ A setting value read from an environment variable.
+
+
+ The value of the will all supported
+ environment variable tokens replaced. No return value is reserved
+ to indicate an error. This method cannot fail.
+
+
+
+
+ Queries and returns the value of the specified setting, using the XML
+ configuration file and/or the environment variables for the current
+ process and/or the current system, when available.
+
+
+ The name of the setting.
+
+
+ The value to be returned if the setting has not been set explicitly
+ or cannot be determined.
+
+
+ The value of the setting -OR- the default value specified by
+ if it has not been set explicitly or
+ cannot be determined. By default, all references to existing
+ environment variables will be expanded to their corresponding values
+ within the value to be returned unless either the "No_Expand" or
+ "No_Expand_" environment variable is set [to
+ anything].
+
+
+
+
+ Resets the cached assembly directory value, thus forcing the next
+ call to method to rely
+ upon the method to fetch the
+ assembly directory.
+
+
+
+
+ Queries and returns the cached directory for the assembly currently
+ being executed, if available. If the cached assembly directory value
+ is not available, the method will
+ be used to obtain the assembly directory.
+
+
+ The directory for the assembly currently being executed -OR- null if
+ it cannot be determined.
+
+
+
+
+ Queries and returns the directory for the assembly currently being
+ executed.
+
+
+ The directory for the assembly currently being executed -OR- null if
+ it cannot be determined.
+
+
+
+
+ The name of the environment variable containing the processor
+ architecture of the current process.
+
+
+
+
+ The native module file name for the native SQLite library or null.
+
+
+
+
+ The native module handle for the native SQLite library or the value
+ IntPtr.Zero.
+
+
+
+
+ Determines the base file name (without any directory information)
+ for the native SQLite library to be pre-loaded by this class.
+
+
+ The base file name for the native SQLite library to be pre-loaded by
+ this class -OR- null if its value cannot be determined.
+
+
+
+
+ Searches for the native SQLite library in the directory containing
+ the assembly currently being executed as well as the base directory
+ for the current application domain.
+
+
+ Upon success, this parameter will be modified to refer to the base
+ directory containing the native SQLite library.
+
+
+ Upon success, this parameter will be modified to refer to the name
+ of the immediate directory (i.e. the offset from the base directory)
+ containing the native SQLite library.
+
+
+ Upon success, this parameter will be modified to non-zero only if
+ the base directory itself should be allowed for loading the native
+ library.
+
+
+ Non-zero (success) if the native SQLite library was found; otherwise,
+ zero (failure).
+
+
+
+
+ Queries and returns the base directory of the current application
+ domain.
+
+
+ The base directory for the current application domain -OR- null if it
+ cannot be determined.
+
+
+
+
+ Determines if the dynamic link library file name requires a suffix
+ and adds it if necessary.
+
+
+ The original dynamic link library file name to inspect.
+
+
+ The dynamic link library file name, possibly modified to include an
+ extension.
+
+
+
+
+ Queries and returns the processor architecture of the current
+ process.
+
+
+ The processor architecture of the current process -OR- null if it
+ cannot be determined.
+
+
+
+
+ Given the processor architecture, returns the name of the platform.
+
+
+ The processor architecture to be translated to a platform name.
+
+
+ The platform name for the specified processor architecture -OR- null
+ if it cannot be determined.
+
+
+
+
+ Attempts to load the native SQLite library based on the specified
+ directory and processor architecture.
+
+
+ The base directory to use, null for default (the base directory of
+ the current application domain). This directory should contain the
+ processor architecture specific sub-directories.
+
+
+ The requested processor architecture, null for default (the
+ processor architecture of the current process). This caller should
+ almost always specify null for this parameter.
+
+
+ Non-zero indicates that the native SQLite library can be loaded
+ from the base directory itself.
+
+
+ The candidate native module file name to load will be stored here,
+ if necessary.
+
+
+ The native module handle as returned by LoadLibrary will be stored
+ here, if necessary. This value will be IntPtr.Zero if the call to
+ LoadLibrary fails.
+
+
+ Non-zero if the native module was loaded successfully; otherwise,
+ zero.
+
+
+
+
+ A strongly-typed resource class, for looking up localized strings, etc.
+
+
+
+
+ Returns the cached ResourceManager instance used by this class.
+
+
+
+
+ Overrides the current thread's CurrentUICulture property for all
+ resource lookups using this strongly typed resource class.
+
+
+
+
+ Looks up a localized string similar to <?xml version="1.0" standalone="yes"?>
+ <DocumentElement>
+ <DataTypes>
+ <TypeName>smallint</TypeName>
+ <ProviderDbType>10</ProviderDbType>
+ <ColumnSize>5</ColumnSize>
+ <DataType>System.Int16</DataType>
+ <CreateFormat>smallint</CreateFormat>
+ <IsAutoIncrementable>false</IsAutoIncrementable>
+ <IsCaseSensitive>false</IsCaseSensitive>
+ <IsFixedLength>true</IsFixedLength>
+ <IsFixedPrecisionScale>true</IsFixedPrecisionScale>
+ <IsLong>false</IsLong>
+ <IsNullable>true</ [rest of string was truncated]";.
+
+
+
+
+ Looks up a localized string similar to ALL,ALTER,AND,AS,AUTOINCREMENT,BETWEEN,BY,CASE,CHECK,COLLATE,COMMIT,CONSTRAINT,CREATE,CROSS,DEFAULT,DEFERRABLE,DELETE,DISTINCT,DROP,ELSE,ESCAPE,EXCEPT,FOREIGN,FROM,FULL,GROUP,HAVING,IN,INDEX,INNER,INSERT,INTERSECT,INTO,IS,ISNULL,JOIN,LEFT,LIMIT,NATURAL,NOT,NOTNULL,NULL,ON,OR,ORDER,OUTER,PRIMARY,REFERENCES,RIGHT,ROLLBACK,SELECT,SET,TABLE,THEN,TO,TRANSACTION,UNION,UNIQUE,UPDATE,USING,VALUES,WHEN,WHERE.
+
+
+
+
+ Looks up a localized string similar to <?xml version="1.0" encoding="utf-8" ?>
+ <DocumentElement>
+ <MetaDataCollections>
+ <CollectionName>MetaDataCollections</CollectionName>
+ <NumberOfRestrictions>0</NumberOfRestrictions>
+ <NumberOfIdentifierParts>0</NumberOfIdentifierParts>
+ </MetaDataCollections>
+ <MetaDataCollections>
+ <CollectionName>DataSourceInformation</CollectionName>
+ <NumberOfRestrictions>0</NumberOfRestrictions>
+ <NumberOfIdentifierParts>0</NumberOfIdentifierParts>
+ </MetaDataCollections>
+ <MetaDataC [rest of string was truncated]";.
+
+
+
+
+ This interface represents a virtual table implementation written in
+ native code.
+
+
+
+
+
+ int (*xCreate)(sqlite3 *db, void *pAux,
+ int argc, char *const*argv,
+ sqlite3_vtab **ppVTab,
+ char **pzErr);
+
+
+ The xCreate method is called to create a new instance of a virtual table
+ in response to a CREATE VIRTUAL TABLE statement.
+ If the xCreate method is the same pointer as the xConnect method, then the
+ virtual table is an eponymous virtual table.
+ If the xCreate method is omitted (if it is a NULL pointer) then the virtual
+ table is an eponymous-only virtual table.
+
+
+ The db parameter is a pointer to the SQLite database connection that
+ is executing the CREATE VIRTUAL TABLE statement.
+ The pAux argument is the copy of the client data pointer that was the
+ fourth argument to the sqlite3_create_module() or
+ sqlite3_create_module_v2() call that registered the
+ virtual table module.
+ The argv parameter is an array of argc pointers to null terminated strings.
+ The first string, argv[0], is the name of the module being invoked. The
+ module name is the name provided as the second argument to
+ sqlite3_create_module() and as the argument to the USING clause of the
+ CREATE VIRTUAL TABLE statement that is running.
+ The second, argv[1], is the name of the database in which the new virtual table is being created. The database name is "main" for the primary database, or
+ "temp" for TEMP database, or the name given at the end of the ATTACH
+ statement for attached databases. The third element of the array, argv[2],
+ is the name of the new virtual table, as specified following the TABLE
+ keyword in the CREATE VIRTUAL TABLE statement.
+ If present, the fourth and subsequent strings in the argv[] array report
+ the arguments to the module name in the CREATE VIRTUAL TABLE statement.
+
+
+ The job of this method is to construct the new virtual table object
+ (an sqlite3_vtab object) and return a pointer to it in *ppVTab.
+
+
+ As part of the task of creating a new sqlite3_vtab structure, this
+ method must invoke sqlite3_declare_vtab() to tell the SQLite
+ core about the columns and datatypes in the virtual table.
+ The sqlite3_declare_vtab() API has the following prototype:
+
+
+ int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable)
+
+
+ The first argument to sqlite3_declare_vtab() must be the same
+ database connection pointer as the first parameter to this method.
+ The second argument to sqlite3_declare_vtab() must a zero-terminated
+ UTF-8 string that contains a well-formed CREATE TABLE statement that
+ defines the columns in the virtual table and their data types.
+ The name of the table in this CREATE TABLE statement is ignored,
+ as are all constraints. Only the column names and datatypes matter.
+ The CREATE TABLE statement string need not to be
+ held in persistent memory. The string can be
+ deallocated and/or reused as soon as the sqlite3_declare_vtab()
+ routine returns.
+
+
+ The xCreate method need not initialize the pModule, nRef, and zErrMsg
+ fields of the sqlite3_vtab object. The SQLite core will take care of
+ that chore.
+
+
+ The xCreate should return SQLITE_OK if it is successful in
+ creating the new virtual table, or SQLITE_ERROR if it is not successful.
+ If not successful, the sqlite3_vtab structure must not be allocated.
+ An error message may optionally be returned in *pzErr if unsuccessful.
+ Space to hold the error message string must be allocated using
+ an SQLite memory allocation function like
+ sqlite3_malloc() or sqlite3_mprintf() as the SQLite core will
+ attempt to free the space using sqlite3_free() after the error has
+ been reported up to the application.
+
+
+ If the xCreate method is omitted (left as a NULL pointer) then the
+ virtual table is an eponymous-only virtual table. New instances of
+ the virtual table cannot be created using CREATE VIRTUAL TABLE and the
+ virtual table can only be used via its module name.
+ Note that SQLite versions prior to 3.9.0 (2015-10-14) do not understand
+ eponymous-only virtual tables and will segfault if an attempt is made
+ to CREATE VIRTUAL TABLE on an eponymous-only virtual table because
+ the xCreate method was not checked for null.
+
+
+ If the xCreate method is the exact same pointer as the xConnect method,
+ that indicates that the virtual table does not need to initialize backing
+ store. Such a virtual table can be used as an eponymous virtual table
+ or as a named virtual table using CREATE VIRTUAL TABLE or both.
+
+
+ If a column datatype contains the special keyword "HIDDEN"
+ (in any combination of upper and lower case letters) then that keyword
+ it is omitted from the column datatype name and the column is marked
+ as a hidden column internally.
+ A hidden column differs from a normal column in three respects:
+
+
+ ]]>
+ ]]> Hidden columns are not listed in the dataset returned by
+ "PRAGMA table_info",
+ ]]>]]> Hidden columns are not included in the expansion of a "*"
+ expression in the result set of a SELECT, and
+ ]]>]]> Hidden columns are not included in the implicit column-list
+ used by an INSERT statement that lacks an explicit column-list.
+ ]]>]]>
+
+
+ For example, if the following SQL is passed to sqlite3_declare_vtab():
+
+
+ CREATE TABLE x(a HIDDEN VARCHAR(12), b INTEGER, c INTEGER Hidden);
+
+
+ Then the virtual table would be created with two hidden columns,
+ and with datatypes of "VARCHAR(12)" and "INTEGER".
+
+
+ An example use of hidden columns can be seen in the FTS3 virtual
+ table implementation, where every FTS virtual table
+ contains an FTS hidden column that is used to pass information from the
+ virtual table into FTS auxiliary functions and to the FTS MATCH operator.
+
+
+ A virtual table that contains hidden columns can be used like
+ a table-valued function in the FROM clause of a SELECT statement.
+ The arguments to the table-valued function become constraints on
+ the HIDDEN columns of the virtual table.
+
+
+ For example, the "generate_series" extension (located in the
+ ext/misc/series.c
+ file in the source tree)
+ implements an eponymous virtual table with the following schema:
+
+
+ CREATE TABLE generate_series(
+ value,
+ start HIDDEN,
+ stop HIDDEN,
+ step HIDDEN
+ );
+
+
+ The sqlite3_module.xBestIndex method in the implementation of this
+ table checks for equality constraints against the HIDDEN columns, and uses
+ those as input parameters to determine the range of integer "value" outputs
+ to generate. Reasonable defaults are used for any unconstrained columns.
+ For example, to list all integers between 5 and 50:
+
+
+ SELECT value FROM generate_series(5,50);
+
+
+ The previous query is equivalent to the following:
+
+
+ SELECT value FROM generate_series WHERE start=5 AND stop=50;
+
+
+ Arguments on the virtual table name are matched to hidden columns
+ in order. The number of arguments can be less than the
+ number of hidden columns, in which case the latter hidden columns are
+ unconstrained. However, an error results if there are more arguments
+ than there are hidden columns in the virtual table.
+
+
+ Beginning with SQLite version 3.14.0 (2016-08-08),
+ the CREATE TABLE statement that
+ is passed into sqlite3_declare_vtab() may contain a WITHOUT ROWID clause.
+ This is useful for cases where the virtual table rows
+ cannot easily be mapped into unique integers. A CREATE TABLE
+ statement that includes WITHOUT ROWID must define one or more columns as
+ the PRIMARY KEY. Every column of the PRIMARY KEY must individually be
+ NOT NULL and all columns for each row must be collectively unique.
+
+
+ Note that SQLite does not enforce the PRIMARY KEY for a WITHOUT ROWID
+ virtual table. Enforcement is the responsibility of the underlying
+ virtual table implementation. But SQLite does assume that the PRIMARY KEY
+ constraint is valid - that the identified columns really are UNIQUE and
+ NOT NULL - and it uses that assumption to optimize queries against the
+ virtual table.
+
+
+ The rowid column is not accessible on a
+ WITHOUT ROWID virtual table (of course).
+
+
+ The xUpdate method was originally designed around having a
+ ROWID as a single value. The xUpdate method has been expanded to
+ accommodate an arbitrary PRIMARY KEY in place of the ROWID, but the
+ PRIMARY KEY must still be only one column. For this reason, SQLite
+ will reject any WITHOUT ROWID virtual table that has more than one
+ PRIMARY KEY column and a non-NULL xUpdate method.
+
+
+
+ The native database connection handle.
+
+
+ The original native pointer value that was provided to the
+ sqlite3_create_module(), sqlite3_create_module_v2() or
+ sqlite3_create_disposable_module() functions.
+
+
+ The number of arguments from the CREATE VIRTUAL TABLE statement.
+
+
+ The array of string arguments from the CREATE VIRTUAL TABLE
+ statement.
+
+
+ Upon success, this parameter must be modified to point to the newly
+ created native sqlite3_vtab derived structure.
+
+
+ Upon failure, this parameter must be modified to point to the error
+ message, with the underlying memory having been obtained from the
+ sqlite3_malloc() function.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xConnect)(sqlite3*, void *pAux,
+ int argc, char *const*argv,
+ sqlite3_vtab **ppVTab,
+ char **pzErr);
+
+
+ The xConnect method is very similar to xCreate.
+ It has the same parameters and constructs a new sqlite3_vtab structure
+ just like xCreate.
+ And it must also call sqlite3_declare_vtab() like xCreate.
+
+
+ The difference is that xConnect is called to establish a new
+ connection to an existing virtual table whereas xCreate is called
+ to create a new virtual table from scratch.
+
+
+ The xCreate and xConnect methods are only different when the
+ virtual table has some kind of backing store that must be initialized
+ the first time the virtual table is created. The xCreate method creates
+ and initializes the backing store. The xConnect method just connects
+ to an existing backing store. When xCreate and xConnect are the same,
+ the table is an eponymous virtual table.
+
+
+ As an example, consider a virtual table implementation that
+ provides read-only access to existing comma-separated-value (CSV)
+ files on disk. There is no backing store that needs to be created
+ or initialized for such a virtual table (since the CSV files already
+ exist on disk) so the xCreate and xConnect methods will be identical
+ for that module.
+
+
+ Another example is a virtual table that implements a full-text index.
+ The xCreate method must create and initialize data structures to hold
+ the dictionary and posting lists for that index. The xConnect method,
+ on the other hand, only has to locate and use an existing dictionary
+ and posting lists that were created by a prior xCreate call.
+
+
+ The xConnect method must return SQLITE_OK if it is successful
+ in creating the new virtual table, or SQLITE_ERROR if it is not
+ successful. If not successful, the sqlite3_vtab structure must not be
+ allocated. An error message may optionally be returned in *pzErr if
+ unsuccessful.
+ Space to hold the error message string must be allocated using
+ an SQLite memory allocation function like
+ sqlite3_malloc() or sqlite3_mprintf() as the SQLite core will
+ attempt to free the space using sqlite3_free() after the error has
+ been reported up to the application.
+
+
+ The xConnect method is required for every virtual table implementation,
+ though the xCreate and xConnect pointers of the sqlite3_module object
+ may point to the same function if the virtual table does not need to
+ initialize backing store.
+
+
+
+ The native database connection handle.
+
+
+ The original native pointer value that was provided to the
+ sqlite3_create_module(), sqlite3_create_module_v2() or
+ sqlite3_create_disposable_module() functions.
+
+
+ The number of arguments from the CREATE VIRTUAL TABLE statement.
+
+
+ The array of string arguments from the CREATE VIRTUAL TABLE
+ statement.
+
+
+ Upon success, this parameter must be modified to point to the newly
+ created native sqlite3_vtab derived structure.
+
+
+ Upon failure, this parameter must be modified to point to the error
+ message, with the underlying memory having been obtained from the
+ sqlite3_malloc() function.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ SQLite uses the xBestIndex method of a virtual table module to determine
+ the best way to access the virtual table.
+ The xBestIndex method has a prototype like this:
+
+
+ int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);
+
+
+ The SQLite core communicates with the xBestIndex method by filling
+ in certain fields of the sqlite3_index_info structure and passing a
+ pointer to that structure into xBestIndex as the second parameter.
+ The xBestIndex method fills out other fields of this structure which
+ forms the reply. The sqlite3_index_info structure looks like this:
+
+
+ struct sqlite3_index_info {
+ /* Inputs */
+ const int nConstraint; /* Number of entries in aConstraint */
+ const struct sqlite3_index_constraint {
+ int iColumn; /* Column constrained. -1 for ROWID */
+ unsigned char op; /* Constraint operator */
+ unsigned char usable; /* True if this constraint is usable */
+ int iTermOffset; /* Used internally - xBestIndex should ignore */
+ } *const aConstraint; /* Table of WHERE clause constraints */
+ const int nOrderBy; /* Number of terms in the ORDER BY clause */
+ const struct sqlite3_index_orderby {
+ int iColumn; /* Column number */
+ unsigned char desc; /* True for DESC. False for ASC. */
+ } *const aOrderBy; /* The ORDER BY clause */
+ /* Outputs */
+ struct sqlite3_index_constraint_usage {
+ int argvIndex; /* if >0, constraint is part of argv to xFilter */
+ unsigned char omit; /* Do not code a test for this constraint */
+ } *const aConstraintUsage;
+ int idxNum; /* Number used to identify the index */
+ char *idxStr; /* String, possibly obtained from sqlite3_malloc */
+ int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if true */
+ int orderByConsumed; /* True if output is already ordered */
+ double estimatedCost; /* Estimated cost of using this index */
+ ]]>/* Fields below are only available in SQLite 3.8.2 and later */]]>
+ sqlite3_int64 estimatedRows; /* Estimated number of rows returned */
+ ]]>/* Fields below are only available in SQLite 3.9.0 and later */]]>
+ int idxFlags; /* Mask of SQLITE_INDEX_SCAN_* flags */
+ ]]>/* Fields below are only available in SQLite 3.10.0 and later */]]>
+ sqlite3_uint64 colUsed; /* Input: Mask of columns used by statement */
+ };
+
+
+ Note the warnings on the "estimatedRows", "idxFlags", and colUsed fields.
+ These fields were added with SQLite versions 3.8.2, 3.9.0, and 3.10.0, respectively.
+ Any extension that reads or writes these fields must first check that the
+ version of the SQLite library in use is greater than or equal to appropriate
+ version - perhaps comparing the value returned from sqlite3_libversion_number()
+ against constants 3008002, 3009000, and/or 3010000. The result of attempting
+ to access these fields in an sqlite3_index_info structure created by an
+ older version of SQLite are undefined.
+
+
+ In addition, there are some defined constants:
+
+
+ #define SQLITE_INDEX_CONSTRAINT_EQ 2
+ #define SQLITE_INDEX_CONSTRAINT_GT 4
+ #define SQLITE_INDEX_CONSTRAINT_LE 8
+ #define SQLITE_INDEX_CONSTRAINT_LT 16
+ #define SQLITE_INDEX_CONSTRAINT_GE 32
+ #define SQLITE_INDEX_CONSTRAINT_MATCH 64
+ #define SQLITE_INDEX_CONSTRAINT_LIKE 65 /* 3.10.0 and later */
+ #define SQLITE_INDEX_CONSTRAINT_GLOB 66 /* 3.10.0 and later */
+ #define SQLITE_INDEX_CONSTRAINT_REGEXP 67 /* 3.10.0 and later */
+ #define SQLITE_INDEX_CONSTRAINT_NE 68 /* 3.21.0 and later */
+ #define SQLITE_INDEX_CONSTRAINT_ISNOT 69 /* 3.21.0 and later */
+ #define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70 /* 3.21.0 and later */
+ #define SQLITE_INDEX_CONSTRAINT_ISNULL 71 /* 3.21.0 and later */
+ #define SQLITE_INDEX_CONSTRAINT_IS 72 /* 3.21.0 and later */
+ #define SQLITE_INDEX_CONSTRAINT_FUNCTION 150 /* 3.25.0 and later */
+ #define SQLITE_INDEX_SCAN_UNIQUE 1 /* Scan visits at most 1 row */
+
+
+ The SQLite core calls the xBestIndex method when it is compiling a query
+ that involves a virtual table. In other words, SQLite calls this method
+ when it is running sqlite3_prepare() or the equivalent.
+ By calling this method, the
+ SQLite core is saying to the virtual table that it needs to access
+ some subset of the rows in the virtual table and it wants to know the
+ most efficient way to do that access. The xBestIndex method replies
+ with information that the SQLite core can then use to conduct an
+ efficient search of the virtual table.
+
+
+ While compiling a single SQL query, the SQLite core might call
+ xBestIndex multiple times with different settings in sqlite3_index_info.
+ The SQLite core will then select the combination that appears to
+ give the best performance.
+
+
+ Before calling this method, the SQLite core initializes an instance
+ of the sqlite3_index_info structure with information about the
+ query that it is currently trying to process. This information
+ derives mainly from the WHERE clause and ORDER BY or GROUP BY clauses
+ of the query, but also from any ON or USING clauses if the query is a
+ join. The information that the SQLite core provides to the xBestIndex
+ method is held in the part of the structure that is marked as "Inputs".
+ The "Outputs" section is initialized to zero.
+
+
+ The information in the sqlite3_index_info structure is ephemeral
+ and may be overwritten or deallocated as soon as the xBestIndex method
+ returns. If the xBestIndex method needs to remember any part of the
+ sqlite3_index_info structure, it should make a copy. Care must be
+ take to store the copy in a place where it will be deallocated, such
+ as in the idxStr field with needToFreeIdxStr set to 1.
+
+
+ Note that xBestIndex will always be called before xFilter, since
+ the idxNum and idxStr outputs from xBestIndex are required inputs to
+ xFilter. However, there is no guarantee that xFilter will be called
+ following a successful xBestIndex.
+
+
+ The xBestIndex method is required for every virtual table implementation.
+
+
+ The main thing that the SQLite core is trying to communicate to
+ the virtual table is the constraints that are available to limit
+ the number of rows that need to be searched. The aConstraint[] array
+ contains one entry for each constraint. There will be exactly
+ nConstraint entries in that array.
+
+
+ Each constraint will usually correspond to a term in the WHERE clause
+ or in a USING or ON clause that is of the form
+
+
+ column OP EXPR
+
+
+ Where "column" is a column in the virtual table, OP is an operator
+ like "=" or "<", and EXPR is an arbitrary expression. So, for example,
+ if the WHERE clause contained a term like this:
+
+
+ a = 5
+
+
+ Then one of the constraints would be on the "a" column with
+ operator "=" and an expression of "5". Constraints need not have a
+ literal representation of the WHERE clause. The query optimizer might
+ make transformations to the
+ WHERE clause in order to extract as many constraints
+ as it can. So, for example, if the WHERE clause contained something
+ like this:
+
+
+ x BETWEEN 10 AND 100 AND 999>y
+
+
+ The query optimizer might translate this into three separate constraints:
+
+
+ x >= 10
+ x <= 100
+ y < 999
+
+
+ For each such constraint, the aConstraint[].iColumn field indicates which
+ column appears on the left-hand side of the constraint.
+ The first column of the virtual table is column 0.
+ The rowid of the virtual table is column -1.
+ The aConstraint[].op field indicates which operator is used.
+ The SQLITE_INDEX_CONSTRAINT_* constants map integer constants
+ into operator values.
+ Columns occur in the order they were defined by the call to
+ sqlite3_declare_vtab() in the xCreate or xConnect method.
+ Hidden columns are counted when determining the column index.
+
+
+ If the xFindFunction() method for the virtual table is defined, and
+ if xFindFunction() sometimes returns SQLITE_INDEX_CONSTRAINT_FUNCTION or
+ larger, then the constraints might also be of the form:
+
+
+ FUNCTION( column, EXPR)
+
+
+ In this case the aConstraint[].op value is the same as the value
+ returned by xFindFunction() for FUNCTION.
+
+
+ The aConstraint[] array contains information about all constraints
+ that apply to the virtual table. But some of the constraints might
+ not be usable because of the way tables are ordered in a join.
+ The xBestIndex method must therefore only consider constraints
+ that have an aConstraint[].usable flag which is true.
+
+
+ In addition to WHERE clause constraints, the SQLite core also
+ tells the xBestIndex method about the ORDER BY clause.
+ (In an aggregate query, the SQLite core might put in GROUP BY clause
+ information in place of the ORDER BY clause information, but this fact
+ should not make any difference to the xBestIndex method.)
+ If all terms of the ORDER BY clause are columns in the virtual table,
+ then nOrderBy will be the number of terms in the ORDER BY clause
+ and the aOrderBy[] array will identify the column for each term
+ in the order by clause and whether or not that column is ASC or DESC.
+
+
+ In SQLite version 3.10.0 (2016-01-06) and later,
+ the colUsed field is available
+ to indicate which fields of the virtual table are actually used by the
+ statement being prepared. If the lowest bit of colUsed is set, that
+ means that the first column is used. The second lowest bit corresponds
+ to the second column. And so forth. If the most significant bit of
+ colUsed is set, that means that one or more columns other than the
+ first 63 columns are used. If column usage information is needed by the
+ xFilter method, then the required bits must be encoded into either
+ the idxNum or idxStr output fields.
+
+
+ Given all of the information above, the job of the xBestIndex
+ method it to figure out the best way to search the virtual table.
+
+
+ The xBestIndex method fills the idxNum and idxStr fields with
+ information that communicates an indexing strategy to the xFilter
+ method. The information in idxNum and idxStr is arbitrary as far
+ as the SQLite core is concerned. The SQLite core just copies the
+ information through to the xFilter method. Any desired meaning can
+ be assigned to idxNum and idxStr as long as xBestIndex and xFilter
+ agree on what that meaning is.
+
+
+ The idxStr value may be a string obtained from an SQLite
+ memory allocation function such as sqlite3_mprintf().
+ If this is the case, then the needToFreeIdxStr flag must be set to
+ true so that the SQLite core will know to call sqlite3_free() on
+ that string when it has finished with it, and thus avoid a memory leak.
+ The idxStr value may also be a static constant string, in which case
+ the needToFreeIdxStr boolean should remain false.
+
+
+ If the virtual table will output rows in the order specified by
+ the ORDER BY clause, then the orderByConsumed flag may be set to
+ true. If the output is not automatically in the correct order
+ then orderByConsumed must be left in its default false setting.
+ This will indicate to the SQLite core that it will need to do a
+ separate sorting pass over the data after it comes out of the virtual table.
+
+
+ The estimatedCost field should be set to the estimated number
+ of disk access operations required to execute this query against
+ the virtual table. The SQLite core will often call xBestIndex
+ multiple times with different constraints, obtain multiple cost
+ estimates, then choose the query plan that gives the lowest estimate.
+ The SQLite core initializes estimatedCost to a very large value
+ prior to invoking xBestIndex, so if xBestIndex determines that the
+ current combination of parameters is undesirable, it can leave the
+ estimatedCost field unchanged to discourage its use.
+
+
+ If the current version of SQLite is 3.8.2 or greater, the estimatedRows
+ field may be set to an estimate of the number of rows returned by the
+ proposed query plan. If this value is not explicitly set, the default
+ estimate of 25 rows is used.
+
+
+ If the current version of SQLite is 3.9.0 or greater, the idxFlags field
+ may be set to SQLITE_INDEX_SCAN_UNIQUE to indicate that the virtual table
+ will return only zero or one rows given the input constraints. Additional
+ bits of the idxFlags field might be understood in later versions of SQLite.
+
+
+ The aConstraintUsage[] array contains one element for each of
+ the nConstraint constraints in the inputs section of the
+ sqlite3_index_info structure.
+ The aConstraintUsage[] array is used by xBestIndex to tell the
+ core how it is using the constraints.
+
+
+ The xBestIndex method may set aConstraintUsage[].argvIndex
+ entries to values greater than zero.
+ Exactly one entry should be set to 1, another to 2, another to 3,
+ and so forth up to as many or as few as the xBestIndex method wants.
+ The EXPR of the corresponding constraints will then be passed
+ in as the argv[] parameters to xFilter.
+
+
+ For example, if the aConstraint[3].argvIndex is set to 1, then
+ when xFilter is called, the argv[0] passed to xFilter will have
+ the EXPR value of the aConstraint[3] constraint.
+
+
+ By default, the SQLite core double checks all constraints on
+ each row of the virtual table that it receives. If such a check
+ is redundant, the xBestFilter method can suppress that double-check by
+ setting aConstraintUsage[].omit.
+
+
+ The xBestIndex method should return SQLITE_OK on success. If any
+ kind of fatal error occurs, an appropriate error code (ex: SQLITE_NOMEM)
+ should be returned instead.
+
+
+ If xBestIndex returns SQLITE_CONSTRAINT, that does not indicate an
+ error. Rather, SQLITE_CONSTRAINT indicates that the particular combination
+ of input parameters specified should not be used in the query plan.
+ The SQLITE_CONSTRAINT return is useful for table-valued functions that
+ have required parameters. If the aConstraint[].usable field is false
+ for one of the required parameter, then the xBestIndex method should
+ return SQLITE_CONSTRAINT.
+
+
+ The following example will better illustrate the use of SQLITE_CONSTRAINT
+ as a return value from xBestIndex:
+
+
+ SELECT * FROM realtab, tablevaluedfunc(realtab.x);
+
+
+ Assuming that the first hidden column of "tablevaluedfunc" is "param1",
+ the query above is semantically equivalent to this:
+
+
+ SELECT * FROM realtab, tablevaluedfunc
+ WHERE tablevaluedfunc.param1 = realtab.x;
+
+
+ The query planner must decide between many possible implementations
+ of this query, but two plans in particular are of note:
+
+ ]]>
+ ]]>Scan all
+ rows of realtab and for each row, find rows in tablevaluedfunc where
+ param1 is equal to realtab.x
+ ]]>]]>Scan all rows of tablevalued func and for each row find rows
+ in realtab where x is equal to tablevaluedfunc.param1.
+ ]]>]]>
+
+ The xBestIndex method will be invoked once for each of the potential
+ plans above. For plan 1, the aConstraint[].usable flag for for the
+ SQLITE_CONSTRAINT_EQ constraint on the param1 column will be true because
+ the right-hand side value for the "param1 = ?" constraint will be known,
+ since it is determined by the outer realtab loop.
+ But for plan 2, the aConstraint[].usable flag for "param1 = ?" will be false
+ because the right-hand side value is determined by an inner loop and is thus
+ an unknown quantity. Because param1 is a required input to the table-valued
+ functions, the xBestIndex method should return SQLITE_CONSTRAINT when presented
+ with plan 2, indicating that a required input is missing. This forces the
+ query planner to select plan 1.
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ The native pointer to the sqlite3_index_info structure.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xDisconnect)(sqlite3_vtab *pVTab);
+
+
+ This method releases a connection to a virtual table.
+ Only the sqlite3_vtab object is destroyed.
+ The virtual table is not destroyed and any backing store
+ associated with the virtual table persists.
+
+ This method undoes the work of xConnect.
+
+ This method is a destructor for a connection to the virtual table.
+ Contrast this method with xDestroy. The xDestroy is a destructor
+ for the entire virtual table.
+
+
+ The xDisconnect method is required for every virtual table implementation,
+ though it is acceptable for the xDisconnect and xDestroy methods to be
+ the same function if that makes sense for the particular virtual table.
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xDestroy)(sqlite3_vtab *pVTab);
+
+
+ This method releases a connection to a virtual table, just like
+ the xDisconnect method, and it also destroys the underlying
+ table implementation. This method undoes the work of xCreate.
+
+
+ The xDisconnect method is called whenever a database connection
+ that uses a virtual table is closed. The xDestroy method is only
+ called when a DROP TABLE statement is executed against the virtual table.
+
+
+ The xDestroy method is required for every virtual table implementation,
+ though it is acceptable for the xDisconnect and xDestroy methods to be
+ the same function if that makes sense for the particular virtual table.
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor);
+
+
+ The xOpen method creates a new cursor used for accessing (read and/or
+ writing) a virtual table. A successful invocation of this method
+ will allocate the memory for the sqlite3_vtab_cursor (or a subclass),
+ initialize the new object, and make *ppCursor point to the new object.
+ The successful call then returns SQLITE_OK.
+
+
+ For every successful call to this method, the SQLite core will
+ later invoke the xClose method to destroy
+ the allocated cursor.
+
+
+ The xOpen method need not initialize the pVtab field of the
+ sqlite3_vtab_cursor structure. The SQLite core will take care
+ of that chore automatically.
+
+
+ A virtual table implementation must be able to support an arbitrary
+ number of simultaneously open cursors.
+
+
+ When initially opened, the cursor is in an undefined state.
+ The SQLite core will invoke the xFilter method
+ on the cursor prior to any attempt to position or read from the cursor.
+
+
+ The xOpen method is required for every virtual table implementation.
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ Upon success, this parameter must be modified to point to the newly
+ created native sqlite3_vtab_cursor derived structure.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xClose)(sqlite3_vtab_cursor*);
+
+
+ The xClose method closes a cursor previously opened by
+ xOpen.
+ The SQLite core will always call xClose once for each cursor opened
+ using xOpen.
+
+
+ This method must release all resources allocated by the
+ corresponding xOpen call. The routine will not be called again even if it
+ returns an error. The SQLite core will not use the
+ sqlite3_vtab_cursor again after it has been closed.
+
+
+ The xClose method is required for every virtual table implementation.
+
+
+
+ The native pointer to the sqlite3_vtab_cursor derived structure.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr,
+ int argc, sqlite3_value **argv);
+
+
+ This method begins a search of a virtual table.
+ The first argument is a cursor opened by xOpen.
+ The next two arguments define a particular search index previously
+ chosen by xBestIndex. The specific meanings of idxNum and idxStr
+ are unimportant as long as xFilter and xBestIndex agree on what
+ that meaning is.
+
+
+ The xBestIndex function may have requested the values of
+ certain expressions using the aConstraintUsage[].argvIndex values
+ of the sqlite3_index_info structure.
+ Those values are passed to xFilter using the argc and argv parameters.
+
+
+ If the virtual table contains one or more rows that match the
+ search criteria, then the cursor must be left point at the first row.
+ Subsequent calls to xEof must return false (zero).
+ If there are no rows match, then the cursor must be left in a state
+ that will cause the xEof to return true (non-zero).
+ The SQLite engine will use
+ the xColumn and xRowid methods to access that row content.
+ The xNext method will be used to advance to the next row.
+
+
+ This method must return SQLITE_OK if successful, or an sqlite
+ error code if an error occurs.
+
+
+ The xFilter method is required for every virtual table implementation.
+
+
+
+ The native pointer to the sqlite3_vtab_cursor derived structure.
+
+
+ Number used to help identify the selected index.
+
+
+ The native pointer to the UTF-8 encoded string containing the
+ string used to help identify the selected index.
+
+
+ The number of native pointers to sqlite3_value structures specified
+ in .
+
+
+ An array of native pointers to sqlite3_value structures containing
+ filtering criteria for the selected index.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xNext)(sqlite3_vtab_cursor*);
+
+
+ The xNext method advances a virtual table cursor
+ to the next row of a result set initiated by xFilter.
+ If the cursor is already pointing at the last row when this
+ routine is called, then the cursor no longer points to valid
+ data and a subsequent call to the xEof method must return true (non-zero).
+ If the cursor is successfully advanced to another row of content, then
+ subsequent calls to xEof must return false (zero).
+
+
+ This method must return SQLITE_OK if successful, or an sqlite
+ error code if an error occurs.
+
+
+ The xNext method is required for every virtual table implementation.
+
+
+
+ The native pointer to the sqlite3_vtab_cursor derived structure.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xEof)(sqlite3_vtab_cursor*);
+
+
+ The xEof method must return false (zero) if the specified cursor
+ currently points to a valid row of data, or true (non-zero) otherwise.
+ This method is called by the SQL engine immediately after each
+ xFilter and xNext invocation.
+
+
+ The xEof method is required for every virtual table implementation.
+
+
+
+ The native pointer to the sqlite3_vtab_cursor derived structure.
+
+
+ Non-zero if no more rows are available; zero otherwise.
+
+
+
+
+
+ int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int N);
+
+
+ The SQLite core invokes this method in order to find the value for
+ the N-th column of the current row. N is zero-based so the first column
+ is numbered 0.
+ The xColumn method may return its result back to SQLite using one of the
+ following interface:
+
+
+ ]]>
+ ]]> sqlite3_result_blob()
+ ]]>]]> sqlite3_result_double()
+ ]]>]]> sqlite3_result_int()
+ ]]>]]> sqlite3_result_int64()
+ ]]>]]> sqlite3_result_null()
+ ]]>]]> sqlite3_result_text()
+ ]]>]]> sqlite3_result_text16()
+ ]]>]]> sqlite3_result_text16le()
+ ]]>]]> sqlite3_result_text16be()
+ ]]>]]> sqlite3_result_zeroblob()
+ ]]>]]>
+
+
+ If the xColumn method implementation calls none of the functions above,
+ then the value of the column defaults to an SQL NULL.
+
+
+ To raise an error, the xColumn method should use one of the result_text()
+ methods to set the error message text, then return an appropriate
+ error code. The xColumn method must return SQLITE_OK on success.
+
+
+ The xColumn method is required for every virtual table implementation.
+
+
+
+ The native pointer to the sqlite3_vtab_cursor derived structure.
+
+
+ The native pointer to the sqlite3_context structure to be used
+ for returning the specified column value to the SQLite core
+ library.
+
+
+ The zero-based index corresponding to the column containing the
+ value to be returned.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xRowid)(sqlite3_vtab_cursor *pCur, sqlite_int64 *pRowid);
+
+
+ A successful invocation of this method will cause *pRowid to be
+ filled with the rowid of row that the
+ virtual table cursor pCur is currently pointing at.
+ This method returns SQLITE_OK on success.
+ It returns an appropriate error code on failure.
+
+
+ The xRowid method is required for every virtual table implementation.
+
+
+
+ The native pointer to the sqlite3_vtab_cursor derived structure.
+
+
+ Upon success, this parameter must be modified to contain the unique
+ integer row identifier for the current row for the specified cursor.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xUpdate)(
+ sqlite3_vtab *pVTab,
+ int argc,
+ sqlite3_value **argv,
+ sqlite_int64 *pRowid
+ );
+
+
+ All changes to a virtual table are made using the xUpdate method.
+ This one method can be used to insert, delete, or update.
+
+
+ The argc parameter specifies the number of entries in the argv array.
+ The value of argc will be 1 for a pure delete operation or N+2 for an insert
+ or replace or update where N is the number of columns in the table.
+ In the previous sentence, N includes any hidden columns.
+
+
+ Every argv entry will have a non-NULL value in C but may contain the
+ SQL value NULL. In other words, it is always true that
+ ]]>argv[i]!=0]]> for ]]>i]]> between 0 and ]]>argc-1]]>.
+ However, it might be the case that
+ ]]>sqlite3_value_type(argv[i])==SQLITE_NULL]]>.
+
+
+ The argv[0] parameter is the rowid of a row in the virtual table
+ to be deleted. If argv[0] is an SQL NULL, then no deletion occurs.
+
+
+ The argv[1] parameter is the rowid of a new row to be inserted
+ into the virtual table. If argv[1] is an SQL NULL, then the implementation
+ must choose a rowid for the newly inserted row. Subsequent argv[]
+ entries contain values of the columns of the virtual table, in the
+ order that the columns were declared. The number of columns will
+ match the table declaration that the xConnect or xCreate method made
+ using the sqlite3_declare_vtab() call. All hidden columns are included.
+
+
+ When doing an insert without a rowid (argc>1, argv[1] is an SQL NULL),
+ on a virtual table that uses ROWID (but not on a WITHOUT ROWID virtual table),
+ the implementation must set *pRowid to the rowid of the newly inserted row;
+ this will become the value returned by the sqlite3_last_insert_rowid()
+ function. Setting this value in all the other cases is a harmless no-op;
+ the SQLite engine ignores the *pRowid return value if argc==1 or
+ argv[1] is not an SQL NULL.
+
+
+ Each call to xUpdate will fall into one of cases shown below.
+ Not that references to ]]>argv[i]]]> mean the SQL value
+ held within the argv[i] object, not the argv[i]
+ object itself.
+
+
+ ]]>
+ ]]>]]>argc = 1 ]]> argv[0] ≠ NULL]]>
+ ]]>]]>
+ DELETE: The single row with rowid or PRIMARY KEY equal to argv[0] is deleted.
+ No insert occurs.
+ ]]>]]>]]>argc > 1 ]]> argv[0] = NULL]]>
+ ]]>]]>
+ INSERT: A new row is inserted with column values taken from
+ argv[2] and following. In a rowid virtual table, if argv[1] is an SQL NULL,
+ then a new unique rowid is generated automatically. The argv[1] will be NULL
+ for a WITHOUT ROWID virtual table, in which case the implementation should
+ take the PRIMARY KEY value from the appropriate column in argv[2] and following.
+ ]]>]]>]]>argc > 1 ]]> argv[0] ≠ NULL ]]> argv[0] = argv[1]]]>
+ ]]>]]>
+ UPDATE:
+ The row with rowid or PRIMARY KEY argv[0] is updated with new values
+ in argv[2] and following parameters.
+ ]]>]]>]]>argc > 1 ]]> argv[0] ≠ NULL ]]> argv[0] ≠ argv[1]]]>
+ ]]>]]>
+ UPDATE with rowid or PRIMARY KEY change:
+ The row with rowid or PRIMARY KEY argv[0] is updated with
+ the rowid or PRIMARY KEY in argv[1]
+ and new values in argv[2] and following parameters. This will occur
+ when an SQL statement updates a rowid, as in the statement:
+
+ UPDATE table SET rowid=rowid+1 WHERE ...;
+
+ ]]>]]>
+
+
+ The xUpdate method must return SQLITE_OK if and only if it is
+ successful. If a failure occurs, the xUpdate must return an appropriate
+ error code. On a failure, the pVTab->zErrMsg element may optionally
+ be replaced with error message text stored in memory allocated from SQLite
+ using functions such as sqlite3_mprintf() or sqlite3_malloc().
+
+
+ If the xUpdate method violates some constraint of the virtual table
+ (including, but not limited to, attempting to store a value of the wrong
+ datatype, attempting to store a value that is too
+ large or too small, or attempting to change a read-only value) then the
+ xUpdate must fail with an appropriate error code.
+
+
+ If the xUpdate method is performing an UPDATE, then
+ sqlite3_value_nochange(X) can be used to discover which columns
+ of the virtual table were actually modified by the UPDATE
+ statement. The sqlite3_value_nochange(X) interface returns
+ true for columns that do not change.
+ On every UPDATE, SQLite will first invoke
+ xColumn separately for each unchanging column in the table to
+ obtain the value for that column. The xColumn method can
+ check to see if the column is unchanged at the SQL level
+ by invoking sqlite3_vtab_nochange(). If xColumn sees that
+ the column is not being modified, it should return without setting
+ a result using one of the sqlite3_result_xxxxx()
+ interfaces. Only in that case sqlite3_value_nochange() will be
+ true within the xUpdate method. If xColumn does
+ invoke one or more sqlite3_result_xxxxx()
+ interfaces, then SQLite understands that as a change in the value
+ of the column and the sqlite3_value_nochange() call for that
+ column within xUpdate will return false.
+
+
+ There might be one or more sqlite3_vtab_cursor objects open and in use
+ on the virtual table instance and perhaps even on the row of the virtual
+ table when the xUpdate method is invoked. The implementation of
+ xUpdate must be prepared for attempts to delete or modify rows of the table
+ out from other existing cursors. If the virtual table cannot accommodate
+ such changes, the xUpdate method must return an error code.
+
+
+ The xUpdate method is optional.
+ If the xUpdate pointer in the sqlite3_module for a virtual table
+ is a NULL pointer, then the virtual table is read-only.
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ The number of new or modified column values contained in
+ .
+
+
+ The array of native pointers to sqlite3_value structures containing
+ the new or modified column values, if any.
+
+
+ Upon success, this parameter must be modified to contain the unique
+ integer row identifier for the row that was inserted, if any.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xBegin)(sqlite3_vtab *pVTab);
+
+
+ This method begins a transaction on a virtual table.
+ This is method is optional. The xBegin pointer of sqlite3_module
+ may be NULL.
+
+
+ This method is always followed by one call to either the
+ xCommit or xRollback method. Virtual table transactions do
+ not nest, so the xBegin method will not be invoked more than once
+ on a single virtual table
+ without an intervening call to either xCommit or xRollback.
+ Multiple calls to other methods can and likely will occur in between
+ the xBegin and the corresponding xCommit or xRollback.
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xSync)(sqlite3_vtab *pVTab);
+
+
+ This method signals the start of a two-phase commit on a virtual
+ table.
+ This is method is optional. The xSync pointer of sqlite3_module
+ may be NULL.
+
+
+ This method is only invoked after call to the xBegin method and
+ prior to an xCommit or xRollback. In order to implement two-phase
+ commit, the xSync method on all virtual tables is invoked prior to
+ invoking the xCommit method on any virtual table. If any of the
+ xSync methods fail, the entire transaction is rolled back.
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xCommit)(sqlite3_vtab *pVTab);
+
+
+ This method causes a virtual table transaction to commit.
+ This is method is optional. The xCommit pointer of sqlite3_module
+ may be NULL.
+
+
+ A call to this method always follows a prior call to xBegin and
+ xSync.
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xRollback)(sqlite3_vtab *pVTab);
+
+
+ This method causes a virtual table transaction to rollback.
+ This is method is optional. The xRollback pointer of sqlite3_module
+ may be NULL.
+
+
+ A call to this method always follows a prior call to xBegin.
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xFindFunction)(
+ sqlite3_vtab *pVtab,
+ int nArg,
+ const char *zName,
+ void (**pxFunc)(sqlite3_context*,int,sqlite3_value**),
+ void **ppArg
+ );
+
+
+ This method is called during sqlite3_prepare() to give the virtual
+ table implementation an opportunity to overload functions.
+ This method may be set to NULL in which case no overloading occurs.
+
+
+ When a function uses a column from a virtual table as its first
+ argument, this method is called to see if the virtual table would
+ like to overload the function. The first three parameters are inputs:
+ the virtual table, the number of arguments to the function, and the
+ name of the function. If no overloading is desired, this method
+ returns 0. To overload the function, this method writes the new
+ function implementation into *pxFunc and writes user data into *ppArg
+ and returns either 1 or a number between
+ SQLITE_INDEX_CONSTRAINT_FUNCTION and 255.
+
+
+ Historically, the return value from xFindFunction() was either zero
+ or one. Zero means that the function is not overloaded and one means that
+ it is overload. The ability to return values of
+ SQLITE_INDEX_CONSTRAINT_FUNCTION or greater was added in
+ version 3.25.0 (2018-09-15). If xFindFunction returns
+ SQLITE_INDEX_CONSTRAINT_FUNCTION or greater, than means that the function
+ takes two arguments and the function
+ can be used as a boolean in the WHERE clause of a query and that
+ the virtual table is able to exploit that function to speed up the query
+ result. When xFindFunction returns SQLITE_INDEX_CONSTRAINT_FUNCTION or
+ larger, the value returned becomes the sqlite3_index_info.aConstraint.op
+ value for one of the constraints passed into xBestIndex() and the second
+ argument becomes the value corresponding to that constraint that is passed
+ to xFilter(). This enables the
+ xBestIndex()/xFilter implementations to use the function to speed
+ its search.
+
+
+ The technique of having xFindFunction() return values of
+ SQLITE_INDEX_CONSTRAINT_FUNCTION was initially used in the implementation
+ of the Geopoly module. The xFindFunction() method of that module returns
+ SQLITE_INDEX_CONSTRAINT_FUNCTION for the geopoly_overlap() SQL function
+ and it returns
+ SQLITE_INDEX_CONSTRAINT_FUNCTION+1 for the geopoly_within() SQL function.
+ This permits search optimizations for queries such as:
+
+
+ SELECT * FROM geopolytab WHERE geopoly_overlap(_shape, $query_polygon);
+
+
+ Note that infix functions (LIKE, GLOB, REGEXP, and MATCH) reverse
+ the order of their arguments. So "like(A,B)" is equivalent to "B like A".
+ For the form "B like A" the B term is considered the first argument
+ to the function. But for "like(A,B)" the A term is considered the
+ first argument.
+
+
+ The function pointer returned by this routine must be valid for
+ the lifetime of the sqlite3_vtab object given in the first parameter.
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ The number of arguments to the function being sought.
+
+
+ The name of the function being sought.
+
+
+ Upon success, this parameter must be modified to contain the
+ delegate responsible for implementing the specified function.
+
+
+ Upon success, this parameter must be modified to contain the
+ native user-data pointer associated with
+ .
+
+
+ Non-zero if the specified function was found; zero otherwise.
+
+
+
+
+
+ int (*xRename)(sqlite3_vtab *pVtab, const char *zNew);
+
+
+ This method provides notification that the virtual table implementation
+ that the virtual table will be given a new name.
+ If this method returns SQLITE_OK then SQLite renames the table.
+ If this method returns an error code then the renaming is prevented.
+
+
+ The xRename method is optional. If omitted, then the virtual
+ table may not be renamed using the ALTER TABLE RENAME command.
+
+
+ The PRAGMA legacy_alter_table setting is enabled prior to invoking this
+ method, and the value for legacy_alter_table is restored after this
+ method finishes. This is necessary for the correct operation of virtual
+ tables that make use of shadow tables where the shadow tables must be
+ renamed to match the new virtual table name. If the legacy_alter_format is
+ off, then the xConnect method will be invoked for the virtual table every
+ time the xRename method tries to change the name of the shadow table.
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ The native pointer to the UTF-8 encoded string containing the new
+ name for the virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xSavepoint)(sqlite3_vtab *pVtab, int);
+ int (*xRelease)(sqlite3_vtab *pVtab, int);
+ int (*xRollbackTo)(sqlite3_vtab *pVtab, int);
+
+
+ These methods provide the virtual table implementation an opportunity to
+ implement nested transactions. They are always optional and will only be
+ called in SQLite version 3.7.7 (2011-06-23) and later.
+
+
+ When xSavepoint(X,N) is invoked, that is a signal to the virtual table X
+ that it should save its current state as savepoint N.
+ A subsequent call
+ to xRollbackTo(X,R) means that the state of the virtual table should return
+ to what it was when xSavepoint(X,R) was last called.
+ The call
+ to xRollbackTo(X,R) will invalidate all savepoints with N>R; none of the
+ invalided savepoints will be rolled back or released without first
+ being reinitialized by a call to xSavepoint().
+ A call to xRelease(X,M) invalidates all savepoints where N>=M.
+
+
+ None of the xSavepoint(), xRelease(), or xRollbackTo() methods will ever
+ be called except in between calls to xBegin() and
+ either xCommit() or xRollback().
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ This is an integer identifier under which the the current state of
+ the virtual table should be saved.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xSavepoint)(sqlite3_vtab *pVtab, int);
+ int (*xRelease)(sqlite3_vtab *pVtab, int);
+ int (*xRollbackTo)(sqlite3_vtab *pVtab, int);
+
+
+ These methods provide the virtual table implementation an opportunity to
+ implement nested transactions. They are always optional and will only be
+ called in SQLite version 3.7.7 (2011-06-23) and later.
+
+
+ When xSavepoint(X,N) is invoked, that is a signal to the virtual table X
+ that it should save its current state as savepoint N.
+ A subsequent call
+ to xRollbackTo(X,R) means that the state of the virtual table should return
+ to what it was when xSavepoint(X,R) was last called.
+ The call
+ to xRollbackTo(X,R) will invalidate all savepoints with N>R; none of the
+ invalided savepoints will be rolled back or released without first
+ being reinitialized by a call to xSavepoint().
+ A call to xRelease(X,M) invalidates all savepoints where N>=M.
+
+
+ None of the xSavepoint(), xRelease(), or xRollbackTo() methods will ever
+ be called except in between calls to xBegin() and
+ either xCommit() or xRollback().
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ This is an integer used to indicate that any saved states with an
+ identifier greater than or equal to this should be deleted by the
+ virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+
+ int (*xSavepoint)(sqlite3_vtab *pVtab, int);
+ int (*xRelease)(sqlite3_vtab *pVtab, int);
+ int (*xRollbackTo)(sqlite3_vtab *pVtab, int);
+
+
+ These methods provide the virtual table implementation an opportunity to
+ implement nested transactions. They are always optional and will only be
+ called in SQLite version 3.7.7 (2011-06-23) and later.
+
+
+ When xSavepoint(X,N) is invoked, that is a signal to the virtual table X
+ that it should save its current state as savepoint N.
+ A subsequent call
+ to xRollbackTo(X,R) means that the state of the virtual table should return
+ to what it was when xSavepoint(X,R) was last called.
+ The call
+ to xRollbackTo(X,R) will invalidate all savepoints with N>R; none of the
+ invalided savepoints will be rolled back or released without first
+ being reinitialized by a call to xSavepoint().
+ A call to xRelease(X,M) invalidates all savepoints where N>=M.
+
+
+ None of the xSavepoint(), xRelease(), or xRollbackTo() methods will ever
+ be called except in between calls to xBegin() and
+ either xCommit() or xRollback().
+
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ This is an integer identifier used to specify a specific saved
+ state for the virtual table for it to restore itself back to, which
+ should also have the effect of deleting all saved states with an
+ integer identifier greater than this one.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This class represents a context from the SQLite core library that can
+ be passed to the sqlite3_result_*() and associated functions.
+
+
+
+
+ The native context handle.
+
+
+
+
+ Constructs an instance of this class using the specified native
+ context handle.
+
+
+ The native context handle to use.
+
+
+
+
+ Returns the underlying SQLite native handle associated with this
+ object instance.
+
+
+
+
+ Sets the context result to NULL.
+
+
+
+
+ Sets the context result to the specified
+ value.
+
+
+ The value to use.
+
+
+
+
+ Sets the context result to the specified
+ value.
+
+
+ The value to use.
+
+
+
+
+ Sets the context result to the specified
+ value.
+
+
+ The value to use.
+
+
+
+
+ Sets the context result to the specified
+ value.
+
+
+ The value to use. This value will be
+ converted to the UTF-8 encoding prior to being used.
+
+
+
+
+ Sets the context result to the specified
+ value containing an error message.
+
+
+ The value containing the error message text.
+ This value will be converted to the UTF-8 encoding prior to being
+ used.
+
+
+
+
+ Sets the context result to the specified
+ value.
+
+
+ The value to use.
+
+
+
+
+ Sets the context result to contain the error code SQLITE_TOOBIG.
+
+
+
+
+ Sets the context result to contain the error code SQLITE_NOMEM.
+
+
+
+
+ Sets the context result to the specified array
+ value.
+
+
+ The array value to use.
+
+
+
+
+ Sets the context result to a BLOB of zeros of the specified size.
+
+
+ The number of zero bytes to use for the BLOB context result.
+
+
+
+
+ Sets the context result to the specified .
+
+
+ The to use.
+
+
+
+
+ This class represents a value from the SQLite core library that can be
+ passed to the sqlite3_value_*() and associated functions.
+
+
+
+
+ The native value handle.
+
+
+
+
+ Constructs an instance of this class using the specified native
+ value handle.
+
+
+ The native value handle to use.
+
+
+
+
+ Invalidates the native value handle, thereby preventing further
+ access to it from this object instance.
+
+
+
+
+ Converts a native pointer to a native sqlite3_value structure into
+ a managed object instance.
+
+
+ The native pointer to a native sqlite3_value structure to convert.
+
+
+ The managed object instance or null upon
+ failure.
+
+
+
+
+ Converts a logical array of native pointers to native sqlite3_value
+ structures into a managed array of
+ object instances.
+
+
+ The number of elements in the logical array of native sqlite3_value
+ structures.
+
+
+ The native pointer to the logical array of native sqlite3_value
+ structures to convert.
+
+
+ The managed array of object instances or
+ null upon failure.
+
+
+
+
+ Returns the underlying SQLite native handle associated with this
+ object instance.
+
+
+
+
+ Returns non-zero if the native SQLite value has been successfully
+ persisted as a managed value within this object instance (i.e. the
+ property may then be read successfully).
+
+
+
+
+ If the managed value for this object instance is available (i.e. it
+ has been previously persisted via the ) method,
+ that value is returned; otherwise, an exception is thrown. The
+ returned value may be null.
+
+
+
+
+ Gets and returns the type affinity associated with this value.
+
+
+ The type affinity associated with this value.
+
+
+
+
+ Gets and returns the number of bytes associated with this value, if
+ it refers to a UTF-8 encoded string.
+
+
+ The number of bytes associated with this value. The returned value
+ may be zero.
+
+
+
+
+ Gets and returns the associated with this
+ value.
+
+
+ The associated with this value.
+
+
+
+
+ Gets and returns the associated with
+ this value.
+
+
+ The associated with this value.
+
+
+
+
+ Gets and returns the associated with this
+ value.
+
+
+ The associated with this value.
+
+
+
+
+ Gets and returns the associated with this
+ value.
+
+
+ The associated with this value. The value is
+ converted from the UTF-8 encoding prior to being returned.
+
+
+
+
+ Gets and returns the array associated with this
+ value.
+
+
+ The array associated with this value.
+
+
+
+
+ Gets and returns an instance associated with
+ this value.
+
+
+ The associated with this value. If the type
+ affinity of the object is unknown or cannot be determined, a null
+ value will be returned.
+
+
+
+
+ Uses the native value handle to obtain and store the managed value
+ for this object instance, thus saving it for later use. The type
+ of the managed value is determined by the type affinity of the
+ native value. If the type affinity is not recognized by this
+ method, no work is done and false is returned.
+
+
+ Non-zero if the native value was persisted successfully.
+
+
+
+
+ These are the allowed values for the operators that are part of a
+ constraint term in the WHERE clause of a query that uses a virtual
+ table.
+
+
+
+
+ This value represents the equality operator.
+
+
+
+
+ This value represents the greater than operator.
+
+
+
+
+ This value represents the less than or equal to operator.
+
+
+
+
+ This value represents the less than operator.
+
+
+
+
+ This value represents the greater than or equal to operator.
+
+
+
+
+ This value represents the MATCH operator.
+
+
+
+
+ This value represents the LIKE operator.
+
+
+
+
+ This value represents the GLOB operator.
+
+
+
+
+ This value represents the REGEXP operator.
+
+
+
+
+ This value represents the inequality operator.
+
+
+
+
+ This value represents the IS NOT operator.
+
+
+
+
+ This value represents the IS NOT NULL operator.
+
+
+
+
+ This value represents the IS NULL operator.
+
+
+
+
+ This value represents the IS operator.
+
+
+
+
+ These are the allowed values for the index flags from the
+ method.
+
+
+
+
+ No special handling. This is the default.
+
+
+
+
+ This value indicates that the scan of the index will visit at
+ most one row.
+
+
+
+
+ This class represents the native sqlite3_index_constraint structure
+ from the SQLite core library.
+
+
+
+
+ Constructs an instance of this class using the specified native
+ sqlite3_index_constraint structure.
+
+
+ The native sqlite3_index_constraint structure to use.
+
+
+
+
+ Constructs an instance of this class using the specified field
+ values.
+
+
+ Column on left-hand side of constraint.
+
+
+ Constraint operator ().
+
+
+ True if this constraint is usable.
+
+
+ Used internally -
+ should ignore.
+
+
+
+
+ Column on left-hand side of constraint.
+
+
+
+
+ Constraint operator ().
+
+
+
+
+ True if this constraint is usable.
+
+
+
+
+ Used internally -
+ should ignore.
+
+
+
+
+ This class represents the native sqlite3_index_orderby structure from
+ the SQLite core library.
+
+
+
+
+ Constructs an instance of this class using the specified native
+ sqlite3_index_orderby structure.
+
+
+ The native sqlite3_index_orderby structure to use.
+
+
+
+
+ Constructs an instance of this class using the specified field
+ values.
+
+
+ Column number.
+
+
+ True for DESC. False for ASC.
+
+
+
+
+ Column number.
+
+
+
+
+ True for DESC. False for ASC.
+
+
+
+
+ This class represents the native sqlite3_index_constraint_usage
+ structure from the SQLite core library.
+
+
+
+
+ Constructs a default instance of this class.
+
+
+
+
+ Constructs an instance of this class using the specified native
+ sqlite3_index_constraint_usage structure.
+
+
+ The native sqlite3_index_constraint_usage structure to use.
+
+
+
+
+ Constructs an instance of this class using the specified field
+ values.
+
+
+ If greater than 0, constraint is part of argv to xFilter.
+
+
+ Do not code a test for this constraint.
+
+
+
+
+ If greater than 0, constraint is part of argv to xFilter.
+
+
+
+
+ Do not code a test for this constraint.
+
+
+
+
+ This class represents the various inputs provided by the SQLite core
+ library to the method.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The number of instances to
+ pre-allocate space for.
+
+
+ The number of instances to
+ pre-allocate space for.
+
+
+
+
+ An array of object instances,
+ each containing information supplied by the SQLite core library.
+
+
+
+
+ An array of object instances,
+ each containing information supplied by the SQLite core library.
+
+
+
+
+ This class represents the various outputs provided to the SQLite core
+ library by the method.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The number of instances
+ to pre-allocate space for.
+
+
+
+
+ Determines if the native estimatedRows field can be used, based on
+ the available version of the SQLite core library.
+
+
+ Non-zero if the property is supported
+ by the SQLite core library.
+
+
+
+
+ Determines if the native flags field can be used, based on the
+ available version of the SQLite core library.
+
+
+ Non-zero if the property is supported by
+ the SQLite core library.
+
+
+
+
+ Determines if the native flags field can be used, based on the
+ available version of the SQLite core library.
+
+
+ Non-zero if the property is supported by
+ the SQLite core library.
+
+
+
+
+ An array of object
+ instances, each containing information to be supplied to the SQLite
+ core library.
+
+
+
+
+ Number used to help identify the selected index. This value will
+ later be provided to the
+ method.
+
+
+
+
+ String used to help identify the selected index. This value will
+ later be provided to the
+ method.
+
+
+
+
+ Non-zero if the index string must be freed by the SQLite core
+ library.
+
+
+
+
+ True if output is already ordered.
+
+
+
+
+ Estimated cost of using this index. Using a null value here
+ indicates that a default estimated cost value should be used.
+
+
+
+
+ Estimated number of rows returned. Using a null value here
+ indicates that a default estimated rows value should be used.
+ This property has no effect if the SQLite core library is not at
+ least version 3.8.2.
+
+
+
+
+ The flags that should be used with this index. Using a null value
+ here indicates that a default flags value should be used. This
+ property has no effect if the SQLite core library is not at least
+ version 3.9.0.
+
+
+
+
+
+ Indicates which columns of the virtual table may be required by the
+ current scan. Virtual table columns are numbered from zero in the
+ order in which they appear within the CREATE TABLE statement passed
+ to sqlite3_declare_vtab(). For the first 63 columns (columns 0-62),
+ the corresponding bit is set within the bit mask if the column may
+ be required by SQLite. If the table has at least 64 columns and
+ any column to the right of the first 63 is required, then bit 63 of
+ colUsed is also set. In other words, column iCol may be required
+ if the expression
+
+
+ (colUsed & ((sqlite3_uint64)1 << (iCol>=63 ? 63 : iCol)))
+
+
+ evaluates to non-zero. Using a null value here indicates that a
+ default flags value should be used. This property has no effect if
+ the SQLite core library is not at least version 3.10.0.
+
+
+
+
+
+ This class represents the various inputs and outputs used with the
+ method.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The number of (and
+ ) instances to
+ pre-allocate space for.
+
+
+ The number of instances to
+ pre-allocate space for.
+
+
+
+
+ Attempts to determine the structure sizes needed to create and
+ populate a native
+
+ structure.
+
+
+ The size of the native
+
+ structure is stored here.
+
+
+ The size of the native
+
+ structure is stored here.
+
+
+ The size of the native
+
+ structure is stored here.
+
+
+ The size of the native
+
+ structure is stored here.
+
+
+
+
+ Attempts to allocate and initialize a native
+
+ structure.
+
+
+ The number of instances to
+ pre-allocate space for.
+
+
+ The number of instances to
+ pre-allocate space for.
+
+
+ The newly allocated native
+ structure
+ -OR- if it could not be fully allocated.
+
+
+
+
+ Frees all the memory associated with a native
+
+ structure.
+
+
+ The native pointer to the native sqlite3_index_info structure to
+ free.
+
+
+
+
+ Converts a native pointer to a native sqlite3_index_info structure
+ into a new object instance.
+
+
+ The native pointer to the native sqlite3_index_info structure to
+ convert.
+
+
+ Non-zero to include fields from the outputs portion of the native
+ structure; otherwise, the "output" fields will not be read.
+
+
+ Upon success, this parameter will be modified to contain the newly
+ created object instance.
+
+
+
+
+ Populates the outputs of a pre-allocated native sqlite3_index_info
+ structure using an existing object
+ instance.
+
+
+ The existing object instance containing
+ the output data to use.
+
+
+ The native pointer to the pre-allocated native sqlite3_index_info
+ structure.
+
+
+ Non-zero to include fields from the inputs portion of the native
+ structure; otherwise, the "input" fields will not be written.
+
+
+
+
+ The object instance containing
+ the inputs to the
+ method.
+
+
+
+
+ The object instance containing
+ the outputs from the
+ method.
+
+
+
+
+ This class represents a managed virtual table implementation. It is
+ not sealed and should be used as the base class for any user-defined
+ virtual table classes implemented in managed code.
+
+
+
+
+ The index within the array of strings provided to the
+ and
+ methods containing the
+ name of the module implementing this virtual table.
+
+
+
+
+ The index within the array of strings provided to the
+ and
+ methods containing the
+ name of the database containing this virtual table.
+
+
+
+
+ The index within the array of strings provided to the
+ and
+ methods containing the
+ name of the virtual table.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The original array of strings provided to the
+ and
+ methods.
+
+
+
+
+ The original array of strings provided to the
+ and
+ methods.
+
+
+
+
+ The name of the module implementing this virtual table.
+
+
+
+
+ The name of the database containing this virtual table.
+
+
+
+
+ The name of the virtual table.
+
+
+
+
+ The object instance containing all the
+ data for the inputs and outputs relating to the most recent index
+ selection.
+
+
+
+
+ This method should normally be used by the
+ method in order to
+ perform index selection based on the constraints provided by the
+ SQLite core library.
+
+
+ The object instance containing all the
+ data for the inputs and outputs relating to index selection.
+
+
+ Non-zero upon success.
+
+
+
+
+ Attempts to record the renaming of the virtual table associated
+ with this object instance.
+
+
+ The new name for the virtual table.
+
+
+ Non-zero upon success.
+
+
+
+
+ Returns the underlying SQLite native handle associated with this
+ object instance.
+
+
+
+
+ Disposes of this object instance.
+
+
+
+
+ Throws an if this object
+ instance has been disposed.
+
+
+
+
+ Disposes of this object instance.
+
+
+ Non-zero if this method is being called from the
+ method. Zero if this method is being called
+ from the finalizer.
+
+
+
+
+ Finalizes this object instance.
+
+
+
+
+ This class represents a managed virtual table cursor implementation.
+ It is not sealed and should be used as the base class for any
+ user-defined virtual table cursor classes implemented in managed code.
+
+
+
+
+ This value represents an invalid integer row sequence number.
+
+
+
+
+ The field holds the integer row sequence number for the current row
+ pointed to by this cursor object instance.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The object instance associated
+ with this object instance.
+
+
+
+
+ Constructs an instance of this class.
+
+
+
+
+ The object instance associated
+ with this object instance.
+
+
+
+
+ Number used to help identify the selected index. This value will
+ be set via the method.
+
+
+
+
+ String used to help identify the selected index. This value will
+ be set via the method.
+
+
+
+
+ The values used to filter the rows returned via this cursor object
+ instance. This value will be set via the
+ method.
+
+
+
+
+ Attempts to persist the specified object
+ instances in order to make them available after the
+ method returns.
+
+
+ The array of object instances to be
+ persisted.
+
+
+ The number of object instances that were
+ successfully persisted.
+
+
+
+
+ This method should normally be used by the
+ method in order to
+ perform filtering of the result rows and/or to record the filtering
+ criteria provided by the SQLite core library.
+
+
+ Number used to help identify the selected index.
+
+
+ String used to help identify the selected index.
+
+
+ The values corresponding to each column in the selected index.
+
+
+
+
+ Determines the integer row sequence number for the current row.
+
+
+ The integer row sequence number for the current row -OR- zero if
+ it cannot be determined.
+
+
+
+
+ Adjusts the integer row sequence number so that it refers to the
+ next row.
+
+
+
+
+ Returns the underlying SQLite native handle associated with this
+ object instance.
+
+
+
+
+ Disposes of this object instance.
+
+
+
+
+ Throws an if this object
+ instance has been disposed.
+
+
+
+
+ Disposes of this object instance.
+
+
+ Non-zero if this method is being called from the
+ method. Zero if this method is being called
+ from the finalizer.
+
+
+
+
+ Finalizes this object instance.
+
+
+
+
+ This interface represents a native handle provided by the SQLite core
+ library.
+
+
+
+
+ The native handle value.
+
+
+
+
+ This interface represents a virtual table implementation written in
+ managed code.
+
+
+
+
+ Returns non-zero if the schema for the virtual table has been
+ declared.
+
+
+
+
+ Returns the name of the module as it was registered with the SQLite
+ core library.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated with
+ the virtual table.
+
+
+ The native user-data pointer associated with this module, as it was
+ provided to the SQLite core library when the native module instance
+ was created.
+
+
+ The module name, database name, virtual table name, and all other
+ arguments passed to the CREATE VIRTUAL TABLE statement.
+
+
+ Upon success, this parameter must be modified to contain the
+ object instance associated with
+ the virtual table.
+
+
+ Upon failure, this parameter must be modified to contain an error
+ message.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated with
+ the virtual table.
+
+
+ The native user-data pointer associated with this module, as it was
+ provided to the SQLite core library when the native module instance
+ was created.
+
+
+ The module name, database name, virtual table name, and all other
+ arguments passed to the CREATE VIRTUAL TABLE statement.
+
+
+ Upon success, this parameter must be modified to contain the
+ object instance associated with
+ the virtual table.
+
+
+ Upon failure, this parameter must be modified to contain an error
+ message.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ The object instance containing all the
+ data for the inputs and outputs relating to index selection.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ Upon success, this parameter must be modified to contain the
+ object instance associated
+ with the newly opened virtual table cursor.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ Number used to help identify the selected index.
+
+
+ String used to help identify the selected index.
+
+
+ The values corresponding to each column in the selected index.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ Non-zero if no more rows are available; zero otherwise.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ The object instance to be used for
+ returning the specified column value to the SQLite core library.
+
+
+ The zero-based index corresponding to the column containing the
+ value to be returned.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ Upon success, this parameter must be modified to contain the unique
+ integer row identifier for the current row for the specified cursor.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ The array of object instances containing
+ the new or modified column values, if any.
+
+
+ Upon success, this parameter must be modified to contain the unique
+ integer row identifier for the row that was inserted, if any.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ The number of arguments to the function being sought.
+
+
+ The name of the function being sought.
+
+
+ Upon success, this parameter must be modified to contain the
+ object instance responsible for
+ implementing the specified function.
+
+
+ Upon success, this parameter must be modified to contain the
+ native user-data pointer associated with
+ .
+
+
+ Non-zero if the specified function was found; zero otherwise.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ The new name for the virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ This is an integer identifier under which the the current state of
+ the virtual table should be saved.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ This is an integer used to indicate that any saved states with an
+ identifier greater than or equal to this should be deleted by the
+ virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ This is an integer identifier used to specify a specific saved
+ state for the virtual table for it to restore itself back to, which
+ should also have the effect of deleting all saved states with an
+ integer identifier greater than this one.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This class contains static methods that are used to allocate,
+ manipulate, and free native memory provided by the SQLite core library.
+
+
+
+
+ Determines if the native sqlite3_msize() API can be used, based on
+ the available version of the SQLite core library.
+
+
+ Non-zero if the native sqlite3_msize() API is supported by the
+ SQLite core library.
+
+
+
+
+ Allocates at least the specified number of bytes of native memory
+ via the SQLite core library sqlite3_malloc() function and returns
+ the resulting native pointer. If the TRACK_MEMORY_BYTES option
+ was enabled at compile-time, adjusts the number of bytes currently
+ allocated by this class.
+
+
+ The number of bytes to allocate.
+
+
+ The native pointer that points to a block of memory of at least the
+ specified size -OR- if the memory could
+ not be allocated.
+
+
+
+
+ Allocates at least the specified number of bytes of native memory
+ via the SQLite core library sqlite3_malloc64() function and returns
+ the resulting native pointer. If the TRACK_MEMORY_BYTES option
+ was enabled at compile-time, adjusts the number of bytes currently
+ allocated by this class.
+
+
+ The number of bytes to allocate.
+
+
+ The native pointer that points to a block of memory of at least the
+ specified size -OR- if the memory could
+ not be allocated.
+
+
+
+
+ Allocates at least the specified number of bytes of native memory
+ via the SQLite core library sqlite3_malloc() function and returns
+ the resulting native pointer without adjusting the number of
+ allocated bytes currently tracked by this class. This is useful
+ when dealing with blocks of memory that will be freed directly by
+ the SQLite core library.
+
+
+ The number of bytes to allocate.
+
+
+ The native pointer that points to a block of memory of at least the
+ specified size -OR- if the memory could
+ not be allocated.
+
+
+
+
+ Allocates at least the specified number of bytes of native memory
+ via the SQLite core library sqlite3_malloc64() function and returns
+ the resulting native pointer without adjusting the number of
+ allocated bytes currently tracked by this class. This is useful
+ when dealing with blocks of memory that will be freed directly by
+ the SQLite core library.
+
+
+ The number of bytes to allocate.
+
+
+ The native pointer that points to a block of memory of at least the
+ specified size -OR- if the memory could
+ not be allocated.
+
+
+
+
+ Gets and returns the actual size of the specified memory block
+ that was previously obtained from the ,
+ , , or
+ methods or directly from the
+ SQLite core library.
+
+
+ The native pointer to the memory block previously obtained from
+ the , ,
+ , or
+ methods or directly from the
+ SQLite core library.
+
+
+ The actual size, in bytes, of the memory block specified via the
+ native pointer.
+
+
+
+
+ Gets and returns the actual size of the specified memory block
+ that was previously obtained from the ,
+ , , or
+ methods or directly from the
+ SQLite core library.
+
+
+ The native pointer to the memory block previously obtained from
+ the , ,
+ , or
+ methods or directly from the
+ SQLite core library.
+
+
+ The actual size, in bytes, of the memory block specified via the
+ native pointer.
+
+
+
+
+ Frees a memory block previously obtained from the
+ or methods. If
+ the TRACK_MEMORY_BYTES option was enabled at compile-time, adjusts
+ the number of bytes currently allocated by this class.
+
+
+ The native pointer to the memory block previously obtained from the
+ or methods.
+
+
+
+
+ Frees a memory block previously obtained from the SQLite core
+ library without adjusting the number of allocated bytes currently
+ tracked by this class. This is useful when dealing with blocks of
+ memory that were not allocated using this class.
+
+
+ The native pointer to the memory block previously obtained from the
+ SQLite core library.
+
+
+
+
+ This class contains static methods that are used to deal with native
+ UTF-8 string pointers to be used with the SQLite core library.
+
+
+
+
+ This is the maximum possible length for the native UTF-8 encoded
+ strings used with the SQLite core library.
+
+
+
+
+ This is the object instance used to handle
+ conversions from/to UTF-8.
+
+
+
+
+ Converts the specified managed string into the UTF-8 encoding and
+ returns the array of bytes containing its representation in that
+ encoding.
+
+
+ The managed string to convert.
+
+
+ The array of bytes containing the representation of the managed
+ string in the UTF-8 encoding or null upon failure.
+
+
+
+
+ Converts the specified array of bytes representing a string in the
+ UTF-8 encoding and returns a managed string.
+
+
+ The array of bytes to convert.
+
+
+ The managed string or null upon failure.
+
+
+
+
+ Probes a native pointer to a string in the UTF-8 encoding for its
+ terminating NUL character, within the specified length limit.
+
+
+ The native NUL-terminated string pointer.
+
+
+ The maximum length of the native string, in bytes.
+
+
+ The length of the native string, in bytes -OR- zero if the length
+ could not be determined.
+
+
+
+
+ Converts the specified native NUL-terminated UTF-8 string pointer
+ into a managed string.
+
+
+ The native NUL-terminated UTF-8 string pointer.
+
+
+ The managed string or null upon failure.
+
+
+
+
+ Converts the specified native UTF-8 string pointer of the specified
+ length into a managed string.
+
+
+ The native UTF-8 string pointer.
+
+
+ The length of the native string, in bytes.
+
+
+ The managed string or null upon failure.
+
+
+
+
+ Converts the specified managed string into a native NUL-terminated
+ UTF-8 string pointer using memory obtained from the SQLite core
+ library.
+
+
+ The managed string to convert.
+
+
+ The native NUL-terminated UTF-8 string pointer or
+ upon failure.
+
+
+
+
+ Converts the specified managed string into a native NUL-terminated
+ UTF-8 string pointer using memory obtained from the SQLite core
+ library.
+
+
+ The managed string to convert.
+
+
+ Non-zero to obtain memory from the SQLite core library without
+ adjusting the number of allocated bytes currently being tracked
+ by the class.
+
+
+ The native NUL-terminated UTF-8 string pointer or
+ upon failure.
+
+
+
+
+ Converts the specified managed string into a native NUL-terminated
+ UTF-8 string pointer using memory obtained from the SQLite core
+ library.
+
+
+ The managed string to convert.
+
+
+ The length of the native string, in bytes.
+
+
+ The native NUL-terminated UTF-8 string pointer or
+ upon failure.
+
+
+
+
+ Converts the specified managed string into a native NUL-terminated
+ UTF-8 string pointer using memory obtained from the SQLite core
+ library.
+
+
+ The managed string to convert.
+
+
+ Non-zero to obtain memory from the SQLite core library without
+ adjusting the number of allocated bytes currently being tracked
+ by the class.
+
+
+ The length of the native string, in bytes.
+
+
+ The native NUL-terminated UTF-8 string pointer or
+ upon failure.
+
+
+
+
+ Converts a logical array of native NUL-terminated UTF-8 string
+ pointers into an array of managed strings.
+
+
+ The number of elements in the logical array of native
+ NUL-terminated UTF-8 string pointers.
+
+
+ The native pointer to the logical array of native NUL-terminated
+ UTF-8 string pointers to convert.
+
+
+ The array of managed strings or null upon failure.
+
+
+
+
+ Converts an array of managed strings into an array of native
+ NUL-terminated UTF-8 string pointers.
+
+
+ The array of managed strings to convert.
+
+
+ Non-zero to obtain memory from the SQLite core library without
+ adjusting the number of allocated bytes currently being tracked
+ by the class.
+
+
+ The array of native NUL-terminated UTF-8 string pointers or null
+ upon failure.
+
+
+
+
+ This class contains static methods that are used to deal with native
+ pointers to memory blocks that logically contain arrays of bytes to be
+ used with the SQLite core library.
+
+
+
+
+ Converts a native pointer to a logical array of bytes of the
+ specified length into a managed byte array.
+
+
+ The native pointer to the logical array of bytes to convert.
+
+
+ The length, in bytes, of the logical array of bytes to convert.
+
+
+ The managed byte array or null upon failure.
+
+
+
+
+ Converts a managed byte array into a native pointer to a logical
+ array of bytes.
+
+
+ The managed byte array to convert.
+
+
+ The native pointer to a logical byte array or null upon failure.
+
+
+
+
+ Converts a managed byte array into a native pointer to a logical
+ array of bytes.
+
+
+ The managed byte array to convert.
+
+
+ The length, in bytes, of the converted logical array of bytes.
+
+
+ The native pointer to a logical byte array or null upon failure.
+
+
+
+
+ This class contains static methods that are used to perform several
+ low-level data marshalling tasks between native and managed code.
+
+
+
+
+ Returns a new object instance based on the
+ specified object instance and an integer
+ offset.
+
+
+ The object instance representing the base
+ memory location.
+
+
+ The integer offset from the base memory location that the new
+ object instance should point to.
+
+
+ The new object instance.
+
+
+
+
+ Rounds up an integer size to the next multiple of the alignment.
+
+
+ The size, in bytes, to be rounded up.
+
+
+ The required alignment for the return value.
+
+
+ The size, in bytes, rounded up to the next multiple of the
+ alignment. This value may end up being the same as the original
+ size.
+
+
+
+
+ Determines the offset, in bytes, of the next structure member.
+
+
+ The offset, in bytes, of the current structure member.
+
+
+ The size, in bytes, of the current structure member.
+
+
+ The alignment, in bytes, of the next structure member.
+
+
+ The offset, in bytes, of the next structure member.
+
+
+
+
+ Reads a value from the specified memory
+ location.
+
+
+ The object instance representing the base
+ memory location.
+
+
+ The integer offset from the base memory location where the
+ value to be read is located.
+
+
+ The value at the specified memory location.
+
+
+
+
+ Reads a value from the specified memory
+ location.
+
+
+ The object instance representing the base
+ memory location.
+
+
+ The integer offset from the base memory location where the
+ value to be read is located.
+
+
+ The value at the specified memory location.
+
+
+
+
+ Reads a value from the specified memory
+ location.
+
+
+ The object instance representing the base
+ memory location.
+
+
+ The integer offset from the base memory location where the
+ to be read is located.
+
+
+ The value at the specified memory location.
+
+
+
+
+ Reads an value from the specified memory
+ location.
+
+
+ The object instance representing the base
+ memory location.
+
+
+ The integer offset from the base memory location where the
+ value to be read is located.
+
+
+ The value at the specified memory location.
+
+
+
+
+ Writes an value to the specified memory
+ location.
+
+
+ The object instance representing the base
+ memory location.
+
+
+ The integer offset from the base memory location where the
+ value to be written is located.
+
+
+ The value to write.
+
+
+
+
+ Writes an value to the specified memory
+ location.
+
+
+ The object instance representing the base
+ memory location.
+
+
+ The integer offset from the base memory location where the
+ value to be written is located.
+
+
+ The value to write.
+
+
+
+
+ Writes a value to the specified memory
+ location.
+
+
+ The object instance representing the base
+ memory location.
+
+
+ The integer offset from the base memory location where the
+ value to be written is located.
+
+
+ The value to write.
+
+
+
+
+ Writes a value to the specified memory
+ location.
+
+
+ The object instance representing the base
+ memory location.
+
+
+ The integer offset from the base memory location where the
+ value to be written is located.
+
+
+ The value to write.
+
+
+
+
+ Generates a hash code value for the object.
+
+
+ The object instance used to calculate the hash code.
+
+
+ Non-zero if different object instances with the same value should
+ generate different hash codes, where applicable. This parameter
+ has no effect on the .NET Compact Framework.
+
+
+ The hash code value -OR- zero if the object is null.
+
+
+
+
+ This class represents a managed virtual table module implementation.
+ It is not sealed and must be used as the base class for any
+ user-defined virtual table module classes implemented in managed code.
+
+
+
+
+ This class implements the
+ interface by forwarding those method calls to the
+ object instance it contains. If the
+ contained object instance is null, all
+ the methods simply generate an
+ error.
+
+
+
+
+ This is the value that is always used for the "logErrors"
+ parameter to the various static error handling methods provided
+ by the class.
+
+
+
+
+ This is the value that is always used for the "logExceptions"
+ parameter to the various static error handling methods provided
+ by the class.
+
+
+
+
+ This is the error message text used when the contained
+ object instance is not available
+ for any reason.
+
+
+
+
+ The object instance used to provide
+ an implementation of the
+ interface.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The object instance used to provide
+ an implementation of the
+ interface.
+
+
+
+
+ Sets the table error message to one that indicates the native
+ module implementation is not available.
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ The value of .
+
+
+
+
+ Sets the table error message to one that indicates the native
+ module implementation is not available.
+
+
+ The native pointer to the sqlite3_vtab_cursor derived
+ structure.
+
+
+ The value of .
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ Disposes of this object instance.
+
+
+
+
+ Throws an if this object
+ instance has been disposed.
+
+
+
+
+ Disposes of this object instance.
+
+
+ Non-zero if this method is being called from the
+ method. Zero if this method is being
+ called from the finalizer.
+
+
+
+
+ Finalizes this object instance.
+
+
+
+
+ The default version of the native sqlite3_module structure in use.
+
+
+
+
+ This field is used to store the native sqlite3_module structure
+ associated with this object instance.
+
+
+
+
+ This field is used to store the destructor delegate to be passed to
+ the SQLite core library via the sqlite3_create_disposable_module()
+ function.
+
+
+
+
+ This field is used to store a pointer to the native sqlite3_module
+ structure returned by the sqlite3_create_disposable_module
+ function.
+
+
+
+
+ This field is used to store the virtual table instances associated
+ with this module. The native pointer to the sqlite3_vtab derived
+ structure is used to key into this collection.
+
+
+
+
+ This field is used to store the virtual table cursor instances
+ associated with this module. The native pointer to the
+ sqlite3_vtab_cursor derived structure is used to key into this
+ collection.
+
+
+
+
+ This field is used to store the virtual table function instances
+ associated with this module. The case-insensitive function name
+ and the number of arguments (with -1 meaning "any") are used to
+ construct the string that is used to key into this collection.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The name of the module. This parameter cannot be null.
+
+
+
+
+ Calls the native SQLite core library in order to create a new
+ disposable module containing the implementation of a virtual table.
+
+
+ The native database connection pointer to use.
+
+
+ Non-zero upon success.
+
+
+
+
+ This method is called by the SQLite core library when the native
+ module associated with this object instance is being destroyed due
+ to its parent connection being closed. It may also be called by
+ the "vtshim" module if/when the sqlite3_dispose_module() function
+ is called.
+
+
+ The native user-data pointer associated with this module, as it was
+ provided to the SQLite core library when the native module instance
+ was created.
+
+
+
+
+ Creates and returns the native sqlite_module structure using the
+ configured (or default)
+ interface implementation.
+
+
+ The native sqlite_module structure using the configured (or
+ default) interface
+ implementation.
+
+
+
+
+ Creates and returns the native sqlite_module structure using the
+ specified interface
+ implementation.
+
+
+ The interface implementation to
+ use.
+
+
+ The native sqlite_module structure using the specified
+ interface implementation.
+
+
+
+
+ Creates a copy of the specified
+ object instance,
+ using default implementations for the contained delegates when
+ necessary.
+
+
+ The object
+ instance to copy.
+
+
+ The new object
+ instance.
+
+
+
+
+ Calls one of the virtual table initialization methods.
+
+
+ Non-zero to call the
+ method; otherwise, the
+ method will be called.
+
+
+ The native database connection handle.
+
+
+ The original native pointer value that was provided to the
+ sqlite3_create_module(), sqlite3_create_module_v2() or
+ sqlite3_create_disposable_module() functions.
+
+
+ The number of arguments from the CREATE VIRTUAL TABLE statement.
+
+
+ The array of string arguments from the CREATE VIRTUAL TABLE
+ statement.
+
+
+ Upon success, this parameter must be modified to point to the newly
+ created native sqlite3_vtab derived structure.
+
+
+ Upon failure, this parameter must be modified to point to the error
+ message, with the underlying memory having been obtained from the
+ sqlite3_malloc() function.
+
+
+ A standard SQLite return code.
+
+
+
+
+ Calls one of the virtual table finalization methods.
+
+
+ Non-zero to call the
+ method; otherwise, the
+ method will be
+ called.
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ A standard SQLite return code.
+
+
+
+
+ Arranges for the specified error message to be placed into the
+ zErrMsg field of a sqlite3_vtab derived structure, freeing the
+ existing error message, if any.
+
+
+ The object instance to be used.
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ Non-zero if this error message should also be logged using the
+ class.
+
+
+ Non-zero if caught exceptions should be logged using the
+ class.
+
+
+ The error message.
+
+
+ Non-zero upon success.
+
+
+
+
+ Arranges for the specified error message to be placed into the
+ zErrMsg field of a sqlite3_vtab derived structure, freeing the
+ existing error message, if any.
+
+
+ The object instance to be used.
+
+
+ The object instance used to
+ lookup the native pointer to the sqlite3_vtab derived structure.
+
+
+ Non-zero if this error message should also be logged using the
+ class.
+
+
+ Non-zero if caught exceptions should be logged using the
+ class.
+
+
+ The error message.
+
+
+ Non-zero upon success.
+
+
+
+
+ Arranges for the specified error message to be placed into the
+ zErrMsg field of a sqlite3_vtab derived structure, freeing the
+ existing error message, if any.
+
+
+ The object instance to be used.
+
+
+ The native pointer to the sqlite3_vtab_cursor derived structure
+ used to get the native pointer to the sqlite3_vtab derived
+ structure.
+
+
+ Non-zero if this error message should also be logged using the
+ class.
+
+
+ Non-zero if caught exceptions should be logged using the
+ class.
+
+
+ The error message.
+
+
+ Non-zero upon success.
+
+
+
+
+ Arranges for the specified error message to be placed into the
+ zErrMsg field of a sqlite3_vtab derived structure, freeing the
+ existing error message, if any.
+
+
+ The object instance to be used.
+
+
+ The object instance used to
+ lookup the native pointer to the sqlite3_vtab derived structure.
+
+
+ Non-zero if this error message should also be logged using the
+ class.
+
+
+ Non-zero if caught exceptions should be logged using the
+ class.
+
+
+ The error message.
+
+
+ Non-zero upon success.
+
+
+
+
+ Gets and returns the interface
+ implementation to be used when creating the native sqlite3_module
+ structure. Derived classes may override this method to supply an
+ alternate implementation for the
+ interface.
+
+
+ The interface implementation to
+ be used when populating the native sqlite3_module structure. If
+ the returned value is null, the private methods provided by the
+ class and relating to the
+ interface will be used to
+ create the necessary delegates.
+
+
+
+
+ Creates and returns the
+ interface implementation corresponding to the current
+ object instance.
+
+
+ The interface implementation
+ corresponding to the current object
+ instance.
+
+
+
+
+ Allocates a native sqlite3_vtab derived structure and returns a
+ native pointer to it.
+
+
+ A native pointer to a native sqlite3_vtab derived structure.
+
+
+
+
+ Zeros out the fields of a native sqlite3_vtab derived structure.
+
+
+ The native pointer to the native sqlite3_vtab derived structure to
+ zero.
+
+
+
+
+ Frees a native sqlite3_vtab structure using the provided native
+ pointer to it.
+
+
+ A native pointer to a native sqlite3_vtab derived structure.
+
+
+
+
+ Allocates a native sqlite3_vtab_cursor derived structure and
+ returns a native pointer to it.
+
+
+ A native pointer to a native sqlite3_vtab_cursor derived structure.
+
+
+
+
+ Frees a native sqlite3_vtab_cursor structure using the provided
+ native pointer to it.
+
+
+ A native pointer to a native sqlite3_vtab_cursor derived structure.
+
+
+
+
+ Reads and returns the native pointer to the sqlite3_vtab derived
+ structure based on the native pointer to the sqlite3_vtab_cursor
+ derived structure.
+
+
+ The object instance to be used.
+
+
+ The native pointer to the sqlite3_vtab_cursor derived structure
+ from which to read the native pointer to the sqlite3_vtab derived
+ structure.
+
+
+ The native pointer to the sqlite3_vtab derived structure -OR-
+ if it cannot be determined.
+
+
+
+
+ Reads and returns the native pointer to the sqlite3_vtab derived
+ structure based on the native pointer to the sqlite3_vtab_cursor
+ derived structure.
+
+
+ The native pointer to the sqlite3_vtab_cursor derived structure
+ from which to read the native pointer to the sqlite3_vtab derived
+ structure.
+
+
+ The native pointer to the sqlite3_vtab derived structure -OR-
+ if it cannot be determined.
+
+
+
+
+ Looks up and returns the object
+ instance based on the native pointer to the sqlite3_vtab derived
+ structure.
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ The object instance or null if
+ the corresponding one cannot be found.
+
+
+
+
+ Allocates and returns a native pointer to a sqlite3_vtab derived
+ structure and creates an association between it and the specified
+ object instance.
+
+
+ The object instance to be used
+ when creating the association.
+
+
+ The native pointer to a sqlite3_vtab derived structure or
+ if the method fails for any reason.
+
+
+
+
+ Looks up and returns the
+ object instance based on the native pointer to the
+ sqlite3_vtab_cursor derived structure.
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ The native pointer to the sqlite3_vtab_cursor derived structure.
+
+
+ The object instance or null
+ if the corresponding one cannot be found.
+
+
+
+
+ Allocates and returns a native pointer to a sqlite3_vtab_cursor
+ derived structure and creates an association between it and the
+ specified object instance.
+
+
+ The object instance to be
+ used when creating the association.
+
+
+ The native pointer to a sqlite3_vtab_cursor derived structure or
+ if the method fails for any reason.
+
+
+
+
+ Deterimines the key that should be used to identify and store the
+ object instance for the virtual table
+ (i.e. to be returned via the
+ method).
+
+
+ The number of arguments to the virtual table function.
+
+
+ The name of the virtual table function.
+
+
+ The object instance associated with
+ this virtual table function.
+
+
+ The string that should be used to identify and store the virtual
+ table function instance. This method cannot return null. If null
+ is returned from this method, the behavior is undefined.
+
+
+
+
+ Attempts to declare the schema for the virtual table using the
+ specified database connection.
+
+
+ The object instance to use when
+ declaring the schema of the virtual table. This parameter may not
+ be null.
+
+
+ The string containing the CREATE TABLE statement that completely
+ describes the schema for the virtual table. This parameter may not
+ be null.
+
+
+ Upon failure, this parameter must be modified to contain an error
+ message.
+
+
+ A standard SQLite return code.
+
+
+
+
+ Calls the native SQLite core library in order to declare a virtual
+ table function in response to a call into the
+
+ or virtual table
+ methods.
+
+
+ The object instance to use when
+ declaring the schema of the virtual table.
+
+
+ The number of arguments to the function being declared.
+
+
+ The name of the function being declared.
+
+
+ Upon success, the contents of this parameter are undefined. Upon
+ failure, it should contain an appropriate error message.
+
+
+ A standard SQLite return code.
+
+
+
+
+ Returns or sets a boolean value indicating whether virtual table
+ errors should be logged using the class.
+
+
+
+
+ Returns or sets a boolean value indicating whether exceptions
+ caught in the
+ method,
+ the method,
+ the method,
+ the method,
+ and the method should be logged using the
+ class.
+
+
+
+
+ Arranges for the specified error message to be placed into the
+ zErrMsg field of a sqlite3_vtab derived structure, freeing the
+ existing error message, if any.
+
+
+ The native pointer to the sqlite3_vtab derived structure.
+
+
+ The error message.
+
+
+ Non-zero upon success.
+
+
+
+
+ Arranges for the specified error message to be placed into the
+ zErrMsg field of a sqlite3_vtab derived structure, freeing the
+ existing error message, if any.
+
+
+ The object instance used to
+ lookup the native pointer to the sqlite3_vtab derived structure.
+
+
+ The error message.
+
+
+ Non-zero upon success.
+
+
+
+
+ Arranges for the specified error message to be placed into the
+ zErrMsg field of a sqlite3_vtab derived structure, freeing the
+ existing error message, if any.
+
+
+ The object instance used to
+ lookup the native pointer to the sqlite3_vtab derived structure.
+
+
+ The error message.
+
+
+ Non-zero upon success.
+
+
+
+
+ Modifies the specified object instance
+ to contain the specified estimated cost.
+
+
+ The object instance to modify.
+
+
+ The estimated cost value to use. Using a null value means that the
+ default value provided by the SQLite core library should be used.
+
+
+ Non-zero upon success.
+
+
+
+
+ Modifies the specified object instance
+ to contain the default estimated cost.
+
+
+ The object instance to modify.
+
+
+ Non-zero upon success.
+
+
+
+
+ Modifies the specified object instance
+ to contain the specified estimated rows.
+
+
+ The object instance to modify.
+
+
+ The estimated rows value to use. Using a null value means that the
+ default value provided by the SQLite core library should be used.
+
+
+ Non-zero upon success.
+
+
+
+
+ Modifies the specified object instance
+ to contain the default estimated rows.
+
+
+ The object instance to modify.
+
+
+ Non-zero upon success.
+
+
+
+
+ Modifies the specified object instance
+ to contain the specified flags.
+
+
+ The object instance to modify.
+
+
+ The index flags value to use. Using a null value means that the
+ default value provided by the SQLite core library should be used.
+
+
+ Non-zero upon success.
+
+
+
+
+ Modifies the specified object instance
+ to contain the default index flags.
+
+
+ The object instance to modify.
+
+
+ Non-zero upon success.
+
+
+
+
+ Returns or sets a boolean value indicating whether virtual table
+ errors should be logged using the class.
+
+
+
+
+ Returns or sets a boolean value indicating whether exceptions
+ caught in the
+ method,
+ method, and the
+ method should be logged using the
+ class.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ Returns non-zero if the schema for the virtual table has been
+ declared.
+
+
+
+
+ Returns the name of the module as it was registered with the SQLite
+ core library.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated with
+ the virtual table.
+
+
+ The native user-data pointer associated with this module, as it was
+ provided to the SQLite core library when the native module instance
+ was created.
+
+
+ The module name, database name, virtual table name, and all other
+ arguments passed to the CREATE VIRTUAL TABLE statement.
+
+
+ Upon success, this parameter must be modified to contain the
+ object instance associated with
+ the virtual table.
+
+
+ Upon failure, this parameter must be modified to contain an error
+ message.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated with
+ the virtual table.
+
+
+ The native user-data pointer associated with this module, as it was
+ provided to the SQLite core library when the native module instance
+ was created.
+
+
+ The module name, database name, virtual table name, and all other
+ arguments passed to the CREATE VIRTUAL TABLE statement.
+
+
+ Upon success, this parameter must be modified to contain the
+ object instance associated with
+ the virtual table.
+
+
+ Upon failure, this parameter must be modified to contain an error
+ message.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ The object instance containing all the
+ data for the inputs and outputs relating to index selection.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ Upon success, this parameter must be modified to contain the
+ object instance associated
+ with the newly opened virtual table cursor.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ Number used to help identify the selected index.
+
+
+ String used to help identify the selected index.
+
+
+ The values corresponding to each column in the selected index.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ Non-zero if no more rows are available; zero otherwise.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ The object instance to be used for
+ returning the specified column value to the SQLite core library.
+
+
+ The zero-based index corresponding to the column containing the
+ value to be returned.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ Upon success, this parameter must be modified to contain the unique
+ integer row identifier for the current row for the specified cursor.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ The array of object instances containing
+ the new or modified column values, if any.
+
+
+ Upon success, this parameter must be modified to contain the unique
+ integer row identifier for the row that was inserted, if any.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ The number of arguments to the function being sought.
+
+
+ The name of the function being sought.
+
+
+ Upon success, this parameter must be modified to contain the
+ object instance responsible for
+ implementing the specified function.
+
+
+ Upon success, this parameter must be modified to contain the
+ native user-data pointer associated with
+ .
+
+
+ Non-zero if the specified function was found; zero otherwise.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ The new name for the virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ This is an integer identifier under which the the current state of
+ the virtual table should be saved.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ This is an integer used to indicate that any saved states with an
+ identifier greater than or equal to this should be deleted by the
+ virtual table.
+
+
+ A standard SQLite return code.
+
+
+
+
+ This method is called in response to the
+ method.
+
+
+ The object instance associated
+ with this virtual table.
+
+
+ This is an integer identifier used to specify a specific saved
+ state for the virtual table for it to restore itself back to, which
+ should also have the effect of deleting all saved states with an
+ integer identifier greater than this one.
+
+
+ A standard SQLite return code.
+
+
+
+
+ Disposes of this object instance.
+
+
+
+
+ Throws an if this object
+ instance has been disposed.
+
+
+
+
+ Disposes of this object instance.
+
+
+ Non-zero if this method is being called from the
+ method. Zero if this method is being
+ called from the finalizer.
+
+
+
+
+ Finalizes this object instance.
+
+
+
+
+ This class contains some virtual methods that may be useful for other
+ virtual table classes. It specifically does NOT implement any of the
+ interface methods.
+
+
+
+
+ The CREATE TABLE statement used to declare the schema for the
+ virtual table.
+
+
+
+
+ Non-zero if different object instances with the same value should
+ generate different row identifiers, where applicable. This has no
+ effect on the .NET Compact Framework.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The name of the module. This parameter cannot be null.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The name of the module. This parameter cannot be null.
+
+
+ Non-zero if different object instances with the same value should
+ generate different row identifiers, where applicable. This
+ parameter has no effect on the .NET Compact Framework.
+
+
+
+
+ Determines the SQL statement used to declare the virtual table.
+ This method should be overridden in derived classes if they require
+ a custom virtual table schema.
+
+
+ The SQL statement used to declare the virtual table -OR- null if it
+ cannot be determined.
+
+
+
+
+ Sets the table error message to one that indicates the virtual
+ table cursor is of the wrong type.
+
+
+ The object instance.
+
+
+ The that the virtual table cursor should be.
+
+
+ The value of .
+
+
+
+
+ Determines the string to return as the column value for the object
+ instance value.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ The object instance to return a string representation for.
+
+
+ The string representation of the specified object instance or null
+ upon failure.
+
+
+
+
+ Constructs an unique row identifier from two
+ values. The first value
+ must contain the row sequence number for the current row and the
+ second value must contain the hash code of the key column value
+ for the current row.
+
+
+ The integer row sequence number for the current row.
+
+
+ The hash code of the key column value for the current row.
+
+
+ The unique row identifier or zero upon failure.
+
+
+
+
+ Determines the unique row identifier for the current row.
+
+
+ The object instance
+ associated with the previously opened virtual table cursor to be
+ used.
+
+
+ The object instance to return a unique row identifier for.
+
+
+ The unique row identifier or zero upon failure.
+
+
+
+
+ Throws an if this object
+ instance has been disposed.
+
+
+
+
+ Disposes of this object instance.
+
+
+ Non-zero if this method is being called from the
+ method. Zero if this method is
+ being called from the finalizer.
+
+
+
+
+ This class represents a virtual table cursor to be used with the
+ class. It is not sealed and may
+ be used as the base class for any user-defined virtual table cursor
+ class that wraps an object instance.
+
+
+
+
+ The instance provided when this cursor
+ was created.
+
+
+
+
+ This value will be non-zero if false has been returned from the
+ method.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The object instance associated
+ with this object instance.
+
+
+ The instance to expose as a virtual
+ table cursor.
+
+
+
+
+ Advances to the next row of the virtual table cursor using the
+ method of the
+ object instance.
+
+
+ Non-zero if the current row is valid; zero otherwise. If zero is
+ returned, no further rows are available.
+
+
+
+
+ Returns the value for the current row of the virtual table cursor
+ using the property of the
+ object instance.
+
+
+
+
+ Resets the virtual table cursor position, also invalidating the
+ current row, using the method of
+ the object instance.
+
+
+
+
+ Returns non-zero if the end of the virtual table cursor has been
+ seen (i.e. no more rows are available, including the current one).
+
+
+
+
+ Returns non-zero if the virtual table cursor is open.
+
+
+
+
+ Closes the virtual table cursor. This method must not throw any
+ exceptions.
+
+
+
+
+ Throws an if the virtual
+ table cursor has been closed.
+
+
+
+
+ Throws an if this object
+ instance has been disposed.
+
+
+
+
+ Disposes of this object instance.
+
+
+ Non-zero if this method is being called from the
+ method. Zero if this method is
+ being called from the finalizer.
+
+
+
+
+ This class implements a virtual table module that exposes an
+ object instance as a read-only virtual
+ table. It is not sealed and may be used as the base class for any
+ user-defined virtual table class that wraps an
+ object instance. The following short
+ example shows it being used to treat an array of strings as a table
+ data source:
+
+ public static class Sample
+ {
+ public static void Main()
+ {
+ using (SQLiteConnection connection = new SQLiteConnection(
+ "Data Source=:memory:;"))
+ {
+ connection.Open();
+
+ connection.CreateModule(new SQLiteModuleEnumerable(
+ "sampleModule", new string[] { "one", "two", "three" }));
+
+ using (SQLiteCommand command = connection.CreateCommand())
+ {
+ command.CommandText =
+ "CREATE VIRTUAL TABLE t1 USING sampleModule;";
+
+ command.ExecuteNonQuery();
+ }
+
+ using (SQLiteCommand command = connection.CreateCommand())
+ {
+ command.CommandText = "SELECT * FROM t1;";
+
+ using (SQLiteDataReader dataReader = command.ExecuteReader())
+ {
+ while (dataReader.Read())
+ Console.WriteLine(dataReader[0].ToString());
+ }
+ }
+
+ connection.Close();
+ }
+ }
+ }
+
+
+
+
+
+ The instance containing the backing data
+ for the virtual table.
+
+
+
+
+ Non-zero if different object instances with the same value should
+ generate different row identifiers, where applicable. This has no
+ effect on the .NET Compact Framework.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The name of the module. This parameter cannot be null.
+
+
+ The instance to expose as a virtual
+ table. This parameter cannot be null.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The name of the module. This parameter cannot be null.
+
+
+ The instance to expose as a virtual
+ table. This parameter cannot be null.
+
+
+ Non-zero if different object instances with the same value should
+ generate different row identifiers, where applicable. This
+ parameter has no effect on the .NET Compact Framework.
+
+
+
+
+ Sets the table error message to one that indicates the virtual
+ table cursor has no current row.
+
+
+ The object instance.
+
+
+ The value of .
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ Throws an if this object
+ instance has been disposed.
+
+
+
+
+ Disposes of this object instance.
+
+
+ Non-zero if this method is being called from the
+ method. Zero if this method is
+ being called from the finalizer.
+
+
+
+
+ This class represents a virtual table cursor to be used with the
+ class. It is not sealed and may
+ be used as the base class for any user-defined virtual table cursor
+ class that wraps an object instance.
+
+
+
+
+ The instance provided when this
+ cursor was created.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The object instance associated
+ with this object instance.
+
+
+ The instance to expose as a virtual
+ table cursor.
+
+
+
+
+ Returns the value for the current row of the virtual table cursor
+ using the property of the
+ object instance.
+
+
+
+
+ Closes the virtual table cursor. This method must not throw any
+ exceptions.
+
+
+
+
+ Throws an if this object
+ instance has been disposed.
+
+
+
+
+ Disposes of this object instance.
+
+
+ Non-zero if this method is being called from the
+ method. Zero if this method is
+ being called from the finalizer.
+
+
+
+
+ This class implements a virtual table module that exposes an
+ object instance as a read-only virtual
+ table. It is not sealed and may be used as the base class for any
+ user-defined virtual table class that wraps an
+ object instance.
+
+
+
+
+ The instance containing the backing
+ data for the virtual table.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The name of the module. This parameter cannot be null.
+
+
+ The instance to expose as a virtual
+ table. This parameter cannot be null.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ Throws an if this object
+ instance has been disposed.
+
+
+
+
+ Disposes of this object instance.
+
+
+ Non-zero if this method is being called from the
+ method. Zero if this method is
+ being called from the finalizer.
+
+
+
+
+ This class implements a virtual table module that does nothing by
+ providing "empty" implementations for all of the
+ interface methods. The result
+ codes returned by these "empty" method implementations may be
+ controlled on a per-method basis by using and/or overriding the
+ ,
+ ,
+ ,
+ , and
+ methods from within derived classes.
+
+
+
+
+ This field is used to store the
+ values to return, on a per-method basis, for all methods that are
+ part of the interface.
+
+
+
+
+ Constructs an instance of this class.
+
+
+ The name of the module. This parameter cannot be null.
+
+
+
+
+ Determines the default value to be
+ returned by methods of the
+ interface that lack an overridden implementation in all classes
+ derived from the class.
+
+
+ The value that should be returned
+ by all interface methods unless
+ a more specific result code has been set for that interface method.
+
+
+
+
+ Converts a value into a boolean
+ return value for use with the
+ method.
+
+
+ The value to convert.
+
+
+ The value.
+
+
+
+
+ Converts a value into a boolean
+ return value for use with the
+ method.
+
+
+ The value to convert.
+
+
+ The value.
+
+
+
+
+ Determines the value that should be
+ returned by the specified
+ interface method if it lack an overridden implementation. If no
+ specific value is available (or set)
+ for the specified method, the value
+ returned by the method will be
+ returned instead.
+
+
+ The name of the method. Currently, this method must be part of
+ the interface.
+
+
+ The value that should be returned
+ by the interface method.
+
+
+
+
+ Sets the value that should be
+ returned by the specified
+ interface method if it lack an overridden implementation.
+
+
+ The name of the method. Currently, this method must be part of
+ the interface.
+
+
+ The value that should be returned
+ by the interface method.
+
+
+ Non-zero upon success.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+ See the method.
+
+
+
+
+ Throws an if this object
+ instance has been disposed.
+
+
+
+
+ Disposes of this object instance.
+
+
+ Non-zero if this method is being called from the
+ method. Zero if this method is
+ being called from the finalizer.
+
+
+
+
+ This enumerated type represents a type of conflict seen when apply
+ changes from a change set or patch set.
+
+
+
+
+ This value is seen when processing a DELETE or UPDATE change if a
+ row with the required PRIMARY KEY fields is present in the
+ database, but one or more other (non primary-key) fields modified
+ by the update do not contain the expected "before" values.
+
+
+
+
+ This value is seen when processing a DELETE or UPDATE change if a
+ row with the required PRIMARY KEY fields is not present in the
+ database. There is no conflicting row in this case.
+
+ The results of invoking the
+
+ method are undefined.
+
+
+
+
+ This value is seen when processing an INSERT change if the
+ operation would result in duplicate primary key values.
+ The conflicting row in this case is the database row with the
+ matching primary key.
+
+
+
+
+ If a non-foreign key constraint violation occurs while applying a
+ change (i.e. a UNIQUE, CHECK or NOT NULL constraint), the conflict
+ callback will see this value.
+
+ There is no conflicting row in this case. The results of invoking
+ the
+ method are undefined.
+
+
+
+
+ If foreign key handling is enabled, and applying a changes leaves
+ the database in a state containing foreign key violations, this
+ value will be seen exactly once before the changes are committed.
+ If the conflict handler
+ , the changes,
+ including those that caused the foreign key constraint violation,
+ are committed. Or, if it returns
+ , the changes are
+ rolled back.
+
+ No current or conflicting row information is provided. The only
+ method it is possible to call on the supplied
+ object is
+ .
+
+
+
+
+ This enumerated type represents the result of a user-defined conflict
+ resolution callback.
+
+
+
+
+ If a conflict callback returns this value no special action is
+ taken. The change that caused the conflict is not applied. The
+ application of changes continues with the next change.
+
+
+
+
+ This value may only be returned from a conflict callback if the
+ type of conflict was
+ or . If this is
+ not the case, any changes applied so far are rolled back and the
+ call to
+
+ will raise a with an error code of
+ .
+
+ If this value is returned for a
+ conflict, then the
+ conflicting row is either updated or deleted, depending on the type
+ of change.
+
+ If this value is returned for a
+ conflict, then
+ the conflicting row is removed from the database and a second
+ attempt to apply the change is made. If this second attempt fails,
+ the original row is restored to the database before continuing.
+
+
+
+
+ If this value is returned, any changes applied so far are rolled
+ back and the call to
+
+ will raise a with an error code of
+ .
+
+
+
+
+ This enumerated type represents possible flags that may be passed
+ to the appropriate overloads of various change set creation methods.
+
+
+
+
+ No special handling.
+
+
+
+
+ Invert the change set while iterating through it.
+ This is equivalent to inverting a change set using
+ before
+ applying it. It is an error to specify this flag
+ with a patch set.
+
+
+
+
+ This callback is invoked when a determination must be made about
+ whether changes to a specific table should be tracked -OR- applied.
+ It will not be called for tables that are already attached to a
+ .
+
+
+ The optional application-defined context data that was originally
+ passed to the or
+
+ methods. This value may be null.
+
+
+ The name of the table.
+
+
+ Non-zero if changes to the table should be considered; otherwise,
+ zero. Throwing an exception from this callback will result in
+ undefined behavior.
+
+
+
+
+ This callback is invoked when there is a conflict while apply changes
+ to a database.
+
+
+ The optional application-defined context data that was originally
+ passed to the
+
+ method. This value may be null.
+
+
+ The type of this conflict.
+
+
+ The object associated with
+ this conflict. This value may not be null; however, only properties
+ that are applicable to the conflict type will be available. Further
+ information on this is available within the descriptions of the
+ available values.
+
+
+ A value that indicates the
+ action to be taken in order to resolve the conflict. Throwing an
+ exception from this callback will result in undefined behavior.
+
+
+
+
+ This interface contains methods used to manipulate a set of changes for
+ a database.
+
+
+
+
+ This method "inverts" the set of changes within this instance.
+ Applying an inverted set of changes to a database reverses the
+ effects of applying the uninverted changes. Specifically:
+ ]]>]]>
+ Each DELETE change is changed to an INSERT, and
+ ]]>]]>
+ Each INSERT change is changed to a DELETE, and
+ ]]>]]>
+ For each UPDATE change, the old.* and new.* values are exchanged.
+ ]]>]]>
+ This method does not change the order in which changes appear
+ within the set of changes. It merely reverses the sense of each
+ individual change.
+
+
+ The new instance that represents
+ the resulting set of changes -OR- null if it is not available.
+
+
+
+
+ This method combines the specified set of changes with the ones
+ contained in this instance.
+
+
+ The changes to be combined with those in this instance.
+
+
+ The new instance that represents
+ the resulting set of changes -OR- null if it is not available.
+
+
+
+
+ Attempts to apply the set of changes in this instance to the
+ associated database.
+
+
+ The delegate that will need
+ to handle any conflicting changes that may arise.
+
+
+ The optional application-defined context data. This value may be
+ null.
+
+
+
+
+ Attempts to apply the set of changes in this instance to the
+ associated database.
+
+
+ The delegate that will need
+ to handle any conflicting changes that may arise.
+
+
+ The optional delegate
+ that can be used to filter the list of tables impacted by the set
+ of changes.
+
+
+ The optional application-defined context data. This value may be
+ null.
+
+
+
+
+ This interface contains methods used to manipulate multiple sets of
+ changes for a database.
+
+
+
+
+ Attempts to add a change set (or patch set) to this change group
+ instance. The underlying data must be contained entirely within
+ the byte array.
+
+
+ The raw byte data for the specified change set (or patch set).
+
+
+
+
+ Attempts to add a change set (or patch set) to this change group
+ instance. The underlying data will be read from the specified
+ .
+
+
+ The instance containing the raw change set
+ (or patch set) data to read.
+
+
+
+
+ Attempts to create and return, via , the
+ combined set of changes represented by this change group instance.
+
+
+ Upon success, this will contain the raw byte data for all the
+ changes in this change group instance.
+
+
+
+
+ Attempts to create and write, via , the
+ combined set of changes represented by this change group instance.
+
+
+ Upon success, the raw byte data for all the changes in this change
+ group instance will be written to this .
+
+
+
+
+ This interface contains properties and methods used to fetch metadata
+ about one change within a set of changes for a database.
+
+
+
+
+ The name of the table the change was made to.
+
+
+
+
+ The number of columns impacted by this change. This value can be
+ used to determine the highest valid column index that may be used
+ with the , ,
+ and methods of this interface. It
+ will be this value minus one.
+
+
+
+
+ This will contain the value
+ ,
+ , or
+ , corresponding to
+ the overall type of change this item represents.
+
+
+
+
+ Non-zero if this change is considered to be indirect (i.e. as
+ though they were made via a trigger or foreign key action).
+
+
+
+
+ This array contains a for each column in
+ the table associated with this change. The element will be zero
+ if the column is not part of the primary key; otherwise, it will
+ be non-zero.
+
+
+
+
+ This method may only be called from within a
+ delegate when the conflict
+ type is . It
+ returns the total number of known foreign key violations in the
+ destination database.
+
+
+
+
+ Queries and returns the original value of a given column for this
+ change. This method may only be called when the
+ has a value of
+ or
+ .
+
+
+ The index for the column. This value must be between zero and one
+ less than the total number of columns for this table.
+
+
+ The original value of a given column for this change.
+
+
+
+
+ Queries and returns the updated value of a given column for this
+ change. This method may only be called when the
+ has a value of
+ or
+ .
+
+
+ The index for the column. This value must be between zero and one
+ less than the total number of columns for this table.
+
+
+ The updated value of a given column for this change.
+
+
+
+
+ Queries and returns the conflicting value of a given column for
+ this change. This method may only be called from within a
+ delegate when the conflict
+ type is or
+ .
+
+
+ The index for the column. This value must be between zero and one
+ less than the total number of columns for this table.
+
+
+ The conflicting value of a given column for this change.
+
+
+
+
+ This interface contains methods to query and manipulate the state of a
+ change tracking session for a database.
+
+
+
+
+ Determines if this session is currently tracking changes to its
+ associated database.
+
+
+ Non-zero if changes to the associated database are being trakced;
+ otherwise, zero.
+
+
+
+
+ Enables tracking of changes to the associated database.
+
+
+
+
+ Disables tracking of changes to the associated database.
+
+
+
+
+ Determines if this session is currently set to mark changes as
+ indirect (i.e. as though they were made via a trigger or foreign
+ key action).
+
+
+ Non-zero if changes to the associated database are being marked as
+ indirect; otherwise, zero.
+
+
+
+
+ Sets the indirect flag for this session. Subsequent changes will
+ be marked as indirect until this flag is changed again.
+
+
+
+
+ Clears the indirect flag for this session. Subsequent changes will
+ be marked as direct until this flag is changed again.
+
+
+
+
+ Determines if there are any tracked changes currently within the
+ data for this session.
+
+
+ Non-zero if there are no changes within the data for this session;
+ otherwise, zero.
+
+
+
+
+ Upon success, causes changes to the specified table(s) to start
+ being tracked. Any tables impacted by calls to this method will
+ not cause the callback
+ to be invoked.
+
+
+ The name of the table to be tracked -OR- null to track all
+ applicable tables within this database.
+
+
+
+
+ This method is used to set the table filter for this instance.
+
+
+ The table filter callback -OR- null to clear any existing table
+ filter callback.
+
+
+ The optional application-defined context data. This value may be
+ null.
+
+
+
+
+ Attempts to create and return, via , the
+ combined set of changes represented by this session instance.
+
+
+ Upon success, this will contain the raw byte data for all the
+ changes in this session instance.
+
+
+
+
+ Attempts to create and write, via , the
+ combined set of changes represented by this session instance.
+
+
+ Upon success, the raw byte data for all the changes in this session
+ instance will be written to this .
+
+
+
+
+ Attempts to create and return, via , the
+ combined set of changes represented by this session instance as a
+ patch set.
+
+
+ Upon success, this will contain the raw byte data for all the
+ changes in this session instance.
+
+
+
+
+ Attempts to create and write, via , the
+ combined set of changes represented by this session instance as a
+ patch set.
+
+
+ Upon success, the raw byte data for all the changes in this session
+ instance will be written to this .
+
+
+
+
+ This method loads the differences between two tables [with the same
+ name, set of columns, and primary key definition] into this session
+ instance.
+
+
+ The name of the database containing the table with the original
+ data (i.e. it will need updating in order to be identical to the
+ one within the database associated with this session instance).
+
+
+ The name of the table.
+
+
+
+
+ This class contains some static helper methods for use within this
+ subsystem.
+
+
+
+
+ This method checks the byte array specified by the caller to make
+ sure it will be usable.
+
+
+ A byte array provided by the caller into one of the public methods
+ for the classes that belong to this subsystem. This value cannot
+ be null or represent an empty array; otherwise, an appropriate
+ exception will be thrown.
+
+
+
+
+ This class is used to hold the native connection handle associated with
+ a open until this subsystem is totally
+ done with it. This class is for internal use by this subsystem only.
+
+
+
+
+ The SQL statement used when creating the native statement handle.
+ There are no special requirements for this other than counting as
+ an "open statement handle".
+
+
+
+
+ The format of the error message used when reporting, during object
+ disposal, that the statement handle is still open (i.e. because
+ this situation is considered a fairly serious programming error).
+
+
+
+
+ The wrapped native connection handle associated with this lock.
+
+
+
+
+ The flags associated with the connection represented by the
+ value.
+
+
+
+
+ The native statement handle for this lock. The garbage collector
+ cannot cause this statement to be finalized; therefore, it will
+ serve to hold the associated native connection open until it is
+ freed manually using the method.
+
+
+
+
+ Constructs a new instance of this class using the specified wrapped
+ native connection handle and associated flags.
+
+
+ The wrapped native connection handle to be associated with this
+ lock.
+
+
+ The flags associated with the connection represented by the
+ value.
+
+
+ Non-zero if the method should be called prior
+ to returning from this constructor.
+
+
+
+
+ Queries and returns the wrapped native connection handle for this
+ instance.
+
+
+ The wrapped native connection handle for this instance -OR- null
+ if it is unavailable.
+
+
+
+
+ Queries and returns the flags associated with the connection for
+ this instance.
+
+
+ The value. There is no return
+ value reserved to indicate an error.
+
+
+
+
+ Queries and returns the native connection handle for this instance.
+
+
+ The native connection handle for this instance. If this value is
+ unavailable or invalid an exception will be thrown.
+
+
+
+
+ This method attempts to "lock" the associated native connection
+ handle by preparing a SQL statement that will not be finalized
+ until the method is called (i.e. and which
+ cannot be done by the garbage collector). If the statement is
+ already prepared, nothing is done. If the statement cannot be
+ prepared for any reason, an exception will be thrown.
+
+
+
+
+ This method attempts to "unlock" the associated native connection
+ handle by finalizing the previously prepared statement. If the
+ statement is already finalized, nothing is done. If the statement
+ cannot be finalized for any reason, an exception will be thrown.
+
+
+
+
+ Disposes of this object instance.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ Finalizes this object instance.
+
+
+
+
+ This class manages the native change set iterator. It is used as the
+ base class for the and
+ classes. It knows how to
+ advance the native iterator handle as well as finalize it.
+
+
+
+
+ The native change set (a.k.a. iterator) handle.
+
+
+
+
+ Non-zero if this instance owns the native iterator handle in the
+ field. In that case, this instance will
+ finalize the native iterator handle upon being disposed or
+ finalized.
+
+
+
+
+ Constructs a new instance of this class using the specified native
+ iterator handle.
+
+
+ The native iterator handle to use.
+
+
+ Non-zero if this instance is to take ownership of the native
+ iterator handle specified by .
+
+
+
+
+ Throws an exception if the native iterator handle is invalid.
+
+
+
+
+ Used to query the native iterator handle. This method is only used
+ by the class.
+
+
+ The native iterator handle -OR- if it
+ is not available.
+
+
+
+
+ Attempts to advance the native iterator handle to its next item.
+
+
+ Non-zero if the native iterator handle was advanced and contains
+ more data; otherwise, zero. If the underlying native API returns
+ an unexpected value then an exception will be thrown.
+
+
+
+
+ Attempts to create an instance of this class that is associated
+ with the specified native iterator handle. Ownership of the
+ native iterator handle is NOT transferred to the new instance of
+ this class.
+
+
+ The native iterator handle to use.
+
+
+ The new instance of this class. No return value is reserved to
+ indicate an error; however, if the native iterator handle is not
+ valid, any subsequent attempt to make use of it via the returned
+ instance of this class may throw exceptions.
+
+
+
+
+ Disposes of this object instance.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ Finalizes this object instance.
+
+
+
+
+ This class manages the native change set iterator for a set of changes
+ contained entirely in memory.
+
+
+
+
+ The native memory buffer allocated to contain the set of changes
+ associated with this instance. This will always be freed when this
+ instance is disposed or finalized.
+
+
+
+
+ Constructs an instance of this class using the specified native
+ memory buffer and native iterator handle.
+
+
+ The native memory buffer to use.
+
+
+ The native iterator handle to use.
+
+
+ Non-zero if this instance is to take ownership of the native
+ iterator handle specified by .
+
+
+
+
+ Attempts to create an instance of this class using the specified
+ raw byte data.
+
+
+ The raw byte data containing the set of changes for this native
+ iterator.
+
+
+ The new instance of this class -OR- null if it cannot be created.
+
+
+
+
+ Attempts to create an instance of this class using the specified
+ raw byte data.
+
+
+ The raw byte data containing the set of changes for this native
+ iterator.
+
+
+ The flags used to create the change set iterator.
+
+
+ The new instance of this class -OR- null if it cannot be created.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ This class manages the native change set iterator for a set of changes
+ backed by a instance.
+
+
+
+
+ The instance that is managing
+ the underlying used as the backing store for
+ the set of changes associated with this native change set iterator.
+
+
+
+
+ Constructs an instance of this class using the specified native
+ iterator handle and .
+
+
+ The instance to use.
+
+
+ The native iterator handle to use.
+
+
+ Non-zero if this instance is to take ownership of the native
+ iterator handle specified by .
+
+
+
+
+ Attempts to create an instance of this class using the specified
+ .
+
+
+ The where the raw byte data for the set of
+ changes may be read.
+
+
+ The flags associated with the parent connection.
+
+
+ The new instance of this class -OR- null if it cannot be created.
+
+
+
+
+ Attempts to create an instance of this class using the specified
+ .
+
+
+ The where the raw byte data for the set of
+ changes may be read.
+
+
+ The flags associated with the parent connection.
+
+
+ The flags used to create the change set iterator.
+
+
+ The new instance of this class -OR- null if it cannot be created.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ This class is used to act as a bridge between a
+ instance and the delegates used with the native streaming API.
+
+
+
+
+ The managed stream instance used to in order to service the native
+ delegates for both input and output.
+
+
+
+
+ The flags associated with the connection.
+
+
+
+
+ The delegate used to provide input to the native streaming API.
+ It will be null -OR- point to the method.
+
+
+
+
+ The delegate used to provide output to the native streaming API.
+ It will be null -OR- point to the method.
+
+
+
+
+ Constructs a new instance of this class using the specified managed
+ stream and connection flags.
+
+
+ The managed stream instance to be used in order to service the
+ native delegates for both input and output.
+
+
+ The flags associated with the parent connection.
+
+
+
+
+ Queries and returns the flags associated with the connection for
+ this instance.
+
+
+ The value. There is no return
+ value reserved to indicate an error.
+
+
+
+
+ Returns a delegate that wraps the method,
+ creating it first if necessary.
+
+
+ A delegate that refers to the method.
+
+
+
+
+ Returns a delegate that wraps the method,
+ creating it first if necessary.
+
+
+ A delegate that refers to the method.
+
+
+
+
+ This method attempts to read bytes from
+ the managed stream, writing them to the
+ buffer.
+
+
+ Optional extra context information. Currently, this will always
+ have a value of .
+
+
+ A preallocated native buffer to receive the requested input bytes.
+ It must be at least bytes in size.
+
+
+ Upon entry, the number of bytes to read. Upon exit, the number of
+ bytes actually read. This value may be zero upon exit.
+
+
+ The value upon success -OR- an
+ appropriate error code upon failure.
+
+
+
+
+ This method attempts to write bytes to
+ the managed stream, reading them from the
+ buffer.
+
+
+ Optional extra context information. Currently, this will always
+ have a value of .
+
+
+ A preallocated native buffer containing the requested output
+ bytes. It must be at least bytes in
+ size.
+
+
+ The number of bytes to write.
+
+
+ The value upon success -OR- an
+ appropriate error code upon failure.
+
+
+
+
+ Disposes of this object instance.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ Finalizes this object instance.
+
+
+
+
+ This class manages a collection of
+ instances. When used, it takes responsibility for creating, returning,
+ and disposing of its instances.
+
+
+
+
+ The managed collection of
+ instances, keyed by their associated
+ instance.
+
+
+
+
+ The flags associated with the connection.
+
+
+
+
+ Constructs a new instance of this class using the specified
+ connection flags.
+
+
+ The flags associated with the parent connection.
+
+
+
+
+ Makes sure the collection of
+ is created.
+
+
+
+
+ Makes sure the collection of
+ is disposed.
+
+
+
+
+ Attempts to return a instance
+ suitable for the specified .
+
+
+ The instance. If this value is null, a null
+ value will be returned.
+
+
+ A instance. Typically, these
+ are always freshly created; however, this method is designed to
+ return the existing instance
+ associated with the specified stream, should one exist.
+
+
+
+
+ Disposes of this object instance.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ Finalizes this object instance.
+
+
+
+
+ This class represents a group of change sets (or patch sets).
+
+
+
+
+ The instance associated
+ with this change group.
+
+
+
+
+ The flags associated with the connection.
+
+
+
+
+ The native handle for this change group. This will be deleted when
+ this instance is disposed or finalized.
+
+
+
+
+ Constructs a new instance of this class using the specified
+ connection flags.
+
+
+ The flags associated with the parent connection.
+
+
+
+
+ Throws an exception if the native change group handle is invalid.
+
+
+
+
+ Makes sure the native change group handle is valid, creating it if
+ necessary.
+
+
+
+
+ Makes sure the instance
+ is available, creating it if necessary.
+
+
+
+
+ Attempts to return a instance
+ suitable for the specified .
+
+
+ The instance. If this value is null, a null
+ value will be returned.
+
+
+ A instance. Typically, these
+ are always freshly created; however, this method is designed to
+ return the existing instance
+ associated with the specified stream, should one exist.
+
+
+
+
+ Attempts to add a change set (or patch set) to this change group
+ instance. The underlying data must be contained entirely within
+ the byte array.
+
+
+ The raw byte data for the specified change set (or patch set).
+
+
+
+
+ Attempts to add a change set (or patch set) to this change group
+ instance. The underlying data will be read from the specified
+ .
+
+
+ The instance containing the raw change set
+ (or patch set) data to read.
+
+
+
+
+ Attempts to create and return, via , the
+ combined set of changes represented by this change group instance.
+
+
+ Upon success, this will contain the raw byte data for all the
+ changes in this change group instance.
+
+
+
+
+ Attempts to create and write, via , the
+ combined set of changes represented by this change group instance.
+
+
+ Upon success, the raw byte data for all the changes in this change
+ group instance will be written to this .
+
+
+
+
+ Disposes of this object instance.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ Finalizes this object instance.
+
+
+
+
+ This class represents the change tracking session associated with a
+ database.
+
+
+
+
+ The instance associated
+ with this session.
+
+
+
+
+ The name of the database (e.g. "main") for this session.
+
+
+
+
+ The native handle for this session. This will be deleted when
+ this instance is disposed or finalized.
+
+
+
+
+ The delegate used to provide table filtering to the native API.
+ It will be null -OR- point to the method.
+
+
+
+
+ The managed callback used to filter tables for this session. Set
+ via the method.
+
+
+
+
+ The optional application-defined context data that was passed to
+ the method. This value may be null.
+
+
+
+
+ Constructs a new instance of this class using the specified wrapped
+ native connection handle and associated flags.
+
+
+ The wrapped native connection handle to be associated with this
+ session.
+
+
+ The flags associated with the connection represented by the
+ value.
+
+
+ The name of the database (e.g. "main") for this session.
+
+
+
+
+ Throws an exception if the native session handle is invalid.
+
+
+
+
+ Makes sure the native session handle is valid, creating it if
+ necessary.
+
+
+
+
+ This method sets up the internal table filtering associated state
+ of this instance.
+
+
+ The table filter callback -OR- null to clear any existing table
+ filter callback.
+
+
+ The optional application-defined context data. This value may be
+ null.
+
+
+ The native
+ delegate -OR- null to clear any existing table filter.
+
+
+
+
+ Makes sure the instance
+ is available, creating it if necessary.
+
+
+
+
+ Attempts to return a instance
+ suitable for the specified .
+
+
+ The instance. If this value is null, a null
+ value will be returned.
+
+
+ A instance. Typically, these
+ are always freshly created; however, this method is designed to
+ return the existing instance
+ associated with the specified stream, should one exist.
+
+
+
+
+ This method is called when determining if a table needs to be
+ included in the tracked changes for the associated database.
+
+
+ Optional extra context information. Currently, this will always
+ have a value of .
+
+
+ The native pointer to the name of the table.
+
+
+ Non-zero if changes to the specified table should be considered;
+ otherwise, zero.
+
+
+
+
+ Determines if this session is currently tracking changes to its
+ associated database.
+
+
+ Non-zero if changes to the associated database are being trakced;
+ otherwise, zero.
+
+
+
+
+ Enables tracking of changes to the associated database.
+
+
+
+
+ Disables tracking of changes to the associated database.
+
+
+
+
+ Determines if this session is currently set to mark changes as
+ indirect (i.e. as though they were made via a trigger or foreign
+ key action).
+
+
+ Non-zero if changes to the associated database are being marked as
+ indirect; otherwise, zero.
+
+
+
+
+ Sets the indirect flag for this session. Subsequent changes will
+ be marked as indirect until this flag is changed again.
+
+
+
+
+ Clears the indirect flag for this session. Subsequent changes will
+ be marked as direct until this flag is changed again.
+
+
+
+
+ Determines if there are any tracked changes currently within the
+ data for this session.
+
+
+ Non-zero if there are no changes within the data for this session;
+ otherwise, zero.
+
+
+
+
+ Upon success, causes changes to the specified table(s) to start
+ being tracked. Any tables impacted by calls to this method will
+ not cause the callback
+ to be invoked.
+
+
+ The name of the table to be tracked -OR- null to track all
+ applicable tables within this database.
+
+
+
+
+ This method is used to set the table filter for this instance.
+
+
+ The table filter callback -OR- null to clear any existing table
+ filter callback.
+
+
+ The optional application-defined context data. This value may be
+ null.
+
+
+
+
+ Attempts to create and return, via , the
+ set of changes represented by this session instance.
+
+
+ Upon success, this will contain the raw byte data for all the
+ changes in this session instance.
+
+
+
+
+ Attempts to create and write, via , the
+ set of changes represented by this session instance.
+
+
+ Upon success, the raw byte data for all the changes in this session
+ instance will be written to this .
+
+
+
+
+ Attempts to create and return, via , the
+ set of changes represented by this session instance as a patch set.
+
+
+ Upon success, this will contain the raw byte data for all the
+ changes in this session instance.
+
+
+
+
+ Attempts to create and write, via , the
+ set of changes represented by this session instance as a patch set.
+
+
+ Upon success, the raw byte data for all the changes in this session
+ instance will be written to this .
+
+
+
+
+ This method loads the differences between two tables [with the same
+ name, set of columns, and primary key definition] into this session
+ instance.
+
+
+ The name of the database containing the table with the original
+ data (i.e. it will need updating in order to be identical to the
+ one within the database associated with this session instance).
+
+
+ The name of the table.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ This class represents the abstract concept of a set of changes. It
+ acts as the base class for the
+ and classes. It derives from
+ the class, which is used to hold
+ the underlying native connection handle open until the instances of
+ this class are disposed or finalized. It also provides the ability
+ to construct wrapped native delegates of the
+ and
+ types.
+
+
+
+
+ Constructs an instance of this class using the specified wrapped
+ native connection handle.
+
+
+ The wrapped native connection handle to be associated with this
+ change set.
+
+
+ The flags associated with the connection represented by the
+ value.
+
+
+
+
+ Creates and returns a concrete implementation of the
+ interface.
+
+
+ The native iterator handle to use.
+
+
+ An instance of the
+ interface, which can be used to fetch metadata associated with
+ the current item in this set of changes.
+
+
+
+
+ Attempts to create a
+ native delegate
+ that invokes the specified
+ delegate.
+
+
+ The to invoke when the
+ native delegate
+ is called. If this value is null then null is returned.
+
+
+ The optional application-defined context data. This value may be
+ null.
+
+
+ The created
+ native delegate -OR- null if it cannot be created.
+
+
+
+
+ Attempts to create a
+ native delegate
+ that invokes the specified
+ delegate.
+
+
+ The to invoke when the
+ native delegate
+ is called. If this value is null then null is returned.
+
+
+ The optional application-defined context data. This value may be
+ null.
+
+
+ The created
+ native delegate -OR- null if it cannot be created.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ This class represents a set of changes contained entirely in memory.
+
+
+
+
+ The raw byte data for this set of changes. Since this data must
+ be marshalled to a native memory buffer before being used, there
+ must be enough memory available to store at least two times the
+ amount of data contained within it.
+
+
+
+
+ The flags used to create the change set iterator.
+
+
+
+
+ Constructs an instance of this class using the specified raw byte
+ data and wrapped native connection handle.
+
+
+ The raw byte data for the specified change set (or patch set).
+
+
+ The wrapped native connection handle to be associated with this
+ set of changes.
+
+
+ The flags associated with the connection represented by the
+ value.
+
+
+
+
+ Constructs an instance of this class using the specified raw byte
+ data and wrapped native connection handle.
+
+
+ The raw byte data for the specified change set (or patch set).
+
+
+ The wrapped native connection handle to be associated with this
+ set of changes.
+
+
+ The flags associated with the connection represented by the
+ value.
+
+
+ The flags used to create the change set iterator.
+
+
+
+
+ This method "inverts" the set of changes within this instance.
+ Applying an inverted set of changes to a database reverses the
+ effects of applying the uninverted changes. Specifically:
+ ]]>]]>
+ Each DELETE change is changed to an INSERT, and
+ ]]>]]>
+ Each INSERT change is changed to a DELETE, and
+ ]]>]]>
+ For each UPDATE change, the old.* and new.* values are exchanged.
+ ]]>]]>
+ This method does not change the order in which changes appear
+ within the set of changes. It merely reverses the sense of each
+ individual change.
+
+
+ The new instance that represents
+ the resulting set of changes.
+
+
+
+
+ This method combines the specified set of changes with the ones
+ contained in this instance.
+
+
+ The changes to be combined with those in this instance.
+
+
+ The new instance that represents
+ the resulting set of changes.
+
+
+
+
+ Attempts to apply the set of changes in this instance to the
+ associated database.
+
+
+ The delegate that will need
+ to handle any conflicting changes that may arise.
+
+
+ The optional application-defined context data. This value may be
+ null.
+
+
+
+
+ Attempts to apply the set of changes in this instance to the
+ associated database.
+
+
+ The delegate that will need
+ to handle any conflicting changes that may arise.
+
+
+ The optional delegate
+ that can be used to filter the list of tables impacted by the set
+ of changes.
+
+
+ The optional application-defined context data. This value may be
+ null.
+
+
+
+
+ Creates an capable of iterating over the
+ items within this set of changes.
+
+
+ The new
+ instance.
+
+
+
+
+ Creates an capable of iterating over the
+ items within this set of changes.
+
+
+ The new instance.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ This class represents a set of changes that are backed by a
+ instance.
+
+
+
+
+ The instance that is managing
+ the underlying input used as the backing
+ store for the set of changes associated with this instance.
+
+
+
+
+ The instance that is managing
+ the underlying output used as the backing
+ store for the set of changes generated by the
+ or methods.
+
+
+
+
+ The instance used as the backing store for
+ the set of changes associated with this instance.
+
+
+
+
+ The instance used as the backing store for
+ the set of changes generated by the or
+ methods.
+
+
+
+
+ The flags used to create the change set iterator.
+
+
+
+
+ Constructs an instance of this class using the specified streams
+ and wrapped native connection handle.
+
+
+ The where the raw byte data for the set of
+ changes may be read.
+
+
+ The where the raw byte data for resulting
+ sets of changes may be written.
+
+
+ The wrapped native connection handle to be associated with this
+ set of changes.
+
+
+ The flags associated with the connection represented by the
+ value.
+
+
+
+
+ Constructs an instance of this class using the specified streams
+ and wrapped native connection handle.
+
+
+ The where the raw byte data for the set of
+ changes may be read.
+
+
+ The where the raw byte data for resulting
+ sets of changes may be written.
+
+
+ The wrapped native connection handle to be associated with this
+ set of changes.
+
+
+ The flags associated with the connection represented by the
+ value.
+
+
+ The flags used to create the change set iterator.
+
+
+
+
+ Throws an exception if the input stream or its associated stream
+ adapter are invalid.
+
+
+
+
+ Throws an exception if the output stream or its associated stream
+ adapter are invalid.
+
+
+
+
+ This method "inverts" the set of changes within this instance.
+ Applying an inverted set of changes to a database reverses the
+ effects of applying the uninverted changes. Specifically:
+ ]]>]]>
+ Each DELETE change is changed to an INSERT, and
+ ]]>]]>
+ Each INSERT change is changed to a DELETE, and
+ ]]>]]>
+ For each UPDATE change, the old.* and new.* values are exchanged.
+ ]]>]]>
+ This method does not change the order in which changes appear
+ within the set of changes. It merely reverses the sense of each
+ individual change.
+
+
+ Since the resulting set of changes is written to the output stream,
+ this method always returns null.
+
+
+
+
+ This method combines the specified set of changes with the ones
+ contained in this instance.
+
+
+ The changes to be combined with those in this instance.
+
+
+ Since the resulting set of changes is written to the output stream,
+ this method always returns null.
+
+
+
+
+ Attempts to apply the set of changes in this instance to the
+ associated database.
+
+
+ The delegate that will need
+ to handle any conflicting changes that may arise.
+
+
+ The optional application-defined context data. This value may be
+ null.
+
+
+
+
+ Attempts to apply the set of changes in this instance to the
+ associated database.
+
+
+ The delegate that will need
+ to handle any conflicting changes that may arise.
+
+
+ The optional delegate
+ that can be used to filter the list of tables impacted by the set
+ of changes.
+
+
+ The optional application-defined context data. This value may be
+ null.
+
+
+
+
+ Creates an capable of iterating over the
+ items within this set of changes.
+
+
+ The new
+ instance.
+
+
+
+
+ Creates an capable of iterating over the
+ items within this set of changes.
+
+
+ The new instance.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ This class represents an that is capable of
+ enumerating over a set of changes. It serves as the base class for the
+ and
+ classes. It manages and
+ owns an instance of the class.
+
+
+
+
+ This managed change set iterator is managed and owned by this
+ class. It will be disposed when this class is disposed.
+
+
+
+
+ Constructs an instance of this class using the specified managed
+ change set iterator.
+
+
+ The managed iterator instance to use.
+
+
+
+
+ Throws an exception if the managed iterator instance is invalid.
+
+
+
+
+ Sets the managed iterator instance to a new value.
+
+
+ The new managed iterator instance to use.
+
+
+
+
+ Disposes of the managed iterator instance and sets its value to
+ null.
+
+
+
+
+ Disposes of the existing managed iterator instance and then sets it
+ to a new value.
+
+
+ The new managed iterator instance to use.
+
+
+
+
+ Returns the current change within the set of changes, represented
+ by a instance.
+
+
+
+
+ Returns the current change within the set of changes, represented
+ by a instance.
+
+
+
+
+ Attempts to advance to the next item in the set of changes.
+
+
+ Non-zero if more items are available; otherwise, zero.
+
+
+
+
+ Throws because not all the
+ derived classes are able to support reset functionality.
+
+
+
+
+ Disposes of this object instance.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ Finalizes this object instance.
+
+
+
+
+ This class represents an that is capable of
+ enumerating over a set of changes contained entirely in memory.
+
+
+
+
+ The raw byte data for this set of changes. Since this data must
+ be marshalled to a native memory buffer before being used, there
+ must be enough memory available to store at least two times the
+ amount of data contained within it.
+
+
+
+
+ The flags used to create the change set iterator.
+
+
+
+
+ Constructs an instance of this class using the specified raw byte
+ data.
+
+
+ The raw byte data containing the set of changes for this
+ enumerator.
+
+
+
+
+ Constructs an instance of this class using the specified raw byte
+ data.
+
+
+ The raw byte data containing the set of changes for this
+ enumerator.
+
+
+ The flags used to create the change set iterator.
+
+
+
+
+ Resets the enumerator to its initial position.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ This class represents an that is capable of
+ enumerating over a set of changes backed by a
+ instance.
+
+
+
+
+ Constructs an instance of this class using the specified stream.
+
+
+ The where the raw byte data for the set of
+ changes may be read.
+
+
+ The flags associated with the parent connection.
+
+
+
+
+ Constructs an instance of this class using the specified stream.
+
+
+ The where the raw byte data for the set of
+ changes may be read.
+
+
+ The flags associated with the parent connection.
+
+
+ The flags used to create the change set iterator.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ This interface implements properties and methods used to fetch metadata
+ about one change within a set of changes for a database.
+
+
+
+
+ The instance to use. This
+ will NOT be owned by this class and will not be disposed upon this
+ class being disposed or finalized.
+
+
+
+
+ Constructs an instance of this class using the specified iterator
+ instance.
+
+
+ The managed iterator instance to use.
+
+
+
+
+ Throws an exception if the managed iterator instance is invalid.
+
+
+
+
+ Populates the underlying data for the ,
+ , , and
+ properties, using the appropriate native
+ API.
+
+
+
+
+ Populates the underlying data for the
+ property using the appropriate
+ native API.
+
+
+
+
+ Populates the underlying data for the
+ property using the
+ appropriate native API.
+
+
+
+
+ Backing field for the property. This value
+ will be null if this field has not yet been populated via the
+ underlying native API.
+
+
+
+
+ The name of the table the change was made to.
+
+
+
+
+ Backing field for the property. This
+ value will be null if this field has not yet been populated via the
+ underlying native API.
+
+
+
+
+ The number of columns impacted by this change. This value can be
+ used to determine the highest valid column index that may be used
+ with the , ,
+ and methods of this interface. It
+ will be this value minus one.
+
+
+
+
+ Backing field for the property. This
+ value will be null if this field has not yet been populated via the
+ underlying native API.
+
+
+
+
+ This will contain the value
+ ,
+ , or
+ , corresponding to
+ the overall type of change this item represents.
+
+
+
+
+ Backing field for the property. This value
+ will be null if this field has not yet been populated via the
+ underlying native API.
+
+
+
+
+ Non-zero if this change is considered to be indirect (i.e. as
+ though they were made via a trigger or foreign key action).
+
+
+
+
+ Backing field for the property.
+ This value will be null if this field has not yet been populated
+ via the underlying native API.
+
+
+
+
+ This array contains a for each column in
+ the table associated with this change. The element will be zero
+ if the column is not part of the primary key; otherwise, it will
+ be non-zero.
+
+
+
+
+ Backing field for the
+ property. This value will be null if this field has not yet been
+ populated via the underlying native API.
+
+
+
+
+ This method may only be called from within a
+ delegate when the conflict
+ type is . It
+ returns the total number of known foreign key violations in the
+ destination database.
+
+
+
+
+ Queries and returns the original value of a given column for this
+ change. This method may only be called when the
+ has a value of
+ or
+ .
+
+
+ The index for the column. This value must be between zero and one
+ less than the total number of columns for this table.
+
+
+ The original value of a given column for this change.
+
+
+
+
+ Queries and returns the updated value of a given column for this
+ change. This method may only be called when the
+ has a value of
+ or
+ .
+
+
+ The index for the column. This value must be between zero and one
+ less than the total number of columns for this table.
+
+
+ The updated value of a given column for this change.
+
+
+
+
+ Queries and returns the conflicting value of a given column for
+ this change. This method may only be called from within a
+ delegate when the conflict
+ type is or
+ .
+
+
+ The index for the column. This value must be between zero and one
+ less than the total number of columns for this table.
+
+
+ The conflicting value of a given column for this change.
+
+
+
+
+ Disposes of this object instance.
+
+
+
+
+ Non-zero if this object instance has been disposed.
+
+
+
+
+ Throws an exception if this object instance has been disposed.
+
+
+
+
+ Disposes or finalizes this object instance.
+
+
+ Non-zero if this object is being disposed; otherwise, this object
+ is being finalized.
+
+
+
+
+ Finalizes this object instance.
+
+
+
+
diff --git a/DLL/System.Interactive.Async.dll b/DLL/System.Interactive.Async.dll
new file mode 100644
index 0000000..48efea4
Binary files /dev/null and b/DLL/System.Interactive.Async.dll differ
diff --git a/DLL/System.Runtime.InteropServices.RuntimeInformation.dll b/DLL/System.Runtime.InteropServices.RuntimeInformation.dll
new file mode 100644
index 0000000..360e92a
Binary files /dev/null and b/DLL/System.Runtime.InteropServices.RuntimeInformation.dll differ
diff --git a/DLL/System.ValueTuple.dll b/DLL/System.ValueTuple.dll
new file mode 100644
index 0000000..1cadbf3
Binary files /dev/null and b/DLL/System.ValueTuple.dll differ
diff --git a/DLL/System.Web.Http.Owin.dll b/DLL/System.Web.Http.Owin.dll
new file mode 100644
index 0000000..2db6f2d
Binary files /dev/null and b/DLL/System.Web.Http.Owin.dll differ
diff --git a/DLL/System.Web.Http.dll b/DLL/System.Web.Http.dll
new file mode 100644
index 0000000..136113c
Binary files /dev/null and b/DLL/System.Web.Http.dll differ
diff --git a/DLL/ThoughtWorks.QRCode.dll b/DLL/ThoughtWorks.QRCode.dll
new file mode 100644
index 0000000..522c7ed
Binary files /dev/null and b/DLL/ThoughtWorks.QRCode.dll differ
diff --git a/DLL/UI.Framework.dll b/DLL/UI.Framework.dll
new file mode 100644
index 0000000..10d03be
Binary files /dev/null and b/DLL/UI.Framework.dll differ
diff --git a/DLL/UICorePlus.dll b/DLL/UICorePlus.dll
new file mode 100644
index 0000000..e3785f1
Binary files /dev/null and b/DLL/UICorePlus.dll differ
diff --git a/DLL/WeiQ.Framework.dll b/DLL/WeiQ.Framework.dll
new file mode 100644
index 0000000..411cbf6
Binary files /dev/null and b/DLL/WeiQ.Framework.dll differ
diff --git a/DLL/WeiQ.Framework.hvmprj b/DLL/WeiQ.Framework.hvmprj
new file mode 100644
index 0000000..060db9a
--- /dev/null
+++ b/DLL/WeiQ.Framework.hvmprj
@@ -0,0 +1,67 @@
+
+
+
+
+ .\WeiQ.Framework.dll
+
+
+
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ 5
+ 0
+ true
+ true
+ true
+ true
+
+
+ true
+ true
+ 1
+
+
+
+
+ true
+ true
+
+
+
diff --git a/DLL/WeiQ.Framework.snk b/DLL/WeiQ.Framework.snk
new file mode 100644
index 0000000..ddb1d27
--- /dev/null
+++ b/DLL/WeiQ.Framework.snk
@@ -0,0 +1 @@
+0024000004800000940000000602000000240000525341310004000001000100d5a0c7e494766fed85a57d1797641738ef18a7476257c4d2ff2c1fdda845dd5f7f0a9fcc52ba537b66ed6ff450595a520d2357eaa1ead76bf7852f8038f4a3d36e5daedde75674c48247bdb95670179305c96d037bb9c8b37665c42a43b744645996c025969a215abbf1d86b2c2c6a57a34cb968c801442b04e2bb765d82d4bf
\ No newline at end of file
diff --git a/DLL/ZipExtract.exe b/DLL/ZipExtract.exe
new file mode 100644
index 0000000..026aa32
Binary files /dev/null and b/DLL/ZipExtract.exe differ
diff --git a/DLL/grpc_csharp_ext.x64.dll b/DLL/grpc_csharp_ext.x64.dll
new file mode 100644
index 0000000..6ed5407
Binary files /dev/null and b/DLL/grpc_csharp_ext.x64.dll differ
diff --git a/DLL/grpc_csharp_ext.x86.dll b/DLL/grpc_csharp_ext.x86.dll
new file mode 100644
index 0000000..5a7fb96
Binary files /dev/null and b/DLL/grpc_csharp_ext.x86.dll differ
diff --git a/DLL/log4net.dll b/DLL/log4net.dll
new file mode 100644
index 0000000..e74861d
Binary files /dev/null and b/DLL/log4net.dll differ
diff --git a/DLL/mysql.data.dll b/DLL/mysql.data.dll
new file mode 100644
index 0000000..ac84b5e
Binary files /dev/null and b/DLL/mysql.data.dll differ
diff --git a/DLL/node.dll b/DLL/node.dll
new file mode 100644
index 0000000..a148004
Binary files /dev/null and b/DLL/node.dll differ
diff --git a/DLL/protobuf-net.dll b/DLL/protobuf-net.dll
new file mode 100644
index 0000000..de4701c
Binary files /dev/null and b/DLL/protobuf-net.dll differ
diff --git a/DLL/zxing.dll b/DLL/zxing.dll
new file mode 100644
index 0000000..b7cf916
Binary files /dev/null and b/DLL/zxing.dll differ
diff --git a/Document.shfbproj b/Document.shfbproj
new file mode 100644
index 0000000..69ce246
--- /dev/null
+++ b/Document.shfbproj
@@ -0,0 +1,96 @@
+
+
+
+
+
+ v4.7.2
+
+ Debug
+ AnyCPU
+ 2.0
+ {741bdc80-9707-44aa-9aff-061a61a353ae}
+ 2017.9.26.0
+
+ Documentation
+ Documentation
+ Documentation
+
+ .NET Framework 4.6.2
+ .\Help\
+ flcc
+ zh-CN
+ A Sandcastle Documented Class Library
+ 1.0.0.0
+ Guid
+ AboveNamespaces
+ False
+ False
+ 2
+ False
+ Blank
+ HtmlHelp1
+ C#
+ VS2013
+ True
+ True
+ False
+ False
+ OnlyWarningsAndErrors
+ 100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Summary, Parameter, AutoDocumentCtors, Namespace, AutoDocumentDispose
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnBuildSuccess
+
+
\ No newline at end of file
diff --git a/Document/apidoc.json b/Document/apidoc.json
new file mode 100644
index 0000000..4ffbed0
--- /dev/null
+++ b/Document/apidoc.json
@@ -0,0 +1,14 @@
+{
+ "name": "返利开发文档",
+ "version": "0.0.1",
+ "description": "接口文档描述",
+ "title": "返利接口文档",
+ "url" : "http://127.0.0.1:9998",
+ "sampleUrl" : "http://127.0.0.1:9998",
+ "order": [
+ "系统"
+ ],
+ "template": {
+ "forceLanguage": "zh_cn"
+ }
+}
\ No newline at end of file
diff --git a/FLSystem.sln b/FLSystem.sln
new file mode 100644
index 0000000..46abd6b
--- /dev/null
+++ b/FLSystem.sln
@@ -0,0 +1,1579 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.28307.960
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FLSystem", "FLSystem\FLSystem.csproj", "{2E04051F-0E96-409A-9F93-4418603E69D0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "类库", "类库", "{927E9767-FEA0-4FE7-A441-69E4CFEC0B48}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Api.Framework", "类库\Api.Framework\Api.Framework.csproj", "{DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}"
+ ProjectSection(ProjectDependencies) = postProject
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95} = {08421940-859B-4E93-B8D5-C4BEF64B0A95}
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758} = {2916C951-8BF2-4941-BF8D-EBC1E1A73758}
+ {F865D881-B9D2-4C90-9AD0-0667103827F6} = {F865D881-B9D2-4C90-9AD0-0667103827F6}
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5} = {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Chat.Framework", "类库\Chat.Framework\Chat.Framework.csproj", "{08421940-859B-4E93-B8D5-C4BEF64B0A95}"
+ ProjectSection(ProjectDependencies) = postProject
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758} = {2916C951-8BF2-4941-BF8D-EBC1E1A73758}
+ {F865D881-B9D2-4C90-9AD0-0667103827F6} = {F865D881-B9D2-4C90-9AD0-0667103827F6}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Grant.Framework", "类库\Grant.Framework\Grant.Framework.csproj", "{2916C951-8BF2-4941-BF8D-EBC1E1A73758}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F865D881-B9D2-4C90-9AD0-0667103827F6} = {F865D881-B9D2-4C90-9AD0-0667103827F6}
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "应用", "应用", "{7731056B-09B5-4494-907E-CDCD561F36FA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutoAnswer", "应用\AutoAnswer\AutoAnswer.csproj", "{E5A7E5DB-EB35-4542-BD69-22E263691CAA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BackupAndImport", "应用\BackupAndImport\BackupAndImport.csproj", "{35A30202-1D63-413A-AD12-8FFB24165B43}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CleaningTools", "应用\CleaningTools\CleaningTools.csproj", "{91A026DE-527F-4897-A1DC-01775E1CDD03}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PDDRebate", "应用\PDDRebate\PDDRebate.csproj", "{6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessageSupervises", "应用\MessageSupervises\MessageSupervises.csproj", "{659742CF-6EAD-42C6-B2EF-93F1FF2465F1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PointManage", "应用\PointManage\PointManage.csproj", "{8ED1828E-52D2-448A-B586-537C9D45501B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TBRebate", "应用\TBRebate\TBRebate.csproj", "{32FB3BAC-447A-471F-9A2F-698CE9700002}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UserFission", "应用\UserFission\UserFission.csproj", "{BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VideoFission", "应用\VideoFission\VideoFission.csproj", "{BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Weixin.CircleTools", "应用\Weixin.CircleTools\Weixin.CircleTools.csproj", "{00191980-D031-4C7D-99AA-69B26C43D2C6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Weixin.PDDCirclePromotion", "应用\Weixin.PDDCirclePromotion\Weixin.PDDCirclePromotion.csproj", "{E10D2202-D6D2-429B-8AA5-7586DF9605C1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Weixin.TBCirclePromotion", "应用\Weixin.TBCirclePromotion\Weixin.TBCirclePromotion.csproj", "{5F4FC620-9101-4630-ADB5-77B7DC057CF9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeActivity", "应用\FreeActivity\FreeActivity.csproj", "{8BA5CF87-767F-4D7A-996D-76D0CC790610}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JDRebate", "应用\JDRebate\JDRebate.csproj", "{7BB4FC1F-DFB0-43B1-85B0-A343DB109843}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Messaging", "Messaging\Messaging.csproj", "{189BF68E-7359-4884-AD95-EE00BE836C47}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WeChatCollectMoney", "应用\WeChatCollectMoney\WeChatCollectMoney.csproj", "{1E721FBD-B9A3-4D52-92AA-428A8ACD726A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Miniblink", "..\DLL库\Miniblink\Miniblink.csproj", "{B20B797D-67FA-4A46-945E-59390D6C0A36}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FLSystemMonitor", "FLSystemMonitor\FLSystemMonitor.csproj", "{95406794-F388-41A2-9ABD-F056894A7D43}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Easy4net", "..\DLL库\Easy4net\Easy4net\Easy4net.csproj", "{C54A1140-3F51-450A-A813-B556679934A8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EncDebug", "EncDebug\EncDebug.csproj", "{10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReadWechat", "ReadWechat\ReadWechat.csproj", "{D946300F-CC08-4FBD-A18E-766F66FD7F1F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UI.Framework", "类库\UI.Framework\UI.Framework.csproj", "{F865D881-B9D2-4C90-9AD0-0667103827F6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUP", "StartUP\StartUP.csproj", "{1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignContacts", "应用\SignContacts\SignContacts.csproj", "{5407B027-5203-48B2-8191-A3FF43D57B16}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Weixin.JDCirclePromotion", "应用\Weixin.JDCirclePromotion\Weixin.JDCirclePromotion.csproj", "{89E7BCC7-CDF2-433C-9848-327DA30FB281}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "socket.core", "C:\Users\秒单客\Desktop\软件图标\socket.core-master\socket.core\socket.core.csproj", "{CDBA3100-3794-4DFA-AE04-A1B84B9736FD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp1", "ConsoleApp1\ConsoleApp1.csproj", "{25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Weixin.AccurateCircle", "应用\Weixin.AccurateCircle\Weixin.AccurateCircle.csproj", "{A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WechatPC", "WechatPC\WechatPC.csproj", "{6D7A46AF-67DA-4919-99DD-A933EA14ED27}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SqlSugar", "类库\SqlSugar\SqlSugar.csproj", "{489BB790-226C-4FAD-8D1E-51D72A7FF8E5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CouponsSend", "应用\CouponsSend\CouponsSend.csproj", "{3D53BFC6-1C75-483A-BF7C-6B20F0152C66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Delivery.Plugin", "应用\Delivery.Plugin\Delivery.Plugin.csproj", "{4311A2FD-1032-47CE-B627-FE527A962288}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProductTool", "ProductTool\ProductTool.csproj", "{8CC5E981-FAAF-47C6-93C8-45986A077B9B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProductClient", "应用\ProductClient\ProductClient.csproj", "{B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Transmitter", "应用\Transmitter\Transmitter.csproj", "{ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}"
+EndProject
+Project("{911E67C6-3D85-4FCE-B560-20A9C3E3FF48}") = "WxRobot", "PCRobot\WxRobot.exe", "{31D3929C-175A-47E8-AD56-D6CB2B4CDF51}"
+ ProjectSection(DebuggerProjectSystem) = preProject
+ PortSupplier = 00000000-0000-0000-0000-000000000000
+ Executable = D:\代码同步\fl_system\PCRobot\WxRobot.exe
+ RemoteMachine = PC-20131209OMEZ
+ StartingDirectory = D:\代码同步\fl_system\PCRobot
+ Environment = 默认值
+ LaunchingEngine = 00000000-0000-0000-0000-000000000000
+ UseLegacyDebugEngines = No
+ LaunchSQLEngine = No
+ AttachLaunchAction = No
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PCRobot", "PCRobot\PCRobot.csproj", "{676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC} = {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebTools", "应用\WebTools\WebTools.csproj", "{823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PCRobotFile", "PCRobotFile", "{116B0EB5-AF61-4B16-8942-667CF8989044}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PCRobot.Pack", "PCRobot.Pack\PCRobot.Pack.csproj", "{C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebAPi", "应用\WebAPi\WebAPi.csproj", "{EDC2AC83-D4E3-4AFF-9690-9F631F224D21}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "循环的发消息", "应用\循环的发消息\循环的发消息.csproj", "{5BD19CCB-7D4E-4207-852D-3B630C57DF49}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EncourageUser", "应用\EncourageUser\EncourageUser.csproj", "{44593BAC-0617-483E-9AD7-BEF4336E14D7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "群成员监控", "应用\群成员监控\群成员监控.csproj", "{3EB20A81-87C6-4BFA-A66C-DDDB57806E09}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NewFans", "应用\NewFans\NewFans.csproj", "{1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WacheCheckUrl", "应用\WacheCheckUrl\WacheCheckUrl.csproj", "{CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Members", "Members\Members.csproj", "{649F9CBC-670C-4843-B835-5FF38D1F6B66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FissionData", "应用\FissionData\FissionData.csproj", "{2DAF9579-77B2-44E2-B359-887D8FA01EE5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FissionSend", "应用\FissionSend\FissionSend.csproj", "{09AFCD48-2450-42A2-851C-A83F28474D80}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "监听违规", "应用\监听违规\监听违规.csproj", "{242E7FA6-3518-4E73-9899-0A309BF8410C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RoomMembers", "应用\RoomMembers\RoomMembers.csproj", "{3CAA5D74-7533-49B5-A91F-169561CEEDAC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "同步老妖联盟上下级关系", "应用\同步老妖联盟上下级关系\同步老妖联盟上下级关系.csproj", "{534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GroupManager", "应用\GroupManager\GroupManager.csproj", "{DF4B1E13-144C-4419-B289-FCA08A68BC23}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPHRebate", "应用\WPHRebate\WPHRebate.csproj", "{2CB069FC-D25A-417E-837F-FAFDCEE639B2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Weixin.WPHCirclePromotion", "应用\Weixin.WPHCirclePromotion\Weixin.WPHCirclePromotion.csproj", "{1E56F851-0341-4F86-8401-A8B3452F94EB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AllRebatesActivity", "应用\AllRebatesActivity\AllRebatesActivity.csproj", "{5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpHelper", "类库\HttpHelper2.1\HttpHelper.csproj", "{B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OnlineRepair", "类库\OnlineRepair\OnlineRepair.csproj", "{0576158B-ACD4-4467-85A7-6055B278111E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DYRebate", "应用\DYRebate\DYRebate.csproj", "{6D011140-0E5F-4627-A010-529EFF6C9EFE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SelfFix", "SelfFix\SelfFix.csproj", "{B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SNRebate", "应用\SNRebate\SNRebate.csproj", "{6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "易转发自修复", "易转发自修复\易转发自修复.csproj", "{58FF110B-FDBC-4B53-B714-C3B171915616}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo", "应用\QQ采集项目\QQ采集项目\Demo.csproj", "{955877A4-0126-4014-A7A8-40BCA9DD0B7E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Weixin.SNCirclePromotion", "应用\Weixin.SNCirclePromotion\Weixin.SNCirclePromotion.csproj", "{7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Robot.Framework", "Coco.Framework\Robot.Framework.csproj", "{483D41CE-0A17-40C6-AF90-554794B2214E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KSRebate", "应用\KSRebate\KSRebate.csproj", "{BD719746-8782-4DA2-9469-75A03E02FAB9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSIMTurnMoney", "应用\CSIMTurnMoney\CSIMTurnMoney.csproj", "{91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
+ Debug|ARM64 = Debug|ARM64
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
+ Release|ARM64 = Release|ARM64
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|ARM.Build.0 = Debug|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|x64.Build.0 = Debug|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|x86.ActiveCfg = Debug|x86
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|x86.Build.0 = Debug|x86
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|ARM.ActiveCfg = Release|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|ARM.Build.0 = Release|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|ARM64.Build.0 = Release|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|x64.ActiveCfg = Release|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|x64.Build.0 = Release|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|x86.ActiveCfg = Release|x86
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|x86.Build.0 = Release|x86
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Debug|ARM.Build.0 = Debug|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Debug|x64.Build.0 = Debug|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Debug|x86.Build.0 = Debug|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Release|ARM.ActiveCfg = Release|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Release|ARM.Build.0 = Release|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Release|ARM64.Build.0 = Release|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Release|x64.ActiveCfg = Release|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Release|x64.Build.0 = Release|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Release|x86.ActiveCfg = Release|Any CPU
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07}.Release|x86.Build.0 = Release|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Debug|ARM.Build.0 = Debug|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Debug|x64.Build.0 = Debug|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Debug|x86.Build.0 = Debug|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Release|Any CPU.Build.0 = Release|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Release|ARM.ActiveCfg = Release|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Release|ARM.Build.0 = Release|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Release|ARM64.Build.0 = Release|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Release|x64.ActiveCfg = Release|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Release|x64.Build.0 = Release|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Release|x86.ActiveCfg = Release|Any CPU
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95}.Release|x86.Build.0 = Release|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Debug|ARM.Build.0 = Debug|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Debug|x64.Build.0 = Debug|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Debug|x86.Build.0 = Debug|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Release|ARM.ActiveCfg = Release|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Release|ARM.Build.0 = Release|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Release|ARM64.Build.0 = Release|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Release|x64.ActiveCfg = Release|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Release|x64.Build.0 = Release|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Release|x86.ActiveCfg = Release|Any CPU
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758}.Release|x86.Build.0 = Release|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Debug|ARM.Build.0 = Debug|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Debug|x64.Build.0 = Debug|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Debug|x86.Build.0 = Debug|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Release|ARM.ActiveCfg = Release|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Release|ARM.Build.0 = Release|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Release|ARM64.Build.0 = Release|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Release|x64.ActiveCfg = Release|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Release|x64.Build.0 = Release|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Release|x86.ActiveCfg = Release|Any CPU
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA}.Release|x86.Build.0 = Release|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Debug|ARM.Build.0 = Debug|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Debug|x64.Build.0 = Debug|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Debug|x86.Build.0 = Debug|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Release|Any CPU.Build.0 = Release|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Release|ARM.ActiveCfg = Release|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Release|ARM.Build.0 = Release|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Release|ARM64.Build.0 = Release|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Release|x64.ActiveCfg = Release|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Release|x64.Build.0 = Release|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Release|x86.ActiveCfg = Release|Any CPU
+ {35A30202-1D63-413A-AD12-8FFB24165B43}.Release|x86.Build.0 = Release|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Debug|ARM.Build.0 = Debug|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Debug|x64.Build.0 = Debug|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Debug|x86.Build.0 = Debug|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Release|Any CPU.Build.0 = Release|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Release|ARM.ActiveCfg = Release|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Release|ARM.Build.0 = Release|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Release|ARM64.Build.0 = Release|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Release|x64.ActiveCfg = Release|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Release|x64.Build.0 = Release|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Release|x86.ActiveCfg = Release|Any CPU
+ {91A026DE-527F-4897-A1DC-01775E1CDD03}.Release|x86.Build.0 = Release|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Debug|ARM.Build.0 = Debug|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Debug|x64.Build.0 = Debug|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Debug|x86.Build.0 = Debug|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Release|ARM.ActiveCfg = Release|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Release|ARM.Build.0 = Release|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Release|ARM64.Build.0 = Release|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Release|x64.ActiveCfg = Release|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Release|x64.Build.0 = Release|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Release|x86.ActiveCfg = Release|Any CPU
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33}.Release|x86.Build.0 = Release|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Debug|ARM.Build.0 = Debug|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Debug|x64.Build.0 = Debug|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Debug|x86.Build.0 = Debug|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Release|ARM.ActiveCfg = Release|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Release|ARM.Build.0 = Release|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Release|ARM64.Build.0 = Release|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Release|x64.ActiveCfg = Release|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Release|x64.Build.0 = Release|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Release|x86.ActiveCfg = Release|Any CPU
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1}.Release|x86.Build.0 = Release|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Debug|ARM.Build.0 = Debug|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Debug|x64.Build.0 = Debug|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Debug|x86.Build.0 = Debug|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Release|ARM.ActiveCfg = Release|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Release|ARM.Build.0 = Release|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Release|ARM64.Build.0 = Release|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Release|x64.ActiveCfg = Release|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Release|x64.Build.0 = Release|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Release|x86.ActiveCfg = Release|Any CPU
+ {8ED1828E-52D2-448A-B586-537C9D45501B}.Release|x86.Build.0 = Release|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Debug|ARM.Build.0 = Debug|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Debug|x64.Build.0 = Debug|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Debug|x86.Build.0 = Debug|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Release|Any CPU.Build.0 = Release|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Release|ARM.ActiveCfg = Release|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Release|ARM.Build.0 = Release|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Release|ARM64.Build.0 = Release|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Release|x64.ActiveCfg = Release|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Release|x64.Build.0 = Release|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Release|x86.ActiveCfg = Release|Any CPU
+ {32FB3BAC-447A-471F-9A2F-698CE9700002}.Release|x86.Build.0 = Release|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Debug|ARM.Build.0 = Debug|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Debug|x64.Build.0 = Debug|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Debug|x86.Build.0 = Debug|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Release|ARM.ActiveCfg = Release|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Release|ARM.Build.0 = Release|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Release|ARM64.Build.0 = Release|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Release|x64.ActiveCfg = Release|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Release|x64.Build.0 = Release|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Release|x86.ActiveCfg = Release|Any CPU
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA}.Release|x86.Build.0 = Release|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Debug|ARM.Build.0 = Debug|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Debug|x64.Build.0 = Debug|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Debug|x86.Build.0 = Debug|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Release|ARM.ActiveCfg = Release|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Release|ARM.Build.0 = Release|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Release|ARM64.Build.0 = Release|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Release|x64.ActiveCfg = Release|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Release|x64.Build.0 = Release|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Release|x86.ActiveCfg = Release|Any CPU
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3}.Release|x86.Build.0 = Release|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Debug|ARM.Build.0 = Debug|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Debug|x64.Build.0 = Debug|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Debug|x86.Build.0 = Debug|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Release|ARM.ActiveCfg = Release|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Release|ARM.Build.0 = Release|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Release|ARM64.Build.0 = Release|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Release|x64.ActiveCfg = Release|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Release|x64.Build.0 = Release|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Release|x86.ActiveCfg = Release|Any CPU
+ {00191980-D031-4C7D-99AA-69B26C43D2C6}.Release|x86.Build.0 = Release|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Debug|ARM.Build.0 = Debug|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Debug|x64.Build.0 = Debug|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Debug|x86.Build.0 = Debug|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Release|ARM.ActiveCfg = Release|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Release|ARM.Build.0 = Release|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Release|ARM64.Build.0 = Release|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Release|x64.ActiveCfg = Release|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Release|x64.Build.0 = Release|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Release|x86.ActiveCfg = Release|Any CPU
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1}.Release|x86.Build.0 = Release|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Debug|ARM.Build.0 = Debug|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Debug|x64.Build.0 = Debug|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Debug|x86.Build.0 = Debug|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Release|ARM.ActiveCfg = Release|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Release|ARM.Build.0 = Release|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Release|ARM64.Build.0 = Release|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Release|x64.ActiveCfg = Release|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Release|x64.Build.0 = Release|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Release|x86.ActiveCfg = Release|Any CPU
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9}.Release|x86.Build.0 = Release|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Debug|ARM.Build.0 = Debug|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Debug|x64.Build.0 = Debug|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Debug|x86.Build.0 = Debug|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Release|ARM.ActiveCfg = Release|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Release|ARM.Build.0 = Release|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Release|ARM64.Build.0 = Release|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Release|x64.ActiveCfg = Release|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Release|x64.Build.0 = Release|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Release|x86.ActiveCfg = Release|Any CPU
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610}.Release|x86.Build.0 = Release|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Debug|ARM.Build.0 = Debug|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Debug|x64.Build.0 = Debug|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Debug|x86.Build.0 = Debug|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Release|ARM.ActiveCfg = Release|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Release|ARM.Build.0 = Release|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Release|ARM64.Build.0 = Release|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Release|x64.ActiveCfg = Release|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Release|x64.Build.0 = Release|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Release|x86.ActiveCfg = Release|Any CPU
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843}.Release|x86.Build.0 = Release|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Debug|x86.Build.0 = Debug|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Release|Any CPU.Build.0 = Release|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Release|ARM.ActiveCfg = Release|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Release|x64.ActiveCfg = Release|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Release|x86.ActiveCfg = Release|Any CPU
+ {189BF68E-7359-4884-AD95-EE00BE836C47}.Release|x86.Build.0 = Release|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Debug|ARM.Build.0 = Debug|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Debug|x64.Build.0 = Debug|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Debug|x86.Build.0 = Debug|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Release|ARM.ActiveCfg = Release|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Release|ARM.Build.0 = Release|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Release|ARM64.Build.0 = Release|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Release|x64.ActiveCfg = Release|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Release|x64.Build.0 = Release|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Release|x86.ActiveCfg = Release|Any CPU
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A}.Release|x86.Build.0 = Release|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Debug|x86.Build.0 = Debug|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Release|ARM.ActiveCfg = Release|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Release|x64.ActiveCfg = Release|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Release|x86.ActiveCfg = Release|Any CPU
+ {B20B797D-67FA-4A46-945E-59390D6C0A36}.Release|x86.Build.0 = Release|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Debug|x86.Build.0 = Debug|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Release|Any CPU.Build.0 = Release|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Release|ARM.ActiveCfg = Release|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Release|x64.ActiveCfg = Release|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Release|x86.ActiveCfg = Release|Any CPU
+ {95406794-F388-41A2-9ABD-F056894A7D43}.Release|x86.Build.0 = Release|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Debug|x86.Build.0 = Debug|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Release|ARM.ActiveCfg = Release|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Release|x64.ActiveCfg = Release|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Release|x86.ActiveCfg = Release|Any CPU
+ {C54A1140-3F51-450A-A813-B556679934A8}.Release|x86.Build.0 = Release|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Debug|x86.Build.0 = Debug|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Release|ARM.ActiveCfg = Release|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Release|x64.ActiveCfg = Release|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Release|x86.ActiveCfg = Release|Any CPU
+ {10BD6B4C-1C99-4266-8B3F-5B3EDE218D3A}.Release|x86.Build.0 = Release|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Debug|x86.Build.0 = Debug|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Release|ARM.ActiveCfg = Release|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Release|x64.ActiveCfg = Release|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Release|x86.ActiveCfg = Release|Any CPU
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F}.Release|x86.Build.0 = Release|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Debug|ARM.Build.0 = Debug|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Debug|x64.Build.0 = Debug|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Debug|x86.Build.0 = Debug|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Release|ARM.ActiveCfg = Release|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Release|ARM.Build.0 = Release|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Release|ARM64.Build.0 = Release|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Release|x64.ActiveCfg = Release|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Release|x64.Build.0 = Release|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Release|x86.ActiveCfg = Release|Any CPU
+ {F865D881-B9D2-4C90-9AD0-0667103827F6}.Release|x86.Build.0 = Release|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Debug|x86.Build.0 = Debug|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Release|ARM.ActiveCfg = Release|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Release|x64.ActiveCfg = Release|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Release|x86.ActiveCfg = Release|Any CPU
+ {1C8DA3FE-0A59-4D9B-A32B-AA2CD16586F2}.Release|x86.Build.0 = Release|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Debug|ARM.Build.0 = Debug|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Debug|x64.Build.0 = Debug|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Debug|x86.Build.0 = Debug|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Release|ARM.ActiveCfg = Release|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Release|ARM.Build.0 = Release|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Release|ARM64.Build.0 = Release|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Release|x64.ActiveCfg = Release|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Release|x64.Build.0 = Release|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Release|x86.ActiveCfg = Release|Any CPU
+ {5407B027-5203-48B2-8191-A3FF43D57B16}.Release|x86.Build.0 = Release|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Debug|ARM.Build.0 = Debug|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Debug|x64.Build.0 = Debug|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Debug|x86.Build.0 = Debug|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Release|Any CPU.Build.0 = Release|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Release|ARM.ActiveCfg = Release|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Release|ARM.Build.0 = Release|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Release|ARM64.Build.0 = Release|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Release|x64.ActiveCfg = Release|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Release|x64.Build.0 = Release|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Release|x86.ActiveCfg = Release|Any CPU
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281}.Release|x86.Build.0 = Release|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Debug|x86.Build.0 = Debug|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Release|ARM.ActiveCfg = Release|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Release|x64.ActiveCfg = Release|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Release|x86.ActiveCfg = Release|Any CPU
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD}.Release|x86.Build.0 = Release|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Debug|x86.Build.0 = Debug|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Release|ARM.ActiveCfg = Release|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Release|x64.ActiveCfg = Release|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Release|x86.ActiveCfg = Release|Any CPU
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4}.Release|x86.Build.0 = Release|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Debug|ARM.Build.0 = Debug|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Debug|x64.Build.0 = Debug|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Debug|x86.Build.0 = Debug|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Release|ARM.ActiveCfg = Release|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Release|ARM.Build.0 = Release|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Release|ARM64.Build.0 = Release|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Release|x64.ActiveCfg = Release|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Release|x64.Build.0 = Release|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Release|x86.ActiveCfg = Release|Any CPU
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA}.Release|x86.Build.0 = Release|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Debug|x86.Build.0 = Debug|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Release|ARM.ActiveCfg = Release|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Release|x64.ActiveCfg = Release|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Release|x86.ActiveCfg = Release|Any CPU
+ {6D7A46AF-67DA-4919-99DD-A933EA14ED27}.Release|x86.Build.0 = Release|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Debug|x86.Build.0 = Debug|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Release|ARM.ActiveCfg = Release|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Release|x64.ActiveCfg = Release|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Release|x86.ActiveCfg = Release|Any CPU
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5}.Release|x86.Build.0 = Release|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Debug|ARM.Build.0 = Debug|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Debug|x64.Build.0 = Debug|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Debug|x86.Build.0 = Debug|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Release|ARM.ActiveCfg = Release|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Release|ARM.Build.0 = Release|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Release|ARM64.Build.0 = Release|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Release|x64.ActiveCfg = Release|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Release|x64.Build.0 = Release|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Release|x86.ActiveCfg = Release|Any CPU
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66}.Release|x86.Build.0 = Release|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Debug|ARM.Build.0 = Debug|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Debug|x64.Build.0 = Debug|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Debug|x86.Build.0 = Debug|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Release|ARM.ActiveCfg = Release|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Release|ARM.Build.0 = Release|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Release|ARM64.Build.0 = Release|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Release|x64.ActiveCfg = Release|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Release|x64.Build.0 = Release|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Release|x86.ActiveCfg = Release|Any CPU
+ {4311A2FD-1032-47CE-B627-FE527A962288}.Release|x86.Build.0 = Release|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Debug|x86.Build.0 = Debug|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Release|ARM.ActiveCfg = Release|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Release|x64.ActiveCfg = Release|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Release|x86.ActiveCfg = Release|Any CPU
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B}.Release|x86.Build.0 = Release|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Debug|ARM.Build.0 = Debug|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Debug|x64.Build.0 = Debug|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Debug|x86.Build.0 = Debug|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Release|ARM.ActiveCfg = Release|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Release|ARM.Build.0 = Release|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Release|ARM64.Build.0 = Release|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Release|x64.ActiveCfg = Release|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Release|x64.Build.0 = Release|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Release|x86.ActiveCfg = Release|Any CPU
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C}.Release|x86.Build.0 = Release|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Debug|x86.Build.0 = Debug|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Release|ARM.ActiveCfg = Release|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Release|x64.ActiveCfg = Release|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Release|x86.ActiveCfg = Release|Any CPU
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC}.Release|x86.Build.0 = Release|Any CPU
+ {31D3929C-175A-47E8-AD56-D6CB2B4CDF51}.Debug|Any CPU.ActiveCfg = Release
+ {31D3929C-175A-47E8-AD56-D6CB2B4CDF51}.Debug|ARM.ActiveCfg = Release
+ {31D3929C-175A-47E8-AD56-D6CB2B4CDF51}.Debug|ARM64.ActiveCfg = Release
+ {31D3929C-175A-47E8-AD56-D6CB2B4CDF51}.Debug|x64.ActiveCfg = Release
+ {31D3929C-175A-47E8-AD56-D6CB2B4CDF51}.Debug|x86.ActiveCfg = Release
+ {31D3929C-175A-47E8-AD56-D6CB2B4CDF51}.Release|Any CPU.ActiveCfg = Release
+ {31D3929C-175A-47E8-AD56-D6CB2B4CDF51}.Release|ARM.ActiveCfg = Release
+ {31D3929C-175A-47E8-AD56-D6CB2B4CDF51}.Release|ARM64.ActiveCfg = Release
+ {31D3929C-175A-47E8-AD56-D6CB2B4CDF51}.Release|x64.ActiveCfg = Release
+ {31D3929C-175A-47E8-AD56-D6CB2B4CDF51}.Release|x86.ActiveCfg = Release
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Debug|ARM.Build.0 = Debug|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Debug|x64.Build.0 = Debug|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Debug|x86.Build.0 = Debug|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Release|ARM.ActiveCfg = Release|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Release|ARM.Build.0 = Release|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Release|ARM64.Build.0 = Release|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Release|x64.ActiveCfg = Release|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Release|x64.Build.0 = Release|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Release|x86.ActiveCfg = Release|Any CPU
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D}.Release|x86.Build.0 = Release|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Debug|ARM.Build.0 = Debug|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Debug|x64.Build.0 = Debug|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Debug|x86.Build.0 = Debug|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Release|ARM.ActiveCfg = Release|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Release|ARM.Build.0 = Release|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Release|ARM64.Build.0 = Release|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Release|x64.ActiveCfg = Release|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Release|x64.Build.0 = Release|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Release|x86.ActiveCfg = Release|Any CPU
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0}.Release|x86.Build.0 = Release|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Debug|ARM.Build.0 = Debug|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Debug|x64.Build.0 = Debug|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Debug|x86.Build.0 = Debug|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Release|ARM.ActiveCfg = Release|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Release|ARM.Build.0 = Release|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Release|ARM64.Build.0 = Release|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Release|x64.ActiveCfg = Release|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Release|x64.Build.0 = Release|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Release|x86.ActiveCfg = Release|Any CPU
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}.Release|x86.Build.0 = Release|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Debug|ARM.Build.0 = Debug|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Debug|x64.Build.0 = Debug|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Debug|x86.Build.0 = Debug|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Release|ARM.ActiveCfg = Release|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Release|ARM.Build.0 = Release|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Release|ARM64.Build.0 = Release|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Release|x64.ActiveCfg = Release|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Release|x64.Build.0 = Release|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Release|x86.ActiveCfg = Release|Any CPU
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21}.Release|x86.Build.0 = Release|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Debug|ARM.Build.0 = Debug|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Debug|x64.Build.0 = Debug|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Debug|x86.Build.0 = Debug|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Release|ARM.ActiveCfg = Release|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Release|ARM.Build.0 = Release|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Release|ARM64.Build.0 = Release|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Release|x64.ActiveCfg = Release|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Release|x64.Build.0 = Release|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Release|x86.ActiveCfg = Release|Any CPU
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49}.Release|x86.Build.0 = Release|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Debug|ARM.Build.0 = Debug|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Debug|x64.Build.0 = Debug|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Debug|x86.Build.0 = Debug|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Release|ARM.ActiveCfg = Release|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Release|ARM.Build.0 = Release|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Release|ARM64.Build.0 = Release|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Release|x64.ActiveCfg = Release|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Release|x64.Build.0 = Release|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Release|x86.ActiveCfg = Release|Any CPU
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7}.Release|x86.Build.0 = Release|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Debug|ARM.Build.0 = Debug|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Debug|x64.Build.0 = Debug|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Debug|x86.Build.0 = Debug|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Release|ARM.ActiveCfg = Release|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Release|ARM.Build.0 = Release|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Release|ARM64.Build.0 = Release|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Release|x64.ActiveCfg = Release|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Release|x64.Build.0 = Release|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Release|x86.ActiveCfg = Release|Any CPU
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09}.Release|x86.Build.0 = Release|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Debug|ARM.Build.0 = Debug|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Debug|x64.Build.0 = Debug|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Debug|x86.Build.0 = Debug|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Release|ARM.ActiveCfg = Release|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Release|ARM.Build.0 = Release|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Release|ARM64.Build.0 = Release|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Release|x64.ActiveCfg = Release|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Release|x64.Build.0 = Release|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Release|x86.ActiveCfg = Release|Any CPU
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B}.Release|x86.Build.0 = Release|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Debug|ARM.Build.0 = Debug|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Debug|x64.Build.0 = Debug|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Debug|x86.Build.0 = Debug|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Release|ARM.ActiveCfg = Release|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Release|ARM.Build.0 = Release|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Release|ARM64.Build.0 = Release|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Release|x64.ActiveCfg = Release|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Release|x64.Build.0 = Release|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Release|x86.ActiveCfg = Release|Any CPU
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1}.Release|x86.Build.0 = Release|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Debug|ARM.Build.0 = Debug|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Debug|x64.Build.0 = Debug|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Debug|x86.Build.0 = Debug|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Release|Any CPU.Build.0 = Release|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Release|ARM.ActiveCfg = Release|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Release|ARM.Build.0 = Release|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Release|ARM64.Build.0 = Release|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Release|x64.ActiveCfg = Release|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Release|x64.Build.0 = Release|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Release|x86.ActiveCfg = Release|Any CPU
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66}.Release|x86.Build.0 = Release|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Debug|ARM.Build.0 = Debug|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Debug|x64.Build.0 = Debug|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Debug|x86.Build.0 = Debug|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Release|ARM.ActiveCfg = Release|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Release|ARM.Build.0 = Release|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Release|ARM64.Build.0 = Release|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Release|x64.ActiveCfg = Release|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Release|x64.Build.0 = Release|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Release|x86.ActiveCfg = Release|Any CPU
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5}.Release|x86.Build.0 = Release|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Debug|ARM.Build.0 = Debug|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Debug|x64.Build.0 = Debug|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Debug|x86.Build.0 = Debug|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Release|Any CPU.Build.0 = Release|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Release|ARM.ActiveCfg = Release|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Release|ARM.Build.0 = Release|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Release|ARM64.Build.0 = Release|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Release|x64.ActiveCfg = Release|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Release|x64.Build.0 = Release|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Release|x86.ActiveCfg = Release|Any CPU
+ {09AFCD48-2450-42A2-851C-A83F28474D80}.Release|x86.Build.0 = Release|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Debug|ARM.Build.0 = Debug|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Debug|x64.Build.0 = Debug|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Debug|x86.Build.0 = Debug|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Release|ARM.ActiveCfg = Release|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Release|ARM.Build.0 = Release|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Release|ARM64.Build.0 = Release|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Release|x64.ActiveCfg = Release|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Release|x64.Build.0 = Release|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Release|x86.ActiveCfg = Release|Any CPU
+ {242E7FA6-3518-4E73-9899-0A309BF8410C}.Release|x86.Build.0 = Release|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Debug|ARM.Build.0 = Debug|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Debug|x64.Build.0 = Debug|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Debug|x86.Build.0 = Debug|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Release|ARM.ActiveCfg = Release|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Release|ARM.Build.0 = Release|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Release|ARM64.Build.0 = Release|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Release|x64.ActiveCfg = Release|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Release|x64.Build.0 = Release|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Release|x86.ActiveCfg = Release|Any CPU
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC}.Release|x86.Build.0 = Release|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Debug|ARM.Build.0 = Debug|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Debug|x64.Build.0 = Debug|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Debug|x86.Build.0 = Debug|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Release|ARM.ActiveCfg = Release|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Release|ARM.Build.0 = Release|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Release|ARM64.Build.0 = Release|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Release|x64.ActiveCfg = Release|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Release|x64.Build.0 = Release|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Release|x86.ActiveCfg = Release|Any CPU
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C}.Release|x86.Build.0 = Release|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Debug|ARM.Build.0 = Debug|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Debug|x64.Build.0 = Debug|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Debug|x86.Build.0 = Debug|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Release|ARM.ActiveCfg = Release|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Release|ARM.Build.0 = Release|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Release|ARM64.Build.0 = Release|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Release|x64.ActiveCfg = Release|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Release|x64.Build.0 = Release|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Release|x86.ActiveCfg = Release|Any CPU
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23}.Release|x86.Build.0 = Release|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Debug|ARM.Build.0 = Debug|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Debug|x64.Build.0 = Debug|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Debug|x86.Build.0 = Debug|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Release|ARM.ActiveCfg = Release|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Release|ARM.Build.0 = Release|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Release|ARM64.Build.0 = Release|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Release|x64.ActiveCfg = Release|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Release|x64.Build.0 = Release|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Release|x86.ActiveCfg = Release|Any CPU
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2}.Release|x86.Build.0 = Release|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Debug|ARM.Build.0 = Debug|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Debug|x64.Build.0 = Debug|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Debug|x86.Build.0 = Debug|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Release|ARM.ActiveCfg = Release|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Release|ARM.Build.0 = Release|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Release|ARM64.Build.0 = Release|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Release|x64.ActiveCfg = Release|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Release|x64.Build.0 = Release|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Release|x86.ActiveCfg = Release|Any CPU
+ {1E56F851-0341-4F86-8401-A8B3452F94EB}.Release|x86.Build.0 = Release|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Debug|ARM.Build.0 = Debug|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Debug|x64.Build.0 = Debug|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Debug|x86.Build.0 = Debug|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Release|ARM.ActiveCfg = Release|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Release|ARM.Build.0 = Release|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Release|ARM64.Build.0 = Release|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Release|x64.ActiveCfg = Release|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Release|x64.Build.0 = Release|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Release|x86.ActiveCfg = Release|Any CPU
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5}.Release|x86.Build.0 = Release|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Debug|ARM.Build.0 = Debug|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Debug|x64.Build.0 = Debug|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Debug|x86.Build.0 = Debug|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Release|ARM.ActiveCfg = Release|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Release|ARM.Build.0 = Release|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Release|ARM64.Build.0 = Release|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Release|x64.ActiveCfg = Release|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Release|x64.Build.0 = Release|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Release|x86.ActiveCfg = Release|Any CPU
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE}.Release|x86.Build.0 = Release|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Debug|ARM.Build.0 = Debug|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Debug|x64.Build.0 = Debug|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Debug|x86.Build.0 = Debug|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Release|ARM.ActiveCfg = Release|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Release|ARM.Build.0 = Release|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Release|ARM64.Build.0 = Release|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Release|x64.ActiveCfg = Release|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Release|x64.Build.0 = Release|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Release|x86.ActiveCfg = Release|Any CPU
+ {0576158B-ACD4-4467-85A7-6055B278111E}.Release|x86.Build.0 = Release|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Debug|ARM.Build.0 = Debug|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Debug|x64.Build.0 = Debug|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Debug|x86.Build.0 = Debug|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Release|ARM.ActiveCfg = Release|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Release|ARM.Build.0 = Release|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Release|ARM64.Build.0 = Release|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Release|x64.ActiveCfg = Release|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Release|x64.Build.0 = Release|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Release|x86.ActiveCfg = Release|Any CPU
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE}.Release|x86.Build.0 = Release|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Debug|ARM.Build.0 = Debug|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Debug|x64.Build.0 = Debug|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Debug|x86.Build.0 = Debug|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Release|ARM.ActiveCfg = Release|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Release|ARM.Build.0 = Release|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Release|ARM64.Build.0 = Release|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Release|x64.ActiveCfg = Release|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Release|x64.Build.0 = Release|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Release|x86.ActiveCfg = Release|Any CPU
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5}.Release|x86.Build.0 = Release|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Debug|ARM.Build.0 = Debug|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Debug|x64.Build.0 = Debug|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Debug|x86.Build.0 = Debug|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Release|ARM.ActiveCfg = Release|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Release|ARM.Build.0 = Release|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Release|ARM64.Build.0 = Release|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Release|x64.ActiveCfg = Release|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Release|x64.Build.0 = Release|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Release|x86.ActiveCfg = Release|Any CPU
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B}.Release|x86.Build.0 = Release|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Debug|ARM.Build.0 = Debug|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Debug|x64.Build.0 = Debug|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Debug|x86.Build.0 = Debug|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Release|Any CPU.Build.0 = Release|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Release|ARM.ActiveCfg = Release|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Release|ARM.Build.0 = Release|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Release|ARM64.Build.0 = Release|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Release|x64.ActiveCfg = Release|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Release|x64.Build.0 = Release|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Release|x86.ActiveCfg = Release|Any CPU
+ {58FF110B-FDBC-4B53-B714-C3B171915616}.Release|x86.Build.0 = Release|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Debug|ARM.Build.0 = Debug|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Debug|x64.Build.0 = Debug|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Debug|x86.Build.0 = Debug|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Release|ARM.ActiveCfg = Release|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Release|ARM.Build.0 = Release|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Release|ARM64.Build.0 = Release|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Release|x64.ActiveCfg = Release|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Release|x64.Build.0 = Release|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Release|x86.ActiveCfg = Release|Any CPU
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E}.Release|x86.Build.0 = Release|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Debug|ARM.Build.0 = Debug|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Debug|x64.Build.0 = Debug|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Debug|x86.Build.0 = Debug|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Release|ARM.ActiveCfg = Release|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Release|ARM.Build.0 = Release|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Release|ARM64.Build.0 = Release|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Release|x64.ActiveCfg = Release|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Release|x64.Build.0 = Release|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Release|x86.ActiveCfg = Release|Any CPU
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB}.Release|x86.Build.0 = Release|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Debug|ARM.Build.0 = Debug|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Debug|x64.Build.0 = Debug|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Debug|x86.ActiveCfg = Debug|x86
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Debug|x86.Build.0 = Debug|x86
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Release|ARM.ActiveCfg = Release|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Release|ARM.Build.0 = Release|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Release|ARM64.Build.0 = Release|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Release|x64.ActiveCfg = Release|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Release|x64.Build.0 = Release|Any CPU
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Release|x86.ActiveCfg = Release|x86
+ {483D41CE-0A17-40C6-AF90-554794B2214E}.Release|x86.Build.0 = Release|x86
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Debug|ARM.Build.0 = Debug|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Debug|x64.Build.0 = Debug|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Debug|x86.Build.0 = Debug|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Release|ARM.ActiveCfg = Release|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Release|ARM.Build.0 = Release|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Release|ARM64.Build.0 = Release|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Release|x64.ActiveCfg = Release|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Release|x64.Build.0 = Release|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Release|x86.ActiveCfg = Release|Any CPU
+ {BD719746-8782-4DA2-9469-75A03E02FAB9}.Release|x86.Build.0 = Release|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Debug|ARM.Build.0 = Debug|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Debug|x64.Build.0 = Debug|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Debug|x86.Build.0 = Debug|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Release|ARM.ActiveCfg = Release|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Release|ARM.Build.0 = Release|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Release|ARM64.Build.0 = Release|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Release|x64.ActiveCfg = Release|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Release|x64.Build.0 = Release|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Release|x86.ActiveCfg = Release|Any CPU
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {DFC8CD58-A475-4EBB-8A0E-0F1EE71EDA07} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {08421940-859B-4E93-B8D5-C4BEF64B0A95} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {2916C951-8BF2-4941-BF8D-EBC1E1A73758} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {E5A7E5DB-EB35-4542-BD69-22E263691CAA} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {35A30202-1D63-413A-AD12-8FFB24165B43} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {91A026DE-527F-4897-A1DC-01775E1CDD03} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {6E33B4DF-4A4C-4B16-8E1A-E4F43A616D33} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {659742CF-6EAD-42C6-B2EF-93F1FF2465F1} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {8ED1828E-52D2-448A-B586-537C9D45501B} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {32FB3BAC-447A-471F-9A2F-698CE9700002} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {BA23EBCB-6EFA-4779-BE34-58F4FFEC0AAA} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {BFEDB9C9-BDDA-4D73-B528-C958C1B2A8A3} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {00191980-D031-4C7D-99AA-69B26C43D2C6} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {E10D2202-D6D2-429B-8AA5-7586DF9605C1} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {5F4FC620-9101-4630-ADB5-77B7DC057CF9} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {8BA5CF87-767F-4D7A-996D-76D0CC790610} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {7BB4FC1F-DFB0-43B1-85B0-A343DB109843} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {189BF68E-7359-4884-AD95-EE00BE836C47} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {1E721FBD-B9A3-4D52-92AA-428A8ACD726A} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {B20B797D-67FA-4A46-945E-59390D6C0A36} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {C54A1140-3F51-450A-A813-B556679934A8} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {D946300F-CC08-4FBD-A18E-766F66FD7F1F} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {F865D881-B9D2-4C90-9AD0-0667103827F6} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {5407B027-5203-48B2-8191-A3FF43D57B16} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {89E7BCC7-CDF2-433C-9848-327DA30FB281} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {CDBA3100-3794-4DFA-AE04-A1B84B9736FD} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {25E0D8EA-56B7-4DF1-A07C-1831D699F9B4} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {A9B42891-505B-4BAE-9EE8-AF62C92BC4DA} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {489BB790-226C-4FAD-8D1E-51D72A7FF8E5} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {3D53BFC6-1C75-483A-BF7C-6B20F0152C66} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {4311A2FD-1032-47CE-B627-FE527A962288} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {8CC5E981-FAAF-47C6-93C8-45986A077B9B} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {B2FF88C8-B6B3-4FDE-ADFE-FCC702A9CD4C} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {ADB455D6-B2F9-4C61-90EE-60D2C04D16BC} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {676D6EF4-FD4E-48E2-8AAE-14AC4B2F4B1D} = {116B0EB5-AF61-4B16-8942-667CF8989044}
+ {823E5AFA-4A55-4338-8CE5-7FBAFAC103D0} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {116B0EB5-AF61-4B16-8942-667CF8989044} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC} = {116B0EB5-AF61-4B16-8942-667CF8989044}
+ {EDC2AC83-D4E3-4AFF-9690-9F631F224D21} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {5BD19CCB-7D4E-4207-852D-3B630C57DF49} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {44593BAC-0617-483E-9AD7-BEF4336E14D7} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {3EB20A81-87C6-4BFA-A66C-DDDB57806E09} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {1185C5AA-3D1B-44F0-96EB-CFA4C4D7372B} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {CDD49C07-90A3-4244-B3D7-D6A590D0E5C1} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {649F9CBC-670C-4843-B835-5FF38D1F6B66} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {2DAF9579-77B2-44E2-B359-887D8FA01EE5} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {09AFCD48-2450-42A2-851C-A83F28474D80} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {242E7FA6-3518-4E73-9899-0A309BF8410C} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {3CAA5D74-7533-49B5-A91F-169561CEEDAC} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {534131C2-BA76-43F6-BE09-1DDEAFE4AC5C} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {DF4B1E13-144C-4419-B289-FCA08A68BC23} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {2CB069FC-D25A-417E-837F-FAFDCEE639B2} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {1E56F851-0341-4F86-8401-A8B3452F94EB} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {5A6B6B66-43EE-4EB2-8E10-1E2CBB8B15F5} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {B54AE050-DD6C-4F73-95E8-9D8C1CF38FFE} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {0576158B-ACD4-4467-85A7-6055B278111E} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {6D011140-0E5F-4627-A010-529EFF6C9EFE} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {B89F11E0-446E-47A6-8FFD-E9AA1B3942E5} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {6B5413F2-9202-4B3E-8E79-A6C60BE9CC7B} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {58FF110B-FDBC-4B53-B714-C3B171915616} = {116B0EB5-AF61-4B16-8942-667CF8989044}
+ {955877A4-0126-4014-A7A8-40BCA9DD0B7E} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {7D4F373B-0FDA-4736-BCA4-629F00F6A8FB} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {483D41CE-0A17-40C6-AF90-554794B2214E} = {927E9767-FEA0-4FE7-A441-69E4CFEC0B48}
+ {BD719746-8782-4DA2-9469-75A03E02FAB9} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ {91C665C6-BE69-4A0C-AFC1-C2DBD82E97DC} = {7731056B-09B5-4494-907E-CDCD561F36FA}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {FC35004E-A0B3-48A7-9799-844D5A99B33F}
+ EndGlobalSection
+EndGlobal
diff --git a/FLSystem/About/FLSystem.html b/FLSystem/About/FLSystem.html
new file mode 100644
index 0000000..064c1d7
--- /dev/null
+++ b/FLSystem/About/FLSystem.html
@@ -0,0 +1 @@
+20d075e371acddc48a48892fd58481c75675d9fd7e74b7ae16e63feb7\u0026scene=0#rd]]\u003e\u003c/url\u003e\n \u003clowurl\u003e\u003c![CDATA[]]\u003e\u003c/lowurl\u003e\n \u003cappattach\u003e\n \u003ctotallen\u003e0\u003c/totallen\u003e\n \u003cattachid\u003e\u003c/attachid\u003e\n \u003cfileext\u003e\u003c/fileext\u003e\n \u003c/appattach\u003e\n \u003cextinfo\u003e\u003c/extinfo\u003e\n \u003cmmreader\u003e\n \u003ccategory type=\"20\" count=\"1\"\u003e\n \u003cname\u003e\u003c![CDATA[大华日记]]\u003e\u003c/name\u003e\n \u003ctopnew\u003e\n \u003ccover\u003e\u003c![CDATA[http://mmbiz.qpic.cn/mmbiz_jpg/GTpLGfYrTNxebKolOn4HzHWyEkqZibvueOB2z1cp5vxwAyHzyANR3vWiapE353zzXtFFSUBLWc0pR2KLa5hRGB0A/640?wxtype=jpeg\u0026wxfrom=0]]\u003e\u003c/cover\u003e\n \u003cwidth\u003e0\u003c/width\u003e\n \u003cheight\u003e0\u003c/height\u003e\n \u003cdigest\u003e\u003c![CDATA[]]\u003e\u003c/digest\u003e\n \u003c/topnew\u003e\n \n \u003citem\u003e\n \u003citemshowtype\u003e0\u003c/itemshowtype\u003e\n \u003ctitle\u003e\u003c![CDATA[值多少钱]]\u003e\u003c/title\u003e\n \u003curl\u003e\u003c![CDATA[http://mp.weixin.qq.com/s?__biz=MzI4MjAyOTE3Mw==\u0026mid=2457155782\u0026idx=1\u0026sn=3460cceaa05b65fb9c26b4db94dce229\u0026chksm=fc21a5dccb562cca37320d075e371acddc48a48892fd58481c75675d9fd7e74b7ae16e63feb7\u0026scene=0#rd]]\u003e\u003c/url\u003e\n \u003cshorturl\u003e\u003c![CDATA[]]\u003e\u003c/shorturl\u003e\n \u003clongurl\u003e\u003c![CDATA[]]\u003e\u003c/longurl\u003e\n \u003cpub_time\u003e1513609845\u003c/pub_time\u003e\n \u003ccover\u003e\u003c![CDATA[http://mmbiz.qpic.cn/mmbiz_jpg/GTpLGfYrTNxebKolOn4HzHWyEkqZibvueOB2z1cp5vxwAyHzyANR3vWiapE353zzXtFFSUBLWc0pR2KLa5hRGB0A/640?wxtype=jpeg\u0026wxfrom=0]]\u003e\u003c/cover\u003e\n \u003ctweetid\u003e\u003c/tweetid\u003e\n \u003cdigest\u003e\u003c![CDATA[]]\u003e\u003c/digest\u003e\n \u003cfileid\u003e309672130\u003c/fileid\u003e\n \u003csources\u003e\n \u003csource\u003e\n \u003cname\u003e\u003c![CDATA[大华日记]]\u003e\u003c/name\u003e\n \u003c/source\u003e\n \u003c/sources\u003e\n \u003cstyles\u003e\u003c/styles\u003e\n \u003cnative_url\u003e\u003c/native_url\u003e\n \u003cdel_flag\u003e0\u003c/del_flag\u003e\n \u003ccontentattr\u003e1\u003c/contentattr\u003e\n \u003cplay_length\u003e0\u003c/play_length\u003e\n \u003cplay_url\u003e\u003c![CDATA[]]\u003e\u003c/play_url\u003e\n \u003cplayer\u003e\u003c/player\u003e\n \u003cmusic_source\u003e\u003c/music_source\u003e\n \u003cpic_num\u003e\u003c/pic_num\u003e\n \u003c/item\u003e\n \n \u003c/category\u003e\n \u003cpublisher\u003e\n \u003cusername\u003e\u003c![CDATA[gh_ab371b6d18e7]]\u003e\u003c/username\u003e\n \u003cnickname\u003e\u003c![CDATA[大华日记]]\u003e\u003c/nickname\u003e\n \u003c/publisher\u003e\n \u003ctemplate_header\u003e\u003c/template_header\u003e\n \u003ctemplate_detail\u003e\u003c/template_detail\u003e\n \u003cforbid_forward\u003e0\u003c/forbid_forward\u003e\n \u003c/mmreader\u003e\n \u003cthumburl\u003e\u003c![CDATA[http://mmbiz.qpic.cn/mmbiz_jpg/GTpLGfYrTNxebKolOn4HzHWyEkqZibvueOB2z1cp5vxwAyHzyANR3vWiapE353zzXtFFSUBLWc0pR2KLa5hRGB0A/640?wxtype=jpeg\u0026wxfrom=0]]\u003e\u003c/thumburl\u003e\n \u003c/appmsg\u003e\n \u003cfromusername\u003e\u003c![CDATA[gh_ab371b6d18e7]]\u003e\u003c/fromuse7@chatroom","ToUserName":"wxid_8s44kddouuaj21","MsgType":3,"Content":"XIEHAIFENG823171:\n\u003c?xml version=\"1.0\"?\u003e\n\u003cmsg\u003e\n\t\u003cimg aeskey=\"f90b5a075995467bba3ae916bc11cd29\" encryver=\"0\" cdnthumbaeskey=\"f90b5a075995467bba3ae916bc11cd29\" cdnthumburl=\"3050020100044930470201000204a4e1c7cb02033d11ff02046bc9c0b702045a18ee140422373738313739363238374063686174726f6f6d333630395f313531313538333232370204010400020201000400\" cdnthumblength=\"3990\" cdnthumbheight=\"67\" cdnthumbwidth=\"120\" cdnmidheight=\"0\" cdnmidwidth=\"0\" cdnhdheight=\"0\" cdnhdwidth=\"0\" cdnmidimgurl=\"3050020100044930470201000204a4e1c7cb02033d11ff02046bc9c0b702045a18ee140422373738313739363238374063686174726f6f6d333630395f313531313538333232370204010400020201000400\" length=\"59485\" md5=\"4e9a631bafdf5b38c3a6c086f71cfe5a\" /\u003e\n\u003c/msg\u003e\n","Status":3,"ImgStatus":2,"ImgBuf":"/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABA
\ No newline at end of file
diff --git a/FLSystem/About/css/bootstrap.css b/FLSystem/About/css/bootstrap.css
new file mode 100644
index 0000000..fb15e3d
--- /dev/null
+++ b/FLSystem/About/css/bootstrap.css
@@ -0,0 +1,6584 @@
+/*!
+ * Bootstrap v3.3.4 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+body {
+ margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline;
+}
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+[hidden],
+template {
+ display: none;
+}
+a {
+ background-color: transparent;
+}
+a:active,
+a:hover {
+ outline: 0;
+}
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+b,
+strong {
+ font-weight: bold;
+}
+dfn {
+ font-style: italic;
+}
+h1 {
+ margin: .67em 0;
+ font-size: 2em;
+}
+mark {
+ color: #000;
+ background: #ff0;
+}
+small {
+ font-size: 80%;
+}
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+sup {
+ top: -.5em;
+}
+sub {
+ bottom: -.25em;
+}
+img {
+ border: 0;
+}
+svg:not(:root) {
+ overflow: hidden;
+}
+figure {
+ margin: 1em 40px;
+}
+hr {
+ height: 0;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+pre {
+ overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+ margin: 0;
+ font: inherit;
+ color: inherit;
+}
+button {
+ overflow: visible;
+}
+button,
+select {
+ text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+input {
+ line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0;
+}
+legend {
+ padding: 0;
+ border: 0;
+}
+textarea {
+ overflow: auto;
+}
+optgroup {
+ font-weight: bold;
+}
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+td,
+th {
+ padding: 0;
+}
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
+@media print {
+ *,
+ *:before,
+ *:after {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ }
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+ a[href^="#"]:after,
+ a[href^="javascript:"]:after {
+ content: "";
+ }
+ pre,
+ blockquote {
+ border: 1px solid #999;
+
+ page-break-inside: avoid;
+ }
+ thead {
+ display: table-header-group;
+ }
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+ img {
+ max-width: 100% !important;
+ }
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+ select {
+ background: #fff !important;
+ }
+ .navbar {
+ display: none;
+ }
+ .btn > .caret,
+ .dropup > .btn > .caret {
+ border-top-color: #000 !important;
+ }
+ .label {
+ border: 1px solid #000;
+ }
+ .table {
+ border-collapse: collapse !important;
+ }
+ .table td,
+ .table th {
+ background-color: #fff !important;
+ }
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #ddd !important;
+ }
+}
+@font-face {
+ font-family: 'Glyphicons Halflings';
+
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+.glyphicon-asterisk:before {
+ content: "\2a";
+}
+.glyphicon-plus:before {
+ content: "\2b";
+}
+.glyphicon-euro:before,
+.glyphicon-eur:before {
+ content: "\20ac";
+}
+.glyphicon-minus:before {
+ content: "\2212";
+}
+.glyphicon-cloud:before {
+ content: "\2601";
+}
+.glyphicon-envelope:before {
+ content: "\2709";
+}
+.glyphicon-pencil:before {
+ content: "\270f";
+}
+.glyphicon-glass:before {
+ content: "\e001";
+}
+.glyphicon-music:before {
+ content: "\e002";
+}
+.glyphicon-search:before {
+ content: "\e003";
+}
+.glyphicon-heart:before {
+ content: "\e005";
+}
+.glyphicon-star:before {
+ content: "\e006";
+}
+.glyphicon-star-empty:before {
+ content: "\e007";
+}
+.glyphicon-user:before {
+ content: "\e008";
+}
+.glyphicon-film:before {
+ content: "\e009";
+}
+.glyphicon-th-large:before {
+ content: "\e010";
+}
+.glyphicon-th:before {
+ content: "\e011";
+}
+.glyphicon-th-list:before {
+ content: "\e012";
+}
+.glyphicon-ok:before {
+ content: "\e013";
+}
+.glyphicon-remove:before {
+ content: "\e014";
+}
+.glyphicon-zoom-in:before {
+ content: "\e015";
+}
+.glyphicon-zoom-out:before {
+ content: "\e016";
+}
+.glyphicon-off:before {
+ content: "\e017";
+}
+.glyphicon-signal:before {
+ content: "\e018";
+}
+.glyphicon-cog:before {
+ content: "\e019";
+}
+.glyphicon-trash:before {
+ content: "\e020";
+}
+.glyphicon-home:before {
+ content: "\e021";
+}
+.glyphicon-file:before {
+ content: "\e022";
+}
+.glyphicon-time:before {
+ content: "\e023";
+}
+.glyphicon-road:before {
+ content: "\e024";
+}
+.glyphicon-download-alt:before {
+ content: "\e025";
+}
+.glyphicon-download:before {
+ content: "\e026";
+}
+.glyphicon-upload:before {
+ content: "\e027";
+}
+.glyphicon-inbox:before {
+ content: "\e028";
+}
+.glyphicon-play-circle:before {
+ content: "\e029";
+}
+.glyphicon-repeat:before {
+ content: "\e030";
+}
+.glyphicon-refresh:before {
+ content: "\e031";
+}
+.glyphicon-list-alt:before {
+ content: "\e032";
+}
+.glyphicon-lock:before {
+ content: "\e033";
+}
+.glyphicon-flag:before {
+ content: "\e034";
+}
+.glyphicon-headphones:before {
+ content: "\e035";
+}
+.glyphicon-volume-off:before {
+ content: "\e036";
+}
+.glyphicon-volume-down:before {
+ content: "\e037";
+}
+.glyphicon-volume-up:before {
+ content: "\e038";
+}
+.glyphicon-qrcode:before {
+ content: "\e039";
+}
+.glyphicon-barcode:before {
+ content: "\e040";
+}
+.glyphicon-tag:before {
+ content: "\e041";
+}
+.glyphicon-tags:before {
+ content: "\e042";
+}
+.glyphicon-book:before {
+ content: "\e043";
+}
+.glyphicon-bookmark:before {
+ content: "\e044";
+}
+.glyphicon-print:before {
+ content: "\e045";
+}
+.glyphicon-camera:before {
+ content: "\e046";
+}
+.glyphicon-font:before {
+ content: "\e047";
+}
+.glyphicon-bold:before {
+ content: "\e048";
+}
+.glyphicon-italic:before {
+ content: "\e049";
+}
+.glyphicon-text-height:before {
+ content: "\e050";
+}
+.glyphicon-text-width:before {
+ content: "\e051";
+}
+.glyphicon-align-left:before {
+ content: "\e052";
+}
+.glyphicon-align-center:before {
+ content: "\e053";
+}
+.glyphicon-align-right:before {
+ content: "\e054";
+}
+.glyphicon-align-justify:before {
+ content: "\e055";
+}
+.glyphicon-list:before {
+ content: "\e056";
+}
+.glyphicon-indent-left:before {
+ content: "\e057";
+}
+.glyphicon-indent-right:before {
+ content: "\e058";
+}
+.glyphicon-facetime-video:before {
+ content: "\e059";
+}
+.glyphicon-picture:before {
+ content: "\e060";
+}
+.glyphicon-map-marker:before {
+ content: "\e062";
+}
+.glyphicon-adjust:before {
+ content: "\e063";
+}
+.glyphicon-tint:before {
+ content: "\e064";
+}
+.glyphicon-edit:before {
+ content: "\e065";
+}
+.glyphicon-share:before {
+ content: "\e066";
+}
+.glyphicon-check:before {
+ content: "\e067";
+}
+.glyphicon-move:before {
+ content: "\e068";
+}
+.glyphicon-step-backward:before {
+ content: "\e069";
+}
+.glyphicon-fast-backward:before {
+ content: "\e070";
+}
+.glyphicon-backward:before {
+ content: "\e071";
+}
+.glyphicon-play:before {
+ content: "\e072";
+}
+.glyphicon-pause:before {
+ content: "\e073";
+}
+.glyphicon-stop:before {
+ content: "\e074";
+}
+.glyphicon-forward:before {
+ content: "\e075";
+}
+.glyphicon-fast-forward:before {
+ content: "\e076";
+}
+.glyphicon-step-forward:before {
+ content: "\e077";
+}
+.glyphicon-eject:before {
+ content: "\e078";
+}
+.glyphicon-chevron-left:before {
+ content: "\e079";
+}
+.glyphicon-chevron-right:before {
+ content: "\e080";
+}
+.glyphicon-plus-sign:before {
+ content: "\e081";
+}
+.glyphicon-minus-sign:before {
+ content: "\e082";
+}
+.glyphicon-remove-sign:before {
+ content: "\e083";
+}
+.glyphicon-ok-sign:before {
+ content: "\e084";
+}
+.glyphicon-question-sign:before {
+ content: "\e085";
+}
+.glyphicon-info-sign:before {
+ content: "\e086";
+}
+.glyphicon-screenshot:before {
+ content: "\e087";
+}
+.glyphicon-remove-circle:before {
+ content: "\e088";
+}
+.glyphicon-ok-circle:before {
+ content: "\e089";
+}
+.glyphicon-ban-circle:before {
+ content: "\e090";
+}
+.glyphicon-arrow-left:before {
+ content: "\e091";
+}
+.glyphicon-arrow-right:before {
+ content: "\e092";
+}
+.glyphicon-arrow-up:before {
+ content: "\e093";
+}
+.glyphicon-arrow-down:before {
+ content: "\e094";
+}
+.glyphicon-share-alt:before {
+ content: "\e095";
+}
+.glyphicon-resize-full:before {
+ content: "\e096";
+}
+.glyphicon-resize-small:before {
+ content: "\e097";
+}
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
+}
+.glyphicon-gift:before {
+ content: "\e102";
+}
+.glyphicon-leaf:before {
+ content: "\e103";
+}
+.glyphicon-fire:before {
+ content: "\e104";
+}
+.glyphicon-eye-open:before {
+ content: "\e105";
+}
+.glyphicon-eye-close:before {
+ content: "\e106";
+}
+.glyphicon-warning-sign:before {
+ content: "\e107";
+}
+.glyphicon-plane:before {
+ content: "\e108";
+}
+.glyphicon-calendar:before {
+ content: "\e109";
+}
+.glyphicon-random:before {
+ content: "\e110";
+}
+.glyphicon-comment:before {
+ content: "\e111";
+}
+.glyphicon-magnet:before {
+ content: "\e112";
+}
+.glyphicon-chevron-up:before {
+ content: "\e113";
+}
+.glyphicon-chevron-down:before {
+ content: "\e114";
+}
+.glyphicon-retweet:before {
+ content: "\e115";
+}
+.glyphicon-shopping-cart:before {
+ content: "\e116";
+}
+.glyphicon-folder-close:before {
+ content: "\e117";
+}
+.glyphicon-folder-open:before {
+ content: "\e118";
+}
+.glyphicon-resize-vertical:before {
+ content: "\e119";
+}
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
+}
+.glyphicon-hdd:before {
+ content: "\e121";
+}
+.glyphicon-bullhorn:before {
+ content: "\e122";
+}
+.glyphicon-bell:before {
+ content: "\e123";
+}
+.glyphicon-certificate:before {
+ content: "\e124";
+}
+.glyphicon-thumbs-up:before {
+ content: "\e125";
+}
+.glyphicon-thumbs-down:before {
+ content: "\e126";
+}
+.glyphicon-hand-right:before {
+ content: "\e127";
+}
+.glyphicon-hand-left:before {
+ content: "\e128";
+}
+.glyphicon-hand-up:before {
+ content: "\e129";
+}
+.glyphicon-hand-down:before {
+ content: "\e130";
+}
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
+}
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
+}
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
+}
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
+}
+.glyphicon-globe:before {
+ content: "\e135";
+}
+.glyphicon-wrench:before {
+ content: "\e136";
+}
+.glyphicon-tasks:before {
+ content: "\e137";
+}
+.glyphicon-filter:before {
+ content: "\e138";
+}
+.glyphicon-briefcase:before {
+ content: "\e139";
+}
+.glyphicon-fullscreen:before {
+ content: "\e140";
+}
+.glyphicon-dashboard:before {
+ content: "\e141";
+}
+.glyphicon-paperclip:before {
+ content: "\e142";
+}
+.glyphicon-heart-empty:before {
+ content: "\e143";
+}
+.glyphicon-link:before {
+ content: "\e144";
+}
+.glyphicon-phone:before {
+ content: "\e145";
+}
+.glyphicon-pushpin:before {
+ content: "\e146";
+}
+.glyphicon-usd:before {
+ content: "\e148";
+}
+.glyphicon-gbp:before {
+ content: "\e149";
+}
+.glyphicon-sort:before {
+ content: "\e150";
+}
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
+}
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
+}
+.glyphicon-sort-by-order:before {
+ content: "\e153";
+}
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
+}
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
+}
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
+}
+.glyphicon-unchecked:before {
+ content: "\e157";
+}
+.glyphicon-expand:before {
+ content: "\e158";
+}
+.glyphicon-collapse-down:before {
+ content: "\e159";
+}
+.glyphicon-collapse-up:before {
+ content: "\e160";
+}
+.glyphicon-log-in:before {
+ content: "\e161";
+}
+.glyphicon-flash:before {
+ content: "\e162";
+}
+.glyphicon-log-out:before {
+ content: "\e163";
+}
+.glyphicon-new-window:before {
+ content: "\e164";
+}
+.glyphicon-record:before {
+ content: "\e165";
+}
+.glyphicon-save:before {
+ content: "\e166";
+}
+.glyphicon-open:before {
+ content: "\e167";
+}
+.glyphicon-saved:before {
+ content: "\e168";
+}
+.glyphicon-import:before {
+ content: "\e169";
+}
+.glyphicon-export:before {
+ content: "\e170";
+}
+.glyphicon-send:before {
+ content: "\e171";
+}
+.glyphicon-floppy-disk:before {
+ content: "\e172";
+}
+.glyphicon-floppy-saved:before {
+ content: "\e173";
+}
+.glyphicon-floppy-remove:before {
+ content: "\e174";
+}
+.glyphicon-floppy-save:before {
+ content: "\e175";
+}
+.glyphicon-floppy-open:before {
+ content: "\e176";
+}
+.glyphicon-credit-card:before {
+ content: "\e177";
+}
+.glyphicon-transfer:before {
+ content: "\e178";
+}
+.glyphicon-cutlery:before {
+ content: "\e179";
+}
+.glyphicon-header:before {
+ content: "\e180";
+}
+.glyphicon-compressed:before {
+ content: "\e181";
+}
+.glyphicon-earphone:before {
+ content: "\e182";
+}
+.glyphicon-phone-alt:before {
+ content: "\e183";
+}
+.glyphicon-tower:before {
+ content: "\e184";
+}
+.glyphicon-stats:before {
+ content: "\e185";
+}
+.glyphicon-sd-video:before {
+ content: "\e186";
+}
+.glyphicon-hd-video:before {
+ content: "\e187";
+}
+.glyphicon-subtitles:before {
+ content: "\e188";
+}
+.glyphicon-sound-stereo:before {
+ content: "\e189";
+}
+.glyphicon-sound-dolby:before {
+ content: "\e190";
+}
+.glyphicon-sound-5-1:before {
+ content: "\e191";
+}
+.glyphicon-sound-6-1:before {
+ content: "\e192";
+}
+.glyphicon-sound-7-1:before {
+ content: "\e193";
+}
+.glyphicon-copyright-mark:before {
+ content: "\e194";
+}
+.glyphicon-registration-mark:before {
+ content: "\e195";
+}
+.glyphicon-cloud-download:before {
+ content: "\e197";
+}
+.glyphicon-cloud-upload:before {
+ content: "\e198";
+}
+.glyphicon-tree-conifer:before {
+ content: "\e199";
+}
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
+}
+.glyphicon-cd:before {
+ content: "\e201";
+}
+.glyphicon-save-file:before {
+ content: "\e202";
+}
+.glyphicon-open-file:before {
+ content: "\e203";
+}
+.glyphicon-level-up:before {
+ content: "\e204";
+}
+.glyphicon-copy:before {
+ content: "\e205";
+}
+.glyphicon-paste:before {
+ content: "\e206";
+}
+.glyphicon-alert:before {
+ content: "\e209";
+}
+.glyphicon-equalizer:before {
+ content: "\e210";
+}
+.glyphicon-king:before {
+ content: "\e211";
+}
+.glyphicon-queen:before {
+ content: "\e212";
+}
+.glyphicon-pawn:before {
+ content: "\e213";
+}
+.glyphicon-bishop:before {
+ content: "\e214";
+}
+.glyphicon-knight:before {
+ content: "\e215";
+}
+.glyphicon-baby-formula:before {
+ content: "\e216";
+}
+.glyphicon-tent:before {
+ content: "\26fa";
+}
+.glyphicon-blackboard:before {
+ content: "\e218";
+}
+.glyphicon-bed:before {
+ content: "\e219";
+}
+.glyphicon-apple:before {
+ content: "\f8ff";
+}
+.glyphicon-erase:before {
+ content: "\e221";
+}
+.glyphicon-hourglass:before {
+ content: "\231b";
+}
+.glyphicon-lamp:before {
+ content: "\e223";
+}
+.glyphicon-duplicate:before {
+ content: "\e224";
+}
+.glyphicon-piggy-bank:before {
+ content: "\e225";
+}
+.glyphicon-scissors:before {
+ content: "\e226";
+}
+.glyphicon-bitcoin:before {
+ content: "\e227";
+}
+.glyphicon-btc:before {
+ content: "\e227";
+}
+.glyphicon-xbt:before {
+ content: "\e227";
+}
+.glyphicon-yen:before {
+ content: "\00a5";
+}
+.glyphicon-jpy:before {
+ content: "\00a5";
+}
+.glyphicon-ruble:before {
+ content: "\20bd";
+}
+.glyphicon-rub:before {
+ content: "\20bd";
+}
+.glyphicon-scale:before {
+ content: "\e230";
+}
+.glyphicon-ice-lolly:before {
+ content: "\e231";
+}
+.glyphicon-ice-lolly-tasted:before {
+ content: "\e232";
+}
+.glyphicon-education:before {
+ content: "\e233";
+}
+.glyphicon-option-horizontal:before {
+ content: "\e234";
+}
+.glyphicon-option-vertical:before {
+ content: "\e235";
+}
+.glyphicon-menu-hamburger:before {
+ content: "\e236";
+}
+.glyphicon-modal-window:before {
+ content: "\e237";
+}
+.glyphicon-oil:before {
+ content: "\e238";
+}
+.glyphicon-grain:before {
+ content: "\e239";
+}
+.glyphicon-sunglasses:before {
+ content: "\e240";
+}
+.glyphicon-text-size:before {
+ content: "\e241";
+}
+.glyphicon-text-color:before {
+ content: "\e242";
+}
+.glyphicon-text-background:before {
+ content: "\e243";
+}
+.glyphicon-object-align-top:before {
+ content: "\e244";
+}
+.glyphicon-object-align-bottom:before {
+ content: "\e245";
+}
+.glyphicon-object-align-horizontal:before {
+ content: "\e246";
+}
+.glyphicon-object-align-left:before {
+ content: "\e247";
+}
+.glyphicon-object-align-vertical:before {
+ content: "\e248";
+}
+.glyphicon-object-align-right:before {
+ content: "\e249";
+}
+.glyphicon-triangle-right:before {
+ content: "\e250";
+}
+.glyphicon-triangle-left:before {
+ content: "\e251";
+}
+.glyphicon-triangle-bottom:before {
+ content: "\e252";
+}
+.glyphicon-triangle-top:before {
+ content: "\e253";
+}
+.glyphicon-console:before {
+ content: "\e254";
+}
+.glyphicon-superscript:before {
+ content: "\e255";
+}
+.glyphicon-subscript:before {
+ content: "\e256";
+}
+.glyphicon-menu-left:before {
+ content: "\e257";
+}
+.glyphicon-menu-right:before {
+ content: "\e258";
+}
+.glyphicon-menu-down:before {
+ content: "\e259";
+}
+.glyphicon-menu-up:before {
+ content: "\e260";
+}
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+html {
+ font-size: 10px;
+
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff;
+}
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+a {
+ color: #337ab7;
+ text-decoration: none;
+}
+a:hover,
+a:focus {
+ color: #23527c;
+ text-decoration: underline;
+}
+a:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+figure {
+ margin: 0;
+}
+img {
+ vertical-align: middle;
+}
+.img-responsive,
+.thumbnail > img,
+.thumbnail a > img,
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+.img-rounded {
+ border-radius: 6px;
+}
+.img-thumbnail {
+ display: inline-block;
+ max-width: 100%;
+ height: auto;
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+.img-circle {
+ border-radius: 50%;
+}
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+}
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
+[role="button"] {
+ cursor: pointer;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit;
+}
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+ font-weight: normal;
+ line-height: 1;
+ color: #777;
+}
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+ margin-top: 20px;
+ margin-bottom: 10px;
+}
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+ font-size: 65%;
+}
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+ font-size: 75%;
+}
+h1,
+.h1 {
+ font-size: 36px;
+}
+h2,
+.h2 {
+ font-size: 30px;
+}
+h3,
+.h3 {
+ font-size: 24px;
+}
+h4,
+.h4 {
+ font-size: 18px;
+}
+h5,
+.h5 {
+ font-size: 14px;
+}
+h6,
+.h6 {
+ font-size: 12px;
+}
+p {
+ margin: 0 0 10px;
+}
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.4;
+}
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px;
+ }
+}
+small,
+.small {
+ font-size: 85%;
+}
+mark,
+.mark {
+ padding: .2em;
+ background-color: #fcf8e3;
+}
+.text-left {
+ text-align: left;
+}
+.text-right {
+ text-align: right;
+}
+.text-center {
+ text-align: center;
+}
+.text-justify {
+ text-align: justify;
+}
+.text-nowrap {
+ white-space: nowrap;
+}
+.text-lowercase {
+ text-transform: lowercase;
+}
+.text-uppercase {
+ text-transform: uppercase;
+}
+.text-capitalize {
+ text-transform: capitalize;
+}
+.text-muted {
+ color: #777;
+}
+.text-primary {
+ color: #337ab7;
+}
+a.text-primary:hover {
+ color: #286090;
+}
+.text-success {
+ color: #3c763d;
+}
+a.text-success:hover {
+ color: #2b542c;
+}
+.text-info {
+ color: #31708f;
+}
+a.text-info:hover {
+ color: #245269;
+}
+.text-warning {
+ color: #8a6d3b;
+}
+a.text-warning:hover {
+ color: #66512c;
+}
+.text-danger {
+ color: #a94442;
+}
+a.text-danger:hover {
+ color: #843534;
+}
+.bg-primary {
+ color: #fff;
+ background-color: #337ab7;
+}
+a.bg-primary:hover {
+ background-color: #286090;
+}
+.bg-success {
+ background-color: #dff0d8;
+}
+a.bg-success:hover {
+ background-color: #c1e2b3;
+}
+.bg-info {
+ background-color: #d9edf7;
+}
+a.bg-info:hover {
+ background-color: #afd9ee;
+}
+.bg-warning {
+ background-color: #fcf8e3;
+}
+a.bg-warning:hover {
+ background-color: #f7ecb5;
+}
+.bg-danger {
+ background-color: #f2dede;
+}
+a.bg-danger:hover {
+ background-color: #e4b9b9;
+}
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee;
+}
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+ margin-bottom: 0;
+}
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+.list-inline {
+ padding-left: 0;
+ margin-left: -5px;
+ list-style: none;
+}
+.list-inline > li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+dl {
+ margin-top: 0;
+ margin-bottom: 20px;
+}
+dt,
+dd {
+ line-height: 1.42857143;
+}
+dt {
+ font-weight: bold;
+}
+dd {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .dl-horizontal dd {
+ margin-left: 180px;
+ }
+}
+abbr[title],
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #777;
+}
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+}
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+ margin-bottom: 0;
+}
+blockquote footer,
+blockquote small,
+blockquote .small {
+ display: block;
+ font-size: 80%;
+ line-height: 1.42857143;
+ color: #777;
+}
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+ content: '\2014 \00A0';
+}
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ text-align: right;
+ border-right: 5px solid #eee;
+ border-left: 0;
+}
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+ content: '';
+}
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+ content: '\00A0 \2014';
+}
+address {
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.42857143;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ background-color: #f9f2f4;
+ border-radius: 4px;
+}
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #fff;
+ background-color: #333;
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+}
+kbd kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: bold;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0;
+}
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+@media (min-width: 768px) {
+ .container {
+ width: 750px;
+ }
+}
+@media (min-width: 992px) {
+ .container {
+ width: 970px;
+ }
+}
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px;
+ }
+}
+.container-fluid {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+}
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+ float: left;
+}
+.col-xs-12 {
+ width: 100%;
+}
+.col-xs-11 {
+ width: 91.66666667%;
+}
+.col-xs-10 {
+ width: 83.33333333%;
+}
+.col-xs-9 {
+ width: 75%;
+}
+.col-xs-8 {
+ width: 66.66666667%;
+}
+.col-xs-7 {
+ width: 58.33333333%;
+}
+.col-xs-6 {
+ width: 50%;
+}
+.col-xs-5 {
+ width: 41.66666667%;
+}
+.col-xs-4 {
+ width: 33.33333333%;
+}
+.col-xs-3 {
+ width: 25%;
+}
+.col-xs-2 {
+ width: 16.66666667%;
+}
+.col-xs-1 {
+ width: 8.33333333%;
+}
+.col-xs-pull-12 {
+ right: 100%;
+}
+.col-xs-pull-11 {
+ right: 91.66666667%;
+}
+.col-xs-pull-10 {
+ right: 83.33333333%;
+}
+.col-xs-pull-9 {
+ right: 75%;
+}
+.col-xs-pull-8 {
+ right: 66.66666667%;
+}
+.col-xs-pull-7 {
+ right: 58.33333333%;
+}
+.col-xs-pull-6 {
+ right: 50%;
+}
+.col-xs-pull-5 {
+ right: 41.66666667%;
+}
+.col-xs-pull-4 {
+ right: 33.33333333%;
+}
+.col-xs-pull-3 {
+ right: 25%;
+}
+.col-xs-pull-2 {
+ right: 16.66666667%;
+}
+.col-xs-pull-1 {
+ right: 8.33333333%;
+}
+.col-xs-pull-0 {
+ right: auto;
+}
+.col-xs-push-12 {
+ left: 100%;
+}
+.col-xs-push-11 {
+ left: 91.66666667%;
+}
+.col-xs-push-10 {
+ left: 83.33333333%;
+}
+.col-xs-push-9 {
+ left: 75%;
+}
+.col-xs-push-8 {
+ left: 66.66666667%;
+}
+.col-xs-push-7 {
+ left: 58.33333333%;
+}
+.col-xs-push-6 {
+ left: 50%;
+}
+.col-xs-push-5 {
+ left: 41.66666667%;
+}
+.col-xs-push-4 {
+ left: 33.33333333%;
+}
+.col-xs-push-3 {
+ left: 25%;
+}
+.col-xs-push-2 {
+ left: 16.66666667%;
+}
+.col-xs-push-1 {
+ left: 8.33333333%;
+}
+.col-xs-push-0 {
+ left: auto;
+}
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left;
+ }
+ .col-sm-12 {
+ width: 100%;
+ }
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+ .col-sm-9 {
+ width: 75%;
+ }
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+ .col-sm-6 {
+ width: 50%;
+ }
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+ .col-sm-3 {
+ width: 25%;
+ }
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+ .col-sm-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-sm-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+ .col-sm-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-sm-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+ .col-sm-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-sm-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+ .col-sm-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-sm-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-sm-pull-0 {
+ right: auto;
+ }
+ .col-sm-push-12 {
+ left: 100%;
+ }
+ .col-sm-push-11 {
+ left: 91.66666667%;
+ }
+ .col-sm-push-10 {
+ left: 83.33333333%;
+ }
+ .col-sm-push-9 {
+ left: 75%;
+ }
+ .col-sm-push-8 {
+ left: 66.66666667%;
+ }
+ .col-sm-push-7 {
+ left: 58.33333333%;
+ }
+ .col-sm-push-6 {
+ left: 50%;
+ }
+ .col-sm-push-5 {
+ left: 41.66666667%;
+ }
+ .col-sm-push-4 {
+ left: 33.33333333%;
+ }
+ .col-sm-push-3 {
+ left: 25%;
+ }
+ .col-sm-push-2 {
+ left: 16.66666667%;
+ }
+ .col-sm-push-1 {
+ left: 8.33333333%;
+ }
+ .col-sm-push-0 {
+ left: auto;
+ }
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-sm-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left;
+ }
+ .col-md-12 {
+ width: 100%;
+ }
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+ .col-md-9 {
+ width: 75%;
+ }
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+ .col-md-6 {
+ width: 50%;
+ }
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+ .col-md-3 {
+ width: 25%;
+ }
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+ .col-md-pull-12 {
+ right: 100%;
+ }
+ .col-md-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-md-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-md-pull-9 {
+ right: 75%;
+ }
+ .col-md-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-md-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-md-pull-6 {
+ right: 50%;
+ }
+ .col-md-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-md-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-md-pull-3 {
+ right: 25%;
+ }
+ .col-md-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-md-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-md-pull-0 {
+ right: auto;
+ }
+ .col-md-push-12 {
+ left: 100%;
+ }
+ .col-md-push-11 {
+ left: 91.66666667%;
+ }
+ .col-md-push-10 {
+ left: 83.33333333%;
+ }
+ .col-md-push-9 {
+ left: 75%;
+ }
+ .col-md-push-8 {
+ left: 66.66666667%;
+ }
+ .col-md-push-7 {
+ left: 58.33333333%;
+ }
+ .col-md-push-6 {
+ left: 50%;
+ }
+ .col-md-push-5 {
+ left: 41.66666667%;
+ }
+ .col-md-push-4 {
+ left: 33.33333333%;
+ }
+ .col-md-push-3 {
+ left: 25%;
+ }
+ .col-md-push-2 {
+ left: 16.66666667%;
+ }
+ .col-md-push-1 {
+ left: 8.33333333%;
+ }
+ .col-md-push-0 {
+ left: auto;
+ }
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left;
+ }
+ .col-lg-12 {
+ width: 100%;
+ }
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+ .col-lg-9 {
+ width: 75%;
+ }
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+ .col-lg-6 {
+ width: 50%;
+ }
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+ .col-lg-3 {
+ width: 25%;
+ }
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+ .col-lg-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-lg-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+ .col-lg-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-lg-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+ .col-lg-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-lg-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+ .col-lg-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-lg-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-lg-pull-0 {
+ right: auto;
+ }
+ .col-lg-push-12 {
+ left: 100%;
+ }
+ .col-lg-push-11 {
+ left: 91.66666667%;
+ }
+ .col-lg-push-10 {
+ left: 83.33333333%;
+ }
+ .col-lg-push-9 {
+ left: 75%;
+ }
+ .col-lg-push-8 {
+ left: 66.66666667%;
+ }
+ .col-lg-push-7 {
+ left: 58.33333333%;
+ }
+ .col-lg-push-6 {
+ left: 50%;
+ }
+ .col-lg-push-5 {
+ left: 41.66666667%;
+ }
+ .col-lg-push-4 {
+ left: 33.33333333%;
+ }
+ .col-lg-push-3 {
+ left: 25%;
+ }
+ .col-lg-push-2 {
+ left: 16.66666667%;
+ }
+ .col-lg-push-1 {
+ left: 8.33333333%;
+ }
+ .col-lg-push-0 {
+ left: auto;
+ }
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+}
+table {
+ background-color: transparent;
+}
+caption {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ color: #777;
+ text-align: left;
+}
+th {
+ text-align: left;
+}
+.table {
+ width: 100%;
+ max-width: 100%;
+ margin-bottom: 20px;
+}
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th,
+.table > thead > tr > td,
+.table > tbody > tr > td,
+.table > tfoot > tr > td {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+}
+.table > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd;
+}
+.table > caption + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > th,
+.table > thead:first-child > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > td {
+ border-top: 0;
+}
+.table > tbody + tbody {
+ border-top: 2px solid #ddd;
+}
+.table .table {
+ background-color: #fff;
+}
+.table-condensed > thead > tr > th,
+.table-condensed > tbody > tr > th,
+.table-condensed > tfoot > tr > th,
+.table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > td {
+ padding: 5px;
+}
+.table-bordered {
+ border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+ border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+ border-bottom-width: 2px;
+}
+.table-striped > tbody > tr:nth-of-type(odd) {
+ background-color: #f9f9f9;
+}
+.table-hover > tbody > tr:hover {
+ background-color: #f5f5f5;
+}
+table col[class*="col-"] {
+ position: static;
+ display: table-column;
+ float: none;
+}
+table td[class*="col-"],
+table th[class*="col-"] {
+ position: static;
+ display: table-cell;
+ float: none;
+}
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+ background-color: #f5f5f5;
+}
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr:hover > .active,
+.table-hover > tbody > tr.active:hover > th {
+ background-color: #e8e8e8;
+}
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+ background-color: #dff0d8;
+}
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr:hover > .success,
+.table-hover > tbody > tr.success:hover > th {
+ background-color: #d0e9c6;
+}
+.table > thead > tr > td.info,
+.table > tbody > tr > td.info,
+.table > tfoot > tr > td.info,
+.table > thead > tr > th.info,
+.table > tbody > tr > th.info,
+.table > tfoot > tr > th.info,
+.table > thead > tr.info > td,
+.table > tbody > tr.info > td,
+.table > tfoot > tr.info > td,
+.table > thead > tr.info > th,
+.table > tbody > tr.info > th,
+.table > tfoot > tr.info > th {
+ background-color: #d9edf7;
+}
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr:hover > .info,
+.table-hover > tbody > tr.info:hover > th {
+ background-color: #c4e3f3;
+}
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+ background-color: #fcf8e3;
+}
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr:hover > .warning,
+.table-hover > tbody > tr.warning:hover > th {
+ background-color: #faf2cc;
+}
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+ background-color: #f2dede;
+}
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr:hover > .danger,
+.table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc;
+}
+.table-responsive {
+ min-height: .01%;
+ overflow-x: auto;
+}
+@media screen and (max-width: 767px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-y: hidden;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid #ddd;
+ }
+ .table-responsive > .table {
+ margin-bottom: 0;
+ }
+ .table-responsive > .table > thead > tr > th,
+ .table-responsive > .table > tbody > tr > th,
+ .table-responsive > .table > tfoot > tr > th,
+ .table-responsive > .table > thead > tr > td,
+ .table-responsive > .table > tbody > tr > td,
+ .table-responsive > .table > tfoot > tr > td {
+ white-space: nowrap;
+ }
+ .table-responsive > .table-bordered {
+ border: 0;
+ }
+ .table-responsive > .table-bordered > thead > tr > th:first-child,
+ .table-responsive > .table-bordered > tbody > tr > th:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+ .table-responsive > .table-bordered > thead > tr > td:first-child,
+ .table-responsive > .table-bordered > tbody > tr > td:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+ }
+ .table-responsive > .table-bordered > thead > tr > th:last-child,
+ .table-responsive > .table-bordered > tbody > tr > th:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+ .table-responsive > .table-bordered > thead > tr > td:last-child,
+ .table-responsive > .table-bordered > tbody > tr > td:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+ }
+ .table-responsive > .table-bordered > tbody > tr:last-child > th,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+ .table-responsive > .table-bordered > tbody > tr:last-child > td,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+ }
+}
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+label {
+ display: inline-block;
+ max-width: 100%;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+input[type="search"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ line-height: normal;
+}
+input[type="file"] {
+ display: block;
+}
+input[type="range"] {
+ display: block;
+ width: 100%;
+}
+select[multiple],
+select[size] {
+ height: auto;
+}
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+}
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
+ -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+}
+.form-control::-moz-placeholder {
+ color: #999;
+ opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+ color: #999;
+}
+.form-control::-webkit-input-placeholder {
+ color: #999;
+}
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ background-color: #eee;
+ opacity: 1;
+}
+.form-control[disabled],
+fieldset[disabled] .form-control {
+ cursor: not-allowed;
+}
+textarea.form-control {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-appearance: none;
+}
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+ input[type="date"],
+ input[type="time"],
+ input[type="datetime-local"],
+ input[type="month"] {
+ line-height: 34px;
+ }
+ input[type="date"].input-sm,
+ input[type="time"].input-sm,
+ input[type="datetime-local"].input-sm,
+ input[type="month"].input-sm,
+ .input-group-sm input[type="date"],
+ .input-group-sm input[type="time"],
+ .input-group-sm input[type="datetime-local"],
+ .input-group-sm input[type="month"] {
+ line-height: 30px;
+ }
+ input[type="date"].input-lg,
+ input[type="time"].input-lg,
+ input[type="datetime-local"].input-lg,
+ input[type="month"].input-lg,
+ .input-group-lg input[type="date"],
+ .input-group-lg input[type="time"],
+ .input-group-lg input[type="datetime-local"],
+ .input-group-lg input[type="month"] {
+ line-height: 46px;
+ }
+}
+.form-group {
+ margin-bottom: 15px;
+}
+.radio,
+.checkbox {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.radio label,
+.checkbox label {
+ min-height: 20px;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ cursor: pointer;
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ position: absolute;
+ margin-top: 4px \9;
+ margin-left: -20px;
+}
+.radio + .radio,
+.checkbox + .checkbox {
+ margin-top: -5px;
+}
+.radio-inline,
+.checkbox-inline {
+ position: relative;
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ vertical-align: middle;
+ cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px;
+}
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"].disabled,
+input[type="checkbox"].disabled,
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"] {
+ cursor: not-allowed;
+}
+.radio-inline.disabled,
+.checkbox-inline.disabled,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed;
+}
+.radio.disabled label,
+.checkbox.disabled label,
+fieldset[disabled] .radio label,
+fieldset[disabled] .checkbox label {
+ cursor: not-allowed;
+}
+.form-control-static {
+ min-height: 34px;
+ padding-top: 7px;
+ padding-bottom: 7px;
+ margin-bottom: 0;
+}
+.form-control-static.input-lg,
+.form-control-static.input-sm {
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-sm {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-sm {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-sm,
+select[multiple].input-sm {
+ height: auto;
+}
+.form-group-sm .form-control {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.form-group-sm .form-control {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.form-group-sm .form-control,
+select[multiple].form-group-sm .form-control {
+ height: auto;
+}
+.form-group-sm .form-control-static {
+ height: 30px;
+ min-height: 32px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+.input-lg {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+select.input-lg {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-lg,
+select[multiple].input-lg {
+ height: auto;
+}
+.form-group-lg .form-control {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+select.form-group-lg .form-control {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.form-group-lg .form-control,
+select[multiple].form-group-lg .form-control {
+ height: auto;
+}
+.form-group-lg .form-control-static {
+ height: 46px;
+ min-height: 38px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+}
+.has-feedback {
+ position: relative;
+}
+.has-feedback .form-control {
+ padding-right: 42.5px;
+}
+.form-control-feedback {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+ pointer-events: none;
+}
+.input-lg + .form-control-feedback {
+ width: 46px;
+ height: 46px;
+ line-height: 46px;
+}
+.input-sm + .form-control-feedback {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+}
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline,
+.has-success.radio label,
+.has-success.checkbox label,
+.has-success.radio-inline label,
+.has-success.checkbox-inline label {
+ color: #3c763d;
+}
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-success .form-control:focus {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+}
+.has-success .input-group-addon {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #3c763d;
+}
+.has-success .form-control-feedback {
+ color: #3c763d;
+}
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline,
+.has-warning.radio label,
+.has-warning.checkbox label,
+.has-warning.radio-inline label,
+.has-warning.checkbox-inline label {
+ color: #8a6d3b;
+}
+.has-warning .form-control {
+ border-color: #8a6d3b;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-warning .form-control:focus {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+}
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #8a6d3b;
+}
+.has-warning .form-control-feedback {
+ color: #8a6d3b;
+}
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline,
+.has-error.radio label,
+.has-error.checkbox label,
+.has-error.radio-inline label,
+.has-error.checkbox-inline label {
+ color: #a94442;
+}
+.has-error .form-control {
+ border-color: #a94442;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-error .form-control:focus {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+}
+.has-error .input-group-addon {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #a94442;
+}
+.has-error .form-control-feedback {
+ color: #a94442;
+}
+.has-feedback label ~ .form-control-feedback {
+ top: 25px;
+}
+.has-feedback label.sr-only ~ .form-control-feedback {
+ top: 0;
+}
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373;
+}
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .form-inline .form-control-static {
+ display: inline-block;
+ }
+ .form-inline .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .form-inline .input-group .input-group-addon,
+ .form-inline .input-group .input-group-btn,
+ .form-inline .input-group .form-control {
+ width: auto;
+ }
+ .form-inline .input-group > .form-control {
+ width: 100%;
+ }
+ .form-inline .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .radio,
+ .form-inline .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .radio label,
+ .form-inline .checkbox label {
+ padding-left: 0;
+ }
+ .form-inline .radio input[type="radio"],
+ .form-inline .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+ .form-inline .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+ padding-top: 7px;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+ min-height: 27px;
+}
+.form-horizontal .form-group {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ padding-top: 7px;
+ margin-bottom: 0;
+ text-align: right;
+ }
+}
+.form-horizontal .has-feedback .form-control-feedback {
+ right: 15px;
+}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-lg .control-label {
+ padding-top: 14.333333px;
+ }
+}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-sm .control-label {
+ padding-top: 6px;
+ }
+}
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus,
+.btn.focus,
+.btn:active.focus,
+.btn.active.focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+.btn:hover,
+.btn:focus,
+.btn.focus {
+ color: #333;
+ text-decoration: none;
+}
+.btn:active,
+.btn.active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+ pointer-events: none;
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ opacity: .65;
+}
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default:hover,
+.btn-default:focus,
+.btn-default.focus,
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+ background-image: none;
+}
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+.btn-primary {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary.focus,
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #286090;
+ border-color: #204d74;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ background-image: none;
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+.btn-primary .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success:hover,
+.btn-success:focus,
+.btn-success.focus,
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+ background-image: none;
+}
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info:hover,
+.btn-info:focus,
+.btn-info.focus,
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+ background-image: none;
+}
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning:hover,
+.btn-warning:focus,
+.btn-warning.focus,
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+ background-image: none;
+}
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger.focus,
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+ background-image: none;
+}
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+.btn-link {
+ font-weight: normal;
+ color: #337ab7;
+ border-radius: 0;
+}
+.btn-link,
+.btn-link:active,
+.btn-link.active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+ border-color: transparent;
+}
+.btn-link:hover,
+.btn-link:focus {
+ color: #23527c;
+ text-decoration: underline;
+ background-color: transparent;
+}
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+ color: #777;
+ text-decoration: none;
+}
+.btn-lg,
+.btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+.btn-sm,
+.btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-xs,
+.btn-group-xs > .btn {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-block {
+ display: block;
+ width: 100%;
+}
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%;
+}
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ -o-transition: opacity .15s linear;
+ transition: opacity .15s linear;
+}
+.fade.in {
+ opacity: 1;
+}
+.collapse {
+ display: none;
+}
+.collapse.in {
+ display: block;
+}
+tr.collapse.in {
+ display: table-row;
+}
+tbody.collapse.in {
+ display: table-row-group;
+}
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition-timing-function: ease;
+ -o-transition-timing-function: ease;
+ transition-timing-function: ease;
+ -webkit-transition-duration: .35s;
+ -o-transition-duration: .35s;
+ transition-duration: .35s;
+ -webkit-transition-property: height, visibility;
+ -o-transition-property: height, visibility;
+ transition-property: height, visibility;
+}
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px dashed;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+}
+.dropup,
+.dropdown {
+ position: relative;
+}
+.dropdown-toggle:focus {
+ outline: 0;
+}
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #262626;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ background-color: #337ab7;
+ outline: 0;
+}
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ color: #777;
+}
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.open > .dropdown-menu {
+ display: block;
+}
+.open > a {
+ outline: 0;
+}
+.dropdown-menu-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu-left {
+ right: auto;
+ left: 0;
+}
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #777;
+ white-space: nowrap;
+}
+.dropdown-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 990;
+}
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+ content: "";
+ border-top: 0;
+ border-bottom: 4px solid;
+}
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 2px;
+}
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+ .navbar-right .dropdown-menu-left {
+ right: auto;
+ left: 0;
+ }
+}
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+ position: relative;
+ float: left;
+}
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+ z-index: 2;
+}
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+ margin-left: -1px;
+}
+.btn-toolbar {
+ margin-left: -5px;
+}
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+ float: left;
+}
+.btn-toolbar > .btn,
+.btn-toolbar > .btn-group,
+.btn-toolbar > .input-group {
+ margin-left: 5px;
+}
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+.btn-group > .btn:first-child {
+ margin-left: 0;
+}
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group > .btn-group {
+ float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+.btn-group > .btn + .dropdown-toggle {
+ padding-right: 8px;
+ padding-left: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-right: 12px;
+ padding-left: 12px;
+}
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-group.open .dropdown-toggle.btn-link {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn .caret {
+ margin-left: 0;
+}
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0;
+}
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group,
+.btn-group-vertical > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+}
+.btn-group-vertical > .btn-group > .btn {
+ float: none;
+}
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+}
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 4px;
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+}
+.btn-group-justified > .btn,
+.btn-group-justified > .btn-group {
+ display: table-cell;
+ float: none;
+ width: 1%;
+}
+.btn-group-justified > .btn-group .btn {
+ width: 100%;
+}
+.btn-group-justified > .btn-group .dropdown-menu {
+ left: auto;
+}
+[data-toggle="buttons"] > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn input[type="checkbox"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ pointer-events: none;
+}
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate;
+}
+.input-group[class*="col-"] {
+ float: none;
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0;
+}
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+select.input-group-lg > .form-control,
+select.input-group-lg > .input-group-addon,
+select.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-group-lg > .form-control,
+textarea.input-group-lg > .input-group-addon,
+textarea.input-group-lg > .input-group-btn > .btn,
+select[multiple].input-group-lg > .form-control,
+select[multiple].input-group-lg > .input-group-addon,
+select[multiple].input-group-lg > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-group-sm > .form-control,
+select.input-group-sm > .input-group-addon,
+select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-group-sm > .form-control,
+textarea.input-group-sm > .input-group-addon,
+textarea.input-group-sm > .input-group-btn > .btn,
+select[multiple].input-group-sm > .form-control,
+select[multiple].input-group-sm > .input-group-addon,
+select[multiple].input-group-sm > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+}
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px;
+}
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px;
+}
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+ margin-top: 0;
+}
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.input-group-addon:first-child {
+ border-right: 0;
+}
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.input-group-addon:last-child {
+ border-left: 0;
+}
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap;
+}
+.input-group-btn > .btn {
+ position: relative;
+}
+.input-group-btn > .btn + .btn {
+ margin-left: -1px;
+}
+.input-group-btn > .btn:hover,
+.input-group-btn > .btn:focus,
+.input-group-btn > .btn:active {
+ z-index: 2;
+}
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+ margin-right: -1px;
+}
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group {
+ margin-left: -1px;
+}
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+.nav > li {
+ position: relative;
+ display: block;
+}
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+}
+.nav > li > a:hover,
+.nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.nav > li.disabled > a {
+ color: #777;
+}
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+ color: #777;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+ background-color: #eee;
+ border-color: #337ab7;
+}
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.nav > li > a > img {
+ max-width: none;
+}
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+ border-color: #eee #eee #ddd;
+}
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #555;
+ cursor: default;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0;
+}
+.nav-tabs.nav-justified > li {
+ float: none;
+}
+.nav-tabs.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-tabs.nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs.nav-justified > .active > a,
+ .nav-tabs.nav-justified > .active > a:hover,
+ .nav-tabs.nav-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.nav-pills > li {
+ float: left;
+}
+.nav-pills > li > a {
+ border-radius: 4px;
+}
+.nav-pills > li + li {
+ margin-left: 2px;
+}
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+ color: #fff;
+ background-color: #337ab7;
+}
+.nav-stacked > li {
+ float: none;
+}
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0;
+}
+.nav-justified {
+ width: 100%;
+}
+.nav-justified > li {
+ float: none;
+}
+.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs-justified {
+ border-bottom: 0;
+}
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs-justified > .active > a,
+ .nav-tabs-justified > .active > a:hover,
+ .nav-tabs-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.tab-content > .tab-pane {
+ display: none;
+}
+.tab-content > .active {
+ display: block;
+}
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar {
+ position: relative;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+}
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left;
+ }
+}
+.navbar-collapse {
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ -webkit-overflow-scrolling: touch;
+ border-top: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+}
+.navbar-collapse.in {
+ overflow-y: auto;
+}
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+ }
+ .navbar-collapse.in {
+ overflow-y: visible;
+ }
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-static-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ padding-right: 0;
+ padding-left: 0;
+ }
+}
+.navbar-fixed-top .navbar-collapse,
+.navbar-fixed-bottom .navbar-collapse {
+ max-height: 340px;
+}
+@media (max-device-width: 480px) and (orientation: landscape) {
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ max-height: 200px;
+ }
+}
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+@media (min-width: 768px) {
+ .container > .navbar-header,
+ .container-fluid > .navbar-header,
+ .container > .navbar-collapse,
+ .container-fluid > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px;
+}
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+@media (min-width: 768px) {
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0;
+}
+.navbar-brand {
+ float: left;
+ height: 50px;
+ padding: 15px 15px;
+ font-size: 18px;
+ line-height: 20px;
+}
+.navbar-brand:hover,
+.navbar-brand:focus {
+ text-decoration: none;
+}
+.navbar-brand > img {
+ display: block;
+}
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand,
+ .navbar > .container-fluid .navbar-brand {
+ margin-left: -15px;
+ }
+}
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.navbar-toggle:focus {
+ outline: 0;
+}
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+}
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px;
+}
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+.navbar-nav {
+ margin: 7.5px -15px;
+}
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-nav .open .dropdown-menu > li > a,
+ .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0;
+ }
+ .navbar-nav > li {
+ float: left;
+ }
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+}
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control-static {
+ display: inline-block;
+ }
+ .navbar-form .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .navbar-form .input-group .input-group-addon,
+ .navbar-form .input-group .input-group-btn,
+ .navbar-form .input-group .form-control {
+ width: auto;
+ }
+ .navbar-form .input-group > .form-control {
+ width: 100%;
+ }
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio,
+ .navbar-form .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio label,
+ .navbar-form .checkbox label {
+ padding-left: 0;
+ }
+ .navbar-form .radio input[type="radio"],
+ .navbar-form .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+ .navbar-form .form-group:last-child {
+ margin-bottom: 0;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+}
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ margin-bottom: 0;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px;
+}
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+@media (min-width: 768px) {
+ .navbar-text {
+ float: left;
+ margin-right: 15px;
+ margin-left: 15px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important;
+ }
+ .navbar-right {
+ float: right !important;
+ margin-right: -15px;
+ }
+ .navbar-right ~ .navbar-right {
+ margin-right: 0;
+ }
+}
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-brand {
+ color: #777;
+}
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent;
+}
+.navbar-default .navbar-text {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+ color: #333;
+ background-color: transparent;
+}
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+}
+.navbar-default .navbar-toggle {
+ border-color: #ddd;
+}
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+ background-color: #ddd;
+}
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888;
+}
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333;
+ background-color: transparent;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+ }
+}
+.navbar-default .navbar-link {
+ color: #777;
+}
+.navbar-default .navbar-link:hover {
+ color: #333;
+}
+.navbar-default .btn-link {
+ color: #777;
+}
+.navbar-default .btn-link:hover,
+.navbar-default .btn-link:focus {
+ color: #333;
+}
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:hover,
+.navbar-default .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-default .btn-link:focus {
+ color: #ccc;
+}
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808;
+}
+.navbar-inverse .navbar-brand {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-text {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-toggle {
+ border-color: #333;
+}
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+ background-color: #333;
+}
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff;
+}
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+ border-color: #101010;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #9d9d9d;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+ }
+}
+.navbar-inverse .navbar-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+.navbar-inverse .btn-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link:focus {
+ color: #fff;
+}
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-inverse .btn-link:focus {
+ color: #444;
+}
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+.breadcrumb > li {
+ display: inline-block;
+}
+.breadcrumb > li + li:before {
+ padding: 0 5px;
+ color: #ccc;
+ content: "/\00a0";
+}
+.breadcrumb > .active {
+ color: #777;
+}
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px;
+}
+.pagination > li {
+ display: inline;
+}
+.pagination > li > a,
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.42857143;
+ color: #337ab7;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.pagination > li:first-child > a,
+.pagination > li:first-child > span {
+ margin-left: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus {
+ color: #23527c;
+ background-color: #eee;
+ border-color: #ddd;
+}
+.pagination > .active > a,
+.pagination > .active > span,
+.pagination > .active > a:hover,
+.pagination > .active > span:hover,
+.pagination > .active > a:focus,
+.pagination > .active > span:focus {
+ z-index: 2;
+ color: #fff;
+ cursor: default;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.pagination > .disabled > span,
+.pagination > .disabled > span:hover,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > a,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > a:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+ border-color: #ddd;
+}
+.pagination-lg > li > a,
+.pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px;
+}
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+.pagination-sm > li > a,
+.pagination-sm > li > span {
+ padding: 5px 10px;
+ font-size: 12px;
+}
+.pagination-sm > li:first-child > a,
+.pagination-sm > li:first-child > span {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.pagination-sm > li:last-child > a,
+.pagination-sm > li:last-child > span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+}
+.pager li {
+ display: inline;
+}
+.pager li > a,
+.pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px;
+}
+.pager li > a:hover,
+.pager li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.pager .next > a,
+.pager .next > span {
+ float: right;
+}
+.pager .previous > a,
+.pager .previous > span {
+ float: left;
+}
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+}
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+}
+a.label:hover,
+a.label:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+.label:empty {
+ display: none;
+}
+.btn .label {
+ position: relative;
+ top: -1px;
+}
+.label-default {
+ background-color: #777;
+}
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: #5e5e5e;
+}
+.label-primary {
+ background-color: #337ab7;
+}
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #286090;
+}
+.label-success {
+ background-color: #5cb85c;
+}
+.label-success[href]:hover,
+.label-success[href]:focus {
+ background-color: #449d44;
+}
+.label-info {
+ background-color: #5bc0de;
+}
+.label-info[href]:hover,
+.label-info[href]:focus {
+ background-color: #31b0d5;
+}
+.label-warning {
+ background-color: #f0ad4e;
+}
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+ background-color: #ec971f;
+}
+.label-danger {
+ background-color: #d9534f;
+}
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+ background-color: #c9302c;
+}
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ background-color: #777;
+ border-radius: 10px;
+}
+.badge:empty {
+ display: none;
+}
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+.btn-xs .badge,
+.btn-group-xs > .btn .badge {
+ top: 0;
+ padding: 1px 5px;
+}
+a.badge:hover,
+a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.list-group-item > .badge {
+ float: right;
+}
+.list-group-item > .badge + .badge {
+ margin-right: 5px;
+}
+.nav-pills > li > a > .badge {
+ margin-left: 3px;
+}
+.jumbotron {
+ padding: 30px 15px;
+ margin-bottom: 30px;
+ color: inherit;
+ background-color: #eee;
+}
+.jumbotron h1,
+.jumbotron .h1 {
+ color: inherit;
+}
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
+}
+.jumbotron > hr {
+ border-top-color: #d5d5d5;
+}
+.container .jumbotron,
+.container-fluid .jumbotron {
+ border-radius: 6px;
+}
+.jumbotron .container {
+ max-width: 100%;
+}
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding: 48px 0;
+ }
+ .container .jumbotron,
+ .container-fluid .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px;
+ }
+ .jumbotron h1,
+ .jumbotron .h1 {
+ font-size: 63px;
+ }
+}
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: border .2s ease-in-out;
+ -o-transition: border .2s ease-in-out;
+ transition: border .2s ease-in-out;
+}
+.thumbnail > img,
+.thumbnail a > img {
+ margin-right: auto;
+ margin-left: auto;
+}
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #337ab7;
+}
+.thumbnail .caption {
+ padding: 9px;
+ color: #333;
+}
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.alert h4 {
+ margin-top: 0;
+ color: inherit;
+}
+.alert .alert-link {
+ font-weight: bold;
+}
+.alert > p,
+.alert > ul {
+ margin-bottom: 0;
+}
+.alert > p + p {
+ margin-top: 5px;
+}
+.alert-dismissable,
+.alert-dismissible {
+ padding-right: 35px;
+}
+.alert-dismissable .close,
+.alert-dismissible .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+.alert-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+.alert-success .alert-link {
+ color: #2b542c;
+}
+.alert-info {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+.alert-info .alert-link {
+ color: #245269;
+}
+.alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+.alert-warning hr {
+ border-top-color: #f7e1b5;
+}
+.alert-warning .alert-link {
+ color: #66512c;
+}
+.alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+.alert-danger hr {
+ border-top-color: #e4b9c0;
+}
+.alert-danger .alert-link {
+ color: #843534;
+}
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+}
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #337ab7;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ -webkit-transition: width .6s ease;
+ -o-transition: width .6s ease;
+ transition: width .6s ease;
+}
+.progress-striped .progress-bar,
+.progress-bar-striped {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ -webkit-background-size: 40px 40px;
+ background-size: 40px 40px;
+}
+.progress.active .progress-bar,
+.progress-bar.active {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-bar-success {
+ background-color: #5cb85c;
+}
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-info {
+ background-color: #5bc0de;
+}
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-warning {
+ background-color: #f0ad4e;
+}
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-danger {
+ background-color: #d9534f;
+}
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.media {
+ margin-top: 15px;
+}
+.media:first-child {
+ margin-top: 0;
+}
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
+}
+.media-body {
+ width: 10000px;
+}
+.media-object {
+ display: block;
+}
+.media-right,
+.media > .pull-right {
+ padding-left: 10px;
+}
+.media-left,
+.media > .pull-left {
+ padding-right: 10px;
+}
+.media-left,
+.media-right,
+.media-body {
+ display: table-cell;
+ vertical-align: top;
+}
+.media-middle {
+ vertical-align: middle;
+}
+.media-bottom {
+ vertical-align: bottom;
+}
+.media-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px;
+}
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.list-group-item:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+a.list-group-item {
+ color: #555;
+}
+a.list-group-item .list-group-item-heading {
+ color: #333;
+}
+a.list-group-item:hover,
+a.list-group-item:focus {
+ color: #555;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #eee;
+}
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+ color: inherit;
+}
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+ color: #777;
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > small,
+.list-group-item.active:hover .list-group-item-heading > small,
+.list-group-item.active:focus .list-group-item-heading > small,
+.list-group-item.active .list-group-item-heading > .small,
+.list-group-item.active:hover .list-group-item-heading > .small,
+.list-group-item.active:focus .list-group-item-heading > .small {
+ color: inherit;
+}
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+ color: #c7ddef;
+}
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+}
+a.list-group-item-success {
+ color: #3c763d;
+}
+a.list-group-item-success .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-success:hover,
+a.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6;
+}
+a.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d;
+}
+.list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7;
+}
+a.list-group-item-info {
+ color: #31708f;
+}
+a.list-group-item-info .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-info:hover,
+a.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3;
+}
+a.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f;
+}
+.list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+}
+a.list-group-item-warning {
+ color: #8a6d3b;
+}
+a.list-group-item-warning .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-warning:hover,
+a.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc;
+}
+a.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b;
+}
+.list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede;
+}
+a.list-group-item-danger {
+ color: #a94442;
+}
+a.list-group-item-danger .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-danger:hover,
+a.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc;
+}
+a.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442;
+}
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+}
+.panel-body {
+ padding: 15px;
+}
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel-heading > .dropdown .dropdown-toggle {
+ color: inherit;
+}
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit;
+}
+.panel-title > a,
+.panel-title > small,
+.panel-title > .small,
+.panel-title > small > a,
+.panel-title > .small > a {
+ color: inherit;
+}
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .list-group,
+.panel > .panel-collapse > .list-group {
+ margin-bottom: 0;
+}
+.panel > .list-group .list-group-item,
+.panel > .panel-collapse > .list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0;
+}
+.panel > .list-group:first-child .list-group-item:first-child,
+.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .list-group:last-child .list-group-item:last-child,
+.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0;
+}
+.list-group + .panel-footer {
+ border-top-width: 0;
+}
+.panel > .table,
+.panel > .table-responsive > .table,
+.panel > .panel-collapse > .table {
+ margin-bottom: 0;
+}
+.panel > .table caption,
+.panel > .table-responsive > .table caption,
+.panel > .panel-collapse > .table caption {
+ padding-right: 15px;
+ padding-left: 15px;
+}
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+ border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+ border-top-right-radius: 3px;
+}
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+ border-bottom-right-radius: 3px;
+}
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive,
+.panel > .table + .panel-body,
+.panel > .table-responsive + .panel-body {
+ border-top: 1px solid #ddd;
+}
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+ border-top: 0;
+}
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
+ border: 0;
+}
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+}
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+}
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+ border-bottom: 0;
+}
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+ border-bottom: 0;
+}
+.panel > .table-responsive {
+ margin-bottom: 0;
+ border: 0;
+}
+.panel-group {
+ margin-bottom: 20px;
+}
+.panel-group .panel {
+ margin-bottom: 0;
+ border-radius: 4px;
+}
+.panel-group .panel + .panel {
+ margin-top: 5px;
+}
+.panel-group .panel-heading {
+ border-bottom: 0;
+}
+.panel-group .panel-heading + .panel-collapse > .panel-body,
+.panel-group .panel-heading + .panel-collapse > .list-group {
+ border-top: 1px solid #ddd;
+}
+.panel-group .panel-footer {
+ border-top: 0;
+}
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd;
+}
+.panel-default {
+ border-color: #ddd;
+}
+.panel-default > .panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd;
+}
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #ddd;
+}
+.panel-default > .panel-heading .badge {
+ color: #f5f5f5;
+ background-color: #333;
+}
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ddd;
+}
+.panel-primary {
+ border-color: #337ab7;
+}
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #337ab7;
+}
+.panel-primary > .panel-heading .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #337ab7;
+}
+.panel-success {
+ border-color: #d6e9c6;
+}
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #d6e9c6;
+}
+.panel-success > .panel-heading .badge {
+ color: #dff0d8;
+ background-color: #3c763d;
+}
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #d6e9c6;
+}
+.panel-info {
+ border-color: #bce8f1;
+}
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #bce8f1;
+}
+.panel-info > .panel-heading .badge {
+ color: #d9edf7;
+ background-color: #31708f;
+}
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #bce8f1;
+}
+.panel-warning {
+ border-color: #faebcc;
+}
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #faebcc;
+}
+.panel-warning > .panel-heading .badge {
+ color: #fcf8e3;
+ background-color: #8a6d3b;
+}
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #faebcc;
+}
+.panel-danger {
+ border-color: #ebccd1;
+}
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #ebccd1;
+}
+.panel-danger > .panel-heading .badge {
+ color: #f2dede;
+ background-color: #a94442;
+}
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ebccd1;
+}
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+}
+.embed-responsive .embed-responsive-item,
+.embed-responsive iframe,
+.embed-responsive embed,
+.embed-responsive object,
+.embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+}
+.embed-responsive-16by9 {
+ padding-bottom: 56.25%;
+}
+.embed-responsive-4by3 {
+ padding-bottom: 75%;
+}
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+}
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15);
+}
+.well-lg {
+ padding: 24px;
+ border-radius: 6px;
+}
+.well-sm {
+ padding: 9px;
+ border-radius: 3px;
+}
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: bold;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ filter: alpha(opacity=20);
+ opacity: .2;
+}
+.close:hover,
+.close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+button.close {
+ -webkit-appearance: none;
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+}
+.modal-open {
+ overflow: hidden;
+}
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1050;
+ display: none;
+ overflow: hidden;
+ -webkit-overflow-scrolling: touch;
+ outline: 0;
+}
+.modal.fade .modal-dialog {
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out;
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ -o-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+}
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ -o-transform: translate(0, 0);
+ transform: translate(0, 0);
+}
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+}
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ outline: 0;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+}
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000;
+}
+.modal-backdrop.fade {
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+.modal-backdrop.in {
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+.modal-header {
+ min-height: 16.42857143px;
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
+}
+.modal-header .close {
+ margin-top: -2px;
+}
+.modal-title {
+ margin: 0;
+ line-height: 1.42857143;
+}
+.modal-body {
+ position: relative;
+ padding: 15px;
+}
+.modal-footer {
+ padding: 15px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5;
+}
+.modal-footer .btn + .btn {
+ margin-bottom: 0;
+ margin-left: 5px;
+}
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px;
+}
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0;
+}
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll;
+}
+@media (min-width: 768px) {
+ .modal-dialog {
+ width: 600px;
+ margin: 30px auto;
+ }
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ }
+ .modal-sm {
+ width: 300px;
+ }
+}
+@media (min-width: 992px) {
+ .modal-lg {
+ width: 900px;
+ }
+}
+.tooltip {
+ position: absolute;
+ z-index: 1070;
+ display: block;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 12px;
+ font-weight: normal;
+ line-height: 1.4;
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+.tooltip.in {
+ filter: alpha(opacity=90);
+ opacity: .9;
+}
+.tooltip.top {
+ padding: 5px 0;
+ margin-top: -3px;
+}
+.tooltip.right {
+ padding: 0 5px;
+ margin-left: 3px;
+}
+.tooltip.bottom {
+ padding: 5px 0;
+ margin-top: 3px;
+}
+.tooltip.left {
+ padding: 0 5px;
+ margin-left: -3px;
+}
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #fff;
+ text-align: center;
+ text-decoration: none;
+ background-color: #000;
+ border-radius: 4px;
+}
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.top-left .tooltip-arrow {
+ right: 5px;
+ bottom: 0;
+ margin-bottom: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.top-right .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ margin-bottom: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000;
+}
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000;
+}
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ margin-top: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ margin-top: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1060;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: left;
+ white-space: normal;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+}
+.popover.top {
+ margin-top: -10px;
+}
+.popover.right {
+ margin-left: 10px;
+}
+.popover.bottom {
+ margin-top: 10px;
+}
+.popover.left {
+ margin-left: -10px;
+}
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0;
+}
+.popover-content {
+ padding: 9px 14px;
+}
+.popover > .arrow,
+.popover > .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.popover > .arrow {
+ border-width: 11px;
+}
+.popover > .arrow:after {
+ content: "";
+ border-width: 10px;
+}
+.popover.top > .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, .25);
+ border-bottom-width: 0;
+}
+.popover.top > .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-color: #fff;
+ border-bottom-width: 0;
+}
+.popover.right > .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, .25);
+ border-left-width: 0;
+}
+.popover.right > .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ content: " ";
+ border-right-color: #fff;
+ border-left-width: 0;
+}
+.popover.bottom > .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, .25);
+}
+.popover.bottom > .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-width: 0;
+ border-bottom-color: #fff;
+}
+.popover.left > .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, .25);
+}
+.popover.left > .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ content: " ";
+ border-right-width: 0;
+ border-left-color: #fff;
+}
+.carousel {
+ position: relative;
+}
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+.carousel-inner > .item {
+ position: relative;
+ display: none;
+ -webkit-transition: .6s ease-in-out left;
+ -o-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left;
+}
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ line-height: 1;
+}
+@media all and (transform-3d), (-webkit-transform-3d) {
+ .carousel-inner > .item {
+ -webkit-transition: -webkit-transform .6s ease-in-out;
+ -o-transition: -o-transform .6s ease-in-out;
+ transition: transform .6s ease-in-out;
+
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-perspective: 1000;
+ perspective: 1000;
+ }
+ .carousel-inner > .item.next,
+ .carousel-inner > .item.active.right {
+ left: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+ .carousel-inner > .item.prev,
+ .carousel-inner > .item.active.left {
+ left: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+ .carousel-inner > .item.next.left,
+ .carousel-inner > .item.prev.right,
+ .carousel-inner > .item.active {
+ left: 0;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ display: block;
+}
+.carousel-inner > .active {
+ left: 0;
+}
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.carousel-inner > .next {
+ left: 100%;
+}
+.carousel-inner > .prev {
+ left: -100%;
+}
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+ left: 0;
+}
+.carousel-inner > .active.left {
+ left: -100%;
+}
+.carousel-inner > .active.right {
+ left: 100%;
+}
+.carousel-control {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+.carousel-control.right {
+ right: 0;
+ left: auto;
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+.carousel-control:hover,
+.carousel-control:focus {
+ color: #fff;
+ text-decoration: none;
+ filter: alpha(opacity=90);
+ outline: 0;
+ opacity: .9;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+}
+.carousel-control .icon-prev,
+.carousel-control .glyphicon-chevron-left {
+ left: 50%;
+ margin-left: -10px;
+}
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-right {
+ right: 50%;
+ margin-right: -10px;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ font-family: serif;
+ line-height: 1;
+}
+.carousel-control .icon-prev:before {
+ content: '\2039';
+}
+.carousel-control .icon-next:before {
+ content: '\203a';
+}
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none;
+}
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #000 \9;
+ background-color: rgba(0, 0, 0, 0);
+ border: 1px solid #fff;
+ border-radius: 10px;
+}
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #fff;
+}
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+}
+.carousel-caption .btn {
+ text-shadow: none;
+}
+@media screen and (min-width: 768px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ font-size: 30px;
+ }
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .icon-prev {
+ margin-left: -15px;
+ }
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-next {
+ margin-right: -15px;
+ }
+ .carousel-caption {
+ right: 20%;
+ left: 20%;
+ padding-bottom: 30px;
+ }
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
+.clearfix:before,
+.clearfix:after,
+.dl-horizontal dd:before,
+.dl-horizontal dd:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.pager:before,
+.pager:after,
+.panel-body:before,
+.panel-body:after,
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ content: " ";
+}
+.clearfix:after,
+.dl-horizontal dd:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.pager:after,
+.panel-body:after,
+.modal-footer:after {
+ clear: both;
+}
+.center-block {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
+}
+.pull-right {
+ float: right !important;
+}
+.pull-left {
+ float: left !important;
+}
+.hide {
+ display: none !important;
+}
+.show {
+ display: block !important;
+}
+.invisible {
+ visibility: hidden;
+}
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+.hidden {
+ display: none !important;
+}
+.affix {
+ position: fixed;
+}
+@-ms-viewport {
+ width: device-width;
+}
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+ display: none !important;
+}
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+ display: none !important;
+}
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important;
+ }
+ table.visible-xs {
+ display: table;
+ }
+ tr.visible-xs {
+ display: table-row !important;
+ }
+ th.visible-xs,
+ td.visible-xs {
+ display: table-cell !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-block {
+ display: block !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline {
+ display: inline !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important;
+ }
+ table.visible-sm {
+ display: table;
+ }
+ tr.visible-sm {
+ display: table-row !important;
+ }
+ th.visible-sm,
+ td.visible-sm {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-block {
+ display: block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important;
+ }
+ table.visible-md {
+ display: table;
+ }
+ tr.visible-md {
+ display: table-row !important;
+ }
+ th.visible-md,
+ td.visible-md {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-block {
+ display: block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important;
+ }
+ table.visible-lg {
+ display: table;
+ }
+ tr.visible-lg {
+ display: table-row !important;
+ }
+ th.visible-lg,
+ td.visible-lg {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-block {
+ display: block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important;
+ }
+}
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important;
+ }
+}
+.visible-print {
+ display: none !important;
+}
+@media print {
+ .visible-print {
+ display: block !important;
+ }
+ table.visible-print {
+ display: table;
+ }
+ tr.visible-print {
+ display: table-row !important;
+ }
+ th.visible-print,
+ td.visible-print {
+ display: table-cell !important;
+ }
+}
+.visible-print-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-block {
+ display: block !important;
+ }
+}
+.visible-print-inline {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline {
+ display: inline !important;
+ }
+}
+.visible-print-inline-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline-block {
+ display: inline-block !important;
+ }
+}
+@media print {
+ .hidden-print {
+ display: none !important;
+ }
+}
+/*# sourceMappingURL=bootstrap.css.map */
diff --git a/FLSystem/About/css/font-awesome.min.css b/FLSystem/About/css/font-awesome.min.css
new file mode 100644
index 0000000..eb8bf6f
--- /dev/null
+++ b/FLSystem/About/css/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ * Font Awesome 4.6.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.6.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.6.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.6.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.6.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.6.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
diff --git a/FLSystem/About/css/timeline.css b/FLSystem/About/css/timeline.css
new file mode 100644
index 0000000..0610d87
--- /dev/null
+++ b/FLSystem/About/css/timeline.css
@@ -0,0 +1,847 @@
+.timeline {
+ width: 100%;
+ position: relative;
+ padding: 1px 0;
+ list-style: none;
+ font-weight: 300;
+}
+.timeline .timeline-item {
+ padding-left: 0;
+ padding-right: 30px;
+}
+.timeline .timeline-item.timeline-item-right,
+.timeline .timeline-item:nth-of-type(even):not(.timeline-item-left) {
+ padding-left: 30px;
+ padding-right: 0;
+}
+.timeline .timeline-item .timeline-event {
+ width: 100%;
+}
+.timeline:before {
+ border-right-style: solid;
+}
+.timeline:before,
+.timeline:after {
+ content: " ";
+ display: block;
+}
+.timeline:after {
+ clear: both;
+}
+.timeline:before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: 50%;
+ height: 100% !important;
+ margin-left: 1px;
+ border-right-width: 2px;
+ border-right-style: solid;
+ border-right-color: #888888;
+}
+.timeline.timeline-single-column.timeline {
+ width: 100%;
+ max-width: 768px;
+}
+.timeline.timeline-single-column.timeline .timeline-item {
+ padding-left: 72px;
+ padding-right: 0;
+}
+.timeline.timeline-single-column.timeline .timeline-item.timeline-item-right,
+.timeline.timeline-single-column.timeline .timeline-item:nth-of-type(even):not(.timeline-item-left) {
+ padding-left: 72px;
+ padding-right: 0;
+}
+.timeline.timeline-single-column.timeline .timeline-item .timeline-event {
+ width: 100%;
+}
+.timeline.timeline-single-column.timeline:before {
+ left: 42px;
+ width: 0;
+ margin-left: -1px;
+}
+.timeline.timeline-single-column.timeline .timeline-item {
+ width: 100%;
+ margin-bottom: 20px;
+}
+.timeline.timeline-single-column.timeline .timeline-item:nth-of-type(even) {
+ margin-top: 0;
+}
+.timeline.timeline-single-column.timeline .timeline-item.timeline-item-left + .timeline-item:not(.timeline-item-left):not(.timeline-item-right),
+.timeline.timeline-single-column.timeline .timeline-item.timeline-item-right + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+}
+.timeline.timeline-single-column.timeline .timeline-item.timeline-item-left + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) + .timeline-item:not(.timeline-item-left):not(.timeline-item-right),
+.timeline.timeline-single-column.timeline .timeline-item.timeline-item-right + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+}
+.timeline.timeline-single-column.timeline .timeline-item > .timeline-event {
+ float: right !important;
+}
+.timeline.timeline-single-column.timeline .timeline-item > .timeline-event:before,
+.timeline.timeline-single-column.timeline .timeline-item > .timeline-event:after {
+ right: auto !important;
+ border-left-width: 0 !important;
+}
+.timeline.timeline-single-column.timeline .timeline-item > .timeline-event:before {
+ left: -15px !important;
+ border-right-width: 15px !important;
+}
+.timeline.timeline-single-column.timeline .timeline-item > .timeline-event:after {
+ left: -14px !important;
+ border-right-width: 14px !important;
+}
+.timeline.timeline-single-column.timeline .timeline-item > .timeline-point {
+ transform: translateX(-50%);
+ left: 42px !important;
+ margin-left: 0;
+}
+.timeline.timeline-single-column.timeline .timeline-label {
+ transform: translateX(-50%);
+ margin: 0 0 20px 42px;
+}
+.timeline.timeline-single-column.timeline .timeline-label + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+}
+.timeline.timeline-single-column.timeline .timeline-label + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+}
+.timeline.timeline-line-solid:before {
+ border-right-style: solid;
+}
+.timeline.timeline-line-dotted:before {
+ border-right-style: dotted;
+}
+.timeline.timeline-line-dashed:before {
+ border-right-style: dashed;
+}
+.timeline.timeline-line-hidden:before {
+ border-right-style: none;
+}
+.timeline .timeline-item {
+ position: relative;
+ float: left;
+ clear: left;
+ width: 50%;
+ margin-bottom: 20px;
+}
+.timeline .timeline-item:before,
+.timeline .timeline-item:after {
+ content: "";
+ display: table;
+}
+.timeline .timeline-item:after {
+ clear: both;
+}
+.timeline .timeline-item:last-child {
+ margin-bottom: 0 !important;
+}
+.timeline .timeline-item.timeline-item-right > .timeline-event,
+.timeline .timeline-item:nth-of-type(even):not(.timeline-item-left) > .timeline-event {
+ float: right !important;
+}
+.timeline .timeline-item.timeline-item-right > .timeline-event:before,
+.timeline .timeline-item:nth-of-type(even):not(.timeline-item-left) > .timeline-event:before,
+.timeline .timeline-item.timeline-item-right > .timeline-event:after,
+.timeline .timeline-item:nth-of-type(even):not(.timeline-item-left) > .timeline-event:after {
+ right: auto !important;
+ border-left-width: 0 !important;
+}
+.timeline .timeline-item.timeline-item-right > .timeline-event:before,
+.timeline .timeline-item:nth-of-type(even):not(.timeline-item-left) > .timeline-event:before {
+ left: -15px !important;
+ border-right-width: 15px !important;
+}
+.timeline .timeline-item.timeline-item-right > .timeline-event:after,
+.timeline .timeline-item:nth-of-type(even):not(.timeline-item-left) > .timeline-event:after {
+ left: -14px !important;
+ border-right-width: 14px !important;
+}
+.timeline .timeline-item > .timeline-event:before {
+ top: 10px;
+ right: -15px;
+ border-top: 15px solid transparent;
+ border-left-width: 15px;
+ border-left-style: solid;
+ border-right-width: 0;
+ border-right-style: solid;
+ border-bottom: 15px solid transparent;
+}
+.timeline .timeline-item > .timeline-event:after {
+ top: 11px;
+ right: -14px;
+ border-top: 14px solid transparent;
+ border-left-width: 14px;
+ border-left-style: solid;
+ border-right-width: 0;
+ border-right-style: solid;
+ border-bottom: 14px solid transparent;
+}
+.timeline .timeline-item > .timeline-point {
+ top: 25px;
+}
+.timeline-single-column.timeline .timeline-item > .timeline-event {
+ float: right !important;
+}
+.timeline-single-column.timeline .timeline-item > .timeline-event:before,
+.timeline-single-column.timeline .timeline-item > .timeline-event:after {
+ right: auto !important;
+ border-left-width: 0 !important;
+}
+.timeline-single-column.timeline .timeline-item > .timeline-event:before {
+ left: -15px !important;
+ border-right-width: 15px !important;
+}
+.timeline-single-column.timeline .timeline-item > .timeline-event:after {
+ left: -14px !important;
+ border-right-width: 14px !important;
+}
+.timeline .timeline-item:nth-of-type(2) {
+ margin-top: 40px;
+}
+.timeline .timeline-item.timeline-item-left,
+.timeline .timeline-item.timeline-item-right {
+ clear: both !important;
+}
+.timeline .timeline-item.timeline-item-left + .timeline-item:not(.timeline-item-left):not(.timeline-item-right),
+.timeline .timeline-item.timeline-item-right + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+}
+.timeline .timeline-item.timeline-item-left + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) + .timeline-item:not(.timeline-item-left):not(.timeline-item-right),
+.timeline .timeline-item.timeline-item-right + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 40px;
+}
+.timeline .timeline-item.timeline-item-left + .timeline-item:not(.timeline-item-left):not(.timeline-item-right),
+.timeline .timeline-item.timeline-item-right + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ clear: both;
+}
+.timeline .timeline-item.timeline-item-right,
+.timeline .timeline-item:nth-of-type(even):not(.timeline-item-left) {
+ float: right;
+ clear: right;
+}
+.timeline .timeline-item.timeline-item-right > .timeline-point,
+.timeline .timeline-item:nth-of-type(even):not(.timeline-item-left) > .timeline-point {
+ left: -24px;
+}
+.timeline .timeline-item.timeline-item-right > .timeline-point.timeline-point-blank,
+.timeline .timeline-item:nth-of-type(even):not(.timeline-item-left) > .timeline-point.timeline-point-blank {
+ left: -12px;
+}
+.timeline .timeline-item.timeline-item-arrow-sm.timeline-item-right > .timeline-event,
+.timeline .timeline-item.timeline-item-arrow-sm:nth-of-type(even):not(.timeline-item-left) > .timeline-event {
+ float: right !important;
+}
+.timeline .timeline-item.timeline-item-arrow-sm.timeline-item-right > .timeline-event:before,
+.timeline .timeline-item.timeline-item-arrow-sm:nth-of-type(even):not(.timeline-item-left) > .timeline-event:before,
+.timeline .timeline-item.timeline-item-arrow-sm.timeline-item-right > .timeline-event:after,
+.timeline .timeline-item.timeline-item-arrow-sm:nth-of-type(even):not(.timeline-item-left) > .timeline-event:after {
+ right: auto !important;
+ border-left-width: 0 !important;
+}
+.timeline .timeline-item.timeline-item-arrow-sm.timeline-item-right > .timeline-event:before,
+.timeline .timeline-item.timeline-item-arrow-sm:nth-of-type(even):not(.timeline-item-left) > .timeline-event:before {
+ left: -10px !important;
+ border-right-width: 10px !important;
+}
+.timeline .timeline-item.timeline-item-arrow-sm.timeline-item-right > .timeline-event:after,
+.timeline .timeline-item.timeline-item-arrow-sm:nth-of-type(even):not(.timeline-item-left) > .timeline-event:after {
+ left: -9px !important;
+ border-right-width: 9px !important;
+}
+.timeline .timeline-item.timeline-item-arrow-sm > .timeline-event:before {
+ top: 4px;
+ right: -10px;
+ border-top: 10px solid transparent;
+ border-left-width: 10px;
+ border-left-style: solid;
+ border-right-width: 0;
+ border-right-style: solid;
+ border-bottom: 10px solid transparent;
+}
+.timeline .timeline-item.timeline-item-arrow-sm > .timeline-event:after {
+ top: 5px;
+ right: -9px;
+ border-top: 9px solid transparent;
+ border-left-width: 9px;
+ border-left-style: solid;
+ border-right-width: 0;
+ border-right-style: solid;
+ border-bottom: 9px solid transparent;
+}
+.timeline .timeline-item.timeline-item-arrow-sm > .timeline-point {
+ top: 14px;
+}
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-sm > .timeline-event {
+ float: right !important;
+}
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-sm > .timeline-event:before,
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-sm > .timeline-event:after {
+ right: auto !important;
+ border-left-width: 0 !important;
+}
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-sm > .timeline-event:before {
+ left: -10px !important;
+ border-right-width: 10px !important;
+}
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-sm > .timeline-event:after {
+ left: -9px !important;
+ border-right-width: 9px !important;
+}
+.timeline .timeline-item.timeline-item-arrow-md.timeline-item-right > .timeline-event,
+.timeline .timeline-item.timeline-item-arrow-md:nth-of-type(even):not(.timeline-item-left) > .timeline-event {
+ float: right !important;
+}
+.timeline .timeline-item.timeline-item-arrow-md.timeline-item-right > .timeline-event:before,
+.timeline .timeline-item.timeline-item-arrow-md:nth-of-type(even):not(.timeline-item-left) > .timeline-event:before,
+.timeline .timeline-item.timeline-item-arrow-md.timeline-item-right > .timeline-event:after,
+.timeline .timeline-item.timeline-item-arrow-md:nth-of-type(even):not(.timeline-item-left) > .timeline-event:after {
+ right: auto !important;
+ border-left-width: 0 !important;
+}
+.timeline .timeline-item.timeline-item-arrow-md.timeline-item-right > .timeline-event:before,
+.timeline .timeline-item.timeline-item-arrow-md:nth-of-type(even):not(.timeline-item-left) > .timeline-event:before {
+ left: -15px !important;
+ border-right-width: 15px !important;
+}
+.timeline .timeline-item.timeline-item-arrow-md.timeline-item-right > .timeline-event:after,
+.timeline .timeline-item.timeline-item-arrow-md:nth-of-type(even):not(.timeline-item-left) > .timeline-event:after {
+ left: -14px !important;
+ border-right-width: 14px !important;
+}
+.timeline .timeline-item.timeline-item-arrow-md > .timeline-event:before {
+ top: 10px;
+ right: -15px;
+ border-top: 15px solid transparent;
+ border-left-width: 15px;
+ border-left-style: solid;
+ border-right-width: 0;
+ border-right-style: solid;
+ border-bottom: 15px solid transparent;
+}
+.timeline .timeline-item.timeline-item-arrow-md > .timeline-event:after {
+ top: 11px;
+ right: -14px;
+ border-top: 14px solid transparent;
+ border-left-width: 14px;
+ border-left-style: solid;
+ border-right-width: 0;
+ border-right-style: solid;
+ border-bottom: 14px solid transparent;
+}
+.timeline .timeline-item.timeline-item-arrow-md > .timeline-point {
+ top: 25px;
+}
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-md > .timeline-event {
+ float: right !important;
+}
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-md > .timeline-event:before,
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-md > .timeline-event:after {
+ right: auto !important;
+ border-left-width: 0 !important;
+}
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-md > .timeline-event:before {
+ left: -15px !important;
+ border-right-width: 15px !important;
+}
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-md > .timeline-event:after {
+ left: -14px !important;
+ border-right-width: 14px !important;
+}
+.timeline .timeline-item.timeline-item-arrow-lg.timeline-item-right > .timeline-event,
+.timeline .timeline-item.timeline-item-arrow-lg:nth-of-type(even):not(.timeline-item-left) > .timeline-event {
+ float: right !important;
+}
+.timeline .timeline-item.timeline-item-arrow-lg.timeline-item-right > .timeline-event:before,
+.timeline .timeline-item.timeline-item-arrow-lg:nth-of-type(even):not(.timeline-item-left) > .timeline-event:before,
+.timeline .timeline-item.timeline-item-arrow-lg.timeline-item-right > .timeline-event:after,
+.timeline .timeline-item.timeline-item-arrow-lg:nth-of-type(even):not(.timeline-item-left) > .timeline-event:after {
+ right: auto !important;
+ border-left-width: 0 !important;
+}
+.timeline .timeline-item.timeline-item-arrow-lg.timeline-item-right > .timeline-event:before,
+.timeline .timeline-item.timeline-item-arrow-lg:nth-of-type(even):not(.timeline-item-left) > .timeline-event:before {
+ left: -18px !important;
+ border-right-width: 18px !important;
+}
+.timeline .timeline-item.timeline-item-arrow-lg.timeline-item-right > .timeline-event:after,
+.timeline .timeline-item.timeline-item-arrow-lg:nth-of-type(even):not(.timeline-item-left) > .timeline-event:after {
+ left: -17px !important;
+ border-right-width: 17px !important;
+}
+.timeline .timeline-item.timeline-item-arrow-lg > .timeline-event:before {
+ top: 10px;
+ right: -18px;
+ border-top: 18px solid transparent;
+ border-left-width: 18px;
+ border-left-style: solid;
+ border-right-width: 0;
+ border-right-style: solid;
+ border-bottom: 18px solid transparent;
+}
+.timeline .timeline-item.timeline-item-arrow-lg > .timeline-event:after {
+ top: 11px;
+ right: -17px;
+ border-top: 17px solid transparent;
+ border-left-width: 17px;
+ border-left-style: solid;
+ border-right-width: 0;
+ border-right-style: solid;
+ border-bottom: 17px solid transparent;
+}
+.timeline .timeline-item.timeline-item-arrow-lg > .timeline-point {
+ top: 28px;
+}
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-lg > .timeline-event {
+ float: right !important;
+}
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-lg > .timeline-event:before,
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-lg > .timeline-event:after {
+ right: auto !important;
+ border-left-width: 0 !important;
+}
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-lg > .timeline-event:before {
+ left: -18px !important;
+ border-right-width: 18px !important;
+}
+.timeline-single-column.timeline .timeline-item.timeline-item-arrow-lg > .timeline-event:after {
+ left: -17px !important;
+ border-right-width: 17px !important;
+}
+.timeline .timeline-item > .timeline-event {
+ background: #fff;
+ border: 1px solid #888888;
+ color: #555;
+ position: relative;
+ float: left;
+ border-radius: 3px;
+}
+.timeline .timeline-item > .timeline-event:before {
+ border-left-color: #888888;
+ border-right-color: #888888;
+}
+.timeline .timeline-item > .timeline-event:after {
+ border-left-color: #fff;
+ border-right-color: #fff;
+}
+.timeline .timeline-item > .timeline-event h1,
+.timeline .timeline-item > .timeline-event h2,
+.timeline .timeline-item > .timeline-event h3,
+.timeline .timeline-item > .timeline-event h4,
+.timeline .timeline-item > .timeline-event h5,
+.timeline .timeline-item > .timeline-event h6,
+.timeline .timeline-item > .timeline-event p,
+.timeline .timeline-item > .timeline-event .timeline-inherit-color {
+ color: inherit;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-default {
+ background: #fff;
+ border: 1px solid #888888;
+ color: #555;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-default:before {
+ border-left-color: #888888;
+ border-right-color: #888888;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-default:after {
+ border-left-color: #fff;
+ border-right-color: #fff;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-default h1,
+.timeline .timeline-item > .timeline-event.timeline-event-default h2,
+.timeline .timeline-item > .timeline-event.timeline-event-default h3,
+.timeline .timeline-item > .timeline-event.timeline-event-default h4,
+.timeline .timeline-item > .timeline-event.timeline-event-default h5,
+.timeline .timeline-item > .timeline-event.timeline-event-default h6,
+.timeline .timeline-item > .timeline-event.timeline-event-default p,
+.timeline .timeline-item > .timeline-event.timeline-event-default .timeline-inherit-color {
+ color: inherit;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-primary {
+ background: #f5f5f5;
+ border: 1px solid #888888;
+ color: #555;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-primary:before {
+ border-left-color: #888888;
+ border-right-color: #888888;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-primary:after {
+ border-left-color: #f5f5f5;
+ border-right-color: #f5f5f5;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-primary h1,
+.timeline .timeline-item > .timeline-event.timeline-event-primary h2,
+.timeline .timeline-item > .timeline-event.timeline-event-primary h3,
+.timeline .timeline-item > .timeline-event.timeline-event-primary h4,
+.timeline .timeline-item > .timeline-event.timeline-event-primary h5,
+.timeline .timeline-item > .timeline-event.timeline-event-primary h6,
+.timeline .timeline-item > .timeline-event.timeline-event-primary p,
+.timeline .timeline-item > .timeline-event.timeline-event-primary .timeline-inherit-color {
+ color: inherit;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-success {
+ background: #F3F8ED;
+ border: 1px solid #72b92e;
+ color: #3F8100;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-success:before {
+ border-left-color: #72b92e;
+ border-right-color: #72b92e;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-success:after {
+ border-left-color: #F3F8ED;
+ border-right-color: #F3F8ED;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-success h1,
+.timeline .timeline-item > .timeline-event.timeline-event-success h2,
+.timeline .timeline-item > .timeline-event.timeline-event-success h3,
+.timeline .timeline-item > .timeline-event.timeline-event-success h4,
+.timeline .timeline-item > .timeline-event.timeline-event-success h5,
+.timeline .timeline-item > .timeline-event.timeline-event-success h6,
+.timeline .timeline-item > .timeline-event.timeline-event-success p,
+.timeline .timeline-item > .timeline-event.timeline-event-success .timeline-inherit-color {
+ color: inherit;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-info {
+ background: #F0F8FD;
+ border: 1px solid #3e93cf;
+ color: #0062A7;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-info:before {
+ border-left-color: #3e93cf;
+ border-right-color: #3e93cf;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-info:after {
+ border-left-color: #F0F8FD;
+ border-right-color: #F0F8FD;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-info h1,
+.timeline .timeline-item > .timeline-event.timeline-event-info h2,
+.timeline .timeline-item > .timeline-event.timeline-event-info h3,
+.timeline .timeline-item > .timeline-event.timeline-event-info h4,
+.timeline .timeline-item > .timeline-event.timeline-event-info h5,
+.timeline .timeline-item > .timeline-event.timeline-event-info h6,
+.timeline .timeline-item > .timeline-event.timeline-event-info p,
+.timeline .timeline-item > .timeline-event.timeline-event-info .timeline-inherit-color {
+ color: inherit;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-warning {
+ background: #FFF9E9;
+ border: 1px solid #d0aa42;
+ color: #ac7e00;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-warning:before {
+ border-left-color: #d0aa42;
+ border-right-color: #d0aa42;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-warning:after {
+ border-left-color: #FFF9E9;
+ border-right-color: #FFF9E9;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-warning h1,
+.timeline .timeline-item > .timeline-event.timeline-event-warning h2,
+.timeline .timeline-item > .timeline-event.timeline-event-warning h3,
+.timeline .timeline-item > .timeline-event.timeline-event-warning h4,
+.timeline .timeline-item > .timeline-event.timeline-event-warning h5,
+.timeline .timeline-item > .timeline-event.timeline-event-warning h6,
+.timeline .timeline-item > .timeline-event.timeline-event-warning p,
+.timeline .timeline-item > .timeline-event.timeline-event-warning .timeline-inherit-color {
+ color: inherit;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-danger {
+ background: #FFC4BC;
+ border: 1px solid #d25a4b;
+ color: #B71500;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-danger:before {
+ border-left-color: #d25a4b;
+ border-right-color: #d25a4b;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-danger:after {
+ border-left-color: #FFC4BC;
+ border-right-color: #FFC4BC;
+}
+.timeline .timeline-item > .timeline-event.timeline-event-danger h1,
+.timeline .timeline-item > .timeline-event.timeline-event-danger h2,
+.timeline .timeline-item > .timeline-event.timeline-event-danger h3,
+.timeline .timeline-item > .timeline-event.timeline-event-danger h4,
+.timeline .timeline-item > .timeline-event.timeline-event-danger h5,
+.timeline .timeline-item > .timeline-event.timeline-event-danger h6,
+.timeline .timeline-item > .timeline-event.timeline-event-danger p,
+.timeline .timeline-item > .timeline-event.timeline-event-danger .timeline-inherit-color {
+ color: inherit;
+}
+.timeline .timeline-item > .timeline-event:before,
+.timeline .timeline-item > .timeline-event:after {
+ content: "";
+ display: inline-block;
+ position: absolute;
+}
+.timeline .timeline-item > .timeline-event .timeline-heading,
+.timeline .timeline-item > .timeline-event .timeline-body,
+.timeline .timeline-item > .timeline-event .timeline-footer {
+ padding: 4px 10px;
+}
+.timeline .timeline-item > .timeline-event .timeline-heading p,
+.timeline .timeline-item > .timeline-event .timeline-body p,
+.timeline .timeline-item > .timeline-event .timeline-footer p,
+.timeline .timeline-item > .timeline-event .timeline-heading ul,
+.timeline .timeline-item > .timeline-event .timeline-body ul,
+.timeline .timeline-item > .timeline-event .timeline-footer ul {
+ margin-bottom: 0;
+}
+.timeline .timeline-item > .timeline-event .timeline-heading h4 {
+ font-weight: 400;
+}
+.timeline .timeline-item > .timeline-event .timeline-footer a {
+ cursor: pointer;
+ text-decoration: none;
+}
+.timeline .timeline-item > .timeline-event .panel,
+.timeline .timeline-item > .timeline-event .table,
+.timeline .timeline-item > .timeline-event .blankslate {
+ margin: 0;
+ border: none;
+ border-radius: inherit;
+ overflow: hidden;
+}
+.timeline .timeline-item > .timeline-event .table th {
+ border-top: 0;
+}
+.timeline .timeline-item > .timeline-point {
+ color: #888888;
+ background: #fff;
+ right: -24px;
+ width: 24px;
+ height: 24px;
+ margin-top: -12px;
+ margin-left: 12px;
+ margin-right: 12px;
+ position: absolute;
+ z-index: 100;
+ border-width: 2px;
+ border-style: solid;
+ border-radius: 100%;
+ line-height: 20px;
+ text-align: center;
+}
+.timeline .timeline-item > .timeline-point.timeline-point-blank {
+ right: -12px;
+ width: 12px;
+ height: 12px;
+ margin-top: -6px;
+ margin-left: 6px;
+ margin-right: 6px;
+ color: #888888;
+ background: #888888;
+}
+.timeline .timeline-item > .timeline-point.timeline-point-default {
+ color: #888888;
+ background: #fff;
+}
+.timeline .timeline-item > .timeline-point.timeline-point-primary {
+ color: #888888;
+ background: #fff;
+}
+.timeline .timeline-item > .timeline-point.timeline-point-success {
+ color: #72b92e;
+ background: #fff;
+}
+.timeline .timeline-item > .timeline-point.timeline-point-info {
+ color: #3e93cf;
+ background: #fff;
+}
+.timeline .timeline-item > .timeline-point.timeline-point-warning {
+ color: #d0aa42;
+ background: #fff;
+}
+.timeline .timeline-item > .timeline-point.timeline-point-danger {
+ color: #d25a4b;
+ background: #fff;
+}
+.timeline .timeline-label {
+ position: relative;
+ float: left;
+ clear: left;
+ width: 50%;
+ margin-bottom: 20px;
+ top: 1px;
+ width: 100%;
+ margin-left: auto;
+ margin-right: auto;
+ padding: 0;
+ text-align: center;
+}
+.timeline .timeline-label:before,
+.timeline .timeline-label:after {
+ content: "";
+ display: table;
+}
+.timeline .timeline-label:after {
+ clear: both;
+}
+.timeline .timeline-label:last-child {
+ margin-bottom: 0 !important;
+}
+.timeline .timeline-label + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+}
+.timeline .timeline-label + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 40px;
+}
+.timeline .timeline-label .label-default {
+ background-color: #888888;
+}
+.timeline .timeline-label .label-primary {
+ background-color: #888888;
+}
+.timeline .timeline-label .label-info {
+ background-color: #3e93cf;
+}
+.timeline .timeline-label .label-warning {
+ background-color: #d0aa42;
+}
+.timeline .timeline-label .label-danger {
+ background-color: #d25a4b;
+}
+@media all and (orientation: portrait) {
+ .timeline.timeline {
+ width: 100%;
+ max-width: 100%;
+ }
+ .timeline.timeline .timeline-item {
+ padding-left: 72px;
+ padding-right: 0;
+ }
+ .timeline.timeline .timeline-item.timeline-item-right,
+ .timeline.timeline .timeline-item:nth-of-type(even):not(.timeline-item-left) {
+ padding-left: 72px;
+ padding-right: 0;
+ }
+ .timeline.timeline .timeline-item .timeline-event {
+ width: 100%;
+ }
+ .timeline.timeline:before {
+ left: 42px;
+ width: 0;
+ margin-left: -1px;
+ }
+ .timeline.timeline .timeline-item {
+ width: 100%;
+ margin-bottom: 20px;
+ }
+ .timeline.timeline .timeline-item:nth-of-type(even) {
+ margin-top: 0;
+ }
+ .timeline.timeline .timeline-item.timeline-item-left + .timeline-item:not(.timeline-item-left):not(.timeline-item-right),
+ .timeline.timeline .timeline-item.timeline-item-right + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+ }
+ .timeline.timeline .timeline-item.timeline-item-left + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) + .timeline-item:not(.timeline-item-left):not(.timeline-item-right),
+ .timeline.timeline .timeline-item.timeline-item-right + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+ }
+ .timeline.timeline .timeline-item > .timeline-event {
+ float: right !important;
+ }
+ .timeline.timeline .timeline-item > .timeline-event:before,
+ .timeline.timeline .timeline-item > .timeline-event:after {
+ right: auto !important;
+ border-left-width: 0 !important;
+ }
+ .timeline.timeline .timeline-item > .timeline-event:before {
+ left: -15px !important;
+ border-right-width: 15px !important;
+ }
+ .timeline.timeline .timeline-item > .timeline-event:after {
+ left: -14px !important;
+ border-right-width: 14px !important;
+ }
+ .timeline.timeline .timeline-item > .timeline-point {
+ transform: translateX(-50%);
+ left: 42px !important;
+ margin-left: 0;
+ }
+ .timeline.timeline .timeline-label {
+ transform: translateX(-50%);
+ margin: 0 0 20px 42px;
+ }
+ .timeline.timeline .timeline-label + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+ }
+ .timeline.timeline .timeline-label + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+ }
+}
+@media (max-width: 768px) {
+ .timeline.timeline {
+ width: 100%;
+ max-width: 100%;
+ }
+ .timeline.timeline .timeline-item {
+ padding-left: 72px;
+ padding-right: 0;
+ }
+ .timeline.timeline .timeline-item.timeline-item-right,
+ .timeline.timeline .timeline-item:nth-of-type(even):not(.timeline-item-left) {
+ padding-left: 72px;
+ padding-right: 0;
+ }
+ .timeline.timeline .timeline-item .timeline-event {
+ width: 100%;
+ }
+ .timeline.timeline:before {
+ left: 42px;
+ width: 0;
+ margin-left: -1px;
+ }
+ .timeline.timeline .timeline-item {
+ width: 100%;
+ margin-bottom: 20px;
+ }
+ .timeline.timeline .timeline-item:nth-of-type(even) {
+ margin-top: 0;
+ }
+ .timeline.timeline .timeline-item.timeline-item-left + .timeline-item:not(.timeline-item-left):not(.timeline-item-right),
+ .timeline.timeline .timeline-item.timeline-item-right + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+ }
+ .timeline.timeline .timeline-item.timeline-item-left + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) + .timeline-item:not(.timeline-item-left):not(.timeline-item-right),
+ .timeline.timeline .timeline-item.timeline-item-right + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+ }
+ .timeline.timeline .timeline-item > .timeline-event {
+ float: right !important;
+ }
+ .timeline.timeline .timeline-item > .timeline-event:before,
+ .timeline.timeline .timeline-item > .timeline-event:after {
+ right: auto !important;
+ border-left-width: 0 !important;
+ }
+ .timeline.timeline .timeline-item > .timeline-event:before {
+ left: -15px !important;
+ border-right-width: 15px !important;
+ }
+ .timeline.timeline .timeline-item > .timeline-event:after {
+ left: -14px !important;
+ border-right-width: 14px !important;
+ }
+ .timeline.timeline .timeline-item > .timeline-point {
+ transform: translateX(-50%);
+ left: 42px !important;
+ margin-left: 0;
+ }
+ .timeline.timeline .timeline-label {
+ transform: translateX(-50%);
+ margin: 0 0 20px 42px;
+ }
+ .timeline.timeline .timeline-label + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+ }
+ .timeline.timeline .timeline-label + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) + .timeline-item:not(.timeline-item-left):not(.timeline-item-right) {
+ margin-top: 0;
+ }
+}
diff --git a/FLSystem/About/fonts/fontawesome-webfont.ttf b/FLSystem/About/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000..cec09e0
Binary files /dev/null and b/FLSystem/About/fonts/fontawesome-webfont.ttf differ
diff --git a/FLSystem/App.config b/FLSystem/App.config
new file mode 100644
index 0000000..ef694b0
--- /dev/null
+++ b/FLSystem/App.config
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+ Skin/Office 2019 White
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FLSystem/ControlExtension.cs b/FLSystem/ControlExtension.cs
new file mode 100644
index 0000000..10516ee
--- /dev/null
+++ b/FLSystem/ControlExtension.cs
@@ -0,0 +1,151 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace System.Windows.Forms
+{
+ ///
+ ///
+ ///
+ public static class ControlExtension
+ {
+ ///
+ /// 控件跨线程访问
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static void SafeInvoke(this Control uiElement, Action updater, bool forceSynchronous = true,bool isOutputLog=true)
+ {
+ try
+ {
+ if (uiElement == null)
+ {
+ throw new ArgumentNullException("uiElement");
+ }
+
+ if (uiElement.InvokeRequired)
+ {
+ if (forceSynchronous)
+ {
+ uiElement.Invoke((Action)delegate { SafeInvoke(uiElement, updater, true); });
+ }
+ else
+ {
+ uiElement.BeginInvoke((Action)delegate { SafeInvoke(uiElement, updater, false); });
+ }
+ }
+ else
+ {
+ if (uiElement.IsDisposed)
+ {
+ return;
+ throw new ObjectDisposedException("Control is already disposed.");
+ }
+
+ updater();
+ }
+ }
+ catch (Exception ex)
+ {
+ if (isOutputLog)
+ {
+ }
+ }
+ }
+ ///
+ /// 控件跨线程访问
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static void SafeInvoke(this Control uiElement, Action updater, T data, bool forceSynchronous = true, bool isOutputLog = true)
+ {
+ try
+ {
+ if (uiElement == null)
+ {
+ throw new ArgumentNullException("uiElement");
+ }
+
+ if (uiElement.InvokeRequired)
+ {
+ if (forceSynchronous)
+ {
+ uiElement.Invoke(updater, data);
+ }
+ else
+ {
+ uiElement.BeginInvoke(updater, data);
+ }
+ }
+ else
+ {
+ if (uiElement.IsDisposed)
+ {
+ return;
+ throw new ObjectDisposedException("Control is already disposed.");
+ }
+ updater(data);
+ }
+ }
+ catch (Exception ex)
+ {
+ if (isOutputLog)
+ {
+ }
+ }
+ }
+
+ ///
+ /// 自动禁止启动执行
+ ///
+ ///
+ ///
+ ///
+ public static void SafeEnabledInvoke(this ToolStripItem uiElement, Action updater, string hintText = "正在执行.")
+ {
+ string value = uiElement.Text;
+ uiElement.Enabled = false;
+ uiElement.Text = hintText;
+ try
+ {
+ updater();
+ }
+ catch (Exception ex)
+ {
+ }
+ uiElement.Text = value;
+ uiElement.Enabled = true;
+ }
+
+ ///
+ /// 自动禁止启动控件执行
+ ///
+ ///
+ ///
+ ///
+ public static void SafeEnabledInvoke(this Control uiElement, Action updater,string hintText= "正在执行.")
+ {
+ uiElement.Enabled = false;
+ string value = uiElement.Text;
+ uiElement.Text = hintText;
+ try
+ {
+ updater();
+ }
+ catch (Exception ex)
+ {
+ }
+ uiElement.Text = value;
+ uiElement.Enabled = true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/FLSystem/Events/CommonEvents.cs b/FLSystem/Events/CommonEvents.cs
new file mode 100644
index 0000000..ae557b5
--- /dev/null
+++ b/FLSystem/Events/CommonEvents.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FLSystem.Events
+{
+ public class CommonEvents:EventArgs
+ {
+ public Dictionary Commons { get; private set; }
+
+ public CommonEvents(Dictionary Commons)
+ {
+ this.Commons = Commons;
+ }
+
+ public CommonEvents()
+ {
+ }
+ }
+}
diff --git a/FLSystem/FLSystem.csproj b/FLSystem/FLSystem.csproj
new file mode 100644
index 0000000..e7813dd
--- /dev/null
+++ b/FLSystem/FLSystem.csproj
@@ -0,0 +1,1117 @@
+
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {2E04051F-0E96-409A-9F93-4418603E69D0}
+ WinExe
+ Properties
+ FLSystem
+ FLSystem
+ v4.6.1
+ 512
+ false
+
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ true
+
+
+ x86
+ true
+ full
+ false
+ ..\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+ true
+ ..\Debug\
+ DEBUG;TRACE
+ full
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ bin\x86\Release\
+ TRACE
+ true
+ pdbonly
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ LocalIntranet
+
+
+ false
+
+
+ Properties\app.manifest
+
+
+ false
+
+
+
+ False
+ ..\Debug\Api.Framework.dll
+ False
+
+
+
+
+ False
+ ..\Debug\Chat.Framework.dll
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+ C:\Users\先森吳\Desktop\DevExpressCrack.dll
+
+
+ ..\packages\EO.WebBrowser.21.3.18\lib\EO.Base.dll
+
+
+ ..\packages\EO.WebBrowser.21.3.18\lib\EO.WebBrowser.dll
+
+
+ ..\packages\EO.WebBrowser.WinForm.21.3.18\lib\EO.WebBrowser.WinForm.dll
+
+
+ ..\packages\EO.WebBrowser.21.3.18\lib\EO.WebEngine.dll
+
+
+ False
+ ..\Debug\Grant.Framework.dll
+
+
+ False
+ ..\DLL\Newtonsoft.Json.dll
+
+
+ False
+ ..\Debug\Robot.Framework.dll
+ False
+
+
+ False
+ ..\Debug\SqlSugar.dll
+
+
+
+ C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll
+
+
+ ..\packages\System.Collections.Specialized.4.3.0\lib\net46\System.Collections.Specialized.dll
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\packages\System.Net.NameResolution.4.3.0\lib\net46\System.Net.NameResolution.dll
+
+
+ ..\packages\System.Net.Security.4.3.0\lib\net46\System.Net.Security.dll
+
+
+ ..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll
+
+
+ ..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net461\System.Security.Cryptography.Algorithms.dll
+
+
+ ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll
+
+
+ ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll
+
+
+ ..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+ ..\Debug\UI.Framework.dll
+
+
+
+
+
+
+
+ Form
+
+
+ AddCloudblack.cs
+
+
+ UserControl
+
+
+ admin_verify_control.cs
+
+
+ UserControl
+
+
+ convert_tool_control.cs
+
+
+ UserControl
+
+
+ cps_order_douyin.cs
+
+
+ UserControl
+
+
+ cps_order_kuaishou.cs
+
+
+ UserControl
+
+
+ cps_order_refund_alimama.cs
+
+
+ UserControl
+
+
+ cps_order_suning.cs
+
+
+ UserControl
+
+
+ cps_order_weipinhui.cs
+
+
+ Form
+
+
+ edit_uservariate_form.cs
+
+
+ Form
+
+
+ group_info_form.cs
+
+
+ UserControl
+
+
+ home_control.cs
+
+
+ Form
+
+
+ jd_adzone_group_form.cs
+
+
+ Form
+
+
+ LockForm.cs
+
+
+ Form
+
+
+ member_order_lastnum_custom.cs
+
+
+ Form
+
+
+ OneKeyExchangeForm.cs
+
+
+ Form
+
+
+ RatioCustomGroupForm.cs
+
+
+ Form
+
+
+ UpdateForm.cs
+
+
+ Form
+
+
+ VerifyPassForm.cs
+
+
+ Form
+
+
+ WPHNavForm.cs
+
+
+ UserControl
+
+
+ notice_robotapi_control.cs
+
+
+ Form
+
+
+ notice_robotapi_editform.cs
+
+
+ Form
+
+
+ ServerClientManage.cs
+
+
+ Form
+
+
+ tb_adzone_activity_group_form.cs
+
+
+ Form
+
+
+ tb_adzone_group_form.cs
+
+
+ Form
+
+
+ setting_endtime_form.cs
+
+
+ Form
+
+
+ set_wechat_device.cs
+
+
+ Form
+
+
+ TCPForm.cs
+
+
+ Form
+
+
+ tlj_form.cs
+
+
+ Form
+
+
+ update_log_form.cs
+
+
+ Form
+
+
+ WphRegisterForm.cs
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+ Form
+
+
+ add_authorization.cs
+
+
+ Form
+
+
+ change_point_form.cs
+
+
+ UserControl
+
+
+ cps_coerce_alimama.cs
+
+
+ UserControl
+
+
+ cps_manage_control.cs
+
+
+ UserControl
+
+
+ cps_order_alimama.cs
+
+
+ UserControl
+
+
+ cps_order_jingdong.cs
+
+
+ UserControl
+
+
+ cps_order_pinduoduo.cs
+
+
+ UserControl
+
+
+ data_report_control.cs
+
+
+ Form
+
+
+ EditGroup.cs
+
+
+ Form
+
+
+ EncPlugin.cs
+
+
+ Form
+
+
+ ExchangeStateForm.cs
+
+
+ Form
+
+
+ GroupForm.cs
+
+
+ UserControl
+
+
+ group_manage_control.cs
+
+
+ UserControl
+
+
+ item_query_hist_control.cs
+
+
+ Form
+
+
+ LeavingMessageForm.cs
+
+
+ Form
+
+
+ main.cs
+
+
+ Form
+
+
+ MemberForm.cs
+
+
+ Form
+
+
+ member_base_info_form.cs
+
+
+ Form
+
+
+ member_inviter_control.cs
+
+
+ UserControl
+
+
+ member_manage_control.cs
+
+
+ UserControl
+
+
+ member_order_lastnum.cs
+
+
+ Form
+
+
+ member_private_config.cs
+
+
+ Form
+
+
+ member_reelect_group.cs
+
+
+ UserControl
+
+
+ plugin_control.cs
+
+
+ UserControl
+
+
+ plugin_debug.cs
+
+
+ UserControl
+
+
+ plugin_manage.cs
+
+
+ Form
+
+
+ plugin_sort_form.cs
+
+
+ UserControl
+
+
+ point_manage_control.cs
+
+
+ UserControl
+
+
+ private_pid_manage.cs
+
+
+ UserControl
+
+
+ robot_manage_control.cs
+
+
+ Form
+
+
+ select_member_form.cs
+
+
+ UserControl
+
+
+ setting_system_control.cs
+
+
+ Form
+
+
+ set_weixin_password.cs
+
+
+ UserControl
+
+
+ system_log_control.cs
+
+
+ Form
+
+
+ web_api_form.cs
+
+
+
+
+ Form
+
+
+ Test.cs
+
+
+
+ AddCloudblack.cs
+ Designer
+
+
+ add_authorization.cs
+ Designer
+
+
+ admin_verify_control.cs
+
+
+ convert_tool_control.cs
+
+
+ cps_order_douyin.cs
+
+
+ cps_order_kuaishou.cs
+
+
+ cps_order_refund_alimama.cs
+ Designer
+
+
+ cps_order_suning.cs
+
+
+ cps_order_weipinhui.cs
+
+
+ edit_uservariate_form.cs
+
+
+ group_info_form.cs
+
+
+ home_control.cs
+
+
+ jd_adzone_group_form.cs
+ Designer
+
+
+ LockForm.cs
+
+
+ member_order_lastnum_custom.cs
+
+
+ OneKeyExchangeForm.cs
+
+
+ RatioCustomGroupForm.cs
+
+
+ UpdateForm.cs
+
+
+ VerifyPassForm.cs
+
+
+ WPHNavForm.cs
+
+
+ notice_robotapi_control.cs
+
+
+ notice_robotapi_editform.cs
+
+
+ ServerClientManage.cs
+
+
+ tb_adzone_activity_group_form.cs
+ Designer
+
+
+ tb_adzone_group_form.cs
+ Designer
+
+
+ change_point_form.cs
+
+
+ cps_coerce_alimama.cs
+ Designer
+
+
+ cps_manage_control.cs
+ Designer
+
+
+ cps_order_alimama.cs
+ Designer
+
+
+ cps_order_jingdong.cs
+ Designer
+
+
+ cps_order_pinduoduo.cs
+ Designer
+
+
+ data_report_control.cs
+
+
+ EditGroup.cs
+
+
+ EncPlugin.cs
+
+
+ ExchangeStateForm.cs
+ Designer
+
+
+ GroupForm.cs
+
+
+ group_manage_control.cs
+
+
+ item_query_hist_control.cs
+
+
+ LeavingMessageForm.cs
+
+
+ main.cs
+ Designer
+
+
+ MemberForm.cs
+
+
+ member_base_info_form.cs
+
+
+ member_inviter_control.cs
+
+
+ member_order_lastnum.cs
+
+
+ member_private_config.cs
+ Designer
+
+
+ member_reelect_group.cs
+
+
+ point_manage_control.cs
+
+
+ private_pid_manage.cs
+
+
+ select_member_form.cs
+
+
+ setting_endtime_form.cs
+
+
+ set_wechat_device.cs
+ Designer
+
+
+ TCPForm.cs
+
+
+ tlj_form.cs
+
+
+ update_log_form.cs
+
+
+ web_api_form.cs
+
+
+
+
+ WphRegisterForm.cs
+
+
+ Test.cs
+
+
+
+ Designer
+
+
+ member_manage_control.cs
+
+
+ plugin_control.cs
+
+
+ plugin_debug.cs
+
+
+ plugin_manage.cs
+
+
+ plugin_sort_form.cs
+
+
+ robot_manage_control.cs
+
+
+ setting_system_control.cs
+
+
+ set_weixin_password.cs
+
+
+ system_log_control.cs
+
+
+ Designer
+
+
+ ResXFileCodeGenerator
+ Designer
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4.6.1 %28x86 和 x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+ {C1EC66C6-7E57-4780-9EA3-13369BD7C9FC}
+ PCRobot.Pack
+
+
+ {b54ae050-dd6c-4f73-95e8-9d8c1cf38ffe}
+ HttpHelper
+ False
+
+
+
+
+
+
+ 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。
+
+
+
+
+
\ No newline at end of file
diff --git a/FLSystem/FLSystem.sln b/FLSystem/FLSystem.sln
new file mode 100644
index 0000000..cb4a3ff
--- /dev/null
+++ b/FLSystem/FLSystem.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.28307.106
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FLSystem", "FLSystem.csproj", "{2E04051F-0E96-409A-9F93-4418603E69D0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|x86.ActiveCfg = Debug|x86
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Debug|x86.Build.0 = Debug|x86
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|x86.ActiveCfg = Release|x86
+ {2E04051F-0E96-409A-9F93-4418603E69D0}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {FC35004E-A0B3-48A7-9799-844D5A99B33F}
+ EndGlobalSection
+EndGlobal
diff --git a/FLSystem/Forms/AddCloudblack.Designer.cs b/FLSystem/Forms/AddCloudblack.Designer.cs
new file mode 100644
index 0000000..bc7e9c3
--- /dev/null
+++ b/FLSystem/Forms/AddCloudblack.Designer.cs
@@ -0,0 +1,177 @@
+namespace FLSystem.Forms
+{
+ partial class AddCloudblack
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddCloudblack));
+ this.label1 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.label3 = new System.Windows.Forms.Label();
+ this.textEdit1 = new DevExpress.XtraEditors.TextEdit();
+ this.textEdit2 = new DevExpress.XtraEditors.TextEdit();
+ this.textEdit3 = new DevExpress.XtraEditors.TextEdit();
+ this.label4 = new System.Windows.Forms.Label();
+ this.textEdit4 = new DevExpress.XtraEditors.MemoEdit();
+ this.simpleButton1 = new DevExpress.XtraEditors.SimpleButton();
+ this.simpleButton2 = new DevExpress.XtraEditors.SimpleButton();
+ ((System.ComponentModel.ISupportInitialize)(this.textEdit1.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.textEdit2.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.textEdit3.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.textEdit4.Properties)).BeginInit();
+ this.SuspendLayout();
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(34, 77);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(55, 14);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "用户名:";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(34, 121);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(51, 14);
+ this.label2.TabIndex = 1;
+ this.label2.Text = "昵 称:";
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(34, 31);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(51, 14);
+ this.label3.TabIndex = 2;
+ this.label3.Text = "类 型:";
+ //
+ // textEdit1
+ //
+ this.textEdit1.Location = new System.Drawing.Point(93, 28);
+ this.textEdit1.Name = "textEdit1";
+ this.textEdit1.Properties.ReadOnly = true;
+ this.textEdit1.Size = new System.Drawing.Size(201, 20);
+ this.textEdit1.TabIndex = 3;
+ //
+ // textEdit2
+ //
+ this.textEdit2.Location = new System.Drawing.Point(93, 74);
+ this.textEdit2.Name = "textEdit2";
+ this.textEdit2.Properties.ReadOnly = true;
+ this.textEdit2.Size = new System.Drawing.Size(201, 20);
+ this.textEdit2.TabIndex = 4;
+ //
+ // textEdit3
+ //
+ this.textEdit3.Location = new System.Drawing.Point(93, 118);
+ this.textEdit3.Name = "textEdit3";
+ this.textEdit3.Properties.ReadOnly = true;
+ this.textEdit3.Size = new System.Drawing.Size(201, 20);
+ this.textEdit3.TabIndex = 5;
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(34, 171);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(51, 14);
+ this.label4.TabIndex = 6;
+ this.label4.Text = "原 因:";
+ //
+ // textEdit4
+ //
+ this.textEdit4.Location = new System.Drawing.Point(93, 168);
+ this.textEdit4.Name = "textEdit4";
+ this.textEdit4.Size = new System.Drawing.Size(201, 62);
+ this.textEdit4.TabIndex = 7;
+ //
+ // simpleButton1
+ //
+ this.simpleButton1.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("simpleButton1.ImageOptions.Image")));
+ this.simpleButton1.Location = new System.Drawing.Point(37, 250);
+ this.simpleButton1.Name = "simpleButton1";
+ this.simpleButton1.Size = new System.Drawing.Size(116, 31);
+ this.simpleButton1.TabIndex = 8;
+ this.simpleButton1.Text = "更新云黑名单";
+ this.simpleButton1.Click += new System.EventHandler(this.simpleButton1_Click);
+ //
+ // simpleButton2
+ //
+ this.simpleButton2.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("simpleButton2.ImageOptions.Image")));
+ this.simpleButton2.Location = new System.Drawing.Point(193, 250);
+ this.simpleButton2.Name = "simpleButton2";
+ this.simpleButton2.Size = new System.Drawing.Size(131, 31);
+ this.simpleButton2.TabIndex = 9;
+ this.simpleButton2.Text = "删除云黑名单";
+ this.simpleButton2.Click += new System.EventHandler(this.simpleButton2_Click);
+ //
+ // AddCloudblack
+ //
+ this.AcceptButton = this.simpleButton1;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(349, 303);
+ this.Controls.Add(this.simpleButton2);
+ this.Controls.Add(this.simpleButton1);
+ this.Controls.Add(this.label4);
+ this.Controls.Add(this.textEdit3);
+ this.Controls.Add(this.textEdit2);
+ this.Controls.Add(this.textEdit1);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.textEdit4);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "AddCloudblack";
+ this.Text = "更新云黑名";
+ ((System.ComponentModel.ISupportInitialize)(this.textEdit1.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.textEdit2.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.textEdit3.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.textEdit4.Properties)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label3;
+ private DevExpress.XtraEditors.TextEdit textEdit1;
+ private DevExpress.XtraEditors.TextEdit textEdit2;
+ private DevExpress.XtraEditors.TextEdit textEdit3;
+ private System.Windows.Forms.Label label4;
+ private DevExpress.XtraEditors.MemoEdit textEdit4;
+ private DevExpress.XtraEditors.SimpleButton simpleButton1;
+ private DevExpress.XtraEditors.SimpleButton simpleButton2;
+ }
+}
\ No newline at end of file
diff --git a/FLSystem/Forms/AddCloudblack.cs b/FLSystem/Forms/AddCloudblack.cs
new file mode 100644
index 0000000..c39d258
--- /dev/null
+++ b/FLSystem/Forms/AddCloudblack.cs
@@ -0,0 +1,103 @@
+using Api.Framework;
+using Api.Framework.Model;
+using Api.Framework.Tools;
+using System;
+using Newtonsoft.Json;
+using UI.Framework.Forms;
+
+namespace FLSystem.Forms
+{
+ public partial class AddCloudblack : BaseForm
+ {
+ public AddCloudblack(fl_member_info info)
+ {
+ InitializeComponent();
+ this.info = info;
+ this.textEdit1.Text = this.info.robot_type.ToString();
+ this.textEdit2.Text = this.info.username;
+ this.textEdit3.Text = this.info.usernick;
+ }
+ fl_member_info info;
+ private void simpleButton1_Click(object sender, EventArgs e)
+ {
+ ServiceResult rst = null;
+ try
+ {
+ CloudBlack black = new CloudBlack();
+ rst = black.InsertBlack(info, this.textEdit4.Text);
+ if (rst.Ok)
+ {
+ info.status = Api.Framework.Enums.MemberType.黑名单;
+ var session = ApiClient.GetSession();
+ session.Updateable(new { status = info.status }).Where(f => f.id == info.id).ExecuteCommand();
+
+ var _black = session.Queryable().First(f => f.username == info.username && f.usertype == info.robot_type);
+ if (_black != null)
+ {
+ _black.nickname = info.usernick;
+ _black.remark = textEdit4.Text;
+ _black.iscloud = true;
+ _black.isdel = false;//标记没有被删除
+ session.Updateable(_black).ExecuteCommand();
+ }
+ else
+ {
+ _black = new fl_blackuser();
+ _black.usertype = info.robot_type;
+ _black.username = info.username;
+ _black.nickname = info.usernick;
+ _black.remark = textEdit4.Text;
+ _black.isdel = false;
+ _black.iscloud = true;
+ _black.updatetime = DateTime.Now;
+ session.Insertable(_black).ExecuteCommand();
+ }
+
+ BaseForm.ShowSuccess(rst.Message);
+ this.Close();
+ }
+ else
+ throw new Exception(rst.Message ?? rst.Data?.ToString());
+ }
+ catch (Exception ex)
+ {
+ EventClient.OnEvent("添加云黑名单异常:", "添加云黑名单:" + (rst == null ? string.Empty : JsonConvert.SerializeObject(rst)));
+ BaseForm.ShowError(ex);
+ }
+ }
+
+ private void simpleButton2_Click(object sender, EventArgs e)
+ {
+ ServiceResult rst = null;
+ try
+ {
+ CloudBlack black = new CloudBlack();
+ rst = black.RemoveBlack(info);
+ if (rst != null && rst.Ok)
+ {
+ info.status = Api.Framework.Enums.MemberType.正常;
+ var session = ApiClient.GetSession();
+ session.Updateable(new { status = info.status }).Where(f => f.id == info.id).ExecuteCommand();
+ var blackuser = session.Queryable().First(f => f.username == info.username && f.usertype == info.robot_type);
+ if (blackuser != null)
+ {
+ blackuser.isdel = true;
+ blackuser.iscloud = false;
+ blackuser.updatetime = DateTime.Now;
+ session.Updateable(blackuser).ExecuteCommand();
+ }
+
+ BaseForm.ShowSuccess(rst.Message);
+ this.Close();
+ }
+ else
+ throw new Exception(rst.Message ?? rst.Data?.ToString());
+ }
+ catch (Exception ex)
+ {
+ EventClient.OnEvent("删除云黑名单异常:", "删除云黑名单:" + (rst == null ? string.Empty : CsharpHttpHelper.HttpHelper.ObjectToJson(rst)));
+ BaseForm.ShowError(ex);
+ }
+ }
+ }
+}
diff --git a/FLSystem/Forms/AddCloudblack.resx b/FLSystem/Forms/AddCloudblack.resx
new file mode 100644
index 0000000..ca4e21e
--- /dev/null
+++ b/FLSystem/Forms/AddCloudblack.resx
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACF0RVh0VGl0
+ bGUAQXBwbHk7T0s7Q2hlY2s7QmFycztSaWJib247ZGPIaAAACrBJREFUWEeVVwtQlccZXdu82jyaNmNr
+ 0zTpREBBBURRFEEMrysQlEReakAUH4ii4BtBERFRQOSN4AUFQZP4BARBAQmgiIkoaAQEL29RQUTBTpzM
+ nH7fwkVN03a6M2d2//2//c75zu7+XMT2ZEuxQ2kldh6yFqEZCrEnUyHCj80Wkd/aiKiTNiL6tI2IzbYV
+ 8Tm2IiHPTlAb8d8Qm6sQ+7OtRNQpSxFx3EKEfW0uQrNmieAMM7E9zVQEpJiILYnGYmPcdAqnti3ZQrQ/
+ PSw6nqaLzv4McW/giETXQCYhS9x/lsVhaoLfEH5LeI3w+i/Acwx+z3Ej2p9miranR0TrkwzR3JcuVI8P
+ ibu9aaLxkVKsj5tGIdQCDphT0CEpoKN/UESnFJHJr9XEkjQ0w9wg+rQiOD5/dkViwexrSYU2PydfsPk5
+ Id+6Oj7P+tK+ExYh2w+aTKbYNzieIIW09pGAx+nirlpAT6pYH2tEr6gFJH1GClNF25M0coKE9JMbBGrq
+ il8PyzR3is62bkgtmocLNzegtnMf6h/EoWvgqET9g3iai0Rh7TocPP8FIk+ZN+w4ZLKA1r5JkEKah8ib
+ HqWKOz0HxbqYIQH+CWaipS+ZRKSQiIMkQsnTsupNMdNHh39jUZlRMh817eHo6FeisTcStx4G4+bDbaju
+ 2oBrXetR8yAQtQ+2o6EnAq1PlLhOsYeLXbDrqGmVZ6DuWMrFjkg3GntSxJ3uZOEXM5UeqW2ON6G9SaQ9
+ SiIhB3iKyV/zT5phufdri0fFtzZB1ReLG/e3oqpjDa52MtZKfH+Pxz6o6lyNyvZVuNTmjYpWL1zt2ICG
+ RzEorNmAXVkzH/mET7KhnOyGFFHfnSR89xvSkNrGWGPR9DiWRMTxoyTfGD3NKuIbq5+uqoKpsm24REkv
+ txHaVxLRSlzpGOzVuNzuReQrUN66DN81e6JUtRjFTR74ocMflxuDEZo56/nKUP1hEXUPE8SaKD4q1Hyj
+ porG3igeStuX75g4dme6WfdV1TZcaV+DsuYlEuUtnkSwFBVtni+Bnlt5nmIIpc0eKFG5o+iuGxLzFVi8
+ Uwdnazxw6U4QApXGPc5rxk4gDrkdPpGTmFOIpbt0RcOjcB6yPW9sSTK6lHeN7VyJoqaFKLn7FS5Swosq
+ N3zX4k5Y9KJvdkdpixsRuxHxVyhWLcSpakd4hugiMNYPMRlRWBIyAQV1S3Dm6mr4RU+qJI53CHwwuWAh
+ vgocx5203mevwYKIrxW0134ouOOEQsKFRheJoiZXqsyVSOYTGWOBHDN4/gK9Tz5vDdcNU3CioBB1qm40
+ qJow13c0EgotUaZai91HrLAocJwHcb1F4IKFWBigzR0/vLkuxrDh/M1VyK93xNk6B+TVO+Bcw5ck5EsU
+ NM6j3hHnGxkkjvsm6hk03n/aDIv8FSj/vh5t95+ip68Hq3fb4vjl5cj50RknauyRV+2DVeH6jcT1HmHY
+ BVm9k6+WIijVjOwmu27aIvu2HXJuf47c2/bIrZtDoggNcyXONThQz6BnEhmSZQS3Lda4fL0J97qfoffJ
+ Y6zYaY3MUg/k3HLCsWprZP1ghXN1ixF40AxzvTTsiVN9K6SAN1w3jY2KO+NCgbNxvMYaJ2sVOHVrNk4T
+ sm/bEGxJiB0JIlF1jMHx5hQDeGy1xZUaFToePkP3414sC7LCgTwXnPnREUerLZF5zRIZVeZIv6JAfLYL
+ XDaM5Sv3NoG/sFLFW/O3aFcoi1wRd9EECd/NICHmJMQSx65ZwF85kcZWJEYhBTHOEHYcmYxFW+1QVdOM
+ ju4B9D79CcFJXtiutJS2Z1Vb4AjlOVQ5CwmllLd0JtJKFoC4+DDyNgwL+L3rFu3utDJHRBdNw/5iI8QU
+ T0fCxRlYsE0THgE2cNs+DhlXZ+F4rSVO1FohMnsanNfPQEV1A9ofDqCr558ovHwCHkG6yK9zk8RpV8xw
+ oMwEcSUzEFMynWCMQxVOWLhVp4c4/0jgcyBVvO2yWft5SrkdIi8YYt+FqRILgzTgt3cRvr/VjqNns+G8
+ aTwSimYg9rwxHHzHIa+sEq33+6WA1q4WOK6bgG+r3JFcYYbEUlPEl84gR40l+f4iI8ppBGWFPRb46zwn
+ zj8R+K+oFPCO80bt5wkXzRFeaIjI81MQljsV9ms/QeX1K7hH1d3t6MPpC8WYt04X9ms0cCz/LFSdfWh7
+ 0I/uvmfwC5+HyBP2SC7/7CViY3KTHCVXuaDI84YkzAKuVCxxfvCKgHnrxnbvO2eKiMLJiCgwJNtmQlnk
+ THZNRld3Bzp7nqGJCPPKqpD4Df1RautFK5HzwTtVpKSPz0SkV86hdWz1dERLYiNEFZGbVFAEkTOiCmbC
+ acNY3oJhAXwG3nZYPeZS6HETRJwzxN78SQgvmISkMkv6pM7D8hAzPOh9gDay+m7nE/yo6kELWd9MaOlq
+ w9y1mkgtdRokVRMPbSNXzcScL5IK233CFA6rtaqIc/gMsIDf2S7XiNmcMp0CDRGWb4A9BQZyUXKZFfad
+ ssOavTbo6++XVTNxc9dTuTW7lV4IUJqR5TOHSbli3sZI2s5wcjS8YDIVZUDuTsGWg8aw8RydRJyv3II3
+ Z7l8Yu8RpE/BU7H7rD7C8hgTpRsp5QqEHrVCYMJ8PO5/BhWRM67XV8LFXwOpFXNkpbJaJhzCXiqACwnL
+ nyhzRVDuxTv0YTLvY2fi5O8Acw9+CQl/+NxLsykwy0AKCD2rNySEFlMCZbktAtJMEZ7ujb6Bn2hLBrBq
+ jyWic+nmSIuZ8AXpHqo4LI8xcThP4NFJsPfWUhHXnwn8JRwhbJZrUj/4LSAXli4MnIA9eZMRkqOLXbm6
+ UkjoUII0ukLrE42QfDIAeeXpWBmhh/iSWZJskHAirR2sNoyLIBdDc/Vknr2U023bBJg6fuxNXGr7R4jZ
+ yzSoly7wiXzfZpnG1bWJRJ6jL0WE0OIXQvRw+NJc+EQb4IuNHyO+wEZWt5sImUyOmZhjh9bJtbn68E3S
+ BeW+Thwvquem8NQQ+bdY1OBh1DcfZWS/aswj/yO62EkCdmZPkL10ZEhQ+mUHnKxeRKd66iAJEe4aqpTB
+ seo1ITl68M/Uwxxvzd7xJiNNiYN/DwxWz816iYbIrfUSObXL+ZHPwjtG9h99OddH6/n6NB3sODMewWdI
+ RPb4QTESlJjxChGLHRJNCKY4Xsc5HNZoPTe0/dCVcr9PYKdHKJZK5/9NgHor3pti9zdHuxWaj73jtKUI
+ NYJJyKsgIklG7+n55dhV8dqwW6HVZ6j4cD7l5E8v/xwbkUN81kvk2VMLWP6yALWId7WNRk6xXvxptdNm
+ Law/pIMgShp0Zhx2nCYCAj8zkZx/aY5jnbeMgZXH6Btahh/w/2BcuSRnMBfzysYDnmCwEGpqEbwdfFdH
+ Gs35yNt68egWB19NLNkzBn5KbWw8rIPtp8ch6NQ4bEzXgV+qDjzpnYOvFqwXa7Qa2f99Na0dRXiXIG1n
+ qHl+IcBryAXeCi+eVovgw8Inlq/NX/Q/G/W5qfM/4i3cR9+wdP+0ng4wGJbuo+st3D+9Yer8SYLerFFz
+ KPavBK6af/txIcPkvyrgP4Hay0LYQnaEE48kcHUfDoHHfL34+86nnEUPE/9absb/09RC+KpyYraUBTER
+ g8c8x+84Rh3/P5oQ/wKtHXLtkLLsUQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACN0RVh0VGl0
+ bGUAQ2FuY2VsO1N0b3A7RXhpdDtCYXJzO1JpYmJvbjtMlpayAAALFUlEQVRYR5WXB1RVxxaGx/dSfEGM
+ xq50BUUEC1goAtJBwYZiiRpFDREJNkBApVgQE7FjJMYSg6KiXlBRNNJEqQIXROBSlM6lKqLI1bf+7DkX
+ iHkr67319lrfmrlzZvb/zz5zDgdWsz+Y2C0n9G+g8Wpqq0M4wYyiz3/jRYA/ex7gxyp2+rLnRIW/Nyv3
+ 9WLl271Ymc9WVuq9hUm2bWaSrZ40naJmXxD7d+vzbl6wD38DRY/AP4h/Ep8Qn/4HfIzDr/N5fd7XP2Pv
+ 6wvZ+zrOU/a+poDJasRMVp3Hijw9aApF1d4A9qGlnKj4K2SIokdYEM302jyleIdvcOku/0dlu/xyKgL8
+ PpTv9P0g8ffOlfh6P8732rwnYcN6A5r7GZ9PyI0I4vm94rKqXFa4cQNdoqgM3sk+NJcRZOIjKHp2/Kl4
+ +7bFJCip/DEEzbFX0CFOxdtnmaB5RBneFKbjdU4yGq9HomJvIJ5t2yxJc3dbTms/JwQjMm6gSi4uq3zC
+ 8r9zo2GKil1+7H2jpJtSoaUQdp3g7ja6xH97ek34EXTkpeJ9fRE6i9LQkX4Xr1Nv4uXdi3h55ze0J91A
+ e0oM3oqTIKvOR3t2IirC9kPs4Z55dsH8cZSLV0SoRteLbNb1PIvlrVtLPynK/Lez9w3FvVBw8U/SPT2s
+ JTu2t7beE6HrRR5eP75NYpFy4i6g7TZx6zzaYs+iVXQGrddPoyX6FFqunsTL+IvoLE6DNCYK+R7urTFL
+ lzhQTl4NuYnSNJa9ejV1KSQ+2+jePGWy2kL+UxBP3fCdjWSXf1d7ViLeZP8uF7opp/XmObTFnCVI9MYv
+ JPwzWq9FkPBPaL58As0Xj6Hpt8NoPB+G9oRotD2MQ66Hu+y688JeE53FqSxzxUqux1jRZk/WVZnHu0LZ
+ Rd+sGFfos625PfMBXlGCFi5C8FaABFu4YDQXpR1fOUnC4Wi+dBxNkUfQeOEQGs/9iMYzByD9OUSoSmtS
+ LDJcXVuOWVvrkoZwOx4vXcY1GROvWc26yrN5l5fnszyPjY+lsVFUxig08+RXaGe9cLFuwSjaLRcVdtwj
+ fBCNZ3+A9HQoGiL2ouHkbtQdDyJjx1AdeRrJLkvTSaMfwQ8m3zBjWS5LeCOUPnntmuUlwbvQnixCY+RR
+ YWEPNREHEOc8F78aTMX9rxej4exBNP1KolTqehKMd5mP0xP0IHKwRmXYDtSfCEbd0QDUHt6B2oO+aKFz
+ kvX9Rlyyc+A3vy/BN8xYuvMi3vAfn2evXy9puh0F6YXDkJKA9FyYQE34PojsbXDNaxfuxDzE1fUeuDXX
+ AXWnQlD30z7EzLHF5bXuiBOl4IqnL6JMjFAR4oXaMD9U/+CD6tBtqD7gjdrIU4h3ml9GWv2J3ioIu79q
+ a28n3uJJTs9S4n2ojwgRaPh5P+4sdILINwipWWUoe96IotJ6XHPzxE1He9ycY0fiG5GUVoyisnqUPG+C
+ iIyKrC1QFeqFqpAtqNq9CS8CNwq5UletwrGphk6k2fNUCAY+i7ObfejZzm2o3O2JmqOBqKUScuqIy8ZG
+ qK9qQEV1C9rau9D2+h1KyhsEE5fXeSDxcTGKyVhz+zs0v+pEq7QFZ3QnomqPJ14EfY/nAe6o8P8W5d6u
+ yN26ERemmxwnTQWCv2EFF33jbR0eSXZ6osTVCcXfzkflnk2oObQDNYd3InHVMjzasROd72Rk4B1aXpEQ
+ tcXlUqTnVKC4ohFNLzsF+JwkLx/EzXeUC+9wQ+nWVXi2xglFaxxR6LMBUdNn8sPIb0OvgS/ireyaJd7r
+ ULjSDoVf26JwhR1K3JxR7u+G2vA9uLdoAdICAwUBQYx2ytvGj+jslOGhnx9i7a3xItQHpZtWoNh1npDr
+ 6XIbwhbFW1xx2cCkhTQHEvwcCC4UblvYyCQey1HgYo2CpdZ4uowvILiZVQ4o93ND3GwbJPv6Qdr2BlIS
+ lLa97aW+uQOJPr6IsTRD2Xa+EQdBkOfh+fJdLCFebIlidxdcmmwoI82vCP5XVDDQL3ampaxw9TyInWfR
+ RAvk02S+qGCJlTwBJbptaYob33rgqUQKaQsZaHmLBqKOqG3qwK0NmxBjaggxzS9YaoX8JfIcPF+eszny
+ Fpqh4Js5uKA7nRsY9BcDN4zMmnOW2CNvAU1cYEaTzckMsYgMLbLALXNDXKfH7/eUIhSUSlHXTKICHYJ4
+ bdNbiIvrcdV1A64b6iOXC3IoV+4CU+TOm0mYIsvZGme19fkt6DXAz4DCJQOTx2lzrZBDE584mdBkDi2a
+ PxN3LY1xw+173E95hnzavVywA2/edqGDqGnsQHU3ec9qcW3tBsQYG1AuUzyZa4InjsbIdjQS8ibZmSFc
+ c2ImafaeAW7gX6f1ph29b2WObCdTZDvMQNYcQ2TPMaKFJG5qjDJJNcQl9YJYDYl3vOlCRlAA0gMDhH6V
+ tEOgsuE1aqukuKg/RVifNXsGMilfpt10ymmEWKPpCFXR/ok0//IUfL5XS9cpepoRMhwIm6nItJmGDLtp
+ yKKF8faWeHryBF51dFHp3wiCWcFBuGNjjjhrM8HIaxrjVeFz8o4ewc1ZJsL6TMqVYW2AdCt9pNlOx3nt
+ idg6TN2FNPl7gGvL34TEl2e09cvvG08RJqdb8nYKMqwMkLtsNuJIjJt429CArKBA3LWdhYKVjihY5Yg7
+ 1qbICNyFNw31yDt2FCJTI+QstUcarU+zmIy0WZOQRvnipk7AYSVt/q03lOBvwj7s3Dh9auXvgj1q49dF
+ 6kxGqvkkPDKbiMfmBF9MhriJ+w6WiJ01Ew/mWCFvmYNgNIMQL7PHPXsLRBsbIs6K7jsd5jRLfSHHI1M9
+ PJqphxQTPUSoa2PrYFV30uopfx/2i+ZkaoUq8BM54ISGbtYNPR2kGE9AqrEuUmlx6kxdPDKfjNzF9Diu
+ nIscZyukmZFJUy5AJqmfs5Ae1xWOyF1kTcKT8NBEvv6hkQ6SZ4xHlJYmQoeO4R8ef+6eR4SGHkuw4B+y
+ 8sO4ZrDSjHA1ndbYiVpImqotLE6ZoYOHhtQakjGj8ULSh0YTPoJf52N03VCb5vM12kiaPg6JBlq4Pk4D
+ YUNHty3oN8SUNPj3gHz3PMJVddj9GRMEKPhZ6Ld5iOrCcGVt2TXt0fh9iiYSp45FMpE4bRySiSQipbv9
+ k7ECiZypWkgg7k3SwGVNVYQN1pC5Kg5fSrkHELzSfX4YqEYNxfFR2uzuZE0WR1D03Ir+7l8pLzo8XOtl
+ pIYabuuo4f5kDTyYMgYP9DUFEnoZgwQymSBcI6h/T08DN8er4LyKCkK/Un21WmEo//7ir17+OdZHNEGd
+ hfZXpS7FkRFjWSwNxOqo85/cQI8JxXn9Bk/bP0gjN3yEOqLUlRE7Vgm3KPE9XTVCHQ8mUoWIePodP0EN
+ cXRNpDUKkaqjcHSwCoL6K4tt+w4wolx854I455qWEtunqEJdirAhY5iIBq5rjWIizVF8qMcEvx38WR3i
+ 0X+k+76BapWHBqsiYoQSflMZSSIjET16OKI1hiNSZQQuKI/EqeGjcHCgMvYoKle5KQzj/3sNJxQJoeyc
+ K+oj2BX14WyvgjL9pPhxkAaLVh/Grml0Q32KHhP8sPATyx+bYcu+GOLorTjyRKCisjhYUaUkpL8KQhRp
+ p/2USgIUlMRbvxgR7tJ30FyaO4Lgu+bffnwjQr7LKkNYD3sVlGiI4sBAdXZggBoL5XypSi3B2/5CiT42
+ wkvIK8ITDyH47kZ2w/v88eLvd37KueleYS72d/w/0WOEP6o8MS8pN8SFOLzPx/g1Pqdn/v8Ixv4AVZya
+ X9ttAMYAAAAASUVORK5CYII=
+
+
+
\ No newline at end of file
diff --git a/FLSystem/Forms/EditGroup.Designer.cs b/FLSystem/Forms/EditGroup.Designer.cs
new file mode 100644
index 0000000..cb5ac1b
--- /dev/null
+++ b/FLSystem/Forms/EditGroup.Designer.cs
@@ -0,0 +1,182 @@
+namespace FLSystem.Forms
+{
+ partial class EditGroup
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.linkLabel2 = new System.Windows.Forms.LinkLabel();
+ this.linkLabel1 = new System.Windows.Forms.LinkLabel();
+ this.textBox4 = new System.Windows.Forms.TextBox();
+ this.textBox3 = new System.Windows.Forms.TextBox();
+ this.textBox2 = new System.Windows.Forms.TextBox();
+ this.label4 = new System.Windows.Forms.Label();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.label1 = new System.Windows.Forms.Label();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.linkLabel2);
+ this.groupBox1.Controls.Add(this.linkLabel1);
+ this.groupBox1.Controls.Add(this.textBox4);
+ this.groupBox1.Controls.Add(this.textBox3);
+ this.groupBox1.Controls.Add(this.textBox2);
+ this.groupBox1.Controls.Add(this.label4);
+ this.groupBox1.Controls.Add(this.textBox1);
+ this.groupBox1.Controls.Add(this.label3);
+ this.groupBox1.Controls.Add(this.label2);
+ this.groupBox1.Controls.Add(this.label1);
+ this.groupBox1.Location = new System.Drawing.Point(37, 30);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(431, 244);
+ this.groupBox1.TabIndex = 0;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = " 编辑区 ";
+ //
+ // linkLabel2
+ //
+ this.linkLabel2.AutoSize = true;
+ this.linkLabel2.Location = new System.Drawing.Point(328, 135);
+ this.linkLabel2.Name = "linkLabel2";
+ this.linkLabel2.Size = new System.Drawing.Size(55, 14);
+ this.linkLabel2.TabIndex = 2;
+ this.linkLabel2.TabStop = true;
+ this.linkLabel2.Text = "选择用户";
+ this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel2_LinkClicked);
+ //
+ // linkLabel1
+ //
+ this.linkLabel1.AutoSize = true;
+ this.linkLabel1.Location = new System.Drawing.Point(328, 51);
+ this.linkLabel1.Name = "linkLabel1";
+ this.linkLabel1.Size = new System.Drawing.Size(43, 14);
+ this.linkLabel1.TabIndex = 2;
+ this.linkLabel1.TabStop = true;
+ this.linkLabel1.Text = "选择群";
+ this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
+ //
+ // textBox4
+ //
+ this.textBox4.Location = new System.Drawing.Point(120, 173);
+ this.textBox4.Name = "textBox4";
+ this.textBox4.Size = new System.Drawing.Size(189, 22);
+ this.textBox4.TabIndex = 1;
+ //
+ // textBox3
+ //
+ this.textBox3.Location = new System.Drawing.Point(120, 131);
+ this.textBox3.Name = "textBox3";
+ this.textBox3.Size = new System.Drawing.Size(189, 22);
+ this.textBox3.TabIndex = 1;
+ //
+ // textBox2
+ //
+ this.textBox2.Location = new System.Drawing.Point(120, 89);
+ this.textBox2.Name = "textBox2";
+ this.textBox2.Size = new System.Drawing.Size(189, 22);
+ this.textBox2.TabIndex = 1;
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(44, 177);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(67, 14);
+ this.label4.TabIndex = 0;
+ this.label4.Text = "群管昵称:";
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(120, 47);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(189, 22);
+ this.textBox1.TabIndex = 1;
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(44, 135);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(67, 14);
+ this.label3.TabIndex = 0;
+ this.label3.Text = "群管账号:";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(56, 93);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(55, 14);
+ this.label2.TabIndex = 0;
+ this.label2.Text = "群昵称:";
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(56, 51);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(55, 14);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "群账号:";
+ //
+ // EditGroup
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(507, 309);
+ this.Controls.Add(this.groupBox1);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "EditGroup";
+ this.Text = "{0}群管";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.EditGroup_FormClosing);
+ this.Load += new System.EventHandler(this.EditGroup_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.LinkLabel linkLabel1;
+ private System.Windows.Forms.TextBox textBox2;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.LinkLabel linkLabel2;
+ private System.Windows.Forms.TextBox textBox4;
+ private System.Windows.Forms.TextBox textBox3;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Label label3;
+ }
+}
\ No newline at end of file
diff --git a/FLSystem/Forms/EditGroup.cs b/FLSystem/Forms/EditGroup.cs
new file mode 100644
index 0000000..a9c2c1b
--- /dev/null
+++ b/FLSystem/Forms/EditGroup.cs
@@ -0,0 +1,124 @@
+using Api.Framework;
+using Api.Framework.Model;
+using Api.Framework.Tools;
+using DevExpress.XtraEditors;
+using SqlSugar;
+using System;
+using System.Linq;
+using System.Windows.Forms;
+using UI.Framework.Forms;
+
+namespace FLSystem.Forms
+{
+ public partial class EditGroup : BaseForm
+ {
+ private fl_group_person group = null;
+ SqlSugarClient session = ApiClient.GetSession();
+ public EditGroup(fl_group_person group = null)
+ {
+ InitializeComponent();
+ this.group = group;
+ this.Text = Text.Replace("{0}", group == null ? "增加" : "修改");
+ }
+
+ private void EditGroup_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ if (group != null)
+ {
+ textBox1.Text = group.groupid;
+ textBox2.Text = group.groupname;
+ if (group.mid != 0)
+ {
+ var member = session.FindSingle("select * from fl_member_info where username = @username", new { username = textBox3.Text });
+ if (member != null)
+ {
+ textBox3.Text = member.username;
+ textBox4.Text = member.usernick;
+ linkLabel2.Tag = member.id;
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ ShowError(ex);
+ }
+ }
+
+ private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ try
+ {
+ var groupForm = new GroupForm();
+ if (groupForm.ShowDialog() == DialogResult.OK)
+ {
+ if (groupForm.group != null)
+ {
+ textBox1.Text = groupForm.group.groupid;
+ textBox2.Text = groupForm.group.groupname;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ ShowError(ex);
+ }
+ }
+
+ private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ try
+ {
+ var memberForm = new MemberForm();
+ if (memberForm.ShowDialog() == DialogResult.OK)
+ {
+ if (memberForm.member != null)
+ {
+ textBox3.Text = memberForm.member.username;
+ textBox4.Text = memberForm.member.usernick;
+ linkLabel2.Tag = memberForm.member.id;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ ShowError(ex);
+ }
+ }
+
+ private void EditGroup_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ try
+ {
+ if (string.IsNullOrWhiteSpace(textBox1.Text)) throw new Exception("请填写群账号");
+ if (string.IsNullOrWhiteSpace(textBox3.Text)) throw new Exception("请填写管理账号");
+
+ if (group == null)
+ {
+ var _group = session.Queryable().First(f => f.groupid == textBox1.Text.Trim());
+ if (_group != null) throw new Exception("该群账号已经存在请核对后重试");
+ group = new fl_group_person() { groupid = textBox1.Text.Trim(), groupname = textBox2.Text.Trim() };
+ }
+
+ long mid = 0;
+ if (linkLabel2.Tag != null)
+ mid = long.Parse(linkLabel2.Tag.ToString());
+ else
+ {
+ var member = session.FindSingle("select * from fl_member_info where username = @username",new { username = textBox3.Text });
+ if (member == null) throw new Exception("输入的管理员账号不存在");
+ mid = member.id;
+ }
+ group.mid = mid;
+ session.SaveOrUpdate(group);
+ }
+ catch (Exception ex)
+ {
+ if (XtraMessageBox.Show(ex.Message + ",是否关闭?", "操作失败", MessageBoxButtons.YesNo) == DialogResult.No)
+ e.Cancel = true;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/FLSystem/Forms/EditGroup.resx b/FLSystem/Forms/EditGroup.resx
new file mode 100644
index 0000000..9bcc643
--- /dev/null
+++ b/FLSystem/Forms/EditGroup.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/FLSystem/Forms/EncPlugin.Designer.cs b/FLSystem/Forms/EncPlugin.Designer.cs
new file mode 100644
index 0000000..2d4fab7
--- /dev/null
+++ b/FLSystem/Forms/EncPlugin.Designer.cs
@@ -0,0 +1,128 @@
+namespace FLSystem.Forms
+{
+ partial class EncPlugin
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.linkLabel1 = new System.Windows.Forms.LinkLabel();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.label1 = new System.Windows.Forms.Label();
+ this.button1 = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.panel1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.linkLabel1);
+ this.groupBox1.Controls.Add(this.panel1);
+ this.groupBox1.Location = new System.Drawing.Point(19, 12);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(348, 130);
+ this.groupBox1.TabIndex = 0;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "应用封装";
+ this.groupBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.groupBox1_DragDrop);
+ this.groupBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.groupBox1_DragEnter);
+ //
+ // linkLabel1
+ //
+ this.linkLabel1.AutoSize = true;
+ this.linkLabel1.Location = new System.Drawing.Point(270, 0);
+ this.linkLabel1.Name = "linkLabel1";
+ this.linkLabel1.Size = new System.Drawing.Size(75, 14);
+ this.linkLabel1.TabIndex = 2;
+ this.linkLabel1.TabStop = true;
+ this.linkLabel1.Text = "选择应用DLL";
+ this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
+ //
+ // panel1
+ //
+ this.panel1.AllowDrop = true;
+ this.panel1.Controls.Add(this.label1);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panel1.Location = new System.Drawing.Point(3, 18);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(342, 109);
+ this.panel1.TabIndex = 0;
+ this.panel1.DragDrop += new System.Windows.Forms.DragEventHandler(this.groupBox1_DragDrop);
+ this.panel1.DragEnter += new System.Windows.Forms.DragEventHandler(this.groupBox1_DragEnter);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.ForeColor = System.Drawing.Color.Gray;
+ this.label1.Location = new System.Drawing.Point(122, 47);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(99, 14);
+ this.label1.TabIndex = 1;
+ this.label1.Text = "请拖拽DLL到此处";
+ this.label1.DragDrop += new System.Windows.Forms.DragEventHandler(this.groupBox1_DragDrop);
+ this.label1.DragEnter += new System.Windows.Forms.DragEventHandler(this.groupBox1_DragEnter);
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(114, 153);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(156, 40);
+ this.button1.TabIndex = 1;
+ this.button1.Text = "申请可调试权限";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // EncPlugin
+ //
+ this.AcceptButton = this.button1;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(386, 206);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.groupBox1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "EncPlugin";
+ this.Text = "应用封装";
+ this.Load += new System.EventHandler(this.EncPlugin_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.panel1.ResumeLayout(false);
+ this.panel1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.LinkLabel linkLabel1;
+ }
+}
\ No newline at end of file
diff --git a/FLSystem/Forms/EncPlugin.cs b/FLSystem/Forms/EncPlugin.cs
new file mode 100644
index 0000000..cfd8d17
--- /dev/null
+++ b/FLSystem/Forms/EncPlugin.cs
@@ -0,0 +1,96 @@
+using Api.Framework;
+using CsharpHttpHelper;
+using Grant.Framework;
+using System;
+using System.Windows.Forms;
+using UI.Framework.Forms;
+
+namespace FLSystem.Forms
+{
+ public partial class EncPlugin :BaseForm
+ {
+ public EncPlugin()
+ {
+ InitializeComponent();
+ }
+
+ private void EncPlugin_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ var a = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
+ var b = System.IO.File.ReadAllBytes(a);
+ if (b[b.Length - 1] != 83 || b[b.Length - 2] != 84)
+ {
+ this.button1.Text = "已获得可调试权限";
+ this.button1.Enabled = false;
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
+ }
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ Computer cx = Computer.Instance();
+ var md5 = HttpHelper.ToMD5(cx.ComputerName + cx.CpuID + cx.LoginUserName);
+ MessageBox.Show($@"机器码:{md5}
+
+如有独立开发能力、可向客服申請权限!","请发送给管理员");
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
+ }
+ }
+
+ private void groupBox1_DragEnter(object sender, DragEventArgs e)
+ {
+ e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Link : DragDropEffects.None;
+ }
+
+ private void groupBox1_DragDrop(object sender, DragEventArgs e)
+ {
+ try
+ {
+ var text = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
+ var plugin = PluginClient.FileConvertPlugin(text);
+ ShowSuccess($"恭喜您,封装成功!\r\n友情提示:\r\n 您的DLL可以先混淆加密再來封裝会更安全哦!\r\n路径:{plugin.FilePath}","操作成功");
+ }
+ catch (Exception ex)
+ {
+ ShowError(ex.Message);
+ }
+ }
+
+ private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+
+ try
+ {
+ OpenFileDialog dialog = new OpenFileDialog();
+ dialog.Multiselect = true;//该值确定是否可以选择多个文件
+ dialog.Title = "请选择插件DLL";
+ dialog.Filter = "所有文件(*.dll)|*.dll";
+ if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+ {
+ string file = dialog.FileName;
+ var plugin = PluginClient.FileConvertPlugin(file);
+ ShowSuccess($@"恭喜您,封装成功!
+友情提示:
+您的DLL可以先混淆加密再來封裝会更安全哦!
+路径:{plugin.FilePath}", "操作成功");
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ }
+}
diff --git a/FLSystem/Forms/EncPlugin.resx b/FLSystem/Forms/EncPlugin.resx
new file mode 100644
index 0000000..9bcc643
--- /dev/null
+++ b/FLSystem/Forms/EncPlugin.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/FLSystem/Forms/ExchangeStateForm.Designer.cs b/FLSystem/Forms/ExchangeStateForm.Designer.cs
new file mode 100644
index 0000000..600103b
--- /dev/null
+++ b/FLSystem/Forms/ExchangeStateForm.Designer.cs
@@ -0,0 +1,134 @@
+namespace FLSystem.Forms
+{
+ partial class ExchangeStateForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExchangeStateForm));
+ this.panelControl1 = new DevExpress.XtraEditors.PanelControl();
+ this.simpleButton4 = new DevExpress.XtraEditors.SimpleButton();
+ this.simpleButton3 = new DevExpress.XtraEditors.SimpleButton();
+ this.simpleButton2 = new DevExpress.XtraEditors.SimpleButton();
+ this.simpleButton1 = new DevExpress.XtraEditors.SimpleButton();
+ this.settingControl1 = new UI.Framework.Controls.SettingControl();
+ ((System.ComponentModel.ISupportInitialize)(this.panelControl1)).BeginInit();
+ this.panelControl1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // panelControl1
+ //
+ this.panelControl1.Controls.Add(this.simpleButton4);
+ this.panelControl1.Controls.Add(this.simpleButton3);
+ this.panelControl1.Controls.Add(this.simpleButton2);
+ this.panelControl1.Controls.Add(this.simpleButton1);
+ this.panelControl1.Controls.Add(this.settingControl1);
+ this.panelControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panelControl1.Location = new System.Drawing.Point(0, 0);
+ this.panelControl1.Name = "panelControl1";
+ this.panelControl1.Size = new System.Drawing.Size(483, 511);
+ this.panelControl1.TabIndex = 0;
+ //
+ // simpleButton4
+ //
+ this.simpleButton4.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("simpleButton4.ImageOptions.Image")));
+ this.simpleButton4.Location = new System.Drawing.Point(9, 466);
+ this.simpleButton4.Name = "simpleButton4";
+ this.simpleButton4.Size = new System.Drawing.Size(100, 33);
+ this.simpleButton4.TabIndex = 8;
+ this.simpleButton4.Text = "确认修改";
+ this.simpleButton4.Click += new System.EventHandler(this.simpleButton4_Click);
+ //
+ // simpleButton3
+ //
+ this.simpleButton3.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.simpleButton3.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("simpleButton3.ImageOptions.Image")));
+ this.simpleButton3.Location = new System.Drawing.Point(376, 466);
+ this.simpleButton3.Name = "simpleButton3";
+ this.simpleButton3.Size = new System.Drawing.Size(92, 33);
+ this.simpleButton3.TabIndex = 7;
+ this.simpleButton3.Text = "取消操作";
+ this.simpleButton3.Click += new System.EventHandler(this.simpleButton3_Click);
+ //
+ // simpleButton2
+ //
+ this.simpleButton2.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.simpleButton2.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("simpleButton2.ImageOptions.Image")));
+ this.simpleButton2.Location = new System.Drawing.Point(257, 466);
+ this.simpleButton2.Name = "simpleButton2";
+ this.simpleButton2.Size = new System.Drawing.Size(98, 33);
+ this.simpleButton2.TabIndex = 6;
+ this.simpleButton2.Text = "商户支付";
+ this.simpleButton2.Click += new System.EventHandler(this.simpleButton2_Click);
+ //
+ // simpleButton1
+ //
+ this.simpleButton1.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.simpleButton1.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("simpleButton1.ImageOptions.Image")));
+ this.simpleButton1.Location = new System.Drawing.Point(130, 466);
+ this.simpleButton1.Name = "simpleButton1";
+ this.simpleButton1.Size = new System.Drawing.Size(106, 33);
+ this.simpleButton1.TabIndex = 5;
+ this.simpleButton1.Text = "微信支付";
+ this.simpleButton1.Click += new System.EventHandler(this.simpleButton1_Click);
+ //
+ // settingControl1
+ //
+ this.settingControl1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.settingControl1.Location = new System.Drawing.Point(2, 2);
+ this.settingControl1.Name = "settingControl1";
+ this.settingControl1.Size = new System.Drawing.Size(479, 457);
+ this.settingControl1.TabIndex = 1;
+ //
+ // ExchangeStateForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.CancelButton = this.simpleButton3;
+ this.ClientSize = new System.Drawing.Size(483, 511);
+ this.Controls.Add(this.panelControl1);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "ExchangeStateForm";
+ this.Text = " 审 核 申 请 ";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ExchangeStateForm_FormClosing);
+ this.Load += new System.EventHandler(this.ExchangeStateForm_Load);
+ ((System.ComponentModel.ISupportInitialize)(this.panelControl1)).EndInit();
+ this.panelControl1.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private DevExpress.XtraEditors.PanelControl panelControl1;
+ private UI.Framework.Controls.SettingControl settingControl1;
+ private DevExpress.XtraEditors.SimpleButton simpleButton4;
+ private DevExpress.XtraEditors.SimpleButton simpleButton3;
+ private DevExpress.XtraEditors.SimpleButton simpleButton2;
+ private DevExpress.XtraEditors.SimpleButton simpleButton1;
+ }
+}
\ No newline at end of file
diff --git a/FLSystem/Forms/ExchangeStateForm.cs b/FLSystem/Forms/ExchangeStateForm.cs
new file mode 100644
index 0000000..870b272
--- /dev/null
+++ b/FLSystem/Forms/ExchangeStateForm.cs
@@ -0,0 +1,297 @@
+using Api.Framework;
+using Api.Framework.Model;
+using Api.Framework.Tools;
+using Chat.Framework;
+using Chat.Framework.WXSdk.IPAD;
+using DevExpress.XtraEditors;
+using Newtonsoft.Json;
+using System;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using UI.Framework.Forms;
+using static FLSystem.Forms.point_manage_control;
+
+namespace FLSystem.Forms
+{
+ public partial class ExchangeStateForm : BaseForm
+ {
+ public ExchangeStateForm(exchange_list_temp exchange)
+ {
+ InitializeComponent();
+ this.exchange = exchange;
+ }
+
+ exchange_list_temp exchange;
+ bool is_auto_pay = false;
+ public string mess { get; set; }
+ public string pay_url { get; private set; }
+
+ private void ExchangeStateForm_Load(object sender, EventArgs e)
+ {
+ pay_url = string.Empty;
+ try
+ {
+ this.settingControl1.Bind(exchange);
+ }
+ catch (Exception ex)
+ {
+ if (!this.IsDisposed)
+ ShowError(ex);
+ }
+ }
+
+ private void simpleButton4_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (exchange.state == ApplyType.退回兑换)
+ {
+ var client = ChatClient.WXClient.Values.ToList().FirstOrDefault(f => f.WeixinHao == exchange.robot_name);
+ if (client == null)
+ {
+ if (XtraMessageBox.Show(
+$@"{exchange.robot_name}机器人没有登录
+用户将无法收到退回兑换消息
+点击OK执行操作", "温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, DevExpress.Utils.DefaultBoolean.Default) == DialogResult.Cancel)
+ {
+ exchange.state = ApplyType.未审核;
+ }
+ }
+ else
+ {
+ exchange.state = ApplyType.退回兑换;
+ //throw new Exception("兑换退回失败,请稍后重试");
+ }
+ }
+ this.Close();
+
+ }
+ catch (Exception ex)
+ {
+ BaseForm.ShowErrorAutoClose(ex);
+ }
+ }
+
+ private void simpleButton3_Click(object sender, EventArgs e)
+ {
+ exchange.state = ApplyType.未审核;
+ exchange.remark = string.Empty;
+ this.Close();
+ }
+
+ private CancellationTokenSource tokenSource = new CancellationTokenSource();
+
+ private async void simpleButton1_Click(object sender, EventArgs e)
+ {
+ ChangeBtn(this.simpleButton1);
+ try
+ {
+ await Task.Run(() =>
+ {
+ try
+ {
+ if (exchange.chattype != Api.Framework.SDK.ChatType.微信) throw new Exception("暂时不支持自动转账!");
+ var client = ChatClient.WXClient.Values.ToList().FirstOrDefault(f => f.WeixinHao == exchange.robot_name);
+ if (client == null) throw new Exception(exchange.robot_name + ",该帐号没有登录!");
+ if (client.WeixinType != Chat.Framework.WXSdk.Implement.WeixinType.Grpc微信) throw new Exception("您当前登录的微信版本,暂不支持自动转账!");
+
+ var session = ApiClient.GetSession();
+ var robot = session.FindRobotInfo(exchange.robot_name, exchange.chattype);
+ if (robot == null) throw new Exception(exchange.robot_name + ",数据库丢失!");
+ var passInfo = session.FindWeixinpassword(robot.id);//微信自动转账
+
+ if (!string.IsNullOrWhiteSpace(exchange.groupid))
+ {
+ var user = client.GetContact(exchange.username);
+ if (user == null) throw new Exception("兑换用户数据异常");
+ if (!string.IsNullOrWhiteSpace(user.Ticket))//非好友
+ throw new Exception("该用户为非好友,请使用支付宝转账");
+ }
+
+ if (passInfo != null && !string.IsNullOrEmpty(passInfo.password))//是否设置了账号密码
+ {
+ var bank = passInfo.GetBank();
+ var pointConfig = ApiClient.GetPointManageConfig();
+ if (pointConfig == null)
+ throw new Exception("获取积分管理配置为*");
+ string result = client.SendPay(exchange.username, pointConfig.ExchangePacketTitle.Replace("[积分名称]", ApiClient.Setting.SystemConfig.PointName).Replace("[兑换金额]", exchange.point.ToString("0.00")), (int)((decimal)exchange.point * 100m), passInfo.password, 1, (PayType)Enum.ToObject(typeof(PayType), (int)pointConfig.Exchange_PayType), bank);
+ if (!string.IsNullOrEmpty(result)) throw new Exception(robot.name + (bank != null ? "银行" : "余额") + "转账:" + exchange.point.ToString("0.00") + "," + result);
+ exchange.state = ApplyType.已审核;
+ exchange.check_time = DateTime.Now;
+ exchange.remark = "手动审核【微信支付】";
+ is_auto_pay = true;
+ ChangeBtn(this.simpleButton1, "微信支付");
+ }
+ else
+ throw new Exception($@"{robot.nick}({robot.name}),尚未设置支付密码!
+请在机器人管理中,右击机器人设置密码!");
+ }
+ catch (Exception ex)
+ {
+ exchange.state = ApplyType.未审核;
+ //settingControl1.Bind(new exchange_list_temp());
+ this.settingControl1.Bind(exchange);
+ if (!this.IsDisposed) ShowError(ex);
+ ChangeBtn(this.simpleButton1, "微信支付");
+ }
+ }, tokenSource.Token);
+ }
+ catch (Exception)
+ { }
+ }
+ bool is_close = true;
+ private void ChangeBtn(SimpleButton btn, string text = "")
+ {
+ if (!this.IsDisposed)
+ this.UpdateUI(() =>
+ {
+ btn.Text = string.IsNullOrEmpty(text) ? "支付中.." : text;
+ btn.Enabled = string.IsNullOrEmpty(text) ? false : true;
+ is_close = btn.Enabled;
+ if (is_auto_pay) this.Close();
+ });
+ }
+
+ private async void simpleButton2_Click(object sender, EventArgs e)
+ {
+ ChangeBtn(this.simpleButton2);
+ try
+ {
+ await Task.Run(() =>
+ {
+ try
+ {
+ //if (exchange.chattype != Api.Framework.SDK.ChatType.微信)
+ // throw new Exception("暂时不支持自动转账!");
+ var client = ChatClient.WXClient.Values.ToList().FirstOrDefault(f => f.WeixinHao == exchange.robot_name);
+
+ //var pcclient = ChatClient.PCRobotPool.GetSession(exchange.robot_name);
+
+ if (client == null)
+ throw new Exception(exchange.robot_name + ",该账号没有登录!");
+
+ var session = ApiClient.GetSession();
+ var robot = session.FindRobotInfo(exchange.robot_name, exchange.chattype);
+ if (robot == null)
+ throw new Exception(exchange.robot_name + ",数据库丢失!");
+
+ if (client != null && !string.IsNullOrWhiteSpace(exchange.groupid))
+ {
+ var user = client.GetContact(exchange.username);
+ if (user == null) throw new Exception("兑换用户数据异常");
+ if (!string.IsNullOrWhiteSpace(user.Ticket) && user.Ticket != "-1" && user.Ticket != "0")//非好友
+ throw new Exception("该用户为非好友或已拉黑,请使用支付宝转账");
+ }
+
+ var pointConfig = ApiClient.GetPointManageConfig();
+ if (pointConfig == null)
+ throw new Exception("获取积分管理配置为空_");
+
+ if (string.IsNullOrWhiteSpace(pointConfig.ExchangeCommercialPayTip))
+ throw new Exception("商户付款通知提示语不能为空,请到积分兑换插件中设置");
+ else if (!pointConfig.ExchangeCommercialPayTip.Contains("[领取地址]"))
+ throw new Exception("商户付款通知提示语中不包含 [领取地址] 变量,请到积分兑换插件中设置");
+
+ EventClient.OnEvent(this, $"{robot.nick}【{robot.uin}】手动审核【商户付款】{exchange.username} begin:{DateTime.Now.ToString("u")}");
+
+ var ispaid = false;
+ object appinfo = null;
+
+ var ExchangePacketTitle = @"兑换成功:[兑换金额]";
+ if (!string.IsNullOrWhiteSpace(pointConfig.ExchangePacketTitle))
+ ExchangePacketTitle = pointConfig.ExchangePacketTitle;
+
+ string url = ApiClient.SendWechatPay(new { robot_nick = robot.nick, robot_name = robot.name, username = exchange.username, usernick = exchange.usernick }, ExchangePacketTitle.Replace("[积分名称]", ApiClient.Setting.SystemConfig.PointName).Replace("[兑换金额]", exchange.point.ToString()), exchange.point, out ispaid, out appinfo);
+ if (string.IsNullOrEmpty(url))
+ throw new Exception("服务器繁忙,请稍后重试");
+ if (ispaid)
+ {
+ var ExchangeCommercialEftTip = @"一一一一商 户 转 账 成 功一一一一
+[兑换金额]兑换成功
+已直接转入您的账户!";
+ if (!string.IsNullOrWhiteSpace(pointConfig.ExchangeCommercialEftTip))
+ ExchangeCommercialEftTip = pointConfig.ExchangeCommercialEftTip;
+
+ this.mess = ExchangeCommercialEftTip.Replace("[兑换金额]", exchange.point.ToString("0.00"));
+ }
+ else
+ {
+ this.pay_url = url;//ApiClient.ShortURL(url).Result;
+ bool isSendMiNi = false;
+
+ if (pointConfig.ExchangeCommercialPayTip_MiniApp == Api.Framework.Enums.SwitchType.开启)
+ {
+ var xml = Util.GetMiNiAppXml(appinfo, robot.type);
+ if (!string.IsNullOrWhiteSpace(xml))
+ {
+ this.mess = xml;
+ isSendMiNi = true;
+ }
+ }
+
+ try
+ {
+ EventClient.OnEvent(this, $@"{robot.type.ToString()}->{robot.nick}【{robot.uin}】手动审核【{robot.name} - {exchange.username}({exchange.usernick})】
+手动审核【商户付款】end:{DateTime.Now.ToString("u")}
+url:{url}
+pay_url:{pay_url}
+appinfo is null:{(appinfo == null)}
+appinfo = {(appinfo != null ? JsonConvert.SerializeObject(appinfo) : "NULL") }
+app开关:{(pointConfig.ExchangeCommercialPayTip_MiniApp == Api.Framework.Enums.SwitchType.开启)}
+是否小程序:{isSendMiNi.ToString()}
+回复长度:{(mess == null ? "0" : mess.Length + "")}");
+
+ }
+ catch (Exception)
+ { }
+
+ if (!isSendMiNi)
+ {
+ var ExchangeCommercialPayTip = @"一一一一等 待 领 取一一一一
+
+[领取地址]
+
+点击链接,领取红包到您钱包!";
+ if (!string.IsNullOrWhiteSpace(pointConfig.ExchangeCommercialPayTip))
+ ExchangeCommercialPayTip = pointConfig.ExchangeCommercialPayTip;
+
+ this.mess = ExchangeCommercialPayTip.Replace("[领取地址]", ApiClient.ShortURL(this.pay_url).Result).Replace("[兑换金额]", exchange.point.ToString("0.00"));
+ }
+ }
+
+ exchange.state = ApplyType.已审核;
+ exchange.check_time = DateTime.Now;
+ exchange.remark = $"手动审核【商户付款】 商户链接:{url}";
+ is_auto_pay = true;
+ EventClient.OnEvent(this, $"{robot.nick}【{robot.uin}】商户付款信息 = " + mess);
+ ChangeBtn(this.simpleButton2, "商户支付");
+ }
+ catch (Exception ex)
+ {
+ this.Invoke(new Action(delegate
+ {
+ ChangeBtn(this.simpleButton2, "商户支付");
+ exchange.state = ApplyType.未审核;
+ //settingControl1.Bind(new exchange_list_temp());
+ this.settingControl1.Bind(exchange);
+ if (!this.IsDisposed) ShowError(ex);
+ }));
+ }
+ }, tokenSource.Token);
+ }
+ catch (Exception)
+ { }
+ }
+
+ private void ExchangeStateForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (!is_close)
+ e.Cancel = true;
+ else
+ tokenSource.Cancel();
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/FLSystem/Forms/ExchangeStateForm.resx b/FLSystem/Forms/ExchangeStateForm.resx
new file mode 100644
index 0000000..440de48
--- /dev/null
+++ b/FLSystem/Forms/ExchangeStateForm.resx
@@ -0,0 +1,311 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACF0RVh0VGl0
+ bGUAQXBwbHk7T0s7Q2hlY2s7QmFycztSaWJib247ZGPIaAAACrBJREFUWEeVVwtQlccZXdu82jyaNmNr
+ 0zTpREBBBURRFEEMrysQlEReakAUH4ii4BtBERFRQOSN4AUFQZP4BARBAQmgiIkoaAQEL29RQUTBTpzM
+ nH7fwkVN03a6M2d2//2//c75zu7+XMT2ZEuxQ2kldh6yFqEZCrEnUyHCj80Wkd/aiKiTNiL6tI2IzbYV
+ 8Tm2IiHPTlAb8d8Qm6sQ+7OtRNQpSxFx3EKEfW0uQrNmieAMM7E9zVQEpJiILYnGYmPcdAqnti3ZQrQ/
+ PSw6nqaLzv4McW/giETXQCYhS9x/lsVhaoLfEH5LeI3w+i/Acwx+z3Ej2p9miranR0TrkwzR3JcuVI8P
+ ibu9aaLxkVKsj5tGIdQCDphT0CEpoKN/UESnFJHJr9XEkjQ0w9wg+rQiOD5/dkViwexrSYU2PydfsPk5
+ Id+6Oj7P+tK+ExYh2w+aTKbYNzieIIW09pGAx+nirlpAT6pYH2tEr6gFJH1GClNF25M0coKE9JMbBGrq
+ il8PyzR3is62bkgtmocLNzegtnMf6h/EoWvgqET9g3iai0Rh7TocPP8FIk+ZN+w4ZLKA1r5JkEKah8ib
+ HqWKOz0HxbqYIQH+CWaipS+ZRKSQiIMkQsnTsupNMdNHh39jUZlRMh817eHo6FeisTcStx4G4+bDbaju
+ 2oBrXetR8yAQtQ+2o6EnAq1PlLhOsYeLXbDrqGmVZ6DuWMrFjkg3GntSxJ3uZOEXM5UeqW2ON6G9SaQ9
+ SiIhB3iKyV/zT5phufdri0fFtzZB1ReLG/e3oqpjDa52MtZKfH+Pxz6o6lyNyvZVuNTmjYpWL1zt2ICG
+ RzEorNmAXVkzH/mET7KhnOyGFFHfnSR89xvSkNrGWGPR9DiWRMTxoyTfGD3NKuIbq5+uqoKpsm24REkv
+ txHaVxLRSlzpGOzVuNzuReQrUN66DN81e6JUtRjFTR74ocMflxuDEZo56/nKUP1hEXUPE8SaKD4q1Hyj
+ porG3igeStuX75g4dme6WfdV1TZcaV+DsuYlEuUtnkSwFBVtni+Bnlt5nmIIpc0eKFG5o+iuGxLzFVi8
+ Uwdnazxw6U4QApXGPc5rxk4gDrkdPpGTmFOIpbt0RcOjcB6yPW9sSTK6lHeN7VyJoqaFKLn7FS5Swosq
+ N3zX4k5Y9KJvdkdpixsRuxHxVyhWLcSpakd4hugiMNYPMRlRWBIyAQV1S3Dm6mr4RU+qJI53CHwwuWAh
+ vgocx5203mevwYKIrxW0134ouOOEQsKFRheJoiZXqsyVSOYTGWOBHDN4/gK9Tz5vDdcNU3CioBB1qm40
+ qJow13c0EgotUaZai91HrLAocJwHcb1F4IKFWBigzR0/vLkuxrDh/M1VyK93xNk6B+TVO+Bcw5ck5EsU
+ NM6j3hHnGxkkjvsm6hk03n/aDIv8FSj/vh5t95+ip68Hq3fb4vjl5cj50RknauyRV+2DVeH6jcT1HmHY
+ BVm9k6+WIijVjOwmu27aIvu2HXJuf47c2/bIrZtDoggNcyXONThQz6BnEhmSZQS3Lda4fL0J97qfoffJ
+ Y6zYaY3MUg/k3HLCsWprZP1ghXN1ixF40AxzvTTsiVN9K6SAN1w3jY2KO+NCgbNxvMYaJ2sVOHVrNk4T
+ sm/bEGxJiB0JIlF1jMHx5hQDeGy1xZUaFToePkP3414sC7LCgTwXnPnREUerLZF5zRIZVeZIv6JAfLYL
+ XDaM5Sv3NoG/sFLFW/O3aFcoi1wRd9EECd/NICHmJMQSx65ZwF85kcZWJEYhBTHOEHYcmYxFW+1QVdOM
+ ju4B9D79CcFJXtiutJS2Z1Vb4AjlOVQ5CwmllLd0JtJKFoC4+DDyNgwL+L3rFu3utDJHRBdNw/5iI8QU
+ T0fCxRlYsE0THgE2cNs+DhlXZ+F4rSVO1FohMnsanNfPQEV1A9ofDqCr558ovHwCHkG6yK9zk8RpV8xw
+ oMwEcSUzEFMynWCMQxVOWLhVp4c4/0jgcyBVvO2yWft5SrkdIi8YYt+FqRILgzTgt3cRvr/VjqNns+G8
+ aTwSimYg9rwxHHzHIa+sEq33+6WA1q4WOK6bgG+r3JFcYYbEUlPEl84gR40l+f4iI8ppBGWFPRb46zwn
+ zj8R+K+oFPCO80bt5wkXzRFeaIjI81MQljsV9ms/QeX1K7hH1d3t6MPpC8WYt04X9ms0cCz/LFSdfWh7
+ 0I/uvmfwC5+HyBP2SC7/7CViY3KTHCVXuaDI84YkzAKuVCxxfvCKgHnrxnbvO2eKiMLJiCgwJNtmQlnk
+ THZNRld3Bzp7nqGJCPPKqpD4Df1RautFK5HzwTtVpKSPz0SkV86hdWz1dERLYiNEFZGbVFAEkTOiCmbC
+ acNY3oJhAXwG3nZYPeZS6HETRJwzxN78SQgvmISkMkv6pM7D8hAzPOh9gDay+m7nE/yo6kELWd9MaOlq
+ w9y1mkgtdRokVRMPbSNXzcScL5IK233CFA6rtaqIc/gMsIDf2S7XiNmcMp0CDRGWb4A9BQZyUXKZFfad
+ ssOavTbo6++XVTNxc9dTuTW7lV4IUJqR5TOHSbli3sZI2s5wcjS8YDIVZUDuTsGWg8aw8RydRJyv3II3
+ Z7l8Yu8RpE/BU7H7rD7C8hgTpRsp5QqEHrVCYMJ8PO5/BhWRM67XV8LFXwOpFXNkpbJaJhzCXiqACwnL
+ nyhzRVDuxTv0YTLvY2fi5O8Acw9+CQl/+NxLsykwy0AKCD2rNySEFlMCZbktAtJMEZ7ujb6Bn2hLBrBq
+ jyWic+nmSIuZ8AXpHqo4LI8xcThP4NFJsPfWUhHXnwn8JRwhbJZrUj/4LSAXli4MnIA9eZMRkqOLXbm6
+ UkjoUII0ukLrE42QfDIAeeXpWBmhh/iSWZJskHAirR2sNoyLIBdDc/Vknr2U023bBJg6fuxNXGr7R4jZ
+ yzSoly7wiXzfZpnG1bWJRJ6jL0WE0OIXQvRw+NJc+EQb4IuNHyO+wEZWt5sImUyOmZhjh9bJtbn68E3S
+ BeW+Thwvquem8NQQ+bdY1OBh1DcfZWS/aswj/yO62EkCdmZPkL10ZEhQ+mUHnKxeRKd66iAJEe4aqpTB
+ seo1ITl68M/Uwxxvzd7xJiNNiYN/DwxWz816iYbIrfUSObXL+ZHPwjtG9h99OddH6/n6NB3sODMewWdI
+ RPb4QTESlJjxChGLHRJNCKY4Xsc5HNZoPTe0/dCVcr9PYKdHKJZK5/9NgHor3pti9zdHuxWaj73jtKUI
+ NYJJyKsgIklG7+n55dhV8dqwW6HVZ6j4cD7l5E8v/xwbkUN81kvk2VMLWP6yALWId7WNRk6xXvxptdNm
+ Law/pIMgShp0Zhx2nCYCAj8zkZx/aY5jnbeMgZXH6Btahh/w/2BcuSRnMBfzysYDnmCwEGpqEbwdfFdH
+ Gs35yNt68egWB19NLNkzBn5KbWw8rIPtp8ch6NQ4bEzXgV+qDjzpnYOvFqwXa7Qa2f99Na0dRXiXIG1n
+ qHl+IcBryAXeCi+eVovgw8Inlq/NX/Q/G/W5qfM/4i3cR9+wdP+0ng4wGJbuo+st3D+9Yer8SYLerFFz
+ KPavBK6af/txIcPkvyrgP4Hay0LYQnaEE48kcHUfDoHHfL34+86nnEUPE/9absb/09RC+KpyYraUBTER
+ g8c8x+84Rh3/P5oQ/wKtHXLtkLLsUQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACN0RVh0VGl0
+ bGUAQ2FuY2VsO1N0b3A7RXhpdDtCYXJzO1JpYmJvbjtMlpayAAALFUlEQVRYR5WXB1RVxxaGx/dSfEGM
+ xq50BUUEC1goAtJBwYZiiRpFDREJNkBApVgQE7FjJMYSg6KiXlBRNNJEqQIXROBSlM6lKqLI1bf+7DkX
+ iHkr67319lrfmrlzZvb/zz5zDgdWsz+Y2C0n9G+g8Wpqq0M4wYyiz3/jRYA/ex7gxyp2+rLnRIW/Nyv3
+ 9WLl271Ymc9WVuq9hUm2bWaSrZ40naJmXxD7d+vzbl6wD38DRY/AP4h/Ep8Qn/4HfIzDr/N5fd7XP2Pv
+ 6wvZ+zrOU/a+poDJasRMVp3Hijw9aApF1d4A9qGlnKj4K2SIokdYEM302jyleIdvcOku/0dlu/xyKgL8
+ PpTv9P0g8ffOlfh6P8732rwnYcN6A5r7GZ9PyI0I4vm94rKqXFa4cQNdoqgM3sk+NJcRZOIjKHp2/Kl4
+ +7bFJCip/DEEzbFX0CFOxdtnmaB5RBneFKbjdU4yGq9HomJvIJ5t2yxJc3dbTms/JwQjMm6gSi4uq3zC
+ 8r9zo2GKil1+7H2jpJtSoaUQdp3g7ja6xH97ek34EXTkpeJ9fRE6i9LQkX4Xr1Nv4uXdi3h55ze0J91A
+ e0oM3oqTIKvOR3t2IirC9kPs4Z55dsH8cZSLV0SoRteLbNb1PIvlrVtLPynK/Lez9w3FvVBw8U/SPT2s
+ JTu2t7beE6HrRR5eP75NYpFy4i6g7TZx6zzaYs+iVXQGrddPoyX6FFqunsTL+IvoLE6DNCYK+R7urTFL
+ lzhQTl4NuYnSNJa9ejV1KSQ+2+jePGWy2kL+UxBP3fCdjWSXf1d7ViLeZP8uF7opp/XmObTFnCVI9MYv
+ JPwzWq9FkPBPaL58As0Xj6Hpt8NoPB+G9oRotD2MQ66Hu+y688JeE53FqSxzxUqux1jRZk/WVZnHu0LZ
+ Rd+sGFfos625PfMBXlGCFi5C8FaABFu4YDQXpR1fOUnC4Wi+dBxNkUfQeOEQGs/9iMYzByD9OUSoSmtS
+ LDJcXVuOWVvrkoZwOx4vXcY1GROvWc26yrN5l5fnszyPjY+lsVFUxig08+RXaGe9cLFuwSjaLRcVdtwj
+ fBCNZ3+A9HQoGiL2ouHkbtQdDyJjx1AdeRrJLkvTSaMfwQ8m3zBjWS5LeCOUPnntmuUlwbvQnixCY+RR
+ YWEPNREHEOc8F78aTMX9rxej4exBNP1KolTqehKMd5mP0xP0IHKwRmXYDtSfCEbd0QDUHt6B2oO+aKFz
+ kvX9Rlyyc+A3vy/BN8xYuvMi3vAfn2evXy9puh0F6YXDkJKA9FyYQE34PojsbXDNaxfuxDzE1fUeuDXX
+ AXWnQlD30z7EzLHF5bXuiBOl4IqnL6JMjFAR4oXaMD9U/+CD6tBtqD7gjdrIU4h3ml9GWv2J3ioIu79q
+ a28n3uJJTs9S4n2ojwgRaPh5P+4sdILINwipWWUoe96IotJ6XHPzxE1He9ycY0fiG5GUVoyisnqUPG+C
+ iIyKrC1QFeqFqpAtqNq9CS8CNwq5UletwrGphk6k2fNUCAY+i7ObfejZzm2o3O2JmqOBqKUScuqIy8ZG
+ qK9qQEV1C9rau9D2+h1KyhsEE5fXeSDxcTGKyVhz+zs0v+pEq7QFZ3QnomqPJ14EfY/nAe6o8P8W5d6u
+ yN26ERemmxwnTQWCv2EFF33jbR0eSXZ6osTVCcXfzkflnk2oObQDNYd3InHVMjzasROd72Rk4B1aXpEQ
+ tcXlUqTnVKC4ohFNLzsF+JwkLx/EzXeUC+9wQ+nWVXi2xglFaxxR6LMBUdNn8sPIb0OvgS/ireyaJd7r
+ ULjSDoVf26JwhR1K3JxR7u+G2vA9uLdoAdICAwUBQYx2ytvGj+jslOGhnx9i7a3xItQHpZtWoNh1npDr
+ 6XIbwhbFW1xx2cCkhTQHEvwcCC4UblvYyCQey1HgYo2CpdZ4uowvILiZVQ4o93ND3GwbJPv6Qdr2BlIS
+ lLa97aW+uQOJPr6IsTRD2Xa+EQdBkOfh+fJdLCFebIlidxdcmmwoI82vCP5XVDDQL3ampaxw9TyInWfR
+ RAvk02S+qGCJlTwBJbptaYob33rgqUQKaQsZaHmLBqKOqG3qwK0NmxBjaggxzS9YaoX8JfIcPF+eszny
+ Fpqh4Js5uKA7nRsY9BcDN4zMmnOW2CNvAU1cYEaTzckMsYgMLbLALXNDXKfH7/eUIhSUSlHXTKICHYJ4
+ bdNbiIvrcdV1A64b6iOXC3IoV+4CU+TOm0mYIsvZGme19fkt6DXAz4DCJQOTx2lzrZBDE584mdBkDi2a
+ PxN3LY1xw+173E95hnzavVywA2/edqGDqGnsQHU3ec9qcW3tBsQYG1AuUzyZa4InjsbIdjQS8ibZmSFc
+ c2ImafaeAW7gX6f1ph29b2WObCdTZDvMQNYcQ2TPMaKFJG5qjDJJNcQl9YJYDYl3vOlCRlAA0gMDhH6V
+ tEOgsuE1aqukuKg/RVifNXsGMilfpt10ymmEWKPpCFXR/ok0//IUfL5XS9cpepoRMhwIm6nItJmGDLtp
+ yKKF8faWeHryBF51dFHp3wiCWcFBuGNjjjhrM8HIaxrjVeFz8o4ewc1ZJsL6TMqVYW2AdCt9pNlOx3nt
+ idg6TN2FNPl7gGvL34TEl2e09cvvG08RJqdb8nYKMqwMkLtsNuJIjJt429CArKBA3LWdhYKVjihY5Yg7
+ 1qbICNyFNw31yDt2FCJTI+QstUcarU+zmIy0WZOQRvnipk7AYSVt/q03lOBvwj7s3Dh9auXvgj1q49dF
+ 6kxGqvkkPDKbiMfmBF9MhriJ+w6WiJ01Ew/mWCFvmYNgNIMQL7PHPXsLRBsbIs6K7jsd5jRLfSHHI1M9
+ PJqphxQTPUSoa2PrYFV30uopfx/2i+ZkaoUq8BM54ISGbtYNPR2kGE9AqrEuUmlx6kxdPDKfjNzF9Diu
+ nIscZyukmZFJUy5AJqmfs5Ae1xWOyF1kTcKT8NBEvv6hkQ6SZ4xHlJYmQoeO4R8ef+6eR4SGHkuw4B+y
+ 8sO4ZrDSjHA1ndbYiVpImqotLE6ZoYOHhtQakjGj8ULSh0YTPoJf52N03VCb5vM12kiaPg6JBlq4Pk4D
+ YUNHty3oN8SUNPj3gHz3PMJVddj9GRMEKPhZ6Ld5iOrCcGVt2TXt0fh9iiYSp45FMpE4bRySiSQipbv9
+ k7ECiZypWkgg7k3SwGVNVYQN1pC5Kg5fSrkHELzSfX4YqEYNxfFR2uzuZE0WR1D03Ir+7l8pLzo8XOtl
+ pIYabuuo4f5kDTyYMgYP9DUFEnoZgwQymSBcI6h/T08DN8er4LyKCkK/Un21WmEo//7ir17+OdZHNEGd
+ hfZXpS7FkRFjWSwNxOqo85/cQI8JxXn9Bk/bP0gjN3yEOqLUlRE7Vgm3KPE9XTVCHQ8mUoWIePodP0EN
+ cXRNpDUKkaqjcHSwCoL6K4tt+w4wolx854I455qWEtunqEJdirAhY5iIBq5rjWIizVF8qMcEvx38WR3i
+ 0X+k+76BapWHBqsiYoQSflMZSSIjET16OKI1hiNSZQQuKI/EqeGjcHCgMvYoKle5KQzj/3sNJxQJoeyc
+ K+oj2BX14WyvgjL9pPhxkAaLVh/Grml0Q32KHhP8sPATyx+bYcu+GOLorTjyRKCisjhYUaUkpL8KQhRp
+ p/2USgIUlMRbvxgR7tJ30FyaO4Lgu+bffnwjQr7LKkNYD3sVlGiI4sBAdXZggBoL5XypSi3B2/5CiT42
+ wkvIK8ITDyH47kZ2w/v88eLvd37KueleYS72d/w/0WOEP6o8MS8pN8SFOLzPx/g1Pqdn/v8Ixv4AVZya
+ X9ttAMYAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAidEVYdFRpdGxlAEZpbmFuY2lhbDtEb2xsYXI7TW9u
+ ZXk7Qm9vazuCQ/4SAAAHWUlEQVRYR7WXe1RU1xXGbZM2adL4ioI8jC9MEQFRIySKPAZBEYFBXsobGQRE
+ YGAQkNcIAeOT1xgEykOrNZoYoyYxpigPETQKSq0g2CDGlXYtLUn/aFf759e9z8wlo94J7erKXeu39jln
+ Zs737XPP7HPvJACT+ErYtXxSQslybv7MwM9/AqS5xSW0xw1ol3HgD18gfkm8bOBXE/DKBLxqiDzXLwjJ
+ yNMG6OLBF8PV9mtjC51644uWIr5YT2bV2+OoOVa6GNoUqc1j6koJ6jMVLsgwIm2/c19cwRJf0mATsgbY
+ 2UuxhUsfR+Y4ovdeN/7+z3//T3z/j3+ZpG+4G2n7nB+TBq8aa8kaeCW2wAlBqXY4eq4Zt4Yf4tbQI9w2
+ xL5BioOj6Bt6KNp91L45oOeGEdz/6s4IvrpLUOSxO8PfIHXPWyz2GsG3+TkDPPhqTL4j1Pu8kPzuKgMr
+ UdziiiKm2ZhVgsImgqPUFqxEAdMo8Q7ePRqOpLJlLDaZeJEF5Qz8OirPEWev7MeZjt34uL0MJ/9Qggff
+ n8T9747j/tgxDI/9jjiKobEjBlqIZgz9rQn3njCNGHzyW6IBA0/qiToMPK7DpQEttulXYAph2kBErgM+
+ aNWivDkE5S3B2FUXgBvflqDnUeF/zzdSLBin/6+VkoGphEkDr23KtsfxLwpQ2qgkglBYuwHXHhWj62He
+ 84zKxGfbBnq/3Yfk8uUTGpgcrlmMI5/lQtsQgOL6QOTrfHH1YQE6Rnag40G2Po4Yx2y0GyE3xlx/VIat
+ +j0wjZA1wINTQjPt0Hheg8LDfoLcqrXofJCLy39W4xIhxWfbpskQdI9qkVi6lMWmE1wL5A0EZyxC/Zl0
+ 5B/yFWgq1qDtaw2+HN4uy0UidMd8wcXhVFwcMsBto37nSD627HJisdcJkwamBqXZQvdhMnJqvJFT7Y3M
+ Awq03lfjwr1kPYMpIp7tV6G42R2qcgdkVa8Q7Kx3RclRBT69m4jPB5OJpHFahzVUVZdMaGBaYOqbKGsK
+ Q1aFAppKL6TvcaMMtuP8XRXODxAUT9+OQ5zWDvEldkjZswTpB5cj7eAyMRZdZEsmPHHuT1uIBBHPEh/0
+ RiC2UBiYQYhyLGdgun/KQtp8SqhKliFjvztSy1fhM8rmzJ1YnPkjQbGo2Y2EHbF9/1LCCV/2l+DGqA4H
+ TgUjZe8SaHSu4rsfEx/1R6OxZz2OXFciOt+BxWYSsgZ48HW/JBv66/kjrtARW+ggUu1aQVkk0kRR+PB2
+ JBGFnFoysNdRkEzwYVPXGoSukTL0/6UOPaPv4dStCPy+NxS1Xd54/4oCTdcCEJVnz2JmBi15A+sTF9Dm
+ 8xfLFUsmNu+ww/GboTRZCE70hdNShmPfKSUS31uMxN1E+WJE5i/EhlRrbMyah7KTnjh2IxgNV31xqFOB
+ 9w009vgjIlcYMCf4uJc1MGNdwjzk1awT4jEFDtiUbYeWa4GoveKF+qs+NJEfTvemYBstdXyprSBWuxDR
+ WhuE5c6FV8JMZNY5QtfpSShwqMNT0HDVT8xFGrIG+HxmAzN94ucip9IHfCjxPRMGegINmXiJrOopu0/6
+ MpBZ44LQ3NkIYXKsCSsE77CC33ZL6EhUoqbDA/VdvgjLWsRiswiTBszWxM5BdoWPEI8hwjWL0NQTIIQ5
+ E87MNXo60nVOuDCgxunraXTaeQjhjUy2JYKyrKFr90ANIWKbOw5fWYsQtTBgQcga4EFzRdQcZB3wQvRO
+ B0QR7Lqp2/+HjGjC+NJF8N5qhvRaexxq88VHvSqE5b2BIA2JE2kVb6Gq3R3VJCzF2k5vbMywZTFLg5a8
+ AY/I2VDvVYgdG5WnN9DQvYGy0YtzVtqWNSJbz/gZcAmfCpfQKQjMsoSS2LRzHo50xujF29zG0XV4QZn2
+ JotZES+xppyBWe6bran4eCBSGLBHaKYtGfBDNWdC8HKeuBmDg6eDkE6ZBmksSNgCW3c7oKjJC+f61ThM
+ 97uSRCWq2lbTPlCAixxp/KgBi9XhVti22038ZSIJYYB2MGfBWQloNU70RlLJTYMy0wKBxIVBNdUKFe2V
+ Nai4vFqIVhpRRSsXQEWONKwJkwYsXcMssa3MVRhg2EA9GTDORpqchdq/LkIHIfVNUX3ZHf7JNiw2m5A1
+ wINWK0MskFy6EhE5iwUh6t+IJeVJhLBhQjnByks/RGMOXnKl37nBL2nBhAYs3w6ehaSSd0jcHpuJYNq5
+ koFnxSQqSECMG8REn+C26LdyfzW4ypIGG+CXFNlbYLYi0HxsUxbVgJ1OwkSI2hZ1XetFBkyVENdHfZtF
+ 9VS0UiQxqS36bKJ1FfKPrYBP3PzvSMNkIeLTcLKt67Q45wDzMWelOVwIZ6UZLZ0NNtDy+W21ITgSiTZY
+ T5GzegrVfPiqFgjWCaifsABr4+eNOftabCEN6an4KQN8sQmuhvzczvWad+sbJpgzAXOfgX/DFZDFOXvZ
+ NyM2wB/wwyl/ifeE9IL6/8JzMTw3a7DWcwakiz/8KRm/AEz6D1HqNoxHF4jMAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAYdEVYdFRpdGxlAFNhbGU7RG9sbGFyO01vbmV5O/mn
+ uEUAAAfYSURBVFhHxZZ5UFTXEocvGhGRRUVerICACIGIiMCwg8wMzAwawYABFBRZRraHoKMsakSQTRxE
+ QVSCijFkEFwCTxNXXKJPUeN7Rq0k6rMqLonGBdS8ULFIWZ3uw9yZQdBo/CNd9avb98yd/vr06XPu5QDg
+ b9Wbmt5zGqAjfoxZf3DSmxgFH4gahNJHDX5ONPYWik/mxQn4pW7l/FH8lfc1StH69BsaBR3klbA+zjd5
+ 0z4cB5Jv8mbwTqoDr4SNIJi1dv+EiBUJ+JwBihLtNwlmFDS15sKfCo2CEFzfO6m2ODz/AKSs/wbymn6E
+ vO23IO+zG5BZdxnmVp6CWSWHQZKxDZzClpfh84YoqkafJJjRzPoD6gqtFzx25UlY0vwTpNffhJjq6xBa
+ /h3Ilp8FUU4b+KY2gntsFQgztoM4/RNwkGWX4/+GolgSr50AGg8f7J24sSRGDZfX/QChq64y+Ptll9Vw
+ FbjOWK0aLYh0c4ssbRKlfwqCmavBxi8lGf9Py0FxXj0BNILTGvaFKxG+sgc+peQCSJaexJlXg21AohM+
+ bzrKKcTLJbwYAuSbwMY/o43GUFSFV0sAjYcbeCdsKCX44hfAJ684D7KCM+CDFfCIXtVg6R41oXh5yaWw
+ BQ0wY1kLWAdkEm0kinaNXqsy6+UJoGnhiT1wfuYyhIkWHYbAhQdBurwdJhecheDFx0Ga/28IXnocgjIb
+ wSWiGNo2FUFFjQqkmSoY7ZNGtFEo2p56u0rTXpwAGg8f4pVQU6YLly47Dd4pzZCiPAyq/Reh8cAliCva
+ DyHZeyGt5jwE5R0BcfYhiCw6CqlrTkC1sgoSFZVg4ZFENAsUnRF6Tfnx/SeARnBaJ0Ov+HUrqdv5socp
+ r4Bv2i4o2HIKOjs74M69Trh7/xE8/e0pfPtDB+w5cxvEOYdAtHAfBCr2wqTMFhDPa4JPy3LByT+eaFYo
+ akS9hiWxfRNAIzitkZHnnHXlujMnOHW719ztcPPOfbh26yFIFf8C2cIW6HzcBc+ePYNFdedBuIjgXyC8
+ Ffzn7QbfFBWEJSuhfIEcTAwN7DH2EOLUK6ZrE1CfbjzcxDNuTcWLut0nbQf88uQJ7Dt9HeGtcO7KQ2g7
+ fxN+vPcErtx6pJ55D9w/Ywd4JdbDuLAimBsVfbsyLawG4w/dsiCcq8sM1SaAxg4Y1DCP2ZWr+4NPVXe7
+ EBvvfzfuw/2O/8O5qw/g2MWfISCrFRoOfo/xAOTKY1q4/BNwn70RrP0zwczav3CzYvoNRbiPG3LeWp8q
+ 0yTADhjUCMGsijW6cDF2tndys2arhWC3Uw+saWyH33/vhq+vPWQNJ8KyK2rbQdmM2zFnD4N7q+Fjg3LB
+ 1EZCJbYtiBUlVyXL9qI/pFou1iRAcDP32FVVz888aPFXsGHn19DR0cG2mm/6Llb29su32Zpfvf2YwfuU
+ HeGCWQgPzgUTa8k2jD8WZUKqkouvZYS4+KA/kE/AVBDTG8433OSi/0CF6jQ8wTWfU3KINdy5Kw/Ymp/B
+ JMhmlhxh3e6foVN2gotzwNhaqML4DsRA0c4avOxDz5yiKI9G9A35BMzxddsD39T3hItecRS6urpgx5Hv
+ 4Cyu+dELd0AQtxm27vkvS0CuPN57zQmOZTceHdiUHzqOCO+g+DfhABdrM4vymZ5PnSyHWdI9ihvhPqOs
+ NnLF4T4Nx8qOa75l7yXo7u6GWz8/BtfYDTB1gQp+evAr/NLVDX7qmdOaC3DN7bDsplZimqGgcJozJUDH
+ r97a+Elc5WyqPGdS8MHEr1JE9vStQI3P3tVWLtML6qfkfamF43E7SbFPvdUewPc3H7EZ80bw+TUnNXDW
+ cGzNRU0YbxzKuuRDV5ZAaaQbgytjPfGWM5wvc1QqZA716BvRAB25xijb8WGLt8kWtTA4dbw0/xR8vP86
+ HL14l51wyWtPgerIdajd8y1EFRzA0j8HtxLtwDjjUSNQ5mXRgk7JeAtKZoAy1osrjxagyxnIA8b+M1vm
+ cAz94TTAH73UpfaOIYqG4KwmBg/+6AQE5bYh/CDu/55uD8Bu1y07v9VMrIQ78f/OKILTgTasONrzbIrY
+ MQZ9fYKXRrqiyxnM8bVJz5bYn0DfjAbI+CSGoRztRGnbhWnb8BzAFwvBaavNR3iWttsZXNNwwl34vwko
+ Cshet6ihSz5wrc2eOqEafSOCF4e7oMsZJfnZFM0T2raizyrAG58EDTrZ+CU2ByR9rD7be2bO4Fh2/oRj
+ ZR8duBufn4jSwLFF8MLpxwe+G10Y4foN+v+gcbXM54lsD8Z5Wi5Fnz7Tehk9QEGojM6W7jE7feLWaeGa
+ sm9gcGMr4ef4HNVV86FBcHUCFGtUYcTEO0HvjRKhT29BY88xwyW5Uvt75kb6dnhP/ac15/BiuvBJ0Ixc
+ 3nYO3+0RXaED58se2IK/07mugZuMCWNwnSSMU4V2pfMlDvTs+Cg3i4W5Uru7wY5mEXg/VP2M1saFFnBx
+ RV+SyydBwV1HOkxpmTitUBdO6+eOMlc/pzcj5zOunwQGmg4Z9E5WsN0Xy953hEyRbbvvmOFSHKddxy+V
+ 1hxClnL2klzOVqSg215JDB8r2TnSaSauuYi6vc/MeekmoAbwMaxRb6PYB4nO7y81PglqTFsUfe3Sle7Z
+ t50u7K/oVYySYB+nKDo16Ur3bwwnvY5RIryY9Rfw9QTcHxcOclAl7kcyAAAAAElFTkSuQmCC
+
+
+
+ 51
+
+
\ No newline at end of file
diff --git a/FLSystem/Forms/GroupForm.Designer.cs b/FLSystem/Forms/GroupForm.Designer.cs
new file mode 100644
index 0000000..456fe48
--- /dev/null
+++ b/FLSystem/Forms/GroupForm.Designer.cs
@@ -0,0 +1,215 @@
+namespace FLSystem.Forms
+{
+ partial class GroupForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GroupForm));
+ this.gridControl1 = new DevExpress.XtraGrid.GridControl();
+ this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
+ this.gridColumn1 = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.gridColumn6 = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.groupControl1 = new DevExpress.XtraEditors.GroupControl();
+ this.hyperlinkLabelControl1 = new DevExpress.XtraEditors.HyperlinkLabelControl();
+ this.labelControl1 = new DevExpress.XtraEditors.LabelControl();
+ this.simpleButton1 = new DevExpress.XtraEditors.SimpleButton();
+ this.comboBoxEdit3 = new DevExpress.XtraEditors.ComboBoxEdit();
+ this.textEdit1 = new DevExpress.XtraEditors.TextEdit();
+ this.label7 = new System.Windows.Forms.Label();
+ ((System.ComponentModel.ISupportInitialize)(this.gridControl1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).BeginInit();
+ this.groupControl1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit3.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.textEdit1.Properties)).BeginInit();
+ this.SuspendLayout();
+ //
+ // gridControl1
+ //
+ this.gridControl1.Location = new System.Drawing.Point(0, 94);
+ this.gridControl1.MainView = this.gridView1;
+ this.gridControl1.Name = "gridControl1";
+ this.gridControl1.Size = new System.Drawing.Size(616, 340);
+ this.gridControl1.TabIndex = 6;
+ this.gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+ this.gridView1});
+ //
+ // gridView1
+ //
+ this.gridView1.Appearance.HeaderPanel.Options.UseTextOptions = true;
+ this.gridView1.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
+ this.gridView1.Appearance.Row.Options.UseTextOptions = true;
+ this.gridView1.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
+ this.gridView1.Appearance.SelectedRow.Options.UseTextOptions = true;
+ this.gridView1.Appearance.SelectedRow.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
+ this.gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+ this.gridColumn1,
+ this.gridColumn6});
+ this.gridView1.GridControl = this.gridControl1;
+ this.gridView1.IndicatorWidth = 50;
+ this.gridView1.Name = "gridView1";
+ this.gridView1.OptionsBehavior.ReadOnly = true;
+ this.gridView1.OptionsView.ColumnAutoWidth = false;
+ this.gridView1.OptionsView.ShowGroupPanel = false;
+ this.gridView1.RowClick += new DevExpress.XtraGrid.Views.Grid.RowClickEventHandler(this.gridView1_RowClick);
+ this.gridView1.Click += new System.EventHandler(this.gridView1_DoubleClick);
+ this.gridView1.DoubleClick += new System.EventHandler(this.gridView1_DoubleClick);
+ //
+ // gridColumn1
+ //
+ this.gridColumn1.Caption = "群号";
+ this.gridColumn1.FieldName = "groupid";
+ this.gridColumn1.Name = "gridColumn1";
+ this.gridColumn1.OptionsColumn.AllowEdit = false;
+ this.gridColumn1.OptionsColumn.AllowFocus = false;
+ this.gridColumn1.Visible = true;
+ this.gridColumn1.VisibleIndex = 0;
+ this.gridColumn1.Width = 281;
+ //
+ // gridColumn6
+ //
+ this.gridColumn6.Caption = "群名";
+ this.gridColumn6.FieldName = "groupname";
+ this.gridColumn6.Name = "gridColumn6";
+ this.gridColumn6.OptionsColumn.AllowEdit = false;
+ this.gridColumn6.OptionsColumn.AllowFocus = false;
+ this.gridColumn6.Visible = true;
+ this.gridColumn6.VisibleIndex = 1;
+ this.gridColumn6.Width = 283;
+ //
+ // groupControl1
+ //
+ this.groupControl1.Controls.Add(this.label7);
+ this.groupControl1.Controls.Add(this.hyperlinkLabelControl1);
+ this.groupControl1.Controls.Add(this.labelControl1);
+ this.groupControl1.Controls.Add(this.simpleButton1);
+ this.groupControl1.Controls.Add(this.comboBoxEdit3);
+ this.groupControl1.Controls.Add(this.textEdit1);
+ this.groupControl1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.groupControl1.Location = new System.Drawing.Point(0, 0);
+ this.groupControl1.Name = "groupControl1";
+ this.groupControl1.Size = new System.Drawing.Size(617, 88);
+ this.groupControl1.TabIndex = 8;
+ this.groupControl1.Text = "搜索条件";
+ //
+ // hyperlinkLabelControl1
+ //
+ this.hyperlinkLabelControl1.Location = new System.Drawing.Point(388, 38);
+ this.hyperlinkLabelControl1.Name = "hyperlinkLabelControl1";
+ this.hyperlinkLabelControl1.Size = new System.Drawing.Size(60, 14);
+ this.hyperlinkLabelControl1.TabIndex = 16;
+ this.hyperlinkLabelControl1.Text = "刷新通讯录";
+ this.hyperlinkLabelControl1.Click += new System.EventHandler(this.hyperlinkLabelControl1_Click);
+ //
+ // labelControl1
+ //
+ this.labelControl1.Location = new System.Drawing.Point(62, 38);
+ this.labelControl1.Name = "labelControl1";
+ this.labelControl1.Size = new System.Drawing.Size(36, 14);
+ this.labelControl1.TabIndex = 15;
+ this.labelControl1.Text = "内容:";
+ //
+ // simpleButton1
+ //
+ this.simpleButton1.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("simpleButton1.ImageOptions.Image")));
+ this.simpleButton1.Location = new System.Drawing.Point(474, 32);
+ this.simpleButton1.Name = "simpleButton1";
+ this.simpleButton1.Size = new System.Drawing.Size(79, 27);
+ this.simpleButton1.TabIndex = 14;
+ this.simpleButton1.Text = "搜索";
+ this.simpleButton1.Click += new System.EventHandler(this.simpleButton1_Click);
+ //
+ // comboBoxEdit3
+ //
+ this.comboBoxEdit3.EditValue = "全部平台";
+ this.comboBoxEdit3.Location = new System.Drawing.Point(272, 35);
+ this.comboBoxEdit3.Name = "comboBoxEdit3";
+ this.comboBoxEdit3.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+ new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+ this.comboBoxEdit3.Properties.Items.AddRange(new object[] {
+ "全部平台"});
+ this.comboBoxEdit3.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
+ this.comboBoxEdit3.Size = new System.Drawing.Size(100, 20);
+ this.comboBoxEdit3.TabIndex = 11;
+ this.comboBoxEdit3.SelectedIndexChanged += new System.EventHandler(this.comboBoxEdit3_SelectedIndexChanged);
+ //
+ // textEdit1
+ //
+ this.textEdit1.Location = new System.Drawing.Point(101, 35);
+ this.textEdit1.Name = "textEdit1";
+ this.textEdit1.Size = new System.Drawing.Size(165, 20);
+ this.textEdit1.TabIndex = 10;
+ //
+ // label7
+ //
+ this.label7.AutoSize = true;
+ this.label7.ForeColor = System.Drawing.Color.Blue;
+ this.label7.Location = new System.Drawing.Point(87, 65);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(371, 14);
+ this.label7.TabIndex = 24;
+ this.label7.Text = "注:列表中没有您要设置的群时,请给群发条信息,即可获取该群信息";
+ //
+ // GroupForm
+ //
+ this.AcceptButton = this.simpleButton1;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(617, 436);
+ this.Controls.Add(this.groupControl1);
+ this.Controls.Add(this.gridControl1);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "GroupForm";
+ this.Text = "选择群";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.GroupForm_FormClosing);
+ this.Load += new System.EventHandler(this.GroupForm_Load);
+ ((System.ComponentModel.ISupportInitialize)(this.gridControl1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).EndInit();
+ this.groupControl1.ResumeLayout(false);
+ this.groupControl1.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit3.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.textEdit1.Properties)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ private DevExpress.XtraGrid.GridControl gridControl1;
+ private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
+ private DevExpress.XtraGrid.Columns.GridColumn gridColumn1;
+ private DevExpress.XtraGrid.Columns.GridColumn gridColumn6;
+ private DevExpress.XtraEditors.GroupControl groupControl1;
+ private DevExpress.XtraEditors.LabelControl labelControl1;
+ private DevExpress.XtraEditors.SimpleButton simpleButton1;
+ private DevExpress.XtraEditors.ComboBoxEdit comboBoxEdit3;
+ private DevExpress.XtraEditors.TextEdit textEdit1;
+ private DevExpress.XtraEditors.HyperlinkLabelControl hyperlinkLabelControl1;
+ private System.Windows.Forms.Label label7;
+ }
+}
\ No newline at end of file
diff --git a/FLSystem/Forms/GroupForm.cs b/FLSystem/Forms/GroupForm.cs
new file mode 100644
index 0000000..1393727
--- /dev/null
+++ b/FLSystem/Forms/GroupForm.cs
@@ -0,0 +1,238 @@
+using Api.Framework.Model;
+using Chat.Framework.WXSdk;
+using Chat.Framework.WXSdk.Implement;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using UI.Framework.Forms;
+
+namespace FLSystem.Forms
+{
+ public partial class GroupForm : BaseForm
+ {
+ public class Groups
+ {
+ //public WXClientImpl_IPAD Client { get; private set; }
+ //public Friend Friend { get; private set; }
+
+ //public Groups(WXClientImpl_IPAD Client, Friend Friend)
+ //{
+ // this.Client = Client;
+ // this.Friend = Friend;
+ //}
+
+ public WeixinBase Client { get; private set; }
+ public Friend Friend { get; private set; }
+
+ public Groups(WeixinBase Client, Friend Friend)
+ {
+ this.Client = Client;
+ this.Friend = Friend;
+ }
+ public string groupid { get; set; }
+ public string groupname { get; set; }
+ }
+
+ public GroupForm()
+ {
+ InitializeComponent();
+
+ #region 增加所有的机器人账号
+ this.comboBoxEdit3.Properties.Items.Clear();
+ var weixinBases = Chat.Framework.ChatClient.WXClient.Values.ToList();
+ var objList = new List