Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@apache-arrow/esnext-esm

Package Overview
Dependencies
Maintainers
1
Versions
45
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@apache-arrow/esnext-esm - npm Package Compare versions

Comparing version 0.0.4 to 0.1.1

37

CHANGELOG.md

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

# Change Log
<a name="0.1.1"></a>
## [0.1.1](https://github.com/graphistry/arrow/compare/v0.1.0...v0.1.1) (2017-08-26)
All notable changes to this project will be documented in this file.
See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
<a name="0.1.0"></a>
# 0.1.0 (2017-08-26)
### Bug Fixes
* **reader:** fix dictionary record batch reader, synthesize dictionary index metadata ([b33e371](https://github.com/graphistry/arrow/commit/b33e371))
<a name="0.0.4"></a>

@@ -10,8 +20,27 @@ ## 0.0.4 (2017-08-23)

### Bug Fixes
* **vectors:** fix vector iteration, add more tests, improve iteration performance ([3aeab5a](https://github.com/graphistry/arrow/commit/3aeab5a))
### Performance Improvements
* **vector:** avoid memcpy during slice if possible ([e453148](https://github.com/graphistry/arrow/commit/e453148))
<a name="0.0.3"></a>
## 0.0.3 (2017-08-16)
### Performance Improvements
* **tests:** Add perf tests and fill out Table API ([bfcc17c](https://github.com/graphistry/arrow/commit/bfcc17c))
* **VirtualVector:** Inline the `findVirtual` calls so we don't eat the cost of iterating. ([d46f812](https://github.com/graphistry/arrow/commit/d46f812))
<a name="0.0.2"></a>
## 0.0.2 (2017-08-15)
<a name="0.0.1"></a>
## 0.0.1 (2017-08-15)
### Bug Fixes

@@ -31,1 +60,3 @@

* **VirtualVector:** Inline the `findVirtual` calls so we don't eat the cost of iterating. ([d46f812](https://github.com/graphistry/arrow/commit/d46f812))

4

package.json

@@ -5,3 +5,3 @@ {

"name": "@apache-arrow/esnext-esm",
"version": "0.0.4",
"version": "0.1.1",
"description": "Apache's columnar in-memory data format for big data analytics",

@@ -25,2 +25,2 @@ "author": "Graphistry, Inc.",

}
}
}

@@ -21,10 +21,15 @@ // Licensed to the Apache Software Foundation (ASF) under one

if ((encoding = field.dictionary()) &&
(id = encoding.id().toFloat64().toString())) {
batch.id === (id = encoding.id().toFloat64().toString())) {
yield [id, readVector(field, batch, iterator, null)];
return;
}
for (let i = -1, n = field.childrenLength(); ++i < n;) {
yield* readDictionaries(field.children(i), batch, iterator, dictionaries);
// Since a dictionary batch can only contain a single vector, return early after we find it
for (let result of readDictionaries(field.children(i), batch, iterator, dictionaries)) {
yield result;
return;
}
}
}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlYWRlci9kaWN0aW9uYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCwrREFBK0Q7QUFDL0Qsd0RBQXdEO0FBQ3hELDZEQUE2RDtBQUM3RCxvREFBb0Q7QUFDcEQsNkRBQTZEO0FBQzdELDZEQUE2RDtBQUM3RCxFQUFFO0FBQ0YsK0NBQStDO0FBQy9DLEVBQUU7QUFDRiw2REFBNkQ7QUFDN0QsOERBQThEO0FBQzlELHlEQUF5RDtBQUN6RCw0REFBNEQ7QUFDNUQsMERBQTBEO0FBQzFELHFCQUFxQjtBQUVyQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBUXRDLE1BQU0sNEJBQTRCLEtBQVksRUFDWixLQUFtQixFQUNuQixRQUF1QixFQUN2QixZQUEwQjtJQUN4RCxJQUFJLEVBQVUsRUFBRSxRQUE0QixDQUFDO0lBQzdDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNwRCxPQUFPLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5RSxDQUFDO0FBQ0wsQ0FBQyIsImZpbGUiOiJyZWFkZXIvZGljdGlvbmFyeS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbi8vIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuLy8gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbi8vIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbi8vIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbi8vIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuLy8gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuLy8gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbi8vIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4vLyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbi8vIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbi8vIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG5pbXBvcnQgeyByZWFkVmVjdG9yIH0gZnJvbSAnLi92ZWN0b3InO1xuaW1wb3J0IHsgTWVzc2FnZUJhdGNoIH0gZnJvbSAnLi9tZXNzYWdlJztcbmltcG9ydCAqIGFzIFNjaGVtYV8gZnJvbSAnLi4vZm9ybWF0L1NjaGVtYSc7XG5pbXBvcnQgeyBJdGVyYXRvclN0YXRlLCBEaWN0aW9uYXJpZXMgfSBmcm9tICcuL2Fycm93JztcblxuaW1wb3J0IEZpZWxkID0gU2NoZW1hXy5vcmcuYXBhY2hlLmFycm93LmZsYXRidWYuRmllbGQ7XG5pbXBvcnQgRGljdGlvbmFyeUVuY29kaW5nID0gU2NoZW1hXy5vcmcuYXBhY2hlLmFycm93LmZsYXRidWYuRGljdGlvbmFyeUVuY29kaW5nO1xuXG5leHBvcnQgZnVuY3Rpb24qIHJlYWREaWN0aW9uYXJpZXMoZmllbGQ6IEZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoOiBNZXNzYWdlQmF0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I6IEl0ZXJhdG9yU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyaWVzOiBEaWN0aW9uYXJpZXMpIHtcbiAgICBsZXQgaWQ6IHN0cmluZywgZW5jb2Rpbmc6IERpY3Rpb25hcnlFbmNvZGluZztcbiAgICBpZiAoKGVuY29kaW5nID0gZmllbGQuZGljdGlvbmFyeSgpKSAmJlxuICAgICAgICAoaWQgPSBlbmNvZGluZy5pZCgpLnRvRmxvYXQ2NCgpLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgIHlpZWxkIFtpZCwgcmVhZFZlY3RvcihmaWVsZCwgYmF0Y2gsIGl0ZXJhdG9yLCBudWxsKV07XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAtMSwgbiA9IGZpZWxkLmNoaWxkcmVuTGVuZ3RoKCk7ICsraSA8IG47KSB7XG4gICAgICAgIHlpZWxkKiByZWFkRGljdGlvbmFyaWVzKGZpZWxkLmNoaWxkcmVuKGkpLCBiYXRjaCwgaXRlcmF0b3IsIGRpY3Rpb25hcmllcyk7XG4gICAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlYWRlci9kaWN0aW9uYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCwrREFBK0Q7QUFDL0Qsd0RBQXdEO0FBQ3hELDZEQUE2RDtBQUM3RCxvREFBb0Q7QUFDcEQsNkRBQTZEO0FBQzdELDZEQUE2RDtBQUM3RCxFQUFFO0FBQ0YsK0NBQStDO0FBQy9DLEVBQUU7QUFDRiw2REFBNkQ7QUFDN0QsOERBQThEO0FBQzlELHlEQUF5RDtBQUN6RCw0REFBNEQ7QUFDNUQsMERBQTBEO0FBQzFELHFCQUFxQjtBQUVyQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBUXRDLE1BQU0sNEJBQTRCLEtBQVksRUFDWixLQUFtQixFQUNuQixRQUF1QixFQUN2QixZQUEwQjtJQUN4RCxJQUFJLEVBQVUsRUFBRSxRQUE0QixDQUFDO0lBQzdDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sQ0FBQztJQUNYLENBQUM7SUFDRCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ3BELDJGQUEyRjtRQUMzRixHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sTUFBTSxDQUFDO1lBQ2IsTUFBTSxDQUFDO1FBQ1gsQ0FBQztJQUNMLENBQUM7QUFDTCxDQUFDIiwiZmlsZSI6InJlYWRlci9kaWN0aW9uYXJ5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuLy8gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4vLyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuLy8gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuLy8gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuLy8gXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4vLyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4vLyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuLy8gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbi8vIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuLy8gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuLy8gdW5kZXIgdGhlIExpY2Vuc2UuXG5cbmltcG9ydCB7IHJlYWRWZWN0b3IgfSBmcm9tICcuL3ZlY3Rvcic7XG5pbXBvcnQgeyBNZXNzYWdlQmF0Y2ggfSBmcm9tICcuL21lc3NhZ2UnO1xuaW1wb3J0ICogYXMgU2NoZW1hXyBmcm9tICcuLi9mb3JtYXQvU2NoZW1hJztcbmltcG9ydCB7IEl0ZXJhdG9yU3RhdGUsIERpY3Rpb25hcmllcyB9IGZyb20gJy4vYXJyb3cnO1xuXG5pbXBvcnQgRmllbGQgPSBTY2hlbWFfLm9yZy5hcGFjaGUuYXJyb3cuZmxhdGJ1Zi5GaWVsZDtcbmltcG9ydCBEaWN0aW9uYXJ5RW5jb2RpbmcgPSBTY2hlbWFfLm9yZy5hcGFjaGUuYXJyb3cuZmxhdGJ1Zi5EaWN0aW9uYXJ5RW5jb2Rpbmc7XG5cbmV4cG9ydCBmdW5jdGlvbiogcmVhZERpY3Rpb25hcmllcyhmaWVsZDogRmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2g6IE1lc3NhZ2VCYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcjogSXRlcmF0b3JTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJpZXM6IERpY3Rpb25hcmllcykge1xuICAgIGxldCBpZDogc3RyaW5nLCBlbmNvZGluZzogRGljdGlvbmFyeUVuY29kaW5nO1xuICAgIGlmICgoZW5jb2RpbmcgPSBmaWVsZC5kaWN0aW9uYXJ5KCkpICYmXG4gICAgICAgIGJhdGNoLmlkID09PSAoaWQgPSBlbmNvZGluZy5pZCgpLnRvRmxvYXQ2NCgpLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgIHlpZWxkIFtpZCwgcmVhZFZlY3RvcihmaWVsZCwgYmF0Y2gsIGl0ZXJhdG9yLCBudWxsKV07XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IC0xLCBuID0gZmllbGQuY2hpbGRyZW5MZW5ndGgoKTsgKytpIDwgbjspIHtcbiAgICAgICAgLy8gU2luY2UgYSBkaWN0aW9uYXJ5IGJhdGNoIGNhbiBvbmx5IGNvbnRhaW4gYSBzaW5nbGUgdmVjdG9yLCByZXR1cm4gZWFybHkgYWZ0ZXIgd2UgZmluZCBpdFxuICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgcmVhZERpY3Rpb25hcmllcyhmaWVsZC5jaGlsZHJlbihpKSwgYmF0Y2gsIGl0ZXJhdG9yLCBkaWN0aW9uYXJpZXMpKSB7XG4gICAgICAgICAgICB5aWVsZCByZXN1bHQ7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=

@@ -17,2 +17,3 @@ // Licensed to the Apache Software Foundation (ASF) under one

// under the License.
import { flatbuffers } from 'flatbuffers';
import * as Schema_ from '../format/Schema';

@@ -27,2 +28,3 @@ import { StructVector } from '../vector/struct';

var VectorType = Schema_.org.apache.arrow.flatbuf.VectorType;
var VectorLayout = Schema_.org.apache.arrow.flatbuf.VectorLayout;
var FixedSizeList = Schema_.org.apache.arrow.flatbuf.FixedSizeList;

@@ -45,5 +47,7 @@ var FloatingPoint = Schema_.org.apache.arrow.flatbuf.FloatingPoint;

let id = encoding.id().toFloat64().toString();
let index = readIntVector(field, batch, iterator, null,
/* a dictionary index defaults to signed 32 bit int if unspecified */
encoding.indexType() || { bitWidth: () => 32, isSigned: () => true });
let fieldType = encoding.indexType() ||
/* a dictionary index defaults to signed 32 bit int if unspecified */
{ bitWidth: () => 32, isSigned: () => true };
let indexField = createSyntheticDictionaryIndexField(field, fieldType);
let index = readIntVector(indexField, batch, iterator, null, fieldType);
return DictionaryVector.create(field, index.length, index, dictionaries[id]);

@@ -116,3 +120,2 @@ }

let vectors = [];
iterator.bufferIndex -= field.nullable() ? 0 : field.layoutLength();
for (let i = -1, n = field.childrenLength(); ++i < n;) {

@@ -173,3 +176,24 @@ vectors[i] = readVector(field.children(i), batch, iterator, dictionaries);

}
function createSyntheticDictionaryIndexField(field, type) {
let layouts = [];
let builder = new flatbuffers.Builder();
if (field.nullable()) {
VectorLayout.startVectorLayout(builder);
VectorLayout.addBitWidth(builder, 8);
VectorLayout.addType(builder, VectorType.VALIDITY);
builder.finish(VectorLayout.endVectorLayout(builder));
layouts.push(VectorLayout.getRootAsVectorLayout(builder.dataBuffer()));
builder = new flatbuffers.Builder();
}
VectorLayout.startVectorLayout(builder);
VectorLayout.addBitWidth(builder, type.bitWidth());
VectorLayout.addType(builder, VectorType.DATA);
builder.finish(VectorLayout.endVectorLayout(builder));
layouts.push(VectorLayout.getRootAsVectorLayout(builder.dataBuffer()));
return Object.create(field, {
layout: { value(i) { return layouts[i]; } },
layoutLength: { value() { return layouts.length; } }
});
}
//# sourceMappingURL=data:application/json;charset=utf8;base64,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Z0IsRUFBRSxNQUFjLEVBQUUsTUFBYztJQUV2RixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNsQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLEtBQUssVUFBVSxDQUFDLE1BQU0sSUFBSSxXQUFXLElBQUksU0FBUyxDQUFDLENBQUM7SUFDeEcsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxVQUFVO1VBQ3JELE1BQU07VUFDTixVQUFVLEdBQUcsVUFBVSxDQUM1QixHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sQ0FBQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCwwQkFBMEIsUUFBZ0IsRUFBRSxNQUFhO0lBQ3JELE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwiZmlsZSI6InJlYWRlci92ZWN0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4vLyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbi8vIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4vLyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4vLyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4vLyBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbi8vIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbi8vIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4vLyBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuLy8gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4vLyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4vLyB1bmRlciB0aGUgTGljZW5zZS5cblxuaW1wb3J0IHsgTWVzc2FnZUJhdGNoIH0gZnJvbSAnLi9tZXNzYWdlJztcbmltcG9ydCB7IFZlY3RvciB9IGZyb20gJy4uL3ZlY3Rvci92ZWN0b3InO1xuaW1wb3J0ICogYXMgU2NoZW1hXyBmcm9tICcuLi9mb3JtYXQvU2NoZW1hJztcbmltcG9ydCB7IFN0cnVjdFZlY3RvciB9IGZyb20gJy4uL3ZlY3Rvci9zdHJ1Y3QnO1xuaW1wb3J0IHsgSXRlcmF0b3JTdGF0ZSwgRGljdGlvbmFyaWVzIH0gZnJvbSAnLi9hcnJvdyc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5VmVjdG9yIH0gZnJvbSAnLi4vdmVjdG9yL2RpY3Rpb25hcnknO1xuaW1wb3J0IHsgVXRmOFZlY3RvciwgTGlzdFZlY3RvciwgRml4ZWRTaXplTGlzdFZlY3RvciB9IGZyb20gJy4uL3ZlY3Rvci9saXN0JztcbmltcG9ydCB7XG4gICAgVHlwZWRBcnJheSwgVHlwZWRBcnJheUN0b3IsIEludEFycmF5LCBGbG9hdEFycmF5LFxuICAgIEludDhWZWN0b3IsIEludDE2VmVjdG9yLCBJbnQzMlZlY3RvciwgSW50NjRWZWN0b3IsXG4gICAgVWludDhWZWN0b3IsIFVpbnQxNlZlY3RvciwgVWludDMyVmVjdG9yLCBVaW50NjRWZWN0b3IsXG4gICAgRmxvYXQzMlZlY3RvciwgRmxvYXQ2NFZlY3RvciwgSW5kZXhWZWN0b3IsIERhdGVWZWN0b3IsXG59IGZyb20gJy4uL3ZlY3Rvci90eXBlZCc7XG5cbmltcG9ydCBJbnQgPSBTY2hlbWFfLm9yZy5hcGFjaGUuYXJyb3cuZmxhdGJ1Zi5JbnQ7XG5pbXBvcnQgVHlwZSA9IFNjaGVtYV8ub3JnLmFwYWNoZS5hcnJvdy5mbGF0YnVmLlR5cGU7XG5pbXBvcnQgRmllbGQgPSBTY2hlbWFfLm9yZy5hcGFjaGUuYXJyb3cuZmxhdGJ1Zi5GaWVsZDtcbmltcG9ydCBQcmVjaXNpb24gPSBTY2hlbWFfLm9yZy5hcGFjaGUuYXJyb3cuZmxhdGJ1Zi5QcmVjaXNpb247XG5pbXBvcnQgVmVjdG9yVHlwZSA9IFNjaGVtYV8ub3JnLmFwYWNoZS5hcnJvdy5mbGF0YnVmLlZlY3RvclR5cGU7XG5pbXBvcnQgRml4ZWRTaXplTGlzdCA9IFNjaGVtYV8ub3JnLmFwYWNoZS5hcnJvdy5mbGF0YnVmLkZpeGVkU2l6ZUxpc3Q7XG5pbXBvcnQgRmxvYXRpbmdQb2ludCA9IFNjaGVtYV8ub3JnLmFwYWNoZS5hcnJvdy5mbGF0YnVmLkZsb2F0aW5nUG9pbnQ7XG5pbXBvcnQgRGljdGlvbmFyeUVuY29kaW5nID0gU2NoZW1hXy5vcmcuYXBhY2hlLmFycm93LmZsYXRidWYuRGljdGlvbmFyeUVuY29kaW5nO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFZlY3RvcihmaWVsZDogRmllbGQsIGJhdGNoOiBNZXNzYWdlQmF0Y2gsIHN0YXRlOiBJdGVyYXRvclN0YXRlLCBkaWN0aW9uYXJpZXM6IERpY3Rpb25hcmllcykge1xuICAgIHJldHVybiByZWFkRGljdGlvbmFyeVZlY3RvcihmaWVsZCwgYmF0Y2gsIHN0YXRlLCBkaWN0aW9uYXJpZXMpIHx8XG4gICAgICAgICAgICAgICAgcmVhZFR5cGVkVmVjdG9yKGZpZWxkLCBiYXRjaCwgc3RhdGUsIGRpY3Rpb25hcmllcyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRUeXBlZFZlY3RvcihmaWVsZDogRmllbGQsIGJhdGNoOiBNZXNzYWdlQmF0Y2gsIGl0ZXJhdG9yOiBJdGVyYXRvclN0YXRlLCBkaWN0aW9uYXJpZXM6IERpY3Rpb25hcmllcykge1xuICAgIGxldCB0eXBlVHlwZSA9IGZpZWxkLnR5cGVUeXBlKCksIHJlYWRUeXBlZCA9IHR5cGVkVmVjdG9yUmVhZGVyc1t0eXBlVHlwZV07XG4gICAgaWYgKCFyZWFkVHlwZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQgdmVjdG9yIG5hbWUgXCInICsgVHlwZVt0eXBlVHlwZV0gKyAnXCIgdHlwZSBcIicgKyB0eXBlVHlwZSArICdcIicpO1xuICAgIH1cbiAgICByZXR1cm4gcmVhZFR5cGVkKGZpZWxkLCBiYXRjaCwgaXRlcmF0b3IsIGRpY3Rpb25hcmllcyk7XG59XG5cbmZ1bmN0aW9uIHJlYWREaWN0aW9uYXJ5VmVjdG9yKGZpZWxkOiBGaWVsZCwgYmF0Y2g6IE1lc3NhZ2VCYXRjaCwgaXRlcmF0b3I6IEl0ZXJhdG9yU3RhdGUsIGRpY3Rpb25hcmllczogRGljdGlvbmFyaWVzKSB7XG4gICAgbGV0IGVuY29kaW5nOiBEaWN0aW9uYXJ5RW5jb2Rpbmc7XG4gICAgaWYgKGRpY3Rpb25hcmllcyAmJiAoZW5jb2RpbmcgPSBmaWVsZC5kaWN0aW9uYXJ5KCkpKSB7XG4gICAgICAgIGxldCBpZCA9IGVuY29kaW5nLmlkKCkudG9GbG9hdDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IGluZGV4ID0gcmVhZEludFZlY3RvcihmaWVsZCwgYmF0Y2gsIGl0ZXJhdG9yLCBudWxsLFxuICAgICAgICAgICAgLyogYSBkaWN0aW9uYXJ5IGluZGV4IGRlZmF1bHRzIHRvIHNpZ25lZCAzMiBiaXQgaW50IGlmIHVuc3BlY2lmaWVkICovXG4gICAgICAgICAgICBlbmNvZGluZy5pbmRleFR5cGUoKSB8fCB7IGJpdFdpZHRoOiAoKSA9PiAzMiwgaXNTaWduZWQ6ICgpID0+IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBEaWN0aW9uYXJ5VmVjdG9yLmNyZWF0ZShmaWVsZCwgaW5kZXgubGVuZ3RoLCBpbmRleCwgZGljdGlvbmFyaWVzW2lkXSk7XG4gICAgfVxufVxuXG5jb25zdCBJbnRWaWV3cyAgICA9IFtJbnQ4QXJyYXksICAgIEludDE2QXJyYXksICAgSW50MzJBcnJheSwgICBJbnQzMkFycmF5ICBdO1xuY29uc3QgSW50MzJWaWV3cyAgPSBbSW50MzJBcnJheSwgICBJbnQzMkFycmF5LCAgIEludDMyQXJyYXksICAgSW50MzJBcnJheSAgXTtcbmNvbnN0IFVpbnRWaWV3cyAgID0gW1VpbnQ4QXJyYXksICAgVWludDE2QXJyYXksICBVaW50MzJBcnJheSwgIFVpbnQzMkFycmF5IF07XG5jb25zdCBVaW50OFZpZXdzICA9IFtVaW50OEFycmF5LCAgIFVpbnQ4QXJyYXksICAgVWludDhBcnJheSwgICBVaW50OEFycmF5ICBdO1xuY29uc3QgVWludDMyVmlld3MgPSBbVWludDMyQXJyYXksICBVaW50MzJBcnJheSwgIFVpbnQzMkFycmF5LCAgVWludDMyQXJyYXkgXTtcbmNvbnN0IEZsb2F0Vmlld3MgID0gW0ludDhBcnJheSwgICAgSW50MTZBcnJheSwgICBGbG9hdDMyQXJyYXksIEZsb2F0NjRBcnJheV07XG5cbmNvbnN0IGNyZWF0ZUludERhdGFWaWV3cyA9IGNyZWF0ZURhdGFWaWV3LmJpbmQobnVsbCwgSW50Vmlld3MsIG51bGwpO1xuY29uc3QgY3JlYXRlVWludERhdGFWaWV3cyA9IGNyZWF0ZURhdGFWaWV3LmJpbmQobnVsbCwgVWludFZpZXdzLCBudWxsKTtcbmNvbnN0IGNyZWF0ZURhdGVEYXRhVmlld3MgPSBjcmVhdGVEYXRhVmlldy5iaW5kKG51bGwsIFVpbnQzMlZpZXdzLCBudWxsKTtcbmNvbnN0IGNyZWF0ZUZsb2F0RGF0YVZpZXdzID0gY3JlYXRlRGF0YVZpZXcuYmluZChudWxsLCBGbG9hdFZpZXdzLCBudWxsKTtcbmNvbnN0IGNyZWF0ZU5lc3RlZERhdGFWaWV3cyA9IGNyZWF0ZURhdGFWaWV3LmJpbmQobnVsbCwgVWludDMyVmlld3MsIG51bGwpO1xuY29uc3QgY3JlYXRlVmFsaWRpdHlEYXRhVmlld3MgPSBjcmVhdGVEYXRhVmlldy5iaW5kKG51bGwsIFVpbnQ4Vmlld3MsIG51bGwpO1xuY29uc3QgY3JlYXRlVXRmOERhdGFWaWV3cyA9IGNyZWF0ZURhdGFWaWV3LmJpbmQobnVsbCwgVWludDhWaWV3cywgSW50MzJWaWV3cyk7XG5cbmNvbnN0IGZsb2F0VmVjdG9ycyA9IHtcbiAgICBbUHJlY2lzaW9uLlNJTkdMRV06IEZsb2F0MzJWZWN0b3IsXG4gICAgW1ByZWNpc2lvbi5ET1VCTEVdOiBGbG9hdDY0VmVjdG9yXG59O1xuY29uc3QgaW50VmVjdG9ycyA9IFtcbiAgICBbLyogdW5zaWduZWQgKi8gVWludDhWZWN0b3IsICAgLyogc2lnbmVkICovIEludDhWZWN0b3IgXSxcbiAgICBbLyogdW5zaWduZWQgKi8gVWludDE2VmVjdG9yLCAgLyogc2lnbmVkICovIEludDE2VmVjdG9yXSxcbiAgICBbLyogdW5zaWduZWQgKi8gVWludDMyVmVjdG9yLCAgLyogc2lnbmVkICovIEludDMyVmVjdG9yXSxcbiAgICBbLyogdW5zaWduZWQgKi8gVWludDY0VmVjdG9yLCAgLyogc2lnbmVkICovIEludDY0VmVjdG9yXVxuXTtcblxuZnVuY3Rpb24gcmVhZEludFZlY3RvcihmaWVsZDogRmllbGQsIGJhdGNoOiBNZXNzYWdlQmF0Y2gsIGl0ZXJhdG9yOiBJdGVyYXRvclN0YXRlLCBkaWN0aW9uYXJpZXM6IERpY3Rpb25hcmllcywgZmllbGRUeXBlPzogRmllbGRUeXBlKSB7XG4gICAgbGV0IHR5cGUgPSAoZmllbGRUeXBlIHx8IGZpZWxkLnR5cGUobmV3IEludCgpKSk7XG4gICAgcmV0dXJuIHR5cGUuaXNTaWduZWQoKSA/XG4gICAgICAgIHJlYWRfSW50VmVjdG9yKGZpZWxkLCBiYXRjaCwgaXRlcmF0b3IsIGRpY3Rpb25hcmllcywgdHlwZSkgOlxuICAgICAgICByZWFkVWludFZlY3RvcihmaWVsZCwgYmF0Y2gsIGl0ZXJhdG9yLCBkaWN0aW9uYXJpZXMsIHR5cGUpO1xufVxuXG5jb25zdCByZWFkX0ludFZlY3RvciA9IHJlYWRWZWN0b3JMYXlvdXQ8bnVtYmVyLCBJbnRBcnJheT4oY3JlYXRlSW50RGF0YVZpZXdzLCBjcmVhdGVJbnRWZWN0b3IpO1xuY29uc3QgcmVhZFVpbnRWZWN0b3IgPSByZWFkVmVjdG9yTGF5b3V0PG51bWJlciwgSW50QXJyYXk+KGNyZWF0ZVVpbnREYXRhVmlld3MsIGNyZWF0ZUludFZlY3Rvcik7XG5mdW5jdGlvbiBjcmVhdGVJbnRWZWN0b3IoZmllbGQsIGxlbmd0aCwgZGF0YSwgdmFsaWRpdHksIG9mZnNldHMsIGZpZWxkVHlwZSwgYmF0Y2gsIGl0ZXJhdG9yLCBkaWN0aW9uYXJpZXMpIHtcbiAgICBsZXQgdHlwZSA9IGZpZWxkVHlwZSB8fCBmaWVsZC50eXBlKG5ldyBJbnQoKSksIGJpdFdpZHRoID0gdHlwZS5iaXRXaWR0aCgpO1xuICAgIGxldCBWZWN0b3IgPSB2YWx1ZUZvckJpdFdpZHRoKGJpdFdpZHRoLCBpbnRWZWN0b3JzKVsrdHlwZS5pc1NpZ25lZCgpXTtcbiAgICByZXR1cm4gVmVjdG9yLmNyZWF0ZShmaWVsZCwgbGVuZ3RoLCB2YWxpZGl0eSwgZGF0YSB8fCBvZmZzZXRzKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNvIHRoaXMgaXMga2luZGEgc3RyYW5nZSDwn5GGOlxuICAgIC8vIFRoZSBkaWN0aW9uYXJ5IGVuY29kZWQgdmVjdG9ycyBJIGdlbmVyYXRlZCBmcm9tIHNhbXBsZSBtYXBkLWNvcmUgcXVlcmllcyBoYXZlIHRoZSBpbmRpY2llcycgZGF0YSBidWZmZXJzXG4gICAgLy8gdGFnZ2VkIGFzIFZlY3RvclR5cGUuT0ZGU0VUICgwKSBpbiB0aGUgZmllbGQgbWV0YWRhdGEuIFRoZSBjdXJyZW50IFRTIGltcGwgaWdub3JlcyBidWZmZXJzJyBsYXlvdXQgdHlwZSxcbiAgICAvLyBhbmQgYXNzdW1lcyB0aGUgc2Vjb25kIGJ1ZmZlciBpcyB0aGUgZGF0YSBmb3IgYSBOdWxsYWJsZUludFZlY3Rvci4gU2luY2Ugd2UndmUgYmVlbiBzdHJpY3RlciBhYm91dCBlbmZvcmNpbmdcbiAgICAvLyB0aGUgQXJyb3cgc3BlYyB3aGlsZSBwYXJzaW5nLCB0aGUgSW50VmVjdG9yJ3MgZGF0YSBidWZmZXIgcmVhZHMgZW1wdHkgaW4gdGhpcyBjYXNlLiBJZiBzbywgZmFsbGJhY2sgdG8gdXNpbmdcbiAgICAvLyB0aGUgb2Zmc2V0cyBidWZmZXIgYXMgdGhlIGRhdGEsIHNpbmNlIEludFZlY3RvcnMgZG9uJ3QgaGF2ZSBvZmZzZXRzLlxufVxuXG5jb25zdCByZWFkRmxvYXRWZWN0b3IgPSByZWFkVmVjdG9yTGF5b3V0PG51bWJlciwgRmxvYXRBcnJheT4oXG4gICAgY3JlYXRlRmxvYXREYXRhVmlld3MsXG4gICAgKGZpZWxkLCBsZW5ndGgsIGRhdGEsIHZhbGlkaXR5LCBvZmZzZXRzLCBmaWVsZFR5cGUsIGJhdGNoLCBpdGVyYXRvciwgZGljdGlvbmFyaWVzKSA9PiB7XG4gICAgICAgIGxldCB0eXBlID0gZmllbGQudHlwZShuZXcgRmxvYXRpbmdQb2ludCgpKTtcbiAgICAgICAgbGV0IFZlY3RvciA9IGZsb2F0VmVjdG9yc1t0eXBlLnByZWNpc2lvbigpXTtcbiAgICAgICAgcmV0dXJuIFZlY3Rvci5jcmVhdGUoZmllbGQsIGxlbmd0aCwgdmFsaWRpdHksIGRhdGEpO1xuICAgIH1cbik7XG5cbmNvbnN0IHJlYWREYXRlVmVjdG9yID0gcmVhZFZlY3RvckxheW91dDxEYXRlLCBVaW50MzJBcnJheT4oXG4gICAgY3JlYXRlRGF0ZURhdGFWaWV3cyxcbiAgICAoZmllbGQsIGxlbmd0aCwgZGF0YSwgdmFsaWRpdHksIG9mZnNldHMsIGZpZWxkVHlwZSwgYmF0Y2gsIGl0ZXJhdG9yLCBkaWN0aW9uYXJpZXMpID0+IHtcbiAgICAgICAgcmV0dXJuIERhdGVWZWN0b3IuY3JlYXRlKGZpZWxkLCBsZW5ndGgsIHZhbGlkaXR5LCBkYXRhKTtcbiAgICB9XG4pO1xuXG5jb25zdCByZWFkVXRmOFZlY3RvciA9IHJlYWRWZWN0b3JMYXlvdXQ8c3RyaW5nLCBVaW50OEFycmF5PihcbiAgICBjcmVhdGVVdGY4RGF0YVZpZXdzLFxuICAgIChmaWVsZCwgbGVuZ3RoLCBkYXRhLCB2YWxpZGl0eSwgb2Zmc2V0cywgZmllbGRUeXBlLCBiYXRjaCwgaXRlcmF0b3IsIGRpY3Rpb25hcmllcykgPT4ge1xuICAgICAgICBsZXQgb2Zmc2V0c0FkanVzdGVkID0gbmV3IEludDMyQXJyYXkob2Zmc2V0cy5idWZmZXIsIG9mZnNldHMuYnl0ZU9mZnNldCwgbGVuZ3RoICsgMSk7XG4gICAgICAgIHJldHVybiBVdGY4VmVjdG9yLmNyZWF0ZShcbiAgICAgICAgICAgIGZpZWxkLCBsZW5ndGgsIHZhbGlkaXR5LFxuICAgICAgICAgICAgVWludDhWZWN0b3IuY3JlYXRlKGZpZWxkLCBkYXRhLmxlbmd0aCwgbnVsbCwgZGF0YSksXG4gICAgICAgICAgICBJbmRleFZlY3Rvci5jcmVhdGUoZmllbGQsIGxlbmd0aCArIDEsIG51bGwsIG9mZnNldHNBZGp1c3RlZClcbiAgICAgICAgKTtcbiAgICB9XG4pO1xuXG5jb25zdCByZWFkTGlzdFZlY3RvciA9IHJlYWRWZWN0b3JMYXlvdXQ8YW55W10sIFVpbnQzMkFycmF5PihcbiAgICBjcmVhdGVOZXN0ZWREYXRhVmlld3MsXG4gICAgKGZpZWxkLCBsZW5ndGgsIGRhdGEsIHZhbGlkaXR5LCBvZmZzZXRzLCBmaWVsZFR5cGUsIGJhdGNoLCBpdGVyYXRvciwgZGljdGlvbmFyaWVzKSA9PiB7XG4gICAgICAgIGxldCBvZmZzZXRzQWRqdXN0ZWQgPSBuZXcgSW50MzJBcnJheShvZmZzZXRzLmJ1ZmZlciwgb2Zmc2V0cy5ieXRlT2Zmc2V0LCBsZW5ndGggKyAxKTtcbiAgICAgICAgcmV0dXJuIExpc3RWZWN0b3IuY3JlYXRlKFxuICAgICAgICAgICAgZmllbGQsIGxlbmd0aCwgdmFsaWRpdHksXG4gICAgICAgICAgICByZWFkVmVjdG9yKGZpZWxkLmNoaWxkcmVuKDApLCBiYXRjaCwgaXRlcmF0b3IsIGRpY3Rpb25hcmllcyksXG4gICAgICAgICAgICBJbmRleFZlY3Rvci5jcmVhdGUoZmllbGQsIGxlbmd0aCArIDEsIG51bGwsIG9mZnNldHNBZGp1c3RlZClcbiAgICAgICAgKTtcbiAgICB9XG4pO1xuXG5jb25zdCByZWFkRml4ZWRTaXplTGlzdFZlY3RvciA9IHJlYWRWZWN0b3JMYXlvdXQ8YW55W10sIFVpbnQzMkFycmF5PihcbiAgICBjcmVhdGVOZXN0ZWREYXRhVmlld3MsXG4gICAgKGZpZWxkLCBsZW5ndGgsIGRhdGEsIHZhbGlkaXR5LCBvZmZzZXRzLCBmaWVsZFR5cGUsIGJhdGNoLCBpdGVyYXRvciwgZGljdGlvbmFyaWVzKSA9PiB7XG4gICAgICAgIGxldCBzaXplID0gZmllbGQudHlwZShuZXcgRml4ZWRTaXplTGlzdCgpKS5saXN0U2l6ZSgpO1xuICAgICAgICByZXR1cm4gRml4ZWRTaXplTGlzdFZlY3Rvci5jcmVhdGUoXG4gICAgICAgICAgICBmaWVsZCwgbGVuZ3RoLCBzaXplLCB2YWxpZGl0eSxcbiAgICAgICAgICAgIHJlYWRWZWN0b3IoZmllbGQuY2hpbGRyZW4oMCksIGJhdGNoLCBpdGVyYXRvciwgZGljdGlvbmFyaWVzKVxuICAgICAgICApO1xuICAgIH1cbik7XG5cbmNvbnN0IHJlYWRTdHJ1Y3RWZWN0b3IgPSByZWFkVmVjdG9yTGF5b3V0PGFueVtdLCBBcnJheUxpa2U8YW55Pj4oXG4gICAgY3JlYXRlTmVzdGVkRGF0YVZpZXdzLFxuICAgIChmaWVsZCwgbGVuZ3RoLCBkYXRhLCB2YWxpZGl0eSwgb2Zmc2V0cywgZmllbGRUeXBlLCBiYXRjaCwgaXRlcmF0b3IsIGRpY3Rpb25hcmllcykgPT4ge1xuICAgICAgICBsZXQgdmVjdG9yczogVmVjdG9yPGFueT5bXSA9IFtdO1xuICAgICAgICBpdGVyYXRvci5idWZmZXJJbmRleCAtPSBmaWVsZC5udWxsYWJsZSgpID8gMCA6IGZpZWxkLmxheW91dExlbmd0aCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gLTEsIG4gPSBmaWVsZC5jaGlsZHJlbkxlbmd0aCgpOyArK2kgPCBuOykge1xuICAgICAgICAgICAgdmVjdG9yc1tpXSA9IHJlYWRWZWN0b3IoZmllbGQuY2hpbGRyZW4oaSksIGJhdGNoLCBpdGVyYXRvciwgZGljdGlvbmFyaWVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RydWN0VmVjdG9yLmNyZWF0ZShmaWVsZCwgbGVuZ3RoLCB2YWxpZGl0eSwgLi4udmVjdG9ycyk7XG4gICAgfVxuKTtcblxuY29uc3QgdHlwZWRWZWN0b3JSZWFkZXJzID0ge1xuICAgIFtUeXBlLkludF06IHJlYWRJbnRWZWN0b3IsXG4gICAgW1R5cGUuRGF0ZV06IHJlYWREYXRlVmVjdG9yLFxuICAgIFtUeXBlLkxpc3RdOiByZWFkTGlzdFZlY3RvcixcbiAgICBbVHlwZS5VdGY4XTogcmVhZFV0ZjhWZWN0b3IsXG4gICAgW1R5cGUuU3RydWN0X106IHJlYWRTdHJ1Y3RWZWN0b3IsXG4gICAgW1R5cGUuRmxvYXRpbmdQb2ludF06IHJlYWRGbG9hdFZlY3RvcixcbiAgICBbVHlwZS5GaXhlZFNpemVMaXN0XTogcmVhZEZpeGVkU2l6ZUxpc3RWZWN0b3IsXG59O1xuXG50eXBlIEZpZWxkVHlwZSA9IHsgYml0V2lkdGgoKTogbnVtYmVyOyBpc1NpZ25lZCgpOiBib29sZWFuIH07XG50eXBlIGRhdGFWaWV3RmFjdG9yeTxWID0gVHlwZWRBcnJheT4gPSAoYmF0Y2g6IE1lc3NhZ2VCYXRjaCwgdHlwZTogVmVjdG9yVHlwZSwgYml0V2lkdGg6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKSA9PiBWO1xudHlwZSB2ZWN0b3JGYWN0b3J5PFRMaXN0LCBWID0gVmVjdG9yPGFueT4+ID0gKGZpZWxkOiBGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBUTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsczogVWludDhBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRzOiBUeXBlZEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBNZXNzYWdlQmF0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmFibGU6IEl0ZXJhdG9yU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyaWVzOiBEaWN0aW9uYXJpZXMpID0+IFY7XG5cbmZ1bmN0aW9uIHJlYWRWZWN0b3JMYXlvdXQ8VCwgVExpc3Q+KGNyZWF0ZURhdGFWaWV3OiBkYXRhVmlld0ZhY3Rvcnk8VExpc3Q+LCBjcmVhdGVWZWN0b3I6IHZlY3RvckZhY3Rvcnk8VExpc3QsIFZlY3RvcjxUPj4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVhZExheW91dChcbiAgICAgICAgICAgIGZpZWxkOiBGaWVsZCxcbiAgICAgICAgICAgIGNodW5rOiBNZXNzYWdlQmF0Y2gsXG4gICAgICAgICAgICBpdGVyYXRvcjogSXRlcmF0b3JTdGF0ZSxcbiAgICAgICAgICAgIGRpY3Rpb25hcmllczogRGljdGlvbmFyaWVzLFxuICAgICAgICAgICAgaW50ZWdlckZpZWxkVHlwZT86IEZpZWxkVHlwZVxuICAgICkge1xuICAgICAgICBsZXQgYmF0Y2ggPSBjaHVuay5kYXRhO1xuICAgICAgICBsZXQgbGF5b3V0TGVuZ3RoID0gZmllbGQubGF5b3V0TGVuZ3RoKCk7XG4gICAgICAgIGxldCBub2RlID0gYmF0Y2gubm9kZXMoaXRlcmF0b3Iubm9kZUluZGV4KyspO1xuICAgICAgICBsZXQgZGF0YTogVExpc3QsIG9mZnNldHM6IGFueSwgdmFsaWRpdHk6IFVpbnQ4QXJyYXk7XG4gICAgICAgIGxldCB0eXBlLCBiaXRXaWR0aCwgYnVmZmVyTGVuZ3RoLCBub2RlTGVuZ3RoID0gbm9kZS5sZW5ndGgoKS5sb3c7XG4gICAgICAgIGZvciAobGV0IGkgPSAtMTsgKytpIDwgbGF5b3V0TGVuZ3RoOykge1xuICAgICAgICAgICAgbGV0IGxheW91dCA9IGZpZWxkLmxheW91dChpKTtcbiAgICAgICAgICAgIGxldCBidWZmZXIgPSBiYXRjaC5idWZmZXJzKGl0ZXJhdG9yLmJ1ZmZlckluZGV4KyspO1xuICAgICAgICAgICAgaWYgKCh0eXBlID0gbGF5b3V0LnR5cGUoKSkgPT09IFZlY3RvclR5cGUuVFlQRSB8fFxuICAgICAgICAgICAgICAgIChidWZmZXJMZW5ndGggPSBidWZmZXIubGVuZ3RoKCkubG93KSA8PSAwICB8fFxuICAgICAgICAgICAgICAgIChiaXRXaWR0aCA9IGxheW91dC5iaXRXaWR0aCgpKSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFZlY3RvclR5cGUuREFUQSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBjcmVhdGVEYXRhVmlldyhjaHVuaywgdHlwZSwgYml0V2lkdGgsIGJ1ZmZlci5vZmZzZXQoKS5sb3csIGJ1ZmZlckxlbmd0aCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFZlY3RvclR5cGUuT0ZGU0VUKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0cyA9IGNyZWF0ZURhdGFWaWV3KGNodW5rLCB0eXBlLCBiaXRXaWR0aCwgYnVmZmVyLm9mZnNldCgpLmxvdywgYnVmZmVyTGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5udWxsQ291bnQoKS5sb3cgPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRpdHkgPSBjcmVhdGVWYWxpZGl0eURhdGFWaWV3cyhjaHVuaywgdHlwZSwgYml0V2lkdGgsIGJ1ZmZlci5vZmZzZXQoKS5sb3csIG5vZGVMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVWZWN0b3IoZmllbGQsIG5vZGVMZW5ndGgsIGRhdGEsIHZhbGlkaXR5LCBvZmZzZXRzLCBpbnRlZ2VyRmllbGRUeXBlLCBjaHVuaywgaXRlcmF0b3IsIGRpY3Rpb25hcmllcyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGF0YVZpZXcoXG4gICAgZGF0YVZpZXdzOiBUeXBlZEFycmF5Q3Rvcjxhbnk+W10sIG9mZnNldFZpZXdzOiBUeXBlZEFycmF5Q3Rvcjxhbnk+W10gfCBudWxsLFxuICAgIGJhdGNoOiBNZXNzYWdlQmF0Y2gsIHR5cGU6IFZlY3RvclR5cGUsIGJpdFdpZHRoOiBudW1iZXIsIG9mZnNldDogbnVtYmVyLCBsZW5ndGg6IG51bWJlclxuKSB7XG4gICAgY29uc3QgYnVmZmVyID0gYmF0Y2guYnl0ZXMuYnVmZmVyO1xuICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBidWZmZXIuYnl0ZUxlbmd0aDtcbiAgICBjb25zdCBieXRlT2Zmc2V0ID0gYmF0Y2gub2Zmc2V0ICsgb2Zmc2V0O1xuICAgIGNvbnN0IERhdGFWaWV3VHlwZSA9IHZhbHVlRm9yQml0V2lkdGgoYml0V2lkdGgsIHR5cGUgPT09IFZlY3RvclR5cGUuT0ZGU0VUICYmIG9mZnNldFZpZXdzIHx8IGRhdGFWaWV3cyk7XG4gICAgY29uc3QgZGF0YVZpZXdMZW5ndGggPSAoKGJ5dGVPZmZzZXQgKyBsZW5ndGgpIDw9IGJ5dGVMZW5ndGhcbiAgICAgICAgPyBsZW5ndGhcbiAgICAgICAgOiBieXRlTGVuZ3RoIC0gYnl0ZU9mZnNldFxuICAgICkgLyBEYXRhVmlld1R5cGVbJ0JZVEVTX1BFUl9FTEVNRU5UJ107XG4gICAgcmV0dXJuIG5ldyBEYXRhVmlld1R5cGUoYnVmZmVyLCBieXRlT2Zmc2V0LCBkYXRhVmlld0xlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIHZhbHVlRm9yQml0V2lkdGgoYml0V2lkdGg6IG51bWJlciwgdmFsdWVzOiBhbnlbXSkge1xuICAgIHJldHVybiB2YWx1ZXNbYml0V2lkdGggPj4gNF0gfHwgdmFsdWVzWzNdO1xufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf8;base64,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IjoicmVhZGVyL3ZlY3Rvci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbi8vIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuLy8gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbi8vIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbi8vIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbi8vIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuLy8gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuLy8gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbi8vIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4vLyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbi8vIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbi8vIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG5pbXBvcnQgeyBmbGF0YnVmZmVycyB9IGZyb20gJ2ZsYXRidWZmZXJzJztcbmltcG9ydCB7IE1lc3NhZ2VCYXRjaCB9IGZyb20gJy4vbWVzc2FnZSc7XG5pbXBvcnQgeyBWZWN0b3IgfSBmcm9tICcuLi92ZWN0b3IvdmVjdG9yJztcbmltcG9ydCAqIGFzIFNjaGVtYV8gZnJvbSAnLi4vZm9ybWF0L1NjaGVtYSc7XG5pbXBvcnQgeyBTdHJ1Y3RWZWN0b3IgfSBmcm9tICcuLi92ZWN0b3Ivc3RydWN0JztcbmltcG9ydCB7IEl0ZXJhdG9yU3RhdGUsIERpY3Rpb25hcmllcyB9IGZyb20gJy4vYXJyb3cnO1xuaW1wb3J0IHsgRGljdGlvbmFyeVZlY3RvciB9IGZyb20gJy4uL3ZlY3Rvci9kaWN0aW9uYXJ5JztcbmltcG9ydCB7IFV0ZjhWZWN0b3IsIExpc3RWZWN0b3IsIEZpeGVkU2l6ZUxpc3RWZWN0b3IgfSBmcm9tICcuLi92ZWN0b3IvbGlzdCc7XG5pbXBvcnQge1xuICAgIFR5cGVkQXJyYXksIFR5cGVkQXJyYXlDdG9yLCBJbnRBcnJheSwgRmxvYXRBcnJheSxcbiAgICBJbnQ4VmVjdG9yLCBJbnQxNlZlY3RvciwgSW50MzJWZWN0b3IsIEludDY0VmVjdG9yLFxuICAgIFVpbnQ4VmVjdG9yLCBVaW50MTZWZWN0b3IsIFVpbnQzMlZlY3RvciwgVWludDY0VmVjdG9yLFxuICAgIEZsb2F0MzJWZWN0b3IsIEZsb2F0NjRWZWN0b3IsIEluZGV4VmVjdG9yLCBEYXRlVmVjdG9yLFxufSBmcm9tICcuLi92ZWN0b3IvdHlwZWQnO1xuXG5pbXBvcnQgSW50ID0gU2NoZW1hXy5vcmcuYXBhY2hlLmFycm93LmZsYXRidWYuSW50O1xuaW1wb3J0IFR5cGUgPSBTY2hlbWFfLm9yZy5hcGFjaGUuYXJyb3cuZmxhdGJ1Zi5UeXBlO1xuaW1wb3J0IEZpZWxkID0gU2NoZW1hXy5vcmcuYXBhY2hlLmFycm93LmZsYXRidWYuRmllbGQ7XG5pbXBvcnQgUHJlY2lzaW9uID0gU2NoZW1hXy5vcmcuYXBhY2hlLmFycm93LmZsYXRidWYuUHJlY2lzaW9uO1xuaW1wb3J0IFZlY3RvclR5cGUgPSBTY2hlbWFfLm9yZy5hcGFjaGUuYXJyb3cuZmxhdGJ1Zi5WZWN0b3JUeXBlO1xuaW1wb3J0IFZlY3RvckxheW91dCA9IFNjaGVtYV8ub3JnLmFwYWNoZS5hcnJvdy5mbGF0YnVmLlZlY3RvckxheW91dDtcbmltcG9ydCBGaXhlZFNpemVMaXN0ID0gU2NoZW1hXy5vcmcuYXBhY2hlLmFycm93LmZsYXRidWYuRml4ZWRTaXplTGlzdDtcbmltcG9ydCBGbG9hdGluZ1BvaW50ID0gU2NoZW1hXy5vcmcuYXBhY2hlLmFycm93LmZsYXRidWYuRmxvYXRpbmdQb2ludDtcbmltcG9ydCBEaWN0aW9uYXJ5RW5jb2RpbmcgPSBTY2hlbWFfLm9yZy5hcGFjaGUuYXJyb3cuZmxhdGJ1Zi5EaWN0aW9uYXJ5RW5jb2Rpbmc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVmVjdG9yKGZpZWxkOiBGaWVsZCwgYmF0Y2g6IE1lc3NhZ2VCYXRjaCwgc3RhdGU6IEl0ZXJhdG9yU3RhdGUsIGRpY3Rpb25hcmllczogRGljdGlvbmFyaWVzKSB7XG4gICAgcmV0dXJuIHJlYWREaWN0aW9uYXJ5VmVjdG9yKGZpZWxkLCBiYXRjaCwgc3RhdGUsIGRpY3Rpb25hcmllcykgfHxcbiAgICAgICAgICAgICAgICByZWFkVHlwZWRWZWN0b3IoZmllbGQsIGJhdGNoLCBzdGF0ZSwgZGljdGlvbmFyaWVzKTtcbn1cblxuZnVuY3Rpb24gcmVhZFR5cGVkVmVjdG9yKGZpZWxkOiBGaWVsZCwgYmF0Y2g6IE1lc3NhZ2VCYXRjaCwgaXRlcmF0b3I6IEl0ZXJhdG9yU3RhdGUsIGRpY3Rpb25hcmllczogRGljdGlvbmFyaWVzKSB7XG4gICAgbGV0IHR5cGVUeXBlID0gZmllbGQudHlwZVR5cGUoKSwgcmVhZFR5cGVkID0gdHlwZWRWZWN0b3JSZWFkZXJzW3R5cGVUeXBlXTtcbiAgICBpZiAoIXJlYWRUeXBlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCB2ZWN0b3IgbmFtZSBcIicgKyBUeXBlW3R5cGVUeXBlXSArICdcIiB0eXBlIFwiJyArIHR5cGVUeXBlICsgJ1wiJyk7XG4gICAgfVxuICAgIHJldHVybiByZWFkVHlwZWQoZmllbGQsIGJhdGNoLCBpdGVyYXRvciwgZGljdGlvbmFyaWVzKTtcbn1cblxuZnVuY3Rpb24gcmVhZERpY3Rpb25hcnlWZWN0b3IoZmllbGQ6IEZpZWxkLCBiYXRjaDogTWVzc2FnZUJhdGNoLCBpdGVyYXRvcjogSXRlcmF0b3JTdGF0ZSwgZGljdGlvbmFyaWVzOiBEaWN0aW9uYXJpZXMpIHtcbiAgICBsZXQgZW5jb2Rpbmc6IERpY3Rpb25hcnlFbmNvZGluZztcbiAgICBpZiAoZGljdGlvbmFyaWVzICYmIChlbmNvZGluZyA9IGZpZWxkLmRpY3Rpb25hcnkoKSkpIHtcbiAgICAgICAgbGV0IGlkID0gZW5jb2RpbmcuaWQoKS50b0Zsb2F0NjQoKS50b1N0cmluZygpO1xuICAgICAgICBsZXQgZmllbGRUeXBlID0gIGVuY29kaW5nLmluZGV4VHlwZSgpIHx8XG4gICAgICAgICAgICAvKiBhIGRpY3Rpb25hcnkgaW5kZXggZGVmYXVsdHMgdG8gc2lnbmVkIDMyIGJpdCBpbnQgaWYgdW5zcGVjaWZpZWQgKi9cbiAgICAgICAgICAgIHsgYml0V2lkdGg6ICgpID0+IDMyLCBpc1NpZ25lZDogKCkgPT4gdHJ1ZSB9O1xuICAgICAgICBsZXQgaW5kZXhGaWVsZCA9IGNyZWF0ZVN5bnRoZXRpY0RpY3Rpb25hcnlJbmRleEZpZWxkKGZpZWxkLCBmaWVsZFR5cGUpO1xuICAgICAgICBsZXQgaW5kZXggPSByZWFkSW50VmVjdG9yKGluZGV4RmllbGQsIGJhdGNoLCBpdGVyYXRvciwgbnVsbCwgZmllbGRUeXBlKTtcbiAgICAgICAgcmV0dXJuIERpY3Rpb25hcnlWZWN0b3IuY3JlYXRlKGZpZWxkLCBpbmRleC5sZW5ndGgsIGluZGV4LCBkaWN0aW9uYXJpZXNbaWRdKTtcbiAgICB9XG59XG5cbmNvbnN0IEludFZpZXdzICAgID0gW0ludDhBcnJheSwgICAgSW50MTZBcnJheSwgICBJbnQzMkFycmF5LCAgIEludDMyQXJyYXkgIF07XG5jb25zdCBJbnQzMlZpZXdzICA9IFtJbnQzMkFycmF5LCAgIEludDMyQXJyYXksICAgSW50MzJBcnJheSwgICBJbnQzMkFycmF5ICBdO1xuY29uc3QgVWludFZpZXdzICAgPSBbVWludDhBcnJheSwgICBVaW50MTZBcnJheSwgIFVpbnQzMkFycmF5LCAgVWludDMyQXJyYXkgXTtcbmNvbnN0IFVpbnQ4Vmlld3MgID0gW1VpbnQ4QXJyYXksICAgVWludDhBcnJheSwgICBVaW50OEFycmF5LCAgIFVpbnQ4QXJyYXkgIF07XG5jb25zdCBVaW50MzJWaWV3cyA9IFtVaW50MzJBcnJheSwgIFVpbnQzMkFycmF5LCAgVWludDMyQXJyYXksICBVaW50MzJBcnJheSBdO1xuY29uc3QgRmxvYXRWaWV3cyAgPSBbSW50OEFycmF5LCAgICBJbnQxNkFycmF5LCAgIEZsb2F0MzJBcnJheSwgRmxvYXQ2NEFycmF5XTtcblxuY29uc3QgY3JlYXRlSW50RGF0YVZpZXdzID0gY3JlYXRlRGF0YVZpZXcuYmluZChudWxsLCBJbnRWaWV3cywgbnVsbCk7XG5jb25zdCBjcmVhdGVVaW50RGF0YVZpZXdzID0gY3JlYXRlRGF0YVZpZXcuYmluZChudWxsLCBVaW50Vmlld3MsIG51bGwpO1xuY29uc3QgY3JlYXRlRGF0ZURhdGFWaWV3cyA9IGNyZWF0ZURhdGFWaWV3LmJpbmQobnVsbCwgVWludDMyVmlld3MsIG51bGwpO1xuY29uc3QgY3JlYXRlRmxvYXREYXRhVmlld3MgPSBjcmVhdGVEYXRhVmlldy5iaW5kKG51bGwsIEZsb2F0Vmlld3MsIG51bGwpO1xuY29uc3QgY3JlYXRlTmVzdGVkRGF0YVZpZXdzID0gY3JlYXRlRGF0YVZpZXcuYmluZChudWxsLCBVaW50MzJWaWV3cywgbnVsbCk7XG5jb25zdCBjcmVhdGVWYWxpZGl0eURhdGFWaWV3cyA9IGNyZWF0ZURhdGFWaWV3LmJpbmQobnVsbCwgVWludDhWaWV3cywgbnVsbCk7XG5jb25zdCBjcmVhdGVVdGY4RGF0YVZpZXdzID0gY3JlYXRlRGF0YVZpZXcuYmluZChudWxsLCBVaW50OFZpZXdzLCBJbnQzMlZpZXdzKTtcblxuY29uc3QgZmxvYXRWZWN0b3JzID0ge1xuICAgIFtQcmVjaXNpb24uU0lOR0xFXTogRmxvYXQzMlZlY3RvcixcbiAgICBbUHJlY2lzaW9uLkRPVUJMRV06IEZsb2F0NjRWZWN0b3Jcbn07XG5jb25zdCBpbnRWZWN0b3JzID0gW1xuICAgIFsvKiB1bnNpZ25lZCAqLyBVaW50OFZlY3RvciwgICAvKiBzaWduZWQgKi8gSW50OFZlY3RvciBdLFxuICAgIFsvKiB1bnNpZ25lZCAqLyBVaW50MTZWZWN0b3IsICAvKiBzaWduZWQgKi8gSW50MTZWZWN0b3JdLFxuICAgIFsvKiB1bnNpZ25lZCAqLyBVaW50MzJWZWN0b3IsICAvKiBzaWduZWQgKi8gSW50MzJWZWN0b3JdLFxuICAgIFsvKiB1bnNpZ25lZCAqLyBVaW50NjRWZWN0b3IsICAvKiBzaWduZWQgKi8gSW50NjRWZWN0b3JdXG5dO1xuXG5mdW5jdGlvbiByZWFkSW50VmVjdG9yKGZpZWxkOiBGaWVsZCwgYmF0Y2g6IE1lc3NhZ2VCYXRjaCwgaXRlcmF0b3I6IEl0ZXJhdG9yU3RhdGUsIGRpY3Rpb25hcmllczogRGljdGlvbmFyaWVzLCBmaWVsZFR5cGU/OiBGaWVsZFR5cGUpIHtcbiAgICBsZXQgdHlwZSA9IChmaWVsZFR5cGUgfHwgZmllbGQudHlwZShuZXcgSW50KCkpKTtcbiAgICByZXR1cm4gdHlwZS5pc1NpZ25lZCgpID9cbiAgICAgICAgcmVhZF9JbnRWZWN0b3IoZmllbGQsIGJhdGNoLCBpdGVyYXRvciwgZGljdGlvbmFyaWVzLCB0eXBlKSA6XG4gICAgICAgIHJlYWRVaW50VmVjdG9yKGZpZWxkLCBiYXRjaCwgaXRlcmF0b3IsIGRpY3Rpb25hcmllcywgdHlwZSk7XG59XG5cbmNvbnN0IHJlYWRfSW50VmVjdG9yID0gcmVhZFZlY3RvckxheW91dDxudW1iZXIsIEludEFycmF5PihjcmVhdGVJbnREYXRhVmlld3MsIGNyZWF0ZUludFZlY3Rvcik7XG5jb25zdCByZWFkVWludFZlY3RvciA9IHJlYWRWZWN0b3JMYXlvdXQ8bnVtYmVyLCBJbnRBcnJheT4oY3JlYXRlVWludERhdGFWaWV3cywgY3JlYXRlSW50VmVjdG9yKTtcbmZ1bmN0aW9uIGNyZWF0ZUludFZlY3RvcihmaWVsZCwgbGVuZ3RoLCBkYXRhLCB2YWxpZGl0eSwgb2Zmc2V0cywgZmllbGRUeXBlLCBiYXRjaCwgaXRlcmF0b3IsIGRpY3Rpb25hcmllcykge1xuICAgIGxldCB0eXBlID0gZmllbGRUeXBlIHx8IGZpZWxkLnR5cGUobmV3IEludCgpKSwgYml0V2lkdGggPSB0eXBlLmJpdFdpZHRoKCk7XG4gICAgbGV0IFZlY3RvciA9IHZhbHVlRm9yQml0V2lkdGgoYml0V2lkdGgsIGludFZlY3RvcnMpWyt0eXBlLmlzU2lnbmVkKCldO1xuICAgIHJldHVybiBWZWN0b3IuY3JlYXRlKGZpZWxkLCBsZW5ndGgsIHZhbGlkaXR5LCBkYXRhIHx8IG9mZnNldHMpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc28gdGhpcyBpcyBraW5kYSBzdHJhbmdlIPCfkYY6XG4gICAgLy8gVGhlIGRpY3Rpb25hcnkgZW5jb2RlZCB2ZWN0b3JzIEkgZ2VuZXJhdGVkIGZyb20gc2FtcGxlIG1hcGQtY29yZSBxdWVyaWVzIGhhdmUgdGhlIGluZGljaWVzJyBkYXRhIGJ1ZmZlcnNcbiAgICAvLyB0YWdnZWQgYXMgVmVjdG9yVHlwZS5PRkZTRVQgKDApIGluIHRoZSBmaWVsZCBtZXRhZGF0YS4gVGhlIGN1cnJlbnQgVFMgaW1wbCBpZ25vcmVzIGJ1ZmZlcnMnIGxheW91dCB0eXBlLFxuICAgIC8vIGFuZCBhc3N1bWVzIHRoZSBzZWNvbmQgYnVmZmVyIGlzIHRoZSBkYXRhIGZvciBhIE51bGxhYmxlSW50VmVjdG9yLiBTaW5jZSB3ZSd2ZSBiZWVuIHN0cmljdGVyIGFib3V0IGVuZm9yY2luZ1xuICAgIC8vIHRoZSBBcnJvdyBzcGVjIHdoaWxlIHBhcnNpbmcsIHRoZSBJbnRWZWN0b3IncyBkYXRhIGJ1ZmZlciByZWFkcyBlbXB0eSBpbiB0aGlzIGNhc2UuIElmIHNvLCBmYWxsYmFjayB0byB1c2luZ1xuICAgIC8vIHRoZSBvZmZzZXRzIGJ1ZmZlciBhcyB0aGUgZGF0YSwgc2luY2UgSW50VmVjdG9ycyBkb24ndCBoYXZlIG9mZnNldHMuXG59XG5cbmNvbnN0IHJlYWRGbG9hdFZlY3RvciA9IHJlYWRWZWN0b3JMYXlvdXQ8bnVtYmVyLCBGbG9hdEFycmF5PihcbiAgICBjcmVhdGVGbG9hdERhdGFWaWV3cyxcbiAgICAoZmllbGQsIGxlbmd0aCwgZGF0YSwgdmFsaWRpdHksIG9mZnNldHMsIGZpZWxkVHlwZSwgYmF0Y2gsIGl0ZXJhdG9yLCBkaWN0aW9uYXJpZXMpID0+IHtcbiAgICAgICAgbGV0IHR5cGUgPSBmaWVsZC50eXBlKG5ldyBGbG9hdGluZ1BvaW50KCkpO1xuICAgICAgICBsZXQgVmVjdG9yID0gZmxvYXRWZWN0b3JzW3R5cGUucHJlY2lzaW9uKCldO1xuICAgICAgICByZXR1cm4gVmVjdG9yLmNyZWF0ZShmaWVsZCwgbGVuZ3RoLCB2YWxpZGl0eSwgZGF0YSk7XG4gICAgfVxuKTtcblxuY29uc3QgcmVhZERhdGVWZWN0b3IgPSByZWFkVmVjdG9yTGF5b3V0PERhdGUsIFVpbnQzMkFycmF5PihcbiAgICBjcmVhdGVEYXRlRGF0YVZpZXdzLFxuICAgIChmaWVsZCwgbGVuZ3RoLCBkYXRhLCB2YWxpZGl0eSwgb2Zmc2V0cywgZmllbGRUeXBlLCBiYXRjaCwgaXRlcmF0b3IsIGRpY3Rpb25hcmllcykgPT4ge1xuICAgICAgICByZXR1cm4gRGF0ZVZlY3Rvci5jcmVhdGUoZmllbGQsIGxlbmd0aCwgdmFsaWRpdHksIGRhdGEpO1xuICAgIH1cbik7XG5cbmNvbnN0IHJlYWRVdGY4VmVjdG9yID0gcmVhZFZlY3RvckxheW91dDxzdHJpbmcsIFVpbnQ4QXJyYXk+KFxuICAgIGNyZWF0ZVV0ZjhEYXRhVmlld3MsXG4gICAgKGZpZWxkLCBsZW5ndGgsIGRhdGEsIHZhbGlkaXR5LCBvZmZzZXRzLCBmaWVsZFR5cGUsIGJhdGNoLCBpdGVyYXRvciwgZGljdGlvbmFyaWVzKSA9PiB7XG4gICAgICAgIGxldCBvZmZzZXRzQWRqdXN0ZWQgPSBuZXcgSW50MzJBcnJheShvZmZzZXRzLmJ1ZmZlciwgb2Zmc2V0cy5ieXRlT2Zmc2V0LCBsZW5ndGggKyAxKTtcbiAgICAgICAgcmV0dXJuIFV0ZjhWZWN0b3IuY3JlYXRlKFxuICAgICAgICAgICAgZmllbGQsIGxlbmd0aCwgdmFsaWRpdHksXG4gICAgICAgICAgICBVaW50OFZlY3Rvci5jcmVhdGUoZmllbGQsIGRhdGEubGVuZ3RoLCBudWxsLCBkYXRhKSxcbiAgICAgICAgICAgIEluZGV4VmVjdG9yLmNyZWF0ZShmaWVsZCwgbGVuZ3RoICsgMSwgbnVsbCwgb2Zmc2V0c0FkanVzdGVkKVxuICAgICAgICApO1xuICAgIH1cbik7XG5cbmNvbnN0IHJlYWRMaXN0VmVjdG9yID0gcmVhZFZlY3RvckxheW91dDxhbnlbXSwgVWludDMyQXJyYXk+KFxuICAgIGNyZWF0ZU5lc3RlZERhdGFWaWV3cyxcbiAgICAoZmllbGQsIGxlbmd0aCwgZGF0YSwgdmFsaWRpdHksIG9mZnNldHMsIGZpZWxkVHlwZSwgYmF0Y2gsIGl0ZXJhdG9yLCBkaWN0aW9uYXJpZXMpID0+IHtcbiAgICAgICAgbGV0IG9mZnNldHNBZGp1c3RlZCA9IG5ldyBJbnQzMkFycmF5KG9mZnNldHMuYnVmZmVyLCBvZmZzZXRzLmJ5dGVPZmZzZXQsIGxlbmd0aCArIDEpO1xuICAgICAgICByZXR1cm4gTGlzdFZlY3Rvci5jcmVhdGUoXG4gICAgICAgICAgICBmaWVsZCwgbGVuZ3RoLCB2YWxpZGl0eSxcbiAgICAgICAgICAgIHJlYWRWZWN0b3IoZmllbGQuY2hpbGRyZW4oMCksIGJhdGNoLCBpdGVyYXRvciwgZGljdGlvbmFyaWVzKSxcbiAgICAgICAgICAgIEluZGV4VmVjdG9yLmNyZWF0ZShmaWVsZCwgbGVuZ3RoICsgMSwgbnVsbCwgb2Zmc2V0c0FkanVzdGVkKVxuICAgICAgICApO1xuICAgIH1cbik7XG5cbmNvbnN0IHJlYWRGaXhlZFNpemVMaXN0VmVjdG9yID0gcmVhZFZlY3RvckxheW91dDxhbnlbXSwgVWludDMyQXJyYXk+KFxuICAgIGNyZWF0ZU5lc3RlZERhdGFWaWV3cyxcbiAgICAoZmllbGQsIGxlbmd0aCwgZGF0YSwgdmFsaWRpdHksIG9mZnNldHMsIGZpZWxkVHlwZSwgYmF0Y2gsIGl0ZXJhdG9yLCBkaWN0aW9uYXJpZXMpID0+IHtcbiAgICAgICAgbGV0IHNpemUgPSBmaWVsZC50eXBlKG5ldyBGaXhlZFNpemVMaXN0KCkpLmxpc3RTaXplKCk7XG4gICAgICAgIHJldHVybiBGaXhlZFNpemVMaXN0VmVjdG9yLmNyZWF0ZShcbiAgICAgICAgICAgIGZpZWxkLCBsZW5ndGgsIHNpemUsIHZhbGlkaXR5LFxuICAgICAgICAgICAgcmVhZFZlY3RvcihmaWVsZC5jaGlsZHJlbigwKSwgYmF0Y2gsIGl0ZXJhdG9yLCBkaWN0aW9uYXJpZXMpXG4gICAgICAgICk7XG4gICAgfVxuKTtcblxuY29uc3QgcmVhZFN0cnVjdFZlY3RvciA9IHJlYWRWZWN0b3JMYXlvdXQ8YW55W10sIEFycmF5TGlrZTxhbnk+PihcbiAgICBjcmVhdGVOZXN0ZWREYXRhVmlld3MsXG4gICAgKGZpZWxkLCBsZW5ndGgsIGRhdGEsIHZhbGlkaXR5LCBvZmZzZXRzLCBmaWVsZFR5cGUsIGJhdGNoLCBpdGVyYXRvciwgZGljdGlvbmFyaWVzKSA9PiB7XG4gICAgICAgIGxldCB2ZWN0b3JzOiBWZWN0b3I8YW55PltdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAtMSwgbiA9IGZpZWxkLmNoaWxkcmVuTGVuZ3RoKCk7ICsraSA8IG47KSB7XG4gICAgICAgICAgICB2ZWN0b3JzW2ldID0gcmVhZFZlY3RvcihmaWVsZC5jaGlsZHJlbihpKSwgYmF0Y2gsIGl0ZXJhdG9yLCBkaWN0aW9uYXJpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJ1Y3RWZWN0b3IuY3JlYXRlKGZpZWxkLCBsZW5ndGgsIHZhbGlkaXR5LCAuLi52ZWN0b3JzKTtcbiAgICB9XG4pO1xuXG5jb25zdCB0eXBlZFZlY3RvclJlYWRlcnMgPSB7XG4gICAgW1R5cGUuSW50XTogcmVhZEludFZlY3RvcixcbiAgICBbVHlwZS5EYXRlXTogcmVhZERhdGVWZWN0b3IsXG4gICAgW1R5cGUuTGlzdF06IHJlYWRMaXN0VmVjdG9yLFxuICAgIFtUeXBlLlV0ZjhdOiByZWFkVXRmOFZlY3RvcixcbiAgICBbVHlwZS5TdHJ1Y3RfXTogcmVhZFN0cnVjdFZlY3RvcixcbiAgICBbVHlwZS5GbG9hdGluZ1BvaW50XTogcmVhZEZsb2F0VmVjdG9yLFxuICAgIFtUeXBlLkZpeGVkU2l6ZUxpc3RdOiByZWFkRml4ZWRTaXplTGlzdFZlY3Rvcixcbn07XG5cbnR5cGUgRmllbGRUeXBlID0geyBiaXRXaWR0aCgpOiBudW1iZXI7IGlzU2lnbmVkKCk6IGJvb2xlYW4gfTtcbnR5cGUgZGF0YVZpZXdGYWN0b3J5PFYgPSBUeXBlZEFycmF5PiA9IChiYXRjaDogTWVzc2FnZUJhdGNoLCB0eXBlOiBWZWN0b3JUeXBlLCBiaXRXaWR0aDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpID0+IFY7XG50eXBlIHZlY3RvckZhY3Rvcnk8VExpc3QsIFYgPSBWZWN0b3I8YW55Pj4gPSAoZmllbGQ6IEZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFRMaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxzOiBVaW50OEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldHM6IFR5cGVkQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRUeXBlOiBGaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bms6IE1lc3NhZ2VCYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYWJsZTogSXRlcmF0b3JTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJpZXM6IERpY3Rpb25hcmllcykgPT4gVjtcblxuZnVuY3Rpb24gcmVhZFZlY3RvckxheW91dDxULCBUTGlzdD4oY3JlYXRlRGF0YVZpZXc6IGRhdGFWaWV3RmFjdG9yeTxUTGlzdD4sIGNyZWF0ZVZlY3RvcjogdmVjdG9yRmFjdG9yeTxUTGlzdCwgVmVjdG9yPFQ+Pikge1xuICAgIHJldHVybiBmdW5jdGlvbiByZWFkTGF5b3V0KFxuICAgICAgICAgICAgZmllbGQ6IEZpZWxkLFxuICAgICAgICAgICAgY2h1bms6IE1lc3NhZ2VCYXRjaCxcbiAgICAgICAgICAgIGl0ZXJhdG9yOiBJdGVyYXRvclN0YXRlLFxuICAgICAgICAgICAgZGljdGlvbmFyaWVzOiBEaWN0aW9uYXJpZXMsXG4gICAgICAgICAgICBpbnRlZ2VyRmllbGRUeXBlPzogRmllbGRUeXBlXG4gICAgKSB7XG4gICAgICAgIGxldCBiYXRjaCA9IGNodW5rLmRhdGE7XG4gICAgICAgIGxldCBsYXlvdXRMZW5ndGggPSBmaWVsZC5sYXlvdXRMZW5ndGgoKTtcbiAgICAgICAgbGV0IG5vZGUgPSBiYXRjaC5ub2RlcyhpdGVyYXRvci5ub2RlSW5kZXgrKyk7XG4gICAgICAgIGxldCBkYXRhOiBUTGlzdCwgb2Zmc2V0czogYW55LCB2YWxpZGl0eTogVWludDhBcnJheTtcbiAgICAgICAgbGV0IHR5cGUsIGJpdFdpZHRoLCBidWZmZXJMZW5ndGgsIG5vZGVMZW5ndGggPSBub2RlLmxlbmd0aCgpLmxvdztcbiAgICAgICAgZm9yIChsZXQgaSA9IC0xOyArK2kgPCBsYXlvdXRMZW5ndGg7KSB7XG4gICAgICAgICAgICBsZXQgbGF5b3V0ID0gZmllbGQubGF5b3V0KGkpO1xuICAgICAgICAgICAgbGV0IGJ1ZmZlciA9IGJhdGNoLmJ1ZmZlcnMoaXRlcmF0b3IuYnVmZmVySW5kZXgrKyk7XG4gICAgICAgICAgICBpZiAoKHR5cGUgPSBsYXlvdXQudHlwZSgpKSA9PT0gVmVjdG9yVHlwZS5UWVBFIHx8XG4gICAgICAgICAgICAgICAgKGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgoKS5sb3cpIDw9IDAgIHx8XG4gICAgICAgICAgICAgICAgKGJpdFdpZHRoID0gbGF5b3V0LmJpdFdpZHRoKCkpIDw9IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVmVjdG9yVHlwZS5EQVRBKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGNyZWF0ZURhdGFWaWV3KGNodW5rLCB0eXBlLCBiaXRXaWR0aCwgYnVmZmVyLm9mZnNldCgpLmxvdywgYnVmZmVyTGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVmVjdG9yVHlwZS5PRkZTRVQpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXRzID0gY3JlYXRlRGF0YVZpZXcoY2h1bmssIHR5cGUsIGJpdFdpZHRoLCBidWZmZXIub2Zmc2V0KCkubG93LCBidWZmZXJMZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm51bGxDb3VudCgpLmxvdyA+IDApIHtcbiAgICAgICAgICAgICAgICB2YWxpZGl0eSA9IGNyZWF0ZVZhbGlkaXR5RGF0YVZpZXdzKGNodW5rLCB0eXBlLCBiaXRXaWR0aCwgYnVmZmVyLm9mZnNldCgpLmxvdywgbm9kZUxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVZlY3RvcihmaWVsZCwgbm9kZUxlbmd0aCwgZGF0YSwgdmFsaWRpdHksIG9mZnNldHMsIGludGVnZXJGaWVsZFR5cGUsIGNodW5rLCBpdGVyYXRvciwgZGljdGlvbmFyaWVzKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEYXRhVmlldyhcbiAgICBkYXRhVmlld3M6IFR5cGVkQXJyYXlDdG9yPGFueT5bXSwgb2Zmc2V0Vmlld3M6IFR5cGVkQXJyYXlDdG9yPGFueT5bXSB8IG51bGwsXG4gICAgYmF0Y2g6IE1lc3NhZ2VCYXRjaCwgdHlwZTogVmVjdG9yVHlwZSwgYml0V2lkdGg6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyXG4pIHtcbiAgICBjb25zdCBidWZmZXIgPSBiYXRjaC5ieXRlcy5idWZmZXI7XG4gICAgY29uc3QgYnl0ZUxlbmd0aCA9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgIGNvbnN0IGJ5dGVPZmZzZXQgPSBiYXRjaC5vZmZzZXQgKyBvZmZzZXQ7XG4gICAgY29uc3QgRGF0YVZpZXdUeXBlID0gdmFsdWVGb3JCaXRXaWR0aChiaXRXaWR0aCwgdHlwZSA9PT0gVmVjdG9yVHlwZS5PRkZTRVQgJiYgb2Zmc2V0Vmlld3MgfHwgZGF0YVZpZXdzKTtcbiAgICBjb25zdCBkYXRhVmlld0xlbmd0aCA9ICgoYnl0ZU9mZnNldCArIGxlbmd0aCkgPD0gYnl0ZUxlbmd0aFxuICAgICAgICA/IGxlbmd0aFxuICAgICAgICA6IGJ5dGVMZW5ndGggLSBieXRlT2Zmc2V0XG4gICAgKSAvIERhdGFWaWV3VHlwZVsnQllURVNfUEVSX0VMRU1FTlQnXTtcbiAgICByZXR1cm4gbmV3IERhdGFWaWV3VHlwZShidWZmZXIsIGJ5dGVPZmZzZXQsIGRhdGFWaWV3TGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gdmFsdWVGb3JCaXRXaWR0aChiaXRXaWR0aDogbnVtYmVyLCB2YWx1ZXM6IGFueVtdKSB7XG4gICAgcmV0dXJuIHZhbHVlc1tiaXRXaWR0aCA+PiA0XSB8fCB2YWx1ZXNbM107XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bnRoZXRpY0RpY3Rpb25hcnlJbmRleEZpZWxkKGZpZWxkOiBGaWVsZCwgdHlwZTogRmllbGRUeXBlKSB7XG4gICAgbGV0IGxheW91dHMgPSBbXTtcbiAgICBsZXQgYnVpbGRlciA9IG5ldyBmbGF0YnVmZmVycy5CdWlsZGVyKCk7XG4gICAgaWYgKGZpZWxkLm51bGxhYmxlKCkpIHtcbiAgICAgICAgVmVjdG9yTGF5b3V0LnN0YXJ0VmVjdG9yTGF5b3V0KGJ1aWxkZXIpO1xuICAgICAgICBWZWN0b3JMYXlvdXQuYWRkQml0V2lkdGgoYnVpbGRlciwgOCk7XG4gICAgICAgIFZlY3RvckxheW91dC5hZGRUeXBlKGJ1aWxkZXIsIFZlY3RvclR5cGUuVkFMSURJVFkpO1xuICAgICAgICBidWlsZGVyLmZpbmlzaChWZWN0b3JMYXlvdXQuZW5kVmVjdG9yTGF5b3V0KGJ1aWxkZXIpKTtcbiAgICAgICAgbGF5b3V0cy5wdXNoKFZlY3RvckxheW91dC5nZXRSb290QXNWZWN0b3JMYXlvdXQoYnVpbGRlci5kYXRhQnVmZmVyKCkpKTtcbiAgICAgICAgYnVpbGRlciA9IG5ldyBmbGF0YnVmZmVycy5CdWlsZGVyKCk7XG4gICAgfVxuICAgIFZlY3RvckxheW91dC5zdGFydFZlY3RvckxheW91dChidWlsZGVyKTtcbiAgICBWZWN0b3JMYXlvdXQuYWRkQml0V2lkdGgoYnVpbGRlciwgdHlwZS5iaXRXaWR0aCgpKTtcbiAgICBWZWN0b3JMYXlvdXQuYWRkVHlwZShidWlsZGVyLCBWZWN0b3JUeXBlLkRBVEEpO1xuICAgIGJ1aWxkZXIuZmluaXNoKFZlY3RvckxheW91dC5lbmRWZWN0b3JMYXlvdXQoYnVpbGRlcikpO1xuICAgIGxheW91dHMucHVzaChWZWN0b3JMYXlvdXQuZ2V0Um9vdEFzVmVjdG9yTGF5b3V0KGJ1aWxkZXIuZGF0YUJ1ZmZlcigpKSk7XG4gICAgcmV0dXJuIE9iamVjdC5jcmVhdGUoZmllbGQsIHtcbiAgICAgICAgbGF5b3V0OiB7IHZhbHVlKGkpIHsgcmV0dXJuIGxheW91dHNbaV07IH0gfSxcbiAgICAgICAgbGF5b3V0TGVuZ3RoOiB7IHZhbHVlKCkgeyByZXR1cm4gbGF5b3V0cy5sZW5ndGg7IH0gfVxuICAgIH0pO1xufSJdfQ==

@@ -23,2 +23,3 @@ <!---

[![Build Status](https://travis-ci.org/graphistry/arrow.svg?branch=master)](https://travis-ci.org/graphistry/arrow)
[![Coverage Status](https://coveralls.io/repos/github/graphistry/arrow/badge.svg)](https://coveralls.io/github/graphistry/arrow)

@@ -25,0 +26,0 @@ Loading big native dataframes in JavaScript is finally awesome. `apache-arrow` provides an easy, modern, and efficient zero-copy JS interface to parse, iterate, and access [Apache Arrow](https://github.com/apache/arrow) columnar data on CPUs (GPU support via [GoAI](http://gpuopenanalytics.com/) is occurring in parallel).

@@ -249,2 +249,3 @@ // Licensed to the Apache Software Foundation (ASF) under one

VirtualVector.prototype._arrayType = Array;
BitVector.prototype._arrayType = Uint8Array;
Int8Vector.prototype._arrayType = Int8Array;

@@ -272,2 +273,2 @@ Int16Vector.prototype._arrayType = Int16Array;

//# sourceMappingURL=data:application/json;charset=utf8;base64,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QVcsQ0FBQyxTQUFpQixDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDdEQsV0FBVyxDQUFDLFNBQWlCLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUN0RCxZQUFZLENBQUMsU0FBaUIsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0FBQ3hELFlBQVksQ0FBQyxTQUFpQixDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7QUFDeEQsWUFBWSxDQUFDLFNBQWlCLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztBQUN4RCxVQUFVLENBQUMsU0FBaUIsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0FBQ3RELFdBQVcsQ0FBQyxTQUFpQixDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDdEQsYUFBYSxDQUFDLFNBQWlCLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztBQUMxRCxhQUFhLENBQUMsU0FBaUIsQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO0FBRTNELGtCQUFxQixNQUFnQixFQUFFLE1BQWdCLEVBQUUsS0FBYTtJQUNsRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCx1QkFBdUIsTUFBa0IsRUFBRSxNQUFrQixFQUFFLEtBQWE7SUFDeEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlELENBQUMiLCJmaWxlIjoidmVjdG9yL3R5cGVkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuLy8gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4vLyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuLy8gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuLy8gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuLy8gXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4vLyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4vLyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuLy8gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbi8vIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuLy8gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuLy8gdW5kZXIgdGhlIExpY2Vuc2UuXG5cbmltcG9ydCB7IFZlY3RvciB9IGZyb20gJy4vdmVjdG9yJztcbmltcG9ydCB7IGZsYXRidWZmZXJzIH0gZnJvbSAnZmxhdGJ1ZmZlcnMnO1xuXG5pbXBvcnQgTG9uZyA9IGZsYXRidWZmZXJzLkxvbmc7XG5cbmV4cG9ydCB0eXBlIFZBcnJheTxUID0gYW55PiA9IHtcbiAgICBbazogbnVtYmVyXTogVDsgbGVuZ3RoOiBudW1iZXI7XG4gICAgY29uc3RydWN0b3I6IFZBcnJheUN0b3I8VkFycmF5PFQ+Pjtcbn07XG5cbmV4cG9ydCB0eXBlIFZBcnJheUN0b3I8VkFycmF5PiA9IHtcbiAgICByZWFkb25seSBwcm90b3R5cGU6IFZBcnJheTtcbiAgICBCWVRFU19QRVJfRUxFTUVOVD86IG51bWJlcjtcbiAgICBuZXcoLi4uYXJnczogYW55W10pOiBWQXJyYXk7XG59O1xuXG5leHBvcnQgY2xhc3MgVmlydHVhbFZlY3RvcjxULCBUQXJyYXlUeXBlID0gVkFycmF5PFQ+PiBleHRlbmRzIFZlY3RvcjxUPiB7XG4gICAgcHJvdGVjdGVkIGxpc3RzOiBUQXJyYXlUeXBlW107XG4gICAgcHJvdGVjdGVkIF9hcnJheVR5cGU6IFZBcnJheUN0b3I8VEFycmF5VHlwZT47XG4gICAgcHVibGljIGdldCBhcnJheVR5cGUoKSB7IHJldHVybiB0aGlzLl9hcnJheVR5cGU7IH1cbiAgICBjb25zdHJ1Y3RvciguLi5saXN0czogVEFycmF5VHlwZVtdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubGlzdHMgPSBsaXN0cy5maWx0ZXIoQm9vbGVhbik7XG4gICAgfVxuICAgIGdldChpbmRleDogbnVtYmVyKTogVCB7XG4gICAgICAgIC8qIGlubGluZWQgYGZpbmRWaXJ0dWFsYCBpbXBsICovXG4gICAgICAgIGxldCByb3dzLCBsZW5ndGgsIGxpc3RzID0gdGhpcy5saXN0cztcbiAgICAgICAgZm9yIChsZXQgYmF0Y2ggPSAtMTtcbiAgICAgICAgICAgIChyb3dzID0gbGlzdHNbKytiYXRjaF0pICYmXG4gICAgICAgICAgICAobGVuZ3RoID0gcm93cy5sZW5ndGgpIDw9IGluZGV4ICYmXG4gICAgICAgICAgICAwIDw9IChpbmRleCAtPSBsZW5ndGgpOykge31cbiAgICAgICAgcmV0dXJuIHJvd3MgJiYgLTEgPCBpbmRleCA/IHJvd3NbaW5kZXhdIDogbnVsbDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIHJhbmdlKGZyb206IG51bWJlciwgdG90YWw6IG51bWJlciwgYmF0Y2g/OiBudW1iZXIpIHtcbiAgICAgICAgLyogaW5saW5lZCBgZmluZFZpcnR1YWxgIGltcGwgKi9cbiAgICAgICAgbGV0IHJvd3MsIGxvY2FsID0gZnJvbSwgbGVuZ3RoO1xuICAgICAgICBsZXQgeyBsaXN0cywgX2FycmF5VHlwZSB9ID0gdGhpcztcbiAgICAgICAgZm9yIChiYXRjaCA9IChiYXRjaCB8fCAwKSAtIDE7XG4gICAgICAgICAgICAocm93cyA9IGxpc3RzWysrYmF0Y2hdKSAmJlxuICAgICAgICAgICAgKGxlbmd0aCA9IHJvd3MubGVuZ3RoKSA8PSBsb2NhbCAmJlxuICAgICAgICAgICAgMCA8PSAobG9jYWwgLT0gbGVuZ3RoKTspIHt9XG4gICAgICAgIGlmIChyb3dzICYmIGxvY2FsID4gLTEpIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDAsIGxpc3RzTGVuZ3RoID0gbGlzdHMubGVuZ3RoO1xuICAgICAgICAgICAgbGV0IHNldDogYW55ID0gQXJyYXkuaXNBcnJheShyb3dzKSA/IGFycmF5U2V0IDogdHlwZWRBcnJheVNldDtcbiAgICAgICAgICAgIGxldCBzbGljZSA9IF9hcnJheVR5cGVbJ3Byb3RvdHlwZSddWydzdWJhcnJheSddIHx8IF9hcnJheVR5cGVbJ3Byb3RvdHlwZSddWydzbGljZSddO1xuICAgICAgICAgICAgbGV0IHNvdXJjZSA9IHNsaWNlLmNhbGwocm93cywgbG9jYWwsIGxvY2FsICsgdG90YWwpLCB0YXJnZXQgPSBzb3VyY2U7XG4gICAgICAgICAgICAvLyBQZXJmIG9wdGltaXphdGlvbjogaWYgdGhlIGZpcnN0IHNsaWNlIGNvbnRhaW5zIGFsbCB0aGUgdmFsdWVzIHdlJ3JlIGxvb2tpbmcgZm9yLFxuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0byBjb3B5IHZhbHVlcyB0byBhIHRhcmdldCBBcnJheS4gSWYgd2UncmUgc2xpY2luZyBhIFR5cGVkQXJyYXksXG4gICAgICAgICAgICAvLyB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQgYXMgd2UgYXZvaWQgdGhlIG1lbWNweSDwn46JXG4gICAgICAgICAgICBpZiAoc291cmNlLmxlbmd0aCA8IHRvdGFsKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IF9hcnJheVR5cGUodG90YWwpO1xuICAgICAgICAgICAgICAgIHdoaWxlICgoaW5kZXggPSBzZXQoc291cmNlLCB0YXJnZXQsIGluZGV4KSkgPCB0b3RhbCkge1xuICAgICAgICAgICAgICAgICAgICByb3dzID0gbGlzdHNbYmF0Y2ggPSAoKGJhdGNoICsgMSkgJSBsaXN0c0xlbmd0aCldO1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzbGljZS5jYWxsKHJvd3MsIDAsIE1hdGgubWluKHJvd3MubGVuZ3RoLCB0b3RhbCAtIGluZGV4KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldCBhcyBhbnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBfYXJyYXlUeXBlKDApO1xuICAgIH1cbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIGxldCBpbmRleCA9IC0xLCB7IGxpc3RzLCBsZW5ndGggfSA9IHRoaXM7XG4gICAgICAgIGZvciAobGV0IG91dGVyID0gLTEsIG4gPSBsaXN0cy5sZW5ndGg7ICsrb3V0ZXIgPCBuOykge1xuICAgICAgICAgICAgbGV0IGxpc3QgPSBsaXN0c1tvdXRlcl0gYXMgYW55O1xuICAgICAgICAgICAgZm9yIChsZXQgaW5uZXIgPSAtMSwgayA9IGxpc3QubGVuZ3RoOyArK2luZGV4IDwgbGVuZ3RoICYmICsraW5uZXIgPCBrOykge1xuICAgICAgICAgICAgICAgIHlpZWxkIGxpc3RbaW5uZXJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBWYWxpZGl0eUFyZ3MgPSBWZWN0b3I8Ym9vbGVhbj4gfCBVaW50OEFycmF5O1xuZXhwb3J0IGNsYXNzIEJpdFZlY3RvciBleHRlbmRzIFZpcnR1YWxWZWN0b3I8Ym9vbGVhbiwgVWludDhBcnJheT4ge1xuICAgIHN0YXRpYyBjb25zdGFudDogVmVjdG9yPGJvb2xlYW4+ID0gbmV3IChjbGFzcyBWYWxpZFZlY3RvciBleHRlbmRzIFZlY3Rvcjxib29sZWFuPiB7XG4gICAgICAgIGdldCgpIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgZG8geyB5aWVsZCB0cnVlOyB9IHdoaWxlICh0cnVlKTtcbiAgICAgICAgfVxuICAgIH0pKCk7XG4gICAgc3RhdGljIGZyb20oc3JjOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHNyYyBpbnN0YW5jZW9mIEJpdFZlY3RvciAgID8gc3JjXG4gICAgICAgICAgICAgOiBzcmMgPT09IEJpdFZlY3Rvci5jb25zdGFudCA/IHNyY1xuICAgICAgICAgICAgIDogc3JjIGluc3RhbmNlb2YgVWludDhBcnJheSAgICAgICA/IG5ldyBCaXRWZWN0b3Ioc3JjKVxuICAgICAgICAgICAgIDogc3JjIGluc3RhbmNlb2YgQXJyYXkgICAgICAgICAgICA/IG5ldyBCaXRWZWN0b3IoQml0VmVjdG9yLnBhY2soc3JjKSlcbiAgICAgICAgICAgICA6IHNyYyBpbnN0YW5jZW9mIFZlY3RvciAgICAgICAgICAgPyBuZXcgQml0VmVjdG9yKEJpdFZlY3Rvci5wYWNrKHNyYykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQml0VmVjdG9yLmNvbnN0YW50IGFzIFZlY3Rvcjxhbnk+O1xuICAgIH1cbiAgICBzdGF0aWMgcGFjayh2YWx1ZXM6IEl0ZXJhYmxlPGFueT4pIHtcbiAgICAgICAgbGV0IHhzID0gW10sIG4sIGkgPSAwO1xuICAgICAgICBsZXQgYml0ID0gMCwgYnl0ZSA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICB2YWx1ZSAmJiAoYnl0ZSB8PSAxIDw8IGJpdCk7XG4gICAgICAgICAgICBpZiAoKytiaXQgPT09IDgpIHtcbiAgICAgICAgICAgICAgICB4c1tpKytdID0gYnl0ZTtcbiAgICAgICAgICAgICAgICBieXRlID0gYml0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gMCB8fCBiaXQgPiAwKSB7IHhzW2krK10gPSBieXRlOyB9XG4gICAgICAgIGlmIChpICUgOCAmJiAobiA9IG4gPSBpICsgOCAtIGkgJSA4KSkge1xuICAgICAgICAgICAgZG8geyB4c1tpXSA9IDA7IH0gd2hpbGUgKCsraSA8IG4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh4cyk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmxpc3RzOiBVaW50OEFycmF5W10pIHtcbiAgICAgICAgc3VwZXIoLi4ubGlzdHMpO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGlzdHMucmVkdWNlKChsLCB4cykgPT4gbCArIHhzWydsZW5ndGgnXSwgMCk7XG4gICAgfVxuICAgIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIC8qIGlubGluZWQgYGZpbmRWaXJ0dWFsYCBpbXBsICovXG4gICAgICAgIGxldCByb3dzLCBsZW5ndGgsIGxpc3RzID0gdGhpcy5saXN0cztcbiAgICAgICAgZm9yIChsZXQgYmF0Y2ggPSAtMTtcbiAgICAgICAgICAgIChyb3dzID0gbGlzdHNbKytiYXRjaF0pICYmXG4gICAgICAgICAgICAobGVuZ3RoID0gcm93cy5sZW5ndGgpIDw9IGluZGV4ICYmXG4gICAgICAgICAgICAwIDw9IChpbmRleCAtPSBsZW5ndGgpOykge31cbiAgICAgICAgcmV0dXJuICEoIXJvd3MgfHwgaW5kZXggPCAwIHx8IChyb3dzW2luZGV4ID4+IDMgfCAwXSAmIDEgPDwgaW5kZXggJSA4KSA9PT0gMCk7XG4gICAgfVxuICAgIHNldChpbmRleDogbnVtYmVyLCB2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICAvKiBpbmxpbmVkIGBmaW5kVmlydHVhbGAgaW1wbCAqL1xuICAgICAgICBsZXQgcm93cywgbGVuZ3RoLCBsaXN0cyA9IHRoaXMubGlzdHM7XG4gICAgICAgIGZvciAobGV0IGJhdGNoID0gLTE7XG4gICAgICAgICAgICAocm93cyA9IGxpc3RzWysrYmF0Y2hdKSAmJlxuICAgICAgICAgICAgKGxlbmd0aCA9IHJvd3MubGVuZ3RoKSA8PSBpbmRleCAmJlxuICAgICAgICAgICAgMCA8PSAoaW5kZXggLT0gbGVuZ3RoKTspIHt9XG4gICAgICAgIGlmIChyb3dzICYmIGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgPyAocm93c1tpbmRleCA+PiAzIHwgMF0gfD0gICgxIDw8IChpbmRleCAlIDgpKSlcbiAgICAgICAgICAgICAgICA6IChyb3dzW2luZGV4ID4+IDMgfCAwXSAmPSB+KDEgPDwgKGluZGV4ICUgOCkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25jYXQodmVjdG9yOiBCaXRWZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCaXRWZWN0b3IoLi4udGhpcy5saXN0cywgLi4udmVjdG9yLmxpc3RzKTtcbiAgICB9XG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGJ5dGUgb2Ygc3VwZXJbU3ltYm9sLml0ZXJhdG9yXSgpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gLTE7ICsraSA8IDg7KSB7XG4gICAgICAgICAgICAgICAgeWllbGQgKGJ5dGUgJiAxIDw8IGkpICE9PSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwZWRWZWN0b3I8VCwgVEFycmF5VHlwZT4gZXh0ZW5kcyBWaXJ0dWFsVmVjdG9yPFQsIFRBcnJheVR5cGU+IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWxpZGl0eTogVmFsaWRpdHlBcmdzLCAuLi5saXN0czogVEFycmF5VHlwZVtdKSB7XG4gICAgICAgIHN1cGVyKC4uLmxpc3RzKTtcbiAgICAgICAgdmFsaWRpdHkgJiYgKHRoaXMudmFsaWRpdHkgPSBCaXRWZWN0b3IuZnJvbSh2YWxpZGl0eSkpO1xuICAgIH1cbiAgICBjb25jYXQodmVjdG9yOiBUeXBlZFZlY3RvcjxULCBUQXJyYXlUeXBlPikge1xuICAgICAgICByZXR1cm4gKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIFR5cGVkVmVjdG9yKS5mcm9tKHRoaXMsXG4gICAgICAgICAgICB0aGlzLmxlbmd0aCArIHZlY3Rvci5sZW5ndGgsXG4gICAgICAgICAgICB0aGlzLnZhbGlkaXR5LmNvbmNhdCh2ZWN0b3IudmFsaWRpdHkpLFxuICAgICAgICAgICAgLi4udGhpcy5saXN0cywgLi4udmVjdG9yLmxpc3RzXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0ZVZlY3RvciBleHRlbmRzIFR5cGVkVmVjdG9yPERhdGUsIFVpbnQzMkFycmF5PiB7XG4gICAgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnZhbGlkaXR5LmdldChpbmRleCkgPyBudWxsIDogbmV3IERhdGUoXG4gICAgICAgICAgICBNYXRoLnBvdygyLCAzMikgKlxuICAgICAgICAgICAgICAgIDxhbnk+IHN1cGVyLmdldCgyICogaW5kZXggKyAxKSArXG4gICAgICAgICAgICAgICAgPGFueT4gc3VwZXIuZ2V0KDIgKiBpbmRleClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICBsZXQgdiwgbG93LCBoaWdoO1xuICAgICAgICBsZXQgaXQgPSBzdXBlcltTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIGxldCBpdiA9IHRoaXMudmFsaWRpdHlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICB3aGlsZSAoISh2ID0gaXYubmV4dCgpKS5kb25lICYmICEobG93ID0gaXQubmV4dCgpKS5kb25lICYmICEoaGlnaCA9IGl0Lm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgeWllbGQgIXYudmFsdWUgPyBudWxsIDogbmV3IERhdGUoTWF0aC5wb3coMiwgMzIpICogaGlnaC52YWx1ZSArIGxvdy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbmRleFZlY3RvciBleHRlbmRzIFR5cGVkVmVjdG9yPG51bWJlciB8IG51bWJlcltdLCBJbnQzMkFycmF5PiB7XG4gICAgZ2V0KGluZGV4OiBudW1iZXIsIHJldHVybldpdGhCYXRjaEluZGV4ID0gZmFsc2UpIHtcbiAgICAgICAgLyogaW5saW5lZCBgZmluZFZpcnR1YWxgIGltcGwgKi9cbiAgICAgICAgbGV0IHJvd3MsIGxlbmd0aCwgYmF0Y2ggPSAtMSwgbGlzdHMgPSB0aGlzLmxpc3RzO1xuICAgICAgICBmb3IgKDtcbiAgICAgICAgICAgIChyb3dzID0gbGlzdHNbKytiYXRjaF0pICYmXG4gICAgICAgICAgICAobGVuZ3RoID0gcm93cy5sZW5ndGgpIDw9IGluZGV4ICYmXG4gICAgICAgICAgICAwIDw9IChpbmRleCAtPSBsZW5ndGgpOykge31cbiAgICAgICAgcmV0dXJuICFyZXR1cm5XaXRoQmF0Y2hJbmRleFxuICAgICAgICAgICAgPyAocm93cyAmJiAtMSA8IGluZGV4ID8gcm93c1tpbmRleCArIGJhdGNoXSA6IG51bGwpIGFzIG51bWJlclxuICAgICAgICAgICAgOiAocm93cyAmJiAtMSA8IGluZGV4ID8gW3Jvd3NbaW5kZXggKyBiYXRjaF0sIGJhdGNoXSA6IFswLCAtMV0pIGFzIG51bWJlcltdO1xuICAgIH1cbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIC8vIEFsdGVybmF0ZSBiZXR3ZWVuIGl0ZXJhdGluZyBhIHR1cGxlIG9mIFtmcm9tLCBiYXRjaF0sIGFuZCB0by4gVGhlIGZyb21cbiAgICAgICAgLy8gYW5kIHRvIHZhbHVlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHJlY29yZCBiYXRjaCB0aGV5J3JlIGRlZmluZWQgaW4sIHNvXG4gICAgICAgIC8vIGBMaXN0VmVjdG9yQmFzZWAgbmVlZHMgdG8ga25vdyB0aGUgcmlnaHQgYmF0Y2ggdG8gcmVhZC5cbiAgICAgICAgbGV0IHhzID0gbmV3IEludDMyQXJyYXkoMiksIHsgbGlzdHMgfSA9IHRoaXM7XG4gICAgICAgIGZvciAobGV0IGkgPSAtMSwgbiA9IGxpc3RzLmxlbmd0aDsgKytpIDwgbjspIHtcbiAgICAgICAgICAgIGxldCBsaXN0ID0gbGlzdHNbaV0gYXMgYW55O1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IC0xLCBrID0gbGlzdC5sZW5ndGggLSAxOyArK2ogPCBrOykge1xuICAgICAgICAgICAgICAgIHhzWzFdID0gaTtcbiAgICAgICAgICAgICAgICB4c1swXSA9IGxpc3Rbal07XG4gICAgICAgICAgICAgICAgeWllbGQgeHM7XG4gICAgICAgICAgICAgICAgeWllbGQgbGlzdFtqICsgMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCeXRlVmVjdG9yPFRMaXN0PiBleHRlbmRzIFR5cGVkVmVjdG9yPG51bWJlciwgVExpc3Q+IHtcbiAgICBnZXQoaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGl0eS5nZXQoaW5kZXgpID8gc3VwZXIuZ2V0KGluZGV4KSA6IG51bGw7XG4gICAgfVxuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgbGV0IHYsIHIsIHsgdmFsaWRpdHkgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpdCA9IHN1cGVyW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgLy8gZmFzdCBwYXRoIHRoZSBjYXNlIG9mIG5vIG51bGxzXG4gICAgICAgIGlmICh2YWxpZGl0eSA9PT0gQml0VmVjdG9yLmNvbnN0YW50KSB7XG4gICAgICAgICAgICB5aWVsZCogaXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaXYgPSB2YWxpZGl0eVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgICAgICB3aGlsZSAoISh2ID0gaXYubmV4dCgpKS5kb25lICYmICEociA9IGl0Lm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICAgIHlpZWxkICF2LnZhbHVlID8gbnVsbCA6IHIudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMb25nVmVjdG9yPFRMaXN0PiBleHRlbmRzIFR5cGVkVmVjdG9yPExvbmcsIFRMaXN0PiB7XG4gICAgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnZhbGlkaXR5LmdldChpbmRleCkgPyBudWxsIDogbmV3IExvbmcoXG4gICAgICAgICAgICA8YW55PiBzdXBlci5nZXQoaW5kZXggKiAyKSwgICAgIC8qIGxvdyAqL1xuICAgICAgICAgICAgPGFueT4gc3VwZXIuZ2V0KGluZGV4ICogMiArIDEpIC8qIGhpZ2ggKi9cbiAgICAgICAgKTtcbiAgICB9XG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICBsZXQgdiwgbG93LCBoaWdoO1xuICAgICAgICBsZXQgaXQgPSBzdXBlcltTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIGxldCBpdiA9IHRoaXMudmFsaWRpdHlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICB3aGlsZSAoISh2ID0gaXYubmV4dCgpKS5kb25lICYmICEobG93ID0gaXQubmV4dCgpKS5kb25lICYmICEoaGlnaCA9IGl0Lm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgeWllbGQgIXYudmFsdWUgPyBudWxsIDogbmV3IExvbmcobG93LnZhbHVlLCBoaWdoLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludDhWZWN0b3IgICAgZXh0ZW5kcyBCeXRlVmVjdG9yPEludDhBcnJheT4gICAge31cbmV4cG9ydCBjbGFzcyBJbnQxNlZlY3RvciAgIGV4dGVuZHMgQnl0ZVZlY3RvcjxJbnQxNkFycmF5PiAgIHt9XG5leHBvcnQgY2xhc3MgSW50MzJWZWN0b3IgICBleHRlbmRzIEJ5dGVWZWN0b3I8SW50MzJBcnJheT4gICB7fVxuZXhwb3J0IGNsYXNzIEludDY0VmVjdG9yICAgZXh0ZW5kcyBMb25nVmVjdG9yPEludDMyQXJyYXk+ICAge31cbmV4cG9ydCBjbGFzcyBVaW50OFZlY3RvciAgIGV4dGVuZHMgQnl0ZVZlY3RvcjxVaW50OEFycmF5PiAgIHt9XG5leHBvcnQgY2xhc3MgVWludDE2VmVjdG9yICBleHRlbmRzIEJ5dGVWZWN0b3I8VWludDE2QXJyYXk+ICB7fVxuZXhwb3J0IGNsYXNzIFVpbnQzMlZlY3RvciAgZXh0ZW5kcyBCeXRlVmVjdG9yPFVpbnQzMkFycmF5PiAge31cbmV4cG9ydCBjbGFzcyBVaW50NjRWZWN0b3IgIGV4dGVuZHMgTG9uZ1ZlY3RvcjxVaW50MzJBcnJheT4gIHt9XG5leHBvcnQgY2xhc3MgRmxvYXQzMlZlY3RvciBleHRlbmRzIEJ5dGVWZWN0b3I8RmxvYXQzMkFycmF5PiB7fVxuZXhwb3J0IGNsYXNzIEZsb2F0NjRWZWN0b3IgZXh0ZW5kcyBCeXRlVmVjdG9yPEZsb2F0NjRBcnJheT4ge31cblxuTG9uZ1ZlY3Rvci5wcm90b3R5cGUuc3RyaWRlID0gMjtcbihWZWN0b3IucHJvdG90eXBlIGFzIGFueSkubGlzdHMgPSBbXTtcbihWZWN0b3IucHJvdG90eXBlIGFzIGFueSkudmFsaWRpdHkgPSBCaXRWZWN0b3IuY29uc3RhbnQ7XG4oVmlydHVhbFZlY3Rvci5wcm90b3R5cGUgYXMgYW55KS5fYXJyYXlUeXBlID0gQXJyYXk7XG4oSW50OFZlY3Rvci5wcm90b3R5cGUgYXMgYW55KS5fYXJyYXlUeXBlID0gSW50OEFycmF5O1xuKEludDE2VmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBJbnQxNkFycmF5O1xuKEludDMyVmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBJbnQzMkFycmF5O1xuKEludDY0VmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBJbnQzMkFycmF5O1xuKFVpbnQ4VmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBVaW50OEFycmF5O1xuKFVpbnQxNlZlY3Rvci5wcm90b3R5cGUgYXMgYW55KS5fYXJyYXlUeXBlID0gVWludDE2QXJyYXk7XG4oVWludDMyVmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBVaW50MzJBcnJheTtcbihVaW50NjRWZWN0b3IucHJvdG90eXBlIGFzIGFueSkuX2FycmF5VHlwZSA9IFVpbnQzMkFycmF5O1xuKERhdGVWZWN0b3IucHJvdG90eXBlIGFzIGFueSkuX2FycmF5VHlwZSA9IFVpbnQzMkFycmF5O1xuKEluZGV4VmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBJbnQzMkFycmF5O1xuKEZsb2F0MzJWZWN0b3IucHJvdG90eXBlIGFzIGFueSkuX2FycmF5VHlwZSA9IEZsb2F0MzJBcnJheTtcbihGbG9hdDY0VmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBGbG9hdDY0QXJyYXk7XG5cbmZ1bmN0aW9uIGFycmF5U2V0PFQ+KHNvdXJjZTogQXJyYXk8VD4sIHRhcmdldDogQXJyYXk8VD4sIGluZGV4OiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHNvdXJjZS5sZW5ndGg7IGkgPCBuOykge1xuICAgICAgICB0YXJnZXRbaW5kZXgrK10gPSBzb3VyY2VbaSsrXTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U2V0KHNvdXJjZTogVHlwZWRBcnJheSwgdGFyZ2V0OiBUeXBlZEFycmF5LCBpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRhcmdldC5zZXQoc291cmNlLCBpbmRleCkgfHwgaW5kZXggKyBzb3VyY2UubGVuZ3RoO1xufVxuXG4vLyBSYXRoZXIgdGhhbiBlYXQgdGhlIGl0ZXJhdG9yIGNvc3QsIHdlJ3ZlIGlubGluZWQgdGhpcyBmdW5jdGlvbiBpbnRvIHRoZSByZWxldmFudCBmdW5jdGlvbnNcbi8vIGZ1bmN0aW9uKiBmaW5kVmlydHVhbDxUTGlzdD4oaW5kZXg6IG51bWJlciwgbGlzdHM6IFRMaXN0W10sIGJhdGNoPzogbnVtYmVyKSB7XG4vLyAgICAgbGV0IHJvd3MsIGxlbmd0aDtcbi8vICAgICBmb3IgKGJhdGNoID0gKGJhdGNoIHx8IDApIC0gMTtcbi8vICAgICAgICAgKHJvd3MgPSBsaXN0c1srK2JhdGNoXSkgJiZcbi8vICAgICAgICAgKGxlbmd0aCA9IHJvd3MubGVuZ3RoKSA8PSBpbmRleCAmJlxuLy8gICAgICAgICAwIDw9IChpbmRleCAtPSBsZW5ndGgpOykge31cbi8vICAgICByZXR1cm4gcm93cyAmJiAtMSA8IGluZGV4ID8geWllbGQgW3Jvd3MsIGluZGV4LCBiYXRjaF0gOiBudWxsO1xuLy8gfVxuXG5leHBvcnQgdHlwZSBUeXBlZEFycmF5Q3RvcjxUIGV4dGVuZHMgVHlwZWRBcnJheT4gPSB7XG4gICAgcmVhZG9ubHkgcHJvdG90eXBlOiBUO1xuICAgIHJlYWRvbmx5IEJZVEVTX1BFUl9FTEVNRU5UOiBudW1iZXI7XG4gICAgbmV3KGxlbmd0aDogbnVtYmVyKTogVDtcbiAgICBuZXcoYXJyYXk6IEFycmF5TGlrZTxudW1iZXI+KTogVDtcbiAgICBuZXcoYnVmZmVyOiBBcnJheUJ1ZmZlckxpa2UsIGJ5dGVPZmZzZXQ/OiBudW1iZXIsIGxlbmd0aD86IG51bWJlcik6IFQ7XG59O1xuXG5leHBvcnQgdHlwZSBGbG9hdEFycmF5ID0gRmxvYXQzMkFycmF5IHwgRmxvYXQ2NEFycmF5O1xuZXhwb3J0IHR5cGUgSW50QXJyYXkgPSBJbnQ4QXJyYXkgfCBJbnQxNkFycmF5IHwgSW50MzJBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5IHwgVWludDhBcnJheSB8IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXk7XG5cbmV4cG9ydCB0eXBlIFR5cGVkQXJyYXkgPSAoXG4gICAgICAgICAgICBJbnQ4QXJyYXkgICAgICAgIHxcbiAgICAgICAgICAgIFVpbnQ4QXJyYXkgICAgICAgfFxuICAgICAgICAgICAgSW50MTZBcnJheSAgICAgICB8XG4gICAgICAgICAgICBJbnQzMkFycmF5ICAgICAgIHxcbiAgICAgICAgICAgIFVpbnQxNkFycmF5ICAgICAgfFxuICAgICAgICAgICAgVWludDMyQXJyYXkgICAgICB8XG4gICAgICAgICAgICBGbG9hdDMyQXJyYXkgICAgIHxcbiAgICAgICAgICAgIEZsb2F0NjRBcnJheSAgICAgfFxuICAgICAgICAgICAgVWludDhDbGFtcGVkQXJyYXkpO1xuIl19
//# sourceMappingURL=data:application/json;charset=utf8;base64,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WyIvLyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4vLyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbi8vIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4vLyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4vLyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4vLyBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbi8vIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbi8vIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4vLyBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuLy8gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4vLyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4vLyB1bmRlciB0aGUgTGljZW5zZS5cblxuaW1wb3J0IHsgVmVjdG9yIH0gZnJvbSAnLi92ZWN0b3InO1xuaW1wb3J0IHsgZmxhdGJ1ZmZlcnMgfSBmcm9tICdmbGF0YnVmZmVycyc7XG5cbmltcG9ydCBMb25nID0gZmxhdGJ1ZmZlcnMuTG9uZztcblxuZXhwb3J0IHR5cGUgVkFycmF5PFQgPSBhbnk+ID0ge1xuICAgIFtrOiBudW1iZXJdOiBUOyBsZW5ndGg6IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcjogVkFycmF5Q3RvcjxWQXJyYXk8VD4+O1xufTtcblxuZXhwb3J0IHR5cGUgVkFycmF5Q3RvcjxWQXJyYXk+ID0ge1xuICAgIHJlYWRvbmx5IHByb3RvdHlwZTogVkFycmF5O1xuICAgIEJZVEVTX1BFUl9FTEVNRU5UPzogbnVtYmVyO1xuICAgIG5ldyguLi5hcmdzOiBhbnlbXSk6IFZBcnJheTtcbn07XG5cbmV4cG9ydCBjbGFzcyBWaXJ0dWFsVmVjdG9yPFQsIFRBcnJheVR5cGUgPSBWQXJyYXk8VD4+IGV4dGVuZHMgVmVjdG9yPFQ+IHtcbiAgICBwcm90ZWN0ZWQgbGlzdHM6IFRBcnJheVR5cGVbXTtcbiAgICBwcm90ZWN0ZWQgX2FycmF5VHlwZTogVkFycmF5Q3RvcjxUQXJyYXlUeXBlPjtcbiAgICBwdWJsaWMgZ2V0IGFycmF5VHlwZSgpIHsgcmV0dXJuIHRoaXMuX2FycmF5VHlwZTsgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmxpc3RzOiBUQXJyYXlUeXBlW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5saXN0cyA9IGxpc3RzLmZpbHRlcihCb29sZWFuKTtcbiAgICB9XG4gICAgZ2V0KGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICAgICAgLyogaW5saW5lZCBgZmluZFZpcnR1YWxgIGltcGwgKi9cbiAgICAgICAgbGV0IHJvd3MsIGxlbmd0aCwgbGlzdHMgPSB0aGlzLmxpc3RzO1xuICAgICAgICBmb3IgKGxldCBiYXRjaCA9IC0xO1xuICAgICAgICAgICAgKHJvd3MgPSBsaXN0c1srK2JhdGNoXSkgJiZcbiAgICAgICAgICAgIChsZW5ndGggPSByb3dzLmxlbmd0aCkgPD0gaW5kZXggJiZcbiAgICAgICAgICAgIDAgPD0gKGluZGV4IC09IGxlbmd0aCk7KSB7fVxuICAgICAgICByZXR1cm4gcm93cyAmJiAtMSA8IGluZGV4ID8gcm93c1tpbmRleF0gOiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcmFuZ2UoZnJvbTogbnVtYmVyLCB0b3RhbDogbnVtYmVyLCBiYXRjaD86IG51bWJlcikge1xuICAgICAgICAvKiBpbmxpbmVkIGBmaW5kVmlydHVhbGAgaW1wbCAqL1xuICAgICAgICBsZXQgcm93cywgbG9jYWwgPSBmcm9tLCBsZW5ndGg7XG4gICAgICAgIGxldCB7IGxpc3RzLCBfYXJyYXlUeXBlIH0gPSB0aGlzO1xuICAgICAgICBmb3IgKGJhdGNoID0gKGJhdGNoIHx8IDApIC0gMTtcbiAgICAgICAgICAgIChyb3dzID0gbGlzdHNbKytiYXRjaF0pICYmXG4gICAgICAgICAgICAobGVuZ3RoID0gcm93cy5sZW5ndGgpIDw9IGxvY2FsICYmXG4gICAgICAgICAgICAwIDw9IChsb2NhbCAtPSBsZW5ndGgpOykge31cbiAgICAgICAgaWYgKHJvd3MgJiYgbG9jYWwgPiAtMSkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gMCwgbGlzdHNMZW5ndGggPSBsaXN0cy5sZW5ndGg7XG4gICAgICAgICAgICBsZXQgc2V0OiBhbnkgPSBBcnJheS5pc0FycmF5KHJvd3MpID8gYXJyYXlTZXQgOiB0eXBlZEFycmF5U2V0O1xuICAgICAgICAgICAgbGV0IHNsaWNlID0gX2FycmF5VHlwZVsncHJvdG90eXBlJ11bJ3N1YmFycmF5J10gfHwgX2FycmF5VHlwZVsncHJvdG90eXBlJ11bJ3NsaWNlJ107XG4gICAgICAgICAgICBsZXQgc291cmNlID0gc2xpY2UuY2FsbChyb3dzLCBsb2NhbCwgbG9jYWwgKyB0b3RhbCksIHRhcmdldCA9IHNvdXJjZTtcbiAgICAgICAgICAgIC8vIFBlcmYgb3B0aW1pemF0aW9uOiBpZiB0aGUgZmlyc3Qgc2xpY2UgY29udGFpbnMgYWxsIHRoZSB2YWx1ZXMgd2UncmUgbG9va2luZyBmb3IsXG4gICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRvIGNvcHkgdmFsdWVzIHRvIGEgdGFyZ2V0IEFycmF5LiBJZiB3ZSdyZSBzbGljaW5nIGEgVHlwZWRBcnJheSxcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBzaWduaWZpY2FudCBpbXByb3ZlbWVudCBhcyB3ZSBhdm9pZCB0aGUgbWVtY3B5IPCfjolcbiAgICAgICAgICAgIGlmIChzb3VyY2UubGVuZ3RoIDwgdG90YWwpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgX2FycmF5VHlwZSh0b3RhbCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKChpbmRleCA9IHNldChzb3VyY2UsIHRhcmdldCwgaW5kZXgpKSA8IHRvdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3MgPSBsaXN0c1tiYXRjaCA9ICgoYmF0Y2ggKyAxKSAlIGxpc3RzTGVuZ3RoKV07XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNsaWNlLmNhbGwocm93cywgMCwgTWF0aC5taW4ocm93cy5sZW5ndGgsIHRvdGFsIC0gaW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0IGFzIGFueTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IF9hcnJheVR5cGUoMCk7XG4gICAgfVxuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gLTEsIHsgbGlzdHMsIGxlbmd0aCB9ID0gdGhpcztcbiAgICAgICAgZm9yIChsZXQgb3V0ZXIgPSAtMSwgbiA9IGxpc3RzLmxlbmd0aDsgKytvdXRlciA8IG47KSB7XG4gICAgICAgICAgICBsZXQgbGlzdCA9IGxpc3RzW291dGVyXSBhcyBhbnk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbm5lciA9IC0xLCBrID0gbGlzdC5sZW5ndGg7ICsraW5kZXggPCBsZW5ndGggJiYgKytpbm5lciA8IGs7KSB7XG4gICAgICAgICAgICAgICAgeWllbGQgbGlzdFtpbm5lcl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFZhbGlkaXR5QXJncyA9IFZlY3Rvcjxib29sZWFuPiB8IFVpbnQ4QXJyYXk7XG5leHBvcnQgY2xhc3MgQml0VmVjdG9yIGV4dGVuZHMgVmlydHVhbFZlY3Rvcjxib29sZWFuLCBVaW50OEFycmF5PiB7XG4gICAgc3RhdGljIGNvbnN0YW50OiBWZWN0b3I8Ym9vbGVhbj4gPSBuZXcgKGNsYXNzIFZhbGlkVmVjdG9yIGV4dGVuZHMgVmVjdG9yPGJvb2xlYW4+IHtcbiAgICAgICAgZ2V0KCkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICBkbyB7IHlpZWxkIHRydWU7IH0gd2hpbGUgKHRydWUpO1xuICAgICAgICB9XG4gICAgfSkoKTtcbiAgICBzdGF0aWMgZnJvbShzcmM6IGFueSkge1xuICAgICAgICByZXR1cm4gc3JjIGluc3RhbmNlb2YgQml0VmVjdG9yICAgPyBzcmNcbiAgICAgICAgICAgICA6IHNyYyA9PT0gQml0VmVjdG9yLmNvbnN0YW50ID8gc3JjXG4gICAgICAgICAgICAgOiBzcmMgaW5zdGFuY2VvZiBVaW50OEFycmF5ICAgICAgID8gbmV3IEJpdFZlY3RvcihzcmMpXG4gICAgICAgICAgICAgOiBzcmMgaW5zdGFuY2VvZiBBcnJheSAgICAgICAgICAgID8gbmV3IEJpdFZlY3RvcihCaXRWZWN0b3IucGFjayhzcmMpKVxuICAgICAgICAgICAgIDogc3JjIGluc3RhbmNlb2YgVmVjdG9yICAgICAgICAgICA/IG5ldyBCaXRWZWN0b3IoQml0VmVjdG9yLnBhY2soc3JjKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBCaXRWZWN0b3IuY29uc3RhbnQgYXMgVmVjdG9yPGFueT47XG4gICAgfVxuICAgIHN0YXRpYyBwYWNrKHZhbHVlczogSXRlcmFibGU8YW55Pikge1xuICAgICAgICBsZXQgeHMgPSBbXSwgbiwgaSA9IDA7XG4gICAgICAgIGxldCBiaXQgPSAwLCBieXRlID0gMDtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIHZhbHVlICYmIChieXRlIHw9IDEgPDwgYml0KTtcbiAgICAgICAgICAgIGlmICgrK2JpdCA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHhzW2krK10gPSBieXRlO1xuICAgICAgICAgICAgICAgIGJ5dGUgPSBiaXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpID09PSAwIHx8IGJpdCA+IDApIHsgeHNbaSsrXSA9IGJ5dGU7IH1cbiAgICAgICAgaWYgKGkgJSA4ICYmIChuID0gbiA9IGkgKyA4IC0gaSAlIDgpKSB7XG4gICAgICAgICAgICBkbyB7IHhzW2ldID0gMDsgfSB3aGlsZSAoKytpIDwgbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHhzKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4ubGlzdHM6IFVpbnQ4QXJyYXlbXSkge1xuICAgICAgICBzdXBlciguLi5saXN0cyk7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5saXN0cy5yZWR1Y2UoKGwsIHhzKSA9PiBsICsgeHNbJ2xlbmd0aCddLCAwKTtcbiAgICB9XG4gICAgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgLyogaW5saW5lZCBgZmluZFZpcnR1YWxgIGltcGwgKi9cbiAgICAgICAgbGV0IHJvd3MsIGxlbmd0aCwgbGlzdHMgPSB0aGlzLmxpc3RzO1xuICAgICAgICBmb3IgKGxldCBiYXRjaCA9IC0xO1xuICAgICAgICAgICAgKHJvd3MgPSBsaXN0c1srK2JhdGNoXSkgJiZcbiAgICAgICAgICAgIChsZW5ndGggPSByb3dzLmxlbmd0aCkgPD0gaW5kZXggJiZcbiAgICAgICAgICAgIDAgPD0gKGluZGV4IC09IGxlbmd0aCk7KSB7fVxuICAgICAgICByZXR1cm4gISghcm93cyB8fCBpbmRleCA8IDAgfHwgKHJvd3NbaW5kZXggPj4gMyB8IDBdICYgMSA8PCBpbmRleCAlIDgpID09PSAwKTtcbiAgICB9XG4gICAgc2V0KGluZGV4OiBudW1iZXIsIHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIC8qIGlubGluZWQgYGZpbmRWaXJ0dWFsYCBpbXBsICovXG4gICAgICAgIGxldCByb3dzLCBsZW5ndGgsIGxpc3RzID0gdGhpcy5saXN0cztcbiAgICAgICAgZm9yIChsZXQgYmF0Y2ggPSAtMTtcbiAgICAgICAgICAgIChyb3dzID0gbGlzdHNbKytiYXRjaF0pICYmXG4gICAgICAgICAgICAobGVuZ3RoID0gcm93cy5sZW5ndGgpIDw9IGluZGV4ICYmXG4gICAgICAgICAgICAwIDw9IChpbmRleCAtPSBsZW5ndGgpOykge31cbiAgICAgICAgaWYgKHJvd3MgJiYgaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICA/IChyb3dzW2luZGV4ID4+IDMgfCAwXSB8PSAgKDEgPDwgKGluZGV4ICUgOCkpKVxuICAgICAgICAgICAgICAgIDogKHJvd3NbaW5kZXggPj4gMyB8IDBdICY9IH4oMSA8PCAoaW5kZXggJSA4KSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbmNhdCh2ZWN0b3I6IEJpdFZlY3Rvcikge1xuICAgICAgICByZXR1cm4gbmV3IEJpdFZlY3RvciguLi50aGlzLmxpc3RzLCAuLi52ZWN0b3IubGlzdHMpO1xuICAgIH1cbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIGZvciAoY29uc3QgYnl0ZSBvZiBzdXBlcltTeW1ib2wuaXRlcmF0b3JdKCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAtMTsgKytpIDwgODspIHtcbiAgICAgICAgICAgICAgICB5aWVsZCAoYnl0ZSAmIDEgPDwgaSkgIT09IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBlZFZlY3RvcjxULCBUQXJyYXlUeXBlPiBleHRlbmRzIFZpcnR1YWxWZWN0b3I8VCwgVEFycmF5VHlwZT4ge1xuICAgIGNvbnN0cnVjdG9yKHZhbGlkaXR5OiBWYWxpZGl0eUFyZ3MsIC4uLmxpc3RzOiBUQXJyYXlUeXBlW10pIHtcbiAgICAgICAgc3VwZXIoLi4ubGlzdHMpO1xuICAgICAgICB2YWxpZGl0eSAmJiAodGhpcy52YWxpZGl0eSA9IEJpdFZlY3Rvci5mcm9tKHZhbGlkaXR5KSk7XG4gICAgfVxuICAgIGNvbmNhdCh2ZWN0b3I6IFR5cGVkVmVjdG9yPFQsIFRBcnJheVR5cGU+KSB7XG4gICAgICAgIHJldHVybiAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgVHlwZWRWZWN0b3IpLmZyb20odGhpcyxcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoICsgdmVjdG9yLmxlbmd0aCxcbiAgICAgICAgICAgIHRoaXMudmFsaWRpdHkuY29uY2F0KHZlY3Rvci52YWxpZGl0eSksXG4gICAgICAgICAgICAuLi50aGlzLmxpc3RzLCAuLi52ZWN0b3IubGlzdHNcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlVmVjdG9yIGV4dGVuZHMgVHlwZWRWZWN0b3I8RGF0ZSwgVWludDMyQXJyYXk+IHtcbiAgICBnZXQoaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gIXRoaXMudmFsaWRpdHkuZ2V0KGluZGV4KSA/IG51bGwgOiBuZXcgRGF0ZShcbiAgICAgICAgICAgIE1hdGgucG93KDIsIDMyKSAqXG4gICAgICAgICAgICAgICAgPGFueT4gc3VwZXIuZ2V0KDIgKiBpbmRleCArIDEpICtcbiAgICAgICAgICAgICAgICA8YW55PiBzdXBlci5nZXQoMiAqIGluZGV4KVxuICAgICAgICApO1xuICAgIH1cbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIGxldCB2LCBsb3csIGhpZ2g7XG4gICAgICAgIGxldCBpdCA9IHN1cGVyW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgbGV0IGl2ID0gdGhpcy52YWxpZGl0eVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIHdoaWxlICghKHYgPSBpdi5uZXh0KCkpLmRvbmUgJiYgIShsb3cgPSBpdC5uZXh0KCkpLmRvbmUgJiYgIShoaWdoID0gaXQubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICB5aWVsZCAhdi52YWx1ZSA/IG51bGwgOiBuZXcgRGF0ZShNYXRoLnBvdygyLCAzMikgKiBoaWdoLnZhbHVlICsgbG93LnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluZGV4VmVjdG9yIGV4dGVuZHMgVHlwZWRWZWN0b3I8bnVtYmVyIHwgbnVtYmVyW10sIEludDMyQXJyYXk+IHtcbiAgICBnZXQoaW5kZXg6IG51bWJlciwgcmV0dXJuV2l0aEJhdGNoSW5kZXggPSBmYWxzZSkge1xuICAgICAgICAvKiBpbmxpbmVkIGBmaW5kVmlydHVhbGAgaW1wbCAqL1xuICAgICAgICBsZXQgcm93cywgbGVuZ3RoLCBiYXRjaCA9IC0xLCBsaXN0cyA9IHRoaXMubGlzdHM7XG4gICAgICAgIGZvciAoO1xuICAgICAgICAgICAgKHJvd3MgPSBsaXN0c1srK2JhdGNoXSkgJiZcbiAgICAgICAgICAgIChsZW5ndGggPSByb3dzLmxlbmd0aCkgPD0gaW5kZXggJiZcbiAgICAgICAgICAgIDAgPD0gKGluZGV4IC09IGxlbmd0aCk7KSB7fVxuICAgICAgICByZXR1cm4gIXJldHVybldpdGhCYXRjaEluZGV4XG4gICAgICAgICAgICA/IChyb3dzICYmIC0xIDwgaW5kZXggPyByb3dzW2luZGV4ICsgYmF0Y2hdIDogbnVsbCkgYXMgbnVtYmVyXG4gICAgICAgICAgICA6IChyb3dzICYmIC0xIDwgaW5kZXggPyBbcm93c1tpbmRleCArIGJhdGNoXSwgYmF0Y2hdIDogWzAsIC0xXSkgYXMgbnVtYmVyW107XG4gICAgfVxuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgLy8gQWx0ZXJuYXRlIGJldHdlZW4gaXRlcmF0aW5nIGEgdHVwbGUgb2YgW2Zyb20sIGJhdGNoXSwgYW5kIHRvLiBUaGUgZnJvbVxuICAgICAgICAvLyBhbmQgdG8gdmFsdWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgcmVjb3JkIGJhdGNoIHRoZXkncmUgZGVmaW5lZCBpbiwgc29cbiAgICAgICAgLy8gYExpc3RWZWN0b3JCYXNlYCBuZWVkcyB0byBrbm93IHRoZSByaWdodCBiYXRjaCB0byByZWFkLlxuICAgICAgICBsZXQgeHMgPSBuZXcgSW50MzJBcnJheSgyKSwgeyBsaXN0cyB9ID0gdGhpcztcbiAgICAgICAgZm9yIChsZXQgaSA9IC0xLCBuID0gbGlzdHMubGVuZ3RoOyArK2kgPCBuOykge1xuICAgICAgICAgICAgbGV0IGxpc3QgPSBsaXN0c1tpXSBhcyBhbnk7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gLTEsIGsgPSBsaXN0Lmxlbmd0aCAtIDE7ICsraiA8IGs7KSB7XG4gICAgICAgICAgICAgICAgeHNbMV0gPSBpO1xuICAgICAgICAgICAgICAgIHhzWzBdID0gbGlzdFtqXTtcbiAgICAgICAgICAgICAgICB5aWVsZCB4cztcbiAgICAgICAgICAgICAgICB5aWVsZCBsaXN0W2ogKyAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ5dGVWZWN0b3I8VExpc3Q+IGV4dGVuZHMgVHlwZWRWZWN0b3I8bnVtYmVyLCBUTGlzdD4ge1xuICAgIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkaXR5LmdldChpbmRleCkgPyBzdXBlci5nZXQoaW5kZXgpIDogbnVsbDtcbiAgICB9XG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICBsZXQgdiwgciwgeyB2YWxpZGl0eSB9ID0gdGhpcztcbiAgICAgICAgbGV0IGl0ID0gc3VwZXJbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICAvLyBmYXN0IHBhdGggdGhlIGNhc2Ugb2Ygbm8gbnVsbHNcbiAgICAgICAgaWYgKHZhbGlkaXR5ID09PSBCaXRWZWN0b3IuY29uc3RhbnQpIHtcbiAgICAgICAgICAgIHlpZWxkKiBpdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBpdiA9IHZhbGlkaXR5W1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgICAgIHdoaWxlICghKHYgPSBpdi5uZXh0KCkpLmRvbmUgJiYgIShyID0gaXQubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgIXYudmFsdWUgPyBudWxsIDogci52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvbmdWZWN0b3I8VExpc3Q+IGV4dGVuZHMgVHlwZWRWZWN0b3I8TG9uZywgVExpc3Q+IHtcbiAgICBnZXQoaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gIXRoaXMudmFsaWRpdHkuZ2V0KGluZGV4KSA/IG51bGwgOiBuZXcgTG9uZyhcbiAgICAgICAgICAgIDxhbnk+IHN1cGVyLmdldChpbmRleCAqIDIpLCAgICAgLyogbG93ICovXG4gICAgICAgICAgICA8YW55PiBzdXBlci5nZXQoaW5kZXggKiAyICsgMSkgLyogaGlnaCAqL1xuICAgICAgICApO1xuICAgIH1cbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIGxldCB2LCBsb3csIGhpZ2g7XG4gICAgICAgIGxldCBpdCA9IHN1cGVyW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgbGV0IGl2ID0gdGhpcy52YWxpZGl0eVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIHdoaWxlICghKHYgPSBpdi5uZXh0KCkpLmRvbmUgJiYgIShsb3cgPSBpdC5uZXh0KCkpLmRvbmUgJiYgIShoaWdoID0gaXQubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICB5aWVsZCAhdi52YWx1ZSA/IG51bGwgOiBuZXcgTG9uZyhsb3cudmFsdWUsIGhpZ2gudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW50OFZlY3RvciAgICBleHRlbmRzIEJ5dGVWZWN0b3I8SW50OEFycmF5PiAgICB7fVxuZXhwb3J0IGNsYXNzIEludDE2VmVjdG9yICAgZXh0ZW5kcyBCeXRlVmVjdG9yPEludDE2QXJyYXk+ICAge31cbmV4cG9ydCBjbGFzcyBJbnQzMlZlY3RvciAgIGV4dGVuZHMgQnl0ZVZlY3RvcjxJbnQzMkFycmF5PiAgIHt9XG5leHBvcnQgY2xhc3MgSW50NjRWZWN0b3IgICBleHRlbmRzIExvbmdWZWN0b3I8SW50MzJBcnJheT4gICB7fVxuZXhwb3J0IGNsYXNzIFVpbnQ4VmVjdG9yICAgZXh0ZW5kcyBCeXRlVmVjdG9yPFVpbnQ4QXJyYXk+ICAge31cbmV4cG9ydCBjbGFzcyBVaW50MTZWZWN0b3IgIGV4dGVuZHMgQnl0ZVZlY3RvcjxVaW50MTZBcnJheT4gIHt9XG5leHBvcnQgY2xhc3MgVWludDMyVmVjdG9yICBleHRlbmRzIEJ5dGVWZWN0b3I8VWludDMyQXJyYXk+ICB7fVxuZXhwb3J0IGNsYXNzIFVpbnQ2NFZlY3RvciAgZXh0ZW5kcyBMb25nVmVjdG9yPFVpbnQzMkFycmF5PiAge31cbmV4cG9ydCBjbGFzcyBGbG9hdDMyVmVjdG9yIGV4dGVuZHMgQnl0ZVZlY3RvcjxGbG9hdDMyQXJyYXk+IHt9XG5leHBvcnQgY2xhc3MgRmxvYXQ2NFZlY3RvciBleHRlbmRzIEJ5dGVWZWN0b3I8RmxvYXQ2NEFycmF5PiB7fVxuXG5Mb25nVmVjdG9yLnByb3RvdHlwZS5zdHJpZGUgPSAyO1xuKFZlY3Rvci5wcm90b3R5cGUgYXMgYW55KS5saXN0cyA9IFtdO1xuKFZlY3Rvci5wcm90b3R5cGUgYXMgYW55KS52YWxpZGl0eSA9IEJpdFZlY3Rvci5jb25zdGFudDtcbihWaXJ0dWFsVmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBBcnJheTtcbihCaXRWZWN0b3IucHJvdG90eXBlIGFzIGFueSkuX2FycmF5VHlwZSA9IFVpbnQ4QXJyYXk7XG4oSW50OFZlY3Rvci5wcm90b3R5cGUgYXMgYW55KS5fYXJyYXlUeXBlID0gSW50OEFycmF5O1xuKEludDE2VmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBJbnQxNkFycmF5O1xuKEludDMyVmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBJbnQzMkFycmF5O1xuKEludDY0VmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBJbnQzMkFycmF5O1xuKFVpbnQ4VmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBVaW50OEFycmF5O1xuKFVpbnQxNlZlY3Rvci5wcm90b3R5cGUgYXMgYW55KS5fYXJyYXlUeXBlID0gVWludDE2QXJyYXk7XG4oVWludDMyVmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBVaW50MzJBcnJheTtcbihVaW50NjRWZWN0b3IucHJvdG90eXBlIGFzIGFueSkuX2FycmF5VHlwZSA9IFVpbnQzMkFycmF5O1xuKERhdGVWZWN0b3IucHJvdG90eXBlIGFzIGFueSkuX2FycmF5VHlwZSA9IFVpbnQzMkFycmF5O1xuKEluZGV4VmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBJbnQzMkFycmF5O1xuKEZsb2F0MzJWZWN0b3IucHJvdG90eXBlIGFzIGFueSkuX2FycmF5VHlwZSA9IEZsb2F0MzJBcnJheTtcbihGbG9hdDY0VmVjdG9yLnByb3RvdHlwZSBhcyBhbnkpLl9hcnJheVR5cGUgPSBGbG9hdDY0QXJyYXk7XG5cbmZ1bmN0aW9uIGFycmF5U2V0PFQ+KHNvdXJjZTogQXJyYXk8VD4sIHRhcmdldDogQXJyYXk8VD4sIGluZGV4OiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHNvdXJjZS5sZW5ndGg7IGkgPCBuOykge1xuICAgICAgICB0YXJnZXRbaW5kZXgrK10gPSBzb3VyY2VbaSsrXTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U2V0KHNvdXJjZTogVHlwZWRBcnJheSwgdGFyZ2V0OiBUeXBlZEFycmF5LCBpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRhcmdldC5zZXQoc291cmNlLCBpbmRleCkgfHwgaW5kZXggKyBzb3VyY2UubGVuZ3RoO1xufVxuXG4vLyBSYXRoZXIgdGhhbiBlYXQgdGhlIGl0ZXJhdG9yIGNvc3QsIHdlJ3ZlIGlubGluZWQgdGhpcyBmdW5jdGlvbiBpbnRvIHRoZSByZWxldmFudCBmdW5jdGlvbnNcbi8vIGZ1bmN0aW9uKiBmaW5kVmlydHVhbDxUTGlzdD4oaW5kZXg6IG51bWJlciwgbGlzdHM6IFRMaXN0W10sIGJhdGNoPzogbnVtYmVyKSB7XG4vLyAgICAgbGV0IHJvd3MsIGxlbmd0aDtcbi8vICAgICBmb3IgKGJhdGNoID0gKGJhdGNoIHx8IDApIC0gMTtcbi8vICAgICAgICAgKHJvd3MgPSBsaXN0c1srK2JhdGNoXSkgJiZcbi8vICAgICAgICAgKGxlbmd0aCA9IHJvd3MubGVuZ3RoKSA8PSBpbmRleCAmJlxuLy8gICAgICAgICAwIDw9IChpbmRleCAtPSBsZW5ndGgpOykge31cbi8vICAgICByZXR1cm4gcm93cyAmJiAtMSA8IGluZGV4ID8geWllbGQgW3Jvd3MsIGluZGV4LCBiYXRjaF0gOiBudWxsO1xuLy8gfVxuXG5leHBvcnQgdHlwZSBUeXBlZEFycmF5Q3RvcjxUIGV4dGVuZHMgVHlwZWRBcnJheT4gPSB7XG4gICAgcmVhZG9ubHkgcHJvdG90eXBlOiBUO1xuICAgIHJlYWRvbmx5IEJZVEVTX1BFUl9FTEVNRU5UOiBudW1iZXI7XG4gICAgbmV3KGxlbmd0aDogbnVtYmVyKTogVDtcbiAgICBuZXcoYXJyYXk6IEFycmF5TGlrZTxudW1iZXI+KTogVDtcbiAgICBuZXcoYnVmZmVyOiBBcnJheUJ1ZmZlckxpa2UsIGJ5dGVPZmZzZXQ/OiBudW1iZXIsIGxlbmd0aD86IG51bWJlcik6IFQ7XG59O1xuXG5leHBvcnQgdHlwZSBGbG9hdEFycmF5ID0gRmxvYXQzMkFycmF5IHwgRmxvYXQ2NEFycmF5O1xuZXhwb3J0IHR5cGUgSW50QXJyYXkgPSBJbnQ4QXJyYXkgfCBJbnQxNkFycmF5IHwgSW50MzJBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5IHwgVWludDhBcnJheSB8IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXk7XG5cbmV4cG9ydCB0eXBlIFR5cGVkQXJyYXkgPSAoXG4gICAgICAgICAgICBJbnQ4QXJyYXkgICAgICAgIHxcbiAgICAgICAgICAgIFVpbnQ4QXJyYXkgICAgICAgfFxuICAgICAgICAgICAgSW50MTZBcnJheSAgICAgICB8XG4gICAgICAgICAgICBJbnQzMkFycmF5ICAgICAgIHxcbiAgICAgICAgICAgIFVpbnQxNkFycmF5ICAgICAgfFxuICAgICAgICAgICAgVWludDMyQXJyYXkgICAgICB8XG4gICAgICAgICAgICBGbG9hdDMyQXJyYXkgICAgIHxcbiAgICAgICAgICAgIEZsb2F0NjRBcnJheSAgICAgfFxuICAgICAgICAgICAgVWludDhDbGFtcGVkQXJyYXkpO1xuIl19
SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc