Socket
Socket
Sign inDemoInstall

express-cassandra

Package Overview
Dependencies
109
Maintainers
1
Versions
97
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.6.0 to 2.7.0

.nyc_output/16fd7df3c1b3517965d2dd86be534d07.json

16

CHANGELOG.md

@@ -9,2 +9,15 @@ # Changelog

## [2.7.0] - 2021-12-20
### Added
- Support confirmation for cassandra 4.x
- Support for ES6 based model definition
- Node 14 now officially supported
### Changed
- Removed support for Node version 6
### Security
- Upgraded package dependencies to resolve vulnerability in dependent packages
## [2.6.0] - 2021-04-16

@@ -549,3 +562,4 @@

[Unreleased]: https://github.com/masumsoft/express-cassandra/compare/v2.6.0...master
[Unreleased]: https://github.com/masumsoft/express-cassandra/compare/v2.7.0...master
[2.7.0]: https://github.com/masumsoft/express-cassandra/compare/v2.6.0...v2.7.0
[2.6.0]: https://github.com/masumsoft/express-cassandra/compare/v2.5.0...v2.6.0

@@ -552,0 +566,0 @@ [2.5.0]: https://github.com/masumsoft/express-cassandra/compare/v2.4.0...v2.5.0

2

docs/advanced.md

@@ -27,3 +27,3 @@ # Advanced Datatypes and Operations

module.exports = {
export default {

@@ -30,0 +30,0 @@ "fields": {

@@ -66,3 +66,3 @@ # Datatypes and Utility Functions

```js
module.exports = {
export default {
"fields": {

@@ -69,0 +69,0 @@ "user_id": "bigint",

@@ -16,3 +16,3 @@ # Elassandra Support (elassandra 5.5.x)

class: 'NetworkTopologyStrategy',
DC1: 1
datacenter1: 1
},

@@ -25,3 +25,3 @@ migration: 'alter',

Elassandra does not work with the `SimpleStrategy` replication class. You can still have a single Elassandra node. The `DC1` parameter is the **case sensitive** name of the _Data Center_ as defined in your `elassandra/conf/cassandra-rackdc.properties` file. You may also have to edit your `elassandra/conf/cassandra-topology.properties` file to match the rack data center declarations. If you did not edit those files, the default is `DC1`. These parameters are used with the [CREATE KEYSPACE](https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlCreateKeyspace.html) CQL command.
Elassandra does not work with the `SimpleStrategy` replication class. You can still have a single Elassandra node. The `datacenter1` parameter is the **case sensitive** name of the _Data Center_ as defined in your `elassandra/conf/cassandra-rackdc.properties` file. You may also have to edit your `elassandra/conf/cassandra-topology.properties` file to match the rack data center declarations. If you did not edit those files, the default is `datacenter1`. These parameters are used with the [CREATE KEYSPACE](https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlCreateKeyspace.html) CQL command.

@@ -44,3 +44,3 @@ Note that you can optionally provide connection options for elasticsearch in the `clientOptions` like the following. If omitted, then the cassandra `contactPoints` are used as default host addresses with `sniffOnStart: true` as default configuration for the elasticsearch client.

class: 'NetworkTopologyStrategy',
DC1: 1
datacenter1: 1
},

@@ -61,3 +61,3 @@ migration: 'alter',

// User model
module.exports = {
export default {
fields: {

@@ -79,3 +79,3 @@ id: 'varchar',

// User model
module.exports = {
export default {
fields: {

@@ -82,0 +82,0 @@ id: 'varchar',

@@ -112,3 +112,3 @@ # Querying Data

module.exports = {
export default {
fields: {

@@ -115,0 +115,0 @@ //fields are not shown for clarity

@@ -15,3 +15,3 @@ # Overview

* supports the latest cassandra 3.x releases
* supports the latest cassandra 4.x and older stable 3.x releases
* support for elassandra index management and search queries

@@ -18,0 +18,0 @@ * support for janusgraph graph management and tinkerpop3 gremlin queries

@@ -19,2 +19,2 @@ # Installation

Please note that if you use the legacy cassandra 2.x compliant version then please use the corresponding README.md file for that version. The following documentation is for version 3.x and datastax enterprise 5.x only. The materialized view support and several other part of the documentation is strictly applicable for cassandra 3.x / dse 5.x and will not work in earlier versions of cassandra.
Please note that if you use the legacy cassandra 2.x compliant version then please use the corresponding README.md file for that version. The following documentation is for version 4.x/3.x and datastax enterprise 6.x/5.x only. The materialized view support and several other part of the documentation is strictly applicable for cassandra 4.x/3.x or dse 6.x/5.x and will not work in earlier versions of cassandra.

@@ -65,3 +65,3 @@ # JanusGraph Support (janusgraph 0.2.x)

// User model
module.exports = {
export default {
fields: {

@@ -68,0 +68,0 @@ id: 'int',

@@ -148,3 +148,3 @@ # Data Management

```js
module.exports = {
export default {
fields: {

@@ -151,0 +151,0 @@ ...

@@ -77,6 +77,3 @@ # Notes

clientOptions: {
contactPoints: ['127.0.0.1'],
localDataCenter: 'dc1',
keyspace: 'mykeyspace',
queryOptions: {consistency: models.consistencies.one},
// omitted other options for clarity
graphOptions: { name: 'demo' }

@@ -83,0 +80,0 @@ },

@@ -5,3 +5,3 @@ # Schema Reference

module.exports = {
export default {
fields: {

@@ -100,3 +100,3 @@ id: {

- `materialized_views` provides you the ability to define cassandra 3.x materialized views for your model table. You may want to read more about it on the [materialized view documentation](http://docs.datastax.com/en/cql/3.3/cql/cql_using/useCreateMV.html). This is generally suited for querying high cardinality fields. If you need to use select * for the materialized view, you can also use `select: ['*']`. You can also define filters for the data that should be inserted into the materialized view. Only the rows that passes the filter criteria will be available in the materialized view. Note that filters are supported in cassandra 3.10+ only.
- `materialized_views` provides you the ability to define cassandra materialized views for your model table. You may want to read more about it on the [materialized view documentation](http://docs.datastax.com/en/cql/3.3/cql/cql_using/useCreateMV.html). This is generally suited for querying high cardinality fields. If you need to use select * for the materialized view, you can also use `select: ['*']`. You can also define filters for the data that should be inserted into the materialized view. Only the rows that passes the filter criteria will be available in the materialized view. Note that filters are supported in cassandra 3.10+ only.

@@ -103,0 +103,0 @@ - `indexes` are the index of your table. It's always an array of field names. You can read more on the [index documentation](http://docs.datastax.com/en/cql/3.3/cql/cql_using/usePrimaryIndex.html). This is generally suited for querying low cardinality fields, but not as low as boolean fields or fields with very limited number of variants. Very low cardinality fields are not a good separator of large datasets and hence not worthwhile to index.

@@ -9,3 +9,3 @@ # Usage Tutorial

module.exports = {
export default {
fields:{

@@ -35,6 +35,7 @@ name : "text",

contactPoints: ['127.0.0.1'],
localDataCenter: 'dc1',
localDataCenter: 'datacenter1',
protocolOptions: { port: 9042 },
keyspace: 'mykeyspace',
queryOptions: {consistency: models.consistencies.one}
queryOptions: {consistency: models.consistencies.one},
socketOptions: { readTimeout: 60000 },
},

@@ -69,6 +70,7 @@ ormOptions: {

contactPoints: ['127.0.0.1'],
localDataCenter: 'dc1',
localDataCenter: 'datacenter1',
protocolOptions: { port: 9042 },
keyspace: 'mykeyspace',
queryOptions: {consistency: ExpressCassandra.consistencies.one}
queryOptions: {consistency: ExpressCassandra.consistencies.one},
socketOptions: { readTimeout: 60000 },
},

@@ -187,6 +189,7 @@ ormOptions: {

contactPoints: ['127.0.0.1'],
localDataCenter: 'dc1',
localDataCenter: 'datacenter1',
protocolOptions: { port: 9042 },
keyspace: 'mykeyspace',
queryOptions: {consistency: models.consistencies.one},
socketOptions: { readTimeout: 60000 },
authProvider: new models.driver.auth.PlainTextAuthProvider('my_user', 'my_password')

@@ -193,0 +196,0 @@ }

@@ -7,3 +7,3 @@ # Validators

module.exports = {
export default {
//... other properties hidden for clarity

@@ -23,3 +23,3 @@ age: {

module.exports = {
export default {
//... other properties hidden for clarity

@@ -41,3 +41,3 @@ age: {

module.exports = {
export default {
//... other properties hidden for clarity

@@ -62,3 +62,3 @@ age: {

module.exports = {
export default {
//... other properties hidden for clarity

@@ -81,3 +81,3 @@ email: {

module.exports = {
export default {
//... other properties hidden for clarity

@@ -98,3 +98,3 @@ email: {

```
module.exports = {
export default {
//... other properties hidden for clarity

@@ -101,0 +101,0 @@ age: {

@@ -7,3 +7,3 @@ # Virtual fields

module.exports = {
export default {
"fields": {

@@ -10,0 +10,0 @@ "id" : { "type": "uuid", "default": {"$db_function": "uuid()"} },

@@ -56,3 +56,4 @@ 'use strict';

// eslint-disable-next-line import/no-dynamic-require
var modelSchema = require(fileLocation);
var defaultModelSchema = require(fileLocation);
var modelSchema = defaultModelSchema.default ? defaultModelSchema.default : defaultModelSchema;
CassandraClient.modelInstance[modelName] = CassandraClient.orm.addModel(modelName.toLowerCase(), modelSchema);

@@ -371,2 +372,2 @@ CassandraClient.modelInstance[modelName].syncDB(callback);

module.exports = CassandraClient;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzQ2Fzc2FuZHJhLmpzIl0sIm5hbWVzIjpbInNlbXZlciIsInJlcXVpcmUiLCJzYXRpc2ZpZXMiLCJwcm9jZXNzIiwidmVyc2lvbiIsIlByb21pc2UiLCJfIiwicGF0aCIsImRzZURyaXZlciIsImUiLCJjcWwiLCJwcm9taXNpZnlBbGwiLCJPUk0iLCJyZWFkZGlycEFzeW5jIiwicHJvbWlzaWZ5IiwiZGVidWciLCJleHBvcnRlciIsImltcG9ydGVyIiwiQ2Fzc2FuZHJhQ2xpZW50IiwiZiIsIm9wdGlvbnMiLCJtb2RlbEluc3RhbmNlIiwib3JtIiwiY2xpZW50T3B0aW9ucyIsIm9ybU9wdGlvbnMiLCJjcmVhdGVDbGllbnQiLCJzZXREaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJzeW5jTW9kZWxGaWxlVG9EQiIsImZpbGUiLCJjYWxsYmFjayIsIm5hbWUiLCJpbmNsdWRlcyIsIm1vZGVsTmFtZSIsIl90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lIiwiZmlsZUxvY2F0aW9uIiwiam9pbiIsIm1vZGVsU2NoZW1hIiwiYWRkTW9kZWwiLCJ0b0xvd2VyQ2FzZSIsInN5bmNEQiIsImJpbmQiLCJjYiIsImluaXRBc3luYyIsInRoZW4iLCJyb290IiwiZmlsZUZpbHRlciIsImZpbGVMaXN0Iiwic3luY01vZGVsVGFza3MiLCJzeW5jTW9kZWxGaWxlVG9EQkFzeW5jIiwiZmlsZXMiLCJmb3JFYWNoIiwicHVzaCIsImFsbCIsImNhdGNoIiwiZXJyIiwiaXNBcnJheSIsImxlbmd0aCIsImJpbmRBc3luYyIsInByb3RvdHlwZSIsImluaXQiLCJnZXRUYWJsZUxpc3QiLCJzeXN0ZW1DbGllbnQiLCJnZXRfc3lzdGVtX2NsaWVudCIsImtleXNwYWNlIiwiZ2V0X2tleXNwYWNlX25hbWUiLCJ0YWJsZXMiLCJjb25uZWN0Iiwic3lzdGVtUXVlcnkiLCJleGVjdXRlIiwicmVzdWx0IiwiaSIsInJvd3MiLCJ0YWJsZV9uYW1lIiwic2h1dGRvd24iLCJnZXRUYWJsZUxpc3RBc3luYyIsImV4cG9ydCIsImZpeHR1cmVEaXJlY3RvcnkiLCJlYWNoIiwidGFibGUiLCJwcm9jZXNzVGFibGVFeHBvcnQiLCJleHBvcnRBc3luYyIsImltcG9ydCIsImFyZ3VtZW50cyIsImRlZmF1bHRzIiwiYmF0Y2hTaXplIiwiZGVmYXVsdHNEZWVwIiwicHJvY2Vzc1RhYmxlSW1wb3J0IiwiaW1wb3J0QXN5bmMiLCJsb2FkU2NoZW1hIiwidXVpZCIsInR5cGVzIiwiVXVpZCIsInJhbmRvbSIsInV1aWRGcm9tU3RyaW5nIiwic3RyIiwiZnJvbVN0cmluZyIsInV1aWRGcm9tQnVmZmVyIiwiYnVmIiwidGltZXV1aWQiLCJUaW1lVXVpZCIsIm5vdyIsInRpbWV1dWlkRnJvbURhdGUiLCJkYXRlIiwiZnJvbURhdGUiLCJ0aW1ldXVpZEZyb21TdHJpbmciLCJ0aW1ldXVpZEZyb21CdWZmZXIiLCJtYXhUaW1ldXVpZCIsIm1heCIsIm1pblRpbWV1dWlkIiwibWluIiwiZG9CYXRjaCIsInF1ZXJpZXMiLCJwcmVwYXJlIiwicmFuZG9tTW9kZWwiLCJPYmplY3QiLCJrZXlzIiwiYmVmb3JlSG9va3MiLCJiYXRjaFJlc3VsdCIsImV4ZWN1dGVfYmF0Y2hBc3luYyIsImV4ZWN1dGVfcXVlcnlBc3luYyIsInF1ZXJ5IiwicGFyYW1zIiwicmVzcG9uc2UiLCJhZnRlckhvb2tSZXNwb25zZSIsImFmdGVyX2hvb2siLCJkb0JhdGNoQXN5bmMiLCJjYWxsIiwiZmlsZU5hbWUiLCJzbGljZSIsImxhc3RJbmRleE9mIiwicmVwbGFjZSIsImRlZmluZVByb3BlcnRpZXMiLCJjb25zaXN0ZW5jaWVzIiwiZ2V0IiwiZGF0YXR5cGVzIiwiZHJpdmVyIiwiaW5zdGFuY2UiLCJjbG9zZSIsImNsb3NlQXN5bmMiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQU1BLFNBQVNDLFFBQVEsUUFBUixDQUFmOztBQUVBLElBQUksQ0FBQ0QsT0FBT0UsU0FBUCxDQUFpQkMsUUFBUUMsT0FB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UUFBMUIsR0FBcUNqRixnQkFBZ0JpRixRQUFyRDtBQUNBakYsZ0JBQWdCeUMsU0FBaEIsQ0FBMEIyQyxnQkFBMUIsR0FBNkNwRixnQkFBZ0JvRixnQkFBN0Q7QUFDQXBGLGdCQUFnQnlDLFNBQWhCLENBQTBCOEMsa0JBQTFCLEdBQStDdkYsZ0JBQWdCdUYsa0JBQS9EO0FBQ0F2RixnQkFBZ0J5QyxTQUFoQixDQUEwQitDLGtCQUExQixHQUErQ3hGLGdCQUFnQndGLGtCQUEvRDtBQUNBeEYsZ0JBQWdCeUMsU0FBaEIsQ0FBMEJnRCxXQUExQixHQUF3Q3pGLGdCQUFnQnlGLFdBQXhEO0FBQ0F6RixnQkFBZ0J5QyxTQUFoQixDQUEwQmtELFdBQTFCLEdBQXdDM0YsZ0JBQWdCMkYsV0FBeEQ7O0FBRUEzRixnQkFBZ0J5QyxTQUFoQixDQUEwQnpCLDZCQUExQixHQUEwRGhCLGdCQUFnQmdCLDZCQUExRTs7QUFFQTBHLE9BQU9DLE9BQVAsR0FBaUIzSCxlQUFqQiIsImZpbGUiOiJleHByZXNzQ2Fzc2FuZHJhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc2VtdmVyID0gcmVxdWlyZSgnc2VtdmVyJyk7XG5cbmlmICghc2VtdmVyLnNhdGlzZmllcyhwcm9jZXNzLnZlcnNpb24sICc+PTYuMC4wJykpIHtcbiAgcmVxdWlyZSgnYmFiZWwtcG9seWZpbGwnKTtcbn1cblxuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ2JsdWViaXJkJyk7XG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5sZXQgZHNlRHJpdmVyO1xudHJ5IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcywgaW1wb3J0L25vLXVucmVzb2x2ZWRcbiAgZHNlRHJpdmVyID0gcmVxdWlyZSgnZHNlLWRyaXZlcicpO1xufSBjYXRjaCAoZSkge1xuICBkc2VEcml2ZXIgPSBudWxsO1xufVxuXG5jb25zdCBjcWwgPSBQcm9taXNlLnByb21pc2lmeUFsbChkc2VEcml2ZXIgfHwgcmVxdWlyZSgnY2Fzc2FuZHJhLWRyaXZlcicpKTtcblxuY29uc3QgT1JNID0gUHJvbWlzZS5wcm9taXNpZnlBbGwocmVxdWlyZSgnLi9vcm0vYXBvbGxvJykpO1xuY29uc3QgcmVhZGRpcnBBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KHJlcXVpcmUoJ3JlYWRkaXJwJykpO1xuY29uc3QgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdleHByZXNzLWNhc3NhbmRyYScpO1xuXG5jb25zdCBleHBvcnRlciA9IHJlcXVpcmUoJy4vdXRpbHMvZXhwb3J0ZXInKTtcbmNvbnN0IGltcG9ydGVyID0gcmVxdWlyZSgnLi91dGlscy9pbXBvcnRlcicpO1xuXG5jb25zdCBDYXNzYW5kcmFDbGllbnQgPSBmdW5jdGlvbiBmKG9wdGlvbnMpIHtcbiAgdGhpcy5tb2RlbEluc3RhbmNlID0ge307XG4gIHRoaXMub3JtID0gbmV3IE9STShvcHRpb25zLmNsaWVudE9wdGlvbnMsIG9wdGlvbnMub3JtT3B0aW9ucyk7XG4gIHRoaXMub3JtID0gUHJvbWlzZS5wcm9taXNpZnlBbGwodGhpcy5vcm0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmNyZWF0ZUNsaWVudCA9IChvcHRpb25zKSA9PiAobmV3IENhc3NhbmRyYUNsaWVudChvcHRpb25zKSk7XG5cbkNhc3NhbmRyYUNsaWVudC5zZXREaXJlY3RvcnkgPSAoZGlyZWN0b3J5KSA9PiB7XG4gIENhc3NhbmRyYUNsaWVudC5kaXJlY3RvcnkgPSBkaXJlY3Rvcnk7XG4gIHJldHVybiBDYXNzYW5kcmFDbGllbnQ7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuc3luY01vZGVsRmlsZVRvREIgPSAoZmlsZSwgY2FsbGJhY2spID0+IHtcbiAgaWYgKCFmaWxlLm5hbWUuaW5jbHVkZXMoJ01vZGVsJykpIHtcbiAgICBjYWxsYmFjaygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG1vZGVsTmFtZSA9IENhc3NhbmRyYUNsaWVudC5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZShmaWxlLm5hbWUpO1xuXG4gIGlmIChtb2RlbE5hbWUpIHtcbiAgICBjb25zdCBmaWxlTG9jYXRpb24gPSBwYXRoLmpvaW4oQ2Fzc2FuZHJhQ2xpZW50LmRpcmVjdG9yeSwgZmlsZS5wYXRoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWR5bmFtaWMtcmVxdWlyZVxuICAgIGNvbnN0IG1vZGVsU2NoZW1hID0gcmVxdWlyZShmaWxlTG9jYXRpb24pO1xuICAgIENhc3NhbmRyYUNsaWVudC5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0gPSBDYXNzYW5kcmFDbGllbnQub3JtLmFkZE1vZGVsKG1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpLCBtb2RlbFNjaGVtYSk7XG4gICAgQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2VbbW9kZWxOYW1lXS5zeW5jREIoY2FsbGJhY2spO1xuICAgIENhc3NhbmRyYUNsaWVudC5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0gPSBQcm9taXNlLnByb21pc2lmeUFsbChDYXNzYW5kcmFDbGllbnQubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjYWxsYmFjaygpO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmJpbmQgPSAob3B0aW9ucywgY2IpID0+IHtcbiAgQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2UgPSB7fTtcbiAgQ2Fzc2FuZHJhQ2xpZW50Lm9ybSA9IG5ldyBPUk0ob3B0aW9ucy5jbGllbnRPcHRpb25zLCBvcHRpb25zLm9ybU9wdGlvbnMpO1xuICBDYXNzYW5kcmFDbGllbnQub3JtID0gUHJvbWlzZS5wcm9taXNpZnlBbGwoQ2Fzc2FuZHJhQ2xpZW50Lm9ybSk7XG4gIENhc3NhbmRyYUNsaWVudC5vcm0uaW5pdEFzeW5jKClcbiAgICAudGhlbigoKSA9PiByZWFkZGlycEFzeW5jKHtcbiAgICAgIHJvb3Q6IENhc3NhbmRyYUNsaWVudC5kaXJlY3RvcnksXG4gICAgICBmaWxlRmlsdGVyOiBbXG4gICAgICAgICcqLmpzJywgJyouamF2YXNjcmlwdCcsICcqLmpzeCcsICcqLmNvZmZlZScsICcqLmNvZmZlZXNjcmlwdCcsICcqLmljZWQnLFxuICAgICAgICAnKi5zY3JpcHQnLCAnKi50cycsICcqLnRzeCcsICcqLnR5cGVzY3JpcHQnLCAnKi5janN4JywgJyouY28nLCAnKi5qc29uJyxcbiAgICAgICAgJyouanNvbjUnLCAnKi5saXRjb2ZmZWUnLCAnKi5saXRpY2VkJywgJyoubHMnLCAnKi5ub2RlJywgJyoudG9tbCcsICcqLndpc3AnLFxuICAgICAgXSxcbiAgICB9KSlcbiAgICAudGhlbigoZmlsZUxpc3QpID0+IHtcbiAgICAgIGNvbnN0IHN5bmNNb2RlbFRhc2tzID0gW107XG4gICAgICBjb25zdCBzeW5jTW9kZWxGaWxlVG9EQkFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LnN5bmNNb2RlbEZpbGVUb0RCKTtcbiAgICAgIGZpbGVMaXN0ID0gZmlsZUxpc3QuZmlsZXM7XG4gICAgICBmaWxlTGlzdC5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgIHN5bmNNb2RlbFRhc2tzLnB1c2goc3luY01vZGVsRmlsZVRvREJBc3luYyhmaWxlKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChzeW5jTW9kZWxUYXNrcyk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAoY2IpIGNiKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGNiICYmIF8uaXNBcnJheShlcnIpICYmIGVyci5sZW5ndGggPiAwKSBjYihlcnJbMF0pO1xuICAgICAgZWxzZSBpZiAoY2IpIGNiKGVycik7XG4gICAgfSk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuYmluZEFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LmJpbmQpO1xuXG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBmKGNhbGxiYWNrKSB7XG4gIHRoaXMub3JtLmluaXQoY2FsbGJhY2spO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5pbml0QXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmluaXQpO1xuXG5DYXNzYW5kcmFDbGllbnQuZ2V0VGFibGVMaXN0ID0gZnVuY3Rpb24gZihjYWxsYmFjaykge1xuICBjb25zdCBzeXN0ZW1DbGllbnQgPSB0aGlzLm9ybS5nZXRfc3lzdGVtX2NsaWVudCgpO1xuICBjb25zdCBrZXlzcGFjZSA9IHRoaXMub3JtLmdldF9rZXlzcGFjZV9uYW1lKCk7XG4gIGNvbnN0IHRhYmxlcyA9IFtdO1xuXG4gIHN5c3RlbUNsaWVudC5jb25uZWN0KClcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBzeXN0ZW1RdWVyeSA9ICdTRUxFQ1QgdGFibGVfbmFtZSBGUk9NIHN5c3RlbV9zY2hlbWEudGFibGVzIFdIRVJFIGtleXNwYWNlX25hbWUgPSA/JztcbiAgICAgIGRlYnVnKGBGaW5kaW5nIHRhYmxlcyBpbiBrZXlzcGFjZTogJHtrZXlzcGFjZX1gKTtcbiAgICAgIHJldHVybiBzeXN0ZW1DbGllbnQuZXhlY3V0ZShzeXN0ZW1RdWVyeSwgW2tleXNwYWNlXSk7XG4gICAgfSlcbiAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRhYmxlcy5wdXNoKHJlc3VsdC5yb3dzW2ldLnRhYmxlX25hbWUpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4gc3lzdGVtQ2xpZW50LnNodXRkb3duKCkpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgY2FsbGJhY2sobnVsbCwgdGFibGVzKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmdldFRhYmxlTGlzdEFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LmdldFRhYmxlTGlzdCk7XG5cbkNhc3NhbmRyYUNsaWVudC5leHBvcnQgPSBmdW5jdGlvbiBmKGZpeHR1cmVEaXJlY3RvcnksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHN5c3RlbUNsaWVudCA9IHRoaXMub3JtLmdldF9zeXN0ZW1fY2xpZW50KCk7XG4gIGNvbnN0IGtleXNwYWNlID0gdGhpcy5vcm0uZ2V0X2tleXNwYWNlX25hbWUoKTtcblxuICBzeXN0ZW1DbGllbnQuY29ubmVjdCgpXG4gICAgLnRoZW4oKCkgPT4gdGhpcy5nZXRUYWJsZUxpc3RBc3luYygpKVxuICAgIC50aGVuKCh0YWJsZXMpID0+XG4gICAgICBQcm9taXNlLmVhY2godGFibGVzLCAodGFibGUpID0+XG4gICAgICAgIGV4cG9ydGVyLnByb2Nlc3NUYWJsZUV4cG9ydChzeXN0ZW1DbGllbnQsIGZpeHR1cmVEaXJlY3RvcnksIGtleXNwYWNlLCB0YWJsZSkpKVxuICAgIC50aGVuKCgpID0+IHN5c3RlbUNsaWVudC5zaHV0ZG93bigpKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGRlYnVnKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICAgICAgZGVidWcoYENvbXBsZXRlZCBleHBvcnRpbmcgYWxsIHRhYmxlcyBmcm9tIGtleXNwYWNlOiAke2tleXNwYWNlfWApO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBkZWJ1ZyhlcnIpO1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9KTtcbn07XG5cbkNhc3NhbmRyYUNsaWVudC5leHBvcnRBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5leHBvcnQpO1xuXG5DYXNzYW5kcmFDbGllbnQuaW1wb3J0ID0gZnVuY3Rpb24gZihmaXh0dXJlRGlyZWN0b3J5LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBiYXRjaFNpemU6IDEsXG4gIH07XG5cbiAgb3B0aW9ucyA9IF8uZGVmYXVsdHNEZWVwKG9wdGlvbnMsIGRlZmF1bHRzKTtcblxuICBjb25zdCBzeXN0ZW1DbGllbnQgPSB0aGlzLm9ybS5nZXRfc3lzdGVtX2NsaWVudCgpO1xuICBjb25zdCBrZXlzcGFjZSA9IHRoaXMub3JtLmdldF9rZXlzcGFjZV9uYW1lKCk7XG5cbiAgc3lzdGVtQ2xpZW50LmNvbm5lY3QoKVxuICAgIC50aGVuKCgpID0+IHRoaXMuZ2V0VGFibGVMaXN0QXN5bmMoKSlcbiAgICAudGhlbigodGFibGVzKSA9PlxuICAgICAgUHJvbWlzZS5lYWNoKHRhYmxlcywgKHRhYmxlKSA9PlxuICAgICAgICBpbXBvcnRlci5wcm9jZXNzVGFibGVJbXBvcnQoc3lzdGVtQ2xpZW50LCBmaXh0dXJlRGlyZWN0b3J5LCBrZXlzcGFjZSwgdGFibGUsIG9wdGlvbnMuYmF0Y2hTaXplKSkpXG4gICAgLnRoZW4oKCkgPT4gc3lzdGVtQ2xpZW50LnNodXRkb3duKCkpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgZGVidWcoJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gICAgICBkZWJ1ZyhgQ29tcGxldGVkIGltcG9ydGluZyB0byBrZXlzcGFjZTogJHtrZXlzcGFjZX1gKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZGVidWcoZXJyKTtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuaW1wb3J0QXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQuaW1wb3J0KTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5sb2FkU2NoZW1hID0gZnVuY3Rpb24gZihtb2RlbE5hbWUsIG1vZGVsU2NoZW1hKSB7XG4gIHRoaXMubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdID0gdGhpcy5vcm0uYWRkTW9kZWwobW9kZWxOYW1lLCBtb2RlbFNjaGVtYSk7XG4gIHRoaXMubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdID0gUHJvbWlzZS5wcm9taXNpZnlBbGwodGhpcy5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0pO1xuICByZXR1cm4gdGhpcy5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV07XG59O1xuXG5DYXNzYW5kcmFDbGllbnQudXVpZCA9ICgpID0+IChjcWwudHlwZXMuVXVpZC5yYW5kb20oKSk7XG5cbkNhc3NhbmRyYUNsaWVudC51dWlkRnJvbVN0cmluZyA9IChzdHIpID0+IChjcWwudHlwZXMuVXVpZC5mcm9tU3RyaW5nKHN0cikpO1xuXG5DYXNzYW5kcmFDbGllbnQudXVpZEZyb21CdWZmZXIgPSAoYnVmKSA9PiAobmV3IGNxbC50eXBlcy5VdWlkKGJ1ZikpO1xuXG5DYXNzYW5kcmFDbGllbnQudGltZXV1aWQgPSAoKSA9PiAoY3FsLnR5cGVzLlRpbWVVdWlkLm5vdygpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbURhdGUgPSAoZGF0ZSkgPT4gKGNxbC50eXBlcy5UaW1lVXVpZC5mcm9tRGF0ZShkYXRlKSk7XG5cbkNhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21TdHJpbmcgPSAoc3RyKSA9PiAoY3FsLnR5cGVzLlRpbWVVdWlkLmZyb21TdHJpbmcoc3RyKSk7XG5cbkNhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21CdWZmZXIgPSAoYnVmKSA9PiAobmV3IGNxbC50eXBlcy5UaW1lVXVpZChidWYpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Lm1heFRpbWV1dWlkID0gKGRhdGUpID0+IChjcWwudHlwZXMuVGltZVV1aWQubWF4KGRhdGUpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Lm1pblRpbWV1dWlkID0gKGRhdGUpID0+IChjcWwudHlwZXMuVGltZVV1aWQubWluKGRhdGUpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5kb0JhdGNoID0gZnVuY3Rpb24gZihxdWVyaWVzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBwcmVwYXJlOiB0cnVlLFxuICB9O1xuXG4gIG9wdGlvbnMgPSBfLmRlZmF1bHRzRGVlcChvcHRpb25zLCBkZWZhdWx0cyk7XG5cbiAgY29uc3QgcmFuZG9tTW9kZWwgPSB0aGlzLm1vZGVsSW5zdGFuY2VbT2JqZWN0LmtleXModGhpcy5tb2RlbEluc3RhbmNlKVswXV07XG4gIGNvbnN0IGJlZm9yZUhvb2tzID0gW107XG5cbiAgbGV0IGJhdGNoUmVzdWx0O1xuICBQcm9taXNlLmFsbChiZWZvcmVIb29rcylcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAocXVlcmllcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiByYW5kb21Nb2RlbC5leGVjdXRlX2JhdGNoQXN5bmMocXVlcmllcywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAocXVlcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRlYnVnKCdzaW5nbGUgcXVlcnkgcHJvdmlkZWQgZm9yIGJhdGNoIHJlcXVlc3QsIGFwcGx5aW5nIGFzIG5vbiBiYXRjaCBxdWVyeScpO1xuICAgICAgICByZXR1cm4gcmFuZG9tTW9kZWwuZXhlY3V0ZV9xdWVyeUFzeW5jKHF1ZXJpZXNbMF0ucXVlcnksIHF1ZXJpZXNbMF0ucGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdubyBxdWVyaWVzIHByb3ZpZGVkIGZvciBiYXRjaCByZXF1ZXN0LCBlbXB0eSBhcnJheSBmb3VuZCwgZG9pbmcgbm90aGluZycpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBiYXRjaFJlc3VsdCA9IHJlc3BvbnNlO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFmdGVySG9va1Jlc3BvbnNlID0gcXVlcmllc1tpXS5hZnRlcl9ob29rKCk7XG4gICAgICAgIGlmIChhZnRlckhvb2tSZXNwb25zZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIGNhbGxiYWNrKGFmdGVySG9va1Jlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwsIGJhdGNoUmVzdWx0KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5kb0JhdGNoQXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmRvQmF0Y2gpO1xuXG5DYXNzYW5kcmFDbGllbnQuZG9CYXRjaCA9IGZ1bmN0aW9uIGYocXVlcmllcywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgcHJlcGFyZTogdHJ1ZSxcbiAgfTtcblxuICBvcHRpb25zID0gXy5kZWZhdWx0c0RlZXAob3B0aW9ucywgZGVmYXVsdHMpO1xuXG4gIENhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUuZG9CYXRjaC5jYWxsKENhc3NhbmRyYUNsaWVudCwgcXVlcmllcywgb3B0aW9ucywgY2FsbGJhY2spO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmRvQmF0Y2hBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5kb0JhdGNoKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Ll90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lID0gKGZpbGVOYW1lKSA9PiAoXG4gIGZpbGVOYW1lLnNsaWNlKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykpLnJlcGxhY2UoJ01vZGVsJywgJycpXG4pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYXNzYW5kcmFDbGllbnQsIHtcbiAgY29uc2lzdGVuY2llczoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjcWwudHlwZXMuY29uc2lzdGVuY2llcztcbiAgICB9LFxuICB9LFxuICBkYXRhdHlwZXM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsLnR5cGVzO1xuICAgIH0sXG4gIH0sXG4gIGRyaXZlcjoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjcWw7XG4gICAgfSxcbiAgfSxcbiAgaW5zdGFuY2U6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2U7XG4gICAgfSxcbiAgfSxcbiAgY2xvc2U6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50Lm9ybS5jbG9zZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZUFzeW5jOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5vcm0uY2xvc2UpO1xuICAgIH0sXG4gIH0sXG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLCB7XG4gIGNvbnNpc3RlbmNpZXM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsLnR5cGVzLmNvbnNpc3RlbmNpZXM7XG4gICAgfSxcbiAgfSxcbiAgZGF0YXR5cGVzOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGNxbC50eXBlcztcbiAgICB9LFxuICB9LFxuICBkcml2ZXI6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsO1xuICAgIH0sXG4gIH0sXG4gIGluc3RhbmNlOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZWxJbnN0YW5jZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZToge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ybS5jbG9zZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZUFzeW5jOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucHJvbWlzaWZ5KHRoaXMub3JtLmNsb3NlKTtcbiAgICB9LFxuICB9LFxufSk7XG5cbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudXVpZCA9IENhc3NhbmRyYUNsaWVudC51dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS51dWlkRnJvbVN0cmluZyA9IENhc3NhbmRyYUNsaWVudC51dWlkRnJvbVN0cmluZztcbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudXVpZEZyb21CdWZmZXIgPSBDYXNzYW5kcmFDbGllbnQudXVpZEZyb21CdWZmZXI7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkID0gQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS50aW1ldXVpZEZyb21EYXRlID0gQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbURhdGU7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkRnJvbVN0cmluZyA9IENhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21TdHJpbmc7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkRnJvbUJ1ZmZlciA9IENhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21CdWZmZXI7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLm1heFRpbWV1dWlkID0gQ2Fzc2FuZHJhQ2xpZW50Lm1heFRpbWV1dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5taW5UaW1ldXVpZCA9IENhc3NhbmRyYUNsaWVudC5taW5UaW1ldXVpZDtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZSA9IENhc3NhbmRyYUNsaWVudC5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYXNzYW5kcmFDbGllbnQ7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzQ2Fzc2FuZHJhLmpzIl0sIm5hbWVzIjpbInNlbXZlciIsInJlcXVpcmUiLCJzYXRpc2ZpZXMiLCJwcm9jZXNzIiwidmVyc2lvbiIsIlByb21pc2UiLCJfIiwicGF0aCIsImRzZURyaXZlciIsImUiLCJjcWwiLCJwcm9taXNpZnlBbGwiLCJPUk0iLCJyZWFkZGlycEFzeW5jIiwicHJvbWlzaWZ5IiwiZGVidWciLCJleHBvcnRlciIsImltcG9ydGVyIiwiQ2Fzc2FuZHJhQ2xpZW50IiwiZiIsIm9wdGlvbnMiLCJtb2RlbEluc3RhbmNlIiwib3JtIiwiY2xpZW50T3B0aW9ucyIsIm9ybU9wdGlvbnMiLCJjcmVhdGVDbGllbnQiLCJzZXREaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJzeW5jTW9kZWxGaWxlVG9EQiIsImZpbGUiLCJjYWxsYmFjayIsIm5hbWUiLCJpbmNsdWRlcyIsIm1vZGVsTmFtZSIsIl90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lIiwiZmlsZUxvY2F0aW9uIiwiam9pbiIsImRlZmF1bHRNb2RlbFNjaGVtYSIsIm1vZGVsU2NoZW1hIiwiZGVmYXVsdCIsImFkZE1vZGVsIiwidG9Mb3dlckNhc2UiLCJzeW5jREIiLCJiaW5kIiwiY2IiLCJpbml0QXN5bmMiLCJ0aGVuIiwicm9vdCIsImZpbGVGaWx0ZXIiLCJmaWxlTGlzdCIsInN5bmNNb2RlbFRhc2tzIiwic3luY01vZGVsRmlsZVRvREJBc3luYyIsImZpbGVzIiwiZm9yRWFjaCIsInB1c2giLCJhbGwiLCJjYXRjaCIsImVyciIsImlzQXJyYXkiLCJsZW5ndGgiLCJiaW5kQXN5bmMiLCJwcm90b3R5cGUiLCJpbml0IiwiZ2V0VGFibGVMaXN0Iiwic3lzdGVtQ2xpZW50IiwiZ2V0X3N5c3RlbV9jbGllbnQiLCJrZXlzcGFjZSIsImdldF9rZXlzcGFjZV9uYW1lIiwidGFibGVzIiwiY29ubmVjdCIsInN5c3RlbVF1ZXJ5IiwiZXhlY3V0ZSIsInJlc3VsdCIsImkiLCJyb3dzIiwidGFibGVfbmFtZSIsInNodXRkb3duIiwiZ2V0VGFibGVMaXN0QXN5bmMiLCJleHBvcnQiLCJmaXh0dXJlRGlyZWN0b3J5IiwiZWFjaCIsInRhYmxlIiwicHJvY2Vzc1RhYmxlRXhwb3J0IiwiZXhwb3J0QXN5bmMiLCJpbXBvcnQiLCJhcmd1bWVudHMiLCJkZWZhdWx0cyIsImJhdGNoU2l6ZSIsImRlZmF1bHRzRGVlcCIsInByb2Nlc3NUYWJsZUltcG9ydCIsImltcG9ydEFzeW5jIiwibG9hZFNjaGVtYSIsInV1aWQiLCJ0eXBlcyIsIlV1aWQiLCJyYW5kb20iLCJ1dWlkRnJvbVN0cmluZyIsInN0ciIsImZyb21TdHJpbmciLCJ1dWlkRnJvbUJ1ZmZlciIsImJ1ZiIsInRpbWV1dWlkIiwiVGltZVV1aWQiLCJub3ciLCJ0aW1ldXVpZEZyb21EYXRlIiwiZGF0ZSIsImZyb21EYXRlIiwidGltZXV1aWRGcm9tU3RyaW5nIiwidGltZXV1aWRGcm9tQnVmZmVyIiwibWF4VGltZXV1aWQiLCJtYXgiLCJtaW5UaW1ldXVpZCIsIm1pbiIsImRvQmF0Y2giLCJxdWVyaWVzIiwicHJlcGFyZSIsInJhbmRvbU1vZGVsIiwiT2JqZWN0Iiwia2V5cyIsImJlZm9yZUhvb2tzIiwiYmF0Y2hSZXN1bHQiLCJleGVjdXRlX2JhdGNoQXN5bmMiLCJleGVjdXRlX3F1ZXJ5QXN5bmMiLCJxdWVyeSIsInBhcmFtcyIsInJlc3BvbnNlIiwiYWZ0ZXJIb29rUmVzcG9uc2UiLCJhZnRlcl9ob29rIiwiZG9CYXRjaEFzeW5jIiwiY2FsbCIsImZpbGVOYW1lIiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsInJlcGxhY2UiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiY29uc2lzdGVuY2llcyIsImdldCIsImRhdGF0eXBlcyIsImRyaXZlciIsImluc3RhbmNlIiwiY2xvc2UiLCJjbG9zZUFzeW5jIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFNQSxTQUFTQyxRQUFRLFFBQVIsQ0FBZjs7QUFFQSxJQUFJLENBQUNELE9BQU9FLFNBQVAsQ0FBaUJDLFFBQVFDLE9BQXpCLEVBQWtDLFNBQWxDLENBQUwsRUFBbUQ7QUFDakRILFVBQVEsZ0JBQVI7QUFDRDs7QUFFRCxJQUFNSSxVQUFVSixRQUFRLFVBQVIsQ0FBaEI7QUFDQSxJQUFNSyxJQUFJTCxRQUFRLFFBQVIsQ0FBVjtBQUNBLElBQU1NLE9BQU9OLFFBQVEsTUFBUixDQUFiOztBQUVBLElBQUlPLGtCQUFKO0FBQ0EsSUFBSTtBQUNGO0FBQ0FBLGNBQVlQLFFBQVEsWUFBUixDQUFaO0FBQ0QsQ0FIRCxDQUdFLE9BQU9RLENBQVAsRUFBVTtBQUNWRCxjQUFZLElBQVo7QUFDRDs7QUFFRCxJQUFNRSxNQUFNTCxRQUFRTSxZQUFSLENBQXFCSCxhQUFhUCxRQUFRLGtCQUFSLENBQWxDLENBQVo7O0FBRUEsSUFBTVcsTUFBTVAsUUFBUU0sWUFBUixDQUFxQlYsUUFBUSxjQUFSLENBQXJCLENBQVo7QUFDQSxJQUFNWSxnQkFBZ0JSLFFBQVFTLFNBQVIsQ0FBa0JiLFFBQVEsVUFBUixDQUFsQixDQUF0QjtBQUNBLElBQU1jLFFBQVFkLFFBQVEsT0FBUixFQUFpQixtQkFBakIsQ0FBZDs7QUFFQSxJQUFNZSxXQUFXZixRQUFRLGtCQUFSLENBQWpCO0FBQ0EsSUFBTWdCLFdBQVdoQixRQUFRLGtCQUFSLENBQWpCOztBQUVBLElBQU1pQixrQkFBa0IsU0FBU0MsQ0FBVCxDQUFXQyxPQUFYLEVBQW9CO0FBQzFDLE9BQUtDLGFBQUwsR0FBcUIsRUFBckI7QUFDQSxPQUFLQyxHQUFMLEdBQVcsSUFBSVYsR0FBSixDQUFRUSxRQUFRRyxhQUFoQixFQUErQkgsUUFBUUksVUFBdkMsQ0FBWDtBQUNBLE9BQUtGLEdBQUwsR0FBV2pCLFFBQVFNLFlBQVIsQ0FBcUIsS0FBS1csR0FBMUIsQ0FBWDtBQUNELENBSkQ7O0FBTUFKLGdCQUFnQk8sWUFBaEIsR0FBK0IsVUFBQ0wsT0FBRDtBQUFBLFNBQWMsSUFBSUYsZUFBSixDQUFvQkUsT0FBcEIsQ0FBZDtBQUFBLENBQS9COztBQUVBRixnQkFBZ0JRLFlBQWhCLEdBQStCLFVBQUNDLFNBQUQsRUFBZTtBQUM1Q1Qsa0JBQWdCUyxTQUFoQixHQUE0QkEsU0FBNUI7QUFDQSxTQUFPVCxlQUFQO0FBQ0QsQ0FIRDs7QUFLQUEsZ0JBQWdCVSxpQkFBaEIsR0FBb0MsVUFBQ0MsSUFBRCxFQUFPQyxRQUFQLEVBQW9CO0FBQ3RELE1BQUksQ0FBQ0QsS0FBS0UsSUFBTCxDQUFVQyxRQUFWLENBQW1CLE9BQW5CLENBQUwsRUFBa0M7QUFDaENGO0FBQ0E7QUFDRDs7QUFFRCxNQUFNRyxZQUFZZixnQkFBZ0JnQiw2QkFBaEIsQ0FBOENMLEtBQUtFLElBQW5ELENBQWxCOztBQUVBLE1BQUlFLFNBQUosRUFBZTtBQUNiLFFBQU1FLGVBQWU1QixLQUFLNkIsSUFBTCxDQUFVbEIsZ0JBQWdCUyxTQUExQixFQUFxQ0UsS0FBS3RCLElBQTFDLENBQXJCO0FBQ0E7QUFDQSxRQUFNOEIscUJBQXFCcEMsUUFBUWtDLFlBQVIsQ0FBM0I7QUFDQSxRQUFNRyxjQUFjRCxtQkFBbUJFLE9BQW5CLEdBQTZCRixtQkFBbUJFLE9BQWhELEdBQTBERixrQkFBOUU7QUFDQW5CLG9CQUFnQkcsYUFBaEIsQ0FBOEJZLFNBQTlCLElBQTJDZixnQkFBZ0JJLEdBQWhCLENBQW9Ca0IsUUFBcEIsQ0FBNkJQLFVBQVVRLFdBQVYsRUFBN0IsRUFBc0RILFdBQXRELENBQTNDO0FBQ0FwQixvQkFBZ0JHLGFBQWhCLENBQThCWSxTQUE5QixFQUF5Q1MsTUFBekMsQ0FBZ0RaLFFBQWhEO0FBQ0FaLG9CQUFnQkcsYUFBaEIsQ0FBOEJZLFNBQTlCLElBQTJDNUIsUUFBUU0sWUFBUixDQUFxQk8sZ0JBQWdCRyxhQUFoQixDQUE4QlksU0FBOUIsQ0FBckIsQ0FBM0M7QUFDQTtBQUNEOztBQUVESDtBQUNELENBcEJEOztBQXNCQVosZ0JBQWdCeUIsSUFBaEIsR0FBdUIsVUFBQ3ZCLE9BQUQsRUFBVXdCLEVBQVYsRUFBaUI7QUFDdEMxQixrQkFBZ0JHLGFBQWhCLEdBQWdDLEVBQWhDO0FBQ0FILGtCQUFnQkksR0FBaEIsR0FBc0IsSUFBSVYsR0FBSixDQUFRUSxRQUFRRyxhQUFoQixFQUErQkgsUUFBUUksVUFBdkMsQ0FBdEI7QUFDQU4sa0JBQWdCSSxHQUFoQixHQUFzQmpCLFFBQVFNLFlBQVIsQ0FBcUJPLGdCQUFnQkksR0FBckMsQ0FBdEI7QUFDQUosa0JBQWdCSSxHQUFoQixDQUFvQnVCLFNBQXBCLEdBQ0dDLElBREgsQ0FDUTtBQUFBLFdBQU1qQyxjQUFjO0FBQ3hCa0MsWUFBTTdCLGdCQUFnQlMsU0FERTtBQUV4QnFCLGtCQUFZLENBQ1YsTUFEVSxFQUNGLGNBREUsRUFDYyxPQURkLEVBQ3VCLFVBRHZCLEVBQ21DLGdCQURuQyxFQUNxRCxRQURyRCxFQUVWLFVBRlUsRUFFRSxNQUZGLEVBRVUsT0FGVixFQUVtQixjQUZuQixFQUVtQyxRQUZuQyxFQUU2QyxNQUY3QyxFQUVxRCxRQUZyRCxFQUdWLFNBSFUsRUFHQyxhQUhELEVBR2dCLFdBSGhCLEVBRzZCLE1BSDdCLEVBR3FDLFFBSHJDLEVBRytDLFFBSC9DLEVBR3lELFFBSHpEO0FBRlksS0FBZCxDQUFOO0FBQUEsR0FEUixFQVNHRixJQVRILENBU1EsVUFBQ0csUUFBRCxFQUFjO0FBQ2xCLFFBQU1DLGlCQUFpQixFQUF2QjtBQUNBLFFBQU1DLHlCQUF5QjlDLFFBQVFTLFNBQVIsQ0FBa0JJLGdCQUFnQlUsaUJBQWxDLENBQS9CO0FBQ0FxQixlQUFXQSxTQUFTRyxLQUFwQjtBQUNBSCxhQUFTSSxPQUFULENBQWlCLFVBQUN4QixJQUFELEVBQVU7QUFDekJxQixxQkFBZUksSUFBZixDQUFvQkgsdUJBQXVCdEIsSUFBdkIsQ0FBcEI7QUFDRCxLQUZEO0FBR0EsV0FBT3hCLFFBQVFrRCxHQUFSLENBQVlMLGNBQVosQ0FBUDtBQUNELEdBakJILEVBa0JHSixJQWxCSCxDQWtCUSxZQUFNO0FBQ1YsUUFBSUYsRUFBSixFQUFRQTtBQUNULEdBcEJILEVBcUJHWSxLQXJCSCxDQXFCUyxVQUFDQyxHQUFELEVBQVM7QUFDZCxRQUFJYixNQUFNdEMsRUFBRW9ELE9BQUYsQ0FBVUQsR0FBVixDQUFOLElBQXdCQSxJQUFJRSxNQUFKLEdBQWEsQ0FBekMsRUFBNENmLEdBQUdhLElBQUksQ0FBSixDQUFILEVBQTVDLEtBQ0ssSUFBSWIsRUFBSixFQUFRQSxHQUFHYSxHQUFIO0FBQ2QsR0F4Qkg7QUF5QkQsQ0E3QkQ7O0FBK0JBdkMsZ0JBQWdCMEMsU0FBaEIsR0FBNEJ2RCxRQUFRUyxTQUFSLENBQWtCSSxnQkFBZ0J5QixJQUFsQyxDQUE1Qjs7QUFFQXpCLGdCQUFnQjJDLFNBQWhCLENBQTBCQyxJQUExQixHQUFpQyxTQUFTM0MsQ0FBVCxDQUFXVyxRQUFYLEVBQXFCO0FBQ3BELE9BQUtSLEdBQUwsQ0FBU3dDLElBQVQsQ0FBY2hDLFFBQWQ7QUFDRCxDQUZEOztBQUlBWixnQkFBZ0IyQyxTQUFoQixDQUEwQmhCLFNBQTFCLEdBQXNDeEMsUUFBUVMsU0FBUixDQUFrQkksZ0JBQWdCMkMsU0FBaEIsQ0FBMEJDLElBQTVDLENBQXRDOztBQUVBNUMsZ0JBQWdCNkMsWUFBaEIsR0FBK0IsU0FBUzVDLENBQVQsQ0FBV1csUUFBWCxFQUFxQjtBQUNsRCxNQUFNa0MsZUFBZSxLQUFLMUMsR0FBTCxDQUFTMkMsaUJBQVQsRUFBckI7QUFDQSxNQUFNQyxXQUFXLEtBQUs1QyxHQUFMLENBQVM2QyxpQkFBVCxFQUFqQjtBQUNBLE1BQU1DLFNBQVMsRUFBZjs7QUFFQUosZUFBYUssT0FBYixHQUNHdkIsSUFESCxDQUNRLFlBQU07QUFDVixRQUFNd0IsY0FBYyxxRUFBcEI7QUFDQXZELFVBQU8sK0JBQThCbUQsUUFBUyxFQUE5QztBQUNBLFdBQU9GLGFBQWFPLE9BQWIsQ0FBcUJELFdBQXJCLEVBQWtDLENBQUNKLFFBQUQsQ0FBbEMsQ0FBUDtBQUNELEdBTEgsRUFNR3BCLElBTkgsQ0FNUSxVQUFDMEIsTUFBRCxFQUFZO0FBQ2hCLFNBQUssSUFBSUMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJRCxPQUFPRSxJQUFQLENBQVlmLE1BQWhDLEVBQXdDYyxHQUF4QyxFQUE2QztBQUMzQ0wsYUFBT2QsSUFBUCxDQUFZa0IsT0FBT0UsSUFBUCxDQUFZRCxDQUFaLEVBQWVFLFVBQTNCO0FBQ0Q7QUFDRixHQVZILEVBV0c3QixJQVhILENBV1E7QUFBQSxXQUFNa0IsYUFBYVksUUFBYixFQUFOO0FBQUEsR0FYUixFQVlHOUIsSUFaSCxDQVlRLFlBQU07QUFDVmhCLGFBQVMsSUFBVCxFQUFlc0MsTUFBZjtBQUNELEdBZEgsRUFlR1osS0FmSCxDQWVTLFVBQUNDLEdBQUQsRUFBUztBQUNkM0IsYUFBUzJCLEdBQVQ7QUFDRCxHQWpCSDtBQWtCRCxDQXZCRDs7QUF5QkF2QyxnQkFBZ0IyRCxpQkFBaEIsR0FBb0N4RSxRQUFRUyxTQUFSLENBQWtCSSxnQkFBZ0I2QyxZQUFsQyxDQUFwQzs7QUFFQTdDLGdCQUFnQjRELE1BQWhCLEdBQXlCLFNBQVMzRCxDQUFULENBQVc0RCxnQkFBWCxFQUE2QmpELFFBQTdCLEVBQXVDO0FBQUE7O0FBQzlELE1BQU1rQyxlQUFlLEtBQUsxQyxHQUFMLENBQVMyQyxpQkFBVCxFQUFyQjtBQUNBLE1BQU1DLFdBQVcsS0FBSzVDLEdBQUwsQ0FBUzZDLGlCQUFULEVBQWpCOztBQUVBSCxlQUFhSyxPQUFiLEdBQ0d2QixJQURILENBQ1E7QUFBQSxXQUFNLE1BQUsrQixpQkFBTCxFQUFOO0FBQUEsR0FEUixFQUVHL0IsSUFGSCxDQUVRLFVBQUNzQixNQUFEO0FBQUEsV0FDSi9ELFFBQVEyRSxJQUFSLENBQWFaLE1BQWIsRUFBcUIsVUFBQ2EsS0FBRDtBQUFBLGFBQ25CakUsU0FBU2tFLGtCQUFULENBQTRCbEIsWUFBNUIsRUFBMENlLGdCQUExQyxFQUE0RGIsUUFBNUQsRUFBc0VlLEtBQXRFLENBRG1CO0FBQUEsS0FBckIsQ0FESTtBQUFBLEdBRlIsRUFLR25DLElBTEgsQ0FLUTtBQUFBLFdBQU1rQixhQUFhWSxRQUFiLEVBQU47QUFBQSxHQUxSLEVBTUc5QixJQU5ILENBTVEsWUFBTTtBQUNWL0IsVUFBTSxvREFBTjtBQUNBQSxVQUFPLGlEQUFnRG1ELFFBQVMsRUFBaEU7QUFDQXBDO0FBQ0QsR0FWSCxFQVdHMEIsS0FYSCxDQVdTLFVBQUNDLEdBQUQsRUFBUztBQUNkMUMsVUFBTTBDLEdBQU47QUFDQTNCLGFBQVMyQixHQUFUO0FBQ0QsR0FkSDtBQWVELENBbkJEOztBQXFCQXZDLGdCQUFnQmlFLFdBQWhCLEdBQThCOUUsUUFBUVMsU0FBUixDQUFrQkksZ0JBQWdCNEQsTUFBbEMsQ0FBOUI7O0FBRUE1RCxnQkFBZ0JrRSxNQUFoQixHQUF5QixTQUFTakUsQ0FBVCxDQUFXNEQsZ0JBQVgsRUFBNkIzRCxPQUE3QixFQUFzQ1UsUUFBdEMsRUFBZ0Q7QUFBQTs7QUFDdkUsTUFBSXVELFVBQVUxQixNQUFWLEtBQXFCLENBQXpCLEVBQTRCO0FBQzFCN0IsZUFBV1YsT0FBWDtBQUNBQSxjQUFVLEVBQVY7QUFDRDs7QUFFRCxNQUFNa0UsV0FBVztBQUNmQyxlQUFXO0FBREksR0FBakI7O0FBSUFuRSxZQUFVZCxFQUFFa0YsWUFBRixDQUFlcEUsT0FBZixFQUF3QmtFLFFBQXhCLENBQVY7O0FBRUEsTUFBTXRCLGVBQWUsS0FBSzFDLEdBQUwsQ0FBUzJDLGlCQUFULEVBQXJCO0FBQ0EsTUFBTUMsV0FBVyxLQUFLNUMsR0FBTCxDQUFTNkMsaUJBQVQsRUFBakI7O0FBRUFILGVBQWFLLE9BQWIsR0FDR3ZCLElBREgsQ0FDUTtBQUFBLFdBQU0sT0FBSytCLGlCQUFMLEVBQU47QUFBQSxHQURSLEVBRUcvQixJQUZILENBRVEsVUFBQ3NCLE1BQUQ7QUFBQSxXQUNKL0QsUUFBUTJFLElBQVIsQ0FBYVosTUFBYixFQUFxQixVQUFDYSxLQUFEO0FBQUEsYUFDbkJoRSxTQUFTd0Usa0JBQVQsQ0FBNEJ6QixZQUE1QixFQUEwQ2UsZ0JBQTFDLEVBQTREYixRQUE1RCxFQUFzRWUsS0FBdEUsRUFBNkU3RCxRQUFRbUUsU0FBckYsQ0FEbUI7QUFBQSxLQUFyQixDQURJO0FBQUEsR0FGUixFQUtHekMsSUFMSCxDQUtRO0FBQUEsV0FBTWtCLGFBQWFZLFFBQWIsRUFBTjtBQUFBLEdBTFIsRUFNRzlCLElBTkgsQ0FNUSxZQUFNO0FBQ1YvQixVQUFNLG9EQUFOO0FBQ0FBLFVBQU8sb0NBQW1DbUQsUUFBUyxFQUFuRDtBQUNBcEM7QUFDRCxHQVZILEVBV0cwQixLQVhILENBV1MsVUFBQ0MsR0FBRCxFQUFTO0FBQ2QxQyxVQUFNMEMsR0FBTjtBQUNBM0IsYUFBUzJCLEdBQVQ7QUFDRCxHQWRIO0FBZUQsQ0E5QkQ7O0FBZ0NBdkMsZ0JBQWdCd0UsV0FBaEIsR0FBOEJyRixRQUFRUyxTQUFSLENBQWtCSSxnQkFBZ0JrRSxNQUFsQyxDQUE5Qjs7QUFFQWxFLGdCQUFnQjJDLFNBQWhCLENBQTBCOEIsVUFBMUIsR0FBdUMsU0FBU3hFLENBQVQsQ0FBV2MsU0FBWCxFQUFzQkssV0FBdEIsRUFBbUM7QUFDeEUsT0FBS2pCLGFBQUwsQ0FBbUJZLFNBQW5CLElBQWdDLEtBQUtYLEdBQUwsQ0FBU2tCLFFBQVQsQ0FBa0JQLFNBQWxCLEVBQTZCSyxXQUE3QixDQUFoQztBQUNBLE9BQUtqQixhQUFMLENBQW1CWSxTQUFuQixJQUFnQzVCLFFBQVFNLFlBQVIsQ0FBcUIsS0FBS1UsYUFBTCxDQUFtQlksU0FBbkIsQ0FBckIsQ0FBaEM7QUFDQSxTQUFPLEtBQUtaLGFBQUwsQ0FBbUJZLFNBQW5CLENBQVA7QUFDRCxDQUpEOztBQU1BZixnQkFBZ0IwRSxJQUFoQixHQUF1QjtBQUFBLFNBQU9sRixJQUFJbUYsS0FBSixDQUFVQyxJQUFWLENBQWVDLE1BQWYsRUFBUDtBQUFBLENBQXZCOztBQUVBN0UsZ0JBQWdCOEUsY0FBaEIsR0FBaUMsVUFBQ0MsR0FBRDtBQUFBLFNBQVV2RixJQUFJbUYsS0FBSixDQUFVQyxJQUFWLENBQWVJLFVBQWYsQ0FBMEJELEdBQTFCLENBQVY7QUFBQSxDQUFqQzs7QUFFQS9FLGdCQUFnQmlGLGNBQWhCLEdBQWlDLFVBQUNDLEdBQUQ7QUFBQSxTQUFVLElBQUkxRixJQUFJbUYsS0FBSixDQUFVQyxJQUFkLENBQW1CTSxHQUFuQixDQUFWO0FBQUEsQ0FBakM7O0FBRUFsRixnQkFBZ0JtRixRQUFoQixHQUEyQjtBQUFBLFNBQU8zRixJQUFJbUYsS0FBSixDQUFVUyxRQUFWLENBQW1CQyxHQUFuQixFQUFQO0FBQUEsQ0FBM0I7O0FBRUFyRixnQkFBZ0JzRixnQkFBaEIsR0FBbUMsVUFBQ0MsSUFBRDtBQUFBLFNBQVcvRixJQUFJbUYsS0FBSixDQUFVUyxRQUFWLENBQW1CSSxRQUFuQixDQUE0QkQsSUFBNUIsQ0FBWDtBQUFBLENBQW5DOztBQUVBdkYsZ0JBQWdCeUYsa0JBQWhCLEdBQXFDLFVBQUNWLEdBQUQ7QUFBQSxTQUFVdkYsSUFBSW1GLEtBQUosQ0FBVVMsUUFBVixDQUFtQkosVUFBbkIsQ0FBOEJELEdBQTlCLENBQVY7QUFBQSxDQUFyQzs7QUFFQS9FLGdCQUFnQjBGLGtCQUFoQixHQUFxQyxVQUFDUixHQUFEO0FBQUEsU0FBVSxJQUFJMUYsSUFBSW1GLEtBQUosQ0FBVVMsUUFBZCxDQUF1QkYsR0FBdkIsQ0FBVjtBQUFBLENBQXJDOztBQUVBbEYsZ0JBQWdCMkYsV0FBaEIsR0FBOEIsVUFBQ0osSUFBRDtBQUFBLFNBQVcvRixJQUFJbUYsS0FBSixDQUFVUyxRQUFWLENBQW1CUSxHQUFuQixDQUF1QkwsSUFBdkIsQ0FBWDtBQUFBLENBQTlCOztBQUVBdkYsZ0JBQWdCNkYsV0FBaEIsR0FBOEIsVUFBQ04sSUFBRDtBQUFBLFNBQVcvRixJQUFJbUYsS0FBSixDQUFVUyxRQUFWLENBQW1CVSxHQUFuQixDQUF1QlAsSUFBdkIsQ0FBWDtBQUFBLENBQTlCOztBQUVBdkYsZ0JBQWdCMkMsU0FBaEIsQ0FBMEJvRCxPQUExQixHQUFvQyxTQUFTOUYsQ0FBVCxDQUFXK0YsT0FBWCxFQUFvQjlGLE9BQXBCLEVBQTZCVSxRQUE3QixFQUF1QztBQUN6RSxNQUFJdUQsVUFBVTFCLE1BQVYsS0FBcUIsQ0FBekIsRUFBNEI7QUFDMUI3QixlQUFXVixPQUFYO0FBQ0FBLGNBQVUsRUFBVjtBQUNEOztBQUVELE1BQU1rRSxXQUFXO0FBQ2Y2QixhQUFTO0FBRE0sR0FBakI7O0FBSUEvRixZQUFVZCxFQUFFa0YsWUFBRixDQUFlcEUsT0FBZixFQUF3QmtFLFFBQXhCLENBQVY7O0FBRUEsTUFBTThCLGNBQWMsS0FBSy9GLGFBQUwsQ0FBbUJnRyxPQUFPQyxJQUFQLENBQVksS0FBS2pHLGFBQWpCLEVBQWdDLENBQWhDLENBQW5CLENBQXBCO0FBQ0EsTUFBTWtHLGNBQWMsRUFBcEI7O0FBRUEsTUFBSUMsb0JBQUo7QUFDQW5ILFVBQVFrRCxHQUFSLENBQVlnRSxXQUFaLEVBQ0d6RSxJQURILENBQ1EsWUFBTTtBQUNWLFFBQUlvRSxRQUFRdkQsTUFBUixHQUFpQixDQUFyQixFQUF3QjtBQUN0QixhQUFPeUQsWUFBWUssa0JBQVosQ0FBK0JQLE9BQS9CLEVBQXdDOUYsT0FBeEMsQ0FBUDtBQUNEO0FBQ0QsUUFBSThGLFFBQVF2RCxNQUFSLEdBQWlCLENBQXJCLEVBQXdCO0FBQ3RCNUMsWUFBTSxzRUFBTjtBQUNBLGFBQU9xRyxZQUFZTSxrQkFBWixDQUErQlIsUUFBUSxDQUFSLEVBQVdTLEtBQTFDLEVBQWlEVCxRQUFRLENBQVIsRUFBV1UsTUFBNUQsRUFBb0V4RyxPQUFwRSxDQUFQO0FBQ0Q7QUFDREwsVUFBTSx5RUFBTjtBQUNBLFdBQU8sRUFBUDtBQUNELEdBWEgsRUFZRytCLElBWkgsQ0FZUSxVQUFDK0UsUUFBRCxFQUFjO0FBQ2xCTCxrQkFBY0ssUUFBZDtBQUNBLFNBQUssSUFBSXBELElBQUksQ0FBYixFQUFnQkEsSUFBSXlDLFFBQVF2RCxNQUE1QixFQUFvQ2MsR0FBcEMsRUFBeUM7QUFDdkMsVUFBTXFELG9CQUFvQlosUUFBUXpDLENBQVIsRUFBV3NELFVBQVgsRUFBMUI7QUFDQSxVQUFJRCxzQkFBc0IsSUFBMUIsRUFBZ0M7QUFDOUJoRyxpQkFBU2dHLGlCQUFUO0FBQ0E7QUFDRDtBQUNGO0FBQ0RoRyxhQUFTLElBQVQsRUFBZTBGLFdBQWY7QUFDRCxHQXRCSCxFQXVCR2hFLEtBdkJILENBdUJTLFVBQUNDLEdBQUQsRUFBUztBQUNkM0IsYUFBUzJCLEdBQVQ7QUFDRCxHQXpCSDtBQTBCRCxDQTFDRDs7QUE0Q0F2QyxnQkFBZ0IyQyxTQUFoQixDQUEwQm1FLFlBQTFCLEdBQXlDM0gsUUFBUVMsU0FBUixDQUFrQkksZ0JBQWdCMkMsU0FBaEIsQ0FBMEJvRCxPQUE1QyxDQUF6Qzs7QUFFQS9GLGdCQUFnQitGLE9BQWhCLEdBQTBCLFNBQVM5RixDQUFULENBQVcrRixPQUFYLEVBQW9COUYsT0FBcEIsRUFBNkJVLFFBQTdCLEVBQXVDO0FBQy9ELE1BQUl1RCxVQUFVMUIsTUFBVixLQUFxQixDQUF6QixFQUE0QjtBQUMxQjdCLGVBQVdWLE9BQVg7QUFDQUEsY0FBVSxFQUFWO0FBQ0Q7O0FBRUQsTUFBTWtFLFdBQVc7QUFDZjZCLGFBQVM7QUFETSxHQUFqQjs7QUFJQS9GLFlBQVVkLEVBQUVrRixZQUFGLENBQWVwRSxPQUFmLEVBQXdCa0UsUUFBeEIsQ0FBVjs7QUFFQXBFLGtCQUFnQjJDLFNBQWhCLENBQTBCb0QsT0FBMUIsQ0FBa0NnQixJQUFsQyxDQUF1Qy9HLGVBQXZDLEVBQXdEZ0csT0FBeEQsRUFBaUU5RixPQUFqRSxFQUEwRVUsUUFBMUU7QUFDRCxDQWJEOztBQWVBWixnQkFBZ0I4RyxZQUFoQixHQUErQjNILFFBQVFTLFNBQVIsQ0FBa0JJLGdCQUFnQitGLE9BQWxDLENBQS9COztBQUVBL0YsZ0JBQWdCZ0IsNkJBQWhCLEdBQWdELFVBQUNnRyxRQUFEO0FBQUEsU0FDOUNBLFNBQVNDLEtBQVQsQ0FBZSxDQUFmLEVBQWtCRCxTQUFTRSxXQUFULENBQXFCLEdBQXJCLENBQWxCLEVBQTZDQyxPQUE3QyxDQUFxRCxPQUFyRCxFQUE4RCxFQUE5RCxDQUQ4QztBQUFBLENBQWhEOztBQUlBaEIsT0FBT2lCLGdCQUFQLENBQXdCcEgsZUFBeEIsRUFBeUM7QUFDdkNxSCxpQkFBZTtBQUNiQyxVQUFNO0FBQ0osYUFBTzlILElBQUltRixLQUFKLENBQVUwQyxhQUFqQjtBQUNEO0FBSFksR0FEd0I7QUFNdkNFLGFBQVc7QUFDVEQsVUFBTTtBQUNKLGFBQU85SCxJQUFJbUYsS0FBWDtBQUNEO0FBSFEsR0FONEI7QUFXdkM2QyxVQUFRO0FBQ05GLFVBQU07QUFDSixhQUFPOUgsR0FBUDtBQUNEO0FBSEssR0FYK0I7QUFnQnZDaUksWUFBVTtBQUNSSCxVQUFNO0FBQ0osYUFBT3RILGdCQUFnQkcsYUFBdkI7QUFDRDtBQUhPLEdBaEI2QjtBQXFCdkN1SCxTQUFPO0FBQ0xKLFVBQU07QUFDSixhQUFPdEgsZ0JBQWdCSSxHQUFoQixDQUFvQnNILEtBQTNCO0FBQ0Q7QUFISSxHQXJCZ0M7QUEwQnZDQyxjQUFZO0FBQ1ZMLFVBQU07QUFDSixhQUFPbkksUUFBUVMsU0FBUixDQUFrQkksZ0JBQWdCSSxHQUFoQixDQUFvQnNILEtBQXRDLENBQVA7QUFDRDtBQUhTO0FBMUIyQixDQUF6Qzs7QUFrQ0F2QixPQUFPaUIsZ0JBQVAsQ0FBd0JwSCxnQkFBZ0IyQyxTQUF4QyxFQUFtRDtBQUNqRDBFLGlCQUFlO0FBQ2JDLFVBQU07QUFDSixhQUFPOUgsSUFBSW1GLEtBQUosQ0FBVTBDLGFBQWpCO0FBQ0Q7QUFIWSxHQURrQztBQU1qREUsYUFBVztBQUNURCxVQUFNO0FBQ0osYUFBTzlILElBQUltRixLQUFYO0FBQ0Q7QUFIUSxHQU5zQztBQVdqRDZDLFVBQVE7QUFDTkYsVUFBTTtBQUNKLGFBQU85SCxHQUFQO0FBQ0Q7QUFISyxHQVh5QztBQWdCakRpSSxZQUFVO0FBQ1JILFVBQU07QUFDSixhQUFPLEtBQUtuSCxhQUFaO0FBQ0Q7QUFITyxHQWhCdUM7QUFxQmpEdUgsU0FBTztBQUNMSixVQUFNO0FBQ0osYUFBTyxLQUFLbEgsR0FBTCxDQUFTc0gsS0FBaEI7QUFDRDtBQUhJLEdBckIwQztBQTBCakRDLGNBQVk7QUFDVkwsVUFBTTtBQUNKLGFBQU9uSSxRQUFRUyxTQUFSLENBQWtCLEtBQUtRLEdBQUwsQ0FBU3NILEtBQTNCLENBQVA7QUFDRDtBQUhTO0FBMUJxQyxDQUFuRDs7QUFpQ0ExSCxnQkFBZ0IyQyxTQUFoQixDQUEwQitCLElBQTFCLEdBQWlDMUUsZ0JBQWdCMEUsSUFBakQ7QUFDQTFFLGdCQUFnQjJDLFNBQWhCLENBQTBCbUMsY0FBMUIsR0FBMkM5RSxnQkFBZ0I4RSxjQUEzRDtBQUNBOUUsZ0JBQWdCMkMsU0FBaEIsQ0FBMEJzQyxjQUExQixHQUEyQ2pGLGdCQUFnQmlGLGNBQTNEO0FBQ0FqRixnQkFBZ0IyQyxTQUFoQixDQUEwQndDLFFBQTFCLEdBQXFDbkYsZ0JBQWdCbUYsUUFBckQ7QUFDQW5GLGdCQUFnQjJDLFNBQWhCLENBQTBCMkMsZ0JBQTFCLEdBQTZDdEYsZ0JBQWdCc0YsZ0JBQTdEO0FBQ0F0RixnQkFBZ0IyQyxTQUFoQixDQUEwQjhDLGtCQUExQixHQUErQ3pGLGdCQUFnQnlGLGtCQUEvRDtBQUNBekYsZ0JBQWdCMkMsU0FBaEIsQ0FBMEIrQyxrQkFBMUIsR0FBK0MxRixnQkFBZ0IwRixrQkFBL0Q7QUFDQTFGLGdCQUFnQjJDLFNBQWhCLENBQTBCZ0QsV0FBMUIsR0FBd0MzRixnQkFBZ0IyRixXQUF4RDtBQUNBM0YsZ0JBQWdCMkMsU0FBaEIsQ0FBMEJrRCxXQUExQixHQUF3QzdGLGdCQUFnQjZGLFdBQXhEOztBQUVBN0YsZ0JBQWdCMkMsU0FBaEIsQ0FBMEIzQiw2QkFBMUIsR0FBMERoQixnQkFBZ0JnQiw2QkFBMUU7O0FBRUE0RyxPQUFPQyxPQUFQLEdBQWlCN0gsZUFBakIiLCJmaWxlIjoiZXhwcmVzc0Nhc3NhbmRyYS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHNlbXZlciA9IHJlcXVpcmUoJ3NlbXZlcicpO1xuXG5pZiAoIXNlbXZlci5zYXRpc2ZpZXMocHJvY2Vzcy52ZXJzaW9uLCAnPj02LjAuMCcpKSB7XG4gIHJlcXVpcmUoJ2JhYmVsLXBvbHlmaWxsJyk7XG59XG5cbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCdibHVlYmlyZCcpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxubGV0IGRzZURyaXZlcjtcbnRyeSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMsIGltcG9ydC9uby11bnJlc29sdmVkXG4gIGRzZURyaXZlciA9IHJlcXVpcmUoJ2RzZS1kcml2ZXInKTtcbn0gY2F0Y2ggKGUpIHtcbiAgZHNlRHJpdmVyID0gbnVsbDtcbn1cblxuY29uc3QgY3FsID0gUHJvbWlzZS5wcm9taXNpZnlBbGwoZHNlRHJpdmVyIHx8IHJlcXVpcmUoJ2Nhc3NhbmRyYS1kcml2ZXInKSk7XG5cbmNvbnN0IE9STSA9IFByb21pc2UucHJvbWlzaWZ5QWxsKHJlcXVpcmUoJy4vb3JtL2Fwb2xsbycpKTtcbmNvbnN0IHJlYWRkaXJwQXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShyZXF1aXJlKCdyZWFkZGlycCcpKTtcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnZXhwcmVzcy1jYXNzYW5kcmEnKTtcblxuY29uc3QgZXhwb3J0ZXIgPSByZXF1aXJlKCcuL3V0aWxzL2V4cG9ydGVyJyk7XG5jb25zdCBpbXBvcnRlciA9IHJlcXVpcmUoJy4vdXRpbHMvaW1wb3J0ZXInKTtcblxuY29uc3QgQ2Fzc2FuZHJhQ2xpZW50ID0gZnVuY3Rpb24gZihvcHRpb25zKSB7XG4gIHRoaXMubW9kZWxJbnN0YW5jZSA9IHt9O1xuICB0aGlzLm9ybSA9IG5ldyBPUk0ob3B0aW9ucy5jbGllbnRPcHRpb25zLCBvcHRpb25zLm9ybU9wdGlvbnMpO1xuICB0aGlzLm9ybSA9IFByb21pc2UucHJvbWlzaWZ5QWxsKHRoaXMub3JtKTtcbn07XG5cbkNhc3NhbmRyYUNsaWVudC5jcmVhdGVDbGllbnQgPSAob3B0aW9ucykgPT4gKG5ldyBDYXNzYW5kcmFDbGllbnQob3B0aW9ucykpO1xuXG5DYXNzYW5kcmFDbGllbnQuc2V0RGlyZWN0b3J5ID0gKGRpcmVjdG9yeSkgPT4ge1xuICBDYXNzYW5kcmFDbGllbnQuZGlyZWN0b3J5ID0gZGlyZWN0b3J5O1xuICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50O1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnN5bmNNb2RlbEZpbGVUb0RCID0gKGZpbGUsIGNhbGxiYWNrKSA9PiB7XG4gIGlmICghZmlsZS5uYW1lLmluY2x1ZGVzKCdNb2RlbCcpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtb2RlbE5hbWUgPSBDYXNzYW5kcmFDbGllbnQuX3RyYW5zbGF0ZUZpbGVOYW1lVG9Nb2RlbE5hbWUoZmlsZS5uYW1lKTtcblxuICBpZiAobW9kZWxOYW1lKSB7XG4gICAgY29uc3QgZmlsZUxvY2F0aW9uID0gcGF0aC5qb2luKENhc3NhbmRyYUNsaWVudC5kaXJlY3RvcnksIGZpbGUucGF0aCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1keW5hbWljLXJlcXVpcmVcbiAgICBjb25zdCBkZWZhdWx0TW9kZWxTY2hlbWEgPSByZXF1aXJlKGZpbGVMb2NhdGlvbik7XG4gICAgY29uc3QgbW9kZWxTY2hlbWEgPSBkZWZhdWx0TW9kZWxTY2hlbWEuZGVmYXVsdCA/IGRlZmF1bHRNb2RlbFNjaGVtYS5kZWZhdWx0IDogZGVmYXVsdE1vZGVsU2NoZW1hO1xuICAgIENhc3NhbmRyYUNsaWVudC5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0gPSBDYXNzYW5kcmFDbGllbnQub3JtLmFkZE1vZGVsKG1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpLCBtb2RlbFNjaGVtYSk7XG4gICAgQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2VbbW9kZWxOYW1lXS5zeW5jREIoY2FsbGJhY2spO1xuICAgIENhc3NhbmRyYUNsaWVudC5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0gPSBQcm9taXNlLnByb21pc2lmeUFsbChDYXNzYW5kcmFDbGllbnQubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjYWxsYmFjaygpO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmJpbmQgPSAob3B0aW9ucywgY2IpID0+IHtcbiAgQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2UgPSB7fTtcbiAgQ2Fzc2FuZHJhQ2xpZW50Lm9ybSA9IG5ldyBPUk0ob3B0aW9ucy5jbGllbnRPcHRpb25zLCBvcHRpb25zLm9ybU9wdGlvbnMpO1xuICBDYXNzYW5kcmFDbGllbnQub3JtID0gUHJvbWlzZS5wcm9taXNpZnlBbGwoQ2Fzc2FuZHJhQ2xpZW50Lm9ybSk7XG4gIENhc3NhbmRyYUNsaWVudC5vcm0uaW5pdEFzeW5jKClcbiAgICAudGhlbigoKSA9PiByZWFkZGlycEFzeW5jKHtcbiAgICAgIHJvb3Q6IENhc3NhbmRyYUNsaWVudC5kaXJlY3RvcnksXG4gICAgICBmaWxlRmlsdGVyOiBbXG4gICAgICAgICcqLmpzJywgJyouamF2YXNjcmlwdCcsICcqLmpzeCcsICcqLmNvZmZlZScsICcqLmNvZmZlZXNjcmlwdCcsICcqLmljZWQnLFxuICAgICAgICAnKi5zY3JpcHQnLCAnKi50cycsICcqLnRzeCcsICcqLnR5cGVzY3JpcHQnLCAnKi5janN4JywgJyouY28nLCAnKi5qc29uJyxcbiAgICAgICAgJyouanNvbjUnLCAnKi5saXRjb2ZmZWUnLCAnKi5saXRpY2VkJywgJyoubHMnLCAnKi5ub2RlJywgJyoudG9tbCcsICcqLndpc3AnLFxuICAgICAgXSxcbiAgICB9KSlcbiAgICAudGhlbigoZmlsZUxpc3QpID0+IHtcbiAgICAgIGNvbnN0IHN5bmNNb2RlbFRhc2tzID0gW107XG4gICAgICBjb25zdCBzeW5jTW9kZWxGaWxlVG9EQkFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LnN5bmNNb2RlbEZpbGVUb0RCKTtcbiAgICAgIGZpbGVMaXN0ID0gZmlsZUxpc3QuZmlsZXM7XG4gICAgICBmaWxlTGlzdC5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgIHN5bmNNb2RlbFRhc2tzLnB1c2goc3luY01vZGVsRmlsZVRvREJBc3luYyhmaWxlKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChzeW5jTW9kZWxUYXNrcyk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAoY2IpIGNiKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGNiICYmIF8uaXNBcnJheShlcnIpICYmIGVyci5sZW5ndGggPiAwKSBjYihlcnJbMF0pO1xuICAgICAgZWxzZSBpZiAoY2IpIGNiKGVycik7XG4gICAgfSk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuYmluZEFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LmJpbmQpO1xuXG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBmKGNhbGxiYWNrKSB7XG4gIHRoaXMub3JtLmluaXQoY2FsbGJhY2spO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5pbml0QXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmluaXQpO1xuXG5DYXNzYW5kcmFDbGllbnQuZ2V0VGFibGVMaXN0ID0gZnVuY3Rpb24gZihjYWxsYmFjaykge1xuICBjb25zdCBzeXN0ZW1DbGllbnQgPSB0aGlzLm9ybS5nZXRfc3lzdGVtX2NsaWVudCgpO1xuICBjb25zdCBrZXlzcGFjZSA9IHRoaXMub3JtLmdldF9rZXlzcGFjZV9uYW1lKCk7XG4gIGNvbnN0IHRhYmxlcyA9IFtdO1xuXG4gIHN5c3RlbUNsaWVudC5jb25uZWN0KClcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBzeXN0ZW1RdWVyeSA9ICdTRUxFQ1QgdGFibGVfbmFtZSBGUk9NIHN5c3RlbV9zY2hlbWEudGFibGVzIFdIRVJFIGtleXNwYWNlX25hbWUgPSA/JztcbiAgICAgIGRlYnVnKGBGaW5kaW5nIHRhYmxlcyBpbiBrZXlzcGFjZTogJHtrZXlzcGFjZX1gKTtcbiAgICAgIHJldHVybiBzeXN0ZW1DbGllbnQuZXhlY3V0ZShzeXN0ZW1RdWVyeSwgW2tleXNwYWNlXSk7XG4gICAgfSlcbiAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRhYmxlcy5wdXNoKHJlc3VsdC5yb3dzW2ldLnRhYmxlX25hbWUpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4gc3lzdGVtQ2xpZW50LnNodXRkb3duKCkpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgY2FsbGJhY2sobnVsbCwgdGFibGVzKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmdldFRhYmxlTGlzdEFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LmdldFRhYmxlTGlzdCk7XG5cbkNhc3NhbmRyYUNsaWVudC5leHBvcnQgPSBmdW5jdGlvbiBmKGZpeHR1cmVEaXJlY3RvcnksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHN5c3RlbUNsaWVudCA9IHRoaXMub3JtLmdldF9zeXN0ZW1fY2xpZW50KCk7XG4gIGNvbnN0IGtleXNwYWNlID0gdGhpcy5vcm0uZ2V0X2tleXNwYWNlX25hbWUoKTtcblxuICBzeXN0ZW1DbGllbnQuY29ubmVjdCgpXG4gICAgLnRoZW4oKCkgPT4gdGhpcy5nZXRUYWJsZUxpc3RBc3luYygpKVxuICAgIC50aGVuKCh0YWJsZXMpID0+XG4gICAgICBQcm9taXNlLmVhY2godGFibGVzLCAodGFibGUpID0+XG4gICAgICAgIGV4cG9ydGVyLnByb2Nlc3NUYWJsZUV4cG9ydChzeXN0ZW1DbGllbnQsIGZpeHR1cmVEaXJlY3RvcnksIGtleXNwYWNlLCB0YWJsZSkpKVxuICAgIC50aGVuKCgpID0+IHN5c3RlbUNsaWVudC5zaHV0ZG93bigpKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGRlYnVnKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICAgICAgZGVidWcoYENvbXBsZXRlZCBleHBvcnRpbmcgYWxsIHRhYmxlcyBmcm9tIGtleXNwYWNlOiAke2tleXNwYWNlfWApO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBkZWJ1ZyhlcnIpO1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9KTtcbn07XG5cbkNhc3NhbmRyYUNsaWVudC5leHBvcnRBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5leHBvcnQpO1xuXG5DYXNzYW5kcmFDbGllbnQuaW1wb3J0ID0gZnVuY3Rpb24gZihmaXh0dXJlRGlyZWN0b3J5LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBiYXRjaFNpemU6IDEsXG4gIH07XG5cbiAgb3B0aW9ucyA9IF8uZGVmYXVsdHNEZWVwKG9wdGlvbnMsIGRlZmF1bHRzKTtcblxuICBjb25zdCBzeXN0ZW1DbGllbnQgPSB0aGlzLm9ybS5nZXRfc3lzdGVtX2NsaWVudCgpO1xuICBjb25zdCBrZXlzcGFjZSA9IHRoaXMub3JtLmdldF9rZXlzcGFjZV9uYW1lKCk7XG5cbiAgc3lzdGVtQ2xpZW50LmNvbm5lY3QoKVxuICAgIC50aGVuKCgpID0+IHRoaXMuZ2V0VGFibGVMaXN0QXN5bmMoKSlcbiAgICAudGhlbigodGFibGVzKSA9PlxuICAgICAgUHJvbWlzZS5lYWNoKHRhYmxlcywgKHRhYmxlKSA9PlxuICAgICAgICBpbXBvcnRlci5wcm9jZXNzVGFibGVJbXBvcnQoc3lzdGVtQ2xpZW50LCBmaXh0dXJlRGlyZWN0b3J5LCBrZXlzcGFjZSwgdGFibGUsIG9wdGlvbnMuYmF0Y2hTaXplKSkpXG4gICAgLnRoZW4oKCkgPT4gc3lzdGVtQ2xpZW50LnNodXRkb3duKCkpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgZGVidWcoJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gICAgICBkZWJ1ZyhgQ29tcGxldGVkIGltcG9ydGluZyB0byBrZXlzcGFjZTogJHtrZXlzcGFjZX1gKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZGVidWcoZXJyKTtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuaW1wb3J0QXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQuaW1wb3J0KTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5sb2FkU2NoZW1hID0gZnVuY3Rpb24gZihtb2RlbE5hbWUsIG1vZGVsU2NoZW1hKSB7XG4gIHRoaXMubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdID0gdGhpcy5vcm0uYWRkTW9kZWwobW9kZWxOYW1lLCBtb2RlbFNjaGVtYSk7XG4gIHRoaXMubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdID0gUHJvbWlzZS5wcm9taXNpZnlBbGwodGhpcy5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0pO1xuICByZXR1cm4gdGhpcy5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV07XG59O1xuXG5DYXNzYW5kcmFDbGllbnQudXVpZCA9ICgpID0+IChjcWwudHlwZXMuVXVpZC5yYW5kb20oKSk7XG5cbkNhc3NhbmRyYUNsaWVudC51dWlkRnJvbVN0cmluZyA9IChzdHIpID0+IChjcWwudHlwZXMuVXVpZC5mcm9tU3RyaW5nKHN0cikpO1xuXG5DYXNzYW5kcmFDbGllbnQudXVpZEZyb21CdWZmZXIgPSAoYnVmKSA9PiAobmV3IGNxbC50eXBlcy5VdWlkKGJ1ZikpO1xuXG5DYXNzYW5kcmFDbGllbnQudGltZXV1aWQgPSAoKSA9PiAoY3FsLnR5cGVzLlRpbWVVdWlkLm5vdygpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbURhdGUgPSAoZGF0ZSkgPT4gKGNxbC50eXBlcy5UaW1lVXVpZC5mcm9tRGF0ZShkYXRlKSk7XG5cbkNhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21TdHJpbmcgPSAoc3RyKSA9PiAoY3FsLnR5cGVzLlRpbWVVdWlkLmZyb21TdHJpbmcoc3RyKSk7XG5cbkNhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21CdWZmZXIgPSAoYnVmKSA9PiAobmV3IGNxbC50eXBlcy5UaW1lVXVpZChidWYpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Lm1heFRpbWV1dWlkID0gKGRhdGUpID0+IChjcWwudHlwZXMuVGltZVV1aWQubWF4KGRhdGUpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Lm1pblRpbWV1dWlkID0gKGRhdGUpID0+IChjcWwudHlwZXMuVGltZVV1aWQubWluKGRhdGUpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5kb0JhdGNoID0gZnVuY3Rpb24gZihxdWVyaWVzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBwcmVwYXJlOiB0cnVlLFxuICB9O1xuXG4gIG9wdGlvbnMgPSBfLmRlZmF1bHRzRGVlcChvcHRpb25zLCBkZWZhdWx0cyk7XG5cbiAgY29uc3QgcmFuZG9tTW9kZWwgPSB0aGlzLm1vZGVsSW5zdGFuY2VbT2JqZWN0LmtleXModGhpcy5tb2RlbEluc3RhbmNlKVswXV07XG4gIGNvbnN0IGJlZm9yZUhvb2tzID0gW107XG5cbiAgbGV0IGJhdGNoUmVzdWx0O1xuICBQcm9taXNlLmFsbChiZWZvcmVIb29rcylcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAocXVlcmllcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiByYW5kb21Nb2RlbC5leGVjdXRlX2JhdGNoQXN5bmMocXVlcmllcywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAocXVlcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRlYnVnKCdzaW5nbGUgcXVlcnkgcHJvdmlkZWQgZm9yIGJhdGNoIHJlcXVlc3QsIGFwcGx5aW5nIGFzIG5vbiBiYXRjaCBxdWVyeScpO1xuICAgICAgICByZXR1cm4gcmFuZG9tTW9kZWwuZXhlY3V0ZV9xdWVyeUFzeW5jKHF1ZXJpZXNbMF0ucXVlcnksIHF1ZXJpZXNbMF0ucGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdubyBxdWVyaWVzIHByb3ZpZGVkIGZvciBiYXRjaCByZXF1ZXN0LCBlbXB0eSBhcnJheSBmb3VuZCwgZG9pbmcgbm90aGluZycpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBiYXRjaFJlc3VsdCA9IHJlc3BvbnNlO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFmdGVySG9va1Jlc3BvbnNlID0gcXVlcmllc1tpXS5hZnRlcl9ob29rKCk7XG4gICAgICAgIGlmIChhZnRlckhvb2tSZXNwb25zZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIGNhbGxiYWNrKGFmdGVySG9va1Jlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwsIGJhdGNoUmVzdWx0KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5kb0JhdGNoQXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmRvQmF0Y2gpO1xuXG5DYXNzYW5kcmFDbGllbnQuZG9CYXRjaCA9IGZ1bmN0aW9uIGYocXVlcmllcywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgcHJlcGFyZTogdHJ1ZSxcbiAgfTtcblxuICBvcHRpb25zID0gXy5kZWZhdWx0c0RlZXAob3B0aW9ucywgZGVmYXVsdHMpO1xuXG4gIENhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUuZG9CYXRjaC5jYWxsKENhc3NhbmRyYUNsaWVudCwgcXVlcmllcywgb3B0aW9ucywgY2FsbGJhY2spO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmRvQmF0Y2hBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5kb0JhdGNoKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Ll90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lID0gKGZpbGVOYW1lKSA9PiAoXG4gIGZpbGVOYW1lLnNsaWNlKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykpLnJlcGxhY2UoJ01vZGVsJywgJycpXG4pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYXNzYW5kcmFDbGllbnQsIHtcbiAgY29uc2lzdGVuY2llczoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjcWwudHlwZXMuY29uc2lzdGVuY2llcztcbiAgICB9LFxuICB9LFxuICBkYXRhdHlwZXM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsLnR5cGVzO1xuICAgIH0sXG4gIH0sXG4gIGRyaXZlcjoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjcWw7XG4gICAgfSxcbiAgfSxcbiAgaW5zdGFuY2U6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2U7XG4gICAgfSxcbiAgfSxcbiAgY2xvc2U6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50Lm9ybS5jbG9zZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZUFzeW5jOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5vcm0uY2xvc2UpO1xuICAgIH0sXG4gIH0sXG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLCB7XG4gIGNvbnNpc3RlbmNpZXM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsLnR5cGVzLmNvbnNpc3RlbmNpZXM7XG4gICAgfSxcbiAgfSxcbiAgZGF0YXR5cGVzOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGNxbC50eXBlcztcbiAgICB9LFxuICB9LFxuICBkcml2ZXI6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsO1xuICAgIH0sXG4gIH0sXG4gIGluc3RhbmNlOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZWxJbnN0YW5jZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZToge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ybS5jbG9zZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZUFzeW5jOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucHJvbWlzaWZ5KHRoaXMub3JtLmNsb3NlKTtcbiAgICB9LFxuICB9LFxufSk7XG5cbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudXVpZCA9IENhc3NhbmRyYUNsaWVudC51dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS51dWlkRnJvbVN0cmluZyA9IENhc3NhbmRyYUNsaWVudC51dWlkRnJvbVN0cmluZztcbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudXVpZEZyb21CdWZmZXIgPSBDYXNzYW5kcmFDbGllbnQudXVpZEZyb21CdWZmZXI7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkID0gQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS50aW1ldXVpZEZyb21EYXRlID0gQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbURhdGU7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkRnJvbVN0cmluZyA9IENhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21TdHJpbmc7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkRnJvbUJ1ZmZlciA9IENhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21CdWZmZXI7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLm1heFRpbWV1dWlkID0gQ2Fzc2FuZHJhQ2xpZW50Lm1heFRpbWV1dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5taW5UaW1ldXVpZCA9IENhc3NhbmRyYUNsaWVudC5taW5UaW1ldXVpZDtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZSA9IENhc3NhbmRyYUNsaWVudC5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYXNzYW5kcmFDbGllbnQ7XG4iXX0=
{
"name": "express-cassandra",
"version": "2.6.0",
"version": "2.7.0",
"dependencies": {

@@ -5,0 +5,0 @@ "JSONStream": "^1.3.1",

@@ -1,6 +0,6 @@

[![Build Status](https://travis-ci.org/masumsoft/express-cassandra.svg)](https://travis-ci.org/masumsoft/express-cassandra)
[![Build Status](https://app.travis-ci.com/masumsoft/express-cassandra.svg?branch=master)](https://app.travis-ci.com/masumsoft/express-cassandra)
[![Download Stats](https://img.shields.io/npm/dm/express-cassandra.svg)](https://www.npmjs.com/package/express-cassandra)
[![Npm Version](https://badge.fury.io/js/express-cassandra.svg)](https://www.npmjs.com/package/express-cassandra)
[![Documentation Status](https://readthedocs.org/projects/express-cassandra/badge/?version=latest)](http://express-cassandra.readthedocs.io/en/latest/?badge=latest)
[![Dependencies Status](https://david-dm.org/masumsoft/express-cassandra/status.svg)](https://david-dm.org/masumsoft/express-cassandra)
[![Dependency Status](https://img.shields.io/librariesio/github/masumsoft/express-cassandra)](https://github.com/masumsoft/express-cassandra/network/dependencies)
[![Mentioned in Awesome Cassandra](https://awesome.re/mentioned-badge.svg)](https://anant.github.io/awesome-cassandra/)

@@ -20,5 +20,10 @@

## Our Sponsors: ##
<table><tr>
<td align="center" width="300" ><a href="https://astra.dev/3shh4EF"><img src="https://www.datastax.com/sites/default/files/2021-07/astra-negative-square.png" width="90" height="90" alt="Astra DB" /><br />Astra DB</a><br/>Use Node/Express with DataStax Astra DB - built on Apache Cassandra.</td>
</tr></table>
## Supported Features
* supports the latest cassandra 3.x releases
* supports the latest cassandra 4.x and older stable 3.x releases
* support for elassandra index management and search queries

@@ -44,3 +49,3 @@ * support for janusgraph graph management and tinkerpop3 gremlin queries

For apache cassandra version 3.x or datastax enterprise
For apache cassandra version 4.x, 3.x or datastax enterprise

@@ -61,3 +66,3 @@ npm install express-cassandra

Please note that if you use the legacy cassandra 2.x compliant version then please use the corresponding README.md file for that version. The following documentation is for version 3.x and datastax enterprise 5.x only. The materialized view support and several other part of the documentation is strictly applicable for cassandra 3.x / dse 5.x and will not work in earlier versions of cassandra.
Please note that if you use the legacy cassandra 2.x compliant version then please use the corresponding README.md file for that version. The following documentation is for version 4.x, 3.x and datastax enterprise 6.x/5.x only. The materialized view support and several other part of the documentation is strictly applicable for cassandra 4.x/3.x or dse 6.x/5.x and will not work in earlier versions of cassandra.

@@ -80,3 +85,3 @@ # Documentation

* Express-cassandra started off from a highly modified version of [apollo-cassandra](https://github.com/3logic/apollo-cassandra) module. Afterwards major refactoring and new development went on to support missing features of cassandra 3.x and additional functionalities.
* Express-cassandra started off from a highly modified version of [apollo-cassandra](https://github.com/3logic/apollo-cassandra) module. Afterwards major refactoring and new development went on to support missing features of cassandra 3.x and beyond with support for additional functionalities.

@@ -83,0 +88,0 @@ * Apache Cassandra, Apache Lucene, Apache, Lucene, Solr, TinkerPop, and Cassandra are trademarks of the Apache Software Foundation or its subsidiaries in Canada, the United States and/or other countries.

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc