tedious 20.2.2 → 20.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bulk-load-payload.d.ts +35 -3
- package/lib/bulk-load-payload.js +172 -7
- package/lib/bulk-load-payload.js.map +1 -1
- package/lib/bulk-load.d.ts +0 -42
- package/lib/bulk-load.js +1 -111
- package/lib/bulk-load.js.map +1 -1
- package/lib/connection.d.ts +34 -6
- package/lib/connection.js +44 -31
- package/lib/connection.js.map +1 -1
- package/package.json +1 -1
package/lib/connection.js
CHANGED
|
@@ -1777,7 +1777,7 @@ class Connection extends _events.EventEmitter {
|
|
|
1777
1777
|
* // otherwise the bulk load will fail.
|
|
1778
1778
|
* bulkLoad.addColumn('first_name', TYPES.NVarchar, { nullable: false });
|
|
1779
1779
|
* bulkLoad.addColumn('last_name', TYPES.NVarchar, { nullable: false });
|
|
1780
|
-
* bulkLoad.addColumn('
|
|
1780
|
+
* bulkLoad.addColumn('day_of_birth', TYPES.Date, { nullable: false });
|
|
1781
1781
|
*
|
|
1782
1782
|
* // Execute a bulk load with a predefined list of rows.
|
|
1783
1783
|
* //
|
|
@@ -1791,55 +1791,68 @@ class Connection extends _events.EventEmitter {
|
|
|
1791
1791
|
* ]);
|
|
1792
1792
|
* ```
|
|
1793
1793
|
*
|
|
1794
|
+
* ### The row source
|
|
1795
|
+
*
|
|
1796
|
+
* The connection owns `rows` from this call on, the way a `for await`
|
|
1797
|
+
* loop owns what it iterates. The first row is requested right away,
|
|
1798
|
+
* the rest once the server has accepted the bulk load, and the source
|
|
1799
|
+
* is closed through its iterator's `return()` whenever the bulk load
|
|
1800
|
+
* does not run to completion: a row failed, the bulk load was canceled,
|
|
1801
|
+
* the server rejected the `INSERT BULK` statement, or the connection
|
|
1802
|
+
* was lost. For a Node.js stream that destroys the stream. A read that
|
|
1803
|
+
* is still pending in the source cannot be interrupted; the source is
|
|
1804
|
+
* closed once it has settled.
|
|
1805
|
+
*
|
|
1806
|
+
* An async generator that acquires what it reads from once it is
|
|
1807
|
+
* started therefore releases it on every path, through its `finally`:
|
|
1808
|
+
*
|
|
1809
|
+
* ```js
|
|
1810
|
+
* async function* employees() {
|
|
1811
|
+
* const file = await fs.promises.open('employees.csv');
|
|
1812
|
+
* try {
|
|
1813
|
+
* for await (const line of file.readLines()) {
|
|
1814
|
+
* const [first_name, last_name, day_of_birth] = line.split(',');
|
|
1815
|
+
* yield { first_name, last_name, day_of_birth: new Date(day_of_birth) };
|
|
1816
|
+
* }
|
|
1817
|
+
* } finally {
|
|
1818
|
+
* await file.close();
|
|
1819
|
+
* }
|
|
1820
|
+
* }
|
|
1821
|
+
*
|
|
1822
|
+
* connection.execBulkLoad(bulkLoad, employees());
|
|
1823
|
+
* ```
|
|
1824
|
+
*
|
|
1794
1825
|
* @param bulkLoad A previously created [[BulkLoad]].
|
|
1795
1826
|
* @param rows A [[Iterable]] or [[AsyncIterable]] that contains the rows that should be bulk loaded.
|
|
1796
1827
|
*/
|
|
1797
1828
|
|
|
1798
1829
|
execBulkLoad(bulkLoad, rows) {
|
|
1799
1830
|
bulkLoad.executionStarted = true;
|
|
1800
|
-
if (rows) {
|
|
1801
|
-
if (bulkLoad.streamingMode) {
|
|
1802
|
-
throw new Error("Connection.execBulkLoad can't be called with a BulkLoad that was put in streaming mode.");
|
|
1803
|
-
}
|
|
1804
|
-
if (bulkLoad.firstRowWritten) {
|
|
1805
|
-
throw new Error("Connection.execBulkLoad can't be called with a BulkLoad that already has rows written to it.");
|
|
1806
|
-
}
|
|
1807
|
-
const rowStream = _stream.Readable.from(rows);
|
|
1808
|
-
|
|
1809
|
-
// Destroy the packet transform if an error happens in the row stream,
|
|
1810
|
-
// e.g. if an error is thrown from within a generator or stream.
|
|
1811
|
-
rowStream.on('error', err => {
|
|
1812
|
-
bulkLoad.rowToPacketTransform.destroy(err);
|
|
1813
|
-
});
|
|
1814
1831
|
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
});
|
|
1820
|
-
rowStream.pipe(bulkLoad.rowToPacketTransform);
|
|
1821
|
-
} else if (!bulkLoad.streamingMode) {
|
|
1822
|
-
// If the bulkload was not put into streaming mode by the user,
|
|
1823
|
-
// we end the rowToPacketTransform here for them.
|
|
1824
|
-
//
|
|
1825
|
-
// If it was put into streaming mode, it's the user's responsibility
|
|
1826
|
-
// to end the stream.
|
|
1827
|
-
bulkLoad.rowToPacketTransform.end();
|
|
1828
|
-
}
|
|
1832
|
+
// Owns the row source from here on: the first row is requested now,
|
|
1833
|
+
// the rest are read once the server has accepted the `INSERT BULK`
|
|
1834
|
+
// statement, and the source is closed if that never happens.
|
|
1835
|
+
const payload = new _bulkLoadPayload.BulkLoadPayload(bulkLoad, rows ?? []);
|
|
1829
1836
|
const onCancel = () => {
|
|
1830
1837
|
request.cancel();
|
|
1831
1838
|
};
|
|
1832
|
-
const payload = new _bulkLoadPayload.BulkLoadPayload(bulkLoad);
|
|
1833
1839
|
const request = new _request.default(bulkLoad.getBulkInsertSql(), error => {
|
|
1834
1840
|
bulkLoad.removeListener('cancel', onCancel);
|
|
1835
1841
|
if (error) {
|
|
1836
1842
|
if (error.code === 'UNKNOWN') {
|
|
1837
1843
|
error.message += ' This is likely because the schema of the BulkLoad does not match the schema of the table you are attempting to insert into.';
|
|
1838
1844
|
}
|
|
1845
|
+
payload.close();
|
|
1839
1846
|
bulkLoad.error = error;
|
|
1840
1847
|
bulkLoad.callback(error);
|
|
1841
1848
|
return;
|
|
1842
1849
|
}
|
|
1850
|
+
if (bulkLoad.canceled || this.state !== this.STATE.LOGGED_IN) {
|
|
1851
|
+
// `makeRequest` completes a canceled bulk load, or one on a
|
|
1852
|
+
// connection that is no longer logged in, without reading its
|
|
1853
|
+
// payload.
|
|
1854
|
+
payload.close();
|
|
1855
|
+
}
|
|
1843
1856
|
this.makeRequest(bulkLoad, _packet.TYPE.BULK_LOAD, payload);
|
|
1844
1857
|
});
|
|
1845
1858
|
bulkLoad.once('cancel', onCancel);
|
|
@@ -2806,4 +2819,4 @@ Connection.prototype.STATE = {
|
|
|
2806
2819
|
events: {}
|
|
2807
2820
|
}
|
|
2808
2821
|
};
|
|
2809
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3J5cHRvIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfb3MiLCJ0bHMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIm5ldCIsIl9kbnMiLCJfY29uc3RhbnRzIiwiX3N0cmVhbSIsIl9pZGVudGl0eSIsIl9jb3JlQXV0aCIsIl9idWxrTG9hZCIsIl9kZWJ1ZyIsIl9ldmVudHMiLCJfaW5zdGFuY2VMb29rdXAiLCJfdHJhbnNpZW50RXJyb3JMb29rdXAiLCJfcGFja2V0IiwiX3ByZWxvZ2luUGF5bG9hZCIsIl9sb2dpbjdQYXlsb2FkIiwiX250bG1QYXlsb2FkIiwiX3JlcXVlc3QiLCJfcnBjcmVxdWVzdFBheWxvYWQiLCJfc3FsYmF0Y2hQYXlsb2FkIiwiX21lc3NhZ2VJbyIsIl90b2tlblN0cmVhbVBhcnNlciIsIl90cmFuc2FjdGlvbiIsIl9lcnJvcnMiLCJfY29ubmVjdG9yIiwiX2xpYnJhcnkiLCJfdGRzVmVyc2lvbnMiLCJfbWVzc2FnZSIsIl9udGxtIiwiX2RhdGFUeXBlIiwiX2J1bGtMb2FkUGF5bG9hZCIsIl9zcGVjaWFsU3RvcmVkUHJvY2VkdXJlIiwiX3BhY2thZ2UiLCJfdXJsIiwiX2hhbmRsZXIiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJLRUVQX0FMSVZFX0lOSVRJQUxfREVMQVkiLCJERUZBVUxUX0NPTk5FQ1RfVElNRU9VVCIsIkRFRkFVTFRfQ0xJRU5UX1JFUVVFU1RfVElNRU9VVCIsIkRFRkFVTFRfQ0FOQ0VMX1RJTUVPVVQiLCJERUZBVUxUX0NPTk5FQ1RfUkVUUllfSU5URVJWQUwiLCJERUZBVUxUX1BBQ0tFVF9TSVpFIiwiREVGQVVMVF9URVhUU0laRSIsIkRFRkFVTFRfREFURUZJUlNUIiwiREVGQVVMVF9QT1JUIiwiREVGQVVMVF9URFNfVkVSU0lPTiIsIkRFRkFVTFRfTEFOR1VBR0UiLCJERUZBVUxUX0RBVEVGT1JNQVQiLCJ3aXRoQWJvcnRSYWNlIiwic2lnbmFsIiwiZnVuYyIsInRocm93SWZBYm9ydGVkIiwicHJvbWlzZSIsInNpZ25hbEFib3J0ZWQiLCJyZWplY3QiLCJQcm9taXNlIiwid2l0aFJlc29sdmVycyIsImNhdGNoIiwib25BYm9ydCIsInJlYXNvbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbmNlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkNvbm5lY3Rpb24iLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsIlR5cGVFcnJvciIsInNlcnZlciIsImZlZEF1dGhSZXF1aXJlZCIsImF1dGhlbnRpY2F0aW9uIiwidW5kZWZpbmVkIiwidHlwZSIsIm9wdGlvbnMiLCJkb21haW4iLCJ1c2VyTmFtZSIsInBhc3N3b3JkIiwidG9VcHBlckNhc2UiLCJpc1Rva2VuQ3JlZGVudGlhbCIsImNyZWRlbnRpYWwiLCJjbGllbnRJZCIsInRlbmFudElkIiwidG9rZW4iLCJjbGllbnRTZWNyZXQiLCJhYm9ydFRyYW5zYWN0aW9uT25FcnJvciIsImFwcE5hbWUiLCJjYW1lbENhc2VDb2x1bW5zIiwiY2FuY2VsVGltZW91dCIsImNvbHVtbkVuY3J5cHRpb25LZXlDYWNoZVRUTCIsImNvbHVtbkVuY3J5cHRpb25TZXR0aW5nIiwiY29sdW1uTmFtZVJlcGxhY2VyIiwiY29ubmVjdGlvblJldHJ5SW50ZXJ2YWwiLCJjb25uZWN0VGltZW91dCIsImNvbm5lY3RvciIsImNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCIsIklTT0xBVElPTl9MRVZFTCIsIlJFQURfQ09NTUlUVEVEIiwiY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzIiwiZGF0YWJhc2UiLCJkYXRlZmlyc3QiLCJkYXRlRm9ybWF0IiwiZGVidWciLCJkYXRhIiwicGFja2V0IiwicGF5bG9hZCIsImVuYWJsZUFuc2lOdWxsIiwiZW5hYmxlQW5zaU51bGxEZWZhdWx0IiwiZW5hYmxlQW5zaVBhZGRpbmciLCJlbmFibGVBbnNpV2FybmluZ3MiLCJlbmFibGVBcml0aEFib3J0IiwiZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGwiLCJlbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0IiwiZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnMiLCJlbmFibGVOdW1lcmljUm91bmRhYm9ydCIsImVuYWJsZVF1b3RlZElkZW50aWZpZXIiLCJlbmNyeXB0IiwiZmFsbGJhY2tUb0RlZmF1bHREYiIsImVuY3J5cHRpb25LZXlTdG9yZVByb3ZpZGVycyIsImluc3RhbmNlTmFtZSIsImlzb2xhdGlvbkxldmVsIiwibGFuZ3VhZ2UiLCJsb2NhbEFkZHJlc3MiLCJtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMiLCJtdWx0aVN1Ym5ldEZhaWxvdmVyIiwicGFja2V0U2l6ZSIsInBvcnQiLCJyZWFkT25seUludGVudCIsInJlcXVlc3RUaW1lb3V0Iiwicm93Q29sbGVjdGlvbk9uRG9uZSIsInJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uIiwic2VydmVyTmFtZSIsInNlcnZlclN1cHBvcnRzQ29sdW1uRW5jcnlwdGlvbiIsInRkc1ZlcnNpb24iLCJ0ZXh0c2l6ZSIsInRydXN0ZWRTZXJ2ZXJOYW1lQUUiLCJ0cnVzdFNlcnZlckNlcnRpZmljYXRlIiwidXNlQ29sdW1uTmFtZXMiLCJ1c2VVVEMiLCJ3b3Jrc3RhdGlvbklkIiwibG93ZXJDYXNlR3VpZHMiLCJFcnJvciIsImFzc2VydFZhbGlkSXNvbGF0aW9uTGV2ZWwiLCJSYW5nZUVycm9yIiwic2VjdXJlQ29udGV4dE9wdGlvbnMiLCJzZWN1cmVPcHRpb25zIiwiY3JlYXRlIiwidmFsdWUiLCJjb25zdGFudHMiLCJTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIiwiY3JlYXRlRGVidWciLCJpblRyYW5zYWN0aW9uIiwidHJhbnNhY3Rpb25EZXNjcmlwdG9ycyIsIkJ1ZmZlciIsImZyb20iLCJ0cmFuc2FjdGlvbkRlcHRoIiwiaXNTcWxCYXRjaCIsImNsb3NlZCIsIm1lc3NhZ2VCdWZmZXIiLCJhbGxvYyIsImN1clRyYW5zaWVudFJldHJ5Q291bnQiLCJ0cmFuc2llbnRFcnJvckxvb2t1cCIsIlRyYW5zaWVudEVycm9yTG9va3VwIiwic3RhdGUiLCJTVEFURSIsIklOSVRJQUxJWkVEIiwiYXR0ZW50aW9uU2VudCIsIl9jYW5jZWxBZnRlclJlcXVlc3RTZW50IiwibWVzc2FnZUlvIiwic2VuZE1lc3NhZ2UiLCJUWVBFIiwiQVRURU5USU9OIiwiY3JlYXRlQ2FuY2VsVGltZXIiLCJfb25Tb2NrZXRDbG9zZSIsInNvY2tldENsb3NlIiwiX29uU29ja2V0RW5kIiwic29ja2V0RW5kIiwiX29uU29ja2V0RXJyb3IiLCJlcnJvciIsIkZJTkFMIiwiZGlzcGF0Y2hFdmVudCIsInByb2Nlc3MiLCJuZXh0VGljayIsImVtaXQiLCJ3cmFwU29ja2V0RXJyb3IiLCJjb25uZWN0IiwiY29ubmVjdExpc3RlbmVyIiwiQ29ubmVjdGlvbkVycm9yIiwibmFtZSIsIm9uQ29ubmVjdCIsImVyciIsInJlbW92ZUxpc3RlbmVyIiwib25FcnJvciIsImNsb3NlQ29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsInRyYW5zaXRpb25UbyIsIkNPTk5FQ1RJTkciLCJpbml0aWFsaXNlQ29ubmVjdGlvbiIsInRoZW4iLCJjbGVhbnVwQ29ubmVjdGlvbiIsIm9uIiwiZXZlbnQiLCJsaXN0ZW5lciIsImFyZ3MiLCJjbG9zZSIsImFib3J0IiwidGltZW91dENvbnRyb2xsZXIiLCJjb25uZWN0VGltZXIiLCJzZXRUaW1lb3V0IiwiaG9zdFBvc3RmaXgiLCJyb3V0aW5nRGF0YSIsInJvdXRpbmdNZXNzYWdlIiwibWVzc2FnZSIsImxvZyIsIkFib3J0U2lnbmFsIiwiYW55IiwiaW5zdGFuY2VMb29rdXAiLCJ0aW1lb3V0IiwiY2F1c2UiLCJzb2NrZXQiLCJjb25uZWN0T25Qb3J0IiwiY29udHJvbGxlciIsIm9uQ2xvc2UiLCJvbkVuZCIsImNvZGUiLCJzZXRLZWVwQWxpdmUiLCJNZXNzYWdlSU8iLCJjbGVhcnRleHQiLCJzZW5kUHJlTG9naW4iLCJTRU5UX1BSRUxPR0lOIiwicHJlbG9naW5SZXNwb25zZSIsInJlYWRQcmVsb2dpblJlc3BvbnNlIiwicGVyZm9ybVRsc05lZ290aWF0aW9uIiwic2VuZExvZ2luN1BhY2tldCIsIlNFTlRfTE9HSU43X1dJVEhfRkVEQVVUSCIsInBlcmZvcm1TZW50TG9naW43V2l0aEZlZEF1dGgiLCJTRU5UX0xPR0lON19XSVRIX05UTE0iLCJwZXJmb3JtU2VudExvZ2luN1dpdGhOVExNTG9naW4iLCJTRU5UX0xPR0lON19XSVRIX1NUQU5EQVJEX0xPR0lOIiwicGVyZm9ybVNlbnRMb2dpbjdXaXRoU3RhbmRhcmRMb2dpbiIsImlzVHJhbnNpZW50RXJyb3IiLCJUUkFOU0lFTlRfRkFJTFVSRV9SRVRSWSIsInBlcmZvcm1UcmFuc2llbnRGYWlsdXJlUmV0cnkiLCJSRVJPVVRJTkciLCJwZXJmb3JtUmVSb3V0aW5nIiwiTE9HR0VEX0lOX1NFTkRJTkdfSU5JVElBTF9TUUwiLCJwZXJmb3JtTG9nZ2VkSW5TZW5kaW5nSW5pdGlhbFNxbCIsImRlc3Ryb3kiLCJMT0dHRURfSU4iLCJjbGVhclRpbWVvdXQiLCJjbGVhclJlcXVlc3RUaW1lciIsImNsZWFyQ2FuY2VsVGltZXIiLCJjbG9zZUNvbm5lY3Rpb24iLCJyZXF1ZXN0IiwiY2FsbGJhY2siLCJSZXF1ZXN0RXJyb3IiLCJEZWJ1ZyIsImNyZWF0ZVRva2VuU3RyZWFtUGFyc2VyIiwiaGFuZGxlciIsIlRva2VuU3RyZWFtUGFyc2VyIiwid3JhcFdpdGhUbHMiLCJzZWN1cmVDb250ZXh0IiwiY3JlYXRlU2VjdXJlQ29udGV4dCIsImlzSVAiLCJlbmNyeXB0T3B0aW9ucyIsImhvc3QiLCJBTFBOUHJvdG9jb2xzIiwic2VydmVybmFtZSIsInJlc29sdmUiLCJlbmNyeXB0c29ja2V0Iiwic2V0TWF4U2VuZEZyYWdtZW50IiwiTWF0aCIsIm1pbiIsIk1BWF9UTFNfU0VORF9GUkFHTUVOVF9TSVpFIiwiY3VzdG9tQ29ubmVjdG9yIiwiY29ubmVjdE9wdHMiLCJjb25uZWN0SW5QYXJhbGxlbCIsImNvbm5lY3RJblNlcXVlbmNlIiwiZG5zIiwibG9va3VwIiwiZW5kIiwiY2FuY2VsVGltZXIiLCJjcmVhdGVSZXF1ZXN0VGltZXIiLCJyZXF1ZXN0VGltZXIiLCJjYW5jZWwiLCJuZXdTdGF0ZSIsImV4aXQiLCJlbnRlciIsImFwcGx5IiwiZ2V0RXZlbnRIYW5kbGVyIiwiZXZlbnROYW1lIiwiZXZlbnRzIiwiU0VOVF9UTFNTU0xORUdPVElBVElPTiIsIm1ham9yIiwibWlub3IiLCJidWlsZCIsImV4ZWMiLCJ2ZXJzaW9uIiwiUHJlbG9naW5QYXlsb2FkIiwiTnVtYmVyIiwic3ViYnVpbGQiLCJQUkVMT0dJTiIsInRvU3RyaW5nIiwiTG9naW43UGF5bG9hZCIsInZlcnNpb25zIiwiY2xpZW50UHJvZ1ZlciIsImNsaWVudFBpZCIsInBpZCIsImNvbm5lY3Rpb25JZCIsImNsaWVudFRpbWVab25lIiwiRGF0ZSIsImdldFRpbWV6b25lT2Zmc2V0IiwiY2xpZW50TGNpZCIsImZlZEF1dGgiLCJlY2hvIiwid29ya2Zsb3ciLCJmZWRBdXRoVG9rZW4iLCJzc3BpIiwiY3JlYXRlTlRMTVJlcXVlc3QiLCJob3N0bmFtZSIsIm9zIiwiaW5zdGFuY2UiLCJsaWJyYXJ5TmFtZSIsImluaXREYkZhdGFsIiwiTE9HSU43IiwidG9CdWZmZXIiLCJzZW5kRmVkQXV0aFRva2VuTWVzc2FnZSIsImFjY2Vzc1Rva2VuTGVuIiwiYnl0ZUxlbmd0aCIsIm9mZnNldCIsIndyaXRlVUludDMyTEUiLCJ3cml0ZSIsIkZFREFVVEhfVE9LRU4iLCJzZW5kSW5pdGlhbFNxbCIsIlNxbEJhdGNoUGF5bG9hZCIsImdldEluaXRpYWxTcWwiLCJjdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yIiwiTWVzc2FnZSIsIlNRTF9CQVRDSCIsIm91dGdvaW5nTWVzc2FnZVN0cmVhbSIsIlJlYWRhYmxlIiwicGlwZSIsInB1c2giLCJnZXRJc29sYXRpb25MZXZlbFRleHQiLCJqb2luIiwiZXhlY1NxbEJhdGNoIiwibWFrZVJlcXVlc3QiLCJzcWxUZXh0T3JQcm9jZWR1cmUiLCJleGVjU3FsIiwidmFsaWRhdGVQYXJhbWV0ZXJzIiwiZGF0YWJhc2VDb2xsYXRpb24iLCJwYXJhbWV0ZXJzIiwiVFlQRVMiLCJOVmFyQ2hhciIsIm91dHB1dCIsImxlbmd0aCIsInByZWNpc2lvbiIsInNjYWxlIiwibWFrZVBhcmFtc1BhcmFtZXRlciIsIlJQQ19SRVFVRVNUIiwiUnBjUmVxdWVzdFBheWxvYWQiLCJQcm9jZWR1cmVzIiwiU3BfRXhlY3V0ZVNxbCIsIm5ld0J1bGtMb2FkIiwidGFibGUiLCJjYWxsYmFja09yT3B0aW9ucyIsIkJ1bGtMb2FkIiwiZXhlY0J1bGtMb2FkIiwiYnVsa0xvYWQiLCJyb3dzIiwiZXhlY3V0aW9uU3RhcnRlZCIsInN0cmVhbWluZ01vZGUiLCJmaXJzdFJvd1dyaXR0ZW4iLCJyb3dTdHJlYW0iLCJyb3dUb1BhY2tldFRyYW5zZm9ybSIsIm9uQ2FuY2VsIiwiQnVsa0xvYWRQYXlsb2FkIiwiUmVxdWVzdCIsImdldEJ1bGtJbnNlcnRTcWwiLCJCVUxLX0xPQUQiLCJwcmVwYXJlIiwiSW50IiwicHJlcGFyaW5nIiwiaGFuZGxlIiwiU3BfUHJlcGFyZSIsInVucHJlcGFyZSIsIlNwX1VucHJlcGFyZSIsImV4ZWN1dGUiLCJleGVjdXRlUGFyYW1ldGVycyIsImxlbiIsInBhcmFtZXRlciIsInZhbGlkYXRlIiwiU3BfRXhlY3V0ZSIsImNhbGxQcm9jZWR1cmUiLCJiZWdpblRyYW5zYWN0aW9uIiwidHJhbnNhY3Rpb24iLCJUcmFuc2FjdGlvbiIsImlzb2xhdGlvbkxldmVsVG9UU1FMIiwiVFJBTlNBQ1RJT05fTUFOQUdFUiIsImJlZ2luUGF5bG9hZCIsImNvbW1pdFRyYW5zYWN0aW9uIiwiY29tbWl0UGF5bG9hZCIsInJvbGxiYWNrVHJhbnNhY3Rpb24iLCJyb2xsYmFja1BheWxvYWQiLCJzYXZlVHJhbnNhY3Rpb24iLCJzYXZlUGF5bG9hZCIsImNiIiwidXNlU2F2ZXBvaW50IiwiY3J5cHRvIiwicmFuZG9tQnl0ZXMiLCJ0eERvbmUiLCJkb25lIiwidHhFcnIiLCJwYWNrZXRUeXBlIiwiY2FuY2VsZWQiLCJjb25uZWN0aW9uIiwicm93Q291bnQiLCJyc3QiLCJwYXlsb2FkU3RyZWFtIiwidW5waXBlIiwiaWdub3JlIiwicGF1c2VkIiwicmVzdW1lIiwicmVzZXRDb25uZWN0aW9uIiwicmVzZXRDb25uZWN0aW9uT25OZXh0UmVxdWVzdCIsIlNFTlRfQ0xJRU5UX1JFUVVFU1QiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwicmVzZXQiLCJSRUFEX1VOQ09NTUlUVEVEIiwiUkVQRUFUQUJMRV9SRUFEIiwiU0VSSUFMSVpBQkxFIiwiU05BUFNIT1QiLCJwcmVsb2dpblBheWxvYWQiLCJlbmNyeXB0aW9uU3RyaW5nIiwicmFjZSIsInN0YXJ0VGxzIiwicmVhZE1lc3NhZ2UiLCJpdGVyYXRvciIsIlN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJuZXh0IiwiY29uY2F0IiwicmV0dXJuIiwiY2xvc2VTaWduYWwiLCJyZXRyeVRpbWVyIiwiTG9naW43VG9rZW5IYW5kbGVyIiwidG9rZW5TdHJlYW1QYXJzZXIiLCJlbmRPZk1lc3NhZ2UiLCJsb2dpbkFja1JlY2VpdmVkIiwibG9naW5FcnJvciIsIm50bG1wYWNrZXQiLCJOVExNUmVzcG9uc2VQYXlsb2FkIiwiTlRMTUFVVEhfUEtUIiwiZmVkQXV0aEluZm9Ub2tlbiIsInN0c3VybCIsInNwbiIsInRva2VuU2NvcGUiLCJVUkwiLCJjcmVkZW50aWFscyIsIlVzZXJuYW1lUGFzc3dvcmRDcmVkZW50aWFsIiwibXNpQXJncyIsIk1hbmFnZWRJZGVudGl0eUNyZWRlbnRpYWwiLCJtYW5hZ2VkSWRlbnRpdHlDbGllbnRJZCIsIkRlZmF1bHRBenVyZUNyZWRlbnRpYWwiLCJDbGllbnRTZWNyZXRDcmVkZW50aWFsIiwidG9rZW5SZXNwb25zZSIsImdldFRva2VuIiwiQWdncmVnYXRlRXJyb3IiLCJJbml0aWFsU3FsVG9rZW5IYW5kbGVyIiwiZXJyb3JzIiwiaXNUcmFuc2llbnQiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiLCJwcm90b3R5cGUiLCJzb2NrZXRFcnJvciIsIlJlcXVlc3RUb2tlbkhhbmRsZXIiLCJvblBhcnNlckVycm9yIiwib25QYXVzZSIsIm9uUmVzdW1lIiwiU0VOVF9BVFRFTlRJT04iLCJwYXVzZSIsIm9uRW5kT2ZNZXNzYWdlIiwic3FsUmVxdWVzdCIsIm5leHRTdGF0ZSIsIkF0dGVudGlvblRva2VuSGFuZGxlciIsImF0dGVudGlvblJlY2VpdmVkIl0sInNvdXJjZXMiOlsiLi4vc3JjL2Nvbm5lY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnO1xuaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgZG5zIGZyb20gJ2Rucyc7XG5cbmltcG9ydCBjb25zdGFudHMgZnJvbSAnY29uc3RhbnRzJztcbmltcG9ydCB7IHR5cGUgU2VjdXJlQ29udGV4dE9wdGlvbnMgfSBmcm9tICd0bHMnO1xuXG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5cbmltcG9ydCB7XG4gIENsaWVudFNlY3JldENyZWRlbnRpYWwsXG4gIERlZmF1bHRBenVyZUNyZWRlbnRpYWwsXG4gIE1hbmFnZWRJZGVudGl0eUNyZWRlbnRpYWwsXG4gIFVzZXJuYW1lUGFzc3dvcmRDcmVkZW50aWFsXG59IGZyb20gJ0BhenVyZS9pZGVudGl0eSc7XG5pbXBvcnQgeyB0eXBlIEFjY2Vzc1Rva2VuLCB0eXBlIFRva2VuQ3JlZGVudGlhbCwgaXNUb2tlbkNyZWRlbnRpYWwgfSBmcm9tICdAYXp1cmUvY29yZS1hdXRoJztcblxuaW1wb3J0IEJ1bGtMb2FkLCB7IHR5cGUgT3B0aW9ucyBhcyBCdWxrTG9hZE9wdGlvbnMsIHR5cGUgQ2FsbGJhY2sgYXMgQnVsa0xvYWRDYWxsYmFjayB9IGZyb20gJy4vYnVsay1sb2FkJztcbmltcG9ydCBEZWJ1ZyBmcm9tICcuL2RlYnVnJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgb25jZSB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBpbnN0YW5jZUxvb2t1cCB9IGZyb20gJy4vaW5zdGFuY2UtbG9va3VwJztcbmltcG9ydCB7IFRyYW5zaWVudEVycm9yTG9va3VwIH0gZnJvbSAnLi90cmFuc2llbnQtZXJyb3ItbG9va3VwJztcbmltcG9ydCB7IFRZUEUgfSBmcm9tICcuL3BhY2tldCc7XG5pbXBvcnQgUHJlbG9naW5QYXlsb2FkIGZyb20gJy4vcHJlbG9naW4tcGF5bG9hZCc7XG5pbXBvcnQgTG9naW43UGF5bG9hZCBmcm9tICcuL2xvZ2luNy1wYXlsb2FkJztcbmltcG9ydCBOVExNUmVzcG9uc2VQYXlsb2FkIGZyb20gJy4vbnRsbS1wYXlsb2FkJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQgUnBjUmVxdWVzdFBheWxvYWQgZnJvbSAnLi9ycGNyZXF1ZXN0LXBheWxvYWQnO1xuaW1wb3J0IFNxbEJhdGNoUGF5bG9hZCBmcm9tICcuL3NxbGJhdGNoLXBheWxvYWQnO1xuaW1wb3J0IE1lc3NhZ2VJTyBmcm9tICcuL21lc3NhZ2UtaW8nO1xuaW1wb3J0IHsgUGFyc2VyIGFzIFRva2VuU3RyZWFtUGFyc2VyIH0gZnJvbSAnLi90b2tlbi90b2tlbi1zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uLCBJU09MQVRJT05fTEVWRUwsIGFzc2VydFZhbGlkSXNvbGF0aW9uTGV2ZWwgfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciwgUmVxdWVzdEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgY29ubmVjdEluUGFyYWxsZWwsIGNvbm5lY3RJblNlcXVlbmNlIH0gZnJvbSAnLi9jb25uZWN0b3InO1xuaW1wb3J0IHsgbmFtZSBhcyBsaWJyYXJ5TmFtZSB9IGZyb20gJy4vbGlicmFyeSc7XG5pbXBvcnQgeyB2ZXJzaW9ucyB9IGZyb20gJy4vdGRzLXZlcnNpb25zJztcbmltcG9ydCBNZXNzYWdlIGZyb20gJy4vbWVzc2FnZSc7XG5pbXBvcnQgeyB0eXBlIE1ldGFkYXRhIH0gZnJvbSAnLi9tZXRhZGF0YS1wYXJzZXInO1xuaW1wb3J0IHsgY3JlYXRlTlRMTVJlcXVlc3QgfSBmcm9tICcuL250bG0nO1xuaW1wb3J0IHsgQ29sdW1uRW5jcnlwdGlvbkF6dXJlS2V5VmF1bHRQcm92aWRlciB9IGZyb20gJy4vYWx3YXlzLWVuY3J5cHRlZC9rZXlzdG9yZS1wcm92aWRlci1henVyZS1rZXktdmF1bHQnO1xuXG5pbXBvcnQgeyB0eXBlIFBhcmFtZXRlciwgVFlQRVMgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBCdWxrTG9hZFBheWxvYWQgfSBmcm9tICcuL2J1bGstbG9hZC1wYXlsb2FkJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4vY29sbGF0aW9uJztcbmltcG9ydCBQcm9jZWR1cmVzIGZyb20gJy4vc3BlY2lhbC1zdG9yZWQtcHJvY2VkdXJlJztcblxuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2UuanNvbic7XG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgQXR0ZW50aW9uVG9rZW5IYW5kbGVyLCBJbml0aWFsU3FsVG9rZW5IYW5kbGVyLCBMb2dpbjdUb2tlbkhhbmRsZXIsIFJlcXVlc3RUb2tlbkhhbmRsZXIsIFRva2VuSGFuZGxlciB9IGZyb20gJy4vdG9rZW4vaGFuZGxlcic7XG5cbnR5cGUgQmVnaW5UcmFuc2FjdGlvbkNhbGxiYWNrID1cbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCB0byBzdGFydCB0aGUgdHJhbnNhY3Rpb24gaGFzIGNvbXBsZXRlZCxcbiAgICogZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICAgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCB0aGVuIGBlcnJgIHdpbGwgZGVzY3JpYmUgdGhlIGVycm9yLlxuICAgKlxuICAgKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyIHJlcXVlc3Qgc2hvdWxkIG5vdFxuICAgKiBiZSBpbml0aWF0ZWQgdW50aWwgdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEBwYXJhbSBlcnIgSWYgYW4gZXJyb3Igb2NjdXJyZWQsIGFuIFtbRXJyb3JdXSBvYmplY3Qgd2l0aCBkZXRhaWxzIG9mIHRoZSBlcnJvci5cbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uRGVzY3JpcHRvciBBIEJ1ZmZlciB0aGF0IGRlc2NyaWJlIHRoZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCB0cmFuc2FjdGlvbkRlc2NyaXB0b3I/OiBCdWZmZXIpID0+IHZvaWRcblxudHlwZSBTYXZlVHJhbnNhY3Rpb25DYWxsYmFjayA9XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgdG8gc2V0IGEgc2F2ZXBvaW50IHdpdGhpbiB0aGVcbiAgICogdHJhbnNhY3Rpb24gaGFzIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICAgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCB0aGVuIGBlcnJgIHdpbGwgZGVzY3JpYmUgdGhlIGVycm9yLlxuICAgKlxuICAgKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyIHJlcXVlc3Qgc2hvdWxkIG5vdFxuICAgKiBiZSBpbml0aWF0ZWQgdW50aWwgdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEBwYXJhbSBlcnIgSWYgYW4gZXJyb3Igb2NjdXJyZWQsIGFuIFtbRXJyb3JdXSBvYmplY3Qgd2l0aCBkZXRhaWxzIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblxudHlwZSBDb21taXRUcmFuc2FjdGlvbkNhbGxiYWNrID1cbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCB0byBjb21taXQgdGhlIHRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQsXG4gICAqIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAgICogSWYgYW4gZXJyb3Igb2NjdXJyZWQgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAgICpcbiAgICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlciByZXF1ZXN0IHNob3VsZCBub3RcbiAgICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIElmIGFuIGVycm9yIG9jY3VycmVkLCBhbiBbW0Vycm9yXV0gb2JqZWN0IHdpdGggZGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cbnR5cGUgUm9sbGJhY2tUcmFuc2FjdGlvbkNhbGxiYWNrID1cbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCB0byByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaGFzXG4gICAqIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICAgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCB0aGVuIGVyciB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAgICpcbiAgICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlciByZXF1ZXN0IHNob3VsZCBub3RcbiAgICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIElmIGFuIGVycm9yIG9jY3VycmVkLCBhbiBbW0Vycm9yXV0gb2JqZWN0IHdpdGggZGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cbnR5cGUgUmVzZXRDYWxsYmFjayA9XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gcmVzZXQgaGFzIGNvbXBsZXRlZCxcbiAgICogZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICAgKlxuICAgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCB0aGVuIGBlcnJgIHdpbGwgZGVzY3JpYmUgdGhlIGVycm9yLlxuICAgKlxuICAgKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyXG4gICAqIHJlcXVlc3Qgc2hvdWxkIG5vdCBiZSBpbml0aWF0ZWQgdW50aWwgdGhpcyBjYWxsYmFjayBpcyBjYWxsZWRcbiAgICpcbiAgICogQHBhcmFtIGVyciBJZiBhbiBlcnJvciBvY2N1cnJlZCwgYW4gW1tFcnJvcl1dIG9iamVjdCB3aXRoIGRldGFpbHMgb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG50eXBlIFRyYW5zYWN0aW9uQ2FsbGJhY2s8VCBleHRlbmRzIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgLi4uYXJnczogYW55W10pID0+IHZvaWQ+ID1cbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCB0byBzdGFydCBhIHRyYW5zYWN0aW9uIChvciBjcmVhdGUgYSBzYXZlcG9pbnQsIGluXG4gICAqIHRoZSBjYXNlIG9mIGEgbmVzdGVkIHRyYW5zYWN0aW9uKSBoYXMgY29tcGxldGVkLCBlaXRoZXIgc3VjY2Vzc2Z1bGx5IG9yIHdpdGggYW4gZXJyb3IuXG4gICAqIElmIGFuIGVycm9yIG9jY3VycmVkLCB0aGVuIGBlcnJgIHdpbGwgZGVzY3JpYmUgdGhlIGVycm9yLlxuICAgKiBJZiBubyBlcnJvciBvY2N1cnJlZCwgdGhlIGNhbGxiYWNrIHNob3VsZCBwZXJmb3JtIGl0cyB3b3JrIGFuZCBldmVudHVhbGx5IGNhbGxcbiAgICogYGRvbmVgIHdpdGggYW4gZXJyb3Igb3IgbnVsbCAodG8gdHJpZ2dlciBhIHRyYW5zYWN0aW9uIHJvbGxiYWNrIG9yIGFcbiAgICogdHJhbnNhY3Rpb24gY29tbWl0KSBhbmQgYW4gYWRkaXRpb25hbCBjb21wbGV0aW9uIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdFxuICAgKiB0byByb2xsYmFjayBvciBjb21taXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaGFzIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICAgKiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBnaXZlbiB0byBgZG9uZWAgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCB0byB0aGlzIGNhbGxiYWNrLlxuICAgKlxuICAgKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyIHJlcXVlc3Qgc2hvdWxkIG5vdFxuICAgKiBiZSBpbml0aWF0ZWQgdW50aWwgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIElmIGFuIGVycm9yIG9jY3VycmVkLCBhbiBbW0Vycm9yXV0gb2JqZWN0IHdpdGggZGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSB0eERvbmUgSWYgbm8gZXJyb3Igb2NjdXJyZWQsIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHRvIGNvbW1pdCBvciByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24uXG4gICAqL1xuICAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIHR4RG9uZT86IFRyYW5zYWN0aW9uRG9uZTxUPikgPT4gdm9pZDtcblxudHlwZSBUcmFuc2FjdGlvbkRvbmVDYWxsYmFjayA9IChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG50eXBlIENhbGxiYWNrUGFyYW1ldGVyczxUIGV4dGVuZHMgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55PiA9IFQgZXh0ZW5kcyAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIC4uLmFyZ3M6IGluZmVyIFApID0+IGFueSA/IFAgOiBuZXZlcjtcblxudHlwZSBUcmFuc2FjdGlvbkRvbmU8VCBleHRlbmRzIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgLi4uYXJnczogYW55W10pID0+IHZvaWQ+ID1cbiAgLyoqXG4gICAqIElmIG5vIGVycm9yIG9jY3VycmVkLCBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB0byBjb21taXQgb3Igcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIElmIGFuIGVyciBvY2N1cnJlZCwgYSBzdHJpbmcgd2l0aCBkZXRhaWxzIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgZG9uZTogVCwgLi4uYXJnczogQ2FsbGJhY2tQYXJhbWV0ZXJzPFQ+KSA9PiB2b2lkO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IEtFRVBfQUxJVkVfSU5JVElBTF9ERUxBWSA9IDMwICogMTAwMDtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9DT05ORUNUX1RJTUVPVVQgPSAxNSAqIDEwMDA7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfQ0xJRU5UX1JFUVVFU1RfVElNRU9VVCA9IDE1ICogMTAwMDtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9DQU5DRUxfVElNRU9VVCA9IDUgKiAxMDAwO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBERUZBVUxUX0NPTk5FQ1RfUkVUUllfSU5URVJWQUwgPSA1MDA7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfUEFDS0VUX1NJWkUgPSA0ICogMTAyNDtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9URVhUU0laRSA9IDIxNDc0ODM2NDc7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfREFURUZJUlNUID0gNztcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9QT1JUID0gMTQzMztcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9URFNfVkVSU0lPTiA9ICc3XzQnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBERUZBVUxUX0xBTkdVQUdFID0gJ3VzX2VuZ2xpc2gnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBERUZBVUxUX0RBVEVGT1JNQVQgPSAnbWR5JztcblxuaW50ZXJmYWNlIEF6dXJlQWN0aXZlRGlyZWN0b3J5TXNpQXBwU2VydmljZUF1dGhlbnRpY2F0aW9uIHtcbiAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlJztcbiAgb3B0aW9uczoge1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3YW50IHRvIGNvbm5lY3QgdG8gYW4gQXp1cmUgYXBwIHNlcnZpY2UgdXNpbmcgYSBzcGVjaWZpYyBjbGllbnQgYWNjb3VudCxcbiAgICAgKiB5b3UgbmVlZCB0byBwcm92aWRlIHRoZSBgY2xpZW50SWRgIGFzc29jaWF0ZWQgd2l0aCB5b3VyIGNyZWF0ZWQgaWRlbnRpdHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG9wdGlvbmFsIGZvciByZXRyaWV2aW5nIGEgdG9rZW4gZnJvbSBBenVyZSB3ZWIgYXBwIHNlcnZpY2UuXG4gICAgICovXG4gICAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBBenVyZUFjdGl2ZURpcmVjdG9yeU1zaVZtQXV0aGVudGljYXRpb24ge1xuICB0eXBlOiAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm0nO1xuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogSWYgeW91IHdhbnQgdG8gY29ubmVjdCB1c2luZyBhIHNwZWNpZmljIGNsaWVudCBhY2NvdW50LFxuICAgICAqIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIGBjbGllbnRJZGAgYXNzb2NpYXRlZCB3aXRoIHlvdXIgY3JlYXRlZCBpZGVudGl0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgb3B0aW9uYWwgZm9yIHJldHJpZXZpbmcgYSB0b2tlbi5cbiAgICAgKi9cbiAgICBjbGllbnRJZD86IHN0cmluZztcbiAgfTtcbn1cblxuaW50ZXJmYWNlIEF6dXJlQWN0aXZlRGlyZWN0b3J5RGVmYXVsdEF1dGhlbnRpY2F0aW9uIHtcbiAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCc7XG4gIG9wdGlvbnM6IHtcbiAgICAvKipcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBjb25uZWN0IHVzaW5nIGEgc3BlY2lmaWMgY2xpZW50IGFjY291bnQsXG4gICAgICogeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgYGNsaWVudElkYCBhc3NvY2lhdGVkIHdpdGggeW91ciBjcmVhdGVkIGlkZW50aXR5LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBvcHRpb25hbCBmb3IgcmV0cmlldmluZyBhIHRva2VuLlxuICAgICAqL1xuICAgIGNsaWVudElkPzogc3RyaW5nO1xuICB9O1xufVxuXG5cbmludGVyZmFjZSBBenVyZUFjdGl2ZURpcmVjdG9yeUFjY2Vzc1Rva2VuQXV0aGVudGljYXRpb24ge1xuICB0eXBlOiAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW4nO1xuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogQSB1c2VyIG5lZWRzIHRvIHByb3ZpZGUgYSBgdG9rZW5gIHdoaWNoIHRoZXkgcmV0cmlldmVkIGVsc2V3aGVyZVxuICAgICAqIHRvIGZvcm0gdGhlIGNvbm5lY3Rpb24uXG4gICAgICovXG4gICAgdG9rZW46IHN0cmluZztcbiAgfTtcbn1cblxuaW50ZXJmYWNlIEF6dXJlQWN0aXZlRGlyZWN0b3J5UGFzc3dvcmRBdXRoZW50aWNhdGlvbiB7XG4gIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJztcbiAgb3B0aW9uczoge1xuICAgIC8qKlxuICAgICAqIEEgdXNlciBuZWVkcyB0byBwcm92aWRlIGEgYHVzZXJOYW1lYCBhc3NvY2lhdGVkIHdpdGggdGhlaXIgYWNjb3VudC5cbiAgICAgKi9cbiAgICB1c2VyTmFtZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSB1c2VyIG5lZWRzIHRvIHByb3ZpZGUgYSBgcGFzc3dvcmRgIGFzc29jaWF0ZWQgd2l0aCB0aGVpciBhY2NvdW50LlxuICAgICAqL1xuICAgIHBhc3N3b3JkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIGNsaWVudCBpZCB0byB1c2UuXG4gICAgICovXG4gICAgY2xpZW50SWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIHBhcmFtZXRlciBmb3Igc3BlY2lmaWMgQXp1cmUgdGVuYW50IElEXG4gICAgICovXG4gICAgdGVuYW50SWQ6IHN0cmluZztcbiAgfTtcbn1cblxuaW50ZXJmYWNlIEF6dXJlQWN0aXZlRGlyZWN0b3J5U2VydmljZVByaW5jaXBhbFNlY3JldCB7XG4gIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2UtcHJpbmNpcGFsLXNlY3JldCc7XG4gIG9wdGlvbnM6IHtcbiAgICAvKipcbiAgICAgKiBBcHBsaWNhdGlvbiAoYGNsaWVudGApIElEIGZyb20geW91ciByZWdpc3RlcmVkIEF6dXJlIGFwcGxpY2F0aW9uXG4gICAgICovXG4gICAgY2xpZW50SWQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgY3JlYXRlZCBgY2xpZW50IHNlY3JldGAgZm9yIHRoaXMgcmVnaXN0ZXJlZCBBenVyZSBhcHBsaWNhdGlvblxuICAgICAqL1xuICAgIGNsaWVudFNlY3JldDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIERpcmVjdG9yeSAoYHRlbmFudGApIElEIGZyb20geW91ciByZWdpc3RlcmVkIEF6dXJlIGFwcGxpY2F0aW9uXG4gICAgICovXG4gICAgdGVuYW50SWQ6IHN0cmluZztcbiAgfTtcbn1cblxuLyoqIFN0cnVjdHVyZSB0aGF0IGRlZmluZXMgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbmVjZXNzYXJ5IHRvIGF1dGhlbnRpY2F0ZSB0aGUgVGVkaW91cy5KUyBpbnN0YW5jZSB3aXRoIGFuIGBAYXp1cmUvaWRlbnRpdHlgIHRva2VuIGNyZWRlbnRpYWwuICovXG5pbnRlcmZhY2UgVG9rZW5DcmVkZW50aWFsQXV0aGVudGljYXRpb24ge1xuICAvKiogVW5pcXVlIGRlc2lnbmF0b3IgZm9yIHRoZSB0eXBlIG9mIGF1dGhlbnRpY2F0aW9uIHRvIGJlIHVzZWQuICovXG4gIHR5cGU6ICd0b2tlbi1jcmVkZW50aWFsJztcbiAgLyoqIFNldCBvZiBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBvciBhbGxvd2VkIHdpdGggdGhpcyBhdXRoZW50aWNhdGlvbiB0eXBlLiAqL1xuICBvcHRpb25zOiB7XG4gICAgLyoqIENyZWRlbnRpYWwgb2JqZWN0IHVzZWQgdG8gYXV0aGVudGljYXRlIHRvIHRoZSByZXNvdXJjZS4gKi9cbiAgICBjcmVkZW50aWFsOiBUb2tlbkNyZWRlbnRpYWw7XG4gIH07XG59XG5cbmludGVyZmFjZSBOdGxtQXV0aGVudGljYXRpb24ge1xuICB0eXBlOiAnbnRsbSc7XG4gIG9wdGlvbnM6IHtcbiAgICAvKipcbiAgICAgKiBVc2VyIG5hbWUgZnJvbSB5b3VyIHdpbmRvd3MgYWNjb3VudC5cbiAgICAgKi9cbiAgICB1c2VyTmFtZTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhc3N3b3JkIGZyb20geW91ciB3aW5kb3dzIGFjY291bnQuXG4gICAgICovXG4gICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBPbmNlIHlvdSBzZXQgZG9tYWluIGZvciBudGxtIGF1dGhlbnRpY2F0aW9uIHR5cGUsIGRyaXZlciB3aWxsIGNvbm5lY3QgdG8gU1FMIFNlcnZlciB1c2luZyBkb21haW4gbG9naW4uXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgZm9ybWluZyBhIGNvbm5lY3Rpb24gdXNpbmcgbnRsbSB0eXBlXG4gICAgICovXG4gICAgZG9tYWluOiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBEZWZhdWx0QXV0aGVudGljYXRpb24ge1xuICB0eXBlOiAnZGVmYXVsdCc7XG4gIG9wdGlvbnM6IHtcbiAgICAvKipcbiAgICAgKiBVc2VyIG5hbWUgdG8gdXNlIGZvciBzcWwgc2VydmVyIGxvZ2luLlxuICAgICAqL1xuICAgIHVzZXJOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFBhc3N3b3JkIHRvIHVzZSBmb3Igc3FsIHNlcnZlciBsb2dpbi5cbiAgICAgKi9cbiAgICBwYXNzd29yZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIEVycm9yV2l0aENvZGUgZXh0ZW5kcyBFcnJvciB7XG4gIGNvZGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENvbm5lY3Rpb25BdXRoZW50aWNhdGlvbiA9IERlZmF1bHRBdXRoZW50aWNhdGlvbiB8IE50bG1BdXRoZW50aWNhdGlvbiB8IFRva2VuQ3JlZGVudGlhbEF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlQYXNzd29yZEF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lBcHBTZXJ2aWNlQXV0aGVudGljYXRpb24gfCBBenVyZUFjdGl2ZURpcmVjdG9yeU1zaVZtQXV0aGVudGljYXRpb24gfCBBenVyZUFjdGl2ZURpcmVjdG9yeUFjY2Vzc1Rva2VuQXV0aGVudGljYXRpb24gfCBBenVyZUFjdGl2ZURpcmVjdG9yeVNlcnZpY2VQcmluY2lwYWxTZWNyZXQgfCBBenVyZUFjdGl2ZURpcmVjdG9yeURlZmF1bHRBdXRoZW50aWNhdGlvbjtcblxuaW50ZXJmYWNlIEludGVybmFsQ29ubmVjdGlvbkNvbmZpZyB7XG4gIHNlcnZlcjogc3RyaW5nO1xuICBhdXRoZW50aWNhdGlvbjogQ29ubmVjdGlvbkF1dGhlbnRpY2F0aW9uO1xuICBvcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMge1xuICBhYm9ydFRyYW5zYWN0aW9uT25FcnJvcjogYm9vbGVhbjtcbiAgYXBwTmFtZTogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICBjYW1lbENhc2VDb2x1bW5zOiBib29sZWFuO1xuICBjYW5jZWxUaW1lb3V0OiBudW1iZXI7XG4gIGNvbHVtbkVuY3J5cHRpb25LZXlDYWNoZVRUTDogbnVtYmVyO1xuICBjb2x1bW5FbmNyeXB0aW9uU2V0dGluZzogYm9vbGVhbjtcbiAgY29sdW1uTmFtZVJlcGxhY2VyOiB1bmRlZmluZWQgfCAoKGNvbE5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlciwgbWV0YWRhdGE6IE1ldGFkYXRhKSA9PiBzdHJpbmcpO1xuICBjb25uZWN0aW9uUmV0cnlJbnRlcnZhbDogbnVtYmVyO1xuICBjb25uZWN0b3I6IHVuZGVmaW5lZCB8ICgoKSA9PiBQcm9taXNlPG5ldC5Tb2NrZXQ+KTtcbiAgY29ubmVjdFRpbWVvdXQ6IG51bWJlcjtcbiAgY29ubmVjdGlvbklzb2xhdGlvbkxldmVsOiB0eXBlb2YgSVNPTEFUSU9OX0xFVkVMW2tleW9mIHR5cGVvZiBJU09MQVRJT05fTEVWRUxdO1xuICBjcnlwdG9DcmVkZW50aWFsc0RldGFpbHM6IFNlY3VyZUNvbnRleHRPcHRpb25zO1xuICBkYXRhYmFzZTogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICBkYXRlZmlyc3Q6IG51bWJlcjtcbiAgZGF0ZUZvcm1hdDogc3RyaW5nO1xuICBkZWJ1Zzoge1xuICAgIGRhdGE6IGJvb2xlYW47XG4gICAgcGFja2V0OiBib29sZWFuO1xuICAgIHBheWxvYWQ6IGJvb2xlYW47XG4gICAgdG9rZW46IGJvb2xlYW47XG4gIH07XG4gIGVuYWJsZUFuc2lOdWxsOiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlQW5zaU51bGxEZWZhdWx0OiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlQW5zaVBhZGRpbmc6IG51bGwgfCBib29sZWFuO1xuICBlbmFibGVBbnNpV2FybmluZ3M6IG51bGwgfCBib29sZWFuO1xuICBlbmFibGVBcml0aEFib3J0OiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGw6IG51bGwgfCBib29sZWFuO1xuICBlbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0OiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnM6IG51bGwgfCBib29sZWFuO1xuICBlbmFibGVOdW1lcmljUm91bmRhYm9ydDogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZVF1b3RlZElkZW50aWZpZXI6IG51bGwgfCBib29sZWFuO1xuICBlbmNyeXB0OiBzdHJpbmcgfCBib29sZWFuO1xuICBlbmNyeXB0aW9uS2V5U3RvcmVQcm92aWRlcnM6IEtleVN0b3JlUHJvdmlkZXJNYXAgfCB1bmRlZmluZWQ7XG4gIGZhbGxiYWNrVG9EZWZhdWx0RGI6IGJvb2xlYW47XG4gIGluc3RhbmNlTmFtZTogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICBpc29sYXRpb25MZXZlbDogdHlwZW9mIElTT0xBVElPTl9MRVZFTFtrZXlvZiB0eXBlb2YgSVNPTEFUSU9OX0xFVkVMXTtcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgbG9jYWxBZGRyZXNzOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gIG1heFJldHJpZXNPblRyYW5zaWVudEVycm9yczogbnVtYmVyO1xuICBtdWx0aVN1Ym5ldEZhaWxvdmVyOiBib29sZWFuO1xuICBwYWNrZXRTaXplOiBudW1iZXI7XG4gIHBvcnQ6IHVuZGVmaW5lZCB8IG51bWJlcjtcbiAgcmVhZE9ubHlJbnRlbnQ6IGJvb2xlYW47XG4gIHJlcXVlc3RUaW1lb3V0OiBudW1iZXI7XG4gIHJvd0NvbGxlY3Rpb25PbkRvbmU6IGJvb2xlYW47XG4gIHJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uOiBib29sZWFuO1xuICBzZXJ2ZXJOYW1lOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gIHNlcnZlclN1cHBvcnRzQ29sdW1uRW5jcnlwdGlvbjogYm9vbGVhbjtcbiAgdGRzVmVyc2lvbjogc3RyaW5nO1xuICB0ZXh0c2l6ZTogbnVtYmVyO1xuICB0cnVzdGVkU2VydmVyTmFtZUFFOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRydXN0U2VydmVyQ2VydGlmaWNhdGU6IGJvb2xlYW47XG4gIHVzZUNvbHVtbk5hbWVzOiBib29sZWFuO1xuICB1c2VVVEM6IGJvb2xlYW47XG4gIHdvcmtzdGF0aW9uSWQ6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgbG93ZXJDYXNlR3VpZHM6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBLZXlTdG9yZVByb3ZpZGVyTWFwIHtcbiAgW2tleTogc3RyaW5nXTogQ29sdW1uRW5jcnlwdGlvbkF6dXJlS2V5VmF1bHRQcm92aWRlcjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5pbnRlcmZhY2UgU3RhdGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGVudGVyPyh0aGlzOiBDb25uZWN0aW9uKTogdm9pZDtcbiAgZXhpdD8odGhpczogQ29ubmVjdGlvbiwgbmV3U3RhdGU6IFN0YXRlKTogdm9pZDtcbiAgZXZlbnRzOiB7XG4gICAgc29ja2V0RXJyb3I/KHRoaXM6IENvbm5lY3Rpb24sIGVycjogRXJyb3IpOiB2b2lkO1xuICAgIG1lc3NhZ2U/KHRoaXM6IENvbm5lY3Rpb24sIG1lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkO1xuICB9O1xufVxuXG50eXBlIEF1dGhlbnRpY2F0aW9uID0gRGVmYXVsdEF1dGhlbnRpY2F0aW9uIHxcbiAgTnRsbUF1dGhlbnRpY2F0aW9uIHxcbiAgVG9rZW5DcmVkZW50aWFsQXV0aGVudGljYXRpb24gfFxuICBBenVyZUFjdGl2ZURpcmVjdG9yeVBhc3N3b3JkQXV0aGVudGljYXRpb24gfFxuICBBenVyZUFjdGl2ZURpcmVjdG9yeU1zaUFwcFNlcnZpY2VBdXRoZW50aWNhdGlvbiB8XG4gIEF6dXJlQWN0aXZlRGlyZWN0b3J5TXNpVm1BdXRoZW50aWNhdGlvbiB8XG4gIEF6dXJlQWN0aXZlRGlyZWN0b3J5QWNjZXNzVG9rZW5BdXRoZW50aWNhdGlvbiB8XG4gIEF6dXJlQWN0aXZlRGlyZWN0b3J5U2VydmljZVByaW5jaXBhbFNlY3JldCB8XG4gIEF6dXJlQWN0aXZlRGlyZWN0b3J5RGVmYXVsdEF1dGhlbnRpY2F0aW9uO1xuXG50eXBlIEF1dGhlbnRpY2F0aW9uVHlwZSA9IEF1dGhlbnRpY2F0aW9uWyd0eXBlJ107XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogSG9zdG5hbWUgdG8gY29ubmVjdCB0by5cbiAgICovXG4gIHNlcnZlcjogc3RyaW5nO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBmb3JtaW5nIHRoZSBjb25uZWN0aW9uLlxuICAgKi9cbiAgb3B0aW9ucz86IENvbm5lY3Rpb25PcHRpb25zO1xuICAvKipcbiAgICogQXV0aGVudGljYXRpb24gcmVsYXRlZCBvcHRpb25zIGZvciBjb25uZWN0aW9uLlxuICAgKi9cbiAgYXV0aGVudGljYXRpb24/OiBBdXRoZW50aWNhdGlvbk9wdGlvbnM7XG59XG5cbmludGVyZmFjZSBEZWJ1Z09wdGlvbnMge1xuICAvKipcbiAgICogQSBib29sZWFuLCBjb250cm9sbGluZyB3aGV0aGVyIFtbZGVidWddXSBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHdpdGggdGV4dCBkZXNjcmliaW5nIHBhY2tldCBkYXRhIGRldGFpbHNcbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBkYXRhOiBib29sZWFuO1xuICAvKipcbiAgICogQSBib29sZWFuLCBjb250cm9sbGluZyB3aGV0aGVyIFtbZGVidWddXSBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHdpdGggdGV4dCBkZXNjcmliaW5nIHBhY2tldCBkZXRhaWxzXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgcGFja2V0OiBib29sZWFuO1xuICAvKipcbiAgICogQSBib29sZWFuLCBjb250cm9sbGluZyB3aGV0aGVyIFtbZGVidWddXSBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHdpdGggdGV4dCBkZXNjcmliaW5nIHBhY2tldCBwYXlsb2FkIGRldGFpbHNcbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBwYXlsb2FkOiBib29sZWFuO1xuICAvKipcbiAgICogQSBib29sZWFuLCBjb250cm9sbGluZyB3aGV0aGVyIFtbZGVidWddXSBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHdpdGggdGV4dCBkZXNjcmliaW5nIHRva2VuIHN0cmVhbSB0b2tlbnNcbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICB0b2tlbjogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEF1dGhlbnRpY2F0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QsIHZhbGlkIHR5cGVzIGFyZSBgZGVmYXVsdGAsIGBudGxtYCxcbiAgICogYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmRgLCBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW5gLFxuICAgKiBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm1gLCBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2VgLFxuICAgKiBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1kZWZhdWx0YFxuICAgKiBvciBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXRgXG4gICAqL1xuICB0eXBlPzogQXV0aGVudGljYXRpb25UeXBlO1xuICAvKipcbiAgICogRGlmZmVyZW50IG9wdGlvbnMgZm9yIGF1dGhlbnRpY2F0aW9uIHR5cGVzOlxuICAgKlxuICAgKiAqIGBkZWZhdWx0YDogW1tEZWZhdWx0QXV0aGVudGljYXRpb24ub3B0aW9uc11dXG4gICAqICogYG50bG1gIDpbW050bG1BdXRoZW50aWNhdGlvbl1dXG4gICAqICogYHRva2VuLWNyZWRlbnRpYWxgOiBbW0NyZWRlbnRpYWxDaGFpbkF1dGhlbnRpY2F0aW9uLm9wdGlvbnNdXVxuICAgKiAqIGBhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkYCA6IFtbQXp1cmVBY3RpdmVEaXJlY3RvcnlQYXNzd29yZEF1dGhlbnRpY2F0aW9uLm9wdGlvbnNdXVxuICAgKiAqIGBhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWFjY2Vzcy10b2tlbmAgOiBbW0F6dXJlQWN0aXZlRGlyZWN0b3J5QWNjZXNzVG9rZW5BdXRoZW50aWNhdGlvbi5vcHRpb25zXV1cbiAgICogKiBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm1gIDogW1tBenVyZUFjdGl2ZURpcmVjdG9yeU1zaVZtQXV0aGVudGljYXRpb24ub3B0aW9uc11dXG4gICAqICogYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlYCA6IFtbQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lBcHBTZXJ2aWNlQXV0aGVudGljYXRpb24ub3B0aW9uc11dXG4gICAqICogYGF6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0YCA6IFtbQXp1cmVBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlUHJpbmNpcGFsU2VjcmV0Lm9wdGlvbnNdXVxuICAgKiAqIGBhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHRgIDogW1tBenVyZUFjdGl2ZURpcmVjdG9yeURlZmF1bHRBdXRoZW50aWNhdGlvbi5vcHRpb25zXV1cbiAgICovXG4gIG9wdGlvbnM/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogQSBib29sZWFuIGRldGVybWluaW5nIHdoZXRoZXIgdG8gcm9sbGJhY2sgYSB0cmFuc2FjdGlvbiBhdXRvbWF0aWNhbGx5IGlmIGFueSBlcnJvciBpcyBlbmNvdW50ZXJlZFxuICAgKiBkdXJpbmcgdGhlIGdpdmVuIHRyYW5zYWN0aW9uJ3MgZXhlY3V0aW9uLiBUaGlzIHNldHMgdGhlIHZhbHVlIGZvciBgU0VUIFhBQ1RfQUJPUlRgIGR1cmluZyB0aGVcbiAgICogaW5pdGlhbCBTUUwgcGhhc2Ugb2YgYSBjb25uZWN0aW9uIFtkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9zcWwvdC1zcWwvc3RhdGVtZW50cy9zZXQteGFjdC1hYm9ydC10cmFuc2FjdC1zcWwpLlxuICAgKi9cbiAgYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3I/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBcHBsaWNhdGlvbiBuYW1lIHVzZWQgZm9yIGlkZW50aWZ5aW5nIGEgc3BlY2lmaWMgYXBwbGljYXRpb24gaW4gcHJvZmlsaW5nLCBsb2dnaW5nIG9yIHRyYWNpbmcgdG9vbHMgb2YgU1FMU2VydmVyLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYFRlZGlvdXNgKVxuICAgKi9cbiAgYXBwTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQSBib29sZWFuLCBjb250cm9sbGluZyB3aGV0aGVyIHRoZSBjb2x1bW4gbmFtZXMgcmV0dXJuZWQgd2lsbCBoYXZlIHRoZSBmaXJzdCBsZXR0ZXIgY29udmVydGVkIHRvIGxvd2VyIGNhc2VcbiAgICogKGB0cnVlYCkgb3Igbm90LiBUaGlzIHZhbHVlIGlzIGlnbm9yZWQgaWYgeW91IHByb3ZpZGUgYSBbW2NvbHVtbk5hbWVSZXBsYWNlcl1dLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYCkuXG4gICAqL1xuICBjYW1lbENhc2VDb2x1bW5zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBbW1JlcXVlc3QuY2FuY2VsXV0gKGFib3J0KSBvZiBhIHJlcXVlc3QgaXMgY29uc2lkZXJlZCBmYWlsZWRcbiAgICpcbiAgICogKGRlZmF1bHQ6IGA1MDAwYCkuXG4gICAqL1xuICBjYW5jZWxUaW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHdpdGggcGFyYW1ldGVycyBgKGNvbHVtbk5hbWUsIGluZGV4LCBjb2x1bW5NZXRhRGF0YSlgIGFuZCByZXR1cm5pbmcgYSBzdHJpbmcuIElmIHByb3ZpZGVkLFxuICAgKiB0aGlzIHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyIGNvbHVtbiBwZXIgcmVzdWx0LXNldC4gVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBTUUwtcHJvdmlkZWRcbiAgICogY29sdW1uIG5hbWUgb24gcm93IGFuZCBtZXRhIGRhdGEgb2JqZWN0cy4gVGhpcyBhbGxvd3MgeW91IHRvIGR5bmFtaWNhbGx5IGNvbnZlcnQgYmV0d2VlbiBuYW1pbmcgY29udmVudGlvbnMuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgbnVsbGApXG4gICAqL1xuICBjb2x1bW5OYW1lUmVwbGFjZXI/OiAoY29sTmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBtZXRhZGF0YTogTWV0YWRhdGEpID0+IHN0cmluZztcblxuICAvKipcbiAgICogTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZWZvcmUgcmV0cnlpbmcgdG8gZXN0YWJsaXNoIGNvbm5lY3Rpb24sIGluIGNhc2Ugb2YgdHJhbnNpZW50IGZhaWx1cmUuXG4gICAqXG4gICAqIChkZWZhdWx0OmA1MDBgKVxuICAgKi9cbiAgY29ubmVjdGlvblJldHJ5SW50ZXJ2YWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBjb25uZWN0b3IgZmFjdG9yeSBtZXRob2QuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgdW5kZWZpbmVkYClcbiAgICovXG4gIGNvbm5lY3Rvcj86ICgpID0+IFByb21pc2U8bmV0LlNvY2tldD47XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgYXR0ZW1wdCB0byBjb25uZWN0IGlzIGNvbnNpZGVyZWQgZmFpbGVkXG4gICAqXG4gICAqIChkZWZhdWx0OiBgMTUwMDBgKS5cbiAgICovXG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBpc29sYXRpb24gbGV2ZWwgZm9yIG5ldyBjb25uZWN0aW9ucy4gQWxsIG91dC1vZi10cmFuc2FjdGlvbiBxdWVyaWVzIGFyZSBleGVjdXRlZCB3aXRoIHRoaXMgc2V0dGluZy5cbiAgICpcbiAgICogVGhlIGlzb2xhdGlvbiBsZXZlbHMgYXJlIGF2YWlsYWJsZSBmcm9tIGByZXF1aXJlKCd0ZWRpb3VzJykuSVNPTEFUSU9OX0xFVkVMYC5cbiAgICogKiBgUkVBRF9VTkNPTU1JVFRFRGBcbiAgICogKiBgUkVBRF9DT01NSVRURURgXG4gICAqICogYFJFUEVBVEFCTEVfUkVBRGBcbiAgICogKiBgU0VSSUFMSVpBQkxFYFxuICAgKiAqIGBTTkFQU0hPVGBcbiAgICpcbiAgICogKGRlZmF1bHQ6IGBSRUFEX0NPTU1JVFRFRGApLlxuICAgKi9cbiAgY29ubmVjdGlvbklzb2xhdGlvbkxldmVsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGVuIGVuY3J5cHRpb24gaXMgdXNlZCwgYW4gb2JqZWN0IG1heSBiZSBzdXBwbGllZCB0aGF0IHdpbGwgYmUgdXNlZFxuICAgKiBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50IHdoZW4gY2FsbGluZyBbYHRscy5jcmVhdGVTZWN1cmVDb250ZXh0YF0oaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0L2FwaS90bHMuaHRtbCN0bHNjcmVhdGVzZWN1cmVjb250ZXh0b3B0aW9ucykuXG4gICAqXG4gICAqIChkZWZhdWx0OiBge31gKVxuICAgKi9cbiAgY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzPzogU2VjdXJlQ29udGV4dE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERhdGFiYXNlIHRvIGNvbm5lY3QgdG8gKGRlZmF1bHQ6IGRlcGVuZGVudCBvbiBzZXJ2ZXIgY29uZmlndXJhdGlvbikuXG4gICAqL1xuICBkYXRhYmFzZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU2V0cyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIHRvIGEgbnVtYmVyIGZyb20gMSB0aHJvdWdoIDcuXG4gICAqL1xuICBkYXRlZmlyc3Q/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyBwb3NpdGlvbiBvZiBtb250aCwgZGF5IGFuZCB5ZWFyIGluIHRlbXBvcmFsIGRhdGF0eXBlcy5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBtZHlgKVxuICAgKi9cbiAgZGF0ZUZvcm1hdD86IHN0cmluZztcblxuICBkZWJ1Zz86IERlYnVnT3B0aW9ucztcblxuICAvKipcbiAgICogQSBib29sZWFuLCBjb250cm9scyB0aGUgd2F5IG51bGwgdmFsdWVzIHNob3VsZCBiZSB1c2VkIGR1cmluZyBjb21wYXJpc29uIG9wZXJhdGlvbi5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYClcbiAgICovXG4gIGVuYWJsZUFuc2lOdWxsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgYFNFVCBBTlNJX05VTExfREZMVF9PTiBPTmAgd2lsbCBiZSBzZXQgaW4gdGhlIGluaXRpYWwgc3FsLiBUaGlzIG1lYW5zIG5ldyBjb2x1bW5zIHdpbGwgYmVcbiAgICogbnVsbGFibGUgYnkgZGVmYXVsdC4gU2VlIHRoZSBbVC1TUUwgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczE4NzM3NS5hc3B4KVxuICAgKlxuICAgKiAoZGVmYXVsdDogYHRydWVgKS5cbiAgICovXG4gIGVuYWJsZUFuc2lOdWxsRGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbHMgaWYgcGFkZGluZyBzaG91bGQgYmUgYXBwbGllZCBmb3IgdmFsdWVzIHNob3J0ZXIgdGhhbiB0aGUgc2l6ZSBvZiBkZWZpbmVkIGNvbHVtbi5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYClcbiAgICovXG4gIGVuYWJsZUFuc2lQYWRkaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgU1FMIFNlcnZlciB3aWxsIGZvbGxvdyBJU08gc3RhbmRhcmQgYmVoYXZpb3IgZHVyaW5nIHZhcmlvdXMgZXJyb3IgY29uZGl0aW9ucy4gRm9yIGRldGFpbHMsXG4gICAqIHNlZSBbZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvc3FsL3Qtc3FsL3N0YXRlbWVudHMvc2V0LWFuc2ktd2FybmluZ3MtdHJhbnNhY3Qtc3FsKVxuICAgKlxuICAgKiAoZGVmYXVsdDogYHRydWVgKVxuICAgKi9cbiAgZW5hYmxlQW5zaVdhcm5pbmdzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5kcyBhIHF1ZXJ5IHdoZW4gYW4gb3ZlcmZsb3cgb3IgZGl2aWRlLWJ5LXplcm8gZXJyb3Igb2NjdXJzIGR1cmluZyBxdWVyeSBleGVjdXRpb24uXG4gICAqIFNlZSBbZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvc3FsL3Qtc3FsL3N0YXRlbWVudHMvc2V0LWFyaXRoYWJvcnQtdHJhbnNhY3Qtc3FsP3ZpZXc9c3FsLXNlcnZlci0yMDE3KVxuICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYHRydWVgKVxuICAgKi9cbiAgZW5hYmxlQXJpdGhBYm9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgZGV0ZXJtaW5lcyBpZiBjb25jYXRlbmF0aW9uIHdpdGggTlVMTCBzaG91bGQgcmVzdWx0IGluIE5VTEwgb3IgZW1wdHkgc3RyaW5nIHZhbHVlLCBtb3JlIGRldGFpbHMgaW5cbiAgICogW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9zdGF0ZW1lbnRzL3NldC1jb25jYXQtbnVsbC15aWVsZHMtbnVsbC10cmFuc2FjdC1zcWwpXG4gICAqXG4gICAqIChkZWZhdWx0OiBgdHJ1ZWApXG4gICAqL1xuICBlbmFibGVDb25jYXROdWxsWWllbGRzTnVsbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbHMgd2hldGhlciBjdXJzb3Igc2hvdWxkIGJlIGNsb3NlZCwgaWYgdGhlIHRyYW5zYWN0aW9uIG9wZW5pbmcgaXQgZ2V0cyBjb21taXR0ZWQgb3Igcm9sbGVkXG4gICAqIGJhY2suXG4gICAqXG4gICAqIChkZWZhdWx0OiBgbnVsbGApXG4gICAqL1xuICBlbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0PzogYm9vbGVhbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgc2V0cyB0aGUgY29ubmVjdGlvbiB0byBlaXRoZXIgaW1wbGljaXQgb3IgYXV0b2NvbW1pdCB0cmFuc2FjdGlvbiBtb2RlLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIGVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgZmFsc2UsIGVycm9yIGlzIG5vdCBnZW5lcmF0ZWQgZHVyaW5nIGxvc3Mgb2YgcHJlY2lzaW9uLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIGVuYWJsZU51bWVyaWNSb3VuZGFib3J0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgY2hhcmFjdGVycyBlbmNsb3NlZCBpbiBzaW5nbGUgcXVvdGVzIGFyZSB0cmVhdGVkIGFzIGxpdGVyYWxzIGFuZCB0aG9zZSBlbmNsb3NlZCBkb3VibGUgcXVvdGVzIGFyZSB0cmVhdGVkIGFzIGlkZW50aWZpZXJzLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYHRydWVgKVxuICAgKi9cbiAgZW5hYmxlUXVvdGVkSWRlbnRpZmllcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHZhbHVlIHRoYXQgY2FuIGJlIG9ubHkgc2V0IHRvICdzdHJpY3QnLCB3aGljaCBpbmRpY2F0ZXMgdGhlIHVzYWdlIFREUyA4LjAgcHJvdG9jb2wuIE90aGVyd2lzZSxcbiAgICogYSBib29sZWFuIGRldGVybWluaW5nIHdoZXRoZXIgb3Igbm90IHRoZSBjb25uZWN0aW9uIHdpbGwgYmUgZW5jcnlwdGVkLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYHRydWVgKVxuICAgKi9cbiAgZW5jcnlwdD86IHN0cmluZyB8IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIGlmIHRoZSBkYXRhYmFzZSByZXF1ZXN0ZWQgYnkgW1tkYXRhYmFzZV1dIGNhbm5vdCBiZSBhY2Nlc3NlZCxcbiAgICogdGhlIGNvbm5lY3Rpb24gd2lsbCBmYWlsIHdpdGggYW4gZXJyb3IuIEhvd2V2ZXIsIGlmIFtbZmFsbGJhY2tUb0RlZmF1bHREYl1dIGlzXG4gICAqIHNldCB0byBgdHJ1ZWAsIHRoZW4gdGhlIHVzZXIncyBkZWZhdWx0IGRhdGFiYXNlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgZmFsbGJhY2tUb0RlZmF1bHREYj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSBuYW1lIHRvIGNvbm5lY3QgdG8uXG4gICAqIFRoZSBTUUwgU2VydmVyIEJyb3dzZXIgc2VydmljZSBtdXN0IGJlIHJ1bm5pbmcgb24gdGhlIGRhdGFiYXNlIHNlcnZlcixcbiAgICogYW5kIFVEUCBwb3J0IDE0MzQgb24gdGhlIGRhdGFiYXNlIHNlcnZlciBtdXN0IGJlIHJlYWNoYWJsZS5cbiAgICpcbiAgICogKG5vIGRlZmF1bHQpXG4gICAqXG4gICAqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIFtbcG9ydF1dLlxuICAgKi9cbiAgaW5zdGFuY2VOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBpc29sYXRpb24gbGV2ZWwgdGhhdCB0cmFuc2FjdGlvbnMgd2lsbCBiZSBydW4gd2l0aC5cbiAgICpcbiAgICogVGhlIGlzb2xhdGlvbiBsZXZlbHMgYXJlIGF2YWlsYWJsZSBmcm9tIGByZXF1aXJlKCd0ZWRpb3VzJykuSVNPTEFUSU9OX0xFVkVMYC5cbiAgICogKiBgUkVBRF9VTkNPTU1JVFRFRGBcbiAgICogKiBgUkVBRF9DT01NSVRURURgXG4gICAqICogYFJFUEVBVEFCTEVfUkVBRGBcbiAgICogKiBgU0VSSUFMSVpBQkxFYFxuICAgKiAqIGBTTkFQU0hPVGBcbiAgICpcbiAgICogKGRlZmF1bHQ6IGBSRUFEX0NPTU1JVFRFRGApLlxuICAgKi9cbiAgaXNvbGF0aW9uTGV2ZWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbGFuZ3VhZ2UgZW52aXJvbm1lbnQgZm9yIHRoZSBzZXNzaW9uLiBUaGUgc2Vzc2lvbiBsYW5ndWFnZSBkZXRlcm1pbmVzIHRoZSBkYXRldGltZSBmb3JtYXRzIGFuZCBzeXN0ZW0gbWVzc2FnZXMuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgdXNfZW5nbGlzaGApLlxuICAgKi9cbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIGluZGljYXRpbmcgd2hpY2ggbmV0d29yayBpbnRlcmZhY2UgKGlwIGFkZHJlc3MpIHRvIHVzZSB3aGVuIGNvbm5lY3RpbmcgdG8gU1FMIFNlcnZlci5cbiAgICovXG4gIGxvY2FsQWRkcmVzcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQSBib29sZWFuIGRldGVybWluaW5nIHdoZXRoZXIgdG8gcGFyc2UgdW5pcXVlIGlkZW50aWZpZXIgdHlwZSB3aXRoIGxvd2VyY2FzZSBjYXNlIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAgICovXG4gIGxvd2VyQ2FzZUd1aWRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb24gcmV0cmllcyBmb3IgdHJhbnNpZW50IGVycm9ycy5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGAzYCkuXG4gICAqL1xuICBtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIE11bHRpU3VibmV0RmFpbG92ZXIgPSBUcnVlIHBhcmFtZXRlciwgd2hpY2ggY2FuIGhlbHAgbWluaW1pemUgdGhlIGNsaWVudCByZWNvdmVyeSBsYXRlbmN5IHdoZW4gZmFpbG92ZXJzIG9jY3VyLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYCkuXG4gICAqL1xuICBtdWx0aVN1Ym5ldEZhaWxvdmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgVERTIHBhY2tldHMgKHN1YmplY3QgdG8gbmVnb3RpYXRpb24gd2l0aCB0aGUgc2VydmVyKS5cbiAgICogU2hvdWxkIGJlIGEgcG93ZXIgb2YgMi5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGA0MDk2YCkuXG4gICAqL1xuICBwYWNrZXRTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQb3J0IHRvIGNvbm5lY3QgdG8gKGRlZmF1bHQ6IGAxNDMzYCkuXG4gICAqXG4gICAqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIFtbaW5zdGFuY2VOYW1lXV1cbiAgICovXG4gIHBvcnQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgY29ubmVjdGlvbiB3aWxsIHJlcXVlc3QgcmVhZCBvbmx5IGFjY2VzcyBmcm9tIGEgU1FMIFNlcnZlciBBdmFpbGFiaWxpdHlcbiAgICogR3JvdXAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW2hlcmVdKGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9oaDcxMDA1NC5hc3B4IFwiTWljcm9zb2Z0OiBDb25maWd1cmUgUmVhZC1Pbmx5IFJvdXRpbmcgZm9yIGFuIEF2YWlsYWJpbGl0eSBHcm91cCAoU1FMIFNlcnZlcilcIilcbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApLlxuICAgKi9cbiAgcmVhZE9ubHlJbnRlbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZWZvcmUgYSByZXF1ZXN0IGlzIGNvbnNpZGVyZWQgZmFpbGVkLCBvciBgMGAgZm9yIG5vIHRpbWVvdXQuXG4gICAqXG4gICAqIEFzIHNvb24gYXMgYSByZXNwb25zZSBpcyByZWNlaXZlZCwgdGhlIHRpbWVvdXQgaXMgY2xlYXJlZC4gVGhpcyBtZWFucyB0aGF0IHF1ZXJpZXMgdGhhdCBpbW1lZGlhdGVseSByZXR1cm4gYSByZXNwb25zZSBoYXZlIGFiaWxpdHkgdG8gcnVuIGxvbmdlciB0aGFuIHRoaXMgdGltZW91dC5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGAxNTAwMGApLlxuICAgKi9cbiAgcmVxdWVzdFRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgdGhhdCB3aGVuIHRydWUgd2lsbCBleHBvc2UgcmVjZWl2ZWQgcm93cyBpbiBSZXF1ZXN0cyBkb25lIHJlbGF0ZWQgZXZlbnRzOlxuICAgKiAqIFtbUmVxdWVzdC5FdmVudF9kb25lSW5Qcm9jXV1cbiAgICogKiBbW1JlcXVlc3QuRXZlbnRfZG9uZVByb2NdXVxuICAgKiAqIFtbUmVxdWVzdC5FdmVudF9kb25lXV1cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqXG4gICAqIENhdXRpb246IElmIG1hbnkgcm93IGFyZSByZWNlaXZlZCwgZW5hYmxpbmcgdGhpcyBvcHRpb24gY291bGQgcmVzdWx0IGluXG4gICAqIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2UuXG4gICAqL1xuICByb3dDb2xsZWN0aW9uT25Eb25lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBib29sZWFuLCB0aGF0IHdoZW4gdHJ1ZSB3aWxsIGV4cG9zZSByZWNlaXZlZCByb3dzIGluIFJlcXVlc3RzJyBjb21wbGV0aW9uIGNhbGxiYWNrLlNlZSBbW1JlcXVlc3QuY29uc3RydWN0b3JdXS5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqXG4gICAqIENhdXRpb246IElmIG1hbnkgcm93IGFyZSByZWNlaXZlZCwgZW5hYmxpbmcgdGhpcyBvcHRpb24gY291bGQgcmVzdWx0IGluXG4gICAqIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2UuXG4gICAqL1xuICByb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIFREUyB0byB1c2UuIElmIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgc3BlY2lmaWVkIHZlcnNpb24sIG5lZ290aWF0ZWQgdmVyc2lvbiBpcyB1c2VkIGluc3RlYWQuXG4gICAqXG4gICAqIFRoZSB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlIGZyb20gYHJlcXVpcmUoJ3RlZGlvdXMnKS5URFNfVkVSU0lPTmAuXG4gICAqICogYDdfMWAgKGRlcHJlY2F0ZWQsIHN1cHBvcnQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24pXG4gICAqICogYDdfMmBcbiAgICogKiBgN18zX0FgXG4gICAqICogYDdfM19CYFxuICAgKiAqIGA3XzRgXG4gICAqXG4gICAqIChkZWZhdWx0OiBgN180YClcbiAgICovXG4gIHRkc1ZlcnNpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgc2l6ZSBvZiB2YXJjaGFyKG1heCksIG52YXJjaGFyKG1heCksIHZhcmJpbmFyeShtYXgpLCB0ZXh0LCBudGV4dCwgYW5kIGltYWdlIGRhdGEgcmV0dXJuZWQgYnkgYSBTRUxFQ1Qgc3RhdGVtZW50LlxuICAgKlxuICAgKiAoZGVmYXVsdDogYDIxNDc0ODM2NDdgKVxuICAgKi9cbiAgdGV4dHNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElmIFwidHJ1ZVwiLCB0aGUgU1FMIFNlcnZlciBTU0wgY2VydGlmaWNhdGUgaXMgYXV0b21hdGljYWxseSB0cnVzdGVkIHdoZW4gdGhlIGNvbW11bmljYXRpb24gbGF5ZXIgaXMgZW5jcnlwdGVkIHVzaW5nIFNTTC5cbiAgICpcbiAgICogSWYgXCJmYWxzZVwiLCB0aGUgU1FMIFNlcnZlciB2YWxpZGF0ZXMgdGhlIHNlcnZlciBTU0wgY2VydGlmaWNhdGUuIElmIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBmYWlscyxcbiAgICogdGhlIGRyaXZlciByYWlzZXMgYW4gZXJyb3IgYW5kIHRlcm1pbmF0ZXMgdGhlIGNvbm5lY3Rpb24uIE1ha2Ugc3VyZSB0aGUgdmFsdWUgcGFzc2VkIHRvIHNlcnZlck5hbWUgZXhhY3RseVxuICAgKiBtYXRjaGVzIHRoZSBDb21tb24gTmFtZSAoQ04pIG9yIEROUyBuYW1lIGluIHRoZSBTdWJqZWN0IEFsdGVybmF0ZSBOYW1lIGluIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgZm9yIGFuIFNTTCBjb25uZWN0aW9uIHRvIHN1Y2NlZWQuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgdHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBzZXJ2ZXJOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQSBib29sZWFuIGRldGVybWluaW5nIHdoZXRoZXIgdG8gcmV0dXJuIHJvd3MgYXMgYXJyYXlzIG9yIGtleS12YWx1ZSBjb2xsZWN0aW9ucy5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApLlxuICAgKi9cbiAgdXNlQ29sdW1uTmFtZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0byBwYXNzIHRpbWUgdmFsdWVzIGluIFVUQyBvciBsb2NhbCB0aW1lLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYHRydWVgKS5cbiAgICovXG4gIHVzZVVUQz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB3b3Jrc3RhdGlvbiBJRCAoV1NJRCkgb2YgdGhlIGNsaWVudCwgZGVmYXVsdCBvcy5ob3N0bmFtZSgpLlxuICAgKiBVc2VkIGZvciBpZGVudGlmeWluZyBhIHNwZWNpZmljIGNsaWVudCBpbiBwcm9maWxpbmcsIGxvZ2dpbmcgb3JcbiAgICogdHJhY2luZyBjbGllbnQgYWN0aXZpdHkgaW4gU1FMU2VydmVyLlxuICAgKlxuICAgKiBUaGUgdmFsdWUgaXMgcmVwb3J0ZWQgYnkgdGhlIFRTUUwgZnVuY3Rpb24gSE9TVF9OQU1FKCkuXG4gICAqL1xuICB3b3Jrc3RhdGlvbklkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgUm91dGluZ0RhdGEge1xuICBzZXJ2ZXI6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xuICBpbnN0YW5jZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGdpdmVuIGZ1bmN0aW9uLCBwcm92aWRpbmcgaXQgd2l0aCBhIHByb21pc2UgdGhhdCB3aWxsIHJlamVjdFxuICogd2l0aCB0aGUgZ2l2ZW4gc2lnbmFsJ3MgYWJvcnQgcmVhc29uIG9uY2UgdGhlIHNpZ25hbCBpcyBhYm9ydGVkLlxuICpcbiAqIFRoZSBmdW5jdGlvbiBjYW4gcmFjZSB0aGlzIHByb21pc2UgYWdhaW5zdCBhbnkgYXN5bmNocm9ub3VzIHdvcmsgaXRcbiAqIHBlcmZvcm1zIChwb3RlbnRpYWxseSBtdWx0aXBsZSB0aW1lcykgdG8gbWFrZSBpdHNlbGYgYWJvcnRhYmxlLlxuICpcbiAqIFRoZSByZWplY3Rpb24gaXMgYWx3YXlzIGNvbnNpZGVyZWQgaGFuZGxlZCwgYW5kIHRoZSBzaWduYWwncyBhYm9ydFxuICogbGlzdGVuZXIgaXMgcmVtb3ZlZCBvbmNlIHRoZSBmdW5jdGlvbiBzZXR0bGVzLlxuICovXG5hc3luYyBmdW5jdGlvbiB3aXRoQWJvcnRSYWNlPFQ+KHNpZ25hbDogQWJvcnRTaWduYWwsIGZ1bmM6IChzaWduYWxBYm9ydGVkOiBQcm9taXNlPG5ldmVyPikgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICBjb25zdCB7IHByb21pc2U6IHNpZ25hbEFib3J0ZWQsIHJlamVjdCB9ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzPG5ldmVyPigpO1xuXG4gIC8vIFByZXZlbnQgdW5oYW5kbGVkIHJlamVjdGlvbnMgaWYgdGhlIHNpZ25hbCBpcyBhYm9ydGVkIHdoaWxlXG4gIC8vIGBmdW5jYCBpcyBub3QgY3VycmVudGx5IHJhY2luZyBhZ2FpbnN0IGBzaWduYWxBYm9ydGVkYC5cbiAgc2lnbmFsQWJvcnRlZC5jYXRjaCgoKSA9PiB7fSk7XG5cbiAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHsgcmVqZWN0KHNpZ25hbC5yZWFzb24pOyB9O1xuICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnVuYyhzaWduYWxBYm9ydGVkKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgW1tDb25uZWN0aW9uXV0gaW5zdGFuY2UgcmVwcmVzZW50cyBhIHNpbmdsZSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2Ugc2VydmVyLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgQ29ubmVjdGlvbiA9IHJlcXVpcmUoJ3RlZGlvdXMnKS5Db25uZWN0aW9uO1xuICogdmFyIGNvbmZpZyA9IHtcbiAqICBcImF1dGhlbnRpY2F0aW9uXCI6IHtcbiAqICAgIC4uLixcbiAqICAgIFwib3B0aW9uc1wiOiB7Li4ufVxuICogIH0sXG4gKiAgXCJvcHRpb25zXCI6IHsuLi59XG4gKiB9O1xuICogdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihjb25maWcpO1xuICogYGBgXG4gKlxuICogT25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbi4gT25jZSBhIFtbUmVxdWVzdF1dXG4gKiBoYXMgYmVlbiBpbml0aWF0ZWQgKHdpdGggW1tDb25uZWN0aW9uLmNhbGxQcm9jZWR1cmVdXSwgW1tDb25uZWN0aW9uLmV4ZWNTcWxdXSxcbiAqIG9yIFtbQ29ubmVjdGlvbi5leGVjU3FsQmF0Y2hdXSksIGFub3RoZXIgc2hvdWxkIG5vdCBiZSBpbml0aWF0ZWQgdW50aWwgdGhlXG4gKiBbW1JlcXVlc3RdXSdzIGNvbXBsZXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkLlxuICovXG5jbGFzcyBDb25uZWN0aW9uIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGZlZEF1dGhSZXF1aXJlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNvbmZpZzogSW50ZXJuYWxDb25uZWN0aW9uQ29uZmlnO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgc2VjdXJlQ29udGV4dE9wdGlvbnM6IFNlY3VyZUNvbnRleHRPcHRpb25zO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgaW5UcmFuc2FjdGlvbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnM6IEJ1ZmZlcltdO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdHJhbnNhY3Rpb25EZXB0aDogbnVtYmVyO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgaXNTcWxCYXRjaDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGN1clRyYW5zaWVudFJldHJ5Q291bnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHRyYW5zaWVudEVycm9yTG9va3VwOiBUcmFuc2llbnRFcnJvckxvb2t1cDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNsb3NlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGRlYnVnOiBEZWJ1ZztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIG50bG1wYWNrZXQ6IHVuZGVmaW5lZCB8IGFueTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIG50bG1wYWNrZXRCdWZmZXI6IHVuZGVmaW5lZCB8IEJ1ZmZlcjtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgU1RBVEU6IHtcbiAgICBJTklUSUFMSVpFRDogU3RhdGU7XG4gICAgQ09OTkVDVElORzogU3RhdGU7XG4gICAgU0VOVF9QUkVMT0dJTjogU3RhdGU7XG4gICAgUkVST1VUSU5HOiBTdGF0ZTtcbiAgICBUUkFOU0lFTlRfRkFJTFVSRV9SRVRSWTogU3RhdGU7XG4gICAgU0VOVF9UTFNTU0xORUdPVElBVElPTjogU3RhdGU7XG4gICAgU0VOVF9MT0dJTjdfV0lUSF9TVEFOREFSRF9MT0dJTjogU3RhdGU7XG4gICAgU0VOVF9MT0dJTjdfV0lUSF9OVExNOiBTdGF0ZTtcbiAgICBTRU5UX0xPR0lON19XSVRIX0ZFREFVVEg6IFN0YXRlO1xuICAgIExPR0dFRF9JTl9TRU5ESU5HX0lOSVRJQUxfU1FMOiBTdGF0ZTtcbiAgICBMT0dHRURfSU46IFN0YXRlO1xuICAgIFNFTlRfQ0xJRU5UX1JFUVVFU1Q6IFN0YXRlO1xuICAgIFNFTlRfQVRURU5USU9OOiBTdGF0ZTtcbiAgICBGSU5BTDogU3RhdGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJvdXRpbmdEYXRhOiB1bmRlZmluZWQgfCBSb3V0aW5nRGF0YTtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgbWVzc2FnZUlvOiBNZXNzYWdlSU87XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBzdGF0ZTogU3RhdGU7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByZXNldENvbm5lY3Rpb25Pbk5leHRSZXF1ZXN0OiB1bmRlZmluZWQgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByZXF1ZXN0OiB1bmRlZmluZWQgfCBSZXF1ZXN0IHwgQnVsa0xvYWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBwcm9jUmV0dXJuU3RhdHVzVmFsdWU6IHVuZGVmaW5lZCB8IGFueTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHNvY2tldDogdW5kZWZpbmVkIHwgbmV0LlNvY2tldDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIG1lc3NhZ2VCdWZmZXI6IEJ1ZmZlcjtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY2FuY2VsVGltZXI6IHVuZGVmaW5lZCB8IE5vZGVKUy5UaW1lb3V0O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcmVxdWVzdFRpbWVyOiB1bmRlZmluZWQgfCBOb2RlSlMuVGltZW91dDtcblxuICAvKipcbiAgICogQ29udHJvbGxlciB1c2VkIHRvIGFib3J0IHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcHJvY2Vzc1xuICAgKiB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCBiZWZvcmUgaXQgd2FzIGZ1bGx5IGVzdGFibGlzaGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjbG9zZUNvbnRyb2xsZXI6IHVuZGVmaW5lZCB8IEFib3J0Q29udHJvbGxlcjtcblxuICAvKipcbiAgICogV2hldGhlciBhbiBhdHRlbnRpb24gbWVzc2FnZSB3YXMgc2VudCB0byB0aGUgc2VydmVyIHRvIGNhbmNlbCB0aGVcbiAgICogY3VycmVudGx5IGFjdGl2ZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBhdHRlbnRpb25TZW50OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBfY2FuY2VsQWZ0ZXJSZXF1ZXN0U2VudDogKCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgZGF0YWJhc2VDb2xsYXRpb246IENvbGxhdGlvbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgX29uU29ja2V0Q2xvc2U6IChoYWRFcnJvcjogYm9vbGVhbikgPT4gdm9pZDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgX29uU29ja2V0RXJyb3I6IChlcnI6IEVycm9yKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBfb25Tb2NrZXRFbmQ6ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE5vdGU6IGJlIGF3YXJlIG9mIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyBmaWVsZDpcbiAgICogMS4gY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnNcbiAgICogMi4gY29uZmlnLm9wdGlvbnNcbiAgICpcbiAgICogYGBganNcbiAgICogY29uc3QgeyBDb25uZWN0aW9uIH0gPSByZXF1aXJlKCd0ZWRpb3VzJyk7XG4gICAqXG4gICAqIGNvbnN0IGNvbmZpZyA9IHtcbiAgICogIFwiYXV0aGVudGljYXRpb25cIjoge1xuICAgKiAgICAuLi4sXG4gICAqICAgIFwib3B0aW9uc1wiOiB7Li4ufVxuICAgKiAgfSxcbiAgICogIFwib3B0aW9uc1wiOiB7Li4ufVxuICAgKiB9O1xuICAgKlxuICAgKiBjb25zdCBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oY29uZmlnKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdvYmplY3QnIHx8IGNvbmZpZyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnXCIgYXJndW1lbnQgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgb2YgdHlwZSBPYmplY3QuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcuc2VydmVyICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLnNlcnZlclwiIHByb3BlcnR5IGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgIH1cblxuICAgIHRoaXMuZmVkQXV0aFJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICBsZXQgYXV0aGVudGljYXRpb246IENvbm5lY3Rpb25BdXRoZW50aWNhdGlvbjtcbiAgICBpZiAoY29uZmlnLmF1dGhlbnRpY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLmF1dGhlbnRpY2F0aW9uICE9PSAnb2JqZWN0JyB8fCBjb25maWcuYXV0aGVudGljYXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZSA9IGNvbmZpZy5hdXRoZW50aWNhdGlvbi50eXBlO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zID09PSB1bmRlZmluZWQgPyB7fSA6IGNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zO1xuXG4gICAgICBpZiAodHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi50eXBlXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgIT09ICdkZWZhdWx0JyAmJiB0eXBlICE9PSAnbnRsbScgJiYgdHlwZSAhPT0gJ3Rva2VuLWNyZWRlbnRpYWwnICYmIHR5cGUgIT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJyAmJiB0eXBlICE9PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW4nICYmIHR5cGUgIT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bScgJiYgdHlwZSAhPT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlJyAmJiB0eXBlICE9PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnICYmIHR5cGUgIT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInR5cGVcIiBwcm9wZXJ0eSBtdXN0IG9uZSBvZiBcImRlZmF1bHRcIiwgXCJudGxtXCIsIFwidG9rZW4tY3JlZGVudGlhbFwiLCBcImF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmRcIiwgXCJhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWFjY2Vzcy10b2tlblwiLCBcImF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdFwiLCBcImF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtXCIgb3IgXCJhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZVwiIG9yIFwiYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXRcIi4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JyB8fCBvcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG9iamVjdC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09ICdudGxtJykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZG9tYWluICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLmRvbWFpblwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy51c2VyTmFtZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLnVzZXJOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLnVzZXJOYW1lXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnBhc3N3b3JkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMucGFzc3dvcmQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMucGFzc3dvcmRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ250bG0nLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHVzZXJOYW1lOiBvcHRpb25zLnVzZXJOYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgICAgICAgICBkb21haW46IG9wdGlvbnMuZG9tYWluICYmIG9wdGlvbnMuZG9tYWluLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0b2tlbi1jcmVkZW50aWFsJykge1xuICAgICAgICBpZiAoIWlzVG9rZW5DcmVkZW50aWFsKG9wdGlvbnMuY3JlZGVudGlhbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5jcmVkZW50aWFsXCIgcHJvcGVydHkgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiB0aGUgdG9rZW4gY3JlZGVudGlhbCBjbGFzcy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICAgIHR5cGU6ICd0b2tlbi1jcmVkZW50aWFsJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBjcmVkZW50aWFsOiBvcHRpb25zLmNyZWRlbnRpYWxcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY2xpZW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudXNlck5hbWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy51c2VyTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy51c2VyTmFtZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wYXNzd29yZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLnBhc3N3b3JkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLnBhc3N3b3JkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnRlbmFudElkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMudGVuYW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudGVuYW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHVzZXJOYW1lOiBvcHRpb25zLnVzZXJOYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgICAgICAgICB0ZW5hbnRJZDogb3B0aW9ucy50ZW5hbnRJZCxcbiAgICAgICAgICAgIGNsaWVudElkOiBvcHRpb25zLmNsaWVudElkXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW4nKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2tlbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy50b2tlblwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRoZW50aWNhdGlvbiA9IHtcbiAgICAgICAgICB0eXBlOiAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW4nLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHRva2VuOiBvcHRpb25zLnRva2VuXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm0nKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY2xpZW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCcpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5jbGllbnRJZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgY2xpZW50SWQ6IG9wdGlvbnMuY2xpZW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZScpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5jbGllbnRJZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRoZW50aWNhdGlvbiA9IHtcbiAgICAgICAgICB0eXBlOiAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2UnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGNsaWVudElkOiBvcHRpb25zLmNsaWVudElkXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jbGllbnRJZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY2xpZW50U2VjcmV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudFNlY3JldFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudGVuYW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudGVuYW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0JyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZCxcbiAgICAgICAgICAgIGNsaWVudFNlY3JldDogb3B0aW9ucy5jbGllbnRTZWNyZXQsXG4gICAgICAgICAgICB0ZW5hbnRJZDogb3B0aW9ucy50ZW5hbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcHRpb25zLnVzZXJOYW1lICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMudXNlck5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudXNlck5hbWVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFzc3dvcmQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5wYXNzd29yZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5wYXNzd29yZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRoZW50aWNhdGlvbiA9IHtcbiAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgdXNlck5hbWU6IG9wdGlvbnMudXNlck5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZDogb3B0aW9ucy5wYXNzd29yZFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHVzZXJOYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgcGFzc3dvcmQ6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgc2VydmVyOiBjb25maWcuc2VydmVyLFxuICAgICAgYXV0aGVudGljYXRpb246IGF1dGhlbnRpY2F0aW9uLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBhYm9ydFRyYW5zYWN0aW9uT25FcnJvcjogZmFsc2UsXG4gICAgICAgIGFwcE5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgY2FtZWxDYXNlQ29sdW1uczogZmFsc2UsXG4gICAgICAgIGNhbmNlbFRpbWVvdXQ6IERFRkFVTFRfQ0FOQ0VMX1RJTUVPVVQsXG4gICAgICAgIGNvbHVtbkVuY3J5cHRpb25LZXlDYWNoZVRUTDogMiAqIDYwICogNjAgKiAxMDAwLCAgLy8gVW5pdHM6IG1pbGxpc2Vjb25kc1xuICAgICAgICBjb2x1bW5FbmNyeXB0aW9uU2V0dGluZzogZmFsc2UsXG4gICAgICAgIGNvbHVtbk5hbWVSZXBsYWNlcjogdW5kZWZpbmVkLFxuICAgICAgICBjb25uZWN0aW9uUmV0cnlJbnRlcnZhbDogREVGQVVMVF9DT05ORUNUX1JFVFJZX0lOVEVSVkFMLFxuICAgICAgICBjb25uZWN0VGltZW91dDogREVGQVVMVF9DT05ORUNUX1RJTUVPVVQsXG4gICAgICAgIGNvbm5lY3RvcjogdW5kZWZpbmVkLFxuICAgICAgICBjb25uZWN0aW9uSXNvbGF0aW9uTGV2ZWw6IElTT0xBVElPTl9MRVZFTC5SRUFEX0NPTU1JVFRFRCxcbiAgICAgICAgY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzOiB7fSxcbiAgICAgICAgZGF0YWJhc2U6IHVuZGVmaW5lZCxcbiAgICAgICAgZGF0ZWZpcnN0OiBERUZBVUxUX0RBVEVGSVJTVCxcbiAgICAgICAgZGF0ZUZvcm1hdDogREVGQVVMVF9EQVRFRk9STUFULFxuICAgICAgICBkZWJ1Zzoge1xuICAgICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICAgIHBhY2tldDogZmFsc2UsXG4gICAgICAgICAgcGF5bG9hZDogZmFsc2UsXG4gICAgICAgICAgdG9rZW46IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGVuYWJsZUFuc2lOdWxsOiB0cnVlLFxuICAgICAgICBlbmFibGVBbnNpTnVsbERlZmF1bHQ6IHRydWUsXG4gICAgICAgIGVuYWJsZUFuc2lQYWRkaW5nOiB0cnVlLFxuICAgICAgICBlbmFibGVBbnNpV2FybmluZ3M6IHRydWUsXG4gICAgICAgIGVuYWJsZUFyaXRoQWJvcnQ6IHRydWUsXG4gICAgICAgIGVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsOiB0cnVlLFxuICAgICAgICBlbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0OiBudWxsLFxuICAgICAgICBlbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9uczogZmFsc2UsXG4gICAgICAgIGVuYWJsZU51bWVyaWNSb3VuZGFib3J0OiBmYWxzZSxcbiAgICAgICAgZW5hYmxlUXVvdGVkSWRlbnRpZmllcjogdHJ1ZSxcbiAgICAgICAgZW5jcnlwdDogdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tUb0RlZmF1bHREYjogZmFsc2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXlTdG9yZVByb3ZpZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBpbnN0YW5jZU5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNvbGF0aW9uTGV2ZWw6IElTT0xBVElPTl9MRVZFTC5SRUFEX0NPTU1JVFRFRCxcbiAgICAgICAgbGFuZ3VhZ2U6IERFRkFVTFRfTEFOR1VBR0UsXG4gICAgICAgIGxvY2FsQWRkcmVzczogdW5kZWZpbmVkLFxuICAgICAgICBtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnM6IDMsXG4gICAgICAgIG11bHRpU3VibmV0RmFpbG92ZXI6IGZhbHNlLFxuICAgICAgICBwYWNrZXRTaXplOiBERUZBVUxUX1BBQ0tFVF9TSVpFLFxuICAgICAgICBwb3J0OiBERUZBVUxUX1BPUlQsXG4gICAgICAgIHJlYWRPbmx5SW50ZW50OiBmYWxzZSxcbiAgICAgICAgcmVxdWVzdFRpbWVvdXQ6IERFRkFVTFRfQ0xJRU5UX1JFUVVFU1RfVElNRU9VVCxcbiAgICAgICAgcm93Q29sbGVjdGlvbk9uRG9uZTogZmFsc2UsXG4gICAgICAgIHJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uOiBmYWxzZSxcbiAgICAgICAgc2VydmVyTmFtZTogdW5kZWZpbmVkLFxuICAgICAgICBzZXJ2ZXJTdXBwb3J0c0NvbHVtbkVuY3J5cHRpb246IGZhbHNlLFxuICAgICAgICB0ZHNWZXJzaW9uOiBERUZBVUxUX1REU19WRVJTSU9OLFxuICAgICAgICB0ZXh0c2l6ZTogREVGQVVMVF9URVhUU0laRSxcbiAgICAgICAgdHJ1c3RlZFNlcnZlck5hbWVBRTogdW5kZWZpbmVkLFxuICAgICAgICB0cnVzdFNlcnZlckNlcnRpZmljYXRlOiBmYWxzZSxcbiAgICAgICAgdXNlQ29sdW1uTmFtZXM6IGZhbHNlLFxuICAgICAgICB1c2VVVEM6IHRydWUsXG4gICAgICAgIHdvcmtzdGF0aW9uSWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgbG93ZXJDYXNlR3VpZHM6IGZhbHNlXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChjb25maWcub3B0aW9ucykge1xuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnBvcnQgJiYgY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUG9ydCBhbmQgaW5zdGFuY2VOYW1lIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIGJ1dCAnICsgY29uZmlnLm9wdGlvbnMucG9ydCArICcgYW5kICcgKyBjb25maWcub3B0aW9ucy5pbnN0YW5jZU5hbWUgKyAnIHByb3ZpZGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5hYm9ydFRyYW5zYWN0aW9uT25FcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3IgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5hYm9ydFRyYW5zYWN0aW9uT25FcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmFib3J0VHJhbnNhY3Rpb25PbkVycm9yXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5hYm9ydFRyYW5zYWN0aW9uT25FcnJvciA9IGNvbmZpZy5vcHRpb25zLmFib3J0VHJhbnNhY3Rpb25PbkVycm9yO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuYXBwTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuYXBwTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5hcHBOYW1lXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuYXBwTmFtZSA9IGNvbmZpZy5vcHRpb25zLmFwcE5hbWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jYW1lbENhc2VDb2x1bW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5jYW1lbENhc2VDb2x1bW5zICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5jYW1lbENhc2VDb2x1bW5zXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmNhbWVsQ2FzZUNvbHVtbnMgPSBjb25maWcub3B0aW9ucy5jYW1lbENhc2VDb2x1bW5zO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuY2FuY2VsVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuY2FuY2VsVGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5jYW5jZWxUaW1lb3V0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuY2FuY2VsVGltZW91dCA9IGNvbmZpZy5vcHRpb25zLmNhbmNlbFRpbWVvdXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jb2x1bW5OYW1lUmVwbGFjZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5jb2x1bW5OYW1lUmVwbGFjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5jYW5jZWxUaW1lb3V0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGZ1bmN0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5jb2x1bW5OYW1lUmVwbGFjZXIgPSBjb25maWcub3B0aW9ucy5jb2x1bW5OYW1lUmVwbGFjZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jb25uZWN0aW9uSXNvbGF0aW9uTGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhc3NlcnRWYWxpZElzb2xhdGlvbkxldmVsKGNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCwgJ2NvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCcpO1xuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvbklzb2xhdGlvbkxldmVsID0gY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvbklzb2xhdGlvbkxldmVsO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuY29ubmVjdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmNvbm5lY3RUaW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmNvbm5lY3RUaW1lb3V0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdFRpbWVvdXQgPSBjb25maWcub3B0aW9ucy5jb25uZWN0VGltZW91dDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmNvbm5lY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuY29ubmVjdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuY29ubmVjdG9yXCIgcHJvcGVydHkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0b3IgPSBjb25maWcub3B0aW9ucy5jb25uZWN0b3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jcnlwdG9DcmVkZW50aWFsc0RldGFpbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmNyeXB0b0NyZWRlbnRpYWxzRGV0YWlscyAhPT0gJ29iamVjdCcgfHwgY29uZmlnLm9wdGlvbnMuY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzID0gY29uZmlnLm9wdGlvbnMuY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZGF0YWJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmRhdGFiYXNlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmRhdGFiYXNlXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZGF0YWJhc2UgPSBjb25maWcub3B0aW9ucy5kYXRhYmFzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0ICE9PSAnbnVtYmVyJyAmJiBjb25maWcub3B0aW9ucy5kYXRlZmlyc3QgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kYXRlZmlyc3RcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdCAhPT0gbnVsbCAmJiAoY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0IDwgMSB8fCBjb25maWcub3B0aW9ucy5kYXRlZmlyc3QgPiA3KSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kYXRlZmlyc3RcIiBwcm9wZXJ0eSBtdXN0IGJlID49IDEgYW5kIDw9IDcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0ID0gY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZGF0ZUZvcm1hdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZGF0ZUZvcm1hdCAhPT0gJ3N0cmluZycgJiYgY29uZmlnLm9wdGlvbnMuZGF0ZUZvcm1hdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmRhdGVGb3JtYXRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmRhdGVGb3JtYXQgPSBjb25maWcub3B0aW9ucy5kYXRlRm9ybWF0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRlYnVnLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZGVidWcuZGF0YSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kZWJ1Zy5kYXRhXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5kZWJ1Zy5kYXRhID0gY29uZmlnLm9wdGlvbnMuZGVidWcuZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcub3B0aW9ucy5kZWJ1Zy5wYWNrZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZGVidWcucGFja2V0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmRlYnVnLnBhY2tldFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZGVidWcucGFja2V0ID0gY29uZmlnLm9wdGlvbnMuZGVidWcucGFja2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRlYnVnLnBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZGVidWcucGF5bG9hZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kZWJ1Zy5wYXlsb2FkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5kZWJ1Zy5wYXlsb2FkID0gY29uZmlnLm9wdGlvbnMuZGVidWcucGF5bG9hZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcub3B0aW9ucy5kZWJ1Zy50b2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5kZWJ1Zy50b2tlbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kZWJ1Zy50b2tlblwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZGVidWcudG9rZW4gPSBjb25maWcub3B0aW9ucy5kZWJ1Zy50b2tlbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGwgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsID0gY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbERlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdCAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdCA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lQYWRkaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpUGFkZGluZyAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lQYWRkaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVBhZGRpbmdcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpUGFkZGluZyA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lQYWRkaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVdhcm5pbmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3MgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3NcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3MgPSBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3M7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVBcml0aEFib3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVBcml0aEFib3J0ICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuZW5hYmxlQXJpdGhBYm9ydCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZUFyaXRoQWJvcnRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBcml0aEFib3J0ID0gY29uZmlnLm9wdGlvbnMuZW5hYmxlQXJpdGhBYm9ydDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVDb25jYXROdWxsWWllbGRzTnVsbCAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGxcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVDb25jYXROdWxsWWllbGRzTnVsbCA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdCAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZUN1cnNvckNsb3NlT25Db21taXQgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdCA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZUN1cnNvckNsb3NlT25Db21taXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnMgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5lbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnMgPSBjb25maWcub3B0aW9ucy5lbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZU51bWVyaWNSb3VuZGFib3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVOdW1lcmljUm91bmRhYm9ydCAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZU51bWVyaWNSb3VuZGFib3J0ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVOdW1lcmljUm91bmRhYm9ydCA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZU51bWVyaWNSb3VuZGFib3J0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllciAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZVF1b3RlZElkZW50aWZpZXIgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVRdW90ZWRJZGVudGlmaWVyXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllciA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZVF1b3RlZElkZW50aWZpZXI7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5jcnlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5jcnlwdCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuY3J5cHQgIT09ICdzdHJpY3QnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbmNyeXB0XCIgcHJvcGVydHkgbXVzdCBiZSBzZXQgdG8gXCJzdHJpY3RcIiwgb3Igb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5jcnlwdCA9IGNvbmZpZy5vcHRpb25zLmVuY3J5cHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5mYWxsYmFja1RvRGVmYXVsdERiICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5mYWxsYmFja1RvRGVmYXVsdERiICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5mYWxsYmFja1RvRGVmYXVsdERiXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmZhbGxiYWNrVG9EZWZhdWx0RGIgPSBjb25maWcub3B0aW9ucy5mYWxsYmFja1RvRGVmYXVsdERiO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5pbnN0YW5jZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lID0gY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lO1xuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5pc29sYXRpb25MZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFzc2VydFZhbGlkSXNvbGF0aW9uTGV2ZWwoY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWwsICdjb25maWcub3B0aW9ucy5pc29sYXRpb25MZXZlbCcpO1xuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWwgPSBjb25maWcub3B0aW9ucy5pc29sYXRpb25MZXZlbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmxhbmd1YWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5sYW5ndWFnZSAhPT0gJ3N0cmluZycgJiYgY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5sYW5ndWFnZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2UgPSBjb25maWcub3B0aW9ucy5sYW5ndWFnZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmxvY2FsQWRkcmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMubG9jYWxBZGRyZXNzICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmxvY2FsQWRkcmVzc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmxvY2FsQWRkcmVzcyA9IGNvbmZpZy5vcHRpb25zLmxvY2FsQWRkcmVzcztcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLm11bHRpU3VibmV0RmFpbG92ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLm11bHRpU3VibmV0RmFpbG92ZXIgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLm11bHRpU3VibmV0RmFpbG92ZXJcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMubXVsdGlTdWJuZXRGYWlsb3ZlciA9IGNvbmZpZy5vcHRpb25zLm11bHRpU3VibmV0RmFpbG92ZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5wYWNrZXRTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5wYWNrZXRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnBhY2tldFNpemVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5wYWNrZXRTaXplID0gY29uZmlnLm9wdGlvbnMucGFja2V0U2l6ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnBvcnQgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMucG9ydFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMucG9ydCA8PSAwIHx8IGNvbmZpZy5vcHRpb25zLnBvcnQgPj0gNjU1MzYpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMucG9ydFwiIHByb3BlcnR5IG11c3QgYmUgPiAwIGFuZCA8IDY1NTM2Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQgPSBjb25maWcub3B0aW9ucy5wb3J0O1xuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnJlYWRPbmx5SW50ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5yZWFkT25seUludGVudCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMucmVhZE9ubHlJbnRlbnRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMucmVhZE9ubHlJbnRlbnQgPSBjb25maWcub3B0aW9ucy5yZWFkT25seUludGVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnJlcXVlc3RUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5yZXF1ZXN0VGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5yZXF1ZXN0VGltZW91dFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnJlcXVlc3RUaW1lb3V0ID0gY29uZmlnLm9wdGlvbnMucmVxdWVzdFRpbWVvdXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLm1heFJldHJpZXNPblRyYW5zaWVudEVycm9ycyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLm1heFJldHJpZXNPblRyYW5zaWVudEVycm9ycyA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnNcIiBwcm9wZXJ0eSBtdXN0IGJlIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiAwLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMgPSBjb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jb25uZWN0aW9uUmV0cnlJbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvblJldHJ5SW50ZXJ2YWwgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvblJldHJ5SW50ZXJ2YWxcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25SZXRyeUludGVydmFsIDw9IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5jb25uZWN0aW9uUmV0cnlJbnRlcnZhbFwiIHByb3BlcnR5IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25SZXRyeUludGVydmFsID0gY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvblJldHJ5SW50ZXJ2YWw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmUgPSBjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvblwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbiA9IGNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy50ZHNWZXJzaW9uXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA9IGNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy50ZXh0c2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMudGV4dHNpemUgIT09ICdudW1iZXInICYmIGNvbmZpZy5vcHRpb25zLnRleHRzaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMudGV4dHNpemVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMudGV4dHNpemUgPiAyMTQ3NDgzNjQ3KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMudGV4dHNpemVcIiBjYW5cXCd0IGJlIGdyZWF0ZXIgdGhhbiAyMTQ3NDgzNjQ3LicpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5vcHRpb25zLnRleHRzaXplIDwgLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy50ZXh0c2l6ZVwiIGNhblxcJ3QgYmUgc21hbGxlciB0aGFuIC0xLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy50ZXh0c2l6ZSA9IGNvbmZpZy5vcHRpb25zLnRleHRzaXplIHwgMDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMudHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZSA9IGNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5zZXJ2ZXJOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5zZXJ2ZXJOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnNlcnZlck5hbWVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuc2VydmVyTmFtZSA9IGNvbmZpZy5vcHRpb25zLnNlcnZlck5hbWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy51c2VDb2x1bW5OYW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMudXNlQ29sdW1uTmFtZXMgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnVzZUNvbHVtbk5hbWVzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnVzZUNvbHVtbk5hbWVzID0gY29uZmlnLm9wdGlvbnMudXNlQ29sdW1uTmFtZXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy51c2VVVEMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnVzZVVUQyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMudXNlVVRDXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnVzZVVUQyA9IGNvbmZpZy5vcHRpb25zLnVzZVVUQztcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLndvcmtzdGF0aW9uSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLndvcmtzdGF0aW9uSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMud29ya3N0YXRpb25JZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLndvcmtzdGF0aW9uSWQgPSBjb25maWcub3B0aW9ucy53b3Jrc3RhdGlvbklkO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMubG93ZXJDYXNlR3VpZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmxvd2VyQ2FzZUd1aWRzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5sb3dlckNhc2VHdWlkc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5sb3dlckNhc2VHdWlkcyA9IGNvbmZpZy5vcHRpb25zLmxvd2VyQ2FzZUd1aWRzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VjdXJlQ29udGV4dE9wdGlvbnMgPSB0aGlzLmNvbmZpZy5vcHRpb25zLmNyeXB0b0NyZWRlbnRpYWxzRGV0YWlscztcbiAgICBpZiAodGhpcy5zZWN1cmVDb250ZXh0T3B0aW9ucy5zZWN1cmVPcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIElmIHRoZSBjYWxsZXIgaGFzIG5vdCBzcGVjaWZpZWQgdGhlaXIgb3duIGBzZWN1cmVPcHRpb25zYCxcbiAgICAgIC8vIHdlIHNldCBgU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UU2AgaGVyZS5cbiAgICAgIC8vIE9sZGVyIFNRTCBTZXJ2ZXIgaW5zdGFuY2VzIHJ1bm5pbmcgb24gb2xkZXIgV2luZG93cyB2ZXJzaW9ucyBoYXZlXG4gICAgICAvLyB0cm91YmxlIHdpdGggdGhlIEJFQVNUIHdvcmthcm91bmQgaW4gT3BlblNTTC5cbiAgICAgIC8vIEFzIEJFQVNUIGlzIGEgYnJvd3NlciBzcGVjaWZpYyBleHBsb2l0LCB3ZSBjYW4ganVzdCBkaXNhYmxlIHRoaXMgb3B0aW9uIGhlcmUuXG4gICAgICB0aGlzLnNlY3VyZUNvbnRleHRPcHRpb25zID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnNlY3VyZUNvbnRleHRPcHRpb25zLCB7XG4gICAgICAgIHNlY3VyZU9wdGlvbnM6IHtcbiAgICAgICAgICB2YWx1ZTogY29uc3RhbnRzLlNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWJ1ZyA9IHRoaXMuY3JlYXRlRGVidWcoKTtcbiAgICB0aGlzLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMgPSBbQnVmZmVyLmZyb20oWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdKV07XG5cbiAgICAvLyAnYmVnaW5UcmFuc2FjdGlvbicsICdjb21taXRUcmFuc2FjdGlvbicgYW5kICdyb2xsYmFja1RyYW5zYWN0aW9uJ1xuICAgIC8vIGV2ZW50cyBhcmUgdXRpbGl6ZWQgdG8gbWFpbnRhaW4gaW5UcmFuc2FjdGlvbiBwcm9wZXJ0eSBzdGF0ZSB3aGljaCBpblxuICAgIC8vIHR1cm4gaXMgdXNlZCBpbiBtYW5hZ2luZyB0cmFuc2FjdGlvbnMuIFRoZXNlIGV2ZW50cyBhcmUgb25seSBmaXJlZCBmb3JcbiAgICAvLyBURFMgdmVyc2lvbiA3LjIgYW5kIGJleW9uZC4gVGhlIHByb3BlcnRpZXMgYmVsb3cgYXJlIHVzZWQgdG8gZW11bGF0ZVxuICAgIC8vIGVxdWl2YWxlbnQgYmVoYXZpb3IgZm9yIFREUyB2ZXJzaW9ucyBiZWZvcmUgNy4yLlxuICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aCA9IDA7XG4gICAgdGhpcy5pc1NxbEJhdGNoID0gZmFsc2U7XG4gICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLm1lc3NhZ2VCdWZmZXIgPSBCdWZmZXIuYWxsb2MoMCk7XG5cbiAgICB0aGlzLmN1clRyYW5zaWVudFJldHJ5Q291bnQgPSAwO1xuICAgIHRoaXMudHJhbnNpZW50RXJyb3JMb29rdXAgPSBuZXcgVHJhbnNpZW50RXJyb3JMb29rdXAoKTtcblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLlNUQVRFLklOSVRJQUxJWkVEO1xuXG4gICAgdGhpcy5hdHRlbnRpb25TZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLl9jYW5jZWxBZnRlclJlcXVlc3RTZW50ID0gKCkgPT4ge1xuICAgICAgdGhpcy5tZXNzYWdlSW8uc2VuZE1lc3NhZ2UoVFlQRS5BVFRFTlRJT04pO1xuICAgICAgdGhpcy5hdHRlbnRpb25TZW50ID0gdHJ1ZTtcbiAgICAgIHRoaXMuY3JlYXRlQ2FuY2VsVGltZXIoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5fb25Tb2NrZXRDbG9zZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuc29ja2V0Q2xvc2UoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5fb25Tb2NrZXRFbmQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNvY2tldEVuZCgpO1xuICAgIH07XG5cbiAgICB0aGlzLl9vblNvY2tldEVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAvLyBOb3RoaW5nIGxlZnQgdG8gcm91dGUgb25jZSB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQ6IGBGaW5hbGAgaGFzIG5vXG4gICAgICAvLyBgc29ja2V0RXJyb3JgIGhhbmRsZXIsIGFuZCB0aGUgZXJyb3Igd291bGQgb25seSBzdXJmYWNlIGFzIG5vaXNlXG4gICAgICAvLyBhZnRlciBgY2xvc2UoKWAuIChNaXJyb3JzIGBzb2NrZXRFbmQoKWAuKVxuICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IHRoaXMuU1RBVEUuRklOQUwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ3NvY2tldEVycm9yJywgZXJyb3IpO1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzLndyYXBTb2NrZXRFcnJvcihlcnJvcikpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGNvbm5lY3QoY29ubmVjdExpc3RlbmVyPzogKGVycj86IEVycm9yKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IHRoaXMuU1RBVEUuSU5JVElBTElaRUQpIHtcbiAgICAgIHRocm93IG5ldyBDb25uZWN0aW9uRXJyb3IoJ2AuY29ubmVjdGAgY2FuIG5vdCBiZSBjYWxsZWQgb24gYSBDb25uZWN0aW9uIGluIGAnICsgdGhpcy5zdGF0ZS5uYW1lICsgJ2Agc3RhdGUuJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3RMaXN0ZW5lcikge1xuICAgICAgY29uc3Qgb25Db25uZWN0ID0gKGVycj86IEVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICAgIGNvbm5lY3RMaXN0ZW5lcihlcnIpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25FcnJvciA9IChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ2Nvbm5lY3QnLCBvbkNvbm5lY3QpO1xuICAgICAgICBjb25uZWN0TGlzdGVuZXIoZXJyKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7XG4gICAgICB0aGlzLm9uY2UoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZUNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkNPTk5FQ1RJTkcpO1xuICAgIHRoaXMuaW5pdGlhbGlzZUNvbm5lY3Rpb24oKS50aGVuKCgpID0+IHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnKTtcbiAgICAgIH0pO1xuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5lbWl0KCdjb25uZWN0JywgZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNsZWFudXBDb25uZWN0aW9uKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNlcnZlciBoYXMgcmVwb3J0ZWQgdGhhdCB0aGUgY2hhcnNldCBoYXMgY2hhbmdlZC5cbiAgICovXG4gIG9uKGV2ZW50OiAnY2hhcnNldENoYW5nZScsIGxpc3RlbmVyOiAoY2hhcnNldDogc3RyaW5nKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgYXR0ZW1wdCB0byBjb25uZWN0IGFuZCB2YWxpZGF0ZSBoYXMgY29tcGxldGVkLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdjb25uZWN0JyxcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZXJyIElmIHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQsIHdpbGwgYmUgZmFsc3kuIElmIHRoZXJlIHdhcyBhXG4gICAgICogICBwcm9ibGVtICh3aXRoIGVpdGhlciBjb25uZWN0aW5nIG9yIHZhbGlkYXRpb24pLCB3aWxsIGJlIGFuIFtbRXJyb3JdXSBvYmplY3QuXG4gICAgICovXG4gICAgbGlzdGVuZXI6IChlcnI6IEVycm9yIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIHNlcnZlciBoYXMgcmVwb3J0ZWQgdGhhdCB0aGUgYWN0aXZlIGRhdGFiYXNlIGhhcyBjaGFuZ2VkLlxuICAgKiBUaGlzIG1heSBiZSBhcyBhIHJlc3VsdCBvZiBhIHN1Y2Nlc3NmdWwgbG9naW4sIG9yIGEgYHVzZWAgc3RhdGVtZW50LlxuICAgKi9cbiAgb24oZXZlbnQ6ICdkYXRhYmFzZUNoYW5nZScsIGxpc3RlbmVyOiAoZGF0YWJhc2VOYW1lOiBzdHJpbmcpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIEEgZGVidWcgbWVzc2FnZSBpcyBhdmFpbGFibGUuIEl0IG1heSBiZSBsb2dnZWQgb3IgaWdub3JlZC5cbiAgICovXG4gIG9uKGV2ZW50OiAnZGVidWcnLCBsaXN0ZW5lcjogKG1lc3NhZ2VUZXh0OiBzdHJpbmcpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIEludGVybmFsIGVycm9yIG9jY3Vycy5cbiAgICovXG4gIG9uKGV2ZW50OiAnZXJyb3InLCBsaXN0ZW5lcjogKGVycjogRXJyb3IpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2ZXIgaGFzIGlzc3VlZCBhbiBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdlcnJvck1lc3NhZ2UnLCBsaXN0ZW5lcjogKG1lc3NhZ2U6IGltcG9ydCgnLi90b2tlbi90b2tlbicpLkVycm9yTWVzc2FnZVRva2VuKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgY29ubmVjdGlvbiBoYXMgZW5kZWQuXG4gICAqXG4gICAqIFRoaXMgbWF5IGJlIGFzIGEgcmVzdWx0IG9mIHRoZSBjbGllbnQgY2FsbGluZyBbW2Nsb3NlXV0sIHRoZSBzZXJ2ZXJcbiAgICogY2xvc2luZyB0aGUgY29ubmVjdGlvbiwgb3IgYSBuZXR3b3JrIGVycm9yLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdlbmQnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIHNlcnZlciBoYXMgaXNzdWVkIGFuIGluZm9ybWF0aW9uIG1lc3NhZ2UuXG4gICAqL1xuICBvbihldmVudDogJ2luZm9NZXNzYWdlJywgbGlzdGVuZXI6IChtZXNzYWdlOiBpbXBvcnQoJy4vdG9rZW4vdG9rZW4nKS5JbmZvTWVzc2FnZVRva2VuKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmVyIGhhcyByZXBvcnRlZCB0aGF0IHRoZSBsYW5ndWFnZSBoYXMgY2hhbmdlZC5cbiAgICovXG4gIG9uKGV2ZW50OiAnbGFuZ3VhZ2VDaGFuZ2UnLCBsaXN0ZW5lcjogKGxhbmd1YWdlTmFtZTogc3RyaW5nKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgY29ubmVjdGlvbiB3YXMgcmVzZXQuXG4gICAqL1xuICBvbihldmVudDogJ3Jlc2V0Q29ubmVjdGlvbicsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBBIHNlY3VyZSBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdzZWN1cmUnLCBsaXN0ZW5lcjogKGNsZWFydGV4dDogaW1wb3J0KCd0bHMnKS5UTFNTb2NrZXQpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6IHN0cmluZyB8IHN5bWJvbCwgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCkge1xuICAgIHJldHVybiBzdXBlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnY2hhcnNldENoYW5nZScsIGNoYXJzZXQ6IHN0cmluZyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnY29ubmVjdCcsIGVycm9yPzogRXJyb3IpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2RhdGFiYXNlQ2hhbmdlJywgZGF0YWJhc2VOYW1lOiBzdHJpbmcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2RhdGFiYXNlTWlycm9yaW5nUGFydG5lcicsIHBhcnRuZXJJbnN0YW5jZU5hbWU6IHN0cmluZyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZGVidWcnLCBtZXNzYWdlVGV4dDogc3RyaW5nKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdlcnJvcicsIGVycm9yOiBFcnJvcik6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZXJyb3JNZXNzYWdlJywgbWVzc2FnZTogaW1wb3J0KCcuL3Rva2VuL3Rva2VuJykuRXJyb3JNZXNzYWdlVG9rZW4pOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2VuZCcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2luZm9NZXNzYWdlJywgbWVzc2FnZTogaW1wb3J0KCcuL3Rva2VuL3Rva2VuJykuSW5mb01lc3NhZ2VUb2tlbik6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnbGFuZ3VhZ2VDaGFuZ2UnLCBsYW5ndWFnZU5hbWU6IHN0cmluZyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnc2VjdXJlJywgY2xlYXJ0ZXh0OiBpbXBvcnQoJ3RscycpLlRMU1NvY2tldCk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmVyb3V0aW5nJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmVzZXRDb25uZWN0aW9uJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmV0cnknKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdyb2xsYmFja1RyYW5zYWN0aW9uJyk6IGJvb2xlYW5cblxuICBlbWl0KGV2ZW50OiBzdHJpbmcgfCBzeW1ib2wsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgcmV0dXJuIHN1cGVyLmVtaXQoZXZlbnQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgY29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2UuXG4gICAqXG4gICAqIFRoZSBbW0V2ZW50X2VuZF1dIHdpbGwgYmUgZW1pdHRlZCBvbmNlIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZC5cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuY2xvc2VDb250cm9sbGVyPy5hYm9ydChuZXcgQ29ubmVjdGlvbkVycm9yKCdDb25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLicsICdFQ0xPU0UnKSk7XG5cbiAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICB0aGlzLmNsZWFudXBDb25uZWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFzeW5jIGluaXRpYWxpc2VDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHRpbWVvdXRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgY29uc3QgY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBob3N0UG9zdGZpeCA9IHRoaXMuY29uZmlnLm9wdGlvbnMucG9ydCA/IGA6JHt0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnR9YCA6IGBcXFxcJHt0aGlzLmNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZX1gO1xuICAgICAgLy8gSWYgd2UgaGF2ZSByb3V0aW5nIGRhdGEgc3RvcmVkLCB0aGlzIGNvbm5lY3Rpb24gaGFzIGJlZW4gcmVkaXJlY3RlZFxuICAgICAgY29uc3Qgc2VydmVyID0gdGhpcy5yb3V0aW5nRGF0YSA/IHRoaXMucm91dGluZ0RhdGEuc2VydmVyIDogdGhpcy5jb25maWcuc2VydmVyO1xuICAgICAgY29uc3QgcG9ydCA9IHRoaXMucm91dGluZ0RhdGEgPyBgOiR7dGhpcy5yb3V0aW5nRGF0YS5wb3J0fWAgOiBob3N0UG9zdGZpeDtcbiAgICAgIC8vIEdyYWIgdGhlIHRhcmdldCBob3N0IGZyb20gdGhlIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiwgYW5kIGZyb20gYSByZWRpcmVjdCBtZXNzYWdlXG4gICAgICAvLyBvdGhlcndpc2UsIGxlYXZlIHRoZSBtZXNzYWdlIGVtcHR5LlxuICAgICAgY29uc3Qgcm91dGluZ01lc3NhZ2UgPSB0aGlzLnJvdXRpbmdEYXRhID8gYCAocmVkaXJlY3RlZCBmcm9tICR7dGhpcy5jb25maWcuc2VydmVyfSR7aG9zdFBvc3RmaXh9KWAgOiAnJztcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRmFpbGVkIHRvIGNvbm5lY3QgdG8gJHtzZXJ2ZXJ9JHtwb3J0fSR7cm91dGluZ01lc3NhZ2V9IGluICR7dGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0VGltZW91dH1tc2A7XG4gICAgICB0aGlzLmRlYnVnLmxvZyhtZXNzYWdlKTtcblxuICAgICAgdGltZW91dENvbnRyb2xsZXIuYWJvcnQobmV3IENvbm5lY3Rpb25FcnJvcihtZXNzYWdlLCAnRVRJTUVPVVQnKSk7XG4gICAgfSwgdGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0VGltZW91dCk7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHNpZ25hbCA9IEFib3J0U2lnbmFsLmFueShbdGltZW91dENvbnRyb2xsZXIuc2lnbmFsLCB0aGlzLmNsb3NlQ29udHJvbGxlciEuc2lnbmFsXSk7XG5cbiAgICAgIGxldCBwb3J0ID0gdGhpcy5jb25maWcub3B0aW9ucy5wb3J0O1xuXG4gICAgICBpZiAoIXBvcnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwb3J0ID0gYXdhaXQgaW5zdGFuY2VMb29rdXAoe1xuICAgICAgICAgICAgc2VydmVyOiB0aGlzLmNvbmZpZy5zZXJ2ZXIsXG4gICAgICAgICAgICBpbnN0YW5jZU5hbWU6IHRoaXMuY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lISxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdFRpbWVvdXQsXG4gICAgICAgICAgICBzaWduYWw6IHNpZ25hbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICAgICAgdGhyb3cgbmV3IENvbm5lY3Rpb25FcnJvcihlcnIubWVzc2FnZSwgJ0VJTlNUTE9PS1VQJywgeyBjYXVzZTogZXJyIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBzb2NrZXQ7XG4gICAgICB0cnkge1xuICAgICAgICBzb2NrZXQgPSBhd2FpdCB0aGlzLmNvbm5lY3RPblBvcnQocG9ydCwgdGhpcy5jb25maWcub3B0aW9ucy5tdWx0aVN1Ym5ldEZhaWxvdmVyLCBzaWduYWwsIHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICAgIHRocm93IHRoaXMud3JhcFNvY2tldEVycm9yKGVycik7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQodGhpcy53cmFwU29ja2V0RXJyb3IoZXJyKSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZWJ1Zy5sb2coJ2Nvbm5lY3Rpb24gdG8gJyArIHRoaXMuY29uZmlnLnNlcnZlciArICc6JyArIHRoaXMuY29uZmlnLm9wdGlvbnMucG9ydCArICcgY2xvc2VkJyk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9uRW5kID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVidWcubG9nKCdzb2NrZXQgZW5kZWQnKTtcblxuICAgICAgICAgIGNvbnN0IGVycm9yOiBFcnJvcldpdGhDb2RlID0gbmV3IEVycm9yKCdzb2NrZXQgaGFuZyB1cCcpO1xuICAgICAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICAgICAgY29udHJvbGxlci5hYm9ydCh0aGlzLndyYXBTb2NrZXRFcnJvcihlcnJvcikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvY2tldC5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICBzb2NrZXQub25jZSgnY2xvc2UnLCBvbkNsb3NlKTtcbiAgICAgICAgc29ja2V0Lm9uY2UoJ2VuZCcsIG9uRW5kKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHNpZ25hbCA9IEFib3J0U2lnbmFsLmFueShbc2lnbmFsLCBjb250cm9sbGVyLnNpZ25hbF0pO1xuXG4gICAgICAgICAgLy8gVGhlIGNvbm5lY3Rpb24gbWF5IGhhdmUgYmVlbiBjbG9zZWQgd2hpbGUgd2Ugd2VyZSB3YWl0aW5nIGZvciB0aGVcbiAgICAgICAgICAvLyBzb2NrZXQgdG8gY29ubmVjdC4gQWRkaW5nIGFuIGFib3J0IGxpc3RlbmVyIHRvIGFuIGFscmVhZHkgYWJvcnRlZFxuICAgICAgICAgIC8vIHNpZ25hbCB3aWxsIG5vdCBjYWxsIHRoZSBsaXN0ZW5lciwgc28gd2UgbmVlZCB0byBjaGVjayBoZXJlLlxuICAgICAgICAgIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCBLRUVQX0FMSVZFX0lOSVRJQUxfREVMQVkpO1xuXG4gICAgICAgICAgdGhpcy5tZXNzYWdlSW8gPSBuZXcgTWVzc2FnZUlPKHNvY2tldCwgdGhpcy5jb25maWcub3B0aW9ucy5wYWNrZXRTaXplLCB0aGlzLmRlYnVnKTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VJby5vbignc2VjdXJlJywgKGNsZWFydGV4dCkgPT4geyB0aGlzLmVtaXQoJ3NlY3VyZScsIGNsZWFydGV4dCk7IH0pO1xuXG4gICAgICAgICAgdGhpcy5zb2NrZXQgPSBzb2NrZXQ7XG5cbiAgICAgICAgICB0aGlzLmRlYnVnLmxvZygnY29ubmVjdGVkIHRvICcgKyB0aGlzLmNvbmZpZy5zZXJ2ZXIgKyAnOicgKyB0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQpO1xuXG4gICAgICAgICAgdGhpcy5zZW5kUHJlTG9naW4oKTtcblxuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9QUkVMT0dJTik7XG4gICAgICAgICAgY29uc3QgcHJlbG9naW5SZXNwb25zZSA9IGF3YWl0IHRoaXMucmVhZFByZWxvZ2luUmVzcG9uc2Uoc2lnbmFsKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnBlcmZvcm1UbHNOZWdvdGlhdGlvbihwcmVsb2dpblJlc3BvbnNlLCBzaWduYWwpO1xuXG4gICAgICAgICAgdGhpcy5zZW5kTG9naW43UGFja2V0KCk7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBhdXRoZW50aWNhdGlvbiB9ID0gdGhpcy5jb25maWc7XG4gICAgICAgICAgICBzd2l0Y2ggKGF1dGhlbnRpY2F0aW9uLnR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAndG9rZW4tY3JlZGVudGlhbCc6XG4gICAgICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnOlxuICAgICAgICAgICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bSc6XG4gICAgICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlJzpcbiAgICAgICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnOlxuICAgICAgICAgICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnOlxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9MT0dJTjdfV0lUSF9GRURBVVRIKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRpbmdEYXRhID0gYXdhaXQgdGhpcy5wZXJmb3JtU2VudExvZ2luN1dpdGhGZWRBdXRoKHNpZ25hbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ250bG0nOlxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9MT0dJTjdfV0lUSF9OVExNKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRpbmdEYXRhID0gYXdhaXQgdGhpcy5wZXJmb3JtU2VudExvZ2luN1dpdGhOVExNTG9naW4oc2lnbmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfTE9HSU43X1dJVEhfU1RBTkRBUkRfTE9HSU4pO1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGluZ0RhdGEgPSBhd2FpdCB0aGlzLnBlcmZvcm1TZW50TG9naW43V2l0aFN0YW5kYXJkTG9naW4oc2lnbmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgaWYgKGlzVHJhbnNpZW50RXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICB0aGlzLmRlYnVnLmxvZygnSW5pdGlhdGluZyByZXRyeSBvbiB0cmFuc2llbnQgZXJyb3InKTtcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5UUkFOU0lFTlRfRkFJTFVSRV9SRVRSWSk7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBlcmZvcm1UcmFuc2llbnRGYWlsdXJlUmV0cnkoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIElmIHJvdXRpbmcgZGF0YSBpcyBwcmVzZW50LCB3ZSBuZWVkIHRvIHJlLXJvdXRlIHRoZSBjb25uZWN0aW9uXG4gICAgICAgICAgaWYgKHRoaXMucm91dGluZ0RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuUkVST1VUSU5HKTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBlcmZvcm1SZVJvdXRpbmcoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkxPR0dFRF9JTl9TRU5ESU5HX0lOSVRJQUxfU1FMKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnBlcmZvcm1Mb2dnZWRJblNlbmRpbmdJbml0aWFsU3FsKHNpZ25hbCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbkNsb3NlKTtcbiAgICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRW5kKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG5cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuXG4gICAgICBzb2NrZXQub24oJ2Vycm9yJywgdGhpcy5fb25Tb2NrZXRFcnJvcik7XG4gICAgICBzb2NrZXQub24oJ2Nsb3NlJywgdGhpcy5fb25Tb2NrZXRDbG9zZSk7XG4gICAgICBzb2NrZXQub24oJ2VuZCcsIHRoaXMuX29uU29ja2V0RW5kKTtcblxuICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5MT0dHRURfSU4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjbGVhclRpbWVvdXQoY29ubmVjdFRpbWVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsZWFudXBDb25uZWN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xlYXJSZXF1ZXN0VGltZXIoKTtcbiAgICAgIHRoaXMuY2xlYXJDYW5jZWxUaW1lcigpO1xuICAgICAgdGhpcy5jbG9zZUNvbm5lY3Rpb24oKTtcblxuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gTWFyayB0aGUgY29ubmVjdGlvbiBhcyBjbG9zZWQgYW5kIGRldGFjaCB0aGUgYWN0aXZlIHJlcXVlc3RcbiAgICAgIC8vIGJlZm9yZSBpbnZva2luZyBpdHMgY2FsbGJhY2ssIHNvIHRoYXQgYSBjYWxsYmFjayB0aGF0IHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGNhbGxzIGBjbG9zZWAgZG9lcyBub3QgcmUtZW50ZXIgdGhpcyBjbGVhbnVwIGxvZ2ljLlxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucmVxdWVzdDtcbiAgICAgIHRoaXMucmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYXR0ZW50aW9uU2VudCA9IGZhbHNlO1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgICBpZiAocmVxdWVzdCkge1xuICAgICAgICByZXF1ZXN0LmNhbGxiYWNrKG5ldyBSZXF1ZXN0RXJyb3IoJ0Nvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSByZXF1ZXN0IGNvbXBsZXRlZC4nLCAnRUNMT1NFJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY3JlYXRlRGVidWcoKSB7XG4gICAgY29uc3QgZGVidWcgPSBuZXcgRGVidWcodGhpcy5jb25maWcub3B0aW9ucy5kZWJ1Zyk7XG4gICAgZGVidWcub24oJ2RlYnVnJywgKG1lc3NhZ2UpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnZGVidWcnLCBtZXNzYWdlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGVidWc7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZVRva2VuU3RyZWFtUGFyc2VyKG1lc3NhZ2U6IE1lc3NhZ2UsIGhhbmRsZXI6IFRva2VuSGFuZGxlcikge1xuICAgIHJldHVybiBuZXcgVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgdGhpcy5kZWJ1ZywgaGFuZGxlciwgdGhpcy5jb25maWcub3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyB3cmFwV2l0aFRscyhzb2NrZXQ6IG5ldC5Tb2NrZXQsIHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPHRscy5UTFNTb2NrZXQ+IHtcbiAgICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGNvbnN0IHNlY3VyZUNvbnRleHQgPSB0bHMuY3JlYXRlU2VjdXJlQ29udGV4dCh0aGlzLnNlY3VyZUNvbnRleHRPcHRpb25zKTtcbiAgICAvLyBJZiBjb25uZWN0IHRvIGFuIGlwIGFkZHJlc3MgZGlyZWN0bHksXG4gICAgLy8gbmVlZCB0byBzZXQgdGhlIHNlcnZlcm5hbWUgdG8gYW4gZW1wdHkgc3RyaW5nXG4gICAgLy8gaWYgdGhlIHVzZXIgaGFzIG5vdCBnaXZlbiBhIHNlcnZlcm5hbWUgZXhwbGljaXRseVxuICAgIGNvbnN0IHNlcnZlck5hbWUgPSAhbmV0LmlzSVAodGhpcy5jb25maWcuc2VydmVyKSA/IHRoaXMuY29uZmlnLnNlcnZlciA6ICcnO1xuICAgIGNvbnN0IGVuY3J5cHRPcHRpb25zID0ge1xuICAgICAgaG9zdDogdGhpcy5jb25maWcuc2VydmVyLFxuICAgICAgc29ja2V0OiBzb2NrZXQsXG4gICAgICBBTFBOUHJvdG9jb2xzOiBbJ3Rkcy84LjAnXSxcbiAgICAgIHNlY3VyZUNvbnRleHQ6IHNlY3VyZUNvbnRleHQsXG4gICAgICBzZXJ2ZXJuYW1lOiB0aGlzLmNvbmZpZy5vcHRpb25zLnNlcnZlck5hbWUgPyB0aGlzLmNvbmZpZy5vcHRpb25zLnNlcnZlck5hbWUgOiBzZXJ2ZXJOYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUsIHJlamVjdCB9ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzPHRscy5UTFNTb2NrZXQ+KCk7XG4gICAgY29uc3QgZW5jcnlwdHNvY2tldCA9IHRscy5jb25uZWN0KGVuY3J5cHRPcHRpb25zKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4geyByZWplY3Qoc2lnbmFsLnJlYXNvbik7IH07XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9uRXJyb3IgPSByZWplY3Q7XG4gICAgICAgIGNvbnN0IG9uQ29ubmVjdCA9ICgpID0+IHtcbiAgICAgICAgICAvLyBXaXRob3V0IHRoaXMsIE5vZGUncyBUTFMgbGF5ZXIgaXMgZnJlZSB0byBjb2FsZXNjZSBtdWx0aXBsZSBiYWNrLXRvLWJhY2tcbiAgICAgICAgICAvLyBURFMgcGFja2V0IHdyaXRlcyBpbnRvIGEgc2luZ2xlLCBsYXJnZXIgVExTIHJlY29yZC4gVGhlIG5vbi1zdHJpY3QgYHN0YXJ0VGxzYFxuICAgICAgICAgIC8vIHBhdGggKG1lc3NhZ2UtaW8udHMpIGNhcHMgbWF4IHNlbmQgZnJhZ21lbnQgdG8gdGhlIFREUyBwYWNrZXQgc2l6ZSBmb3IgdGhlXG4gICAgICAgICAgLy8gc2FtZSByZWFzb247IGB3cmFwV2l0aFRsc2AgKFREUyA4LjAgLyBlbmNyeXB0OiBcInN0cmljdFwiKSBtdXN0IG1hdGNoIGl0LlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gV2l0aG91dCB0aGlzIGZpeCwgYSBMT0dJTjcgc3Bhbm5pbmcgbXVsdGlwbGUgVERTIHBhY2tldHMgKGUuZy4gYW55IEZlZEF1dGhcbiAgICAgICAgICAvLyBsb2dpbiBjYXJyeWluZyBhbiBFbnRyYSBJRCBhY2Nlc3MgdG9rZW4sIHdoaWNoIHJvdXRpbmVseSBleGNlZWRzIG9uZSA0S0JcbiAgICAgICAgICAvLyBwYWNrZXQpIHJlbGlhYmx5IGZhaWxzIHdpdGggRUNPTk5SRVNFVCBhZ2FpbnN0IEF6dXJlIFNRTCBvbmNlIFRMUyBpc1xuICAgICAgICAgIC8vIG5lZ290aWF0ZWQgYnV0IGJlZm9yZSBMT0dJTkFDSyDigJQgc2VlXG4gICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RlZGlvdXNqcy90ZWRpb3VzL2lzc3Vlcy8xMTgyLiBTaW5nbGUtcGFja2V0IGxvZ2luc1xuICAgICAgICAgIC8vIChlLmcuIHBsYWluIFNRTCBhdXRoIHdpdGggc2hvcnQgY3JlZGVudGlhbHMpIGFyZSB1bmFmZmVjdGVkIGVpdGhlciB3YXksXG4gICAgICAgICAgLy8gd2hpY2ggaXMgd2h5IHRoaXMgYnVnIHJlYWRzIGFzIFwiRmVkQXV0aC1zcGVjaWZpY1wiIHVudGlsIHlvdSBsb29rIGNsb3Nlci5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIGBzZXRNYXhTZW5kRnJhZ21lbnRgIHNpbGVudGx5IG5vLW9wcyBmb3IgdmFsdWVzIG91dHNpZGUgNTEyLTE2Mzg0LCBzbyBhXG4gICAgICAgICAgLy8gYHBhY2tldFNpemVgIGFib3ZlIHRoYXQgKGUuZy4gMzI3NjcsIGNvbW1vbmx5IHVzZWQgZm9yIGJ1bGsgbG9hZCkgaGFzIHRvIGJlXG4gICAgICAgICAgLy8gY2xhbXBlZCBvciBpdCB3b3VsZCBsZWF2ZSB0aGUgY2FwIHVuc2V0IGFuZCByZWludHJvZHVjZSB0aGUgYnVnIGl0IGZpeGVzLlxuICAgICAgICAgIGVuY3J5cHRzb2NrZXQuc2V0TWF4U2VuZEZyYWdtZW50KE1hdGgubWluKHRoaXMuY29uZmlnLm9wdGlvbnMucGFja2V0U2l6ZSwgTWVzc2FnZUlPLk1BWF9UTFNfU0VORF9GUkFHTUVOVF9TSVpFKSk7XG4gICAgICAgICAgcmVzb2x2ZShlbmNyeXB0c29ja2V0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBlbmNyeXB0c29ja2V0Lm9uY2UoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICAgIGVuY3J5cHRzb2NrZXQub25jZSgnc2VjdXJlQ29ubmVjdCcsIG9uQ29ubmVjdCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcHJvbWlzZTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBlbmNyeXB0c29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICAgIGVuY3J5cHRzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ3NlY3VyZUNvbm5lY3QnLCBvbkNvbm5lY3QpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgZW5jcnlwdHNvY2tldC5kZXN0cm95KCk7XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjb25uZWN0T25Qb3J0KHBvcnQ6IG51bWJlciwgbXVsdGlTdWJuZXRGYWlsb3ZlcjogYm9vbGVhbiwgc2lnbmFsOiBBYm9ydFNpZ25hbCwgY3VzdG9tQ29ubmVjdG9yPzogKCkgPT4gUHJvbWlzZTxuZXQuU29ja2V0Pikge1xuICAgIGNvbnN0IGNvbm5lY3RPcHRzID0ge1xuICAgICAgaG9zdDogdGhpcy5yb3V0aW5nRGF0YSA/IHRoaXMucm91dGluZ0RhdGEuc2VydmVyIDogdGhpcy5jb25maWcuc2VydmVyLFxuICAgICAgcG9ydDogdGhpcy5yb3V0aW5nRGF0YSA/IHRoaXMucm91dGluZ0RhdGEucG9ydCA6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IHRoaXMuY29uZmlnLm9wdGlvbnMubG9jYWxBZGRyZXNzXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbm5lY3QgPSBjdXN0b21Db25uZWN0b3IgfHwgKG11bHRpU3VibmV0RmFpbG92ZXIgPyBjb25uZWN0SW5QYXJhbGxlbCA6IGNvbm5lY3RJblNlcXVlbmNlKTtcblxuICAgIGxldCBzb2NrZXQgPSBhd2FpdCBjb25uZWN0KGNvbm5lY3RPcHRzLCBkbnMubG9va3VwLCBzaWduYWwpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5jcnlwdCA9PT0gJ3N0cmljdCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFdyYXAgdGhlIHNvY2tldCB3aXRoIFRMUyBmb3IgVERTIDguMFxuICAgICAgICBzb2NrZXQgPSBhd2FpdCB0aGlzLndyYXBXaXRoVGxzKHNvY2tldCwgc2lnbmFsKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzb2NrZXQuZW5kKCk7XG5cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb2NrZXQ7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsb3NlQ29ubmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICAgIHRoaXMuc29ja2V0LmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZUNhbmNlbFRpbWVyKCkge1xuICAgIHRoaXMuY2xlYXJDYW5jZWxUaW1lcigpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLmNvbmZpZy5vcHRpb25zLmNhbmNlbFRpbWVvdXQ7XG4gICAgaWYgKHRpbWVvdXQgPiAwKSB7XG4gICAgICB0aGlzLmNhbmNlbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsVGltZW91dCgpO1xuICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVSZXF1ZXN0VGltZXIoKSB7XG4gICAgdGhpcy5jbGVhclJlcXVlc3RUaW1lcigpOyAvLyByZWxlYXNlIG9sZCB0aW1lciwganVzdCB0byBiZSBzYWZlXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucmVxdWVzdCBhcyBSZXF1ZXN0O1xuICAgIGNvbnN0IHRpbWVvdXQgPSAocmVxdWVzdC50aW1lb3V0ICE9PSB1bmRlZmluZWQpID8gcmVxdWVzdC50aW1lb3V0IDogdGhpcy5jb25maWcub3B0aW9ucy5yZXF1ZXN0VGltZW91dDtcbiAgICBpZiAodGltZW91dCkge1xuICAgICAgdGhpcy5yZXF1ZXN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VGltZW91dCgpO1xuICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWxUaW1lb3V0KCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgRmFpbGVkIHRvIGNhbmNlbCByZXF1ZXN0IGluICR7dGhpcy5jb25maWcub3B0aW9ucy5jYW5jZWxUaW1lb3V0fW1zYDtcbiAgICB0aGlzLmRlYnVnLmxvZyhtZXNzYWdlKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ3NvY2tldEVycm9yJywgbmV3IENvbm5lY3Rpb25FcnJvcihtZXNzYWdlLCAnRVRJTUVPVVQnKSk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlcXVlc3RUaW1lb3V0KCkge1xuICAgIHRoaXMucmVxdWVzdFRpbWVyID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnJlcXVlc3QhO1xuICAgIHJlcXVlc3QuY2FuY2VsKCk7XG4gICAgY29uc3QgdGltZW91dCA9IChyZXF1ZXN0LnRpbWVvdXQgIT09IHVuZGVmaW5lZCkgPyByZXF1ZXN0LnRpbWVvdXQgOiB0aGlzLmNvbmZpZy5vcHRpb25zLnJlcXVlc3RUaW1lb3V0O1xuICAgIGNvbnN0IG1lc3NhZ2UgPSAnVGltZW91dDogUmVxdWVzdCBmYWlsZWQgdG8gY29tcGxldGUgaW4gJyArIHRpbWVvdXQgKyAnbXMnO1xuICAgIHJlcXVlc3QuZXJyb3IgPSBuZXcgUmVxdWVzdEVycm9yKG1lc3NhZ2UsICdFVElNRU9VVCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjbGVhckNhbmNlbFRpbWVyKCkge1xuICAgIGlmICh0aGlzLmNhbmNlbFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5jYW5jZWxUaW1lcik7XG4gICAgICB0aGlzLmNhbmNlbFRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2xlYXJSZXF1ZXN0VGltZXIoKSB7XG4gICAgaWYgKHRoaXMucmVxdWVzdFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXF1ZXN0VGltZXIpO1xuICAgICAgdGhpcy5yZXF1ZXN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0cmFuc2l0aW9uVG8obmV3U3RhdGU6IFN0YXRlKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IG5ld1N0YXRlKSB7XG4gICAgICB0aGlzLmRlYnVnLmxvZygnU3RhdGUgaXMgYWxyZWFkeSAnICsgbmV3U3RhdGUubmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUgJiYgdGhpcy5zdGF0ZS5leGl0KSB7XG4gICAgICB0aGlzLnN0YXRlLmV4aXQuY2FsbCh0aGlzLCBuZXdTdGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWJ1Zy5sb2coJ1N0YXRlIGNoYW5nZTogJyArICh0aGlzLnN0YXRlID8gdGhpcy5zdGF0ZS5uYW1lIDogJ3VuZGVmaW5lZCcpICsgJyAtPiAnICsgbmV3U3RhdGUubmFtZSk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuZW50ZXIpIHtcbiAgICAgIHRoaXMuc3RhdGUuZW50ZXIuYXBwbHkodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRFdmVudEhhbmRsZXI8VCBleHRlbmRzIGtleW9mIFN0YXRlWydldmVudHMnXT4oZXZlbnROYW1lOiBUKTogTm9uTnVsbGFibGU8U3RhdGVbJ2V2ZW50cyddW1RdPiB7XG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMuc3RhdGUuZXZlbnRzW2V2ZW50TmFtZV07XG5cbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZXZlbnQgJyR7ZXZlbnROYW1lfScgaW4gc3RhdGUgJyR7dGhpcy5zdGF0ZS5uYW1lfSdgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlciE7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRpc3BhdGNoRXZlbnQ8VCBleHRlbmRzIGtleW9mIFN0YXRlWydldmVudHMnXT4oZXZlbnROYW1lOiBULCAuLi5hcmdzOiBQYXJhbWV0ZXJzPE5vbk51bGxhYmxlPFN0YXRlWydldmVudHMnXVtUXT4+KSB7XG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMuc3RhdGUuZXZlbnRzW2V2ZW50TmFtZV0gYXMgKCh0aGlzOiBDb25uZWN0aW9uLCAuLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoYE5vIGV2ZW50ICcke2V2ZW50TmFtZX0nIGluIHN0YXRlICcke3RoaXMuc3RhdGUubmFtZX0nYCkpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgd3JhcFNvY2tldEVycm9yKGVycm9yOiBFcnJvcik6IENvbm5lY3Rpb25FcnJvciB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IHRoaXMuU1RBVEUuQ09OTkVDVElORyB8fCB0aGlzLnN0YXRlID09PSB0aGlzLlNUQVRFLlNFTlRfVExTU1NMTkVHT1RJQVRJT04pIHtcbiAgICAgIGNvbnN0IGhvc3RQb3N0Zml4ID0gdGhpcy5jb25maWcub3B0aW9ucy5wb3J0ID8gYDoke3RoaXMuY29uZmlnLm9wdGlvbnMucG9ydH1gIDogYFxcXFwke3RoaXMuY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lfWA7XG4gICAgICAvLyBJZiB3ZSBoYXZlIHJvdXRpbmcgZGF0YSBzdG9yZWQsIHRoaXMgY29ubmVjdGlvbiBoYXMgYmVlbiByZWRpcmVjdGVkXG4gICAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLnJvdXRpbmdEYXRhID8gdGhpcy5yb3V0aW5nRGF0YS5zZXJ2ZXIgOiB0aGlzLmNvbmZpZy5zZXJ2ZXI7XG4gICAgICBjb25zdCBwb3J0ID0gdGhpcy5yb3V0aW5nRGF0YSA/IGA6JHt0aGlzLnJvdXRpbmdEYXRhLnBvcnR9YCA6IGhvc3RQb3N0Zml4O1xuICAgICAgLy8gR3JhYiB0aGUgdGFyZ2V0IGhvc3QgZnJvbSB0aGUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uLCBhbmQgZnJvbSBhIHJlZGlyZWN0IG1lc3NhZ2VcbiAgICAgIC8vIG90aGVyd2lzZSwgbGVhdmUgdGhlIG1lc3NhZ2UgZW1wdHkuXG4gICAgICBjb25zdCByb3V0aW5nTWVzc2FnZSA9IHRoaXMucm91dGluZ0RhdGEgPyBgIChyZWRpcmVjdGVkIGZyb20gJHt0aGlzLmNvbmZpZy5zZXJ2ZXJ9JHtob3N0UG9zdGZpeH0pYCA6ICcnO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBGYWlsZWQgdG8gY29ubmVjdCB0byAke3NlcnZlcn0ke3BvcnR9JHtyb3V0aW5nTWVzc2FnZX0gLSAke2Vycm9yLm1lc3NhZ2V9YDtcblxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uRXJyb3IobWVzc2FnZSwgJ0VTT0NLRVQnLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBDb25uZWN0aW9uIGxvc3QgLSAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbkVycm9yKG1lc3NhZ2UsICdFU09DS0VUJywgeyBjYXVzZTogZXJyb3IgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzb2NrZXRFbmQoKSB7XG4gICAgdGhpcy5kZWJ1Zy5sb2coJ3NvY2tldCBlbmRlZCcpO1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSB0aGlzLlNUQVRFLkZJTkFMKSB7XG4gICAgICBjb25zdCBlcnJvcjogRXJyb3JXaXRoQ29kZSA9IG5ldyBFcnJvcignc29ja2V0IGhhbmcgdXAnKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgnc29ja2V0RXJyb3InLCBlcnJvcik7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMud3JhcFNvY2tldEVycm9yKGVycm9yKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNvY2tldENsb3NlKCkge1xuICAgIHRoaXMuZGVidWcubG9nKCdjb25uZWN0aW9uIHRvICcgKyB0aGlzLmNvbmZpZy5zZXJ2ZXIgKyAnOicgKyB0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQgKyAnIGNsb3NlZCcpO1xuICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgIHRoaXMuY2xlYW51cENvbm5lY3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2VuZFByZUxvZ2luKCkge1xuICAgIGNvbnN0IFssIG1ham9yLCBtaW5vciwgYnVpbGRdID0gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykvLmV4ZWModmVyc2lvbikgPz8gWycwLjAuMCcsICcwJywgJzAnLCAnMCddO1xuICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgUHJlbG9naW5QYXlsb2FkKHtcbiAgICAgIC8vIElmIGVuY3J5cHQgc2V0dGluZyBpcyBzZXQgdG8gJ3N0cmljdCcsIHRoZW4gd2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBkb25lIHRoZSBlbmNyeXB0aW9uIGJlZm9yZSBjYWxsaW5nXG4gICAgICAvLyB0aGlzIGZ1bmN0aW9uLiBUaGVyZWZvcmUsIHRoZSBlbmNyeXB0IHdpbGwgYmUgc2V0IHRvIGZhbHNlIGhlcmUuXG4gICAgICAvLyBPdGhlcndpc2UsIHdlIHdpbGwgc2V0IGVuY3J5cHQgaGVyZSBiYXNlZCBvbiB0aGUgZW5jcnlwdCBCb29sZWFuIHZhbHVlIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAgICBlbmNyeXB0OiB0eXBlb2YgdGhpcy5jb25maWcub3B0aW9ucy5lbmNyeXB0ID09PSAnYm9vbGVhbicgJiYgdGhpcy5jb25maWcub3B0aW9ucy5lbmNyeXB0LFxuICAgICAgdmVyc2lvbjogeyBtYWpvcjogTnVtYmVyKG1ham9yKSwgbWlub3I6IE51bWJlcihtaW5vciksIGJ1aWxkOiBOdW1iZXIoYnVpbGQpLCBzdWJidWlsZDogMCB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm1lc3NhZ2VJby5zZW5kTWVzc2FnZShUWVBFLlBSRUxPR0lOLCBwYXlsb2FkLmRhdGEpO1xuICAgIHRoaXMuZGVidWcucGF5bG9hZChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBwYXlsb2FkLnRvU3RyaW5nKCcgICcpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZW5kTG9naW43UGFja2V0KCkge1xuICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgTG9naW43UGF5bG9hZCh7XG4gICAgICB0ZHNWZXJzaW9uOiB2ZXJzaW9uc1t0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb25dLFxuICAgICAgcGFja2V0U2l6ZTogdGhpcy5jb25maWcub3B0aW9ucy5wYWNrZXRTaXplLFxuICAgICAgY2xpZW50UHJvZ1ZlcjogMCxcbiAgICAgIGNsaWVudFBpZDogcHJvY2Vzcy5waWQsXG4gICAgICBjb25uZWN0aW9uSWQ6IDAsXG4gICAgICBjbGllbnRUaW1lWm9uZTogbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpLFxuICAgICAgY2xpZW50TGNpZDogMHgwMDAwMDQwOVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGlvbiB9ID0gdGhpcy5jb25maWc7XG4gICAgc3dpdGNoIChhdXRoZW50aWNhdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJzpcbiAgICAgICAgcGF5bG9hZC5mZWRBdXRoID0ge1xuICAgICAgICAgIHR5cGU6ICdBREFMJyxcbiAgICAgICAgICBlY2hvOiB0aGlzLmZlZEF1dGhSZXF1aXJlZCxcbiAgICAgICAgICB3b3JrZmxvdzogJ2RlZmF1bHQnXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWFjY2Vzcy10b2tlbic6XG4gICAgICAgIHBheWxvYWQuZmVkQXV0aCA9IHtcbiAgICAgICAgICB0eXBlOiAnU0VDVVJJVFlUT0tFTicsXG4gICAgICAgICAgZWNobzogdGhpcy5mZWRBdXRoUmVxdWlyZWQsXG4gICAgICAgICAgZmVkQXV0aFRva2VuOiBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnRva2VuXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd0b2tlbi1jcmVkZW50aWFsJzpcbiAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJzpcbiAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCc6XG4gICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZSc6XG4gICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2UtcHJpbmNpcGFsLXNlY3JldCc6XG4gICAgICAgIHBheWxvYWQuZmVkQXV0aCA9IHtcbiAgICAgICAgICB0eXBlOiAnQURBTCcsXG4gICAgICAgICAgZWNobzogdGhpcy5mZWRBdXRoUmVxdWlyZWQsXG4gICAgICAgICAgd29ya2Zsb3c6ICdpbnRlZ3JhdGVkJ1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbnRsbSc6XG4gICAgICAgIHBheWxvYWQuc3NwaSA9IGNyZWF0ZU5UTE1SZXF1ZXN0KHsgZG9tYWluOiBhdXRoZW50aWNhdGlvbi5vcHRpb25zLmRvbWFpbiB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBheWxvYWQudXNlck5hbWUgPSBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnVzZXJOYW1lO1xuICAgICAgICBwYXlsb2FkLnBhc3N3b3JkID0gYXV0aGVudGljYXRpb24ub3B0aW9ucy5wYXNzd29yZDtcbiAgICB9XG5cbiAgICBwYXlsb2FkLmhvc3RuYW1lID0gdGhpcy5jb25maWcub3B0aW9ucy53b3Jrc3RhdGlvbklkIHx8IG9zLmhvc3RuYW1lKCk7XG4gICAgcGF5bG9hZC5zZXJ2ZXJOYW1lID0gdGhpcy5yb3V0aW5nRGF0YSA/XG4gICAgICBgJHt0aGlzLnJvdXRpbmdEYXRhLnNlcnZlcn0ke3RoaXMucm91dGluZ0RhdGEuaW5zdGFuY2UgPyAnXFxcXCcgKyB0aGlzLnJvdXRpbmdEYXRhLmluc3RhbmNlIDogJyd9YCA6XG4gICAgICB0aGlzLmNvbmZpZy5zZXJ2ZXI7XG4gICAgcGF5bG9hZC5hcHBOYW1lID0gdGhpcy5jb25maWcub3B0aW9ucy5hcHBOYW1lIHx8ICdUZWRpb3VzJztcbiAgICBwYXlsb2FkLmxpYnJhcnlOYW1lID0gbGlicmFyeU5hbWU7XG4gICAgcGF5bG9hZC5sYW5ndWFnZSA9IHRoaXMuY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2U7XG4gICAgcGF5bG9hZC5kYXRhYmFzZSA9IHRoaXMuY29uZmlnLm9wdGlvbnMuZGF0YWJhc2U7XG4gICAgcGF5bG9hZC5jbGllbnRJZCA9IEJ1ZmZlci5mcm9tKFsxLCAyLCAzLCA0LCA1LCA2XSk7XG5cbiAgICBwYXlsb2FkLnJlYWRPbmx5SW50ZW50ID0gdGhpcy5jb25maWcub3B0aW9ucy5yZWFkT25seUludGVudDtcbiAgICBwYXlsb2FkLmluaXREYkZhdGFsID0gIXRoaXMuY29uZmlnLm9wdGlvbnMuZmFsbGJhY2tUb0RlZmF1bHREYjtcblxuICAgIHRoaXMucm91dGluZ0RhdGEgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tZXNzYWdlSW8uc2VuZE1lc3NhZ2UoVFlQRS5MT0dJTjcsIHBheWxvYWQudG9CdWZmZXIoKSk7XG5cbiAgICB0aGlzLmRlYnVnLnBheWxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcGF5bG9hZC50b1N0cmluZygnICAnKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2VuZEZlZEF1dGhUb2tlbk1lc3NhZ2UodG9rZW46IHN0cmluZykge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgodG9rZW4sICd1Y3MyJyk7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg4ICsgYWNjZXNzVG9rZW5MZW4pO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIG9mZnNldCA9IGRhdGEud3JpdGVVSW50MzJMRShhY2Nlc3NUb2tlbkxlbiArIDQsIG9mZnNldCk7XG4gICAgb2Zmc2V0ID0gZGF0YS53cml0ZVVJbnQzMkxFKGFjY2Vzc1Rva2VuTGVuLCBvZmZzZXQpO1xuICAgIGRhdGEud3JpdGUodG9rZW4sIG9mZnNldCwgJ3VjczInKTtcbiAgICB0aGlzLm1lc3NhZ2VJby5zZW5kTWVzc2FnZShUWVBFLkZFREFVVEhfVE9LRU4sIGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZW5kSW5pdGlhbFNxbCgpIHtcbiAgICBjb25zdCBwYXlsb2FkID0gbmV3IFNxbEJhdGNoUGF5bG9hZCh0aGlzLmdldEluaXRpYWxTcWwoKSwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCksIHRoaXMuY29uZmlnLm9wdGlvbnMpO1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKHsgdHlwZTogVFlQRS5TUUxfQkFUQ0ggfSk7XG4gICAgdGhpcy5tZXNzYWdlSW8ub3V0Z29pbmdNZXNzYWdlU3RyZWFtLndyaXRlKG1lc3NhZ2UpO1xuICAgIFJlYWRhYmxlLmZyb20ocGF5bG9hZCkucGlwZShtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0SW5pdGlhbFNxbCgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW107XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbCA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYW5zaV9udWxscyBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbCA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFuc2lfbnVsbHMgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGxEZWZhdWx0ID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhbnNpX251bGxfZGZsdF9vbiBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbERlZmF1bHQgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhbnNpX251bGxfZGZsdF9vbiBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpUGFkZGluZyA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYW5zaV9wYWRkaW5nIG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lQYWRkaW5nID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYW5zaV9wYWRkaW5nIG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lXYXJuaW5ncyA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYW5zaV93YXJuaW5ncyBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3MgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhbnNpX3dhcm5pbmdzIG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFyaXRoQWJvcnQgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFyaXRoYWJvcnQgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQXJpdGhBYm9ydCA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFyaXRoYWJvcnQgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGwgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGNvbmNhdF9udWxsX3lpZWxkc19udWxsIG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgY29uY2F0X251bGxfeWllbGRzX251bGwgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdCA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgY3Vyc29yX2Nsb3NlX29uX2NvbW1pdCBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0ID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgY3Vyc29yX2Nsb3NlX29uX2NvbW1pdCBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5kYXRlZmlyc3QgIT09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgc2V0IGRhdGVmaXJzdCAke3RoaXMuY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0fWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmRhdGVGb3JtYXQgIT09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgc2V0IGRhdGVmb3JtYXQgJHt0aGlzLmNvbmZpZy5vcHRpb25zLmRhdGVGb3JtYXR9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnMgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGltcGxpY2l0X3RyYW5zYWN0aW9ucyBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGltcGxpY2l0X3RyYW5zYWN0aW9ucyBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5sYW5ndWFnZSAhPT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5wdXNoKGBzZXQgbGFuZ3VhZ2UgJHt0aGlzLmNvbmZpZy5vcHRpb25zLmxhbmd1YWdlfWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZU51bWVyaWNSb3VuZGFib3J0ID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBudW1lcmljX3JvdW5kYWJvcnQgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBudW1lcmljX3JvdW5kYWJvcnQgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllciA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgcXVvdGVkX2lkZW50aWZpZXIgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllciA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IHF1b3RlZF9pZGVudGlmaWVyIG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRleHRzaXplICE9PSBudWxsKSB7XG4gICAgICBvcHRpb25zLnB1c2goYHNldCB0ZXh0c2l6ZSAke3RoaXMuY29uZmlnLm9wdGlvbnMudGV4dHNpemV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvbklzb2xhdGlvbkxldmVsICE9PSBudWxsKSB7XG4gICAgICBvcHRpb25zLnB1c2goYHNldCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgJHt0aGlzLmdldElzb2xhdGlvbkxldmVsVGV4dCh0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCl9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3IgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IHhhY3RfYWJvcnQgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3IgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCB4YWN0X2Fib3J0IG9mZicpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIFNRTCBiYXRjaCByZXByZXNlbnRlZCBieSBbW1JlcXVlc3RdXS5cbiAgICogVGhlcmUgaXMgbm8gcGFyYW0gc3VwcG9ydCwgYW5kIHVubGlrZSBbW2V4ZWNTcWxdXSxcbiAgICogaXQgaXMgbm90IGxpa2VseSB0aGF0IFNRTCBTZXJ2ZXIgd2lsbCByZXVzZSB0aGUgZXhlY3V0aW9uIHBsYW4gaXQgZ2VuZXJhdGVzIGZvciB0aGUgU1FMLlxuICAgKlxuICAgKiBJbiBhbG1vc3QgYWxsIGNhc2VzLCBbW2V4ZWNTcWxdXSB3aWxsIGJlIGEgYmV0dGVyIGNob2ljZS5cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgQSBbW1JlcXVlc3RdXSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgZXhlY1NxbEJhdGNoKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLm1ha2VSZXF1ZXN0KHJlcXVlc3QsIFRZUEUuU1FMX0JBVENILCBuZXcgU3FsQmF0Y2hQYXlsb2FkKHJlcXVlc3Quc3FsVGV4dE9yUHJvY2VkdXJlISwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCksIHRoaXMuY29uZmlnLm9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgRXhlY3V0ZSB0aGUgU1FMIHJlcHJlc2VudGVkIGJ5IFtbUmVxdWVzdF1dLlxuICAgKlxuICAgKiBBcyBgc3BfZXhlY3V0ZXNxbGAgaXMgdXNlZCB0byBleGVjdXRlIHRoZSBTUUwsIGlmIHRoZSBzYW1lIFNRTCBpcyBleGVjdXRlZCBtdWx0aXBsZXMgdGltZXNcbiAgICogdXNpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIFNRTCBTZXJ2ZXIgcXVlcnkgb3B0aW1pemVyIGlzIGxpa2VseSB0byByZXVzZSB0aGUgZXhlY3V0aW9uIHBsYW4gaXQgZ2VuZXJhdGVzXG4gICAqIGZvciB0aGUgZmlyc3QgZXhlY3V0aW9uLiBUaGlzIG1heSBhbHNvIHJlc3VsdCBpbiBTUUwgc2VydmVyIHRyZWF0aW5nIHRoZSByZXF1ZXN0IGxpa2UgYSBzdG9yZWQgcHJvY2VkdXJlXG4gICAqIHdoaWNoIGNhbiByZXN1bHQgaW4gdGhlIFtbRXZlbnRfZG9uZUluUHJvY11dIG9yIFtbRXZlbnRfZG9uZVByb2NdXSBldmVudHMgYmVpbmcgZW1pdHRlZCBpbnN0ZWFkIG9mIHRoZVxuICAgKiBbW0V2ZW50X2RvbmVdXSBldmVudCB5b3UgbWlnaHQgZXhwZWN0LiBVc2luZyBbW2V4ZWNTcWxCYXRjaF1dIHdpbGwgcHJldmVudCB0aGlzIGZyb20gb2NjdXJyaW5nIGJ1dCBtYXkgaGF2ZSBhIG5lZ2F0aXZlIHBlcmZvcm1hbmNlIGltcGFjdC5cbiAgICpcbiAgICogQmV3YXJlIG9mIHRoZSB3YXkgdGhhdCBzY29waW5nIHJ1bGVzIGFwcGx5LCBhbmQgaG93IHRoZXkgbWF5IFthZmZlY3QgbG9jYWwgdGVtcCB0YWJsZXNdKGh0dHA6Ly93ZWJsb2dzLnNxbHRlYW0uY29tL21sYWRlbnAvYXJjaGl2ZS8yMDA2LzExLzAzLzE3MTk3LmFzcHgpXG4gICAqIElmIHlvdSdyZSBydW5uaW5nIGluIHRvIHNjb3BpbmcgaXNzdWVzLCB0aGVuIFtbZXhlY1NxbEJhdGNoXV0gbWF5IGJlIGEgYmV0dGVyIGNob2ljZS5cbiAgICogU2VlIGFsc28gW2lzc3VlICMyNF0oaHR0cHM6Ly9naXRodWIuY29tL3Bla2ltL3RlZGlvdXMvaXNzdWVzLzI0KVxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdCBBIFtbUmVxdWVzdF1dIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlcXVlc3QuXG4gICAqL1xuICBleGVjU3FsKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0cnkge1xuICAgICAgcmVxdWVzdC52YWxpZGF0ZVBhcmFtZXRlcnModGhpcy5kYXRhYmFzZUNvbGxhdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmVxdWVzdC5lcnJvciA9IGVycm9yO1xuXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5kZWJ1Zy5sb2coZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIHJlcXVlc3QuY2FsbGJhY2soZXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSA9IFtdO1xuXG4gICAgcGFyYW1ldGVycy5wdXNoKHtcbiAgICAgIHR5cGU6IFRZUEVTLk5WYXJDaGFyLFxuICAgICAgbmFtZTogJ3N0YXRlbWVudCcsXG4gICAgICB2YWx1ZTogcmVxdWVzdC5zcWxUZXh0T3JQcm9jZWR1cmUsXG4gICAgICBvdXRwdXQ6IGZhbHNlLFxuICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgIHNjYWxlOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIGlmIChyZXF1ZXN0LnBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBwYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgICB0eXBlOiBUWVBFUy5OVmFyQ2hhcixcbiAgICAgICAgbmFtZTogJ3BhcmFtcycsXG4gICAgICAgIHZhbHVlOiByZXF1ZXN0Lm1ha2VQYXJhbXNQYXJhbWV0ZXIocmVxdWVzdC5wYXJhbWV0ZXJzKSxcbiAgICAgICAgb3V0cHV0OiBmYWxzZSxcbiAgICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICBzY2FsZTogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgcGFyYW1ldGVycy5wdXNoKC4uLnJlcXVlc3QucGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBUWVBFLlJQQ19SRVFVRVNULCBuZXcgUnBjUmVxdWVzdFBheWxvYWQoUHJvY2VkdXJlcy5TcF9FeGVjdXRlU3FsLCBwYXJhbWV0ZXJzLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucywgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQnVsa0xvYWQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB0YWJsZSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgdG8gYnVsay1pbnNlcnQgaW50by5cbiAgICogQHBhcmFtIG9wdGlvbnMgQSBzZXQgb2YgYnVsayBsb2FkIG9wdGlvbnMuXG4gICAqL1xuICBuZXdCdWxrTG9hZCh0YWJsZTogc3RyaW5nLCBjYWxsYmFjazogQnVsa0xvYWRDYWxsYmFjayk6IEJ1bGtMb2FkXG4gIG5ld0J1bGtMb2FkKHRhYmxlOiBzdHJpbmcsIG9wdGlvbnM6IEJ1bGtMb2FkT3B0aW9ucywgY2FsbGJhY2s6IEJ1bGtMb2FkQ2FsbGJhY2spOiBCdWxrTG9hZFxuICBuZXdCdWxrTG9hZCh0YWJsZTogc3RyaW5nLCBjYWxsYmFja09yT3B0aW9uczogQnVsa0xvYWRPcHRpb25zIHwgQnVsa0xvYWRDYWxsYmFjaywgY2FsbGJhY2s/OiBCdWxrTG9hZENhbGxiYWNrKSB7XG4gICAgbGV0IG9wdGlvbnM6IEJ1bGtMb2FkT3B0aW9ucztcblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWxsYmFjayA9IGNhbGxiYWNrT3JPcHRpb25zIGFzIEJ1bGtMb2FkQ2FsbGJhY2s7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMgPSBjYWxsYmFja09yT3B0aW9ucyBhcyBCdWxrTG9hZE9wdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJvcHRpb25zXCIgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBCdWxrTG9hZCh0YWJsZSwgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbiwgdGhpcy5jb25maWcub3B0aW9ucywgb3B0aW9ucywgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBbW0J1bGtMb2FkXV0uXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIFdlIHdhbnQgdG8gcGVyZm9ybSBhIGJ1bGsgbG9hZCBpbnRvIGEgdGFibGUgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAgICogLy8gQ1JFQVRFIFRBQkxFIGVtcGxveWVlcyAoZmlyc3RfbmFtZSBudmFyY2hhcigyNTUpLCBsYXN0X25hbWUgbnZhcmNoYXIoMjU1KSwgZGF5X29mX2JpcnRoIGRhdGUpO1xuICAgKlxuICAgKiBjb25zdCBidWxrTG9hZCA9IGNvbm5lY3Rpb24ubmV3QnVsa0xvYWQoJ2VtcGxveWVlcycsIChlcnIsIHJvd0NvdW50KSA9PiB7XG4gICAqICAgLy8gLi4uXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBGaXJzdCwgd2UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjb2x1bW5zIHRoYXQgd2Ugd2FudCB0byB3cml0ZSB0byxcbiAgICogLy8gYW5kIHRoZWlyIGRlZmluaXRpb25zLiBUaGVzZSBkZWZpbml0aW9ucyBtdXN0IG1hdGNoIHRoZSBhY3R1YWwgdGFibGUsXG4gICAqIC8vIG90aGVyd2lzZSB0aGUgYnVsayBsb2FkIHdpbGwgZmFpbC5cbiAgICogYnVsa0xvYWQuYWRkQ29sdW1uKCdmaXJzdF9uYW1lJywgVFlQRVMuTlZhcmNoYXIsIHsgbnVsbGFibGU6IGZhbHNlIH0pO1xuICAgKiBidWxrTG9hZC5hZGRDb2x1bW4oJ2xhc3RfbmFtZScsIFRZUEVTLk5WYXJjaGFyLCB7IG51bGxhYmxlOiBmYWxzZSB9KTtcbiAgICogYnVsa0xvYWQuYWRkQ29sdW1uKCdkYXRlX29mX2JpcnRoJywgVFlQRVMuRGF0ZSwgeyBudWxsYWJsZTogZmFsc2UgfSk7XG4gICAqXG4gICAqIC8vIEV4ZWN1dGUgYSBidWxrIGxvYWQgd2l0aCBhIHByZWRlZmluZWQgbGlzdCBvZiByb3dzLlxuICAgKiAvL1xuICAgKiAvLyBOb3RlIHRoYXQgdGhlc2Ugcm93cyBhcmUgaGVsZCBpbiBtZW1vcnkgdW50aWwgdGhlXG4gICAqIC8vIGJ1bGsgbG9hZCB3YXMgcGVyZm9ybWVkLCBzbyBpZiB5b3UgbmVlZCB0byB3cml0ZSBhIGxhcmdlXG4gICAqIC8vIG51bWJlciBvZiByb3dzIChlLmcuIGJ5IHJlYWRpbmcgZnJvbSBhIENTViBmaWxlKSxcbiAgICogLy8gcGFzc2luZyBhbiBgQXN5bmNJdGVyYWJsZWAgaXMgYWR2aXNhYmxlIHRvIGtlZXAgbWVtb3J5IHVzYWdlIGxvdy5cbiAgICogY29ubmVjdGlvbi5leGVjQnVsa0xvYWQoYnVsa0xvYWQsIFtcbiAgICogICB7ICdmaXJzdF9uYW1lJzogJ1N0ZXZlJywgJ2xhc3RfbmFtZSc6ICdKb2JzJywgJ2RheV9vZl9iaXJ0aCc6IG5ldyBEYXRlKCcwMi0yNC0xOTU1JykgfSxcbiAgICogICB7ICdmaXJzdF9uYW1lJzogJ0JpbGwnLCAnbGFzdF9uYW1lJzogJ0dhdGVzJywgJ2RheV9vZl9iaXJ0aCc6IG5ldyBEYXRlKCcxMC0yOC0xOTU1JykgfVxuICAgKiBdKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBidWxrTG9hZCBBIHByZXZpb3VzbHkgY3JlYXRlZCBbW0J1bGtMb2FkXV0uXG4gICAqIEBwYXJhbSByb3dzIEEgW1tJdGVyYWJsZV1dIG9yIFtbQXN5bmNJdGVyYWJsZV1dIHRoYXQgY29udGFpbnMgdGhlIHJvd3MgdGhhdCBzaG91bGQgYmUgYnVsayBsb2FkZWQuXG4gICAqL1xuICBleGVjQnVsa0xvYWQoYnVsa0xvYWQ6IEJ1bGtMb2FkLCByb3dzOiBBc3luY0l0ZXJhYmxlPHVua25vd25bXSB8IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106IHVua25vd24gfT4gfCBJdGVyYWJsZTx1bmtub3duW10gfCB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiB1bmtub3duIH0+KTogdm9pZFxuXG4gIGV4ZWNCdWxrTG9hZChidWxrTG9hZDogQnVsa0xvYWQsIHJvd3M/OiBBc3luY0l0ZXJhYmxlPHVua25vd25bXSB8IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106IHVua25vd24gfT4gfCBJdGVyYWJsZTx1bmtub3duW10gfCB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiB1bmtub3duIH0+KSB7XG4gICAgYnVsa0xvYWQuZXhlY3V0aW9uU3RhcnRlZCA9IHRydWU7XG5cbiAgICBpZiAocm93cykge1xuICAgICAgaWYgKGJ1bGtMb2FkLnN0cmVhbWluZ01vZGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbi5leGVjQnVsa0xvYWQgY2FuJ3QgYmUgY2FsbGVkIHdpdGggYSBCdWxrTG9hZCB0aGF0IHdhcyBwdXQgaW4gc3RyZWFtaW5nIG1vZGUuXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnVsa0xvYWQuZmlyc3RSb3dXcml0dGVuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24uZXhlY0J1bGtMb2FkIGNhbid0IGJlIGNhbGxlZCB3aXRoIGEgQnVsa0xvYWQgdGhhdCBhbHJlYWR5IGhhcyByb3dzIHdyaXR0ZW4gdG8gaXQuXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByb3dTdHJlYW0gPSBSZWFkYWJsZS5mcm9tKHJvd3MpO1xuXG4gICAgICAvLyBEZXN0cm95IHRoZSBwYWNrZXQgdHJhbnNmb3JtIGlmIGFuIGVycm9yIGhhcHBlbnMgaW4gdGhlIHJvdyBzdHJlYW0sXG4gICAgICAvLyBlLmcuIGlmIGFuIGVycm9yIGlzIHRocm93biBmcm9tIHdpdGhpbiBhIGdlbmVyYXRvciBvciBzdHJlYW0uXG4gICAgICByb3dTdHJlYW0ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICBidWxrTG9hZC5yb3dUb1BhY2tldFRyYW5zZm9ybS5kZXN0cm95KGVycik7XG4gICAgICB9KTtcblxuICAgICAgLy8gRGVzdHJveSB0aGUgcm93IHN0cmVhbSBpZiBhbiBlcnJvciBoYXBwZW5zIGluIHRoZSBwYWNrZXQgdHJhbnNmb3JtLFxuICAgICAgLy8gZS5nLiBpZiB0aGUgYnVsayBsb2FkIGlzIGNhbmNlbGxlZC5cbiAgICAgIGJ1bGtMb2FkLnJvd1RvUGFja2V0VHJhbnNmb3JtLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgcm93U3RyZWFtLmRlc3Ryb3koZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICByb3dTdHJlYW0ucGlwZShidWxrTG9hZC5yb3dUb1BhY2tldFRyYW5zZm9ybSk7XG4gICAgfSBlbHNlIGlmICghYnVsa0xvYWQuc3RyZWFtaW5nTW9kZSkge1xuICAgICAgLy8gSWYgdGhlIGJ1bGtsb2FkIHdhcyBub3QgcHV0IGludG8gc3RyZWFtaW5nIG1vZGUgYnkgdGhlIHVzZXIsXG4gICAgICAvLyB3ZSBlbmQgdGhlIHJvd1RvUGFja2V0VHJhbnNmb3JtIGhlcmUgZm9yIHRoZW0uXG4gICAgICAvL1xuICAgICAgLy8gSWYgaXQgd2FzIHB1dCBpbnRvIHN0cmVhbWluZyBtb2RlLCBpdCdzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHlcbiAgICAgIC8vIHRvIGVuZCB0aGUgc3RyZWFtLlxuICAgICAgYnVsa0xvYWQucm93VG9QYWNrZXRUcmFuc2Zvcm0uZW5kKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICByZXF1ZXN0LmNhbmNlbCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBwYXlsb2FkID0gbmV3IEJ1bGtMb2FkUGF5bG9hZChidWxrTG9hZCk7XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoYnVsa0xvYWQuZ2V0QnVsa0luc2VydFNxbCgpLCAoZXJyb3I6IChFcnJvciAmIHsgY29kZT86IHN0cmluZyB9KSB8IG51bGwgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgIGJ1bGtMb2FkLnJlbW92ZUxpc3RlbmVyKCdjYW5jZWwnLCBvbkNhbmNlbCk7XG5cbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ1VOS05PV04nKSB7XG4gICAgICAgICAgZXJyb3IubWVzc2FnZSArPSAnIFRoaXMgaXMgbGlrZWx5IGJlY2F1c2UgdGhlIHNjaGVtYSBvZiB0aGUgQnVsa0xvYWQgZG9lcyBub3QgbWF0Y2ggdGhlIHNjaGVtYSBvZiB0aGUgdGFibGUgeW91IGFyZSBhdHRlbXB0aW5nIHRvIGluc2VydCBpbnRvLic7XG4gICAgICAgIH1cbiAgICAgICAgYnVsa0xvYWQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgYnVsa0xvYWQuY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubWFrZVJlcXVlc3QoYnVsa0xvYWQsIFRZUEUuQlVMS19MT0FELCBwYXlsb2FkKTtcbiAgICB9KTtcblxuICAgIGJ1bGtMb2FkLm9uY2UoJ2NhbmNlbCcsIG9uQ2FuY2VsKTtcblxuICAgIHRoaXMuZXhlY1NxbEJhdGNoKHJlcXVlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgdGhlIFNRTCByZXByZXNlbnRlZCBieSB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogVGhlIHJlcXVlc3QgY2FuIHRoZW4gYmUgdXNlZCBpbiBzdWJzZXF1ZW50IGNhbGxzIHRvXG4gICAqIFtbZXhlY3V0ZV1dIGFuZCBbW3VucHJlcGFyZV1dXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IEEgW1tSZXF1ZXN0XV0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVxdWVzdC5cbiAgICogICBQYXJhbWV0ZXJzIG9ubHkgcmVxdWlyZSBhIG5hbWUgYW5kIHR5cGUuIFBhcmFtZXRlciB2YWx1ZXMgYXJlIGlnbm9yZWQuXG4gICAqL1xuICBwcmVwYXJlKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSA9IFtdO1xuXG4gICAgcGFyYW1ldGVycy5wdXNoKHtcbiAgICAgIHR5cGU6IFRZUEVTLkludCxcbiAgICAgIG5hbWU6ICdoYW5kbGUnLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIG91dHB1dDogdHJ1ZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICBzY2FsZTogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICBwYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgdHlwZTogVFlQRVMuTlZhckNoYXIsXG4gICAgICBuYW1lOiAncGFyYW1zJyxcbiAgICAgIHZhbHVlOiByZXF1ZXN0LnBhcmFtZXRlcnMubGVuZ3RoID8gcmVxdWVzdC5tYWtlUGFyYW1zUGFyYW1ldGVyKHJlcXVlc3QucGFyYW1ldGVycykgOiBudWxsLFxuICAgICAgb3V0cHV0OiBmYWxzZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICBzY2FsZTogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICBwYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgdHlwZTogVFlQRVMuTlZhckNoYXIsXG4gICAgICBuYW1lOiAnc3RtdCcsXG4gICAgICB2YWx1ZTogcmVxdWVzdC5zcWxUZXh0T3JQcm9jZWR1cmUsXG4gICAgICBvdXRwdXQ6IGZhbHNlLFxuICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgIHNjYWxlOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHJlcXVlc3QucHJlcGFyaW5nID0gdHJ1ZTtcblxuICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gY2xlYW4gdXAgdGhpcyBldmVudCBoYW5kbGVyLCBvdGhlcndpc2UgdGhpcyBsZWFrcyBtZW1vcnlcbiAgICByZXF1ZXN0Lm9uKCdyZXR1cm5WYWx1ZScsIChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmIChuYW1lID09PSAnaGFuZGxlJykge1xuICAgICAgICByZXF1ZXN0LmhhbmRsZSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdC5lcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IoYFRlZGlvdXMgPiBVbmV4cGVjdGVkIG91dHB1dCBwYXJhbWV0ZXIgJHtuYW1lfSBmcm9tIHNwX3ByZXBhcmVgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKFByb2NlZHVyZXMuU3BfUHJlcGFyZSwgcGFyYW1ldGVycywgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCksIHRoaXMuY29uZmlnLm9wdGlvbnMsIHRoaXMuZGF0YWJhc2VDb2xsYXRpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlIHRoZSBTUUwgU2VydmVyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBwcmV2aW91c2x5IHByZXBhcmVkIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IEEgW1tSZXF1ZXN0XV0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVxdWVzdC5cbiAgICogICBQYXJhbWV0ZXJzIG9ubHkgcmVxdWlyZSBhIG5hbWUgYW5kIHR5cGUuXG4gICAqICAgUGFyYW1ldGVyIHZhbHVlcyBhcmUgaWdub3JlZC5cbiAgICovXG4gIHVucHJlcGFyZShyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogUGFyYW1ldGVyW10gPSBbXTtcblxuICAgIHBhcmFtZXRlcnMucHVzaCh7XG4gICAgICB0eXBlOiBUWVBFUy5JbnQsXG4gICAgICBuYW1lOiAnaGFuZGxlJyxcbiAgICAgIC8vIFRPRE86IEFib3J0IGlmIGByZXF1ZXN0LmhhbmRsZWAgaXMgbm90IHNldFxuICAgICAgdmFsdWU6IHJlcXVlc3QuaGFuZGxlLFxuICAgICAgb3V0cHV0OiBmYWxzZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICBzY2FsZTogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLm1ha2VSZXF1ZXN0KHJlcXVlc3QsIFRZUEUuUlBDX1JFUVVFU1QsIG5ldyBScGNSZXF1ZXN0UGF5bG9hZChQcm9jZWR1cmVzLlNwX1VucHJlcGFyZSwgcGFyYW1ldGVycywgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCksIHRoaXMuY29uZmlnLm9wdGlvbnMsIHRoaXMuZGF0YWJhc2VDb2xsYXRpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHByZXZpb3VzbHkgcHJlcGFyZWQgU1FMLCB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgQSBwcmV2aW91c2x5IHByZXBhcmVkIFtbUmVxdWVzdF1dLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyAgQW4gb2JqZWN0IHdob3NlIG5hbWVzIGNvcnJlc3BvbmQgdG8gdGhlIG5hbWVzIG9mXG4gICAqICAgcGFyYW1ldGVycyB0aGF0IHdlcmUgYWRkZWQgdG8gdGhlIFtbUmVxdWVzdF1dIGJlZm9yZSBpdCB3YXMgcHJlcGFyZWQuXG4gICAqICAgVGhlIG9iamVjdCdzIHZhbHVlcyBhcmUgcGFzc2VkIGFzIHRoZSBwYXJhbWV0ZXJzJyB2YWx1ZXMgd2hlbiB0aGVcbiAgICogICByZXF1ZXN0IGlzIGV4ZWN1dGVkLlxuICAgKi9cbiAgZXhlY3V0ZShyZXF1ZXN0OiBSZXF1ZXN0LCBwYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pIHtcbiAgICBjb25zdCBleGVjdXRlUGFyYW1ldGVyczogUGFyYW1ldGVyW10gPSBbXTtcblxuICAgIGV4ZWN1dGVQYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgdHlwZTogVFlQRVMuSW50LFxuICAgICAgbmFtZTogJycsXG4gICAgICAvLyBUT0RPOiBBYm9ydCBpZiBgcmVxdWVzdC5oYW5kbGVgIGlzIG5vdCBzZXRcbiAgICAgIHZhbHVlOiByZXF1ZXN0LmhhbmRsZSxcbiAgICAgIG91dHB1dDogZmFsc2UsXG4gICAgICBsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgc2NhbGU6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByZXF1ZXN0LnBhcmFtZXRlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyID0gcmVxdWVzdC5wYXJhbWV0ZXJzW2ldO1xuXG4gICAgICAgIGV4ZWN1dGVQYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgICAgIC4uLnBhcmFtZXRlcixcbiAgICAgICAgICB2YWx1ZTogcGFyYW1ldGVyLnR5cGUudmFsaWRhdGUocGFyYW1ldGVycyA/IHBhcmFtZXRlcnNbcGFyYW1ldGVyLm5hbWVdIDogbnVsbCwgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbilcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmVxdWVzdC5lcnJvciA9IGVycm9yO1xuXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5kZWJ1Zy5sb2coZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIHJlcXVlc3QuY2FsbGJhY2soZXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1ha2VSZXF1ZXN0KHJlcXVlc3QsIFRZUEUuUlBDX1JFUVVFU1QsIG5ldyBScGNSZXF1ZXN0UGF5bG9hZChQcm9jZWR1cmVzLlNwX0V4ZWN1dGUsIGV4ZWN1dGVQYXJhbWV0ZXJzLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucywgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgYSBzdG9yZWQgcHJvY2VkdXJlIHJlcHJlc2VudGVkIGJ5IFtbUmVxdWVzdF1dLlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdCBBIFtbUmVxdWVzdF1dIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlcXVlc3QuXG4gICAqL1xuICBjYWxsUHJvY2VkdXJlKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0cnkge1xuICAgICAgcmVxdWVzdC52YWxpZGF0ZVBhcmFtZXRlcnModGhpcy5kYXRhYmFzZUNvbGxhdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmVxdWVzdC5lcnJvciA9IGVycm9yO1xuXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5kZWJ1Zy5sb2coZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIHJlcXVlc3QuY2FsbGJhY2soZXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1ha2VSZXF1ZXN0KHJlcXVlc3QsIFRZUEUuUlBDX1JFUVVFU1QsIG5ldyBScGNSZXF1ZXN0UGF5bG9hZChyZXF1ZXN0LnNxbFRleHRPclByb2NlZHVyZSEsIHJlcXVlc3QucGFyYW1ldGVycywgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCksIHRoaXMuY29uZmlnLm9wdGlvbnMsIHRoaXMuZGF0YWJhc2VDb2xsYXRpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICogQHBhcmFtIG5hbWUgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdHJhbnNhY3Rpb24uXG4gICAqICAgT3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byBhbiBlbXB0eSBzdHJpbmcuIFJlcXVpcmVkIHdoZW4gYGlzb2xhdGlvbkxldmVsYFxuICAgKiAgIGlzIHByZXNlbnQuXG4gICAqIEBwYXJhbSBpc29sYXRpb25MZXZlbCBUaGUgaXNvbGF0aW9uIGxldmVsIHRoYXQgdGhlIHRyYW5zYWN0aW9uIGlzIHRvIGJlIHJ1biB3aXRoLlxuICAgKlxuICAgKiAgIFRoZSBpc29sYXRpb24gbGV2ZWxzIGFyZSBhdmFpbGFibGUgZnJvbSBgcmVxdWlyZSgndGVkaW91cycpLklTT0xBVElPTl9MRVZFTGAuXG4gICAqICAgKiBgUkVBRF9VTkNPTU1JVFRFRGBcbiAgICogICAqIGBSRUFEX0NPTU1JVFRFRGBcbiAgICogICAqIGBSRVBFQVRBQkxFX1JFQURgXG4gICAqICAgKiBgU0VSSUFMSVpBQkxFYFxuICAgKiAgICogYFNOQVBTSE9UYFxuICAgKlxuICAgKiAgIE9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gdGhlIENvbm5lY3Rpb24ncyBpc29sYXRpb24gbGV2ZWwuXG4gICAqL1xuICBiZWdpblRyYW5zYWN0aW9uKGNhbGxiYWNrOiBCZWdpblRyYW5zYWN0aW9uQ2FsbGJhY2ssIG5hbWUgPSAnJywgaXNvbGF0aW9uTGV2ZWwgPSB0aGlzLmNvbmZpZy5vcHRpb25zLmlzb2xhdGlvbkxldmVsKSB7XG4gICAgYXNzZXJ0VmFsaWRJc29sYXRpb25MZXZlbChpc29sYXRpb25MZXZlbCwgJ2lzb2xhdGlvbkxldmVsJyk7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihuYW1lLCBpc29sYXRpb25MZXZlbCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy50ZHNWZXJzaW9uIDwgJzdfMicpIHtcbiAgICAgIHJldHVybiB0aGlzLmV4ZWNTcWxCYXRjaChuZXcgUmVxdWVzdCgnU0VUIFRSQU5TQUNUSU9OIElTT0xBVElPTiBMRVZFTCAnICsgKHRyYW5zYWN0aW9uLmlzb2xhdGlvbkxldmVsVG9UU1FMKCkpICsgJztCRUdJTiBUUkFOICcgKyB0cmFuc2FjdGlvbi5uYW1lLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aCsrO1xuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRlcHRoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5pblRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1bmRlZmluZWQsIChlcnIpID0+IHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBUWVBFLlRSQU5TQUNUSU9OX01BTkFHRVIsIHRyYW5zYWN0aW9uLmJlZ2luUGF5bG9hZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbW1pdCBhIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBUaGVyZSBzaG91bGQgYmUgYW4gYWN0aXZlIHRyYW5zYWN0aW9uIC0gdGhhdCBpcywgW1tiZWdpblRyYW5zYWN0aW9uXV1cbiAgICogc2hvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqIEBwYXJhbSBuYW1lIEEgc3RyaW5nIHJlcHJlc2VudGluZyBhIG5hbWUgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHRyYW5zYWN0aW9uLlxuICAgKiAgIE9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gYW4gZW1wdHkgc3RyaW5nLiBSZXF1aXJlZCB3aGVuIGBpc29sYXRpb25MZXZlbGBpcyBwcmVzZW50LlxuICAgKi9cbiAgY29tbWl0VHJhbnNhY3Rpb24oY2FsbGJhY2s6IENvbW1pdFRyYW5zYWN0aW9uQ2FsbGJhY2ssIG5hbWUgPSAnJykge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY1NxbEJhdGNoKG5ldyBSZXF1ZXN0KCdDT01NSVQgVFJBTiAnICsgdHJhbnNhY3Rpb24ubmFtZSwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGVwdGgtLTtcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25EZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVuZGVmaW5lZCwgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzLm1ha2VSZXF1ZXN0KHJlcXVlc3QsIFRZUEUuVFJBTlNBQ1RJT05fTUFOQUdFUiwgdHJhbnNhY3Rpb24uY29tbWl0UGF5bG9hZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvbGxiYWNrIGEgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRoZXJlIHNob3VsZCBiZSBhbiBhY3RpdmUgdHJhbnNhY3Rpb24gLSB0aGF0IGlzLCBbW2JlZ2luVHJhbnNhY3Rpb25dXVxuICAgKiBzaG91bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICogQHBhcmFtIG5hbWUgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdHJhbnNhY3Rpb24uXG4gICAqICAgT3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byBhbiBlbXB0eSBzdHJpbmcuXG4gICAqICAgUmVxdWlyZWQgd2hlbiBgaXNvbGF0aW9uTGV2ZWxgIGlzIHByZXNlbnQuXG4gICAqL1xuICByb2xsYmFja1RyYW5zYWN0aW9uKGNhbGxiYWNrOiBSb2xsYmFja1RyYW5zYWN0aW9uQ2FsbGJhY2ssIG5hbWUgPSAnJykge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY1NxbEJhdGNoKG5ldyBSZXF1ZXN0KCdST0xMQkFDSyBUUkFOICcgKyB0cmFuc2FjdGlvbi5uYW1lLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aC0tO1xuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRlcHRoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVuZGVmaW5lZCwgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzLm1ha2VSZXF1ZXN0KHJlcXVlc3QsIFRZUEUuVFJBTlNBQ1RJT05fTUFOQUdFUiwgdHJhbnNhY3Rpb24ucm9sbGJhY2tQYXlsb2FkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpKSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgc2F2ZXBvaW50IHdpdGhpbiBhIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBUaGVyZSBzaG91bGQgYmUgYW4gYWN0aXZlIHRyYW5zYWN0aW9uIC0gdGhhdCBpcywgW1tiZWdpblRyYW5zYWN0aW9uXV1cbiAgICogc2hvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqIEBwYXJhbSBuYW1lIEEgc3RyaW5nIHJlcHJlc2VudGluZyBhIG5hbWUgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHRyYW5zYWN0aW9uLlxcXG4gICAqICAgT3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byBhbiBlbXB0eSBzdHJpbmcuXG4gICAqICAgUmVxdWlyZWQgd2hlbiBgaXNvbGF0aW9uTGV2ZWxgIGlzIHByZXNlbnQuXG4gICAqL1xuICBzYXZlVHJhbnNhY3Rpb24oY2FsbGJhY2s6IFNhdmVUcmFuc2FjdGlvbkNhbGxiYWNrLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihuYW1lKTtcbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy50ZHNWZXJzaW9uIDwgJzdfMicpIHtcbiAgICAgIHJldHVybiB0aGlzLmV4ZWNTcWxCYXRjaChuZXcgUmVxdWVzdCgnU0FWRSBUUkFOICcgKyB0cmFuc2FjdGlvbi5uYW1lLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aCsrO1xuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodW5kZWZpbmVkLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5UUkFOU0FDVElPTl9NQU5BR0VSLCB0cmFuc2FjdGlvbi5zYXZlUGF5bG9hZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgZ2l2ZW4gY2FsbGJhY2sgYWZ0ZXIgc3RhcnRpbmcgYSB0cmFuc2FjdGlvbiwgYW5kIGNvbW1pdCBvclxuICAgKiByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gYWZ0ZXJ3YXJkcy5cbiAgICpcbiAgICogVGhpcyBpcyBhIGhlbHBlciB0aGF0IGVtcGxveXMgW1tiZWdpblRyYW5zYWN0aW9uXV0sIFtbY29tbWl0VHJhbnNhY3Rpb25dXSxcbiAgICogW1tyb2xsYmFja1RyYW5zYWN0aW9uXV0sIGFuZCBbW3NhdmVUcmFuc2FjdGlvbl1dIHRvIGdyZWF0bHkgc2ltcGxpZnkgdGhlXG4gICAqIHVzZSBvZiBkYXRhYmFzZSB0cmFuc2FjdGlvbnMgYW5kIGF1dG9tYXRpY2FsbHkgaGFuZGxlIHRyYW5zYWN0aW9uIG5lc3RpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYlxuICAgKiBAcGFyYW0gaXNvbGF0aW9uTGV2ZWxcbiAgICogICBUaGUgaXNvbGF0aW9uIGxldmVsIHRoYXQgdGhlIHRyYW5zYWN0aW9uIGlzIHRvIGJlIHJ1biB3aXRoLlxuICAgKlxuICAgKiAgIFRoZSBpc29sYXRpb24gbGV2ZWxzIGFyZSBhdmFpbGFibGUgZnJvbSBgcmVxdWlyZSgndGVkaW91cycpLklTT0xBVElPTl9MRVZFTGAuXG4gICAqICAgKiBgUkVBRF9VTkNPTU1JVFRFRGBcbiAgICogICAqIGBSRUFEX0NPTU1JVFRFRGBcbiAgICogICAqIGBSRVBFQVRBQkxFX1JFQURgXG4gICAqICAgKiBgU0VSSUFMSVpBQkxFYFxuICAgKiAgICogYFNOQVBTSE9UYFxuICAgKlxuICAgKiAgIE9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gdGhlIENvbm5lY3Rpb24ncyBpc29sYXRpb24gbGV2ZWwuXG4gICAqL1xuICB0cmFuc2FjdGlvbihjYjogKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCB0eERvbmU/OiA8VCBleHRlbmRzIFRyYW5zYWN0aW9uRG9uZUNhbGxiYWNrPihlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgZG9uZTogVCwgLi4uYXJnczogQ2FsbGJhY2tQYXJhbWV0ZXJzPFQ+KSA9PiB2b2lkKSA9PiB2b2lkLCBpc29sYXRpb25MZXZlbD86IHR5cGVvZiBJU09MQVRJT05fTEVWRUxba2V5b2YgdHlwZW9mIElTT0xBVElPTl9MRVZFTF0pIHtcbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgY2JgIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZVNhdmVwb2ludCA9IHRoaXMuaW5UcmFuc2FjdGlvbjtcbiAgICBjb25zdCBuYW1lID0gJ190ZWRpb3VzXycgKyAoY3J5cHRvLnJhbmRvbUJ5dGVzKDEwKS50b1N0cmluZygnaGV4JykpO1xuICAgIGNvbnN0IHR4RG9uZTogPFQgZXh0ZW5kcyBUcmFuc2FjdGlvbkRvbmVDYWxsYmFjaz4oZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIGRvbmU6IFQsIC4uLmFyZ3M6IENhbGxiYWNrUGFyYW1ldGVyczxUPikgPT4gdm9pZCA9IChlcnIsIGRvbmUsIC4uLmFyZ3MpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5UcmFuc2FjdGlvbiAmJiB0aGlzLnN0YXRlID09PSB0aGlzLlNUQVRFLkxPR0dFRF9JTikge1xuICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbigodHhFcnIpID0+IHtcbiAgICAgICAgICAgIGRvbmUodHhFcnIgfHwgZXJyLCAuLi5hcmdzKTtcbiAgICAgICAgICB9LCBuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb25lKGVyciwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodXNlU2F2ZXBvaW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aC0tO1xuICAgICAgICB9XG4gICAgICAgIGRvbmUobnVsbCwgLi4uYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbW1pdFRyYW5zYWN0aW9uKCh0eEVycikgPT4ge1xuICAgICAgICAgIGRvbmUodHhFcnIsIC4uLmFyZ3MpO1xuICAgICAgICB9LCBuYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHVzZVNhdmVwb2ludCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2F2ZVRyYW5zYWN0aW9uKChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzb2xhdGlvbkxldmVsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZXhlY1NxbEJhdGNoKG5ldyBSZXF1ZXN0KCdTRVQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsICcgKyB0aGlzLmdldElzb2xhdGlvbkxldmVsVGV4dChpc29sYXRpb25MZXZlbCksIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjYihlcnIsIHR4RG9uZSk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjYihudWxsLCB0eERvbmUpO1xuICAgICAgICB9XG4gICAgICB9LCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYmVnaW5UcmFuc2FjdGlvbigoZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYihudWxsLCB0eERvbmUpO1xuICAgICAgfSwgbmFtZSwgaXNvbGF0aW9uTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWFrZVJlcXVlc3QocmVxdWVzdDogUmVxdWVzdCB8IEJ1bGtMb2FkLCBwYWNrZXRUeXBlOiBudW1iZXIsIHBheWxvYWQ6IChJdGVyYWJsZTxCdWZmZXI+IHwgQXN5bmNJdGVyYWJsZTxCdWZmZXI+KSAmIHsgdG9TdHJpbmc6IChpbmRlbnQ/OiBzdHJpbmcpID0+IHN0cmluZyB9KSB7XG4gICAgLy8gQ2xlYXIgYW55IGVycm9yIGxlZnQgb3ZlciBmcm9tIGEgcHJldmlvdXMgZXhlY3V0aW9uIG9mIHRoaXMgcmVxdWVzdCxcbiAgICAvLyBldmVuIGlmIHRoZSByZXF1ZXN0IGlzIHJlamVjdGVkIGJlZm9yZSBiZWluZyBzZW50LlxuICAgIHJlcXVlc3QuZXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gdGhpcy5TVEFURS5MT0dHRURfSU4pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnUmVxdWVzdHMgY2FuIG9ubHkgYmUgbWFkZSBpbiB0aGUgJyArIHRoaXMuU1RBVEUuTE9HR0VEX0lOLm5hbWUgKyAnIHN0YXRlLCBub3QgdGhlICcgKyB0aGlzLnN0YXRlLm5hbWUgKyAnIHN0YXRlJztcbiAgICAgIHRoaXMuZGVidWcubG9nKG1lc3NhZ2UpO1xuICAgICAgcmVxdWVzdC5jYWxsYmFjayhuZXcgUmVxdWVzdEVycm9yKG1lc3NhZ2UsICdFSU5WQUxJRFNUQVRFJykpO1xuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHJlcXVlc3QuY2FsbGJhY2sobmV3IFJlcXVlc3RFcnJvcignQ2FuY2VsZWQuJywgJ0VDQU5DRUwnKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhY2tldFR5cGUgPT09IFRZUEUuU1FMX0JBVENIKSB7XG4gICAgICAgIHRoaXMuaXNTcWxCYXRjaCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzU3FsQmF0Y2ggPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgIHRoaXMuYXR0ZW50aW9uU2VudCA9IGZhbHNlO1xuICAgICAgcmVxdWVzdC5jb25uZWN0aW9uISA9IHRoaXM7XG4gICAgICByZXF1ZXN0LnJvd0NvdW50ISA9IDA7XG4gICAgICByZXF1ZXN0LnJvd3MhID0gW107XG4gICAgICByZXF1ZXN0LnJzdCEgPSBbXTtcblxuICAgICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIHBheWxvYWRTdHJlYW0udW5waXBlKG1lc3NhZ2UpO1xuICAgICAgICBwYXlsb2FkU3RyZWFtLmRlc3Ryb3koKTtcblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvciBtaWdodCBhbHJlYWR5IGJlIHNldCwgZS5nLiBpZiB0aGUgcGF5bG9hZFxuICAgICAgICAvLyBzdHJlYW0gZXJyb3JlZCBiZWZvcmUgdGhlIGNhbmNlbGxhdGlvbi5cbiAgICAgICAgcmVxdWVzdC5lcnJvciA/Pz0gbmV3IFJlcXVlc3RFcnJvcignQ2FuY2VsZWQuJywgJ0VDQU5DRUwnKTtcblxuICAgICAgICAvLyBzZXQgdGhlIGlnbm9yZSBiaXQgYW5kIGVuZCB0aGUgbWVzc2FnZS5cbiAgICAgICAgbWVzc2FnZS5pZ25vcmUgPSB0cnVlO1xuICAgICAgICBtZXNzYWdlLmVuZCgpO1xuXG4gICAgICAgIC8vIFRoZSBzZXJ2ZXIgcmVzcG9uZHMgdG8gdGhlIGlnbm9yZWQgbWVzc2FnZSBsaWtlIHRvIGFueSBvdGhlclxuICAgICAgICAvLyByZXF1ZXN0IG1lc3NhZ2UuIElmIHRoYXQgcmVzcG9uc2UgbmV2ZXIgYXJyaXZlcyAoZS5nLiBiZWNhdXNlXG4gICAgICAgIC8vIHRoZSBzZXJ2ZXIgaGFzIGJlY29tZSB1bnJlc3BvbnNpdmUpLCB0aGUgY2FuY2VsIHRpbWVyIGVuc3VyZXNcbiAgICAgICAgLy8gdGhlIGNhbmNlbGVkIHJlcXVlc3Qgc3RpbGwgY29tcGxldGVzLlxuICAgICAgICB0aGlzLmNyZWF0ZUNhbmNlbFRpbWVyKCk7XG5cbiAgICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0ICYmIHJlcXVlc3QucGF1c2VkKSB7XG4gICAgICAgICAgLy8gcmVzdW1lIHRoZSByZXF1ZXN0IGlmIGl0IHdhcyBwYXVzZWQgc28gd2UgY2FuIHJlYWQgdGhlIHJlbWFpbmluZyB0b2tlbnNcbiAgICAgICAgICByZXF1ZXN0LnJlc3VtZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0Lm9uY2UoJ2NhbmNlbCcsIG9uQ2FuY2VsKTtcblxuICAgICAgdGhpcy5jcmVhdGVSZXF1ZXN0VGltZXIoKTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKHsgdHlwZTogcGFja2V0VHlwZSwgcmVzZXRDb25uZWN0aW9uOiB0aGlzLnJlc2V0Q29ubmVjdGlvbk9uTmV4dFJlcXVlc3QgfSk7XG4gICAgICB0aGlzLm1lc3NhZ2VJby5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ud3JpdGUobWVzc2FnZSk7XG4gICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfQ0xJRU5UX1JFUVVFU1QpO1xuXG4gICAgICBtZXNzYWdlLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5yZW1vdmVMaXN0ZW5lcignY2FuY2VsJywgb25DYW5jZWwpO1xuICAgICAgICAvLyBQcmVwZW5kIHRoZSBsaXN0ZW5lciBzbyBpdCBhbHdheXMgcnVucyBiZWZvcmUgdGhlXG4gICAgICAgIC8vIGBTZW50Q2xpZW50UmVxdWVzdGAgc3RhdGUncyBgY2FuY2VsYCBoYW5kbGVyLCByZWdhcmRsZXNzIG9mIHRoZVxuICAgICAgICAvLyBvcmRlciBpbiB3aGljaCB0aGUgdHdvIHdlcmUgcmVnaXN0ZXJlZC4gVGhlIGxhdHRlciByZWxpZXMgb25cbiAgICAgICAgLy8gYGF0dGVudGlvblNlbnRgIGFscmVhZHkgYmVpbmcgc2V0LCB3aGljaCBvbmx5IHRoaXMgbGlzdGVuZXIgZG9lcy5cbiAgICAgICAgcmVxdWVzdC5wcmVwZW5kT25jZUxpc3RlbmVyKCdjYW5jZWwnLCB0aGlzLl9jYW5jZWxBZnRlclJlcXVlc3RTZW50KTtcblxuICAgICAgICB0aGlzLnJlc2V0Q29ubmVjdGlvbk9uTmV4dFJlcXVlc3QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZWJ1Zy5wYXlsb2FkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBwYXlsb2FkIS50b1N0cmluZygnICAnKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcGF5bG9hZFN0cmVhbSA9IFJlYWRhYmxlLmZyb20ocGF5bG9hZCk7XG4gICAgICBwYXlsb2FkU3RyZWFtLm9uY2UoJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgIHBheWxvYWRTdHJlYW0udW5waXBlKG1lc3NhZ2UpO1xuXG4gICAgICAgIC8vIE9ubHkgc2V0IGEgcmVxdWVzdCBlcnJvciBpZiBubyBlcnJvciB3YXMgc2V0IHlldC5cbiAgICAgICAgcmVxdWVzdC5lcnJvciA/Pz0gZXJyb3I7XG5cbiAgICAgICAgbWVzc2FnZS5pZ25vcmUgPSB0cnVlO1xuICAgICAgICBtZXNzYWdlLmVuZCgpO1xuICAgICAgfSk7XG4gICAgICBwYXlsb2FkU3RyZWFtLnBpcGUobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBjdXJyZW50bHkgZXhlY3V0ZWQgcmVxdWVzdC5cbiAgICovXG4gIGNhbmNlbCgpIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3QuY2FuY2VsKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGNvbm5lY3Rpb24gdG8gaXRzIGluaXRpYWwgc3RhdGUuXG4gICAqIENhbiBiZSB1c2VmdWwgZm9yIGNvbm5lY3Rpb24gcG9vbCBpbXBsZW1lbnRhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgcmVzZXQoY2FsbGJhY2s6IFJlc2V0Q2FsbGJhY2spIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodGhpcy5nZXRJbml0aWFsU3FsKCksIChlcnIpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgICB0aGlzLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSk7XG4gICAgdGhpcy5yZXNldENvbm5lY3Rpb25Pbk5leHRSZXF1ZXN0ID0gdHJ1ZTtcbiAgICB0aGlzLmV4ZWNTcWxCYXRjaChyZXF1ZXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbkRlc2NyaXB0b3JzW3RoaXMudHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0SXNvbGF0aW9uTGV2ZWxUZXh0KGlzb2xhdGlvbkxldmVsOiB0eXBlb2YgSVNPTEFUSU9OX0xFVkVMW2tleW9mIHR5cGVvZiBJU09MQVRJT05fTEVWRUxdKSB7XG4gICAgc3dpdGNoIChpc29sYXRpb25MZXZlbCkge1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuUkVBRF9VTkNPTU1JVFRFRDpcbiAgICAgICAgcmV0dXJuICdyZWFkIHVuY29tbWl0dGVkJztcbiAgICAgIGNhc2UgSVNPTEFUSU9OX0xFVkVMLlJFUEVBVEFCTEVfUkVBRDpcbiAgICAgICAgcmV0dXJuICdyZXBlYXRhYmxlIHJlYWQnO1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuU0VSSUFMSVpBQkxFOlxuICAgICAgICByZXR1cm4gJ3NlcmlhbGl6YWJsZSc7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5TTkFQU0hPVDpcbiAgICAgICAgcmV0dXJuICdzbmFwc2hvdCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3JlYWQgY29tbWl0dGVkJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFzeW5jIHBlcmZvcm1UbHNOZWdvdGlhdGlvbihwcmVsb2dpblBheWxvYWQ6IFByZWxvZ2luUGF5bG9hZCwgc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGF3YWl0IHdpdGhBYm9ydFJhY2Uoc2lnbmFsLCBhc3luYyAoc2lnbmFsQWJvcnRlZCkgPT4ge1xuICAgICAgaWYgKHByZWxvZ2luUGF5bG9hZC5mZWRBdXRoUmVxdWlyZWQgPT09IDEpIHtcbiAgICAgICAgdGhpcy5mZWRBdXRoUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCdzdHJpY3QnICE9PSB0aGlzLmNvbmZpZy5vcHRpb25zLmVuY3J5cHQgJiYgKHByZWxvZ2luUGF5bG9hZC5lbmNyeXB0aW9uU3RyaW5nID09PSAnT04nIHx8IHByZWxvZ2luUGF5bG9hZC5lbmNyeXB0aW9uU3RyaW5nID09PSAnUkVRJykpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5vcHRpb25zLmVuY3J5cHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdGlvbkVycm9yKFwiU2VydmVyIHJlcXVpcmVzIGVuY3J5cHRpb24sIHNldCAnZW5jcnlwdCcgY29uZmlnIG9wdGlvbiB0byB0cnVlLlwiLCAnRUVOQ1JZUFQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9UTFNTU0xORUdPVElBVElPTik7XG4gICAgICAgIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgdGhpcy5tZXNzYWdlSW8uc3RhcnRUbHModGhpcy5zZWN1cmVDb250ZXh0T3B0aW9ucywgdGhpcy5jb25maWcub3B0aW9ucy5zZXJ2ZXJOYW1lID8gdGhpcy5jb25maWcub3B0aW9ucy5zZXJ2ZXJOYW1lIDogdGhpcy5yb3V0aW5nRGF0YT8uc2VydmVyID8/IHRoaXMuY29uZmlnLnNlcnZlciwgdGhpcy5jb25maWcub3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyB0aGlzLndyYXBTb2NrZXRFcnJvcihlcnIpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNpZ25hbEFib3J0ZWRcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWFkUHJlbG9naW5SZXNwb25zZShzaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTxQcmVsb2dpblBheWxvYWQ+IHtcbiAgICBsZXQgbWVzc2FnZUJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygwKTtcblxuICAgIGF3YWl0IHdpdGhBYm9ydFJhY2Uoc2lnbmFsLCBhc3luYyAoc2lnbmFsQWJvcnRlZCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIHRoaXMubWVzc2FnZUlvLnJlYWRNZXNzYWdlKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIHRocm93IHRoaXMud3JhcFNvY2tldEVycm9yKGVycik7XG4gICAgICAgIH0pLFxuICAgICAgICBzaWduYWxBYm9ydGVkXG4gICAgICBdKTtcblxuICAgICAgY29uc3QgaXRlcmF0b3IgPSBtZXNzYWdlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICAgICAgaXRlcmF0b3IubmV4dCgpLFxuICAgICAgICAgICAgc2lnbmFsQWJvcnRlZFxuICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2VCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFttZXNzYWdlQnVmZmVyLCB2YWx1ZV0pO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHByZWxvZ2luUGF5bG9hZCA9IG5ldyBQcmVsb2dpblBheWxvYWQobWVzc2FnZUJ1ZmZlcik7XG4gICAgdGhpcy5kZWJ1Zy5wYXlsb2FkKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHByZWxvZ2luUGF5bG9hZC50b1N0cmluZygnICAnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJlbG9naW5QYXlsb2FkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhc3luYyBwZXJmb3JtUmVSb3V0aW5nKCkge1xuICAgIHRoaXMuc29ja2V0IS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9vblNvY2tldEVycm9yKTtcbiAgICB0aGlzLnNvY2tldCEucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgdGhpcy5fb25Tb2NrZXRDbG9zZSk7XG4gICAgdGhpcy5zb2NrZXQhLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCB0aGlzLl9vblNvY2tldEVuZCk7XG4gICAgdGhpcy5zb2NrZXQhLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuZGVidWcubG9nKCdjb25uZWN0aW9uIHRvICcgKyB0aGlzLmNvbmZpZy5zZXJ2ZXIgKyAnOicgKyB0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQgKyAnIGNsb3NlZCcpO1xuXG4gICAgdGhpcy5lbWl0KCdyZXJvdXRpbmcnKTtcbiAgICB0aGlzLmRlYnVnLmxvZygnUmVyb3V0aW5nIHRvICcgKyB0aGlzLnJvdXRpbmdEYXRhIS5zZXJ2ZXIgKyAnOicgKyB0aGlzLnJvdXRpbmdEYXRhIS5wb3J0KTtcblxuICAgIC8vIEF0dGVtcHQgY29ubmVjdGluZyB0byB0aGUgcmVyb3V0aW5nIHRhcmdldFxuICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuQ09OTkVDVElORyk7XG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXNlQ29ubmVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhc3luYyBwZXJmb3JtVHJhbnNpZW50RmFpbHVyZVJldHJ5KCkge1xuICAgIHRoaXMuY3VyVHJhbnNpZW50UmV0cnlDb3VudCsrO1xuXG4gICAgdGhpcy5zb2NrZXQhLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIHRoaXMuX29uU29ja2V0RXJyb3IpO1xuICAgIHRoaXMuc29ja2V0IS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCB0aGlzLl9vblNvY2tldENsb3NlKTtcbiAgICB0aGlzLnNvY2tldCEucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHRoaXMuX29uU29ja2V0RW5kKTtcbiAgICB0aGlzLnNvY2tldCEuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5kZWJ1Zy5sb2coJ2Nvbm5lY3Rpb24gdG8gJyArIHRoaXMuY29uZmlnLnNlcnZlciArICc6JyArIHRoaXMuY29uZmlnLm9wdGlvbnMucG9ydCArICcgY2xvc2VkJyk7XG5cbiAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLnJvdXRpbmdEYXRhID8gdGhpcy5yb3V0aW5nRGF0YS5zZXJ2ZXIgOiB0aGlzLmNvbmZpZy5zZXJ2ZXI7XG4gICAgY29uc3QgcG9ydCA9IHRoaXMucm91dGluZ0RhdGEgPyB0aGlzLnJvdXRpbmdEYXRhLnBvcnQgOiB0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQ7XG4gICAgdGhpcy5kZWJ1Zy5sb2coJ1JldHJ5IGFmdGVyIHRyYW5zaWVudCBmYWlsdXJlIGNvbm5lY3RpbmcgdG8gJyArIHNlcnZlciArICc6JyArIHBvcnQpO1xuXG4gICAgY29uc3QgY2xvc2VTaWduYWwgPSB0aGlzLmNsb3NlQ29udHJvbGxlciEuc2lnbmFsO1xuICAgIGNsb3NlU2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUsIHJlamVjdCB9ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzPHZvaWQ+KCk7XG5cbiAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4geyByZWplY3QoY2xvc2VTaWduYWwucmVhc29uKTsgfTtcbiAgICBjbG9zZVNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHJldHJ5VGltZXIgPSBzZXRUaW1lb3V0KHJlc29sdmUsIHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvblJldHJ5SW50ZXJ2YWwpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwcm9taXNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjbGVhclRpbWVvdXQocmV0cnlUaW1lcik7XG4gICAgICBjbG9zZVNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQpO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgncmV0cnknKTtcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkNPTk5FQ1RJTkcpO1xuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGlzZUNvbm5lY3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYXN5bmMgcGVyZm9ybVNlbnRMb2dpbjdXaXRoU3RhbmRhcmRMb2dpbihzaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTxSb3V0aW5nRGF0YSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBhd2FpdCB3aXRoQWJvcnRSYWNlKHNpZ25hbCwgYXN5bmMgKHNpZ25hbEFib3J0ZWQpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICB0aGlzLm1lc3NhZ2VJby5yZWFkTWVzc2FnZSgpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICB0aHJvdyB0aGlzLndyYXBTb2NrZXRFcnJvcihlcnIpO1xuICAgICAgICB9KSxcbiAgICAgICAgc2lnbmFsQWJvcnRlZFxuICAgICAgXSk7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgTG9naW43VG9rZW5IYW5kbGVyKHRoaXMpO1xuICAgICAgY29uc3QgdG9rZW5TdHJlYW1QYXJzZXIgPSB0aGlzLmNyZWF0ZVRva2VuU3RyZWFtUGFyc2VyKG1lc3NhZ2UsIGhhbmRsZXIpO1xuICAgICAgLy8gSWYgdGhlIGFib3J0IHdpbnMgdGhpcyByYWNlLCB0aGUgcGVuZGluZyBgb25jZSgpYCBpcyBsZWZ0XG4gICAgICAvLyB1bm9ic2VydmVkLCBhbmQgYSBwYXJzZSBlcnJvciBsYW5kaW5nIGFmdGVyd2FyZHMgd291bGQgcmVqZWN0IGl0XG4gICAgICAvLyB3aXRoIG5vYm9keSBsaXN0ZW5pbmcuIE9ic2VydmUgaXQgc28gdGhhdCBjYW5ub3QgYmVjb21lIGFuXG4gICAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9uIChzYW1lIGlkaW9tIGFzIGB3aXRoQWJvcnRSYWNlYCkuXG4gICAgICBjb25zdCBlbmRPZk1lc3NhZ2UgPSBvbmNlKHRva2VuU3RyZWFtUGFyc2VyLCAnZW5kJyk7XG4gICAgICBlbmRPZk1lc3NhZ2UuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZW5kT2ZNZXNzYWdlLFxuICAgICAgICBzaWduYWxBYm9ydGVkXG4gICAgICBdKTtcblxuICAgICAgaWYgKGhhbmRsZXIubG9naW5BY2tSZWNlaXZlZCkge1xuICAgICAgICByZXR1cm4gaGFuZGxlci5yb3V0aW5nRGF0YTtcbiAgICAgIH0gZWxzZSBpZiAoaGFuZGxlci5sb2dpbkVycm9yKSB7XG4gICAgICAgIHRocm93IGhhbmRsZXIubG9naW5FcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBDb25uZWN0aW9uRXJyb3IoJ0xvZ2luIGZhaWxlZC4nLCAnRUxPR0lOJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFzeW5jIHBlcmZvcm1TZW50TG9naW43V2l0aE5UTE1Mb2dpbihzaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTxSb3V0aW5nRGF0YSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBhd2FpdCB3aXRoQWJvcnRSYWNlKHNpZ25hbCwgYXN5bmMgKHNpZ25hbEFib3J0ZWQpID0+IHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICAgIHRoaXMubWVzc2FnZUlvLnJlYWRNZXNzYWdlKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgdGhyb3cgdGhpcy53cmFwU29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzaWduYWxBYm9ydGVkXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgTG9naW43VG9rZW5IYW5kbGVyKHRoaXMpO1xuICAgICAgICBjb25zdCB0b2tlblN0cmVhbVBhcnNlciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgaGFuZGxlcik7XG4gICAgICAgIC8vIElmIHRoZSBhYm9ydCB3aW5zIHRoaXMgcmFjZSwgdGhlIHBlbmRpbmcgYG9uY2UoKWAgaXMgbGVmdFxuICAgICAgICAvLyB1bm9ic2VydmVkLCBhbmQgYSBwYXJzZSBlcnJvciBsYW5kaW5nIGFmdGVyd2FyZHMgd291bGQgcmVqZWN0IGl0XG4gICAgICAgIC8vIHdpdGggbm9ib2R5IGxpc3RlbmluZy4gT2JzZXJ2ZSBpdCBzbyB0aGF0IGNhbm5vdCBiZWNvbWUgYW5cbiAgICAgICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbiAoc2FtZSBpZGlvbSBhcyBgd2l0aEFib3J0UmFjZWApLlxuICAgICAgICBjb25zdCBlbmRPZk1lc3NhZ2UgPSBvbmNlKHRva2VuU3RyZWFtUGFyc2VyLCAnZW5kJyk7XG4gICAgICAgIGVuZE9mTWVzc2FnZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgZW5kT2ZNZXNzYWdlLFxuICAgICAgICAgIHNpZ25hbEFib3J0ZWRcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKGhhbmRsZXIubG9naW5BY2tSZWNlaXZlZCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVyLnJvdXRpbmdEYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubnRsbXBhY2tldCkge1xuICAgICAgICAgIGNvbnN0IGF1dGhlbnRpY2F0aW9uID0gdGhpcy5jb25maWcuYXV0aGVudGljYXRpb24gYXMgTnRsbUF1dGhlbnRpY2F0aW9uO1xuXG4gICAgICAgICAgY29uc3QgcGF5bG9hZCA9IG5ldyBOVExNUmVzcG9uc2VQYXlsb2FkKHtcbiAgICAgICAgICAgIGRvbWFpbjogYXV0aGVudGljYXRpb24ub3B0aW9ucy5kb21haW4sXG4gICAgICAgICAgICB1c2VyTmFtZTogYXV0aGVudGljYXRpb24ub3B0aW9ucy51c2VyTmFtZSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnBhc3N3b3JkLFxuICAgICAgICAgICAgbnRsbXBhY2tldDogdGhpcy5udGxtcGFja2V0XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLm1lc3NhZ2VJby5zZW5kTWVzc2FnZShUWVBFLk5UTE1BVVRIX1BLVCwgcGF5bG9hZC5kYXRhKTtcbiAgICAgICAgICB0aGlzLmRlYnVnLnBheWxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZC50b1N0cmluZygnICAnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMubnRsbXBhY2tldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyLmxvZ2luRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBoYW5kbGVyLmxvZ2luRXJyb3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENvbm5lY3Rpb25FcnJvcignTG9naW4gZmFpbGVkLicsICdFTE9HSU4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhc3luYyBwZXJmb3JtU2VudExvZ2luN1dpdGhGZWRBdXRoKHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPFJvdXRpbmdEYXRhIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhBYm9ydFJhY2Uoc2lnbmFsLCBhc3luYyAoc2lnbmFsQWJvcnRlZCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIHRoaXMubWVzc2FnZUlvLnJlYWRNZXNzYWdlKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIHRocm93IHRoaXMud3JhcFNvY2tldEVycm9yKGVycik7XG4gICAgICAgIH0pLFxuICAgICAgICBzaWduYWxBYm9ydGVkXG4gICAgICBdKTtcblxuICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBMb2dpbjdUb2tlbkhhbmRsZXIodGhpcyk7XG4gICAgICBjb25zdCB0b2tlblN0cmVhbVBhcnNlciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgaGFuZGxlcik7XG4gICAgICAvLyBJZiB0aGUgYWJvcnQgd2lucyB0aGlzIHJhY2UsIHRoZSBwZW5kaW5nIGBvbmNlKClgIGlzIGxlZnRcbiAgICAgIC8vIHVub2JzZXJ2ZWQsIGFuZCBhIHBhcnNlIGVycm9yIGxhbmRpbmcgYWZ0ZXJ3YXJkcyB3b3VsZCByZWplY3QgaXRcbiAgICAgIC8vIHdpdGggbm9ib2R5IGxpc3RlbmluZy4gT2JzZXJ2ZSBpdCBzbyB0aGF0IGNhbm5vdCBiZWNvbWUgYW5cbiAgICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb24gKHNhbWUgaWRpb20gYXMgYHdpdGhBYm9ydFJhY2VgKS5cbiAgICAgIGNvbnN0IGVuZE9mTWVzc2FnZSA9IG9uY2UodG9rZW5TdHJlYW1QYXJzZXIsICdlbmQnKTtcbiAgICAgIGVuZE9mTWVzc2FnZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBlbmRPZk1lc3NhZ2UsXG4gICAgICAgIHNpZ25hbEFib3J0ZWRcbiAgICAgIF0pO1xuXG4gICAgICBpZiAoaGFuZGxlci5sb2dpbkFja1JlY2VpdmVkKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVyLnJvdXRpbmdEYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmZWRBdXRoSW5mb1Rva2VuID0gaGFuZGxlci5mZWRBdXRoSW5mb1Rva2VuO1xuXG4gICAgICBpZiAoZmVkQXV0aEluZm9Ub2tlbiAmJiBmZWRBdXRoSW5mb1Rva2VuLnN0c3VybCAmJiBmZWRBdXRoSW5mb1Rva2VuLnNwbikge1xuICAgICAgICAvKiogRmVkZXJhdGVkIGF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyYXRpb24uICovXG4gICAgICAgIGNvbnN0IGF1dGhlbnRpY2F0aW9uID0gdGhpcy5jb25maWcuYXV0aGVudGljYXRpb24gYXMgVG9rZW5DcmVkZW50aWFsQXV0aGVudGljYXRpb24gfCBBenVyZUFjdGl2ZURpcmVjdG9yeVBhc3N3b3JkQXV0aGVudGljYXRpb24gfCBBenVyZUFjdGl2ZURpcmVjdG9yeU1zaVZtQXV0aGVudGljYXRpb24gfCBBenVyZUFjdGl2ZURpcmVjdG9yeU1zaUFwcFNlcnZpY2VBdXRoZW50aWNhdGlvbiB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5U2VydmljZVByaW5jaXBhbFNlY3JldCB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5RGVmYXVsdEF1dGhlbnRpY2F0aW9uO1xuICAgICAgICAvKiogUGVybWlzc2lvbiBzY29wZSB0byBwYXNzIHRvIEVudHJhIElEIHdoZW4gcmVxdWVzdGluZyBhbiBhdXRoZW50aWNhdGlvbiB0b2tlbi4gKi9cbiAgICAgICAgY29uc3QgdG9rZW5TY29wZSA9IG5ldyBVUkwoJy8uZGVmYXVsdCcsIGZlZEF1dGhJbmZvVG9rZW4uc3BuKS50b1N0cmluZygpO1xuXG4gICAgICAgIC8qKiBJbnN0YW5jZSBvZiB0aGUgdG9rZW4gY3JlZGVudGlhbCB0byB1c2UgdG8gYXV0aGVudGljYXRlIHRvIHRoZSByZXNvdXJjZS4gKi9cbiAgICAgICAgbGV0IGNyZWRlbnRpYWxzOiBUb2tlbkNyZWRlbnRpYWw7XG5cbiAgICAgICAgc3dpdGNoIChhdXRoZW50aWNhdGlvbi50eXBlKSB7XG4gICAgICAgICAgY2FzZSAndG9rZW4tY3JlZGVudGlhbCc6XG4gICAgICAgICAgICBjcmVkZW50aWFscyA9IGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY3JlZGVudGlhbDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnOlxuICAgICAgICAgICAgY3JlZGVudGlhbHMgPSBuZXcgVXNlcm5hbWVQYXNzd29yZENyZWRlbnRpYWwoXG4gICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudGVuYW50SWQgPz8gJ2NvbW1vbicsXG4gICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWQsXG4gICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudXNlck5hbWUsXG4gICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMucGFzc3dvcmRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bSc6XG4gICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2UnOlxuICAgICAgICAgICAgY29uc3QgbXNpQXJncyA9IGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWQgPyBbYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZCwge31dIDogW3t9XTtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzID0gbmV3IE1hbmFnZWRJZGVudGl0eUNyZWRlbnRpYWwoLi4ubXNpQXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnOlxuICAgICAgICAgICAgY29uc3QgYXJncyA9IGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWQgPyB7IG1hbmFnZWRJZGVudGl0eUNsaWVudElkOiBhdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudElkIH0gOiB7fTtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzID0gbmV3IERlZmF1bHRBenVyZUNyZWRlbnRpYWwoYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2UtcHJpbmNpcGFsLXNlY3JldCc6XG4gICAgICAgICAgICBjcmVkZW50aWFscyA9IG5ldyBDbGllbnRTZWNyZXRDcmVkZW50aWFsKFxuICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnRlbmFudElkLFxuICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudElkLFxuICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudFNlY3JldFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIEFjY2VzcyB0b2tlbiByZXRyaWV2ZWQgZnJvbSBFbnRyYSBJRCBmb3IgdGhlIGNvbmZpZ3VyZWQgcGVybWlzc2lvbiBzY29wZShzKS4gKi9cbiAgICAgICAgbGV0IHRva2VuUmVzcG9uc2U6IEFjY2Vzc1Rva2VuIHwgbnVsbDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRva2VuUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICAgICAgY3JlZGVudGlhbHMuZ2V0VG9rZW4odG9rZW5TY29wZSksXG4gICAgICAgICAgICBzaWduYWxBYm9ydGVkXG4gICAgICAgICAgXSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgICAgICAgICAgW25ldyBDb25uZWN0aW9uRXJyb3IoJ1NlY3VyaXR5IHRva2VuIGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIG9yIGF1dGhvcml6ZWQuJywgJ0VGRURBVVRIJyksIGVycl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHlwZSBndWFyZCB0aGUgdG9rZW4gdmFsdWUgc28gdGhhdCBpdCBpcyBuZXZlciBudWxsLlxuICAgICAgICBpZiAodG9rZW5SZXNwb25zZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihcbiAgICAgICAgICAgIFtuZXcgQ29ubmVjdGlvbkVycm9yKCdTZWN1cml0eSB0b2tlbiBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCBvciBhdXRob3JpemVkLicsICdFRkVEQVVUSCcpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbmRGZWRBdXRoVG9rZW5NZXNzYWdlKHRva2VuUmVzcG9uc2UudG9rZW4pO1xuICAgICAgICAvLyBzZW50IHRoZSBmZWRBdXRoIHRva2VuIG1lc3NhZ2UsIHRoZSByZXN0IGlzIHNpbWlsYXIgdG8gc3RhbmRhcmQgbG9naW4gN1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfTE9HSU43X1dJVEhfU1RBTkRBUkRfTE9HSU4pO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wZXJmb3JtU2VudExvZ2luN1dpdGhTdGFuZGFyZExvZ2luKHNpZ25hbCk7XG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZXIubG9naW5FcnJvcikge1xuICAgICAgICB0aHJvdyBoYW5kbGVyLmxvZ2luRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdGlvbkVycm9yKCdMb2dpbiBmYWlsZWQuJywgJ0VMT0dJTicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhc3luYyBwZXJmb3JtTG9nZ2VkSW5TZW5kaW5nSW5pdGlhbFNxbChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgYXdhaXQgd2l0aEFib3J0UmFjZShzaWduYWwsIGFzeW5jIChzaWduYWxBYm9ydGVkKSA9PiB7XG4gICAgICB0aGlzLnNlbmRJbml0aWFsU3FsKCk7XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICB0aGlzLm1lc3NhZ2VJby5yZWFkTWVzc2FnZSgpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICB0aHJvdyB0aGlzLndyYXBTb2NrZXRFcnJvcihlcnIpO1xuICAgICAgICB9KSxcbiAgICAgICAgc2lnbmFsQWJvcnRlZFxuICAgICAgXSk7XG5cbiAgICAgIGNvbnN0IHRva2VuU3RyZWFtUGFyc2VyID0gdGhpcy5jcmVhdGVUb2tlblN0cmVhbVBhcnNlcihtZXNzYWdlLCBuZXcgSW5pdGlhbFNxbFRva2VuSGFuZGxlcih0aGlzKSk7XG4gICAgICAvLyBJZiB0aGUgYWJvcnQgd2lucyB0aGlzIHJhY2UsIHRoZSBwZW5kaW5nIGBvbmNlKClgIGlzIGxlZnRcbiAgICAgIC8vIHVub2JzZXJ2ZWQsIGFuZCBhIHBhcnNlIGVycm9yIGxhbmRpbmcgYWZ0ZXJ3YXJkcyB3b3VsZCByZWplY3QgaXRcbiAgICAgIC8vIHdpdGggbm9ib2R5IGxpc3RlbmluZy4gT2JzZXJ2ZSBpdCBzbyB0aGF0IGNhbm5vdCBiZWNvbWUgYW5cbiAgICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb24gKHNhbWUgaWRpb20gYXMgYHdpdGhBYm9ydFJhY2VgKS5cbiAgICAgIGNvbnN0IGVuZE9mTWVzc2FnZSA9IG9uY2UodG9rZW5TdHJlYW1QYXJzZXIsICdlbmQnKTtcbiAgICAgIGVuZE9mTWVzc2FnZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBlbmRPZk1lc3NhZ2UsXG4gICAgICAgIHNpZ25hbEFib3J0ZWRcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVHJhbnNpZW50RXJyb3IoZXJyb3I6IEFnZ3JlZ2F0ZUVycm9yIHwgQ29ubmVjdGlvbkVycm9yKTogYm9vbGVhbiB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZUVycm9yKSB7XG4gICAgZXJyb3IgPSBlcnJvci5lcnJvcnNbMF07XG4gIH1cbiAgcmV0dXJuIChlcnJvciBpbnN0YW5jZW9mIENvbm5lY3Rpb25FcnJvcikgJiYgISFlcnJvci5pc1RyYW5zaWVudDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29ubmVjdGlvbjtcbm1vZHVsZS5leHBvcnRzID0gQ29ubmVjdGlvbjtcblxuQ29ubmVjdGlvbi5wcm90b3R5cGUuU1RBVEUgPSB7XG4gIElOSVRJQUxJWkVEOiB7XG4gICAgbmFtZTogJ0luaXRpYWxpemVkJyxcbiAgICBldmVudHM6IHt9XG4gIH0sXG4gIENPTk5FQ1RJTkc6IHtcbiAgICBuYW1lOiAnQ29ubmVjdGluZycsXG4gICAgZXZlbnRzOiB7fVxuICB9LFxuICBTRU5UX1BSRUxPR0lOOiB7XG4gICAgbmFtZTogJ1NlbnRQcmVsb2dpbicsXG4gICAgZXZlbnRzOiB7fVxuICB9LFxuICBSRVJPVVRJTkc6IHtcbiAgICBuYW1lOiAnUmVSb3V0aW5nJyxcbiAgICBldmVudHM6IHt9XG4gIH0sXG4gIFRSQU5TSUVOVF9GQUlMVVJFX1JFVFJZOiB7XG4gICAgbmFtZTogJ1RSQU5TSUVOVF9GQUlMVVJFX1JFVFJZJyxcbiAgICBldmVudHM6IHt9XG4gIH0sXG4gIFNFTlRfVExTU1NMTkVHT1RJQVRJT046IHtcbiAgICBuYW1lOiAnU2VudFRMU1NTTE5lZ290aWF0aW9uJyxcbiAgICBldmVudHM6IHt9XG4gIH0sXG4gIFNFTlRfTE9HSU43X1dJVEhfU1RBTkRBUkRfTE9HSU46IHtcbiAgICBuYW1lOiAnU2VudExvZ2luN1dpdGhTdGFuZGFyZExvZ2luJyxcbiAgICBldmVudHM6IHt9XG4gIH0sXG4gIFNFTlRfTE9HSU43X1dJVEhfTlRMTToge1xuICAgIG5hbWU6ICdTZW50TG9naW43V2l0aE5UTE1Mb2dpbicsXG4gICAgZXZlbnRzOiB7fVxuICB9LFxuICBTRU5UX0xPR0lON19XSVRIX0ZFREFVVEg6IHtcbiAgICBuYW1lOiAnU2VudExvZ2luN1dpdGhGZWRhdXRoJyxcbiAgICBldmVudHM6IHt9XG4gIH0sXG4gIExPR0dFRF9JTl9TRU5ESU5HX0lOSVRJQUxfU1FMOiB7XG4gICAgbmFtZTogJ0xvZ2dlZEluU2VuZGluZ0luaXRpYWxTcWwnLFxuICAgIGV2ZW50czoge31cbiAgfSxcbiAgTE9HR0VEX0lOOiB7XG4gICAgbmFtZTogJ0xvZ2dlZEluJyxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICAgIHRoaXMuY2xlYW51cENvbm5lY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIFNFTlRfQ0xJRU5UX1JFUVVFU1Q6IHtcbiAgICBuYW1lOiAnU2VudENsaWVudFJlcXVlc3QnLFxuICAgIGVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLm1lc3NhZ2VJby5yZWFkTWVzc2FnZSgpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIHRoaXMuX29uU29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVxdWVzdCB0aW1lciBpcyBzdG9wcGVkIG9uIGZpcnN0IGRhdGEgcGFja2FnZVxuICAgICAgICB0aGlzLmNsZWFyUmVxdWVzdFRpbWVyKCk7XG5cbiAgICAgICAgY29uc3QgdG9rZW5TdHJlYW1QYXJzZXIgPSB0aGlzLmNyZWF0ZVRva2VuU3RyZWFtUGFyc2VyKG1lc3NhZ2UsIG5ldyBSZXF1ZXN0VG9rZW5IYW5kbGVyKHRoaXMsIHRoaXMucmVxdWVzdCEpKTtcblxuICAgICAgICAvLyBBIHRva2VuIHBhcnNlIGZhaWx1cmUgbGVhdmVzIHRoZSBjb25uZWN0aW9uIGF0IGFuIHVuZGVmaW5lZFxuICAgICAgICAvLyBwb3NpdGlvbiBpbiB0aGUgVERTIHN0cmVhbSwgc28gaXQgY2Fubm90IGJlIHJlY292ZXJlZCBhdCB0aGVcbiAgICAgICAgLy8gcmVxdWVzdCBsZXZlbCDigJQgdHJlYXQgaXQgbGlrZSBhIHNvY2tldCBlcnJvci4gV2l0aG91dCBhIGxpc3RlbmVyXG4gICAgICAgIC8vIGhlcmUsIGEgcGFyc2UgZmFpbHVyZSB3b3VsZCBzdXJmYWNlIGFzIGFuIHVuaGFuZGxlZCBgJ2Vycm9yJ2BcbiAgICAgICAgLy8gZXZlbnQgb24gdGhlIHBhcnNlcidzIGludGVybmFsIHN0cmVhbSBhbmQgY3Jhc2ggdGhlIHByb2Nlc3MuXG4gICAgICAgIGNvbnN0IG9uUGFyc2VyRXJyb3IgPSAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIFRoZSByZXF1ZXN0IGlzIGFib3V0IHRvIGZhaWwgdGhyb3VnaCB0aGUgc29ja2V0IGVycm9yIHBhdGgsIHNvXG4gICAgICAgICAgLy8gZGV0YWNoIGl0cyBsaXN0ZW5lcnMgZmlyc3Q6IGEgbGF0ZSBgY2FuY2VsKClgIG11c3Qgbm90IHdyaXRlIGFuXG4gICAgICAgICAgLy8gYXR0ZW50aW9uIHBhY2tldCB0byB0aGUgZGVzdHJveWVkIHNvY2tldC4gKE9uIHRoZSBjYW5jZWxlZC1kcmFpblxuICAgICAgICAgIC8vIHBhdGggYmVsb3cgdGhlc2Ugd2VyZSBuZXZlciBhdHRhY2hlZCwgYW5kIHJlbW92YWwgaXMgYSBuby1vcC4pXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5yZW1vdmVMaXN0ZW5lcignY2FuY2VsJywgdGhpcy5fY2FuY2VsQWZ0ZXJSZXF1ZXN0U2VudCk7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5yZW1vdmVMaXN0ZW5lcignY2FuY2VsJywgb25DYW5jZWwpO1xuICAgICAgICAgIHRoaXMucmVxdWVzdD8ucmVtb3ZlTGlzdGVuZXIoJ3BhdXNlJywgb25QYXVzZSk7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5yZW1vdmVMaXN0ZW5lcigncmVzdW1lJywgb25SZXN1bWUpO1xuXG4gICAgICAgICAgdGhpcy5fb25Tb2NrZXRFcnJvcihlcnIpO1xuICAgICAgICB9O1xuICAgICAgICB0b2tlblN0cmVhbVBhcnNlci5vbignZXJyb3InLCBvblBhcnNlckVycm9yKTtcblxuICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCB3YXMgY2FuY2VsZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgbWVzc2FnZSB3YXNcbiAgICAgICAgLy8gZnVsbHkgc2VudCBvZmYsIGFuIGF0dGVudGlvbiBtZXNzYWdlIHdhcyBzZW50IHRvIHRoZSBzZXJ2ZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIGFscmVhZHkgc3RhcnRlZCBjb25zdW1pbmcgdGhlIGN1cnJlbnQgbWVzc2FnZSAodGhlIHJlc3BvbnNlXG4gICAgICAgIC8vIHRvIHRoZSBjYW5jZWxlZCByZXF1ZXN0LCB3aXRoIGFsbCB0aGUgdG9rZW4gaGFuZGxlcnMgYmVpbmdcbiAgICAgICAgLy8gbm8tb3BzKSwgYW5kIG5lZWQgdG8gZW5zdXJlIHRoZSBuZXh0IG1lc3NhZ2UgKGNvbnRhaW5pbmcgdGhlXG4gICAgICAgIC8vIGF0dGVudGlvbiBhY2tub3dsZWRnZW1lbnQpIGlzIGhhbmRsZWQgYnkgdGhlIGBTRU5UX0FUVEVOVElPTmBcbiAgICAgICAgLy8gc3RhdGUuXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3Q/LmNhbmNlbGVkICYmIHRoaXMuYXR0ZW50aW9uU2VudCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfQVRURU5USU9OKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9uUmVzdW1lID0gKCkgPT4ge1xuICAgICAgICAgIHRva2VuU3RyZWFtUGFyc2VyLnJlc3VtZSgpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvblBhdXNlID0gKCkgPT4ge1xuICAgICAgICAgIHRva2VuU3RyZWFtUGFyc2VyLnBhdXNlKCk7XG5cbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/Lm9uY2UoJ3Jlc3VtZScsIG9uUmVzdW1lKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJlcXVlc3Q/Lm9uKCdwYXVzZScsIG9uUGF1c2UpO1xuXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0ICYmIHRoaXMucmVxdWVzdC5wYXVzZWQpIHtcbiAgICAgICAgICBvblBhdXNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvbkNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCB3YXMgY2FuY2VsZWQgYmVmb3JlIHRoZSByZXF1ZXN0IG1lc3NhZ2Ugd2FzXG4gICAgICAgICAgLy8gZnVsbHkgc2VudCwgdGhlIG1lc3NhZ2Ugd2FzIHRlcm1pbmF0ZWQgd2l0aCB0aGUgYElHTk9SRWAgYml0XG4gICAgICAgICAgLy8gc2V0IGFuZCBubyBhdHRlbnRpb24gbWVzc2FnZSB3YXMgc2VudC4gVGhlIHNlcnZlcidzIHJlc3BvbnNlXG4gICAgICAgICAgLy8gdG8gdGhlIGlnbm9yZWQgbWVzc2FnZSBpcyBoYW5kbGVkIGxpa2UgYSByZWd1bGFyIHJlc3BvbnNlLlxuICAgICAgICAgIGlmICghdGhpcy5hdHRlbnRpb25TZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9rZW5TdHJlYW1QYXJzZXIucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRW5kT2ZNZXNzYWdlKTtcblxuICAgICAgICAgIGlmICh0aGlzLnJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0ICYmIHRoaXMucmVxdWVzdC5wYXVzZWQpIHtcbiAgICAgICAgICAgIC8vIHJlc3VtZSB0aGUgcmVxdWVzdCBpZiBpdCB3YXMgcGF1c2VkIHNvIHdlIGNhbiByZWFkIHRoZSByZW1haW5pbmcgdG9rZW5zXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3QucmVzdW1lKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5yZW1vdmVMaXN0ZW5lcigncGF1c2UnLCBvblBhdXNlKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/LnJlbW92ZUxpc3RlbmVyKCdyZXN1bWUnLCBvblJlc3VtZSk7XG5cbiAgICAgICAgICAvLyBUaGUgYF9jYW5jZWxBZnRlclJlcXVlc3RTZW50YCBjYWxsYmFjayB3aWxsIGhhdmUgc2VudCBhXG4gICAgICAgICAgLy8gYXR0ZW50aW9uIG1lc3NhZ2UsIHNvIG5vdyB3ZSBuZWVkIHRvIGFsc28gc3dpdGNoIHRvXG4gICAgICAgICAgLy8gdGhlIGBTRU5UX0FUVEVOVElPTmAgc3RhdGUgdG8gbWFrZSBzdXJlIHRoZSBhdHRlbnRpb24gYWNrXG4gICAgICAgICAgLy8gbWVzc2FnZSBpcyBwcm9jZXNzZWQgY29ycmVjdGx5LlxuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9BVFRFTlRJT04pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG9uRW5kT2ZNZXNzYWdlID0gKCkgPT4ge1xuICAgICAgICAgIHRva2VuU3RyZWFtUGFyc2VyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uUGFyc2VyRXJyb3IpO1xuXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5yZW1vdmVMaXN0ZW5lcignY2FuY2VsJywgdGhpcy5fY2FuY2VsQWZ0ZXJSZXF1ZXN0U2VudCk7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5yZW1vdmVMaXN0ZW5lcignY2FuY2VsJywgb25DYW5jZWwpO1xuICAgICAgICAgIHRoaXMucmVxdWVzdD8ucmVtb3ZlTGlzdGVuZXIoJ3BhdXNlJywgb25QYXVzZSk7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5yZW1vdmVMaXN0ZW5lcigncmVzdW1lJywgb25SZXN1bWUpO1xuXG4gICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3Qgd2FzIGNhbmNlbGVkIGJlZm9yZSBpdHMgcmVxdWVzdCBtZXNzYWdlIHdhc1xuICAgICAgICAgIC8vIGZ1bGx5IHNlbnQsIHRoaXMgcmVzcG9uc2UgYmVsb25ncyB0byB0aGUgaWdub3JlZCBtZXNzYWdlIGFuZFxuICAgICAgICAgIC8vIGEgY2FuY2VsIHRpbWVyIGlzIHJ1bm5pbmcgLSB0aGUgcmVzcG9uc2UncyBhcnJpdmFsIGlzIHdoYXRcbiAgICAgICAgICAvLyBjb21wbGV0ZXMgdGhlIGNhbmNlbGxhdGlvbi5cbiAgICAgICAgICB0aGlzLmNsZWFyQ2FuY2VsVGltZXIoKTtcblxuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuTE9HR0VEX0lOKTtcbiAgICAgICAgICBjb25zdCBzcWxSZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0IGFzIFJlcXVlc3Q7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJyAmJiBzcWxSZXF1ZXN0LmVycm9yICYmIHRoaXMuaXNTcWxCYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNxbFJlcXVlc3QuY2FsbGJhY2soc3FsUmVxdWVzdC5lcnJvciwgc3FsUmVxdWVzdC5yb3dDb3VudCwgc3FsUmVxdWVzdC5yb3dzKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0b2tlblN0cmVhbVBhcnNlci5vbmNlKCdlbmQnLCBvbkVuZE9mTWVzc2FnZSk7XG4gICAgICAgIHRoaXMucmVxdWVzdD8ub25jZSgnY2FuY2VsJywgb25DYW5jZWwpO1xuICAgICAgfSkoKTtcblxuICAgIH0sXG4gICAgZXhpdDogZnVuY3Rpb24obmV4dFN0YXRlKSB7XG4gICAgICB0aGlzLmNsZWFyUmVxdWVzdFRpbWVyKCk7XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgY29uc3Qgc3FsUmVxdWVzdCA9IHRoaXMucmVxdWVzdCE7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICAgIHRoaXMuY2xlYW51cENvbm5lY3Rpb24oKTtcblxuICAgICAgICBzcWxSZXF1ZXN0LmNhbGxiYWNrKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBTRU5UX0FUVEVOVElPTjoge1xuICAgIG5hbWU6ICdTZW50QXR0ZW50aW9uJyxcbiAgICBlbnRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBURFMgaXMgYSByZXF1ZXN0LXJlc3BvbnNlIHByb3RvY29sIGF0IHRoZSBtZXNzYWdlIGxldmVsOiBldmVyeVxuICAgICAgICAvLyBjbGllbnQgbWVzc2FnZSAtIGluY2x1ZGluZyB0aGUgYXR0ZW50aW9uIG1lc3NhZ2UgLSByZWNlaXZlc1xuICAgICAgICAvLyBleGFjdGx5IG9uZSByZXNwb25zZSBtZXNzYWdlLiBCeSB0aGUgdGltZSB3ZSBlbnRlciB0aGlzIHN0YXRlLFxuICAgICAgICAvLyB0aGUgcmVzcG9uc2UgdG8gdGhlIGNhbmNlbGVkIHJlcXVlc3QgaXRzZWxmIHdhcyBhbHJlYWR5IGNvbnN1bWVkXG4gICAgICAgIC8vIGluIHRoZSBgU2VudENsaWVudFJlcXVlc3RgIHN0YXRlLCBzbyB0aGUgc2luZ2xlIG1lc3NhZ2UgcmVhZCBoZXJlXG4gICAgICAgIC8vIGlzIHRoZSBhdHRlbnRpb24gbWVzc2FnZSdzIG93biByZXNwb25zZSwgY29udGFpbmluZyB0aGUgYXR0ZW50aW9uXG4gICAgICAgIC8vIGFja25vd2xlZGdlbWVudC4gUmVhZGluZyBtb3JlIHRoYW4gb25lIG1lc3NhZ2Ugd291bGQgY29uc3VtZSB0aGVcbiAgICAgICAgLy8gcmVzcG9uc2UgYmVsb25naW5nIHRvIHRoZSBuZXh0IHJlcXVlc3QgYW5kIGRlc3luY2hyb25pemUgdGhlXG4gICAgICAgIC8vIG1lc3NhZ2Ugc3RyZWFtIC0gc28gZG9uJ3QgdHVybiB0aGlzIGludG8gYSBsb29wLlxuICAgICAgICBsZXQgbWVzc2FnZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy5tZXNzYWdlSW8ucmVhZE1lc3NhZ2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICB0aGlzLl9vblNvY2tldEVycm9yKGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBBdHRlbnRpb25Ub2tlbkhhbmRsZXIodGhpcywgdGhpcy5yZXF1ZXN0ISk7XG4gICAgICAgIGNvbnN0IHRva2VuU3RyZWFtUGFyc2VyID0gdGhpcy5jcmVhdGVUb2tlblN0cmVhbVBhcnNlcihtZXNzYWdlLCBoYW5kbGVyKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IG9uY2UodG9rZW5TdHJlYW1QYXJzZXIsICdlbmQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAvLyBBIHRva2VuIHBhcnNlIGZhaWx1cmUgaW4gdGhlIGF0dGVudGlvbiByZXNwb25zZSByZWplY3RzIHRoZVxuICAgICAgICAgIC8vIGBvbmNlKClgLiBUcmVhdCBpdCBsaWtlIGEgc29ja2V0IGVycm9yIC0gdGhlIHJlcXVlc3QgZmFpbHMgd2l0aFxuICAgICAgICAgIC8vIHRoZSBwYXJzZSBlcnJvciBhbmQgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkIC0gaW5zdGVhZCBvZiB0aGVcbiAgICAgICAgICAvLyBwcm9jZXNzIGR5aW5nIG9uIGFuIHVuaGFuZGxlZCByZWplY3Rpb24uXG4gICAgICAgICAgdGhpcy5fb25Tb2NrZXRFcnJvcihlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyAzLjIuNS43IFNlbnQgQXR0ZW50aW9uIFN0YXRlXG4gICAgICAgIC8vIERpc2NhcmQgYW55IGRhdGEgY29udGFpbmVkIGluIHRoZSByZXNwb25zZSwgdW50aWwgd2UgcmVjZWl2ZSB0aGUgYXR0ZW50aW9uIHJlc3BvbnNlXG4gICAgICAgIGlmIChoYW5kbGVyLmF0dGVudGlvblJlY2VpdmVkKSB7XG4gICAgICAgICAgdGhpcy5hdHRlbnRpb25TZW50ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jbGVhckNhbmNlbFRpbWVyKCk7XG5cbiAgICAgICAgICBjb25zdCBzcWxSZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0ITtcbiAgICAgICAgICB0aGlzLnJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5MT0dHRURfSU4pO1xuXG4gICAgICAgICAgaWYgKHNxbFJlcXVlc3QuZXJyb3IgJiYgc3FsUmVxdWVzdC5lcnJvciBpbnN0YW5jZW9mIFJlcXVlc3RFcnJvciAmJiBzcWxSZXF1ZXN0LmVycm9yLmNvZGUgPT09ICdFVElNRU9VVCcpIHtcbiAgICAgICAgICAgIHNxbFJlcXVlc3QuY2FsbGJhY2soc3FsUmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNxbFJlcXVlc3QuY2FsbGJhY2sobmV3IFJlcXVlc3RFcnJvcignQ2FuY2VsZWQuJywgJ0VDQU5DRUwnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSgpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZXZlbnRzOiB7XG4gICAgICBzb2NrZXRFcnJvcjogZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgIGNvbnN0IHNxbFJlcXVlc3QgPSB0aGlzLnJlcXVlc3QhO1xuICAgICAgICB0aGlzLnJlcXVlc3QgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICAgIHRoaXMuY2xlYW51cENvbm5lY3Rpb24oKTtcblxuICAgICAgICBzcWxSZXF1ZXN0LmNhbGxiYWNrKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBGSU5BTDoge1xuICAgIG5hbWU6ICdGaW5hbCcsXG4gICAgZXZlbnRzOiB7fVxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxHQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxHQUFBLEdBQUFDLHVCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxHQUFBLEdBQUFELHVCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSyxJQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBTSxVQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFFQSxJQUFBUSxTQUFBLEdBQUFSLE9BQUE7QUFNQSxJQUFBUyxTQUFBLEdBQUFULE9BQUE7QUFFQSxJQUFBVSxTQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVyxNQUFBLEdBQUFaLHNCQUFBLENB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
|
|
2822
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3J5cHRvIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfb3MiLCJ0bHMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIm5ldCIsIl9kbnMiLCJfY29uc3RhbnRzIiwiX3N0cmVhbSIsIl9pZGVudGl0eSIsIl9jb3JlQXV0aCIsIl9idWxrTG9hZCIsIl9kZWJ1ZyIsIl9ldmVudHMiLCJfaW5zdGFuY2VMb29rdXAiLCJfdHJhbnNpZW50RXJyb3JMb29rdXAiLCJfcGFja2V0IiwiX3ByZWxvZ2luUGF5bG9hZCIsIl9sb2dpbjdQYXlsb2FkIiwiX250bG1QYXlsb2FkIiwiX3JlcXVlc3QiLCJfcnBjcmVxdWVzdFBheWxvYWQiLCJfc3FsYmF0Y2hQYXlsb2FkIiwiX21lc3NhZ2VJbyIsIl90b2tlblN0cmVhbVBhcnNlciIsIl90cmFuc2FjdGlvbiIsIl9lcnJvcnMiLCJfY29ubmVjdG9yIiwiX2xpYnJhcnkiLCJfdGRzVmVyc2lvbnMiLCJfbWVzc2FnZSIsIl9udGxtIiwiX2RhdGFUeXBlIiwiX2J1bGtMb2FkUGF5bG9hZCIsIl9zcGVjaWFsU3RvcmVkUHJvY2VkdXJlIiwiX3BhY2thZ2UiLCJfdXJsIiwiX2hhbmRsZXIiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJLRUVQX0FMSVZFX0lOSVRJQUxfREVMQVkiLCJERUZBVUxUX0NPTk5FQ1RfVElNRU9VVCIsIkRFRkFVTFRfQ0xJRU5UX1JFUVVFU1RfVElNRU9VVCIsIkRFRkFVTFRfQ0FOQ0VMX1RJTUVPVVQiLCJERUZBVUxUX0NPTk5FQ1RfUkVUUllfSU5URVJWQUwiLCJERUZBVUxUX1BBQ0tFVF9TSVpFIiwiREVGQVVMVF9URVhUU0laRSIsIkRFRkFVTFRfREFURUZJUlNUIiwiREVGQVVMVF9QT1JUIiwiREVGQVVMVF9URFNfVkVSU0lPTiIsIkRFRkFVTFRfTEFOR1VBR0UiLCJERUZBVUxUX0RBVEVGT1JNQVQiLCJ3aXRoQWJvcnRSYWNlIiwic2lnbmFsIiwiZnVuYyIsInRocm93SWZBYm9ydGVkIiwicHJvbWlzZSIsInNpZ25hbEFib3J0ZWQiLCJyZWplY3QiLCJQcm9taXNlIiwid2l0aFJlc29sdmVycyIsImNhdGNoIiwib25BYm9ydCIsInJlYXNvbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbmNlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkNvbm5lY3Rpb24iLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsIlR5cGVFcnJvciIsInNlcnZlciIsImZlZEF1dGhSZXF1aXJlZCIsImF1dGhlbnRpY2F0aW9uIiwidW5kZWZpbmVkIiwidHlwZSIsIm9wdGlvbnMiLCJkb21haW4iLCJ1c2VyTmFtZSIsInBhc3N3b3JkIiwidG9VcHBlckNhc2UiLCJpc1Rva2VuQ3JlZGVudGlhbCIsImNyZWRlbnRpYWwiLCJjbGllbnRJZCIsInRlbmFudElkIiwidG9rZW4iLCJjbGllbnRTZWNyZXQiLCJhYm9ydFRyYW5zYWN0aW9uT25FcnJvciIsImFwcE5hbWUiLCJjYW1lbENhc2VDb2x1bW5zIiwiY2FuY2VsVGltZW91dCIsImNvbHVtbkVuY3J5cHRpb25LZXlDYWNoZVRUTCIsImNvbHVtbkVuY3J5cHRpb25TZXR0aW5nIiwiY29sdW1uTmFtZVJlcGxhY2VyIiwiY29ubmVjdGlvblJldHJ5SW50ZXJ2YWwiLCJjb25uZWN0VGltZW91dCIsImNvbm5lY3RvciIsImNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCIsIklTT0xBVElPTl9MRVZFTCIsIlJFQURfQ09NTUlUVEVEIiwiY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzIiwiZGF0YWJhc2UiLCJkYXRlZmlyc3QiLCJkYXRlRm9ybWF0IiwiZGVidWciLCJkYXRhIiwicGFja2V0IiwicGF5bG9hZCIsImVuYWJsZUFuc2lOdWxsIiwiZW5hYmxlQW5zaU51bGxEZWZhdWx0IiwiZW5hYmxlQW5zaVBhZGRpbmciLCJlbmFibGVBbnNpV2FybmluZ3MiLCJlbmFibGVBcml0aEFib3J0IiwiZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGwiLCJlbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0IiwiZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnMiLCJlbmFibGVOdW1lcmljUm91bmRhYm9ydCIsImVuYWJsZVF1b3RlZElkZW50aWZpZXIiLCJlbmNyeXB0IiwiZmFsbGJhY2tUb0RlZmF1bHREYiIsImVuY3J5cHRpb25LZXlTdG9yZVByb3ZpZGVycyIsImluc3RhbmNlTmFtZSIsImlzb2xhdGlvbkxldmVsIiwibGFuZ3VhZ2UiLCJsb2NhbEFkZHJlc3MiLCJtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMiLCJtdWx0aVN1Ym5ldEZhaWxvdmVyIiwicGFja2V0U2l6ZSIsInBvcnQiLCJyZWFkT25seUludGVudCIsInJlcXVlc3RUaW1lb3V0Iiwicm93Q29sbGVjdGlvbk9uRG9uZSIsInJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uIiwic2VydmVyTmFtZSIsInNlcnZlclN1cHBvcnRzQ29sdW1uRW5jcnlwdGlvbiIsInRkc1ZlcnNpb24iLCJ0ZXh0c2l6ZSIsInRydXN0ZWRTZXJ2ZXJOYW1lQUUiLCJ0cnVzdFNlcnZlckNlcnRpZmljYXRlIiwidXNlQ29sdW1uTmFtZXMiLCJ1c2VVVEMiLCJ3b3Jrc3RhdGlvbklkIiwibG93ZXJDYXNlR3VpZHMiLCJFcnJvciIsImFzc2VydFZhbGlkSXNvbGF0aW9uTGV2ZWwiLCJSYW5nZUVycm9yIiwic2VjdXJlQ29udGV4dE9wdGlvbnMiLCJzZWN1cmVPcHRpb25zIiwiY3JlYXRlIiwidmFsdWUiLCJjb25zdGFudHMiLCJTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIiwiY3JlYXRlRGVidWciLCJpblRyYW5zYWN0aW9uIiwidHJhbnNhY3Rpb25EZXNjcmlwdG9ycyIsIkJ1ZmZlciIsImZyb20iLCJ0cmFuc2FjdGlvbkRlcHRoIiwiaXNTcWxCYXRjaCIsImNsb3NlZCIsIm1lc3NhZ2VCdWZmZXIiLCJhbGxvYyIsImN1clRyYW5zaWVudFJldHJ5Q291bnQiLCJ0cmFuc2llbnRFcnJvckxvb2t1cCIsIlRyYW5zaWVudEVycm9yTG9va3VwIiwic3RhdGUiLCJTVEFURSIsIklOSVRJQUxJWkVEIiwiYXR0ZW50aW9uU2VudCIsIl9jYW5jZWxBZnRlclJlcXVlc3RTZW50IiwibWVzc2FnZUlvIiwic2VuZE1lc3NhZ2UiLCJUWVBFIiwiQVRURU5USU9OIiwiY3JlYXRlQ2FuY2VsVGltZXIiLCJfb25Tb2NrZXRDbG9zZSIsInNvY2tldENsb3NlIiwiX29uU29ja2V0RW5kIiwic29ja2V0RW5kIiwiX29uU29ja2V0RXJyb3IiLCJlcnJvciIsIkZJTkFMIiwiZGlzcGF0Y2hFdmVudCIsInByb2Nlc3MiLCJuZXh0VGljayIsImVtaXQiLCJ3cmFwU29ja2V0RXJyb3IiLCJjb25uZWN0IiwiY29ubmVjdExpc3RlbmVyIiwiQ29ubmVjdGlvbkVycm9yIiwibmFtZSIsIm9uQ29ubmVjdCIsImVyciIsInJlbW92ZUxpc3RlbmVyIiwib25FcnJvciIsImNsb3NlQ29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsInRyYW5zaXRpb25UbyIsIkNPTk5FQ1RJTkciLCJpbml0aWFsaXNlQ29ubmVjdGlvbiIsInRoZW4iLCJjbGVhbnVwQ29ubmVjdGlvbiIsIm9uIiwiZXZlbnQiLCJsaXN0ZW5lciIsImFyZ3MiLCJjbG9zZSIsImFib3J0IiwidGltZW91dENvbnRyb2xsZXIiLCJjb25uZWN0VGltZXIiLCJzZXRUaW1lb3V0IiwiaG9zdFBvc3RmaXgiLCJyb3V0aW5nRGF0YSIsInJvdXRpbmdNZXNzYWdlIiwibWVzc2FnZSIsImxvZyIsIkFib3J0U2lnbmFsIiwiYW55IiwiaW5zdGFuY2VMb29rdXAiLCJ0aW1lb3V0IiwiY2F1c2UiLCJzb2NrZXQiLCJjb25uZWN0T25Qb3J0IiwiY29udHJvbGxlciIsIm9uQ2xvc2UiLCJvbkVuZCIsImNvZGUiLCJzZXRLZWVwQWxpdmUiLCJNZXNzYWdlSU8iLCJjbGVhcnRleHQiLCJzZW5kUHJlTG9naW4iLCJTRU5UX1BSRUxPR0lOIiwicHJlbG9naW5SZXNwb25zZSIsInJlYWRQcmVsb2dpblJlc3BvbnNlIiwicGVyZm9ybVRsc05lZ290aWF0aW9uIiwic2VuZExvZ2luN1BhY2tldCIsIlNFTlRfTE9HSU43X1dJVEhfRkVEQVVUSCIsInBlcmZvcm1TZW50TG9naW43V2l0aEZlZEF1dGgiLCJTRU5UX0xPR0lON19XSVRIX05UTE0iLCJwZXJmb3JtU2VudExvZ2luN1dpdGhOVExNTG9naW4iLCJTRU5UX0xPR0lON19XSVRIX1NUQU5EQVJEX0xPR0lOIiwicGVyZm9ybVNlbnRMb2dpbjdXaXRoU3RhbmRhcmRMb2dpbiIsImlzVHJhbnNpZW50RXJyb3IiLCJUUkFOU0lFTlRfRkFJTFVSRV9SRVRSWSIsInBlcmZvcm1UcmFuc2llbnRGYWlsdXJlUmV0cnkiLCJSRVJPVVRJTkciLCJwZXJmb3JtUmVSb3V0aW5nIiwiTE9HR0VEX0lOX1NFTkRJTkdfSU5JVElBTF9TUUwiLCJwZXJmb3JtTG9nZ2VkSW5TZW5kaW5nSW5pdGlhbFNxbCIsImRlc3Ryb3kiLCJMT0dHRURfSU4iLCJjbGVhclRpbWVvdXQiLCJjbGVhclJlcXVlc3RUaW1lciIsImNsZWFyQ2FuY2VsVGltZXIiLCJjbG9zZUNvbm5lY3Rpb24iLCJyZXF1ZXN0IiwiY2FsbGJhY2siLCJSZXF1ZXN0RXJyb3IiLCJEZWJ1ZyIsImNyZWF0ZVRva2VuU3RyZWFtUGFyc2VyIiwiaGFuZGxlciIsIlRva2VuU3RyZWFtUGFyc2VyIiwid3JhcFdpdGhUbHMiLCJzZWN1cmVDb250ZXh0IiwiY3JlYXRlU2VjdXJlQ29udGV4dCIsImlzSVAiLCJlbmNyeXB0T3B0aW9ucyIsImhvc3QiLCJBTFBOUHJvdG9jb2xzIiwic2VydmVybmFtZSIsInJlc29sdmUiLCJlbmNyeXB0c29ja2V0Iiwic2V0TWF4U2VuZEZyYWdtZW50IiwiTWF0aCIsIm1pbiIsIk1BWF9UTFNfU0VORF9GUkFHTUVOVF9TSVpFIiwiY3VzdG9tQ29ubmVjdG9yIiwiY29ubmVjdE9wdHMiLCJjb25uZWN0SW5QYXJhbGxlbCIsImNvbm5lY3RJblNlcXVlbmNlIiwiZG5zIiwibG9va3VwIiwiZW5kIiwiY2FuY2VsVGltZXIiLCJjcmVhdGVSZXF1ZXN0VGltZXIiLCJyZXF1ZXN0VGltZXIiLCJjYW5jZWwiLCJuZXdTdGF0ZSIsImV4aXQiLCJlbnRlciIsImFwcGx5IiwiZ2V0RXZlbnRIYW5kbGVyIiwiZXZlbnROYW1lIiwiZXZlbnRzIiwiU0VOVF9UTFNTU0xORUdPVElBVElPTiIsIm1ham9yIiwibWlub3IiLCJidWlsZCIsImV4ZWMiLCJ2ZXJzaW9uIiwiUHJlbG9naW5QYXlsb2FkIiwiTnVtYmVyIiwic3ViYnVpbGQiLCJQUkVMT0dJTiIsInRvU3RyaW5nIiwiTG9naW43UGF5bG9hZCIsInZlcnNpb25zIiwiY2xpZW50UHJvZ1ZlciIsImNsaWVudFBpZCIsInBpZCIsImNvbm5lY3Rpb25JZCIsImNsaWVudFRpbWVab25lIiwiRGF0ZSIsImdldFRpbWV6b25lT2Zmc2V0IiwiY2xpZW50TGNpZCIsImZlZEF1dGgiLCJlY2hvIiwid29ya2Zsb3ciLCJmZWRBdXRoVG9rZW4iLCJzc3BpIiwiY3JlYXRlTlRMTVJlcXVlc3QiLCJob3N0bmFtZSIsIm9zIiwiaW5zdGFuY2UiLCJsaWJyYXJ5TmFtZSIsImluaXREYkZhdGFsIiwiTE9HSU43IiwidG9CdWZmZXIiLCJzZW5kRmVkQXV0aFRva2VuTWVzc2FnZSIsImFjY2Vzc1Rva2VuTGVuIiwiYnl0ZUxlbmd0aCIsIm9mZnNldCIsIndyaXRlVUludDMyTEUiLCJ3cml0ZSIsIkZFREFVVEhfVE9LRU4iLCJzZW5kSW5pdGlhbFNxbCIsIlNxbEJhdGNoUGF5bG9hZCIsImdldEluaXRpYWxTcWwiLCJjdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yIiwiTWVzc2FnZSIsIlNRTF9CQVRDSCIsIm91dGdvaW5nTWVzc2FnZVN0cmVhbSIsIlJlYWRhYmxlIiwicGlwZSIsInB1c2giLCJnZXRJc29sYXRpb25MZXZlbFRleHQiLCJqb2luIiwiZXhlY1NxbEJhdGNoIiwibWFrZVJlcXVlc3QiLCJzcWxUZXh0T3JQcm9jZWR1cmUiLCJleGVjU3FsIiwidmFsaWRhdGVQYXJhbWV0ZXJzIiwiZGF0YWJhc2VDb2xsYXRpb24iLCJwYXJhbWV0ZXJzIiwiVFlQRVMiLCJOVmFyQ2hhciIsIm91dHB1dCIsImxlbmd0aCIsInByZWNpc2lvbiIsInNjYWxlIiwibWFrZVBhcmFtc1BhcmFtZXRlciIsIlJQQ19SRVFVRVNUIiwiUnBjUmVxdWVzdFBheWxvYWQiLCJQcm9jZWR1cmVzIiwiU3BfRXhlY3V0ZVNxbCIsIm5ld0J1bGtMb2FkIiwidGFibGUiLCJjYWxsYmFja09yT3B0aW9ucyIsIkJ1bGtMb2FkIiwiZXhlY0J1bGtMb2FkIiwiYnVsa0xvYWQiLCJyb3dzIiwiZXhlY3V0aW9uU3RhcnRlZCIsIkJ1bGtMb2FkUGF5bG9hZCIsIm9uQ2FuY2VsIiwiUmVxdWVzdCIsImdldEJ1bGtJbnNlcnRTcWwiLCJjYW5jZWxlZCIsIkJVTEtfTE9BRCIsInByZXBhcmUiLCJJbnQiLCJwcmVwYXJpbmciLCJoYW5kbGUiLCJTcF9QcmVwYXJlIiwidW5wcmVwYXJlIiwiU3BfVW5wcmVwYXJlIiwiZXhlY3V0ZSIsImV4ZWN1dGVQYXJhbWV0ZXJzIiwibGVuIiwicGFyYW1ldGVyIiwidmFsaWRhdGUiLCJTcF9FeGVjdXRlIiwiY2FsbFByb2NlZHVyZSIsImJlZ2luVHJhbnNhY3Rpb24iLCJ0cmFuc2FjdGlvbiIsIlRyYW5zYWN0aW9uIiwiaXNvbGF0aW9uTGV2ZWxUb1RTUUwiLCJUUkFOU0FDVElPTl9NQU5BR0VSIiwiYmVnaW5QYXlsb2FkIiwiY29tbWl0VHJhbnNhY3Rpb24iLCJjb21taXRQYXlsb2FkIiwicm9sbGJhY2tUcmFuc2FjdGlvbiIsInJvbGxiYWNrUGF5bG9hZCIsInNhdmVUcmFuc2FjdGlvbiIsInNhdmVQYXlsb2FkIiwiY2IiLCJ1c2VTYXZlcG9pbnQiLCJjcnlwdG8iLCJyYW5kb21CeXRlcyIsInR4RG9uZSIsImRvbmUiLCJ0eEVyciIsInBhY2tldFR5cGUiLCJjb25uZWN0aW9uIiwicm93Q291bnQiLCJyc3QiLCJwYXlsb2FkU3RyZWFtIiwidW5waXBlIiwiaWdub3JlIiwicGF1c2VkIiwicmVzdW1lIiwicmVzZXRDb25uZWN0aW9uIiwicmVzZXRDb25uZWN0aW9uT25OZXh0UmVxdWVzdCIsIlNFTlRfQ0xJRU5UX1JFUVVFU1QiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwicmVzZXQiLCJSRUFEX1VOQ09NTUlUVEVEIiwiUkVQRUFUQUJMRV9SRUFEIiwiU0VSSUFMSVpBQkxFIiwiU05BUFNIT1QiLCJwcmVsb2dpblBheWxvYWQiLCJlbmNyeXB0aW9uU3RyaW5nIiwicmFjZSIsInN0YXJ0VGxzIiwicmVhZE1lc3NhZ2UiLCJpdGVyYXRvciIsIlN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJuZXh0IiwiY29uY2F0IiwicmV0dXJuIiwiY2xvc2VTaWduYWwiLCJyZXRyeVRpbWVyIiwiTG9naW43VG9rZW5IYW5kbGVyIiwidG9rZW5TdHJlYW1QYXJzZXIiLCJlbmRPZk1lc3NhZ2UiLCJsb2dpbkFja1JlY2VpdmVkIiwibG9naW5FcnJvciIsIm50bG1wYWNrZXQiLCJOVExNUmVzcG9uc2VQYXlsb2FkIiwiTlRMTUFVVEhfUEtUIiwiZmVkQXV0aEluZm9Ub2tlbiIsInN0c3VybCIsInNwbiIsInRva2VuU2NvcGUiLCJVUkwiLCJjcmVkZW50aWFscyIsIlVzZXJuYW1lUGFzc3dvcmRDcmVkZW50aWFsIiwibXNpQXJncyIsIk1hbmFnZWRJZGVudGl0eUNyZWRlbnRpYWwiLCJtYW5hZ2VkSWRlbnRpdHlDbGllbnRJZCIsIkRlZmF1bHRBenVyZUNyZWRlbnRpYWwiLCJDbGllbnRTZWNyZXRDcmVkZW50aWFsIiwidG9rZW5SZXNwb25zZSIsImdldFRva2VuIiwiQWdncmVnYXRlRXJyb3IiLCJJbml0aWFsU3FsVG9rZW5IYW5kbGVyIiwiZXJyb3JzIiwiaXNUcmFuc2llbnQiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiLCJwcm90b3R5cGUiLCJzb2NrZXRFcnJvciIsIlJlcXVlc3RUb2tlbkhhbmRsZXIiLCJvblBhcnNlckVycm9yIiwib25QYXVzZSIsIm9uUmVzdW1lIiwiU0VOVF9BVFRFTlRJT04iLCJwYXVzZSIsIm9uRW5kT2ZNZXNzYWdlIiwic3FsUmVxdWVzdCIsIm5leHRTdGF0ZSIsIkF0dGVudGlvblRva2VuSGFuZGxlciIsImF0dGVudGlvblJlY2VpdmVkIl0sInNvdXJjZXMiOlsiLi4vc3JjL2Nvbm5lY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnO1xuaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgZG5zIGZyb20gJ2Rucyc7XG5cbmltcG9ydCBjb25zdGFudHMgZnJvbSAnY29uc3RhbnRzJztcbmltcG9ydCB7IHR5cGUgU2VjdXJlQ29udGV4dE9wdGlvbnMgfSBmcm9tICd0bHMnO1xuXG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5cbmltcG9ydCB7XG4gIENsaWVudFNlY3JldENyZWRlbnRpYWwsXG4gIERlZmF1bHRBenVyZUNyZWRlbnRpYWwsXG4gIE1hbmFnZWRJZGVudGl0eUNyZWRlbnRpYWwsXG4gIFVzZXJuYW1lUGFzc3dvcmRDcmVkZW50aWFsXG59IGZyb20gJ0BhenVyZS9pZGVudGl0eSc7XG5pbXBvcnQgeyB0eXBlIEFjY2Vzc1Rva2VuLCB0eXBlIFRva2VuQ3JlZGVudGlhbCwgaXNUb2tlbkNyZWRlbnRpYWwgfSBmcm9tICdAYXp1cmUvY29yZS1hdXRoJztcblxuaW1wb3J0IEJ1bGtMb2FkLCB7IHR5cGUgT3B0aW9ucyBhcyBCdWxrTG9hZE9wdGlvbnMsIHR5cGUgQ2FsbGJhY2sgYXMgQnVsa0xvYWRDYWxsYmFjayB9IGZyb20gJy4vYnVsay1sb2FkJztcbmltcG9ydCBEZWJ1ZyBmcm9tICcuL2RlYnVnJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgb25jZSB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBpbnN0YW5jZUxvb2t1cCB9IGZyb20gJy4vaW5zdGFuY2UtbG9va3VwJztcbmltcG9ydCB7IFRyYW5zaWVudEVycm9yTG9va3VwIH0gZnJvbSAnLi90cmFuc2llbnQtZXJyb3ItbG9va3VwJztcbmltcG9ydCB7IFRZUEUgfSBmcm9tICcuL3BhY2tldCc7XG5pbXBvcnQgUHJlbG9naW5QYXlsb2FkIGZyb20gJy4vcHJlbG9naW4tcGF5bG9hZCc7XG5pbXBvcnQgTG9naW43UGF5bG9hZCBmcm9tICcuL2xvZ2luNy1wYXlsb2FkJztcbmltcG9ydCBOVExNUmVzcG9uc2VQYXlsb2FkIGZyb20gJy4vbnRsbS1wYXlsb2FkJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQgUnBjUmVxdWVzdFBheWxvYWQgZnJvbSAnLi9ycGNyZXF1ZXN0LXBheWxvYWQnO1xuaW1wb3J0IFNxbEJhdGNoUGF5bG9hZCBmcm9tICcuL3NxbGJhdGNoLXBheWxvYWQnO1xuaW1wb3J0IE1lc3NhZ2VJTyBmcm9tICcuL21lc3NhZ2UtaW8nO1xuaW1wb3J0IHsgUGFyc2VyIGFzIFRva2VuU3RyZWFtUGFyc2VyIH0gZnJvbSAnLi90b2tlbi90b2tlbi1zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uLCBJU09MQVRJT05fTEVWRUwsIGFzc2VydFZhbGlkSXNvbGF0aW9uTGV2ZWwgfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciwgUmVxdWVzdEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgY29ubmVjdEluUGFyYWxsZWwsIGNvbm5lY3RJblNlcXVlbmNlIH0gZnJvbSAnLi9jb25uZWN0b3InO1xuaW1wb3J0IHsgbmFtZSBhcyBsaWJyYXJ5TmFtZSB9IGZyb20gJy4vbGlicmFyeSc7XG5pbXBvcnQgeyB2ZXJzaW9ucyB9IGZyb20gJy4vdGRzLXZlcnNpb25zJztcbmltcG9ydCBNZXNzYWdlIGZyb20gJy4vbWVzc2FnZSc7XG5pbXBvcnQgeyB0eXBlIE1ldGFkYXRhIH0gZnJvbSAnLi9tZXRhZGF0YS1wYXJzZXInO1xuaW1wb3J0IHsgY3JlYXRlTlRMTVJlcXVlc3QgfSBmcm9tICcuL250bG0nO1xuaW1wb3J0IHsgQ29sdW1uRW5jcnlwdGlvbkF6dXJlS2V5VmF1bHRQcm92aWRlciB9IGZyb20gJy4vYWx3YXlzLWVuY3J5cHRlZC9rZXlzdG9yZS1wcm92aWRlci1henVyZS1rZXktdmF1bHQnO1xuXG5pbXBvcnQgeyB0eXBlIFBhcmFtZXRlciwgVFlQRVMgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBCdWxrTG9hZFBheWxvYWQsIHR5cGUgUm93IGFzIEJ1bGtMb2FkUm93IH0gZnJvbSAnLi9idWxrLWxvYWQtcGF5bG9hZCc7XG5pbXBvcnQgeyBDb2xsYXRpb24gfSBmcm9tICcuL2NvbGxhdGlvbic7XG5pbXBvcnQgUHJvY2VkdXJlcyBmcm9tICcuL3NwZWNpYWwtc3RvcmVkLXByb2NlZHVyZSc7XG5cbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJztcbmltcG9ydCB7IEF0dGVudGlvblRva2VuSGFuZGxlciwgSW5pdGlhbFNxbFRva2VuSGFuZGxlciwgTG9naW43VG9rZW5IYW5kbGVyLCBSZXF1ZXN0VG9rZW5IYW5kbGVyLCBUb2tlbkhhbmRsZXIgfSBmcm9tICcuL3Rva2VuL2hhbmRsZXInO1xuXG50eXBlIEJlZ2luVHJhbnNhY3Rpb25DYWxsYmFjayA9XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgdG8gc3RhcnQgdGhlIHRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQsXG4gICAqIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAgICogSWYgYW4gZXJyb3Igb2NjdXJyZWQgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAgICpcbiAgICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlciByZXF1ZXN0IHNob3VsZCBub3RcbiAgICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIElmIGFuIGVycm9yIG9jY3VycmVkLCBhbiBbW0Vycm9yXV0gb2JqZWN0IHdpdGggZGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbkRlc2NyaXB0b3IgQSBCdWZmZXIgdGhhdCBkZXNjcmliZSB0aGUgdHJhbnNhY3Rpb25cbiAgICovXG4gIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgdHJhbnNhY3Rpb25EZXNjcmlwdG9yPzogQnVmZmVyKSA9PiB2b2lkXG5cbnR5cGUgU2F2ZVRyYW5zYWN0aW9uQ2FsbGJhY2sgPVxuICAvKipcbiAgICogVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IHRvIHNldCBhIHNhdmVwb2ludCB3aXRoaW4gdGhlXG4gICAqIHRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQsIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAgICogSWYgYW4gZXJyb3Igb2NjdXJyZWQgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAgICpcbiAgICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlciByZXF1ZXN0IHNob3VsZCBub3RcbiAgICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIElmIGFuIGVycm9yIG9jY3VycmVkLCBhbiBbW0Vycm9yXV0gb2JqZWN0IHdpdGggZGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cbnR5cGUgQ29tbWl0VHJhbnNhY3Rpb25DYWxsYmFjayA9XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgdG8gY29tbWl0IHRoZSB0cmFuc2FjdGlvbiBoYXMgY29tcGxldGVkLFxuICAgKiBlaXRoZXIgc3VjY2Vzc2Z1bGx5IG9yIHdpdGggYW4gZXJyb3IuXG4gICAqIElmIGFuIGVycm9yIG9jY3VycmVkIHRoZW4gYGVycmAgd2lsbCBkZXNjcmliZSB0aGUgZXJyb3IuXG4gICAqXG4gICAqIEFzIG9ubHkgb25lIHJlcXVlc3QgYXQgYSB0aW1lIG1heSBiZSBleGVjdXRlZCBvbiBhIGNvbm5lY3Rpb24sIGFub3RoZXIgcmVxdWVzdCBzaG91bGQgbm90XG4gICAqIGJlIGluaXRpYXRlZCB1bnRpbCB0aGlzIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIGVyciBJZiBhbiBlcnJvciBvY2N1cnJlZCwgYW4gW1tFcnJvcl1dIG9iamVjdCB3aXRoIGRldGFpbHMgb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXG50eXBlIFJvbGxiYWNrVHJhbnNhY3Rpb25DYWxsYmFjayA9XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgdG8gcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGhhc1xuICAgKiBjb21wbGV0ZWQsIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAgICogSWYgYW4gZXJyb3Igb2NjdXJyZWQgdGhlbiBlcnIgd2lsbCBkZXNjcmliZSB0aGUgZXJyb3IuXG4gICAqXG4gICAqIEFzIG9ubHkgb25lIHJlcXVlc3QgYXQgYSB0aW1lIG1heSBiZSBleGVjdXRlZCBvbiBhIGNvbm5lY3Rpb24sIGFub3RoZXIgcmVxdWVzdCBzaG91bGQgbm90XG4gICAqIGJlIGluaXRpYXRlZCB1bnRpbCB0aGlzIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIGVyciBJZiBhbiBlcnJvciBvY2N1cnJlZCwgYW4gW1tFcnJvcl1dIG9iamVjdCB3aXRoIGRldGFpbHMgb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXG50eXBlIFJlc2V0Q2FsbGJhY2sgPVxuICAvKipcbiAgICogVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHJlc2V0IGhhcyBjb21wbGV0ZWQsXG4gICAqIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAgICpcbiAgICogSWYgYW4gZXJyb3Igb2NjdXJyZWQgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAgICpcbiAgICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlclxuICAgKiByZXF1ZXN0IHNob3VsZCBub3QgYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSBlcnIgSWYgYW4gZXJyb3Igb2NjdXJyZWQsIGFuIFtbRXJyb3JdXSBvYmplY3Qgd2l0aCBkZXRhaWxzIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xudHlwZSBUcmFuc2FjdGlvbkNhbGxiYWNrPFQgZXh0ZW5kcyAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPiA9XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgdG8gc3RhcnQgYSB0cmFuc2FjdGlvbiAob3IgY3JlYXRlIGEgc2F2ZXBvaW50LCBpblxuICAgKiB0aGUgY2FzZSBvZiBhIG5lc3RlZCB0cmFuc2FjdGlvbikgaGFzIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICAgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCwgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAgICogSWYgbm8gZXJyb3Igb2NjdXJyZWQsIHRoZSBjYWxsYmFjayBzaG91bGQgcGVyZm9ybSBpdHMgd29yayBhbmQgZXZlbnR1YWxseSBjYWxsXG4gICAqIGBkb25lYCB3aXRoIGFuIGVycm9yIG9yIG51bGwgKHRvIHRyaWdnZXIgYSB0cmFuc2FjdGlvbiByb2xsYmFjayBvciBhXG4gICAqIHRyYW5zYWN0aW9uIGNvbW1pdCkgYW5kIGFuIGFkZGl0aW9uYWwgY29tcGxldGlvbiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3RcbiAgICogdG8gcm9sbGJhY2sgb3IgY29tbWl0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQsIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAgICogQWRkaXRpb25hbCBhcmd1bWVudHMgZ2l2ZW4gdG8gYGRvbmVgIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdG8gdGhpcyBjYWxsYmFjay5cbiAgICpcbiAgICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlciByZXF1ZXN0IHNob3VsZCBub3RcbiAgICogYmUgaW5pdGlhdGVkIHVudGlsIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIGVyciBJZiBhbiBlcnJvciBvY2N1cnJlZCwgYW4gW1tFcnJvcl1dIG9iamVjdCB3aXRoIGRldGFpbHMgb2YgdGhlIGVycm9yLlxuICAgKiBAcGFyYW0gdHhEb25lIElmIG5vIGVycm9yIG9jY3VycmVkLCBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB0byBjb21taXQgb3Igcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCB0eERvbmU/OiBUcmFuc2FjdGlvbkRvbmU8VD4pID0+IHZvaWQ7XG5cbnR5cGUgVHJhbnNhY3Rpb25Eb25lQ2FsbGJhY2sgPSAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xudHlwZSBDYWxsYmFja1BhcmFtZXRlcnM8VCBleHRlbmRzIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgLi4uYXJnczogYW55W10pID0+IGFueT4gPSBUIGV4dGVuZHMgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCAuLi5hcmdzOiBpbmZlciBQKSA9PiBhbnkgPyBQIDogbmV2ZXI7XG5cbnR5cGUgVHJhbnNhY3Rpb25Eb25lPFQgZXh0ZW5kcyAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPiA9XG4gIC8qKlxuICAgKiBJZiBubyBlcnJvciBvY2N1cnJlZCwgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgdG8gY29tbWl0IG9yIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGVyciBJZiBhbiBlcnIgb2NjdXJyZWQsIGEgc3RyaW5nIHdpdGggZGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIGRvbmU6IFQsIC4uLmFyZ3M6IENhbGxiYWNrUGFyYW1ldGVyczxUPikgPT4gdm9pZDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBLRUVQX0FMSVZFX0lOSVRJQUxfREVMQVkgPSAzMCAqIDEwMDA7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfQ09OTkVDVF9USU1FT1VUID0gMTUgKiAxMDAwO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBERUZBVUxUX0NMSUVOVF9SRVFVRVNUX1RJTUVPVVQgPSAxNSAqIDEwMDA7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfQ0FOQ0VMX1RJTUVPVVQgPSA1ICogMTAwMDtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9DT05ORUNUX1JFVFJZX0lOVEVSVkFMID0gNTAwO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBERUZBVUxUX1BBQ0tFVF9TSVpFID0gNCAqIDEwMjQ7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfVEVYVFNJWkUgPSAyMTQ3NDgzNjQ3O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBERUZBVUxUX0RBVEVGSVJTVCA9IDc7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfUE9SVCA9IDE0MzM7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfVERTX1ZFUlNJT04gPSAnN180Jztcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9MQU5HVUFHRSA9ICd1c19lbmdsaXNoJztcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9EQVRFRk9STUFUID0gJ21keSc7XG5cbmludGVyZmFjZSBBenVyZUFjdGl2ZURpcmVjdG9yeU1zaUFwcFNlcnZpY2VBdXRoZW50aWNhdGlvbiB7XG4gIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZSc7XG4gIG9wdGlvbnM6IHtcbiAgICAvKipcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIGFuIEF6dXJlIGFwcCBzZXJ2aWNlIHVzaW5nIGEgc3BlY2lmaWMgY2xpZW50IGFjY291bnQsXG4gICAgICogeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgYGNsaWVudElkYCBhc3NvY2lhdGVkIHdpdGggeW91ciBjcmVhdGVkIGlkZW50aXR5LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBvcHRpb25hbCBmb3IgcmV0cmlldmluZyBhIHRva2VuIGZyb20gQXp1cmUgd2ViIGFwcCBzZXJ2aWNlLlxuICAgICAqL1xuICAgIGNsaWVudElkPzogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lWbUF1dGhlbnRpY2F0aW9uIHtcbiAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJztcbiAgb3B0aW9uczoge1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3YW50IHRvIGNvbm5lY3QgdXNpbmcgYSBzcGVjaWZpYyBjbGllbnQgYWNjb3VudCxcbiAgICAgKiB5b3UgbmVlZCB0byBwcm92aWRlIHRoZSBgY2xpZW50SWRgIGFzc29jaWF0ZWQgd2l0aCB5b3VyIGNyZWF0ZWQgaWRlbnRpdHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG9wdGlvbmFsIGZvciByZXRyaWV2aW5nIGEgdG9rZW4uXG4gICAgICovXG4gICAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBBenVyZUFjdGl2ZURpcmVjdG9yeURlZmF1bHRBdXRoZW50aWNhdGlvbiB7XG4gIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnO1xuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogSWYgeW91IHdhbnQgdG8gY29ubmVjdCB1c2luZyBhIHNwZWNpZmljIGNsaWVudCBhY2NvdW50LFxuICAgICAqIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIGBjbGllbnRJZGAgYXNzb2NpYXRlZCB3aXRoIHlvdXIgY3JlYXRlZCBpZGVudGl0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgb3B0aW9uYWwgZm9yIHJldHJpZXZpbmcgYSB0b2tlbi5cbiAgICAgKi9cbiAgICBjbGllbnRJZD86IHN0cmluZztcbiAgfTtcbn1cblxuXG5pbnRlcmZhY2UgQXp1cmVBY3RpdmVEaXJlY3RvcnlBY2Nlc3NUb2tlbkF1dGhlbnRpY2F0aW9uIHtcbiAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuJztcbiAgb3B0aW9uczoge1xuICAgIC8qKlxuICAgICAqIEEgdXNlciBuZWVkcyB0byBwcm92aWRlIGEgYHRva2VuYCB3aGljaCB0aGV5IHJldHJpZXZlZCBlbHNld2hlcmVcbiAgICAgKiB0byBmb3JtIHRoZSBjb25uZWN0aW9uLlxuICAgICAqL1xuICAgIHRva2VuOiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBBenVyZUFjdGl2ZURpcmVjdG9yeVBhc3N3b3JkQXV0aGVudGljYXRpb24ge1xuICB0eXBlOiAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1wYXNzd29yZCc7XG4gIG9wdGlvbnM6IHtcbiAgICAvKipcbiAgICAgKiBBIHVzZXIgbmVlZHMgdG8gcHJvdmlkZSBhIGB1c2VyTmFtZWAgYXNzb2NpYXRlZCB3aXRoIHRoZWlyIGFjY291bnQuXG4gICAgICovXG4gICAgdXNlck5hbWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgdXNlciBuZWVkcyB0byBwcm92aWRlIGEgYHBhc3N3b3JkYCBhc3NvY2lhdGVkIHdpdGggdGhlaXIgYWNjb3VudC5cbiAgICAgKi9cbiAgICBwYXNzd29yZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSBjbGllbnQgaWQgdG8gdXNlLlxuICAgICAqL1xuICAgIGNsaWVudElkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBwYXJhbWV0ZXIgZm9yIHNwZWNpZmljIEF6dXJlIHRlbmFudCBJRFxuICAgICAqL1xuICAgIHRlbmFudElkOiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBBenVyZUFjdGl2ZURpcmVjdG9yeVNlcnZpY2VQcmluY2lwYWxTZWNyZXQge1xuICB0eXBlOiAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnO1xuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogQXBwbGljYXRpb24gKGBjbGllbnRgKSBJRCBmcm9tIHlvdXIgcmVnaXN0ZXJlZCBBenVyZSBhcHBsaWNhdGlvblxuICAgICAqL1xuICAgIGNsaWVudElkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIGNyZWF0ZWQgYGNsaWVudCBzZWNyZXRgIGZvciB0aGlzIHJlZ2lzdGVyZWQgQXp1cmUgYXBwbGljYXRpb25cbiAgICAgKi9cbiAgICBjbGllbnRTZWNyZXQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEaXJlY3RvcnkgKGB0ZW5hbnRgKSBJRCBmcm9tIHlvdXIgcmVnaXN0ZXJlZCBBenVyZSBhcHBsaWNhdGlvblxuICAgICAqL1xuICAgIHRlbmFudElkOiBzdHJpbmc7XG4gIH07XG59XG5cbi8qKiBTdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIHRoZSBvcHRpb25zIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byBhdXRoZW50aWNhdGUgdGhlIFRlZGlvdXMuSlMgaW5zdGFuY2Ugd2l0aCBhbiBgQGF6dXJlL2lkZW50aXR5YCB0b2tlbiBjcmVkZW50aWFsLiAqL1xuaW50ZXJmYWNlIFRva2VuQ3JlZGVudGlhbEF1dGhlbnRpY2F0aW9uIHtcbiAgLyoqIFVuaXF1ZSBkZXNpZ25hdG9yIGZvciB0aGUgdHlwZSBvZiBhdXRoZW50aWNhdGlvbiB0byBiZSB1c2VkLiAqL1xuICB0eXBlOiAndG9rZW4tY3JlZGVudGlhbCc7XG4gIC8qKiBTZXQgb2YgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQgb3IgYWxsb3dlZCB3aXRoIHRoaXMgYXV0aGVudGljYXRpb24gdHlwZS4gKi9cbiAgb3B0aW9uczoge1xuICAgIC8qKiBDcmVkZW50aWFsIG9iamVjdCB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGUgcmVzb3VyY2UuICovXG4gICAgY3JlZGVudGlhbDogVG9rZW5DcmVkZW50aWFsO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgTnRsbUF1dGhlbnRpY2F0aW9uIHtcbiAgdHlwZTogJ250bG0nO1xuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogVXNlciBuYW1lIGZyb20geW91ciB3aW5kb3dzIGFjY291bnQuXG4gICAgICovXG4gICAgdXNlck5hbWU6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXNzd29yZCBmcm9tIHlvdXIgd2luZG93cyBhY2NvdW50LlxuICAgICAqL1xuICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogT25jZSB5b3Ugc2V0IGRvbWFpbiBmb3IgbnRsbSBhdXRoZW50aWNhdGlvbiB0eXBlLCBkcml2ZXIgd2lsbCBjb25uZWN0IHRvIFNRTCBTZXJ2ZXIgdXNpbmcgZG9tYWluIGxvZ2luLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGZvcm1pbmcgYSBjb25uZWN0aW9uIHVzaW5nIG50bG0gdHlwZVxuICAgICAqL1xuICAgIGRvbWFpbjogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgRGVmYXVsdEF1dGhlbnRpY2F0aW9uIHtcbiAgdHlwZTogJ2RlZmF1bHQnO1xuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogVXNlciBuYW1lIHRvIHVzZSBmb3Igc3FsIHNlcnZlciBsb2dpbi5cbiAgICAgKi9cbiAgICB1c2VyTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBQYXNzd29yZCB0byB1c2UgZm9yIHNxbCBzZXJ2ZXIgbG9naW4uXG4gICAgICovXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmludGVyZmFjZSBFcnJvcldpdGhDb2RlIGV4dGVuZHMgRXJyb3Ige1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBDb25uZWN0aW9uQXV0aGVudGljYXRpb24gPSBEZWZhdWx0QXV0aGVudGljYXRpb24gfCBOdGxtQXV0aGVudGljYXRpb24gfCBUb2tlbkNyZWRlbnRpYWxBdXRoZW50aWNhdGlvbiB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5UGFzc3dvcmRBdXRoZW50aWNhdGlvbiB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5TXNpQXBwU2VydmljZUF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lWbUF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlBY2Nlc3NUb2tlbkF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlUHJpbmNpcGFsU2VjcmV0IHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlEZWZhdWx0QXV0aGVudGljYXRpb247XG5cbmludGVyZmFjZSBJbnRlcm5hbENvbm5lY3Rpb25Db25maWcge1xuICBzZXJ2ZXI6IHN0cmluZztcbiAgYXV0aGVudGljYXRpb246IENvbm5lY3Rpb25BdXRoZW50aWNhdGlvbjtcbiAgb3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zIHtcbiAgYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3I6IGJvb2xlYW47XG4gIGFwcE5hbWU6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgY2FtZWxDYXNlQ29sdW1uczogYm9vbGVhbjtcbiAgY2FuY2VsVGltZW91dDogbnVtYmVyO1xuICBjb2x1bW5FbmNyeXB0aW9uS2V5Q2FjaGVUVEw6IG51bWJlcjtcbiAgY29sdW1uRW5jcnlwdGlvblNldHRpbmc6IGJvb2xlYW47XG4gIGNvbHVtbk5hbWVSZXBsYWNlcjogdW5kZWZpbmVkIHwgKChjb2xOYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIG1ldGFkYXRhOiBNZXRhZGF0YSkgPT4gc3RyaW5nKTtcbiAgY29ubmVjdGlvblJldHJ5SW50ZXJ2YWw6IG51bWJlcjtcbiAgY29ubmVjdG9yOiB1bmRlZmluZWQgfCAoKCkgPT4gUHJvbWlzZTxuZXQuU29ja2V0Pik7XG4gIGNvbm5lY3RUaW1lb3V0OiBudW1iZXI7XG4gIGNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbDogdHlwZW9mIElTT0xBVElPTl9MRVZFTFtrZXlvZiB0eXBlb2YgSVNPTEFUSU9OX0xFVkVMXTtcbiAgY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzOiBTZWN1cmVDb250ZXh0T3B0aW9ucztcbiAgZGF0YWJhc2U6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgZGF0ZWZpcnN0OiBudW1iZXI7XG4gIGRhdGVGb3JtYXQ6IHN0cmluZztcbiAgZGVidWc6IHtcbiAgICBkYXRhOiBib29sZWFuO1xuICAgIHBhY2tldDogYm9vbGVhbjtcbiAgICBwYXlsb2FkOiBib29sZWFuO1xuICAgIHRva2VuOiBib29sZWFuO1xuICB9O1xuICBlbmFibGVBbnNpTnVsbDogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZUFuc2lOdWxsRGVmYXVsdDogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZUFuc2lQYWRkaW5nOiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlQW5zaVdhcm5pbmdzOiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlQXJpdGhBYm9ydDogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsOiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdDogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zOiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQ6IG51bGwgfCBib29sZWFuO1xuICBlbmFibGVRdW90ZWRJZGVudGlmaWVyOiBudWxsIHwgYm9vbGVhbjtcbiAgZW5jcnlwdDogc3RyaW5nIHwgYm9vbGVhbjtcbiAgZW5jcnlwdGlvbktleVN0b3JlUHJvdmlkZXJzOiBLZXlTdG9yZVByb3ZpZGVyTWFwIHwgdW5kZWZpbmVkO1xuICBmYWxsYmFja1RvRGVmYXVsdERiOiBib29sZWFuO1xuICBpbnN0YW5jZU5hbWU6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgaXNvbGF0aW9uTGV2ZWw6IHR5cGVvZiBJU09MQVRJT05fTEVWRUxba2V5b2YgdHlwZW9mIElTT0xBVElPTl9MRVZFTF07XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIGxvY2FsQWRkcmVzczogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICBtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnM6IG51bWJlcjtcbiAgbXVsdGlTdWJuZXRGYWlsb3ZlcjogYm9vbGVhbjtcbiAgcGFja2V0U2l6ZTogbnVtYmVyO1xuICBwb3J0OiB1bmRlZmluZWQgfCBudW1iZXI7XG4gIHJlYWRPbmx5SW50ZW50OiBib29sZWFuO1xuICByZXF1ZXN0VGltZW91dDogbnVtYmVyO1xuICByb3dDb2xsZWN0aW9uT25Eb25lOiBib29sZWFuO1xuICByb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbjogYm9vbGVhbjtcbiAgc2VydmVyTmFtZTogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICBzZXJ2ZXJTdXBwb3J0c0NvbHVtbkVuY3J5cHRpb246IGJvb2xlYW47XG4gIHRkc1ZlcnNpb246IHN0cmluZztcbiAgdGV4dHNpemU6IG51bWJlcjtcbiAgdHJ1c3RlZFNlcnZlck5hbWVBRTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB0cnVzdFNlcnZlckNlcnRpZmljYXRlOiBib29sZWFuO1xuICB1c2VDb2x1bW5OYW1lczogYm9vbGVhbjtcbiAgdXNlVVRDOiBib29sZWFuO1xuICB3b3Jrc3RhdGlvbklkOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gIGxvd2VyQ2FzZUd1aWRzOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgS2V5U3RvcmVQcm92aWRlck1hcCB7XG4gIFtrZXk6IHN0cmluZ106IENvbHVtbkVuY3J5cHRpb25BenVyZUtleVZhdWx0UHJvdmlkZXI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuaW50ZXJmYWNlIFN0YXRlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBlbnRlcj8odGhpczogQ29ubmVjdGlvbik6IHZvaWQ7XG4gIGV4aXQ/KHRoaXM6IENvbm5lY3Rpb24sIG5ld1N0YXRlOiBTdGF0ZSk6IHZvaWQ7XG4gIGV2ZW50czoge1xuICAgIHNvY2tldEVycm9yPyh0aGlzOiBDb25uZWN0aW9uLCBlcnI6IEVycm9yKTogdm9pZDtcbiAgICBtZXNzYWdlPyh0aGlzOiBDb25uZWN0aW9uLCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZDtcbiAgfTtcbn1cblxudHlwZSBBdXRoZW50aWNhdGlvbiA9IERlZmF1bHRBdXRoZW50aWNhdGlvbiB8XG4gIE50bG1BdXRoZW50aWNhdGlvbiB8XG4gIFRva2VuQ3JlZGVudGlhbEF1dGhlbnRpY2F0aW9uIHxcbiAgQXp1cmVBY3RpdmVEaXJlY3RvcnlQYXNzd29yZEF1dGhlbnRpY2F0aW9uIHxcbiAgQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lBcHBTZXJ2aWNlQXV0aGVudGljYXRpb24gfFxuICBBenVyZUFjdGl2ZURpcmVjdG9yeU1zaVZtQXV0aGVudGljYXRpb24gfFxuICBBenVyZUFjdGl2ZURpcmVjdG9yeUFjY2Vzc1Rva2VuQXV0aGVudGljYXRpb24gfFxuICBBenVyZUFjdGl2ZURpcmVjdG9yeVNlcnZpY2VQcmluY2lwYWxTZWNyZXQgfFxuICBBenVyZUFjdGl2ZURpcmVjdG9yeURlZmF1bHRBdXRoZW50aWNhdGlvbjtcblxudHlwZSBBdXRoZW50aWNhdGlvblR5cGUgPSBBdXRoZW50aWNhdGlvblsndHlwZSddO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEhvc3RuYW1lIHRvIGNvbm5lY3QgdG8uXG4gICAqL1xuICBzZXJ2ZXI6IHN0cmluZztcbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZm9ybWluZyB0aGUgY29ubmVjdGlvbi5cbiAgICovXG4gIG9wdGlvbnM/OiBDb25uZWN0aW9uT3B0aW9ucztcbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgb3B0aW9ucyBmb3IgY29ubmVjdGlvbi5cbiAgICovXG4gIGF1dGhlbnRpY2F0aW9uPzogQXV0aGVudGljYXRpb25PcHRpb25zO1xufVxuXG5pbnRlcmZhY2UgRGVidWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbGxpbmcgd2hldGhlciBbW2RlYnVnXV0gZXZlbnRzIHdpbGwgYmUgZW1pdHRlZCB3aXRoIHRleHQgZGVzY3JpYmluZyBwYWNrZXQgZGF0YSBkZXRhaWxzXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgZGF0YTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbGxpbmcgd2hldGhlciBbW2RlYnVnXV0gZXZlbnRzIHdpbGwgYmUgZW1pdHRlZCB3aXRoIHRleHQgZGVzY3JpYmluZyBwYWNrZXQgZGV0YWlsc1xuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIHBhY2tldDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbGxpbmcgd2hldGhlciBbW2RlYnVnXV0gZXZlbnRzIHdpbGwgYmUgZW1pdHRlZCB3aXRoIHRleHQgZGVzY3JpYmluZyBwYWNrZXQgcGF5bG9hZCBkZXRhaWxzXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgcGF5bG9hZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbGxpbmcgd2hldGhlciBbW2RlYnVnXV0gZXZlbnRzIHdpbGwgYmUgZW1pdHRlZCB3aXRoIHRleHQgZGVzY3JpYmluZyB0b2tlbiBzdHJlYW0gdG9rZW5zXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgdG9rZW46IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBdXRoZW50aWNhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kLCB2YWxpZCB0eXBlcyBhcmUgYGRlZmF1bHRgLCBgbnRsbWAsXG4gICAqIGBhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkYCwgYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuYCxcbiAgICogYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtYCwgYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlYCxcbiAgICogYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdGBcbiAgICogb3IgYGF6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0YFxuICAgKi9cbiAgdHlwZT86IEF1dGhlbnRpY2F0aW9uVHlwZTtcbiAgLyoqXG4gICAqIERpZmZlcmVudCBvcHRpb25zIGZvciBhdXRoZW50aWNhdGlvbiB0eXBlczpcbiAgICpcbiAgICogKiBgZGVmYXVsdGA6IFtbRGVmYXVsdEF1dGhlbnRpY2F0aW9uLm9wdGlvbnNdXVxuICAgKiAqIGBudGxtYCA6W1tOdGxtQXV0aGVudGljYXRpb25dXVxuICAgKiAqIGB0b2tlbi1jcmVkZW50aWFsYDogW1tDcmVkZW50aWFsQ2hhaW5BdXRoZW50aWNhdGlvbi5vcHRpb25zXV1cbiAgICogKiBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1wYXNzd29yZGAgOiBbW0F6dXJlQWN0aXZlRGlyZWN0b3J5UGFzc3dvcmRBdXRoZW50aWNhdGlvbi5vcHRpb25zXV1cbiAgICogKiBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW5gIDogW1tBenVyZUFjdGl2ZURpcmVjdG9yeUFjY2Vzc1Rva2VuQXV0aGVudGljYXRpb24ub3B0aW9uc11dXG4gICAqICogYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtYCA6IFtbQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lWbUF1dGhlbnRpY2F0aW9uLm9wdGlvbnNdXVxuICAgKiAqIGBhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZWAgOiBbW0F6dXJlQWN0aXZlRGlyZWN0b3J5TXNpQXBwU2VydmljZUF1dGhlbnRpY2F0aW9uLm9wdGlvbnNdXVxuICAgKiAqIGBhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2UtcHJpbmNpcGFsLXNlY3JldGAgOiBbW0F6dXJlQWN0aXZlRGlyZWN0b3J5U2VydmljZVByaW5jaXBhbFNlY3JldC5vcHRpb25zXV1cbiAgICogKiBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1kZWZhdWx0YCA6IFtbQXp1cmVBY3RpdmVEaXJlY3RvcnlEZWZhdWx0QXV0aGVudGljYXRpb24ub3B0aW9uc11dXG4gICAqL1xuICBvcHRpb25zPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRvIHJvbGxiYWNrIGEgdHJhbnNhY3Rpb24gYXV0b21hdGljYWxseSBpZiBhbnkgZXJyb3IgaXMgZW5jb3VudGVyZWRcbiAgICogZHVyaW5nIHRoZSBnaXZlbiB0cmFuc2FjdGlvbidzIGV4ZWN1dGlvbi4gVGhpcyBzZXRzIHRoZSB2YWx1ZSBmb3IgYFNFVCBYQUNUX0FCT1JUYCBkdXJpbmcgdGhlXG4gICAqIGluaXRpYWwgU1FMIHBoYXNlIG9mIGEgY29ubmVjdGlvbiBbZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvc3FsL3Qtc3FsL3N0YXRlbWVudHMvc2V0LXhhY3QtYWJvcnQtdHJhbnNhY3Qtc3FsKS5cbiAgICovXG4gIGFib3J0VHJhbnNhY3Rpb25PbkVycm9yPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQXBwbGljYXRpb24gbmFtZSB1c2VkIGZvciBpZGVudGlmeWluZyBhIHNwZWNpZmljIGFwcGxpY2F0aW9uIGluIHByb2ZpbGluZywgbG9nZ2luZyBvciB0cmFjaW5nIHRvb2xzIG9mIFNRTFNlcnZlci5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBUZWRpb3VzYClcbiAgICovXG4gIGFwcE5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbGxpbmcgd2hldGhlciB0aGUgY29sdW1uIG5hbWVzIHJldHVybmVkIHdpbGwgaGF2ZSB0aGUgZmlyc3QgbGV0dGVyIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlXG4gICAqIChgdHJ1ZWApIG9yIG5vdC4gVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIGlmIHlvdSBwcm92aWRlIGEgW1tjb2x1bW5OYW1lUmVwbGFjZXJdXS5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApLlxuICAgKi9cbiAgY2FtZWxDYXNlQ29sdW1ucz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgW1tSZXF1ZXN0LmNhbmNlbF1dIChhYm9ydCkgb2YgYSByZXF1ZXN0IGlzIGNvbnNpZGVyZWQgZmFpbGVkXG4gICAqXG4gICAqIChkZWZhdWx0OiBgNTAwMGApLlxuICAgKi9cbiAgY2FuY2VsVGltZW91dD86IG51bWJlcjtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB3aXRoIHBhcmFtZXRlcnMgYChjb2x1bW5OYW1lLCBpbmRleCwgY29sdW1uTWV0YURhdGEpYCBhbmQgcmV0dXJuaW5nIGEgc3RyaW5nLiBJZiBwcm92aWRlZCxcbiAgICogdGhpcyB3aWxsIGJlIGNhbGxlZCBvbmNlIHBlciBjb2x1bW4gcGVyIHJlc3VsdC1zZXQuIFRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgU1FMLXByb3ZpZGVkXG4gICAqIGNvbHVtbiBuYW1lIG9uIHJvdyBhbmQgbWV0YSBkYXRhIG9iamVjdHMuIFRoaXMgYWxsb3dzIHlvdSB0byBkeW5hbWljYWxseSBjb252ZXJ0IGJldHdlZW4gbmFtaW5nIGNvbnZlbnRpb25zLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYG51bGxgKVxuICAgKi9cbiAgY29sdW1uTmFtZVJlcGxhY2VyPzogKGNvbE5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlciwgbWV0YWRhdGE6IE1ldGFkYXRhKSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBtaWxsaXNlY29uZHMgYmVmb3JlIHJldHJ5aW5nIHRvIGVzdGFibGlzaCBjb25uZWN0aW9uLCBpbiBjYXNlIG9mIHRyYW5zaWVudCBmYWlsdXJlLlxuICAgKlxuICAgKiAoZGVmYXVsdDpgNTAwYClcbiAgICovXG4gIGNvbm5lY3Rpb25SZXRyeUludGVydmFsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gY29ubmVjdG9yIGZhY3RvcnkgbWV0aG9kLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYHVuZGVmaW5lZGApXG4gICAqL1xuICBjb25uZWN0b3I/OiAoKSA9PiBQcm9taXNlPG5ldC5Tb2NrZXQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIGF0dGVtcHQgdG8gY29ubmVjdCBpcyBjb25zaWRlcmVkIGZhaWxlZFxuICAgKlxuICAgKiAoZGVmYXVsdDogYDE1MDAwYCkuXG4gICAqL1xuICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgaXNvbGF0aW9uIGxldmVsIGZvciBuZXcgY29ubmVjdGlvbnMuIEFsbCBvdXQtb2YtdHJhbnNhY3Rpb24gcXVlcmllcyBhcmUgZXhlY3V0ZWQgd2l0aCB0aGlzIHNldHRpbmcuXG4gICAqXG4gICAqIFRoZSBpc29sYXRpb24gbGV2ZWxzIGFyZSBhdmFpbGFibGUgZnJvbSBgcmVxdWlyZSgndGVkaW91cycpLklTT0xBVElPTl9MRVZFTGAuXG4gICAqICogYFJFQURfVU5DT01NSVRURURgXG4gICAqICogYFJFQURfQ09NTUlUVEVEYFxuICAgKiAqIGBSRVBFQVRBQkxFX1JFQURgXG4gICAqICogYFNFUklBTElaQUJMRWBcbiAgICogKiBgU05BUFNIT1RgXG4gICAqXG4gICAqIChkZWZhdWx0OiBgUkVBRF9DT01NSVRURURgKS5cbiAgICovXG4gIGNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hlbiBlbmNyeXB0aW9uIGlzIHVzZWQsIGFuIG9iamVjdCBtYXkgYmUgc3VwcGxpZWQgdGhhdCB3aWxsIGJlIHVzZWRcbiAgICogZm9yIHRoZSBmaXJzdCBhcmd1bWVudCB3aGVuIGNhbGxpbmcgW2B0bHMuY3JlYXRlU2VjdXJlQ29udGV4dGBdKGh0dHBzOi8vbm9kZWpzLm9yZy9kb2NzL2xhdGVzdC9hcGkvdGxzLmh0bWwjdGxzY3JlYXRlc2VjdXJlY29udGV4dG9wdGlvbnMpLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYHt9YClcbiAgICovXG4gIGNyeXB0b0NyZWRlbnRpYWxzRGV0YWlscz86IFNlY3VyZUNvbnRleHRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBEYXRhYmFzZSB0byBjb25uZWN0IHRvIChkZWZhdWx0OiBkZXBlbmRlbnQgb24gc2VydmVyIGNvbmZpZ3VyYXRpb24pLlxuICAgKi9cbiAgZGF0YWJhc2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayB0byBhIG51bWJlciBmcm9tIDEgdGhyb3VnaCA3LlxuICAgKi9cbiAgZGF0ZWZpcnN0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgcG9zaXRpb24gb2YgbW9udGgsIGRheSBhbmQgeWVhciBpbiB0ZW1wb3JhbCBkYXRhdHlwZXMuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgbWR5YClcbiAgICovXG4gIGRhdGVGb3JtYXQ/OiBzdHJpbmc7XG5cbiAgZGVidWc/OiBEZWJ1Z09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbHMgdGhlIHdheSBudWxsIHZhbHVlcyBzaG91bGQgYmUgdXNlZCBkdXJpbmcgY29tcGFyaXNvbiBvcGVyYXRpb24uXG4gICAqXG4gICAqIChkZWZhdWx0OiBgdHJ1ZWApXG4gICAqL1xuICBlbmFibGVBbnNpTnVsbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIGBTRVQgQU5TSV9OVUxMX0RGTFRfT04gT05gIHdpbGwgYmUgc2V0IGluIHRoZSBpbml0aWFsIHNxbC4gVGhpcyBtZWFucyBuZXcgY29sdW1ucyB3aWxsIGJlXG4gICAqIG51bGxhYmxlIGJ5IGRlZmF1bHQuIFNlZSB0aGUgW1QtU1FMIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODczNzUuYXNweClcbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYCkuXG4gICAqL1xuICBlbmFibGVBbnNpTnVsbERlZmF1bHQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIGNvbnRyb2xzIGlmIHBhZGRpbmcgc2hvdWxkIGJlIGFwcGxpZWQgZm9yIHZhbHVlcyBzaG9ydGVyIHRoYW4gdGhlIHNpemUgb2YgZGVmaW5lZCBjb2x1bW4uXG4gICAqXG4gICAqIChkZWZhdWx0OiBgdHJ1ZWApXG4gICAqL1xuICBlbmFibGVBbnNpUGFkZGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIFNRTCBTZXJ2ZXIgd2lsbCBmb2xsb3cgSVNPIHN0YW5kYXJkIGJlaGF2aW9yIGR1cmluZyB2YXJpb3VzIGVycm9yIGNvbmRpdGlvbnMuIEZvciBkZXRhaWxzLFxuICAgKiBzZWUgW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9zdGF0ZW1lbnRzL3NldC1hbnNpLXdhcm5pbmdzLXRyYW5zYWN0LXNxbClcbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYClcbiAgICovXG4gIGVuYWJsZUFuc2lXYXJuaW5ncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuZHMgYSBxdWVyeSB3aGVuIGFuIG92ZXJmbG93IG9yIGRpdmlkZS1ieS16ZXJvIGVycm9yIG9jY3VycyBkdXJpbmcgcXVlcnkgZXhlY3V0aW9uLlxuICAgKiBTZWUgW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9zdGF0ZW1lbnRzL3NldC1hcml0aGFib3J0LXRyYW5zYWN0LXNxbD92aWV3PXNxbC1zZXJ2ZXItMjAxNylcbiAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYClcbiAgICovXG4gIGVuYWJsZUFyaXRoQWJvcnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIGRldGVybWluZXMgaWYgY29uY2F0ZW5hdGlvbiB3aXRoIE5VTEwgc2hvdWxkIHJlc3VsdCBpbiBOVUxMIG9yIGVtcHR5IHN0cmluZyB2YWx1ZSwgbW9yZSBkZXRhaWxzIGluXG4gICAqIFtkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9zcWwvdC1zcWwvc3RhdGVtZW50cy9zZXQtY29uY2F0LW51bGwteWllbGRzLW51bGwtdHJhbnNhY3Qtc3FsKVxuICAgKlxuICAgKiAoZGVmYXVsdDogYHRydWVgKVxuICAgKi9cbiAgZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIGNvbnRyb2xzIHdoZXRoZXIgY3Vyc29yIHNob3VsZCBiZSBjbG9zZWQsIGlmIHRoZSB0cmFuc2FjdGlvbiBvcGVuaW5nIGl0IGdldHMgY29tbWl0dGVkIG9yIHJvbGxlZFxuICAgKiBiYWNrLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYG51bGxgKVxuICAgKi9cbiAgZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdD86IGJvb2xlYW4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIHNldHMgdGhlIGNvbm5lY3Rpb24gdG8gZWl0aGVyIGltcGxpY2l0IG9yIGF1dG9jb21taXQgdHJhbnNhY3Rpb24gbW9kZS5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBlbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGZhbHNlLCBlcnJvciBpcyBub3QgZ2VuZXJhdGVkIGR1cmluZyBsb3NzIG9mIHByZWNpc2lvbi5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBlbmFibGVOdW1lcmljUm91bmRhYm9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIGNoYXJhY3RlcnMgZW5jbG9zZWQgaW4gc2luZ2xlIHF1b3RlcyBhcmUgdHJlYXRlZCBhcyBsaXRlcmFscyBhbmQgdGhvc2UgZW5jbG9zZWQgZG91YmxlIHF1b3RlcyBhcmUgdHJlYXRlZCBhcyBpZGVudGlmaWVycy5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYClcbiAgICovXG4gIGVuYWJsZVF1b3RlZElkZW50aWZpZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIHN0cmluZyB2YWx1ZSB0aGF0IGNhbiBiZSBvbmx5IHNldCB0byAnc3RyaWN0Jywgd2hpY2ggaW5kaWNhdGVzIHRoZSB1c2FnZSBURFMgOC4wIHByb3RvY29sLiBPdGhlcndpc2UsXG4gICAqIGEgYm9vbGVhbiBkZXRlcm1pbmluZyB3aGV0aGVyIG9yIG5vdCB0aGUgY29ubmVjdGlvbiB3aWxsIGJlIGVuY3J5cHRlZC5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYClcbiAgICovXG4gIGVuY3J5cHQ/OiBzdHJpbmcgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCBpZiB0aGUgZGF0YWJhc2UgcmVxdWVzdGVkIGJ5IFtbZGF0YWJhc2VdXSBjYW5ub3QgYmUgYWNjZXNzZWQsXG4gICAqIHRoZSBjb25uZWN0aW9uIHdpbGwgZmFpbCB3aXRoIGFuIGVycm9yLiBIb3dldmVyLCBpZiBbW2ZhbGxiYWNrVG9EZWZhdWx0RGJdXSBpc1xuICAgKiBzZXQgdG8gYHRydWVgLCB0aGVuIHRoZSB1c2VyJ3MgZGVmYXVsdCBkYXRhYmFzZSB3aWxsIGJlIHVzZWQgaW5zdGVhZFxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIGZhbGxiYWNrVG9EZWZhdWx0RGI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UgbmFtZSB0byBjb25uZWN0IHRvLlxuICAgKiBUaGUgU1FMIFNlcnZlciBCcm93c2VyIHNlcnZpY2UgbXVzdCBiZSBydW5uaW5nIG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIsXG4gICAqIGFuZCBVRFAgcG9ydCAxNDM0IG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgbXVzdCBiZSByZWFjaGFibGUuXG4gICAqXG4gICAqIChubyBkZWZhdWx0KVxuICAgKlxuICAgKiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBbW3BvcnRdXS5cbiAgICovXG4gIGluc3RhbmNlTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgaXNvbGF0aW9uIGxldmVsIHRoYXQgdHJhbnNhY3Rpb25zIHdpbGwgYmUgcnVuIHdpdGguXG4gICAqXG4gICAqIFRoZSBpc29sYXRpb24gbGV2ZWxzIGFyZSBhdmFpbGFibGUgZnJvbSBgcmVxdWlyZSgndGVkaW91cycpLklTT0xBVElPTl9MRVZFTGAuXG4gICAqICogYFJFQURfVU5DT01NSVRURURgXG4gICAqICogYFJFQURfQ09NTUlUVEVEYFxuICAgKiAqIGBSRVBFQVRBQkxFX1JFQURgXG4gICAqICogYFNFUklBTElaQUJMRWBcbiAgICogKiBgU05BUFNIT1RgXG4gICAqXG4gICAqIChkZWZhdWx0OiBgUkVBRF9DT01NSVRURURgKS5cbiAgICovXG4gIGlzb2xhdGlvbkxldmVsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGxhbmd1YWdlIGVudmlyb25tZW50IGZvciB0aGUgc2Vzc2lvbi4gVGhlIHNlc3Npb24gbGFuZ3VhZ2UgZGV0ZXJtaW5lcyB0aGUgZGF0ZXRpbWUgZm9ybWF0cyBhbmQgc3lzdGVtIG1lc3NhZ2VzLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYHVzX2VuZ2xpc2hgKS5cbiAgICovXG4gIGxhbmd1YWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHN0cmluZyBpbmRpY2F0aW5nIHdoaWNoIG5ldHdvcmsgaW50ZXJmYWNlIChpcCBhZGRyZXNzKSB0byB1c2Ugd2hlbiBjb25uZWN0aW5nIHRvIFNRTCBTZXJ2ZXIuXG4gICAqL1xuICBsb2NhbEFkZHJlc3M/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRvIHBhcnNlIHVuaXF1ZSBpZGVudGlmaWVyIHR5cGUgd2l0aCBsb3dlcmNhc2UgY2FzZSBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYCkuXG4gICAqL1xuICBsb3dlckNhc2VHdWlkcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9uIHJldHJpZXMgZm9yIHRyYW5zaWVudCBlcnJvcnMuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgM2ApLlxuICAgKi9cbiAgbWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBNdWx0aVN1Ym5ldEZhaWxvdmVyID0gVHJ1ZSBwYXJhbWV0ZXIsIHdoaWNoIGNhbiBoZWxwIG1pbmltaXplIHRoZSBjbGllbnQgcmVjb3ZlcnkgbGF0ZW5jeSB3aGVuIGZhaWxvdmVycyBvY2N1ci5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApLlxuICAgKi9cbiAgbXVsdGlTdWJuZXRGYWlsb3Zlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIFREUyBwYWNrZXRzIChzdWJqZWN0IHRvIG5lZ290aWF0aW9uIHdpdGggdGhlIHNlcnZlcikuXG4gICAqIFNob3VsZCBiZSBhIHBvd2VyIG9mIDIuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgNDA5NmApLlxuICAgKi9cbiAgcGFja2V0U2l6ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogUG9ydCB0byBjb25uZWN0IHRvIChkZWZhdWx0OiBgMTQzM2ApLlxuICAgKlxuICAgKiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBbW2luc3RhbmNlTmFtZV1dXG4gICAqL1xuICBwb3J0PzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gd2lsbCByZXF1ZXN0IHJlYWQgb25seSBhY2Nlc3MgZnJvbSBhIFNRTCBTZXJ2ZXIgQXZhaWxhYmlsaXR5XG4gICAqIEdyb3VwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtoZXJlXShodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaGg3MTAwNTQuYXNweCBcIk1pY3Jvc29mdDogQ29uZmlndXJlIFJlYWQtT25seSBSb3V0aW5nIGZvciBhbiBBdmFpbGFiaWxpdHkgR3JvdXAgKFNRTCBTZXJ2ZXIpXCIpXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAgICovXG4gIHJlYWRPbmx5SW50ZW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmVmb3JlIGEgcmVxdWVzdCBpcyBjb25zaWRlcmVkIGZhaWxlZCwgb3IgYDBgIGZvciBubyB0aW1lb3V0LlxuICAgKlxuICAgKiBBcyBzb29uIGFzIGEgcmVzcG9uc2UgaXMgcmVjZWl2ZWQsIHRoZSB0aW1lb3V0IGlzIGNsZWFyZWQuIFRoaXMgbWVhbnMgdGhhdCBxdWVyaWVzIHRoYXQgaW1tZWRpYXRlbHkgcmV0dXJuIGEgcmVzcG9uc2UgaGF2ZSBhYmlsaXR5IHRvIHJ1biBsb25nZXIgdGhhbiB0aGlzIHRpbWVvdXQuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgMTUwMDBgKS5cbiAgICovXG4gIHJlcXVlc3RUaW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIHRoYXQgd2hlbiB0cnVlIHdpbGwgZXhwb3NlIHJlY2VpdmVkIHJvd3MgaW4gUmVxdWVzdHMgZG9uZSByZWxhdGVkIGV2ZW50czpcbiAgICogKiBbW1JlcXVlc3QuRXZlbnRfZG9uZUluUHJvY11dXG4gICAqICogW1tSZXF1ZXN0LkV2ZW50X2RvbmVQcm9jXV1cbiAgICogKiBbW1JlcXVlc3QuRXZlbnRfZG9uZV1dXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKlxuICAgKiBDYXV0aW9uOiBJZiBtYW55IHJvdyBhcmUgcmVjZWl2ZWQsIGVuYWJsaW5nIHRoaXMgb3B0aW9uIGNvdWxkIHJlc3VsdCBpblxuICAgKiBleGNlc3NpdmUgbWVtb3J5IHVzYWdlLlxuICAgKi9cbiAgcm93Q29sbGVjdGlvbk9uRG9uZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgdGhhdCB3aGVuIHRydWUgd2lsbCBleHBvc2UgcmVjZWl2ZWQgcm93cyBpbiBSZXF1ZXN0cycgY29tcGxldGlvbiBjYWxsYmFjay5TZWUgW1tSZXF1ZXN0LmNvbnN0cnVjdG9yXV0uXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKlxuICAgKiBDYXV0aW9uOiBJZiBtYW55IHJvdyBhcmUgcmVjZWl2ZWQsIGVuYWJsaW5nIHRoaXMgb3B0aW9uIGNvdWxkIHJlc3VsdCBpblxuICAgKiBleGNlc3NpdmUgbWVtb3J5IHVzYWdlLlxuICAgKi9cbiAgcm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiBURFMgdG8gdXNlLiBJZiBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHNwZWNpZmllZCB2ZXJzaW9uLCBuZWdvdGlhdGVkIHZlcnNpb24gaXMgdXNlZCBpbnN0ZWFkLlxuICAgKlxuICAgKiBUaGUgdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSBmcm9tIGByZXF1aXJlKCd0ZWRpb3VzJykuVERTX1ZFUlNJT05gLlxuICAgKiAqIGA3XzFgIChkZXByZWNhdGVkLCBzdXBwb3J0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uKVxuICAgKiAqIGA3XzJgXG4gICAqICogYDdfM19BYFxuICAgKiAqIGA3XzNfQmBcbiAgICogKiBgN180YFxuICAgKlxuICAgKiAoZGVmYXVsdDogYDdfNGApXG4gICAqL1xuICB0ZHNWZXJzaW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgdmFyY2hhcihtYXgpLCBudmFyY2hhcihtYXgpLCB2YXJiaW5hcnkobWF4KSwgdGV4dCwgbnRleHQsIGFuZCBpbWFnZSBkYXRhIHJldHVybmVkIGJ5IGEgU0VMRUNUIHN0YXRlbWVudC5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGAyMTQ3NDgzNjQ3YClcbiAgICovXG4gIHRleHRzaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiBcInRydWVcIiwgdGhlIFNRTCBTZXJ2ZXIgU1NMIGNlcnRpZmljYXRlIGlzIGF1dG9tYXRpY2FsbHkgdHJ1c3RlZCB3aGVuIHRoZSBjb21tdW5pY2F0aW9uIGxheWVyIGlzIGVuY3J5cHRlZCB1c2luZyBTU0wuXG4gICAqXG4gICAqIElmIFwiZmFsc2VcIiwgdGhlIFNRTCBTZXJ2ZXIgdmFsaWRhdGVzIHRoZSBzZXJ2ZXIgU1NMIGNlcnRpZmljYXRlLiBJZiB0aGUgc2VydmVyIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gZmFpbHMsXG4gICAqIHRoZSBkcml2ZXIgcmFpc2VzIGFuIGVycm9yIGFuZCB0ZXJtaW5hdGVzIHRoZSBjb25uZWN0aW9uLiBNYWtlIHN1cmUgdGhlIHZhbHVlIHBhc3NlZCB0byBzZXJ2ZXJOYW1lIGV4YWN0bHlcbiAgICogbWF0Y2hlcyB0aGUgQ29tbW9uIE5hbWUgKENOKSBvciBETlMgbmFtZSBpbiB0aGUgU3ViamVjdCBBbHRlcm5hdGUgTmFtZSBpbiB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGZvciBhbiBTU0wgY29ubmVjdGlvbiB0byBzdWNjZWVkLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIHRydXN0U2VydmVyQ2VydGlmaWNhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgc2VydmVyTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRvIHJldHVybiByb3dzIGFzIGFycmF5cyBvciBrZXktdmFsdWUgY29sbGVjdGlvbnMuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAgICovXG4gIHVzZUNvbHVtbk5hbWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBib29sZWFuIGRldGVybWluaW5nIHdoZXRoZXIgdG8gcGFzcyB0aW1lIHZhbHVlcyBpbiBVVEMgb3IgbG9jYWwgdGltZS5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYCkuXG4gICAqL1xuICB1c2VVVEM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3N0YXRpb24gSUQgKFdTSUQpIG9mIHRoZSBjbGllbnQsIGRlZmF1bHQgb3MuaG9zdG5hbWUoKS5cbiAgICogVXNlZCBmb3IgaWRlbnRpZnlpbmcgYSBzcGVjaWZpYyBjbGllbnQgaW4gcHJvZmlsaW5nLCBsb2dnaW5nIG9yXG4gICAqIHRyYWNpbmcgY2xpZW50IGFjdGl2aXR5IGluIFNRTFNlcnZlci5cbiAgICpcbiAgICogVGhlIHZhbHVlIGlzIHJlcG9ydGVkIGJ5IHRoZSBUU1FMIGZ1bmN0aW9uIEhPU1RfTkFNRSgpLlxuICAgKi9cbiAgd29ya3N0YXRpb25JZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuaW50ZXJmYWNlIFJvdXRpbmdEYXRhIHtcbiAgc2VydmVyOiBzdHJpbmc7XG4gIHBvcnQ6IG51bWJlcjtcbiAgaW5zdGFuY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBnaXZlbiBmdW5jdGlvbiwgcHJvdmlkaW5nIGl0IHdpdGggYSBwcm9taXNlIHRoYXQgd2lsbCByZWplY3RcbiAqIHdpdGggdGhlIGdpdmVuIHNpZ25hbCdzIGFib3J0IHJlYXNvbiBvbmNlIHRoZSBzaWduYWwgaXMgYWJvcnRlZC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gY2FuIHJhY2UgdGhpcyBwcm9taXNlIGFnYWluc3QgYW55IGFzeW5jaHJvbm91cyB3b3JrIGl0XG4gKiBwZXJmb3JtcyAocG90ZW50aWFsbHkgbXVsdGlwbGUgdGltZXMpIHRvIG1ha2UgaXRzZWxmIGFib3J0YWJsZS5cbiAqXG4gKiBUaGUgcmVqZWN0aW9uIGlzIGFsd2F5cyBjb25zaWRlcmVkIGhhbmRsZWQsIGFuZCB0aGUgc2lnbmFsJ3MgYWJvcnRcbiAqIGxpc3RlbmVyIGlzIHJlbW92ZWQgb25jZSB0aGUgZnVuY3Rpb24gc2V0dGxlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2l0aEFib3J0UmFjZTxUPihzaWduYWw6IEFib3J0U2lnbmFsLCBmdW5jOiAoc2lnbmFsQWJvcnRlZDogUHJvbWlzZTxuZXZlcj4pID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgY29uc3QgeyBwcm9taXNlOiBzaWduYWxBYm9ydGVkLCByZWplY3QgfSA9IFByb21pc2Uud2l0aFJlc29sdmVyczxuZXZlcj4oKTtcblxuICAvLyBQcmV2ZW50IHVuaGFuZGxlZCByZWplY3Rpb25zIGlmIHRoZSBzaWduYWwgaXMgYWJvcnRlZCB3aGlsZVxuICAvLyBgZnVuY2AgaXMgbm90IGN1cnJlbnRseSByYWNpbmcgYWdhaW5zdCBgc2lnbmFsQWJvcnRlZGAuXG4gIHNpZ25hbEFib3J0ZWQuY2F0Y2goKCkgPT4ge30pO1xuXG4gIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7IHJlamVjdChzaWduYWwucmVhc29uKTsgfTtcbiAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZ1bmMoc2lnbmFsQWJvcnRlZCk7XG4gIH0gZmluYWxseSB7XG4gICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIFtbQ29ubmVjdGlvbl1dIGluc3RhbmNlIHJlcHJlc2VudHMgYSBzaW5nbGUgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIHNlcnZlci5cbiAqXG4gKiBgYGBqc1xuICogdmFyIENvbm5lY3Rpb24gPSByZXF1aXJlKCd0ZWRpb3VzJykuQ29ubmVjdGlvbjtcbiAqIHZhciBjb25maWcgPSB7XG4gKiAgXCJhdXRoZW50aWNhdGlvblwiOiB7XG4gKiAgICAuLi4sXG4gKiAgICBcIm9wdGlvbnNcIjogey4uLn1cbiAqICB9LFxuICogIFwib3B0aW9uc1wiOiB7Li4ufVxuICogfTtcbiAqIHZhciBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oY29uZmlnKTtcbiAqIGBgYFxuICpcbiAqIE9ubHkgb25lIHJlcXVlc3QgYXQgYSB0aW1lIG1heSBiZSBleGVjdXRlZCBvbiBhIGNvbm5lY3Rpb24uIE9uY2UgYSBbW1JlcXVlc3RdXVxuICogaGFzIGJlZW4gaW5pdGlhdGVkICh3aXRoIFtbQ29ubmVjdGlvbi5jYWxsUHJvY2VkdXJlXV0sIFtbQ29ubmVjdGlvbi5leGVjU3FsXV0sXG4gKiBvciBbW0Nvbm5lY3Rpb24uZXhlY1NxbEJhdGNoXV0pLCBhbm90aGVyIHNob3VsZCBub3QgYmUgaW5pdGlhdGVkIHVudGlsIHRoZVxuICogW1tSZXF1ZXN0XV0ncyBjb21wbGV0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAqL1xuY2xhc3MgQ29ubmVjdGlvbiBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBmZWRBdXRoUmVxdWlyZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb25maWc6IEludGVybmFsQ29ubmVjdGlvbkNvbmZpZztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHNlY3VyZUNvbnRleHRPcHRpb25zOiBTZWN1cmVDb250ZXh0T3B0aW9ucztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGluVHJhbnNhY3Rpb246IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzOiBCdWZmZXJbXTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHRyYW5zYWN0aW9uRGVwdGg6IG51bWJlcjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGlzU3FsQmF0Y2g6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjdXJUcmFuc2llbnRSZXRyeUNvdW50OiBudW1iZXI7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSB0cmFuc2llbnRFcnJvckxvb2t1cDogVHJhbnNpZW50RXJyb3JMb29rdXA7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjbG9zZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBkZWJ1ZzogRGVidWc7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBudGxtcGFja2V0OiB1bmRlZmluZWQgfCBhbnk7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBudGxtcGFja2V0QnVmZmVyOiB1bmRlZmluZWQgfCBCdWZmZXI7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIFNUQVRFOiB7XG4gICAgSU5JVElBTElaRUQ6IFN0YXRlO1xuICAgIENPTk5FQ1RJTkc6IFN0YXRlO1xuICAgIFNFTlRfUFJFTE9HSU46IFN0YXRlO1xuICAgIFJFUk9VVElORzogU3RhdGU7XG4gICAgVFJBTlNJRU5UX0ZBSUxVUkVfUkVUUlk6IFN0YXRlO1xuICAgIFNFTlRfVExTU1NMTkVHT1RJQVRJT046IFN0YXRlO1xuICAgIFNFTlRfTE9HSU43X1dJVEhfU1RBTkRBUkRfTE9HSU46IFN0YXRlO1xuICAgIFNFTlRfTE9HSU43X1dJVEhfTlRMTTogU3RhdGU7XG4gICAgU0VOVF9MT0dJTjdfV0lUSF9GRURBVVRIOiBTdGF0ZTtcbiAgICBMT0dHRURfSU5fU0VORElOR19JTklUSUFMX1NRTDogU3RhdGU7XG4gICAgTE9HR0VEX0lOOiBTdGF0ZTtcbiAgICBTRU5UX0NMSUVOVF9SRVFVRVNUOiBTdGF0ZTtcbiAgICBTRU5UX0FUVEVOVElPTjogU3RhdGU7XG4gICAgRklOQUw6IFN0YXRlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3V0aW5nRGF0YTogdW5kZWZpbmVkIHwgUm91dGluZ0RhdGE7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIG1lc3NhZ2VJbzogTWVzc2FnZUlPO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgc3RhdGU6IFN0YXRlO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcmVzZXRDb25uZWN0aW9uT25OZXh0UmVxdWVzdDogdW5kZWZpbmVkIHwgYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcmVxdWVzdDogdW5kZWZpbmVkIHwgUmVxdWVzdCB8IEJ1bGtMb2FkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcHJvY1JldHVyblN0YXR1c1ZhbHVlOiB1bmRlZmluZWQgfCBhbnk7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBzb2NrZXQ6IHVuZGVmaW5lZCB8IG5ldC5Tb2NrZXQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBtZXNzYWdlQnVmZmVyOiBCdWZmZXI7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNhbmNlbFRpbWVyOiB1bmRlZmluZWQgfCBOb2RlSlMuVGltZW91dDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJlcXVlc3RUaW1lcjogdW5kZWZpbmVkIHwgTm9kZUpTLlRpbWVvdXQ7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xsZXIgdXNlZCB0byBhYm9ydCB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3NcbiAgICogd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgYmVmb3JlIGl0IHdhcyBmdWxseSBlc3RhYmxpc2hlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY2xvc2VDb250cm9sbGVyOiB1bmRlZmluZWQgfCBBYm9ydENvbnRyb2xsZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYW4gYXR0ZW50aW9uIG1lc3NhZ2Ugd2FzIHNlbnQgdG8gdGhlIHNlcnZlciB0byBjYW5jZWwgdGhlXG4gICAqIGN1cnJlbnRseSBhY3RpdmUgcmVxdWVzdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgYXR0ZW50aW9uU2VudDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgX2NhbmNlbEFmdGVyUmVxdWVzdFNlbnQ6ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGRhdGFiYXNlQ29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIF9vblNvY2tldENsb3NlOiAoaGFkRXJyb3I6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIF9vblNvY2tldEVycm9yOiAoZXJyOiBFcnJvcikgPT4gdm9pZDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgX29uU29ja2V0RW5kOiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBOb3RlOiBiZSBhd2FyZSBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgZmllbGQ6XG4gICAqIDEuIGNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zXG4gICAqIDIuIGNvbmZpZy5vcHRpb25zXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNvbnN0IHsgQ29ubmVjdGlvbiB9ID0gcmVxdWlyZSgndGVkaW91cycpO1xuICAgKlxuICAgKiBjb25zdCBjb25maWcgPSB7XG4gICAqICBcImF1dGhlbnRpY2F0aW9uXCI6IHtcbiAgICogICAgLi4uLFxuICAgKiAgICBcIm9wdGlvbnNcIjogey4uLn1cbiAgICogIH0sXG4gICAqICBcIm9wdGlvbnNcIjogey4uLn1cbiAgICogfTtcbiAgICpcbiAgICogY29uc3QgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKGNvbmZpZyk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IENvbm5lY3Rpb25Db25maWd1cmF0aW9uKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnb2JqZWN0JyB8fCBjb25maWcgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZ1wiIGFyZ3VtZW50IGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlnLnNlcnZlciAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5zZXJ2ZXJcIiBwcm9wZXJ0eSBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmZlZEF1dGhSZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgbGV0IGF1dGhlbnRpY2F0aW9uOiBDb25uZWN0aW9uQXV0aGVudGljYXRpb247XG4gICAgaWYgKGNvbmZpZy5hdXRoZW50aWNhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZy5hdXRoZW50aWNhdGlvbiAhPT0gJ29iamVjdCcgfHwgY29uZmlnLmF1dGhlbnRpY2F0aW9uID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvblwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBjb25maWcuYXV0aGVudGljYXRpb24udHlwZTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucyA9PT0gdW5kZWZpbmVkID8ge30gOiBjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucztcblxuICAgICAgaWYgKHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24udHlwZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlICE9PSAnZGVmYXVsdCcgJiYgdHlwZSAhPT0gJ250bG0nICYmIHR5cGUgIT09ICd0b2tlbi1jcmVkZW50aWFsJyAmJiB0eXBlICE9PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1wYXNzd29yZCcgJiYgdHlwZSAhPT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuJyAmJiB0eXBlICE9PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm0nICYmIHR5cGUgIT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZScgJiYgdHlwZSAhPT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0JyAmJiB0eXBlICE9PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1kZWZhdWx0Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ0eXBlXCIgcHJvcGVydHkgbXVzdCBvbmUgb2YgXCJkZWZhdWx0XCIsIFwibnRsbVwiLCBcInRva2VuLWNyZWRlbnRpYWxcIiwgXCJhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkXCIsIFwiYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW5cIiwgXCJhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHRcIiwgXCJhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bVwiIG9yIFwiYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2VcIiBvciBcImF6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0XCIuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcgfHwgb3B0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9uc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBvYmplY3QuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSAnbnRsbScpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRvbWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5kb21haW5cIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudXNlck5hbWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy51c2VyTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy51c2VyTmFtZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wYXNzd29yZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLnBhc3N3b3JkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLnBhc3N3b3JkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICAgIHR5cGU6ICdudGxtJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICB1c2VyTmFtZTogb3B0aW9ucy51c2VyTmFtZSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBvcHRpb25zLnBhc3N3b3JkLFxuICAgICAgICAgICAgZG9tYWluOiBvcHRpb25zLmRvbWFpbiAmJiBvcHRpb25zLmRvbWFpbi50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndG9rZW4tY3JlZGVudGlhbCcpIHtcbiAgICAgICAgaWYgKCFpc1Rva2VuQ3JlZGVudGlhbChvcHRpb25zLmNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY3JlZGVudGlhbFwiIHByb3BlcnR5IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgdGhlIHRva2VuIGNyZWRlbnRpYWwgY2xhc3MuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRoZW50aWNhdGlvbiA9IHtcbiAgICAgICAgICB0eXBlOiAndG9rZW4tY3JlZGVudGlhbCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgY3JlZGVudGlhbDogb3B0aW9ucy5jcmVkZW50aWFsXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1wYXNzd29yZCcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNsaWVudElkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudElkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnVzZXJOYW1lICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMudXNlck5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudXNlck5hbWVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFzc3dvcmQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5wYXNzd29yZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5wYXNzd29yZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy50ZW5hbnRJZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLnRlbmFudElkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLnRlbmFudElkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICAgIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICB1c2VyTmFtZTogb3B0aW9ucy51c2VyTmFtZSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBvcHRpb25zLnBhc3N3b3JkLFxuICAgICAgICAgICAgdGVuYW50SWQ6IG9wdGlvbnMudGVuYW50SWQsXG4gICAgICAgICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuJykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudG9rZW5cIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICB0b2tlbjogb3B0aW9ucy50b2tlblxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJykge1xuICAgICAgICBpZiAob3B0aW9ucy5jbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLmNsaWVudElkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudElkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICAgIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bScsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgY2xpZW50SWQ6IG9wdGlvbnMuY2xpZW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY2xpZW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICAgIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGNsaWVudElkOiBvcHRpb25zLmNsaWVudElkXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2UnKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY2xpZW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0Jykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY2xpZW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNsaWVudFNlY3JldCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRTZWNyZXRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRlbmFudElkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLnRlbmFudElkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICAgIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2UtcHJpbmNpcGFsLXNlY3JldCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgY2xpZW50SWQ6IG9wdGlvbnMuY2xpZW50SWQsXG4gICAgICAgICAgICBjbGllbnRTZWNyZXQ6IG9wdGlvbnMuY2xpZW50U2VjcmV0LFxuICAgICAgICAgICAgdGVuYW50SWQ6IG9wdGlvbnMudGVuYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3B0aW9ucy51c2VyTmFtZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLnVzZXJOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLnVzZXJOYW1lXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnBhc3N3b3JkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMucGFzc3dvcmQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMucGFzc3dvcmRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHVzZXJOYW1lOiBvcHRpb25zLnVzZXJOYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICB1c2VyTmFtZTogdW5kZWZpbmVkLFxuICAgICAgICAgIHBhc3N3b3JkOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIHNlcnZlcjogY29uZmlnLnNlcnZlcixcbiAgICAgIGF1dGhlbnRpY2F0aW9uOiBhdXRoZW50aWNhdGlvbixcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3I6IGZhbHNlLFxuICAgICAgICBhcHBOYW1lOiB1bmRlZmluZWQsXG4gICAgICAgIGNhbWVsQ2FzZUNvbHVtbnM6IGZhbHNlLFxuICAgICAgICBjYW5jZWxUaW1lb3V0OiBERUZBVUxUX0NBTkNFTF9USU1FT1VULFxuICAgICAgICBjb2x1bW5FbmNyeXB0aW9uS2V5Q2FjaGVUVEw6IDIgKiA2MCAqIDYwICogMTAwMCwgIC8vIFVuaXRzOiBtaWxsaXNlY29uZHNcbiAgICAgICAgY29sdW1uRW5jcnlwdGlvblNldHRpbmc6IGZhbHNlLFxuICAgICAgICBjb2x1bW5OYW1lUmVwbGFjZXI6IHVuZGVmaW5lZCxcbiAgICAgICAgY29ubmVjdGlvblJldHJ5SW50ZXJ2YWw6IERFRkFVTFRfQ09OTkVDVF9SRVRSWV9JTlRFUlZBTCxcbiAgICAgICAgY29ubmVjdFRpbWVvdXQ6IERFRkFVTFRfQ09OTkVDVF9USU1FT1VULFxuICAgICAgICBjb25uZWN0b3I6IHVuZGVmaW5lZCxcbiAgICAgICAgY29ubmVjdGlvbklzb2xhdGlvbkxldmVsOiBJU09MQVRJT05fTEVWRUwuUkVBRF9DT01NSVRURUQsXG4gICAgICAgIGNyeXB0b0NyZWRlbnRpYWxzRGV0YWlsczoge30sXG4gICAgICAgIGRhdGFiYXNlOiB1bmRlZmluZWQsXG4gICAgICAgIGRhdGVmaXJzdDogREVGQVVMVF9EQVRFRklSU1QsXG4gICAgICAgIGRhdGVGb3JtYXQ6IERFRkFVTFRfREFURUZPUk1BVCxcbiAgICAgICAgZGVidWc6IHtcbiAgICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgICBwYWNrZXQ6IGZhbHNlLFxuICAgICAgICAgIHBheWxvYWQ6IGZhbHNlLFxuICAgICAgICAgIHRva2VuOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBlbmFibGVBbnNpTnVsbDogdHJ1ZSxcbiAgICAgICAgZW5hYmxlQW5zaU51bGxEZWZhdWx0OiB0cnVlLFxuICAgICAgICBlbmFibGVBbnNpUGFkZGluZzogdHJ1ZSxcbiAgICAgICAgZW5hYmxlQW5zaVdhcm5pbmdzOiB0cnVlLFxuICAgICAgICBlbmFibGVBcml0aEFib3J0OiB0cnVlLFxuICAgICAgICBlbmFibGVDb25jYXROdWxsWWllbGRzTnVsbDogdHJ1ZSxcbiAgICAgICAgZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdDogbnVsbCxcbiAgICAgICAgZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnM6IGZhbHNlLFxuICAgICAgICBlbmFibGVOdW1lcmljUm91bmRhYm9ydDogZmFsc2UsXG4gICAgICAgIGVuYWJsZVF1b3RlZElkZW50aWZpZXI6IHRydWUsXG4gICAgICAgIGVuY3J5cHQ6IHRydWUsXG4gICAgICAgIGZhbGxiYWNrVG9EZWZhdWx0RGI6IGZhbHNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5U3RvcmVQcm92aWRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgaW5zdGFuY2VOYW1lOiB1bmRlZmluZWQsXG4gICAgICAgIGlzb2xhdGlvbkxldmVsOiBJU09MQVRJT05fTEVWRUwuUkVBRF9DT01NSVRURUQsXG4gICAgICAgIGxhbmd1YWdlOiBERUZBVUxUX0xBTkdVQUdFLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzOiAzLFxuICAgICAgICBtdWx0aVN1Ym5ldEZhaWxvdmVyOiBmYWxzZSxcbiAgICAgICAgcGFja2V0U2l6ZTogREVGQVVMVF9QQUNLRVRfU0laRSxcbiAgICAgICAgcG9ydDogREVGQVVMVF9QT1JULFxuICAgICAgICByZWFkT25seUludGVudDogZmFsc2UsXG4gICAgICAgIHJlcXVlc3RUaW1lb3V0OiBERUZBVUxUX0NMSUVOVF9SRVFVRVNUX1RJTUVPVVQsXG4gICAgICAgIHJvd0NvbGxlY3Rpb25PbkRvbmU6IGZhbHNlLFxuICAgICAgICByb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbjogZmFsc2UsXG4gICAgICAgIHNlcnZlck5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VydmVyU3VwcG9ydHNDb2x1bW5FbmNyeXB0aW9uOiBmYWxzZSxcbiAgICAgICAgdGRzVmVyc2lvbjogREVGQVVMVF9URFNfVkVSU0lPTixcbiAgICAgICAgdGV4dHNpemU6IERFRkFVTFRfVEVYVFNJWkUsXG4gICAgICAgIHRydXN0ZWRTZXJ2ZXJOYW1lQUU6IHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZTogZmFsc2UsXG4gICAgICAgIHVzZUNvbHVtbk5hbWVzOiBmYWxzZSxcbiAgICAgICAgdXNlVVRDOiB0cnVlLFxuICAgICAgICB3b3Jrc3RhdGlvbklkOiB1bmRlZmluZWQsXG4gICAgICAgIGxvd2VyQ2FzZUd1aWRzOiBmYWxzZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoY29uZmlnLm9wdGlvbnMpIHtcbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5wb3J0ICYmIGNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvcnQgYW5kIGluc3RhbmNlTmFtZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBidXQgJyArIGNvbmZpZy5vcHRpb25zLnBvcnQgKyAnIGFuZCAnICsgY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lICsgJyBwcm92aWRlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmFib3J0VHJhbnNhY3Rpb25PbkVycm9yICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5hYm9ydFRyYW5zYWN0aW9uT25FcnJvclwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3IgPSBjb25maWcub3B0aW9ucy5hYm9ydFRyYW5zYWN0aW9uT25FcnJvcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmFwcE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmFwcE5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuYXBwTmFtZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmFwcE5hbWUgPSBjb25maWcub3B0aW9ucy5hcHBOYW1lO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuY2FtZWxDYXNlQ29sdW1ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuY2FtZWxDYXNlQ29sdW1ucyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuY2FtZWxDYXNlQ29sdW1uc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5jYW1lbENhc2VDb2x1bW5zID0gY29uZmlnLm9wdGlvbnMuY2FtZWxDYXNlQ29sdW1ucztcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmNhbmNlbFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmNhbmNlbFRpbWVvdXQgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuY2FuY2VsVGltZW91dFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmNhbmNlbFRpbWVvdXQgPSBjb25maWcub3B0aW9ucy5jYW5jZWxUaW1lb3V0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuY29sdW1uTmFtZVJlcGxhY2VyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuY29sdW1uTmFtZVJlcGxhY2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuY2FuY2VsVGltZW91dFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBmdW5jdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuY29sdW1uTmFtZVJlcGxhY2VyID0gY29uZmlnLm9wdGlvbnMuY29sdW1uTmFtZVJlcGxhY2VyO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvbklzb2xhdGlvbkxldmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXNzZXJ0VmFsaWRJc29sYXRpb25MZXZlbChjb25maWcub3B0aW9ucy5jb25uZWN0aW9uSXNvbGF0aW9uTGV2ZWwsICdjb25maWcub3B0aW9ucy5jb25uZWN0aW9uSXNvbGF0aW9uTGV2ZWwnKTtcblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCA9IGNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmNvbm5lY3RUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5jb25uZWN0VGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5jb25uZWN0VGltZW91dFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3RUaW1lb3V0ID0gY29uZmlnLm9wdGlvbnMuY29ubmVjdFRpbWVvdXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jb25uZWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmNvbm5lY3RvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmNvbm5lY3RvclwiIHByb3BlcnR5IG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdG9yID0gY29uZmlnLm9wdGlvbnMuY29ubmVjdG9yO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5jcnlwdG9DcmVkZW50aWFsc0RldGFpbHMgIT09ICdvYmplY3QnIHx8IGNvbmZpZy5vcHRpb25zLmNyeXB0b0NyZWRlbnRpYWxzRGV0YWlscyA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmNyeXB0b0NyZWRlbnRpYWxzRGV0YWlsc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmNyeXB0b0NyZWRlbnRpYWxzRGV0YWlscyA9IGNvbmZpZy5vcHRpb25zLmNyeXB0b0NyZWRlbnRpYWxzRGV0YWlscztcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRhdGFiYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5kYXRhYmFzZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kYXRhYmFzZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmRhdGFiYXNlID0gY29uZmlnLm9wdGlvbnMuZGF0YWJhc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5kYXRlZmlyc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdCAhPT0gJ251bWJlcicgJiYgY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcub3B0aW9ucy5kYXRlZmlyc3QgIT09IG51bGwgJiYgKGNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdCA8IDEgfHwgY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0ID4gNykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0XCIgcHJvcGVydHkgbXVzdCBiZSA+PSAxIGFuZCA8PSA3Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdCA9IGNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRhdGVGb3JtYXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmRhdGVGb3JtYXQgIT09ICdzdHJpbmcnICYmIGNvbmZpZy5vcHRpb25zLmRhdGVGb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kYXRlRm9ybWF0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5kYXRlRm9ybWF0ID0gY29uZmlnLm9wdGlvbnMuZGF0ZUZvcm1hdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgIGlmIChjb25maWcub3B0aW9ucy5kZWJ1Zy5kYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmRlYnVnLmRhdGEgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZGVidWcuZGF0YVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZGVidWcuZGF0YSA9IGNvbmZpZy5vcHRpb25zLmRlYnVnLmRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZGVidWcucGFja2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmRlYnVnLnBhY2tldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kZWJ1Zy5wYWNrZXRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmRlYnVnLnBhY2tldCA9IGNvbmZpZy5vcHRpb25zLmRlYnVnLnBhY2tldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcub3B0aW9ucy5kZWJ1Zy5wYXlsb2FkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmRlYnVnLnBheWxvYWQgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZGVidWcucGF5bG9hZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZGVidWcucGF5bG9hZCA9IGNvbmZpZy5vcHRpb25zLmRlYnVnLnBheWxvYWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZGVidWcudG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZGVidWcudG9rZW4gIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZGVidWcudG9rZW5cIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmRlYnVnLnRva2VuID0gY29uZmlnLm9wdGlvbnMuZGVidWcudG9rZW47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbCAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGxcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbCA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGxEZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbERlZmF1bHQgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbERlZmF1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbERlZmF1bHRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbERlZmF1bHQgPSBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbERlZmF1bHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVBbnNpUGFkZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVBhZGRpbmcgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpUGFkZGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lQYWRkaW5nXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVBhZGRpbmcgPSBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpUGFkZGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lXYXJuaW5ncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVdhcm5pbmdzICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVdhcm5pbmdzICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVdhcm5pbmdzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVdhcm5pbmdzID0gY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVdhcm5pbmdzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlQXJpdGhBYm9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlQXJpdGhBYm9ydCAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFyaXRoQWJvcnQgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVBcml0aEFib3J0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQXJpdGhBYm9ydCA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZUFyaXRoQWJvcnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVDb25jYXROdWxsWWllbGRzTnVsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGwgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5lbmFibGVDb25jYXROdWxsWWllbGRzTnVsbCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGwgPSBjb25maWcub3B0aW9ucy5lbmFibGVDb25jYXROdWxsWWllbGRzTnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZUN1cnNvckNsb3NlT25Db21taXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuYWJsZUN1cnNvckNsb3NlT25Db21taXQgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5lbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUN1cnNvckNsb3NlT25Db21taXQgPSBjb25maWcub3B0aW9ucy5lbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnMgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9uc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zID0gY29uZmlnLm9wdGlvbnMuZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVOdW1lcmljUm91bmRhYm9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5lbmFibGVOdW1lcmljUm91bmRhYm9ydCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZU51bWVyaWNSb3VuZGFib3J0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQgPSBjb25maWcub3B0aW9ucy5lbmFibGVOdW1lcmljUm91bmRhYm9ydDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZVF1b3RlZElkZW50aWZpZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuYWJsZVF1b3RlZElkZW50aWZpZXIgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5lbmFibGVRdW90ZWRJZGVudGlmaWVyICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllclwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZVF1b3RlZElkZW50aWZpZXIgPSBjb25maWcub3B0aW9ucy5lbmFibGVRdW90ZWRJZGVudGlmaWVyO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuY3J5cHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuY3J5cHQgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmNyeXB0ICE9PSAnc3RyaWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW5jcnlwdFwiIHByb3BlcnR5IG11c3QgYmUgc2V0IHRvIFwic3RyaWN0XCIsIG9yIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuY3J5cHQgPSBjb25maWcub3B0aW9ucy5lbmNyeXB0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZmFsbGJhY2tUb0RlZmF1bHREYiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZmFsbGJhY2tUb0RlZmF1bHREYiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZmFsbGJhY2tUb0RlZmF1bHREYlwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5mYWxsYmFja1RvRGVmYXVsdERiID0gY29uZmlnLm9wdGlvbnMuZmFsbGJhY2tUb0RlZmF1bHREYjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZSA9IGNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZTtcbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5wb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhc3NlcnRWYWxpZElzb2xhdGlvbkxldmVsKGNvbmZpZy5vcHRpb25zLmlzb2xhdGlvbkxldmVsLCAnY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWwnKTtcblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmlzb2xhdGlvbkxldmVsID0gY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5sYW5ndWFnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2UgIT09ICdzdHJpbmcnICYmIGNvbmZpZy5vcHRpb25zLmxhbmd1YWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2VcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmxhbmd1YWdlID0gY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5sb2NhbEFkZHJlc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmxvY2FsQWRkcmVzcyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5sb2NhbEFkZHJlc3NcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5sb2NhbEFkZHJlc3MgPSBjb25maWcub3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5tdWx0aVN1Ym5ldEZhaWxvdmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5tdWx0aVN1Ym5ldEZhaWxvdmVyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5tdWx0aVN1Ym5ldEZhaWxvdmVyXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLm11bHRpU3VibmV0RmFpbG92ZXIgPSBjb25maWcub3B0aW9ucy5tdWx0aVN1Ym5ldEZhaWxvdmVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMucGFja2V0U2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMucGFja2V0U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5wYWNrZXRTaXplXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMucGFja2V0U2l6ZSA9IGNvbmZpZy5vcHRpb25zLnBhY2tldFNpemU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5wb3J0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnBvcnRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnBvcnQgPD0gMCB8fCBjb25maWcub3B0aW9ucy5wb3J0ID49IDY1NTM2KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnBvcnRcIiBwcm9wZXJ0eSBtdXN0IGJlID4gMCBhbmQgPCA2NTUzNicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5wb3J0ID0gY29uZmlnLm9wdGlvbnMucG9ydDtcbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5pbnN0YW5jZU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5yZWFkT25seUludGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMucmVhZE9ubHlJbnRlbnQgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnJlYWRPbmx5SW50ZW50XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnJlYWRPbmx5SW50ZW50ID0gY29uZmlnLm9wdGlvbnMucmVhZE9ubHlJbnRlbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5yZXF1ZXN0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMucmVxdWVzdFRpbWVvdXQgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMucmVxdWVzdFRpbWVvdXRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5yZXF1ZXN0VGltZW91dCA9IGNvbmZpZy5vcHRpb25zLnJlcXVlc3RUaW1lb3V0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzXCIgcHJvcGVydHkgbXVzdCBiZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gMC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzID0gY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvblJldHJ5SW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25SZXRyeUludGVydmFsICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25SZXRyeUludGVydmFsXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcub3B0aW9ucy5jb25uZWN0aW9uUmV0cnlJbnRlcnZhbCA8PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvblJldHJ5SW50ZXJ2YWxcIiBwcm9wZXJ0eSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0aW9uUmV0cnlJbnRlcnZhbCA9IGNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25SZXRyeUludGVydmFsO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lID0gY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb25cIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb24gPSBjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvblwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPSBjb25maWcub3B0aW9ucy50ZHNWZXJzaW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMudGV4dHNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnRleHRzaXplICE9PSAnbnVtYmVyJyAmJiBjb25maWcub3B0aW9ucy50ZXh0c2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnRleHRzaXplXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlciBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnRleHRzaXplID4gMjE0NzQ4MzY0Nykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnRleHRzaXplXCIgY2FuXFwndCBiZSBncmVhdGVyIHRoYW4gMjE0NzQ4MzY0Ny4nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWcub3B0aW9ucy50ZXh0c2l6ZSA8IC0xKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMudGV4dHNpemVcIiBjYW5cXCd0IGJlIHNtYWxsZXIgdGhhbiAtMS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMudGV4dHNpemUgPSBjb25maWcub3B0aW9ucy50ZXh0c2l6ZSB8IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGUgPSBjb25maWcub3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuc2VydmVyTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuc2VydmVyTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5zZXJ2ZXJOYW1lXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnNlcnZlck5hbWUgPSBjb25maWcub3B0aW9ucy5zZXJ2ZXJOYW1lO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMudXNlQ29sdW1uTmFtZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnVzZUNvbHVtbk5hbWVzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy51c2VDb2x1bW5OYW1lc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy51c2VDb2x1bW5OYW1lcyA9IGNvbmZpZy5vcHRpb25zLnVzZUNvbHVtbk5hbWVzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMudXNlVVRDICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy51c2VVVEMgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnVzZVVUQ1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy51c2VVVEMgPSBjb25maWcub3B0aW9ucy51c2VVVEM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy53b3Jrc3RhdGlvbklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy53b3Jrc3RhdGlvbklkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLndvcmtzdGF0aW9uSWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy53b3Jrc3RhdGlvbklkID0gY29uZmlnLm9wdGlvbnMud29ya3N0YXRpb25JZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmxvd2VyQ2FzZUd1aWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5sb3dlckNhc2VHdWlkcyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMubG93ZXJDYXNlR3VpZHNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMubG93ZXJDYXNlR3VpZHMgPSBjb25maWcub3B0aW9ucy5sb3dlckNhc2VHdWlkcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlY3VyZUNvbnRleHRPcHRpb25zID0gdGhpcy5jb25maWcub3B0aW9ucy5jcnlwdG9DcmVkZW50aWFsc0RldGFpbHM7XG4gICAgaWYgKHRoaXMuc2VjdXJlQ29udGV4dE9wdGlvbnMuc2VjdXJlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGhhcyBub3Qgc3BlY2lmaWVkIHRoZWlyIG93biBgc2VjdXJlT3B0aW9uc2AsXG4gICAgICAvLyB3ZSBzZXQgYFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFNgIGhlcmUuXG4gICAgICAvLyBPbGRlciBTUUwgU2VydmVyIGluc3RhbmNlcyBydW5uaW5nIG9uIG9sZGVyIFdpbmRvd3MgdmVyc2lvbnMgaGF2ZVxuICAgICAgLy8gdHJvdWJsZSB3aXRoIHRoZSBCRUFTVCB3b3JrYXJvdW5kIGluIE9wZW5TU0wuXG4gICAgICAvLyBBcyBCRUFTVCBpcyBhIGJyb3dzZXIgc3BlY2lmaWMgZXhwbG9pdCwgd2UgY2FuIGp1c3QgZGlzYWJsZSB0aGlzIG9wdGlvbiBoZXJlLlxuICAgICAgdGhpcy5zZWN1cmVDb250ZXh0T3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodGhpcy5zZWN1cmVDb250ZXh0T3B0aW9ucywge1xuICAgICAgICBzZWN1cmVPcHRpb25zOiB7XG4gICAgICAgICAgdmFsdWU6IGNvbnN0YW50cy5TU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZGVidWcgPSB0aGlzLmNyZWF0ZURlYnVnKCk7XG4gICAgdGhpcy5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRlc2NyaXB0b3JzID0gW0J1ZmZlci5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSldO1xuXG4gICAgLy8gJ2JlZ2luVHJhbnNhY3Rpb24nLCAnY29tbWl0VHJhbnNhY3Rpb24nIGFuZCAncm9sbGJhY2tUcmFuc2FjdGlvbidcbiAgICAvLyBldmVudHMgYXJlIHV0aWxpemVkIHRvIG1haW50YWluIGluVHJhbnNhY3Rpb24gcHJvcGVydHkgc3RhdGUgd2hpY2ggaW5cbiAgICAvLyB0dXJuIGlzIHVzZWQgaW4gbWFuYWdpbmcgdHJhbnNhY3Rpb25zLiBUaGVzZSBldmVudHMgYXJlIG9ubHkgZmlyZWQgZm9yXG4gICAgLy8gVERTIHZlcnNpb24gNy4yIGFuZCBiZXlvbmQuIFRoZSBwcm9wZXJ0aWVzIGJlbG93IGFyZSB1c2VkIHRvIGVtdWxhdGVcbiAgICAvLyBlcXVpdmFsZW50IGJlaGF2aW9yIGZvciBURFMgdmVyc2lvbnMgYmVmb3JlIDcuMi5cbiAgICB0aGlzLnRyYW5zYWN0aW9uRGVwdGggPSAwO1xuICAgIHRoaXMuaXNTcWxCYXRjaCA9IGZhbHNlO1xuICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5tZXNzYWdlQnVmZmVyID0gQnVmZmVyLmFsbG9jKDApO1xuXG4gICAgdGhpcy5jdXJUcmFuc2llbnRSZXRyeUNvdW50ID0gMDtcbiAgICB0aGlzLnRyYW5zaWVudEVycm9yTG9va3VwID0gbmV3IFRyYW5zaWVudEVycm9yTG9va3VwKCk7XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5TVEFURS5JTklUSUFMSVpFRDtcblxuICAgIHRoaXMuYXR0ZW50aW9uU2VudCA9IGZhbHNlO1xuXG4gICAgdGhpcy5fY2FuY2VsQWZ0ZXJSZXF1ZXN0U2VudCA9ICgpID0+IHtcbiAgICAgIHRoaXMubWVzc2FnZUlvLnNlbmRNZXNzYWdlKFRZUEUuQVRURU5USU9OKTtcbiAgICAgIHRoaXMuYXR0ZW50aW9uU2VudCA9IHRydWU7XG4gICAgICB0aGlzLmNyZWF0ZUNhbmNlbFRpbWVyKCk7XG4gICAgfTtcblxuICAgIHRoaXMuX29uU29ja2V0Q2xvc2UgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNvY2tldENsb3NlKCk7XG4gICAgfTtcblxuICAgIHRoaXMuX29uU29ja2V0RW5kID0gKCkgPT4ge1xuICAgICAgdGhpcy5zb2NrZXRFbmQoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5fb25Tb2NrZXRFcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgLy8gTm90aGluZyBsZWZ0IHRvIHJvdXRlIG9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkOiBgRmluYWxgIGhhcyBub1xuICAgICAgLy8gYHNvY2tldEVycm9yYCBoYW5kbGVyLCBhbmQgdGhlIGVycm9yIHdvdWxkIG9ubHkgc3VyZmFjZSBhcyBub2lzZVxuICAgICAgLy8gYWZ0ZXIgYGNsb3NlKClgLiAoTWlycm9ycyBgc29ja2V0RW5kKClgLilcbiAgICAgIGlmICh0aGlzLnN0YXRlID09PSB0aGlzLlNUQVRFLkZJTkFMKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCdzb2NrZXRFcnJvcicsIGVycm9yKTtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcy53cmFwU29ja2V0RXJyb3IoZXJyb3IpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBjb25uZWN0KGNvbm5lY3RMaXN0ZW5lcj86IChlcnI/OiBFcnJvcikgPT4gdm9pZCkge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSB0aGlzLlNUQVRFLklOSVRJQUxJWkVEKSB7XG4gICAgICB0aHJvdyBuZXcgQ29ubmVjdGlvbkVycm9yKCdgLmNvbm5lY3RgIGNhbiBub3QgYmUgY2FsbGVkIG9uIGEgQ29ubmVjdGlvbiBpbiBgJyArIHRoaXMuc3RhdGUubmFtZSArICdgIHN0YXRlLicpO1xuICAgIH1cblxuICAgIGlmIChjb25uZWN0TGlzdGVuZXIpIHtcbiAgICAgIGNvbnN0IG9uQ29ubmVjdCA9IChlcnI/OiBFcnJvcikgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICBjb25uZWN0TGlzdGVuZXIoZXJyKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdjb25uZWN0Jywgb25Db25uZWN0KTtcbiAgICAgICAgY29ubmVjdExpc3RlbmVyKGVycik7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9uY2UoJ2Nvbm5lY3QnLCBvbkNvbm5lY3QpO1xuICAgICAgdGhpcy5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5DT05ORUNUSU5HKTtcbiAgICB0aGlzLmluaXRpYWxpc2VDb25uZWN0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5lbWl0KCdjb25uZWN0Jyk7XG4gICAgICB9KTtcbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcblxuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdCcsIGVycik7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jbGVhbnVwQ29ubmVjdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2ZXIgaGFzIHJlcG9ydGVkIHRoYXQgdGhlIGNoYXJzZXQgaGFzIGNoYW5nZWQuXG4gICAqL1xuICBvbihldmVudDogJ2NoYXJzZXRDaGFuZ2UnLCBsaXN0ZW5lcjogKGNoYXJzZXQ6IHN0cmluZykgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIGF0dGVtcHQgdG8gY29ubmVjdCBhbmQgdmFsaWRhdGUgaGFzIGNvbXBsZXRlZC5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnY29ubmVjdCcsXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGVyciBJZiBzdWNjZXNzZnVsbHkgY29ubmVjdGVkLCB3aWxsIGJlIGZhbHN5LiBJZiB0aGVyZSB3YXMgYVxuICAgICAqICAgcHJvYmxlbSAod2l0aCBlaXRoZXIgY29ubmVjdGluZyBvciB2YWxpZGF0aW9uKSwgd2lsbCBiZSBhbiBbW0Vycm9yXV0gb2JqZWN0LlxuICAgICAqL1xuICAgIGxpc3RlbmVyOiAoZXJyOiBFcnJvciB8IHVuZGVmaW5lZCkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2ZXIgaGFzIHJlcG9ydGVkIHRoYXQgdGhlIGFjdGl2ZSBkYXRhYmFzZSBoYXMgY2hhbmdlZC5cbiAgICogVGhpcyBtYXkgYmUgYXMgYSByZXN1bHQgb2YgYSBzdWNjZXNzZnVsIGxvZ2luLCBvciBhIGB1c2VgIHN0YXRlbWVudC5cbiAgICovXG4gIG9uKGV2ZW50OiAnZGF0YWJhc2VDaGFuZ2UnLCBsaXN0ZW5lcjogKGRhdGFiYXNlTmFtZTogc3RyaW5nKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBBIGRlYnVnIG1lc3NhZ2UgaXMgYXZhaWxhYmxlLiBJdCBtYXkgYmUgbG9nZ2VkIG9yIGlnbm9yZWQuXG4gICAqL1xuICBvbihldmVudDogJ2RlYnVnJywgbGlzdGVuZXI6IChtZXNzYWdlVGV4dDogc3RyaW5nKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBlcnJvciBvY2N1cnMuXG4gICAqL1xuICBvbihldmVudDogJ2Vycm9yJywgbGlzdGVuZXI6IChlcnI6IEVycm9yKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmVyIGhhcyBpc3N1ZWQgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIG9uKGV2ZW50OiAnZXJyb3JNZXNzYWdlJywgbGlzdGVuZXI6IChtZXNzYWdlOiBpbXBvcnQoJy4vdG9rZW4vdG9rZW4nKS5FcnJvck1lc3NhZ2VUb2tlbikgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIGNvbm5lY3Rpb24gaGFzIGVuZGVkLlxuICAgKlxuICAgKiBUaGlzIG1heSBiZSBhcyBhIHJlc3VsdCBvZiB0aGUgY2xpZW50IGNhbGxpbmcgW1tjbG9zZV1dLCB0aGUgc2VydmVyXG4gICAqIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24sIG9yIGEgbmV0d29yayBlcnJvci5cbiAgICovXG4gIG9uKGV2ZW50OiAnZW5kJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2ZXIgaGFzIGlzc3VlZCBhbiBpbmZvcm1hdGlvbiBtZXNzYWdlLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdpbmZvTWVzc2FnZScsIGxpc3RlbmVyOiAobWVzc2FnZTogaW1wb3J0KCcuL3Rva2VuL3Rva2VuJykuSW5mb01lc3NhZ2VUb2tlbikgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIHNlcnZlciBoYXMgcmVwb3J0ZWQgdGhhdCB0aGUgbGFuZ3VhZ2UgaGFzIGNoYW5nZWQuXG4gICAqL1xuICBvbihldmVudDogJ2xhbmd1YWdlQ2hhbmdlJywgbGlzdGVuZXI6IChsYW5ndWFnZU5hbWU6IHN0cmluZykgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIGNvbm5lY3Rpb24gd2FzIHJlc2V0LlxuICAgKi9cbiAgb24oZXZlbnQ6ICdyZXNldENvbm5lY3Rpb24nLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogQSBzZWN1cmUgY29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZC5cbiAgICovXG4gIG9uKGV2ZW50OiAnc2VjdXJlJywgbGlzdGVuZXI6IChjbGVhcnRleHQ6IGltcG9ydCgndGxzJykuVExTU29ja2V0KSA9PiB2b2lkKTogdGhpc1xuXG4gIG9uKGV2ZW50OiBzdHJpbmcgfCBzeW1ib2wsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpIHtcbiAgICByZXR1cm4gc3VwZXIub24oZXZlbnQsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2NoYXJzZXRDaGFuZ2UnLCBjaGFyc2V0OiBzdHJpbmcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2Nvbm5lY3QnLCBlcnJvcj86IEVycm9yKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdkYXRhYmFzZUNoYW5nZScsIGRhdGFiYXNlTmFtZTogc3RyaW5nKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdkYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXInLCBwYXJ0bmVySW5zdGFuY2VOYW1lOiBzdHJpbmcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2RlYnVnJywgbWVzc2FnZVRleHQ6IHN0cmluZyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZXJyb3InLCBlcnJvcjogRXJyb3IpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2Vycm9yTWVzc2FnZScsIG1lc3NhZ2U6IGltcG9ydCgnLi90b2tlbi90b2tlbicpLkVycm9yTWVzc2FnZVRva2VuKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdlbmQnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdpbmZvTWVzc2FnZScsIG1lc3NhZ2U6IGltcG9ydCgnLi90b2tlbi90b2tlbicpLkluZm9NZXNzYWdlVG9rZW4pOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2xhbmd1YWdlQ2hhbmdlJywgbGFuZ3VhZ2VOYW1lOiBzdHJpbmcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3NlY3VyZScsIGNsZWFydGV4dDogaW1wb3J0KCd0bHMnKS5UTFNTb2NrZXQpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3Jlcm91dGluZycpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3Jlc2V0Q29ubmVjdGlvbicpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3JldHJ5Jyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncm9sbGJhY2tUcmFuc2FjdGlvbicpOiBib29sZWFuXG5cbiAgZW1pdChldmVudDogc3RyaW5nIHwgc3ltYm9sLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBzdXBlci5lbWl0KGV2ZW50LCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlLlxuICAgKlxuICAgKiBUaGUgW1tFdmVudF9lbmRdXSB3aWxsIGJlIGVtaXR0ZWQgb25jZSB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQuXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICB0aGlzLmNsb3NlQ29udHJvbGxlcj8uYWJvcnQobmV3IENvbm5lY3Rpb25FcnJvcignQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIHRoZSBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZC4nLCAnRUNMT1NFJykpO1xuXG4gICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgdGhpcy5jbGVhbnVwQ29ubmVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXNlQ29ubmVjdGlvbigpIHtcbiAgICBjb25zdCB0aW1lb3V0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGNvbnN0IGNvbm5lY3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgaG9zdFBvc3RmaXggPSB0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQgPyBgOiR7dGhpcy5jb25maWcub3B0aW9ucy5wb3J0fWAgOiBgXFxcXCR7dGhpcy5jb25maWcub3B0aW9ucy5pbnN0YW5jZU5hbWV9YDtcbiAgICAgIC8vIElmIHdlIGhhdmUgcm91dGluZyBkYXRhIHN0b3JlZCwgdGhpcyBjb25uZWN0aW9uIGhhcyBiZWVuIHJlZGlyZWN0ZWRcbiAgICAgIGNvbnN0IHNlcnZlciA9IHRoaXMucm91dGluZ0RhdGEgPyB0aGlzLnJvdXRpbmdEYXRhLnNlcnZlciA6IHRoaXMuY29uZmlnLnNlcnZlcjtcbiAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLnJvdXRpbmdEYXRhID8gYDoke3RoaXMucm91dGluZ0RhdGEucG9ydH1gIDogaG9zdFBvc3RmaXg7XG4gICAgICAvLyBHcmFiIHRoZSB0YXJnZXQgaG9zdCBmcm9tIHRoZSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24sIGFuZCBmcm9tIGEgcmVkaXJlY3QgbWVzc2FnZVxuICAgICAgLy8gb3RoZXJ3aXNlLCBsZWF2ZSB0aGUgbWVzc2FnZSBlbXB0eS5cbiAgICAgIGNvbnN0IHJvdXRpbmdNZXNzYWdlID0gdGhpcy5yb3V0aW5nRGF0YSA/IGAgKHJlZGlyZWN0ZWQgZnJvbSAke3RoaXMuY29uZmlnLnNlcnZlcn0ke2hvc3RQb3N0Zml4fSlgIDogJyc7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYEZhaWxlZCB0byBjb25uZWN0IHRvICR7c2VydmVyfSR7cG9ydH0ke3JvdXRpbmdNZXNzYWdlfSBpbiAke3RoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdFRpbWVvdXR9bXNgO1xuICAgICAgdGhpcy5kZWJ1Zy5sb2cobWVzc2FnZSk7XG5cbiAgICAgIHRpbWVvdXRDb250cm9sbGVyLmFib3J0KG5ldyBDb25uZWN0aW9uRXJyb3IobWVzc2FnZSwgJ0VUSU1FT1VUJykpO1xuICAgIH0sIHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdFRpbWVvdXQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBzaWduYWwgPSBBYm9ydFNpZ25hbC5hbnkoW3RpbWVvdXRDb250cm9sbGVyLnNpZ25hbCwgdGhpcy5jbG9zZUNvbnRyb2xsZXIhLnNpZ25hbF0pO1xuXG4gICAgICBsZXQgcG9ydCA9IHRoaXMuY29uZmlnLm9wdGlvbnMucG9ydDtcblxuICAgICAgaWYgKCFwb3J0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcG9ydCA9IGF3YWl0IGluc3RhbmNlTG9va3VwKHtcbiAgICAgICAgICAgIHNlcnZlcjogdGhpcy5jb25maWcuc2VydmVyLFxuICAgICAgICAgICAgaW5zdGFuY2VOYW1lOiB0aGlzLmNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZSEsXG4gICAgICAgICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAgICAgc2lnbmFsOiBzaWduYWxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgICAgIHRocm93IG5ldyBDb25uZWN0aW9uRXJyb3IoZXJyLm1lc3NhZ2UsICdFSU5TVExPT0tVUCcsIHsgY2F1c2U6IGVyciB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgc29ja2V0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgc29ja2V0ID0gYXdhaXQgdGhpcy5jb25uZWN0T25Qb3J0KHBvcnQsIHRoaXMuY29uZmlnLm9wdGlvbnMubXVsdGlTdWJuZXRGYWlsb3Zlciwgc2lnbmFsLCB0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3Rvcik7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgICB0aHJvdyB0aGlzLndyYXBTb2NrZXRFcnJvcihlcnIpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBjb25zdCBvbkVycm9yID0gKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgICBjb250cm9sbGVyLmFib3J0KHRoaXMud3JhcFNvY2tldEVycm9yKGVycikpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvbkNsb3NlID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVidWcubG9nKCdjb25uZWN0aW9uIHRvICcgKyB0aGlzLmNvbmZpZy5zZXJ2ZXIgKyAnOicgKyB0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQgKyAnIGNsb3NlZCcpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvbkVuZCA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmRlYnVnLmxvZygnc29ja2V0IGVuZGVkJyk7XG5cbiAgICAgICAgICBjb25zdCBlcnJvcjogRXJyb3JXaXRoQ29kZSA9IG5ldyBFcnJvcignc29ja2V0IGhhbmcgdXAnKTtcbiAgICAgICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQodGhpcy53cmFwU29ja2V0RXJyb3IoZXJyb3IpKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb2NrZXQub25jZSgnZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgc29ja2V0Lm9uY2UoJ2Nsb3NlJywgb25DbG9zZSk7XG4gICAgICAgIHNvY2tldC5vbmNlKCdlbmQnLCBvbkVuZCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzaWduYWwgPSBBYm9ydFNpZ25hbC5hbnkoW3NpZ25hbCwgY29udHJvbGxlci5zaWduYWxdKTtcblxuICAgICAgICAgIC8vIFRoZSBjb25uZWN0aW9uIG1heSBoYXZlIGJlZW4gY2xvc2VkIHdoaWxlIHdlIHdlcmUgd2FpdGluZyBmb3IgdGhlXG4gICAgICAgICAgLy8gc29ja2V0IHRvIGNvbm5lY3QuIEFkZGluZyBhbiBhYm9ydCBsaXN0ZW5lciB0byBhbiBhbHJlYWR5IGFib3J0ZWRcbiAgICAgICAgICAvLyBzaWduYWwgd2lsbCBub3QgY2FsbCB0aGUgbGlzdGVuZXIsIHNvIHdlIG5lZWQgdG8gY2hlY2sgaGVyZS5cbiAgICAgICAgICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgICAgIHNvY2tldC5zZXRLZWVwQWxpdmUodHJ1ZSwgS0VFUF9BTElWRV9JTklUSUFMX0RFTEFZKTtcblxuICAgICAgICAgIHRoaXMubWVzc2FnZUlvID0gbmV3IE1lc3NhZ2VJTyhzb2NrZXQsIHRoaXMuY29uZmlnLm9wdGlvbnMucGFja2V0U2l6ZSwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlSW8ub24oJ3NlY3VyZScsIChjbGVhcnRleHQpID0+IHsgdGhpcy5lbWl0KCdzZWN1cmUnLCBjbGVhcnRleHQpOyB9KTtcblxuICAgICAgICAgIHRoaXMuc29ja2V0ID0gc29ja2V0O1xuXG4gICAgICAgICAgdGhpcy5kZWJ1Zy5sb2coJ2Nvbm5lY3RlZCB0byAnICsgdGhpcy5jb25maWcuc2VydmVyICsgJzonICsgdGhpcy5jb25maWcub3B0aW9ucy5wb3J0KTtcblxuICAgICAgICAgIHRoaXMuc2VuZFByZUxvZ2luKCk7XG5cbiAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfUFJFTE9HSU4pO1xuICAgICAgICAgIGNvbnN0IHByZWxvZ2luUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlYWRQcmVsb2dpblJlc3BvbnNlKHNpZ25hbCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wZXJmb3JtVGxzTmVnb3RpYXRpb24ocHJlbG9naW5SZXNwb25zZSwgc2lnbmFsKTtcblxuICAgICAgICAgIHRoaXMuc2VuZExvZ2luN1BhY2tldCgpO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgYXV0aGVudGljYXRpb24gfSA9IHRoaXMuY29uZmlnO1xuICAgICAgICAgICAgc3dpdGNoIChhdXRoZW50aWNhdGlvbi50eXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Rva2VuLWNyZWRlbnRpYWwnOlxuICAgICAgICAgICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJzpcbiAgICAgICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm0nOlxuICAgICAgICAgICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZSc6XG4gICAgICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0JzpcbiAgICAgICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1kZWZhdWx0JzpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfTE9HSU43X1dJVEhfRkVEQVVUSCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0aW5nRGF0YSA9IGF3YWl0IHRoaXMucGVyZm9ybVNlbnRMb2dpbjdXaXRoRmVkQXV0aChzaWduYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdudGxtJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfTE9HSU43X1dJVEhfTlRMTSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0aW5nRGF0YSA9IGF3YWl0IHRoaXMucGVyZm9ybVNlbnRMb2dpbjdXaXRoTlRMTUxvZ2luKHNpZ25hbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5TRU5UX0xPR0lON19XSVRIX1NUQU5EQVJEX0xPR0lOKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRpbmdEYXRhID0gYXdhaXQgdGhpcy5wZXJmb3JtU2VudExvZ2luN1dpdGhTdGFuZGFyZExvZ2luKHNpZ25hbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIGlmIChpc1RyYW5zaWVudEVycm9yKGVycikpIHtcbiAgICAgICAgICAgICAgdGhpcy5kZWJ1Zy5sb2coJ0luaXRpYXRpbmcgcmV0cnkgb24gdHJhbnNpZW50IGVycm9yJyk7XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuVFJBTlNJRU5UX0ZBSUxVUkVfUkVUUlkpO1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wZXJmb3JtVHJhbnNpZW50RmFpbHVyZVJldHJ5KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJZiByb3V0aW5nIGRhdGEgaXMgcHJlc2VudCwgd2UgbmVlZCB0byByZS1yb3V0ZSB0aGUgY29ubmVjdGlvblxuICAgICAgICAgIGlmICh0aGlzLnJvdXRpbmdEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlJFUk9VVElORyk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wZXJmb3JtUmVSb3V0aW5nKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5MT0dHRURfSU5fU0VORElOR19JTklUSUFMX1NRTCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wZXJmb3JtTG9nZ2VkSW5TZW5kaW5nSW5pdGlhbFNxbChzaWduYWwpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25DbG9zZSk7XG4gICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkVuZCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuXG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgc29ja2V0Lm9uKCdlcnJvcicsIHRoaXMuX29uU29ja2V0RXJyb3IpO1xuICAgICAgc29ja2V0Lm9uKCdjbG9zZScsIHRoaXMuX29uU29ja2V0Q2xvc2UpO1xuICAgICAgc29ja2V0Lm9uKCdlbmQnLCB0aGlzLl9vblNvY2tldEVuZCk7XG5cbiAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuTE9HR0VEX0lOKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xlYXJUaW1lb3V0KGNvbm5lY3RUaW1lcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjbGVhbnVwQ29ubmVjdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsZWFyUmVxdWVzdFRpbWVyKCk7XG4gICAgICB0aGlzLmNsZWFyQ2FuY2VsVGltZXIoKTtcbiAgICAgIHRoaXMuY2xvc2VDb25uZWN0aW9uKCk7XG5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE1hcmsgdGhlIGNvbm5lY3Rpb24gYXMgY2xvc2VkIGFuZCBkZXRhY2ggdGhlIGFjdGl2ZSByZXF1ZXN0XG4gICAgICAvLyBiZWZvcmUgaW52b2tpbmcgaXRzIGNhbGxiYWNrLCBzbyB0aGF0IGEgY2FsbGJhY2sgdGhhdCBzeW5jaHJvbm91c2x5XG4gICAgICAvLyBjYWxscyBgY2xvc2VgIGRvZXMgbm90IHJlLWVudGVyIHRoaXMgY2xlYW51cCBsb2dpYy5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnJlcXVlc3Q7XG4gICAgICB0aGlzLnJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmF0dGVudGlvblNlbnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdC5jYWxsYmFjayhuZXcgUmVxdWVzdEVycm9yKCdDb25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgcmVxdWVzdCBjb21wbGV0ZWQuJywgJ0VDTE9TRScpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZURlYnVnKCkge1xuICAgIGNvbnN0IGRlYnVnID0gbmV3IERlYnVnKHRoaXMuY29uZmlnLm9wdGlvbnMuZGVidWcpO1xuICAgIGRlYnVnLm9uKCdkZWJ1ZycsIChtZXNzYWdlKSA9PiB7XG4gICAgICB0aGlzLmVtaXQoJ2RlYnVnJywgbWVzc2FnZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRlYnVnO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVUb2tlblN0cmVhbVBhcnNlcihtZXNzYWdlOiBNZXNzYWdlLCBoYW5kbGVyOiBUb2tlbkhhbmRsZXIpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuU3RyZWFtUGFyc2VyKG1lc3NhZ2UsIHRoaXMuZGVidWcsIGhhbmRsZXIsIHRoaXMuY29uZmlnLm9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgd3JhcFdpdGhUbHMoc29ja2V0OiBuZXQuU29ja2V0LCBzaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTx0bHMuVExTU29ja2V0PiB7XG4gICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBjb25zdCBzZWN1cmVDb250ZXh0ID0gdGxzLmNyZWF0ZVNlY3VyZUNvbnRleHQodGhpcy5zZWN1cmVDb250ZXh0T3B0aW9ucyk7XG4gICAgLy8gSWYgY29ubmVjdCB0byBhbiBpcCBhZGRyZXNzIGRpcmVjdGx5LFxuICAgIC8vIG5lZWQgdG8gc2V0IHRoZSBzZXJ2ZXJuYW1lIHRvIGFuIGVtcHR5IHN0cmluZ1xuICAgIC8vIGlmIHRoZSB1c2VyIGhhcyBub3QgZ2l2ZW4gYSBzZXJ2ZXJuYW1lIGV4cGxpY2l0bHlcbiAgICBjb25zdCBzZXJ2ZXJOYW1lID0gIW5ldC5pc0lQKHRoaXMuY29uZmlnLnNlcnZlcikgPyB0aGlzLmNvbmZpZy5zZXJ2ZXIgOiAnJztcbiAgICBjb25zdCBlbmNyeXB0T3B0aW9ucyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMuY29uZmlnLnNlcnZlcixcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgQUxQTlByb3RvY29sczogWyd0ZHMvOC4wJ10sXG4gICAgICBzZWN1cmVDb250ZXh0OiBzZWN1cmVDb250ZXh0LFxuICAgICAgc2VydmVybmFtZTogdGhpcy5jb25maWcub3B0aW9ucy5zZXJ2ZXJOYW1lID8gdGhpcy5jb25maWcub3B0aW9ucy5zZXJ2ZXJOYW1lIDogc2VydmVyTmFtZSxcbiAgICB9O1xuXG4gICAgY29uc3QgeyBwcm9taXNlLCByZXNvbHZlLCByZWplY3QgfSA9IFByb21pc2Uud2l0aFJlc29sdmVyczx0bHMuVExTU29ja2V0PigpO1xuICAgIGNvbnN0IGVuY3J5cHRzb2NrZXQgPSB0bHMuY29ubmVjdChlbmNyeXB0T3B0aW9ucyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHsgcmVqZWN0KHNpZ25hbC5yZWFzb24pOyB9O1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBvbkVycm9yID0gcmVqZWN0O1xuICAgICAgICBjb25zdCBvbkNvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gV2l0aG91dCB0aGlzLCBOb2RlJ3MgVExTIGxheWVyIGlzIGZyZWUgdG8gY29hbGVzY2UgbXVsdGlwbGUgYmFjay10by1iYWNrXG4gICAgICAgICAgLy8gVERTIHBhY2tldCB3cml0ZXMgaW50byBhIHNpbmdsZSwgbGFyZ2VyIFRMUyByZWNvcmQuIFRoZSBub24tc3RyaWN0IGBzdGFydFRsc2BcbiAgICAgICAgICAvLyBwYXRoIChtZXNzYWdlLWlvLnRzKSBjYXBzIG1heCBzZW5kIGZyYWdtZW50IHRvIHRoZSBURFMgcGFja2V0IHNpemUgZm9yIHRoZVxuICAgICAgICAgIC8vIHNhbWUgcmVhc29uOyBgd3JhcFdpdGhUbHNgIChURFMgOC4wIC8gZW5jcnlwdDogXCJzdHJpY3RcIikgbXVzdCBtYXRjaCBpdC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFdpdGhvdXQgdGhpcyBmaXgsIGEgTE9HSU43IHNwYW5uaW5nIG11bHRpcGxlIFREUyBwYWNrZXRzIChlLmcuIGFueSBGZWRBdXRoXG4gICAgICAgICAgLy8gbG9naW4gY2FycnlpbmcgYW4gRW50cmEgSUQgYWNjZXNzIHRva2VuLCB3aGljaCByb3V0aW5lbHkgZXhjZWVkcyBvbmUgNEtCXG4gICAgICAgICAgLy8gcGFja2V0KSByZWxpYWJseSBmYWlscyB3aXRoIEVDT05OUkVTRVQgYWdhaW5zdCBBenVyZSBTUUwgb25jZSBUTFMgaXNcbiAgICAgICAgICAvLyBuZWdvdGlhdGVkIGJ1dCBiZWZvcmUgTE9HSU5BQ0sg4oCUIHNlZVxuICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90ZWRpb3VzanMvdGVkaW91cy9pc3N1ZXMvMTE4Mi4gU2luZ2xlLXBhY2tldCBsb2dpbnNcbiAgICAgICAgICAvLyAoZS5nLiBwbGFpbiBTUUwgYXV0aCB3aXRoIHNob3J0IGNyZWRlbnRpYWxzKSBhcmUgdW5hZmZlY3RlZCBlaXRoZXIgd2F5LFxuICAgICAgICAgIC8vIHdoaWNoIGlzIHdoeSB0aGlzIGJ1ZyByZWFkcyBhcyBcIkZlZEF1dGgtc3BlY2lmaWNcIiB1bnRpbCB5b3UgbG9vayBjbG9zZXIuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBgc2V0TWF4U2VuZEZyYWdtZW50YCBzaWxlbnRseSBuby1vcHMgZm9yIHZhbHVlcyBvdXRzaWRlIDUxMi0xNjM4NCwgc28gYVxuICAgICAgICAgIC8vIGBwYWNrZXRTaXplYCBhYm92ZSB0aGF0IChlLmcuIDMyNzY3LCBjb21tb25seSB1c2VkIGZvciBidWxrIGxvYWQpIGhhcyB0byBiZVxuICAgICAgICAgIC8vIGNsYW1wZWQgb3IgaXQgd291bGQgbGVhdmUgdGhlIGNhcCB1bnNldCBhbmQgcmVpbnRyb2R1Y2UgdGhlIGJ1ZyBpdCBmaXhlcy5cbiAgICAgICAgICBlbmNyeXB0c29ja2V0LnNldE1heFNlbmRGcmFnbWVudChNYXRoLm1pbih0aGlzLmNvbmZpZy5vcHRpb25zLnBhY2tldFNpemUsIE1lc3NhZ2VJTy5NQVhfVExTX1NFTkRfRlJBR01FTlRfU0laRSkpO1xuICAgICAgICAgIHJlc29sdmUoZW5jcnlwdHNvY2tldCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZW5jcnlwdHNvY2tldC5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICBlbmNyeXB0c29ja2V0Lm9uY2UoJ3NlY3VyZUNvbm5lY3QnLCBvbkNvbm5lY3QpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHByb21pc2U7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZW5jcnlwdHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgICBlbmNyeXB0c29ja2V0LnJlbW92ZUxpc3RlbmVyKCdzZWN1cmVDb25uZWN0Jywgb25Db25uZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGVuY3J5cHRzb2NrZXQuZGVzdHJveSgpO1xuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29ubmVjdE9uUG9ydChwb3J0OiBudW1iZXIsIG11bHRpU3VibmV0RmFpbG92ZXI6IGJvb2xlYW4sIHNpZ25hbDogQWJvcnRTaWduYWwsIGN1c3RvbUNvbm5lY3Rvcj86ICgpID0+IFByb21pc2U8bmV0LlNvY2tldD4pIHtcbiAgICBjb25zdCBjb25uZWN0T3B0cyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMucm91dGluZ0RhdGEgPyB0aGlzLnJvdXRpbmdEYXRhLnNlcnZlciA6IHRoaXMuY29uZmlnLnNlcnZlcixcbiAgICAgIHBvcnQ6IHRoaXMucm91dGluZ0RhdGEgPyB0aGlzLnJvdXRpbmdEYXRhLnBvcnQgOiBwb3J0LFxuICAgICAgbG9jYWxBZGRyZXNzOiB0aGlzLmNvbmZpZy5vcHRpb25zLmxvY2FsQWRkcmVzc1xuICAgIH07XG5cbiAgICBjb25zdCBjb25uZWN0ID0gY3VzdG9tQ29ubmVjdG9yIHx8IChtdWx0aVN1Ym5ldEZhaWxvdmVyID8gY29ubmVjdEluUGFyYWxsZWwgOiBjb25uZWN0SW5TZXF1ZW5jZSk7XG5cbiAgICBsZXQgc29ja2V0ID0gYXdhaXQgY29ubmVjdChjb25uZWN0T3B0cywgZG5zLmxvb2t1cCwgc2lnbmFsKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuY3J5cHQgPT09ICdzdHJpY3QnKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBXcmFwIHRoZSBzb2NrZXQgd2l0aCBUTFMgZm9yIFREUyA4LjBcbiAgICAgICAgc29ja2V0ID0gYXdhaXQgdGhpcy53cmFwV2l0aFRscyhzb2NrZXQsIHNpZ25hbCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc29ja2V0LmVuZCgpO1xuXG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc29ja2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjbG9zZUNvbm5lY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICB0aGlzLnNvY2tldC5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVDYW5jZWxUaW1lcigpIHtcbiAgICB0aGlzLmNsZWFyQ2FuY2VsVGltZXIoKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5jb25maWcub3B0aW9ucy5jYW5jZWxUaW1lb3V0O1xuICAgIGlmICh0aW1lb3V0ID4gMCkge1xuICAgICAgdGhpcy5jYW5jZWxUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbmNlbFRpbWVvdXQoKTtcbiAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY3JlYXRlUmVxdWVzdFRpbWVyKCkge1xuICAgIHRoaXMuY2xlYXJSZXF1ZXN0VGltZXIoKTsgLy8gcmVsZWFzZSBvbGQgdGltZXIsIGp1c3QgdG8gYmUgc2FmZVxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnJlcXVlc3QgYXMgUmVxdWVzdDtcbiAgICBjb25zdCB0aW1lb3V0ID0gKHJlcXVlc3QudGltZW91dCAhPT0gdW5kZWZpbmVkKSA/IHJlcXVlc3QudGltZW91dCA6IHRoaXMuY29uZmlnLm9wdGlvbnMucmVxdWVzdFRpbWVvdXQ7XG4gICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgIHRoaXMucmVxdWVzdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVxdWVzdFRpbWVvdXQoKTtcbiAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FuY2VsVGltZW91dCgpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYEZhaWxlZCB0byBjYW5jZWwgcmVxdWVzdCBpbiAke3RoaXMuY29uZmlnLm9wdGlvbnMuY2FuY2VsVGltZW91dH1tc2A7XG4gICAgdGhpcy5kZWJ1Zy5sb2cobWVzc2FnZSk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCdzb2NrZXRFcnJvcicsIG5ldyBDb25uZWN0aW9uRXJyb3IobWVzc2FnZSwgJ0VUSU1FT1VUJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZXF1ZXN0VGltZW91dCgpIHtcbiAgICB0aGlzLnJlcXVlc3RUaW1lciA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0ITtcbiAgICByZXF1ZXN0LmNhbmNlbCgpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSAocmVxdWVzdC50aW1lb3V0ICE9PSB1bmRlZmluZWQpID8gcmVxdWVzdC50aW1lb3V0IDogdGhpcy5jb25maWcub3B0aW9ucy5yZXF1ZXN0VGltZW91dDtcbiAgICBjb25zdCBtZXNzYWdlID0gJ1RpbWVvdXQ6IFJlcXVlc3QgZmFpbGVkIHRvIGNvbXBsZXRlIGluICcgKyB0aW1lb3V0ICsgJ21zJztcbiAgICByZXF1ZXN0LmVycm9yID0gbmV3IFJlcXVlc3RFcnJvcihtZXNzYWdlLCAnRVRJTUVPVVQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2xlYXJDYW5jZWxUaW1lcigpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2FuY2VsVGltZXIpO1xuICAgICAgdGhpcy5jYW5jZWxUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsZWFyUmVxdWVzdFRpbWVyKCkge1xuICAgIGlmICh0aGlzLnJlcXVlc3RUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVxdWVzdFRpbWVyKTtcbiAgICAgIHRoaXMucmVxdWVzdFRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdHJhbnNpdGlvblRvKG5ld1N0YXRlOiBTdGF0ZSkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSBuZXdTdGF0ZSkge1xuICAgICAgdGhpcy5kZWJ1Zy5sb2coJ1N0YXRlIGlzIGFscmVhZHkgJyArIG5ld1N0YXRlLm5hbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuZXhpdCkge1xuICAgICAgdGhpcy5zdGF0ZS5leGl0LmNhbGwodGhpcywgbmV3U3RhdGUpO1xuICAgIH1cblxuICAgIHRoaXMuZGVidWcubG9nKCdTdGF0ZSBjaGFuZ2U6ICcgKyAodGhpcy5zdGF0ZSA/IHRoaXMuc3RhdGUubmFtZSA6ICd1bmRlZmluZWQnKSArICcgLT4gJyArIG5ld1N0YXRlLm5hbWUpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmVudGVyKSB7XG4gICAgICB0aGlzLnN0YXRlLmVudGVyLmFwcGx5KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0RXZlbnRIYW5kbGVyPFQgZXh0ZW5kcyBrZXlvZiBTdGF0ZVsnZXZlbnRzJ10+KGV2ZW50TmFtZTogVCk6IE5vbk51bGxhYmxlPFN0YXRlWydldmVudHMnXVtUXT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLnN0YXRlLmV2ZW50c1tldmVudE5hbWVdO1xuXG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGV2ZW50ICcke2V2ZW50TmFtZX0nIGluIHN0YXRlICcke3RoaXMuc3RhdGUubmFtZX0nYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZXIhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkaXNwYXRjaEV2ZW50PFQgZXh0ZW5kcyBrZXlvZiBTdGF0ZVsnZXZlbnRzJ10+KGV2ZW50TmFtZTogVCwgLi4uYXJnczogUGFyYW1ldGVyczxOb25OdWxsYWJsZTxTdGF0ZVsnZXZlbnRzJ11bVF0+Pikge1xuICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLnN0YXRlLmV2ZW50c1tldmVudE5hbWVdIGFzICgodGhpczogQ29ubmVjdGlvbiwgLi4uYXJnczogYW55W10pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKGBObyBldmVudCAnJHtldmVudE5hbWV9JyBpbiBzdGF0ZSAnJHt0aGlzLnN0YXRlLm5hbWV9J2ApKTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHdyYXBTb2NrZXRFcnJvcihlcnJvcjogRXJyb3IpOiBDb25uZWN0aW9uRXJyb3Ige1xuICAgIGlmICh0aGlzLnN0YXRlID09PSB0aGlzLlNUQVRFLkNPTk5FQ1RJTkcgfHwgdGhpcy5zdGF0ZSA9PT0gdGhpcy5TVEFURS5TRU5UX1RMU1NTTE5FR09USUFUSU9OKSB7XG4gICAgICBjb25zdCBob3N0UG9zdGZpeCA9IHRoaXMuY29uZmlnLm9wdGlvbnMucG9ydCA/IGA6JHt0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnR9YCA6IGBcXFxcJHt0aGlzLmNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZX1gO1xuICAgICAgLy8gSWYgd2UgaGF2ZSByb3V0aW5nIGRhdGEgc3RvcmVkLCB0aGlzIGNvbm5lY3Rpb24gaGFzIGJlZW4gcmVkaXJlY3RlZFxuICAgICAgY29uc3Qgc2VydmVyID0gdGhpcy5yb3V0aW5nRGF0YSA/IHRoaXMucm91dGluZ0RhdGEuc2VydmVyIDogdGhpcy5jb25maWcuc2VydmVyO1xuICAgICAgY29uc3QgcG9ydCA9IHRoaXMucm91dGluZ0RhdGEgPyBgOiR7dGhpcy5yb3V0aW5nRGF0YS5wb3J0fWAgOiBob3N0UG9zdGZpeDtcbiAgICAgIC8vIEdyYWIgdGhlIHRhcmdldCBob3N0IGZyb20gdGhlIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiwgYW5kIGZyb20gYSByZWRpcmVjdCBtZXNzYWdlXG4gICAgICAvLyBvdGhlcndpc2UsIGxlYXZlIHRoZSBtZXNzYWdlIGVtcHR5LlxuICAgICAgY29uc3Qgcm91dGluZ01lc3NhZ2UgPSB0aGlzLnJvdXRpbmdEYXRhID8gYCAocmVkaXJlY3RlZCBmcm9tICR7dGhpcy5jb25maWcuc2VydmVyfSR7aG9zdFBvc3RmaXh9KWAgOiAnJztcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRmFpbGVkIHRvIGNvbm5lY3QgdG8gJHtzZXJ2ZXJ9JHtwb3J0fSR7cm91dGluZ01lc3NhZ2V9IC0gJHtlcnJvci5tZXNzYWdlfWA7XG5cbiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbkVycm9yKG1lc3NhZ2UsICdFU09DS0VUJywgeyBjYXVzZTogZXJyb3IgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQ29ubmVjdGlvbiBsb3N0IC0gJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25FcnJvcihtZXNzYWdlLCAnRVNPQ0tFVCcsIHsgY2F1c2U6IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29ja2V0RW5kKCkge1xuICAgIHRoaXMuZGVidWcubG9nKCdzb2NrZXQgZW5kZWQnKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gdGhpcy5TVEFURS5GSU5BTCkge1xuICAgICAgY29uc3QgZXJyb3I6IEVycm9yV2l0aENvZGUgPSBuZXcgRXJyb3IoJ3NvY2tldCBoYW5nIHVwJyk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ3NvY2tldEVycm9yJywgZXJyb3IpO1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzLndyYXBTb2NrZXRFcnJvcihlcnJvcikpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzb2NrZXRDbG9zZSgpIHtcbiAgICB0aGlzLmRlYnVnLmxvZygnY29ubmVjdGlvbiB0byAnICsgdGhpcy5jb25maWcuc2VydmVyICsgJzonICsgdGhpcy5jb25maWcub3B0aW9ucy5wb3J0ICsgJyBjbG9zZWQnKTtcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICB0aGlzLmNsZWFudXBDb25uZWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNlbmRQcmVMb2dpbigpIHtcbiAgICBjb25zdCBbLCBtYWpvciwgbWlub3IsIGJ1aWxkXSA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspLy5leGVjKHZlcnNpb24pID8/IFsnMC4wLjAnLCAnMCcsICcwJywgJzAnXTtcbiAgICBjb25zdCBwYXlsb2FkID0gbmV3IFByZWxvZ2luUGF5bG9hZCh7XG4gICAgICAvLyBJZiBlbmNyeXB0IHNldHRpbmcgaXMgc2V0IHRvICdzdHJpY3QnLCB0aGVuIHdlIHNob3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgZW5jcnlwdGlvbiBiZWZvcmUgY2FsbGluZ1xuICAgICAgLy8gdGhpcyBmdW5jdGlvbi4gVGhlcmVmb3JlLCB0aGUgZW5jcnlwdCB3aWxsIGJlIHNldCB0byBmYWxzZSBoZXJlLlxuICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3aWxsIHNldCBlbmNyeXB0IGhlcmUgYmFzZWQgb24gdGhlIGVuY3J5cHQgQm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBjb25maWd1cmF0aW9uLlxuICAgICAgZW5jcnlwdDogdHlwZW9mIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5jcnlwdCA9PT0gJ2Jvb2xlYW4nICYmIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5jcnlwdCxcbiAgICAgIHZlcnNpb246IHsgbWFqb3I6IE51bWJlcihtYWpvciksIG1pbm9yOiBOdW1iZXIobWlub3IpLCBidWlsZDogTnVtYmVyKGJ1aWxkKSwgc3ViYnVpbGQ6IDAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5tZXNzYWdlSW8uc2VuZE1lc3NhZ2UoVFlQRS5QUkVMT0dJTiwgcGF5bG9hZC5kYXRhKTtcbiAgICB0aGlzLmRlYnVnLnBheWxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcGF5bG9hZC50b1N0cmluZygnICAnKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2VuZExvZ2luN1BhY2tldCgpIHtcbiAgICBjb25zdCBwYXlsb2FkID0gbmV3IExvZ2luN1BheWxvYWQoe1xuICAgICAgdGRzVmVyc2lvbjogdmVyc2lvbnNbdGhpcy5jb25maWcub3B0aW9ucy50ZHNWZXJzaW9uXSxcbiAgICAgIHBhY2tldFNpemU6IHRoaXMuY29uZmlnLm9wdGlvbnMucGFja2V0U2l6ZSxcbiAgICAgIGNsaWVudFByb2dWZXI6IDAsXG4gICAgICBjbGllbnRQaWQ6IHByb2Nlc3MucGlkLFxuICAgICAgY29ubmVjdGlvbklkOiAwLFxuICAgICAgY2xpZW50VGltZVpvbmU6IG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSxcbiAgICAgIGNsaWVudExjaWQ6IDB4MDAwMDA0MDlcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRpb24gfSA9IHRoaXMuY29uZmlnO1xuICAgIHN3aXRjaCAoYXV0aGVudGljYXRpb24udHlwZSkge1xuICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1wYXNzd29yZCc6XG4gICAgICAgIHBheWxvYWQuZmVkQXV0aCA9IHtcbiAgICAgICAgICB0eXBlOiAnQURBTCcsXG4gICAgICAgICAgZWNobzogdGhpcy5mZWRBdXRoUmVxdWlyZWQsXG4gICAgICAgICAgd29ya2Zsb3c6ICdkZWZhdWx0J1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW4nOlxuICAgICAgICBwYXlsb2FkLmZlZEF1dGggPSB7XG4gICAgICAgICAgdHlwZTogJ1NFQ1VSSVRZVE9LRU4nLFxuICAgICAgICAgIGVjaG86IHRoaXMuZmVkQXV0aFJlcXVpcmVkLFxuICAgICAgICAgIGZlZEF1dGhUb2tlbjogYXV0aGVudGljYXRpb24ub3B0aW9ucy50b2tlblxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndG9rZW4tY3JlZGVudGlhbCc6XG4gICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bSc6XG4gICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnOlxuICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2UnOlxuICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnOlxuICAgICAgICBwYXlsb2FkLmZlZEF1dGggPSB7XG4gICAgICAgICAgdHlwZTogJ0FEQUwnLFxuICAgICAgICAgIGVjaG86IHRoaXMuZmVkQXV0aFJlcXVpcmVkLFxuICAgICAgICAgIHdvcmtmbG93OiAnaW50ZWdyYXRlZCdcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ250bG0nOlxuICAgICAgICBwYXlsb2FkLnNzcGkgPSBjcmVhdGVOVExNUmVxdWVzdCh7IGRvbWFpbjogYXV0aGVudGljYXRpb24ub3B0aW9ucy5kb21haW4gfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXlsb2FkLnVzZXJOYW1lID0gYXV0aGVudGljYXRpb24ub3B0aW9ucy51c2VyTmFtZTtcbiAgICAgICAgcGF5bG9hZC5wYXNzd29yZCA9IGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMucGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgcGF5bG9hZC5ob3N0bmFtZSA9IHRoaXMuY29uZmlnLm9wdGlvbnMud29ya3N0YXRpb25JZCB8fCBvcy5ob3N0bmFtZSgpO1xuICAgIHBheWxvYWQuc2VydmVyTmFtZSA9IHRoaXMucm91dGluZ0RhdGEgP1xuICAgICAgYCR7dGhpcy5yb3V0aW5nRGF0YS5zZXJ2ZXJ9JHt0aGlzLnJvdXRpbmdEYXRhLmluc3RhbmNlID8gJ1xcXFwnICsgdGhpcy5yb3V0aW5nRGF0YS5pbnN0YW5jZSA6ICcnfWAgOlxuICAgICAgdGhpcy5jb25maWcuc2VydmVyO1xuICAgIHBheWxvYWQuYXBwTmFtZSA9IHRoaXMuY29uZmlnLm9wdGlvbnMuYXBwTmFtZSB8fCAnVGVkaW91cyc7XG4gICAgcGF5bG9hZC5saWJyYXJ5TmFtZSA9IGxpYnJhcnlOYW1lO1xuICAgIHBheWxvYWQubGFuZ3VhZ2UgPSB0aGlzLmNvbmZpZy5vcHRpb25zLmxhbmd1YWdlO1xuICAgIHBheWxvYWQuZGF0YWJhc2UgPSB0aGlzLmNvbmZpZy5vcHRpb25zLmRhdGFiYXNlO1xuICAgIHBheWxvYWQuY2xpZW50SWQgPSBCdWZmZXIuZnJvbShbMSwgMiwgMywgNCwgNSwgNl0pO1xuXG4gICAgcGF5bG9hZC5yZWFkT25seUludGVudCA9IHRoaXMuY29uZmlnLm9wdGlvbnMucmVhZE9ubHlJbnRlbnQ7XG4gICAgcGF5bG9hZC5pbml0RGJGYXRhbCA9ICF0aGlzLmNvbmZpZy5vcHRpb25zLmZhbGxiYWNrVG9EZWZhdWx0RGI7XG5cbiAgICB0aGlzLnJvdXRpbmdEYXRhID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWVzc2FnZUlvLnNlbmRNZXNzYWdlKFRZUEUuTE9HSU43LCBwYXlsb2FkLnRvQnVmZmVyKCkpO1xuXG4gICAgdGhpcy5kZWJ1Zy5wYXlsb2FkKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHBheWxvYWQudG9TdHJpbmcoJyAgJyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNlbmRGZWRBdXRoVG9rZW5NZXNzYWdlKHRva2VuOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbkxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHRva2VuLCAndWNzMicpO1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOCArIGFjY2Vzc1Rva2VuTGVuKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBvZmZzZXQgPSBkYXRhLndyaXRlVUludDMyTEUoYWNjZXNzVG9rZW5MZW4gKyA0LCBvZmZzZXQpO1xuICAgIG9mZnNldCA9IGRhdGEud3JpdGVVSW50MzJMRShhY2Nlc3NUb2tlbkxlbiwgb2Zmc2V0KTtcbiAgICBkYXRhLndyaXRlKHRva2VuLCBvZmZzZXQsICd1Y3MyJyk7XG4gICAgdGhpcy5tZXNzYWdlSW8uc2VuZE1lc3NhZ2UoVFlQRS5GRURBVVRIX1RPS0VOLCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2VuZEluaXRpYWxTcWwoKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IG5ldyBTcWxCYXRjaFBheWxvYWQodGhpcy5nZXRJbml0aWFsU3FsKCksIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpLCB0aGlzLmNvbmZpZy5vcHRpb25zKTtcblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7IHR5cGU6IFRZUEUuU1FMX0JBVENIIH0pO1xuICAgIHRoaXMubWVzc2FnZUlvLm91dGdvaW5nTWVzc2FnZVN0cmVhbS53cml0ZShtZXNzYWdlKTtcbiAgICBSZWFkYWJsZS5mcm9tKHBheWxvYWQpLnBpcGUobWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEluaXRpYWxTcWwoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGwgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFuc2lfbnVsbHMgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGwgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhbnNpX251bGxzIG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdCA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYW5zaV9udWxsX2RmbHRfb24gb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGxEZWZhdWx0ID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYW5zaV9udWxsX2RmbHRfb24gb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVBhZGRpbmcgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFuc2lfcGFkZGluZyBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpUGFkZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFuc2lfcGFkZGluZyBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3MgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFuc2lfd2FybmluZ3Mgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVdhcm5pbmdzID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYW5zaV93YXJuaW5ncyBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBcml0aEFib3J0ID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhcml0aGFib3J0IG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFyaXRoQWJvcnQgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhcml0aGFib3J0IG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBjb25jYXRfbnVsbF95aWVsZHNfbnVsbCBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVDb25jYXROdWxsWWllbGRzTnVsbCA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGNvbmNhdF9udWxsX3lpZWxkc19udWxsIG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUN1cnNvckNsb3NlT25Db21taXQgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGN1cnNvcl9jbG9zZV9vbl9jb21taXQgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdCA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGN1cnNvcl9jbG9zZV9vbl9jb21taXQgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0ICE9PSBudWxsKSB7XG4gICAgICBvcHRpb25zLnB1c2goYHNldCBkYXRlZmlyc3QgJHt0aGlzLmNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdH1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5kYXRlRm9ybWF0ICE9PSBudWxsKSB7XG4gICAgICBvcHRpb25zLnB1c2goYHNldCBkYXRlZm9ybWF0ICR7dGhpcy5jb25maWcub3B0aW9ucy5kYXRlRm9ybWF0fWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBpbXBsaWNpdF90cmFuc2FjdGlvbnMgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnMgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBpbXBsaWNpdF90cmFuc2FjdGlvbnMgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2UgIT09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgc2V0IGxhbmd1YWdlICR7dGhpcy5jb25maWcub3B0aW9ucy5sYW5ndWFnZX1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVOdW1lcmljUm91bmRhYm9ydCA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgbnVtZXJpY19yb3VuZGFib3J0IG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZU51bWVyaWNSb3VuZGFib3J0ID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgbnVtZXJpY19yb3VuZGFib3J0IG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZVF1b3RlZElkZW50aWZpZXIgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IHF1b3RlZF9pZGVudGlmaWVyIG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZVF1b3RlZElkZW50aWZpZXIgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBxdW90ZWRfaWRlbnRpZmllciBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy50ZXh0c2l6ZSAhPT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5wdXNoKGBzZXQgdGV4dHNpemUgJHt0aGlzLmNvbmZpZy5vcHRpb25zLnRleHRzaXplfWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCAhPT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5wdXNoKGBzZXQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsICR7dGhpcy5nZXRJc29sYXRpb25MZXZlbFRleHQodGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0aW9uSXNvbGF0aW9uTGV2ZWwpfWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmFib3J0VHJhbnNhY3Rpb25PbkVycm9yID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCB4YWN0X2Fib3J0IG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmFib3J0VHJhbnNhY3Rpb25PbkVycm9yID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgeGFjdF9hYm9ydCBvZmYnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBTUUwgYmF0Y2ggcmVwcmVzZW50ZWQgYnkgW1tSZXF1ZXN0XV0uXG4gICAqIFRoZXJlIGlzIG5vIHBhcmFtIHN1cHBvcnQsIGFuZCB1bmxpa2UgW1tleGVjU3FsXV0sXG4gICAqIGl0IGlzIG5vdCBsaWtlbHkgdGhhdCBTUUwgU2VydmVyIHdpbGwgcmV1c2UgdGhlIGV4ZWN1dGlvbiBwbGFuIGl0IGdlbmVyYXRlcyBmb3IgdGhlIFNRTC5cbiAgICpcbiAgICogSW4gYWxtb3N0IGFsbCBjYXNlcywgW1tleGVjU3FsXV0gd2lsbCBiZSBhIGJldHRlciBjaG9pY2UuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IEEgW1tSZXF1ZXN0XV0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVxdWVzdC5cbiAgICovXG4gIGV4ZWNTcWxCYXRjaChyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBUWVBFLlNRTF9CQVRDSCwgbmV3IFNxbEJhdGNoUGF5bG9hZChyZXF1ZXN0LnNxbFRleHRPclByb2NlZHVyZSEsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpLCB0aGlzLmNvbmZpZy5vcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogIEV4ZWN1dGUgdGhlIFNRTCByZXByZXNlbnRlZCBieSBbW1JlcXVlc3RdXS5cbiAgICpcbiAgICogQXMgYHNwX2V4ZWN1dGVzcWxgIGlzIHVzZWQgdG8gZXhlY3V0ZSB0aGUgU1FMLCBpZiB0aGUgc2FtZSBTUUwgaXMgZXhlY3V0ZWQgbXVsdGlwbGVzIHRpbWVzXG4gICAqIHVzaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBTUUwgU2VydmVyIHF1ZXJ5IG9wdGltaXplciBpcyBsaWtlbHkgdG8gcmV1c2UgdGhlIGV4ZWN1dGlvbiBwbGFuIGl0IGdlbmVyYXRlc1xuICAgKiBmb3IgdGhlIGZpcnN0IGV4ZWN1dGlvbi4gVGhpcyBtYXkgYWxzbyByZXN1bHQgaW4gU1FMIHNlcnZlciB0cmVhdGluZyB0aGUgcmVxdWVzdCBsaWtlIGEgc3RvcmVkIHByb2NlZHVyZVxuICAgKiB3aGljaCBjYW4gcmVzdWx0IGluIHRoZSBbW0V2ZW50X2RvbmVJblByb2NdXSBvciBbW0V2ZW50X2RvbmVQcm9jXV0gZXZlbnRzIGJlaW5nIGVtaXR0ZWQgaW5zdGVhZCBvZiB0aGVcbiAgICogW1tFdmVudF9kb25lXV0gZXZlbnQgeW91IG1pZ2h0IGV4cGVjdC4gVXNpbmcgW1tleGVjU3FsQmF0Y2hdXSB3aWxsIHByZXZlbnQgdGhpcyBmcm9tIG9jY3VycmluZyBidXQgbWF5IGhhdmUgYSBuZWdhdGl2ZSBwZXJmb3JtYW5jZSBpbXBhY3QuXG4gICAqXG4gICAqIEJld2FyZSBvZiB0aGUgd2F5IHRoYXQgc2NvcGluZyBydWxlcyBhcHBseSwgYW5kIGhvdyB0aGV5IG1heSBbYWZmZWN0IGxvY2FsIHRlbXAgdGFibGVzXShodHRwOi8vd2VibG9ncy5zcWx0ZWFtLmNvbS9tbGFkZW5wL2FyY2hpdmUvMjAwNi8xMS8wMy8xNzE5Ny5hc3B4KVxuICAgKiBJZiB5b3UncmUgcnVubmluZyBpbiB0byBzY29waW5nIGlzc3VlcywgdGhlbiBbW2V4ZWNTcWxCYXRjaF1dIG1heSBiZSBhIGJldHRlciBjaG9pY2UuXG4gICAqIFNlZSBhbHNvIFtpc3N1ZSAjMjRdKGh0dHBzOi8vZ2l0aHViLmNvbS9wZWtpbS90ZWRpb3VzL2lzc3Vlcy8yNClcbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgQSBbW1JlcXVlc3RdXSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgZXhlY1NxbChyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlcXVlc3QudmFsaWRhdGVQYXJhbWV0ZXJzKHRoaXMuZGF0YWJhc2VDb2xsYXRpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJlcXVlc3QuZXJyb3IgPSBlcnJvcjtcblxuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHRoaXMuZGVidWcubG9nKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICByZXF1ZXN0LmNhbGxiYWNrKGVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyczogUGFyYW1ldGVyW10gPSBbXTtcblxuICAgIHBhcmFtZXRlcnMucHVzaCh7XG4gICAgICB0eXBlOiBUWVBFUy5OVmFyQ2hhcixcbiAgICAgIG5hbWU6ICdzdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHJlcXVlc3Quc3FsVGV4dE9yUHJvY2VkdXJlLFxuICAgICAgb3V0cHV0OiBmYWxzZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICBzY2FsZTogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICBpZiAocmVxdWVzdC5wYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgcGFyYW1ldGVycy5wdXNoKHtcbiAgICAgICAgdHlwZTogVFlQRVMuTlZhckNoYXIsXG4gICAgICAgIG5hbWU6ICdwYXJhbXMnLFxuICAgICAgICB2YWx1ZTogcmVxdWVzdC5tYWtlUGFyYW1zUGFyYW1ldGVyKHJlcXVlc3QucGFyYW1ldGVycyksXG4gICAgICAgIG91dHB1dDogZmFsc2UsXG4gICAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgc2NhbGU6IHVuZGVmaW5lZFxuICAgICAgfSk7XG5cbiAgICAgIHBhcmFtZXRlcnMucHVzaCguLi5yZXF1ZXN0LnBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKFByb2NlZHVyZXMuU3BfRXhlY3V0ZVNxbCwgcGFyYW1ldGVycywgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCksIHRoaXMuY29uZmlnLm9wdGlvbnMsIHRoaXMuZGF0YWJhc2VDb2xsYXRpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEJ1bGtMb2FkIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gdGFibGUgVGhlIG5hbWUgb2YgdGhlIHRhYmxlIHRvIGJ1bGstaW5zZXJ0IGludG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIEEgc2V0IG9mIGJ1bGsgbG9hZCBvcHRpb25zLlxuICAgKi9cbiAgbmV3QnVsa0xvYWQodGFibGU6IHN0cmluZywgY2FsbGJhY2s6IEJ1bGtMb2FkQ2FsbGJhY2spOiBCdWxrTG9hZFxuICBuZXdCdWxrTG9hZCh0YWJsZTogc3RyaW5nLCBvcHRpb25zOiBCdWxrTG9hZE9wdGlvbnMsIGNhbGxiYWNrOiBCdWxrTG9hZENhbGxiYWNrKTogQnVsa0xvYWRcbiAgbmV3QnVsa0xvYWQodGFibGU6IHN0cmluZywgY2FsbGJhY2tPck9wdGlvbnM6IEJ1bGtMb2FkT3B0aW9ucyB8IEJ1bGtMb2FkQ2FsbGJhY2ssIGNhbGxiYWNrPzogQnVsa0xvYWRDYWxsYmFjaykge1xuICAgIGxldCBvcHRpb25zOiBCdWxrTG9hZE9wdGlvbnM7XG5cbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FsbGJhY2sgPSBjYWxsYmFja09yT3B0aW9ucyBhcyBCdWxrTG9hZENhbGxiYWNrO1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gY2FsbGJhY2tPck9wdGlvbnMgYXMgQnVsa0xvYWRPcHRpb25zO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wib3B0aW9uc1wiIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQnVsa0xvYWQodGFibGUsIHRoaXMuZGF0YWJhc2VDb2xsYXRpb24sIHRoaXMuY29uZmlnLm9wdGlvbnMsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgW1tCdWxrTG9hZF1dLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAvLyBXZSB3YW50IHRvIHBlcmZvcm0gYSBidWxrIGxvYWQgaW50byBhIHRhYmxlIHdpdGggdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gICAqIC8vIENSRUFURSBUQUJMRSBlbXBsb3llZXMgKGZpcnN0X25hbWUgbnZhcmNoYXIoMjU1KSwgbGFzdF9uYW1lIG52YXJjaGFyKDI1NSksIGRheV9vZl9iaXJ0aCBkYXRlKTtcbiAgICpcbiAgICogY29uc3QgYnVsa0xvYWQgPSBjb25uZWN0aW9uLm5ld0J1bGtMb2FkKCdlbXBsb3llZXMnLCAoZXJyLCByb3dDb3VudCkgPT4ge1xuICAgKiAgIC8vIC4uLlxuICAgKiB9KTtcbiAgICpcbiAgICogLy8gRmlyc3QsIHdlIG5lZWQgdG8gc3BlY2lmeSB0aGUgY29sdW1ucyB0aGF0IHdlIHdhbnQgdG8gd3JpdGUgdG8sXG4gICAqIC8vIGFuZCB0aGVpciBkZWZpbml0aW9ucy4gVGhlc2UgZGVmaW5pdGlvbnMgbXVzdCBtYXRjaCB0aGUgYWN0dWFsIHRhYmxlLFxuICAgKiAvLyBvdGhlcndpc2UgdGhlIGJ1bGsgbG9hZCB3aWxsIGZhaWwuXG4gICAqIGJ1bGtMb2FkLmFkZENvbHVtbignZmlyc3RfbmFtZScsIFRZUEVTLk5WYXJjaGFyLCB7IG51bGxhYmxlOiBmYWxzZSB9KTtcbiAgICogYnVsa0xvYWQuYWRkQ29sdW1uKCdsYXN0X25hbWUnLCBUWVBFUy5OVmFyY2hhciwgeyBudWxsYWJsZTogZmFsc2UgfSk7XG4gICAqIGJ1bGtMb2FkLmFkZENvbHVtbignZGF5X29mX2JpcnRoJywgVFlQRVMuRGF0ZSwgeyBudWxsYWJsZTogZmFsc2UgfSk7XG4gICAqXG4gICAqIC8vIEV4ZWN1dGUgYSBidWxrIGxvYWQgd2l0aCBhIHByZWRlZmluZWQgbGlzdCBvZiByb3dzLlxuICAgKiAvL1xuICAgKiAvLyBOb3RlIHRoYXQgdGhlc2Ugcm93cyBhcmUgaGVsZCBpbiBtZW1vcnkgdW50aWwgdGhlXG4gICAqIC8vIGJ1bGsgbG9hZCB3YXMgcGVyZm9ybWVkLCBzbyBpZiB5b3UgbmVlZCB0byB3cml0ZSBhIGxhcmdlXG4gICAqIC8vIG51bWJlciBvZiByb3dzIChlLmcuIGJ5IHJlYWRpbmcgZnJvbSBhIENTViBmaWxlKSxcbiAgICogLy8gcGFzc2luZyBhbiBgQXN5bmNJdGVyYWJsZWAgaXMgYWR2aXNhYmxlIHRvIGtlZXAgbWVtb3J5IHVzYWdlIGxvdy5cbiAgICogY29ubmVjdGlvbi5leGVjQnVsa0xvYWQoYnVsa0xvYWQsIFtcbiAgICogICB7ICdmaXJzdF9uYW1lJzogJ1N0ZXZlJywgJ2xhc3RfbmFtZSc6ICdKb2JzJywgJ2RheV9vZl9iaXJ0aCc6IG5ldyBEYXRlKCcwMi0yNC0xOTU1JykgfSxcbiAgICogICB7ICdmaXJzdF9uYW1lJzogJ0JpbGwnLCAnbGFzdF9uYW1lJzogJ0dhdGVzJywgJ2RheV9vZl9iaXJ0aCc6IG5ldyBEYXRlKCcxMC0yOC0xOTU1JykgfVxuICAgKiBdKTtcbiAgICogYGBgXG4gICAqXG4gICAqICMjIyBUaGUgcm93IHNvdXJjZVxuICAgKlxuICAgKiBUaGUgY29ubmVjdGlvbiBvd25zIGByb3dzYCBmcm9tIHRoaXMgY2FsbCBvbiwgdGhlIHdheSBhIGBmb3IgYXdhaXRgXG4gICAqIGxvb3Agb3ducyB3aGF0IGl0IGl0ZXJhdGVzLiBUaGUgZmlyc3Qgcm93IGlzIHJlcXVlc3RlZCByaWdodCBhd2F5LFxuICAgKiB0aGUgcmVzdCBvbmNlIHRoZSBzZXJ2ZXIgaGFzIGFjY2VwdGVkIHRoZSBidWxrIGxvYWQsIGFuZCB0aGUgc291cmNlXG4gICAqIGlzIGNsb3NlZCB0aHJvdWdoIGl0cyBpdGVyYXRvcidzIGByZXR1cm4oKWAgd2hlbmV2ZXIgdGhlIGJ1bGsgbG9hZFxuICAgKiBkb2VzIG5vdCBydW4gdG8gY29tcGxldGlvbjogYSByb3cgZmFpbGVkLCB0aGUgYnVsayBsb2FkIHdhcyBjYW5jZWxlZCxcbiAgICogdGhlIHNlcnZlciByZWplY3RlZCB0aGUgYElOU0VSVCBCVUxLYCBzdGF0ZW1lbnQsIG9yIHRoZSBjb25uZWN0aW9uXG4gICAqIHdhcyBsb3N0LiBGb3IgYSBOb2RlLmpzIHN0cmVhbSB0aGF0IGRlc3Ryb3lzIHRoZSBzdHJlYW0uIEEgcmVhZCB0aGF0XG4gICAqIGlzIHN0aWxsIHBlbmRpbmcgaW4gdGhlIHNvdXJjZSBjYW5ub3QgYmUgaW50ZXJydXB0ZWQ7IHRoZSBzb3VyY2UgaXNcbiAgICogY2xvc2VkIG9uY2UgaXQgaGFzIHNldHRsZWQuXG4gICAqXG4gICAqIEFuIGFzeW5jIGdlbmVyYXRvciB0aGF0IGFjcXVpcmVzIHdoYXQgaXQgcmVhZHMgZnJvbSBvbmNlIGl0IGlzXG4gICAqIHN0YXJ0ZWQgdGhlcmVmb3JlIHJlbGVhc2VzIGl0IG9uIGV2ZXJ5IHBhdGgsIHRocm91Z2ggaXRzIGBmaW5hbGx5YDpcbiAgICpcbiAgICogYGBganNcbiAgICogYXN5bmMgZnVuY3Rpb24qIGVtcGxveWVlcygpIHtcbiAgICogICBjb25zdCBmaWxlID0gYXdhaXQgZnMucHJvbWlzZXMub3BlbignZW1wbG95ZWVzLmNzdicpO1xuICAgKiAgIHRyeSB7XG4gICAqICAgICBmb3IgYXdhaXQgKGNvbnN0IGxpbmUgb2YgZmlsZS5yZWFkTGluZXMoKSkge1xuICAgKiAgICAgICBjb25zdCBbZmlyc3RfbmFtZSwgbGFzdF9uYW1lLCBkYXlfb2ZfYmlydGhdID0gbGluZS5zcGxpdCgnLCcpO1xuICAgKiAgICAgICB5aWVsZCB7IGZpcnN0X25hbWUsIGxhc3RfbmFtZSwgZGF5X29mX2JpcnRoOiBuZXcgRGF0ZShkYXlfb2ZfYmlydGgpIH07XG4gICAqICAgICB9XG4gICAqICAgfSBmaW5hbGx5IHtcbiAgICogICAgIGF3YWl0IGZpbGUuY2xvc2UoKTtcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogY29ubmVjdGlvbi5leGVjQnVsa0xvYWQoYnVsa0xvYWQsIGVtcGxveWVlcygpKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBidWxrTG9hZCBBIHByZXZpb3VzbHkgY3JlYXRlZCBbW0J1bGtMb2FkXV0uXG4gICAqIEBwYXJhbSByb3dzIEEgW1tJdGVyYWJsZV1dIG9yIFtbQXN5bmNJdGVyYWJsZV1dIHRoYXQgY29udGFpbnMgdGhlIHJvd3MgdGhhdCBzaG91bGQgYmUgYnVsayBsb2FkZWQuXG4gICAqL1xuICBleGVjQnVsa0xvYWQoYnVsa0xvYWQ6IEJ1bGtMb2FkLCByb3dzOiBBc3luY0l0ZXJhYmxlPEJ1bGtMb2FkUm93PiB8IEl0ZXJhYmxlPEJ1bGtMb2FkUm93Pik6IHZvaWRcblxuICBleGVjQnVsa0xvYWQoYnVsa0xvYWQ6IEJ1bGtMb2FkLCByb3dzPzogQXN5bmNJdGVyYWJsZTxCdWxrTG9hZFJvdz4gfCBJdGVyYWJsZTxCdWxrTG9hZFJvdz4pIHtcbiAgICBidWxrTG9hZC5leGVjdXRpb25TdGFydGVkID0gdHJ1ZTtcblxuICAgIC8vIE93bnMgdGhlIHJvdyBzb3VyY2UgZnJvbSBoZXJlIG9uOiB0aGUgZmlyc3Qgcm93IGlzIHJlcXVlc3RlZCBub3csXG4gICAgLy8gdGhlIHJlc3QgYXJlIHJlYWQgb25jZSB0aGUgc2VydmVyIGhhcyBhY2NlcHRlZCB0aGUgYElOU0VSVCBCVUxLYFxuICAgIC8vIHN0YXRlbWVudCwgYW5kIHRoZSBzb3VyY2UgaXMgY2xvc2VkIGlmIHRoYXQgbmV2ZXIgaGFwcGVucy5cbiAgICBjb25zdCBwYXlsb2FkID0gbmV3IEJ1bGtMb2FkUGF5bG9hZChidWxrTG9hZCwgcm93cyA/PyBbXSk7XG5cbiAgICBjb25zdCBvbkNhbmNlbCA9ICgpID0+IHtcbiAgICAgIHJlcXVlc3QuY2FuY2VsKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChidWxrTG9hZC5nZXRCdWxrSW5zZXJ0U3FsKCksIChlcnJvcjogKEVycm9yICYgeyBjb2RlPzogc3RyaW5nIH0pIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgYnVsa0xvYWQucmVtb3ZlTGlzdGVuZXIoJ2NhbmNlbCcsIG9uQ2FuY2VsKTtcblxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSAnVU5LTk9XTicpIHtcbiAgICAgICAgICBlcnJvci5tZXNzYWdlICs9ICcgVGhpcyBpcyBsaWtlbHkgYmVjYXVzZSB0aGUgc2NoZW1hIG9mIHRoZSBCdWxrTG9hZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2NoZW1hIG9mIHRoZSB0YWJsZSB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gaW5zZXJ0IGludG8uJztcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLmNsb3NlKCk7XG4gICAgICAgIGJ1bGtMb2FkLmVycm9yID0gZXJyb3I7XG4gICAgICAgIGJ1bGtMb2FkLmNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnVsa0xvYWQuY2FuY2VsZWQgfHwgdGhpcy5zdGF0ZSAhPT0gdGhpcy5TVEFURS5MT0dHRURfSU4pIHtcbiAgICAgICAgLy8gYG1ha2VSZXF1ZXN0YCBjb21wbGV0ZXMgYSBjYW5jZWxlZCBidWxrIGxvYWQsIG9yIG9uZSBvbiBhXG4gICAgICAgIC8vIGNvbm5lY3Rpb24gdGhhdCBpcyBubyBsb25nZXIgbG9nZ2VkIGluLCB3aXRob3V0IHJlYWRpbmcgaXRzXG4gICAgICAgIC8vIHBheWxvYWQuXG4gICAgICAgIHBheWxvYWQuY2xvc2UoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYWtlUmVxdWVzdChidWxrTG9hZCwgVFlQRS5CVUxLX0xPQUQsIHBheWxvYWQpO1xuICAgIH0pO1xuXG4gICAgYnVsa0xvYWQub25jZSgnY2FuY2VsJywgb25DYW5jZWwpO1xuXG4gICAgdGhpcy5leGVjU3FsQmF0Y2gocmVxdWVzdCk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSB0aGUgU1FMIHJlcHJlc2VudGVkIGJ5IHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBUaGUgcmVxdWVzdCBjYW4gdGhlbiBiZSB1c2VkIGluIHN1YnNlcXVlbnQgY2FsbHMgdG9cbiAgICogW1tleGVjdXRlXV0gYW5kIFtbdW5wcmVwYXJlXV1cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgQSBbW1JlcXVlc3RdXSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXF1ZXN0LlxuICAgKiAgIFBhcmFtZXRlcnMgb25seSByZXF1aXJlIGEgbmFtZSBhbmQgdHlwZS4gUGFyYW1ldGVyIHZhbHVlcyBhcmUgaWdub3JlZC5cbiAgICovXG4gIHByZXBhcmUocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdID0gW107XG5cbiAgICBwYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgdHlwZTogVFlQRVMuSW50LFxuICAgICAgbmFtZTogJ2hhbmRsZScsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgb3V0cHV0OiB0cnVlLFxuICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgIHNjYWxlOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHBhcmFtZXRlcnMucHVzaCh7XG4gICAgICB0eXBlOiBUWVBFUy5OVmFyQ2hhcixcbiAgICAgIG5hbWU6ICdwYXJhbXMnLFxuICAgICAgdmFsdWU6IHJlcXVlc3QucGFyYW1ldGVycy5sZW5ndGggPyByZXF1ZXN0Lm1ha2VQYXJhbXNQYXJhbWV0ZXIocmVxdWVzdC5wYXJhbWV0ZXJzKSA6IG51bGwsXG4gICAgICBvdXRwdXQ6IGZhbHNlLFxuICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgIHNjYWxlOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHBhcmFtZXRlcnMucHVzaCh7XG4gICAgICB0eXBlOiBUWVBFUy5OVmFyQ2hhcixcbiAgICAgIG5hbWU6ICdzdG10JyxcbiAgICAgIHZhbHVlOiByZXF1ZXN0LnNxbFRleHRPclByb2NlZHVyZSxcbiAgICAgIG91dHB1dDogZmFsc2UsXG4gICAgICBsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgc2NhbGU6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgcmVxdWVzdC5wcmVwYXJpbmcgPSB0cnVlO1xuXG4gICAgLy8gVE9ETzogV2UgbmVlZCB0byBjbGVhbiB1cCB0aGlzIGV2ZW50IGhhbmRsZXIsIG90aGVyd2lzZSB0aGlzIGxlYWtzIG1lbW9yeVxuICAgIHJlcXVlc3Qub24oJ3JldHVyblZhbHVlJywgKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgICAgaWYgKG5hbWUgPT09ICdoYW5kbGUnKSB7XG4gICAgICAgIHJlcXVlc3QuaGFuZGxlID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0LmVycm9yID0gbmV3IFJlcXVlc3RFcnJvcihgVGVkaW91cyA+IFVuZXhwZWN0ZWQgb3V0cHV0IHBhcmFtZXRlciAke25hbWV9IGZyb20gc3BfcHJlcGFyZWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBUWVBFLlJQQ19SRVFVRVNULCBuZXcgUnBjUmVxdWVzdFBheWxvYWQoUHJvY2VkdXJlcy5TcF9QcmVwYXJlLCBwYXJhbWV0ZXJzLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucywgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgdGhlIFNRTCBTZXJ2ZXIgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHByZXZpb3VzbHkgcHJlcGFyZWQgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgQSBbW1JlcXVlc3RdXSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXF1ZXN0LlxuICAgKiAgIFBhcmFtZXRlcnMgb25seSByZXF1aXJlIGEgbmFtZSBhbmQgdHlwZS5cbiAgICogICBQYXJhbWV0ZXIgdmFsdWVzIGFyZSBpZ25vcmVkLlxuICAgKi9cbiAgdW5wcmVwYXJlKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSA9IFtdO1xuXG4gICAgcGFyYW1ldGVycy5wdXNoKHtcbiAgICAgIHR5cGU6IFRZUEVTLkludCxcbiAgICAgIG5hbWU6ICdoYW5kbGUnLFxuICAgICAgLy8gVE9ETzogQWJvcnQgaWYgYHJlcXVlc3QuaGFuZGxlYCBpcyBub3Qgc2V0XG4gICAgICB2YWx1ZTogcmVxdWVzdC5oYW5kbGUsXG4gICAgICBvdXRwdXQ6IGZhbHNlLFxuICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgIHNjYWxlOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKFByb2NlZHVyZXMuU3BfVW5wcmVwYXJlLCBwYXJhbWV0ZXJzLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucywgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgcHJldmlvdXNseSBwcmVwYXJlZCBTUUwsIHVzaW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdCBBIHByZXZpb3VzbHkgcHJlcGFyZWQgW1tSZXF1ZXN0XV0uXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJzICBBbiBvYmplY3Qgd2hvc2UgbmFtZXMgY29ycmVzcG9uZCB0byB0aGUgbmFtZXMgb2ZcbiAgICogICBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgW1tSZXF1ZXN0XV0gYmVmb3JlIGl0IHdhcyBwcmVwYXJlZC5cbiAgICogICBUaGUgb2JqZWN0J3MgdmFsdWVzIGFyZSBwYXNzZWQgYXMgdGhlIHBhcmFtZXRlcnMnIHZhbHVlcyB3aGVuIHRoZVxuICAgKiAgIHJlcXVlc3QgaXMgZXhlY3V0ZWQuXG4gICAqL1xuICBleGVjdXRlKHJlcXVlc3Q6IFJlcXVlc3QsIHBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSkge1xuICAgIGNvbnN0IGV4ZWN1dGVQYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSA9IFtdO1xuXG4gICAgZXhlY3V0ZVBhcmFtZXRlcnMucHVzaCh7XG4gICAgICB0eXBlOiBUWVBFUy5JbnQsXG4gICAgICBuYW1lOiAnJyxcbiAgICAgIC8vIFRPRE86IEFib3J0IGlmIGByZXF1ZXN0LmhhbmRsZWAgaXMgbm90IHNldFxuICAgICAgdmFsdWU6IHJlcXVlc3QuaGFuZGxlLFxuICAgICAgb3V0cHV0OiBmYWxzZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICBzY2FsZTogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJlcXVlc3QucGFyYW1ldGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSByZXF1ZXN0LnBhcmFtZXRlcnNbaV07XG5cbiAgICAgICAgZXhlY3V0ZVBhcmFtZXRlcnMucHVzaCh7XG4gICAgICAgICAgLi4ucGFyYW1ldGVyLFxuICAgICAgICAgIHZhbHVlOiBwYXJhbWV0ZXIudHlwZS52YWxpZGF0ZShwYXJhbWV0ZXJzID8gcGFyYW1ldGVyc1twYXJhbWV0ZXIubmFtZV0gOiBudWxsLCB0aGlzLmRhdGFiYXNlQ29sbGF0aW9uKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXF1ZXN0LmVycm9yID0gZXJyb3I7XG5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmRlYnVnLmxvZyhlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgcmVxdWVzdC5jYWxsYmFjayhlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKFByb2NlZHVyZXMuU3BfRXhlY3V0ZSwgZXhlY3V0ZVBhcmFtZXRlcnMsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpLCB0aGlzLmNvbmZpZy5vcHRpb25zLCB0aGlzLmRhdGFiYXNlQ29sbGF0aW9uKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBhIHN0b3JlZCBwcm9jZWR1cmUgcmVwcmVzZW50ZWQgYnkgW1tSZXF1ZXN0XV0uXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IEEgW1tSZXF1ZXN0XV0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVxdWVzdC5cbiAgICovXG4gIGNhbGxQcm9jZWR1cmUocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0LnZhbGlkYXRlUGFyYW1ldGVycyh0aGlzLmRhdGFiYXNlQ29sbGF0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXF1ZXN0LmVycm9yID0gZXJyb3I7XG5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmRlYnVnLmxvZyhlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgcmVxdWVzdC5jYWxsYmFjayhlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKHJlcXVlc3Quc3FsVGV4dE9yUHJvY2VkdXJlISwgcmVxdWVzdC5wYXJhbWV0ZXJzLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucywgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKiBAcGFyYW0gbmFtZSBBIHN0cmluZyByZXByZXNlbnRpbmcgYSBuYW1lIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogICBPcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIGFuIGVtcHR5IHN0cmluZy4gUmVxdWlyZWQgd2hlbiBgaXNvbGF0aW9uTGV2ZWxgXG4gICAqICAgaXMgcHJlc2VudC5cbiAgICogQHBhcmFtIGlzb2xhdGlvbkxldmVsIFRoZSBpc29sYXRpb24gbGV2ZWwgdGhhdCB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgcnVuIHdpdGguXG4gICAqXG4gICAqICAgVGhlIGlzb2xhdGlvbiBsZXZlbHMgYXJlIGF2YWlsYWJsZSBmcm9tIGByZXF1aXJlKCd0ZWRpb3VzJykuSVNPTEFUSU9OX0xFVkVMYC5cbiAgICogICAqIGBSRUFEX1VOQ09NTUlUVEVEYFxuICAgKiAgICogYFJFQURfQ09NTUlUVEVEYFxuICAgKiAgICogYFJFUEVBVEFCTEVfUkVBRGBcbiAgICogICAqIGBTRVJJQUxJWkFCTEVgXG4gICAqICAgKiBgU05BUFNIT1RgXG4gICAqXG4gICAqICAgT3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB0aGUgQ29ubmVjdGlvbidzIGlzb2xhdGlvbiBsZXZlbC5cbiAgICovXG4gIGJlZ2luVHJhbnNhY3Rpb24oY2FsbGJhY2s6IEJlZ2luVHJhbnNhY3Rpb25DYWxsYmFjaywgbmFtZSA9ICcnLCBpc29sYXRpb25MZXZlbCA9IHRoaXMuY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWwpIHtcbiAgICBhc3NlcnRWYWxpZElzb2xhdGlvbkxldmVsKGlzb2xhdGlvbkxldmVsLCAnaXNvbGF0aW9uTGV2ZWwnKTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKG5hbWUsIGlzb2xhdGlvbkxldmVsKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY1NxbEJhdGNoKG5ldyBSZXF1ZXN0KCdTRVQgVFJBTlNBQ1RJT04gSVNPTEFUSU9OIExFVkVMICcgKyAodHJhbnNhY3Rpb24uaXNvbGF0aW9uTGV2ZWxUb1RTUUwoKSkgKyAnO0JFR0lOIFRSQU4gJyArIHRyYW5zYWN0aW9uLm5hbWUsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoKys7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRGVwdGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmluVHJhbnNhY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVuZGVmaW5lZCwgKGVycikgPT4ge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCkpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm1ha2VSZXF1ZXN0KHJlcXVlc3QsIFRZUEUuVFJBTlNBQ1RJT05fTUFOQUdFUiwgdHJhbnNhY3Rpb24uYmVnaW5QYXlsb2FkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0IGEgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRoZXJlIHNob3VsZCBiZSBhbiBhY3RpdmUgdHJhbnNhY3Rpb24gLSB0aGF0IGlzLCBbW2JlZ2luVHJhbnNhY3Rpb25dXVxuICAgKiBzaG91bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICogQHBhcmFtIG5hbWUgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdHJhbnNhY3Rpb24uXG4gICAqICAgT3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byBhbiBlbXB0eSBzdHJpbmcuIFJlcXVpcmVkIHdoZW4gYGlzb2xhdGlvbkxldmVsYGlzIHByZXNlbnQuXG4gICAqL1xuICBjb21taXRUcmFuc2FjdGlvbihjYWxsYmFjazogQ29tbWl0VHJhbnNhY3Rpb25DYWxsYmFjaywgbmFtZSA9ICcnKSB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24obmFtZSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjU3FsQmF0Y2gobmV3IFJlcXVlc3QoJ0NPTU1JVCBUUkFOICcgKyB0cmFuc2FjdGlvbi5uYW1lLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aC0tO1xuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRlcHRoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodW5kZWZpbmVkLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5UUkFOU0FDVElPTl9NQU5BR0VSLCB0cmFuc2FjdGlvbi5jb21taXRQYXlsb2FkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpKSk7XG4gIH1cblxuICAvKipcbiAgICogUm9sbGJhY2sgYSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogVGhlcmUgc2hvdWxkIGJlIGFuIGFjdGl2ZSB0cmFuc2FjdGlvbiAtIHRoYXQgaXMsIFtbYmVnaW5UcmFuc2FjdGlvbl1dXG4gICAqIHNob3VsZCBoYXZlIGJlZW4gcHJldmlvdXNseSBjYWxsZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKiBAcGFyYW0gbmFtZSBBIHN0cmluZyByZXByZXNlbnRpbmcgYSBuYW1lIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogICBPcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICogICBSZXF1aXJlZCB3aGVuIGBpc29sYXRpb25MZXZlbGAgaXMgcHJlc2VudC5cbiAgICovXG4gIHJvbGxiYWNrVHJhbnNhY3Rpb24oY2FsbGJhY2s6IFJvbGxiYWNrVHJhbnNhY3Rpb25DYWxsYmFjaywgbmFtZSA9ICcnKSB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24obmFtZSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjU3FsQmF0Y2gobmV3IFJlcXVlc3QoJ1JPTExCQUNLIFRSQU4gJyArIHRyYW5zYWN0aW9uLm5hbWUsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoLS07XG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRGVwdGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodW5kZWZpbmVkLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5UUkFOU0FDVElPTl9NQU5BR0VSLCB0cmFuc2FjdGlvbi5yb2xsYmFja1BheWxvYWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBzYXZlcG9pbnQgd2l0aGluIGEgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRoZXJlIHNob3VsZCBiZSBhbiBhY3RpdmUgdHJhbnNhY3Rpb24gLSB0aGF0IGlzLCBbW2JlZ2luVHJhbnNhY3Rpb25dXVxuICAgKiBzaG91bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICogQHBhcmFtIG5hbWUgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdHJhbnNhY3Rpb24uXFxcbiAgICogICBPcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICogICBSZXF1aXJlZCB3aGVuIGBpc29sYXRpb25MZXZlbGAgaXMgcHJlc2VudC5cbiAgICovXG4gIHNhdmVUcmFuc2FjdGlvbihjYWxsYmFjazogU2F2ZVRyYW5zYWN0aW9uQ2FsbGJhY2ssIG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY1NxbEJhdGNoKG5ldyBSZXF1ZXN0KCdTQVZFIFRSQU4gJyArIHRyYW5zYWN0aW9uLm5hbWUsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoKys7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9KSk7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1bmRlZmluZWQsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBUWVBFLlRSQU5TQUNUSU9OX01BTkFHRVIsIHRyYW5zYWN0aW9uLnNhdmVQYXlsb2FkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpKSk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSBnaXZlbiBjYWxsYmFjayBhZnRlciBzdGFydGluZyBhIHRyYW5zYWN0aW9uLCBhbmQgY29tbWl0IG9yXG4gICAqIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBhZnRlcndhcmRzLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgaGVscGVyIHRoYXQgZW1wbG95cyBbW2JlZ2luVHJhbnNhY3Rpb25dXSwgW1tjb21taXRUcmFuc2FjdGlvbl1dLFxuICAgKiBbW3JvbGxiYWNrVHJhbnNhY3Rpb25dXSwgYW5kIFtbc2F2ZVRyYW5zYWN0aW9uXV0gdG8gZ3JlYXRseSBzaW1wbGlmeSB0aGVcbiAgICogdXNlIG9mIGRhdGFiYXNlIHRyYW5zYWN0aW9ucyBhbmQgYXV0b21hdGljYWxseSBoYW5kbGUgdHJhbnNhY3Rpb24gbmVzdGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiXG4gICAqIEBwYXJhbSBpc29sYXRpb25MZXZlbFxuICAgKiAgIFRoZSBpc29sYXRpb24gbGV2ZWwgdGhhdCB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgcnVuIHdpdGguXG4gICAqXG4gICAqICAgVGhlIGlzb2xhdGlvbiBsZXZlbHMgYXJlIGF2YWlsYWJsZSBmcm9tIGByZXF1aXJlKCd0ZWRpb3VzJykuSVNPTEFUSU9OX0xFVkVMYC5cbiAgICogICAqIGBSRUFEX1VOQ09NTUlUVEVEYFxuICAgKiAgICogYFJFQURfQ09NTUlUVEVEYFxuICAgKiAgICogYFJFUEVBVEFCTEVfUkVBRGBcbiAgICogICAqIGBTRVJJQUxJWkFCTEVgXG4gICAqICAgKiBgU05BUFNIT1RgXG4gICAqXG4gICAqICAgT3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB0aGUgQ29ubmVjdGlvbidzIGlzb2xhdGlvbiBsZXZlbC5cbiAgICovXG4gIHRyYW5zYWN0aW9uKGNiOiAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIHR4RG9uZT86IDxUIGV4dGVuZHMgVHJhbnNhY3Rpb25Eb25lQ2FsbGJhY2s+KGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCBkb25lOiBULCAuLi5hcmdzOiBDYWxsYmFja1BhcmFtZXRlcnM8VD4pID0+IHZvaWQpID0+IHZvaWQsIGlzb2xhdGlvbkxldmVsPzogdHlwZW9mIElTT0xBVElPTl9MRVZFTFtrZXlvZiB0eXBlb2YgSVNPTEFUSU9OX0xFVkVMXSkge1xuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BjYmAgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlU2F2ZXBvaW50ID0gdGhpcy5pblRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IG5hbWUgPSAnX3RlZGlvdXNfJyArIChjcnlwdG8ucmFuZG9tQnl0ZXMoMTApLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgY29uc3QgdHhEb25lOiA8VCBleHRlbmRzIFRyYW5zYWN0aW9uRG9uZUNhbGxiYWNrPihlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgZG9uZTogVCwgLi4uYXJnczogQ2FsbGJhY2tQYXJhbWV0ZXJzPFQ+KSA9PiB2b2lkID0gKGVyciwgZG9uZSwgLi4uYXJncykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBpZiAodGhpcy5pblRyYW5zYWN0aW9uICYmIHRoaXMuc3RhdGUgPT09IHRoaXMuU1RBVEUuTE9HR0VEX0lOKSB7XG4gICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKCh0eEVycikgPT4ge1xuICAgICAgICAgICAgZG9uZSh0eEVyciB8fCBlcnIsIC4uLmFyZ3MpO1xuICAgICAgICAgIH0sIG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoZXJyLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh1c2VTYXZlcG9pbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgICAgZG9uZShudWxsLCAuLi5hcmdzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29tbWl0VHJhbnNhY3Rpb24oKHR4RXJyKSA9PiB7XG4gICAgICAgICAgZG9uZSh0eEVyciwgLi4uYXJncyk7XG4gICAgICAgIH0sIG5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodXNlU2F2ZXBvaW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5zYXZlVHJhbnNhY3Rpb24oKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNvbGF0aW9uTGV2ZWwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5leGVjU3FsQmF0Y2gobmV3IFJlcXVlc3QoJ1NFVCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgJyArIHRoaXMuZ2V0SXNvbGF0aW9uTGV2ZWxUZXh0KGlzb2xhdGlvbkxldmVsKSwgKGVycikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVyciwgdHhEb25lKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG51bGwsIHR4RG9uZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWdpblRyYW5zYWN0aW9uKChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNiKG51bGwsIHR4RG9uZSk7XG4gICAgICB9LCBuYW1lLCBpc29sYXRpb25MZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYWtlUmVxdWVzdChyZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQsIHBhY2tldFR5cGU6IG51bWJlciwgcGF5bG9hZDogKEl0ZXJhYmxlPEJ1ZmZlcj4gfCBBc3luY0l0ZXJhYmxlPEJ1ZmZlcj4pICYgeyB0b1N0cmluZzogKGluZGVudD86IHN0cmluZykgPT4gc3RyaW5nIH0pIHtcbiAgICAvLyBDbGVhciBhbnkgZXJyb3IgbGVmdCBvdmVyIGZyb20gYSBwcmV2aW91cyBleGVjdXRpb24gb2YgdGhpcyByZXF1ZXN0LFxuICAgIC8vIGV2ZW4gaWYgdGhlIHJlcXVlc3QgaXMgcmVqZWN0ZWQgYmVmb3JlIGJlaW5nIHNlbnQuXG4gICAgcmVxdWVzdC5lcnJvciA9IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLnN0YXRlICE9PSB0aGlzLlNUQVRFLkxPR0dFRF9JTikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICdSZXF1ZXN0cyBjYW4gb25seSBiZSBtYWRlIGluIHRoZSAnICsgdGhpcy5TVEFURS5MT0dHRURfSU4ubmFtZSArICcgc3RhdGUsIG5vdCB0aGUgJyArIHRoaXMuc3RhdGUubmFtZSArICcgc3RhdGUnO1xuICAgICAgdGhpcy5kZWJ1Zy5sb2cobWVzc2FnZSk7XG4gICAgICByZXF1ZXN0LmNhbGxiYWNrKG5ldyBSZXF1ZXN0RXJyb3IobWVzc2FnZSwgJ0VJTlZBTElEU1RBVEUnKSk7XG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5jYWxsYmFjayhuZXcgUmVxdWVzdEVycm9yKCdDYW5jZWxlZC4nLCAnRUNBTkNFTCcpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocGFja2V0VHlwZSA9PT0gVFlQRS5TUUxfQkFUQ0gpIHtcbiAgICAgICAgdGhpcy5pc1NxbEJhdGNoID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNTcWxCYXRjaCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgICAgdGhpcy5hdHRlbnRpb25TZW50ID0gZmFsc2U7XG4gICAgICByZXF1ZXN0LmNvbm5lY3Rpb24hID0gdGhpcztcbiAgICAgIHJlcXVlc3Qucm93Q291bnQhID0gMDtcbiAgICAgIHJlcXVlc3Qucm93cyEgPSBbXTtcbiAgICAgIHJlcXVlc3QucnN0ISA9IFtdO1xuXG4gICAgICBjb25zdCBvbkNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgcGF5bG9hZFN0cmVhbS51bnBpcGUobWVzc2FnZSk7XG4gICAgICAgIHBheWxvYWRTdHJlYW0uZGVzdHJveSgpO1xuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yIG1pZ2h0IGFscmVhZHkgYmUgc2V0LCBlLmcuIGlmIHRoZSBwYXlsb2FkXG4gICAgICAgIC8vIHN0cmVhbSBlcnJvcmVkIGJlZm9yZSB0aGUgY2FuY2VsbGF0aW9uLlxuICAgICAgICByZXF1ZXN0LmVycm9yID8/PSBuZXcgUmVxdWVzdEVycm9yKCdDYW5jZWxlZC4nLCAnRUNBTkNFTCcpO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaWdub3JlIGJpdCBhbmQgZW5kIHRoZSBtZXNzYWdlLlxuICAgICAgICBtZXNzYWdlLmlnbm9yZSA9IHRydWU7XG4gICAgICAgIG1lc3NhZ2UuZW5kKCk7XG5cbiAgICAgICAgLy8gVGhlIHNlcnZlciByZXNwb25kcyB0byB0aGUgaWdub3JlZCBtZXNzYWdlIGxpa2UgdG8gYW55IG90aGVyXG4gICAgICAgIC8vIHJlcXVlc3QgbWVzc2FnZS4gSWYgdGhhdCByZXNwb25zZSBuZXZlciBhcnJpdmVzIChlLmcuIGJlY2F1c2VcbiAgICAgICAgLy8gdGhlIHNlcnZlciBoYXMgYmVjb21lIHVucmVzcG9uc2l2ZSksIHRoZSBjYW5jZWwgdGltZXIgZW5zdXJlc1xuICAgICAgICAvLyB0aGUgY2FuY2VsZWQgcmVxdWVzdCBzdGlsbCBjb21wbGV0ZXMuXG4gICAgICAgIHRoaXMuY3JlYXRlQ2FuY2VsVGltZXIoKTtcblxuICAgICAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QgJiYgcmVxdWVzdC5wYXVzZWQpIHtcbiAgICAgICAgICAvLyByZXN1bWUgdGhlIHJlcXVlc3QgaWYgaXQgd2FzIHBhdXNlZCBzbyB3ZSBjYW4gcmVhZCB0aGUgcmVtYWluaW5nIHRva2Vuc1xuICAgICAgICAgIHJlcXVlc3QucmVzdW1lKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3Qub25jZSgnY2FuY2VsJywgb25DYW5jZWwpO1xuXG4gICAgICB0aGlzLmNyZWF0ZVJlcXVlc3RUaW1lcigpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gbmV3IE1lc3NhZ2UoeyB0eXBlOiBwYWNrZXRUeXBlLCByZXNldENvbm5lY3Rpb246IHRoaXMucmVzZXRDb25uZWN0aW9uT25OZXh0UmVxdWVzdCB9KTtcbiAgICAgIHRoaXMubWVzc2FnZUlvLm91dGdvaW5nTWVzc2FnZVN0cmVhbS53cml0ZShtZXNzYWdlKTtcbiAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9DTElFTlRfUkVRVUVTVCk7XG5cbiAgICAgIG1lc3NhZ2Uub25jZSgnZmluaXNoJywgKCkgPT4ge1xuICAgICAgICByZXF1ZXN0LnJlbW92ZUxpc3RlbmVyKCdjYW5jZWwnLCBvbkNhbmNlbCk7XG4gICAgICAgIC8vIFByZXBlbmQgdGhlIGxpc3RlbmVyIHNvIGl0IGFsd2F5cyBydW5zIGJlZm9yZSB0aGVcbiAgICAgICAgLy8gYFNlbnRDbGllbnRSZXF1ZXN0YCBzdGF0ZSdzIGBjYW5jZWxgIGhhbmRsZXIsIHJlZ2FyZGxlc3Mgb2YgdGhlXG4gICAgICAgIC8vIG9yZGVyIGluIHdoaWNoIHRoZSB0d28gd2VyZSByZWdpc3RlcmVkLiBUaGUgbGF0dGVyIHJlbGllcyBvblxuICAgICAgICAvLyBgYXR0ZW50aW9uU2VudGAgYWxyZWFkeSBiZWluZyBzZXQsIHdoaWNoIG9ubHkgdGhpcyBsaXN0ZW5lciBkb2VzLlxuICAgICAgICByZXF1ZXN0LnByZXBlbmRPbmNlTGlzdGVuZXIoJ2NhbmNlbCcsIHRoaXMuX2NhbmNlbEFmdGVyUmVxdWVzdFNlbnQpO1xuXG4gICAgICAgIHRoaXMucmVzZXRDb25uZWN0aW9uT25OZXh0UmVxdWVzdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlYnVnLnBheWxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHBheWxvYWQhLnRvU3RyaW5nKCcgICcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwYXlsb2FkU3RyZWFtID0gUmVhZGFibGUuZnJvbShwYXlsb2FkKTtcbiAgICAgIHBheWxvYWRTdHJlYW0ub25jZSgnZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcGF5bG9hZFN0cmVhbS51bnBpcGUobWVzc2FnZSk7XG5cbiAgICAgICAgLy8gT25seSBzZXQgYSByZXF1ZXN0IGVycm9yIGlmIG5vIGVycm9yIHdhcyBzZXQgeWV0LlxuICAgICAgICByZXF1ZXN0LmVycm9yID8/PSBlcnJvcjtcblxuICAgICAgICBtZXNzYWdlLmlnbm9yZSA9IHRydWU7XG4gICAgICAgIG1lc3NhZ2UuZW5kKCk7XG4gICAgICB9KTtcbiAgICAgIHBheWxvYWRTdHJlYW0ucGlwZShtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGN1cnJlbnRseSBleGVjdXRlZCByZXF1ZXN0LlxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdC5jYW5jZWwoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgY29ubmVjdGlvbiB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cbiAgICogQ2FuIGJlIHVzZWZ1bCBmb3IgY29ubmVjdGlvbiBwb29sIGltcGxlbWVudGF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqL1xuICByZXNldChjYWxsYmFjazogUmVzZXRDYWxsYmFjaykge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh0aGlzLmdldEluaXRpYWxTcWwoKSwgKGVycikgPT4ge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICAgIHRoaXMuaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlc2V0Q29ubmVjdGlvbk9uTmV4dFJlcXVlc3QgPSB0cnVlO1xuICAgIHRoaXMuZXhlY1NxbEJhdGNoKHJlcXVlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnNbdGhpcy50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRJc29sYXRpb25MZXZlbFRleHQoaXNvbGF0aW9uTGV2ZWw6IHR5cGVvZiBJU09MQVRJT05fTEVWRUxba2V5b2YgdHlwZW9mIElTT0xBVElPTl9MRVZFTF0pIHtcbiAgICBzd2l0Y2ggKGlzb2xhdGlvbkxldmVsKSB7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5SRUFEX1VOQ09NTUlUVEVEOlxuICAgICAgICByZXR1cm4gJ3JlYWQgdW5jb21taXR0ZWQnO1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuUkVQRUFUQUJMRV9SRUFEOlxuICAgICAgICByZXR1cm4gJ3JlcGVhdGFibGUgcmVhZCc7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5TRVJJQUxJWkFCTEU6XG4gICAgICAgIHJldHVybiAnc2VyaWFsaXphYmxlJztcbiAgICAgIGNhc2UgSVNPTEFUSU9OX0xFVkVMLlNOQVBTSE9UOlxuICAgICAgICByZXR1cm4gJ3NuYXBzaG90JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAncmVhZCBjb21taXR0ZWQnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYXN5bmMgcGVyZm9ybVRsc05lZ290aWF0aW9uKHByZWxvZ2luUGF5bG9hZDogUHJlbG9naW5QYXlsb2FkLCBzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgYXdhaXQgd2l0aEFib3J0UmFjZShzaWduYWwsIGFzeW5jIChzaWduYWxBYm9ydGVkKSA9PiB7XG4gICAgICBpZiAocHJlbG9naW5QYXlsb2FkLmZlZEF1dGhSZXF1aXJlZCA9PT0gMSkge1xuICAgICAgICB0aGlzLmZlZEF1dGhSZXF1aXJlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoJ3N0cmljdCcgIT09IHRoaXMuY29uZmlnLm9wdGlvbnMuZW5jcnlwdCAmJiAocHJlbG9naW5QYXlsb2FkLmVuY3J5cHRpb25TdHJpbmcgPT09ICdPTicgfHwgcHJlbG9naW5QYXlsb2FkLmVuY3J5cHRpb25TdHJpbmcgPT09ICdSRVEnKSkge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLm9wdGlvbnMuZW5jcnlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBDb25uZWN0aW9uRXJyb3IoXCJTZXJ2ZXIgcmVxdWlyZXMgZW5jcnlwdGlvbiwgc2V0ICdlbmNyeXB0JyBjb25maWcgb3B0aW9uIHRvIHRydWUuXCIsICdFRU5DUllQVCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5TRU5UX1RMU1NTTE5FR09USUFUSU9OKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VJby5zdGFydFRscyh0aGlzLnNlY3VyZUNvbnRleHRPcHRpb25zLCB0aGlzLmNvbmZpZy5vcHRpb25zLnNlcnZlck5hbWUgPyB0aGlzLmNvbmZpZy5vcHRpb25zLnNlcnZlck5hbWUgOiB0aGlzLnJvdXRpbmdEYXRhPy5zZXJ2ZXIgPz8gdGhpcy5jb25maWcuc2VydmVyLCB0aGlzLmNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGUpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIHRocm93IHRoaXMud3JhcFNvY2tldEVycm9yKGVycik7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2lnbmFsQWJvcnRlZFxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRQcmVsb2dpblJlc3BvbnNlKHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPFByZWxvZ2luUGF5bG9hZD4ge1xuICAgIGxldCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmFsbG9jKDApO1xuXG4gICAgYXdhaXQgd2l0aEFib3J0UmFjZShzaWduYWwsIGFzeW5jIChzaWduYWxBYm9ydGVkKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgdGhpcy5tZXNzYWdlSW8ucmVhZE1lc3NhZ2UoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgdGhyb3cgdGhpcy53cmFwU29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgfSksXG4gICAgICAgIHNpZ25hbEFib3J0ZWRcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCBpdGVyYXRvciA9IG1lc3NhZ2VbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgICB0cnkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgICBpdGVyYXRvci5uZXh0KCksXG4gICAgICAgICAgICBzaWduYWxBYm9ydGVkXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW21lc3NhZ2VCdWZmZXIsIHZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChpdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcHJlbG9naW5QYXlsb2FkID0gbmV3IFByZWxvZ2luUGF5bG9hZChtZXNzYWdlQnVmZmVyKTtcbiAgICB0aGlzLmRlYnVnLnBheWxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcHJlbG9naW5QYXlsb2FkLnRvU3RyaW5nKCcgICcpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmVsb2dpblBheWxvYWQ7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFzeW5jIHBlcmZvcm1SZVJvdXRpbmcoKSB7XG4gICAgdGhpcy5zb2NrZXQhLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIHRoaXMuX29uU29ja2V0RXJyb3IpO1xuICAgIHRoaXMuc29ja2V0IS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCB0aGlzLl9vblNvY2tldENsb3NlKTtcbiAgICB0aGlzLnNvY2tldCEucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHRoaXMuX29uU29ja2V0RW5kKTtcbiAgICB0aGlzLnNvY2tldCEuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5kZWJ1Zy5sb2coJ2Nvbm5lY3Rpb24gdG8gJyArIHRoaXMuY29uZmlnLnNlcnZlciArICc6JyArIHRoaXMuY29uZmlnLm9wdGlvbnMucG9ydCArICcgY2xvc2VkJyk7XG5cbiAgICB0aGlzLmVtaXQoJ3Jlcm91dGluZycpO1xuICAgIHRoaXMuZGVidWcubG9nKCdSZXJvdXRpbmcgdG8gJyArIHRoaXMucm91dGluZ0RhdGEhLnNlcnZlciArICc6JyArIHRoaXMucm91dGluZ0RhdGEhLnBvcnQpO1xuXG4gICAgLy8gQXR0ZW1wdCBjb25uZWN0aW5nIHRvIHRoZSByZXJvdXRpbmcgdGFyZ2V0XG4gICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5DT05ORUNUSU5HKTtcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpc2VDb25uZWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFzeW5jIHBlcmZvcm1UcmFuc2llbnRGYWlsdXJlUmV0cnkoKSB7XG4gICAgdGhpcy5jdXJUcmFuc2llbnRSZXRyeUNvdW50Kys7XG5cbiAgICB0aGlzLnNvY2tldCEucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fb25Tb2NrZXRFcnJvcik7XG4gICAgdGhpcy5zb2NrZXQhLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIHRoaXMuX29uU29ja2V0Q2xvc2UpO1xuICAgIHRoaXMuc29ja2V0IS5yZW1vdmVMaXN0ZW5lcignZW5kJywgdGhpcy5fb25Tb2NrZXRFbmQpO1xuICAgIHRoaXMuc29ja2V0IS5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmRlYnVnLmxvZygnY29ubmVjdGlvbiB0byAnICsgdGhpcy5jb25maWcuc2VydmVyICsgJzonICsgdGhpcy5jb25maWcub3B0aW9ucy5wb3J0ICsgJyBjbG9zZWQnKTtcblxuICAgIGNvbnN0IHNlcnZlciA9IHRoaXMucm91dGluZ0RhdGEgPyB0aGlzLnJvdXRpbmdEYXRhLnNlcnZlciA6IHRoaXMuY29uZmlnLnNlcnZlcjtcbiAgICBjb25zdCBwb3J0ID0gdGhpcy5yb3V0aW5nRGF0YSA/IHRoaXMucm91dGluZ0RhdGEucG9ydCA6IHRoaXMuY29uZmlnLm9wdGlvbnMucG9ydDtcbiAgICB0aGlzLmRlYnVnLmxvZygnUmV0cnkgYWZ0ZXIgdHJhbnNpZW50IGZhaWx1cmUgY29ubmVjdGluZyB0byAnICsgc2VydmVyICsgJzonICsgcG9ydCk7XG5cbiAgICBjb25zdCBjbG9zZVNpZ25hbCA9IHRoaXMuY2xvc2VDb250cm9sbGVyIS5zaWduYWw7XG4gICAgY2xvc2VTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGNvbnN0IHsgcHJvbWlzZSwgcmVzb2x2ZSwgcmVqZWN0IH0gPSBQcm9taXNlLndpdGhSZXNvbHZlcnM8dm9pZD4oKTtcblxuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7IHJlamVjdChjbG9zZVNpZ25hbC5yZWFzb24pOyB9O1xuICAgIGNsb3NlU2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgcmV0cnlUaW1lciA9IHNldFRpbWVvdXQocmVzb2x2ZSwgdGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0aW9uUmV0cnlJbnRlcnZhbCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHByb21pc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsZWFyVGltZW91dChyZXRyeVRpbWVyKTtcbiAgICAgIGNsb3NlU2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdyZXRyeScpO1xuICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuQ09OTkVDVElORyk7XG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXNlQ29ubmVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhc3luYyBwZXJmb3JtU2VudExvZ2luN1dpdGhTdGFuZGFyZExvZ2luKHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPFJvdXRpbmdEYXRhIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhBYm9ydFJhY2Uoc2lnbmFsLCBhc3luYyAoc2lnbmFsQWJvcnRlZCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIHRoaXMubWVzc2FnZUlvLnJlYWRNZXNzYWdlKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIHRocm93IHRoaXMud3JhcFNvY2tldEVycm9yKGVycik7XG4gICAgICAgIH0pLFxuICAgICAgICBzaWduYWxBYm9ydGVkXG4gICAgICBdKTtcblxuICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBMb2dpbjdUb2tlbkhhbmRsZXIodGhpcyk7XG4gICAgICBjb25zdCB0b2tlblN0cmVhbVBhcnNlciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgaGFuZGxlcik7XG4gICAgICAvLyBJZiB0aGUgYWJvcnQgd2lucyB0aGlzIHJhY2UsIHRoZSBwZW5kaW5nIGBvbmNlKClgIGlzIGxlZnRcbiAgICAgIC8vIHVub2JzZXJ2ZWQsIGFuZCBhIHBhcnNlIGVycm9yIGxhbmRpbmcgYWZ0ZXJ3YXJkcyB3b3VsZCByZWplY3QgaXRcbiAgICAgIC8vIHdpdGggbm9ib2R5IGxpc3RlbmluZy4gT2JzZXJ2ZSBpdCBzbyB0aGF0IGNhbm5vdCBiZWNvbWUgYW5cbiAgICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb24gKHNhbWUgaWRpb20gYXMgYHdpdGhBYm9ydFJhY2VgKS5cbiAgICAgIGNvbnN0IGVuZE9mTWVzc2FnZSA9IG9uY2UodG9rZW5TdHJlYW1QYXJzZXIsICdlbmQnKTtcbiAgICAgIGVuZE9mTWVzc2FnZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBlbmRPZk1lc3NhZ2UsXG4gICAgICAgIHNpZ25hbEFib3J0ZWRcbiAgICAgIF0pO1xuXG4gICAgICBpZiAoaGFuZGxlci5sb2dpbkFja1JlY2VpdmVkKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVyLnJvdXRpbmdEYXRhO1xuICAgICAgfSBlbHNlIGlmIChoYW5kbGVyLmxvZ2luRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgaGFuZGxlci5sb2dpbkVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbm5lY3Rpb25FcnJvcignTG9naW4gZmFpbGVkLicsICdFTE9HSU4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYXN5bmMgcGVyZm9ybVNlbnRMb2dpbjdXaXRoTlRMTUxvZ2luKHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPFJvdXRpbmdEYXRhIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhBYm9ydFJhY2Uoc2lnbmFsLCBhc3luYyAoc2lnbmFsQWJvcnRlZCkgPT4ge1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgdGhpcy5tZXNzYWdlSW8ucmVhZE1lc3NhZ2UoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyB0aGlzLndyYXBTb2NrZXRFcnJvcihlcnIpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNpZ25hbEFib3J0ZWRcbiAgICAgICAgXSk7XG5cbiAgICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBMb2dpbjdUb2tlbkhhbmRsZXIodGhpcyk7XG4gICAgICAgIGNvbnN0IHRva2VuU3RyZWFtUGFyc2VyID0gdGhpcy5jcmVhdGVUb2tlblN0cmVhbVBhcnNlcihtZXNzYWdlLCBoYW5kbGVyKTtcbiAgICAgICAgLy8gSWYgdGhlIGFib3J0IHdpbnMgdGhpcyByYWNlLCB0aGUgcGVuZGluZyBgb25jZSgpYCBpcyBsZWZ0XG4gICAgICAgIC8vIHVub2JzZXJ2ZWQsIGFuZCBhIHBhcnNlIGVycm9yIGxhbmRpbmcgYWZ0ZXJ3YXJkcyB3b3VsZCByZWplY3QgaXRcbiAgICAgICAgLy8gd2l0aCBub2JvZHkgbGlzdGVuaW5nLiBPYnNlcnZlIGl0IHNvIHRoYXQgY2Fubm90IGJlY29tZSBhblxuICAgICAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9uIChzYW1lIGlkaW9tIGFzIGB3aXRoQWJvcnRSYWNlYCkuXG4gICAgICAgIGNvbnN0IGVuZE9mTWVzc2FnZSA9IG9uY2UodG9rZW5TdHJlYW1QYXJzZXIsICdlbmQnKTtcbiAgICAgICAgZW5kT2ZNZXNzYWdlLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgICBlbmRPZk1lc3NhZ2UsXG4gICAgICAgICAgc2lnbmFsQWJvcnRlZFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAoaGFuZGxlci5sb2dpbkFja1JlY2VpdmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZXIucm91dGluZ0RhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5udGxtcGFja2V0KSB7XG4gICAgICAgICAgY29uc3QgYXV0aGVudGljYXRpb24gPSB0aGlzLmNvbmZpZy5hdXRoZW50aWNhdGlvbiBhcyBOdGxtQXV0aGVudGljYXRpb247XG5cbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gbmV3IE5UTE1SZXNwb25zZVBheWxvYWQoe1xuICAgICAgICAgICAgZG9tYWluOiBhdXRoZW50aWNhdGlvbi5vcHRpb25zLmRvbWFpbixcbiAgICAgICAgICAgIHVzZXJOYW1lOiBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnVzZXJOYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMucGFzc3dvcmQsXG4gICAgICAgICAgICBudGxtcGFja2V0OiB0aGlzLm50bG1wYWNrZXRcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMubWVzc2FnZUlvLnNlbmRNZXNzYWdlKFRZUEUuTlRMTUFVVEhfUEtULCBwYXlsb2FkLmRhdGEpO1xuICAgICAgICAgIHRoaXMuZGVidWcucGF5bG9hZChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLnRvU3RyaW5nKCcgICcpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5udGxtcGFja2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIubG9naW5FcnJvcikge1xuICAgICAgICAgIHRocm93IGhhbmRsZXIubG9naW5FcnJvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdGlvbkVycm9yKCdMb2dpbiBmYWlsZWQuJywgJ0VMT0dJTicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFzeW5jIHBlcmZvcm1TZW50TG9naW43V2l0aEZlZEF1dGgoc2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Um91dGluZ0RhdGEgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgd2l0aEFib3J0UmFjZShzaWduYWwsIGFzeW5jIChzaWduYWxBYm9ydGVkKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgdGhpcy5tZXNzYWdlSW8ucmVhZE1lc3NhZ2UoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgdGhyb3cgdGhpcy53cmFwU29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgfSksXG4gICAgICAgIHNpZ25hbEFib3J0ZWRcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCBoYW5kbGVyID0gbmV3IExvZ2luN1Rva2VuSGFuZGxlcih0aGlzKTtcbiAgICAgIGNvbnN0IHRva2VuU3RyZWFtUGFyc2VyID0gdGhpcy5jcmVhdGVUb2tlblN0cmVhbVBhcnNlcihtZXNzYWdlLCBoYW5kbGVyKTtcbiAgICAgIC8vIElmIHRoZSBhYm9ydCB3aW5zIHRoaXMgcmFjZSwgdGhlIHBlbmRpbmcgYG9uY2UoKWAgaXMgbGVmdFxuICAgICAgLy8gdW5vYnNlcnZlZCwgYW5kIGEgcGFyc2UgZXJyb3IgbGFuZGluZyBhZnRlcndhcmRzIHdvdWxkIHJlamVjdCBpdFxuICAgICAgLy8gd2l0aCBub2JvZHkgbGlzdGVuaW5nLiBPYnNlcnZlIGl0IHNvIHRoYXQgY2Fubm90IGJlY29tZSBhblxuICAgICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbiAoc2FtZSBpZGlvbSBhcyBgd2l0aEFib3J0UmFjZWApLlxuICAgICAgY29uc3QgZW5kT2ZNZXNzYWdlID0gb25jZSh0b2tlblN0cmVhbVBhcnNlciwgJ2VuZCcpO1xuICAgICAgZW5kT2ZNZXNzYWdlLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGVuZE9mTWVzc2FnZSxcbiAgICAgICAgc2lnbmFsQWJvcnRlZFxuICAgICAgXSk7XG5cbiAgICAgIGlmIChoYW5kbGVyLmxvZ2luQWNrUmVjZWl2ZWQpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXIucm91dGluZ0RhdGE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZlZEF1dGhJbmZvVG9rZW4gPSBoYW5kbGVyLmZlZEF1dGhJbmZvVG9rZW47XG5cbiAgICAgIGlmIChmZWRBdXRoSW5mb1Rva2VuICYmIGZlZEF1dGhJbmZvVG9rZW4uc3RzdXJsICYmIGZlZEF1dGhJbmZvVG9rZW4uc3BuKSB7XG4gICAgICAgIC8qKiBGZWRlcmF0ZWQgYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbi4gKi9cbiAgICAgICAgY29uc3QgYXV0aGVudGljYXRpb24gPSB0aGlzLmNvbmZpZy5hdXRoZW50aWNhdGlvbiBhcyBUb2tlbkNyZWRlbnRpYWxBdXRoZW50aWNhdGlvbiB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5UGFzc3dvcmRBdXRoZW50aWNhdGlvbiB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5TXNpVm1BdXRoZW50aWNhdGlvbiB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5TXNpQXBwU2VydmljZUF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlUHJpbmNpcGFsU2VjcmV0IHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlEZWZhdWx0QXV0aGVudGljYXRpb247XG4gICAgICAgIC8qKiBQZXJtaXNzaW9uIHNjb3BlIHRvIHBhc3MgdG8gRW50cmEgSUQgd2hlbiByZXF1ZXN0aW5nIGFuIGF1dGhlbnRpY2F0aW9uIHRva2VuLiAqL1xuICAgICAgICBjb25zdCB0b2tlblNjb3BlID0gbmV3IFVSTCgnLy5kZWZhdWx0JywgZmVkQXV0aEluZm9Ub2tlbi5zcG4pLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgLyoqIEluc3RhbmNlIG9mIHRoZSB0b2tlbiBjcmVkZW50aWFsIHRvIHVzZSB0byBhdXRoZW50aWNhdGUgdG8gdGhlIHJlc291cmNlLiAqL1xuICAgICAgICBsZXQgY3JlZGVudGlhbHM6IFRva2VuQ3JlZGVudGlhbDtcblxuICAgICAgICBzd2l0Y2ggKGF1dGhlbnRpY2F0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICd0b2tlbi1jcmVkZW50aWFsJzpcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzID0gYXV0aGVudGljYXRpb24ub3B0aW9ucy5jcmVkZW50aWFsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1wYXNzd29yZCc6XG4gICAgICAgICAgICBjcmVkZW50aWFscyA9IG5ldyBVc2VybmFtZVBhc3N3b3JkQ3JlZGVudGlhbChcbiAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24ub3B0aW9ucy50ZW5hbnRJZCA/PyAnY29tbW9uJyxcbiAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZCxcbiAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24ub3B0aW9ucy51c2VyTmFtZSxcbiAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24ub3B0aW9ucy5wYXNzd29yZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJzpcbiAgICAgICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZSc6XG4gICAgICAgICAgICBjb25zdCBtc2lBcmdzID0gYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZCA/IFthdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudElkLCB7fV0gOiBbe31dO1xuICAgICAgICAgICAgY3JlZGVudGlhbHMgPSBuZXcgTWFuYWdlZElkZW50aXR5Q3JlZGVudGlhbCguLi5tc2lBcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCc6XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZCA/IHsgbWFuYWdlZElkZW50aXR5Q2xpZW50SWQ6IGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWQgfSA6IHt9O1xuICAgICAgICAgICAgY3JlZGVudGlhbHMgPSBuZXcgRGVmYXVsdEF6dXJlQ3JlZGVudGlhbChhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0JzpcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzID0gbmV3IENsaWVudFNlY3JldENyZWRlbnRpYWwoXG4gICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudGVuYW50SWQsXG4gICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWQsXG4gICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50U2VjcmV0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvKiogQWNjZXNzIHRva2VuIHJldHJpZXZlZCBmcm9tIEVudHJhIElEIGZvciB0aGUgY29uZmlndXJlZCBwZXJtaXNzaW9uIHNjb3BlKHMpLiAqL1xuICAgICAgICBsZXQgdG9rZW5SZXNwb25zZTogQWNjZXNzVG9rZW4gfCBudWxsO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdG9rZW5SZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgICBjcmVkZW50aWFscy5nZXRUb2tlbih0b2tlblNjb3BlKSxcbiAgICAgICAgICAgIHNpZ25hbEFib3J0ZWRcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoXG4gICAgICAgICAgICBbbmV3IENvbm5lY3Rpb25FcnJvcignU2VjdXJpdHkgdG9rZW4gY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgb3IgYXV0aG9yaXplZC4nLCAnRUZFREFVVEgnKSwgZXJyXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUeXBlIGd1YXJkIHRoZSB0b2tlbiB2YWx1ZSBzbyB0aGF0IGl0IGlzIG5ldmVyIG51bGwuXG4gICAgICAgIGlmICh0b2tlblJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgICAgICAgICAgW25ldyBDb25uZWN0aW9uRXJyb3IoJ1NlY3VyaXR5IHRva2VuIGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIG9yIGF1dGhvcml6ZWQuJywgJ0VGRURBVVRIJyldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VuZEZlZEF1dGhUb2tlbk1lc3NhZ2UodG9rZW5SZXNwb25zZS50b2tlbik7XG4gICAgICAgIC8vIHNlbnQgdGhlIGZlZEF1dGggdG9rZW4gbWVzc2FnZSwgdGhlIHJlc3QgaXMgc2ltaWxhciB0byBzdGFuZGFyZCBsb2dpbiA3XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9MT0dJTjdfV0lUSF9TVEFOREFSRF9MT0dJTik7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBlcmZvcm1TZW50TG9naW43V2l0aFN0YW5kYXJkTG9naW4oc2lnbmFsKTtcbiAgICAgIH0gZWxzZSBpZiAoaGFuZGxlci5sb2dpbkVycm9yKSB7XG4gICAgICAgIHRocm93IGhhbmRsZXIubG9naW5FcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBDb25uZWN0aW9uRXJyb3IoJ0xvZ2luIGZhaWxlZC4nLCAnRUxPR0lOJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFzeW5jIHBlcmZvcm1Mb2dnZWRJblNlbmRpbmdJbml0aWFsU3FsKHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICBhd2FpdCB3aXRoQWJvcnRSYWNlKHNpZ25hbCwgYXN5bmMgKHNpZ25hbEFib3J0ZWQpID0+IHtcbiAgICAgIHRoaXMuc2VuZEluaXRpYWxTcWwoKTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIHRoaXMubWVzc2FnZUlvLnJlYWRNZXNzYWdlKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIHRocm93IHRoaXMud3JhcFNvY2tldEVycm9yKGVycik7XG4gICAgICAgIH0pLFxuICAgICAgICBzaWduYWxBYm9ydGVkXG4gICAgICBdKTtcblxuICAgICAgY29uc3QgdG9rZW5TdHJlYW1QYXJzZXIgPSB0aGlzLmNyZWF0ZVRva2VuU3RyZWFtUGFyc2VyKG1lc3NhZ2UsIG5ldyBJbml0aWFsU3FsVG9rZW5IYW5kbGVyKHRoaXMpKTtcbiAgICAgIC8vIElmIHRoZSBhYm9ydCB3aW5zIHRoaXMgcmFjZSwgdGhlIHBlbmRpbmcgYG9uY2UoKWAgaXMgbGVmdFxuICAgICAgLy8gdW5vYnNlcnZlZCwgYW5kIGEgcGFyc2UgZXJyb3IgbGFuZGluZyBhZnRlcndhcmRzIHdvdWxkIHJlamVjdCBpdFxuICAgICAgLy8gd2l0aCBub2JvZHkgbGlzdGVuaW5nLiBPYnNlcnZlIGl0IHNvIHRoYXQgY2Fubm90IGJlY29tZSBhblxuICAgICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbiAoc2FtZSBpZGlvbSBhcyBgd2l0aEFib3J0UmFjZWApLlxuICAgICAgY29uc3QgZW5kT2ZNZXNzYWdlID0gb25jZSh0b2tlblN0cmVhbVBhcnNlciwgJ2VuZCcpO1xuICAgICAgZW5kT2ZNZXNzYWdlLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGVuZE9mTWVzc2FnZSxcbiAgICAgICAgc2lnbmFsQWJvcnRlZFxuICAgICAgXSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUcmFuc2llbnRFcnJvcihlcnJvcjogQWdncmVnYXRlRXJyb3IgfCBDb25uZWN0aW9uRXJyb3IpOiBib29sZWFuIHtcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgQWdncmVnYXRlRXJyb3IpIHtcbiAgICBlcnJvciA9IGVycm9yLmVycm9yc1swXTtcbiAgfVxuICByZXR1cm4gKGVycm9yIGluc3RhbmNlb2YgQ29ubmVjdGlvbkVycm9yKSAmJiAhIWVycm9yLmlzVHJhbnNpZW50O1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb25uZWN0aW9uO1xubW9kdWxlLmV4cG9ydHMgPSBDb25uZWN0aW9uO1xuXG5Db25uZWN0aW9uLnByb3RvdHlwZS5TVEFURSA9IHtcbiAgSU5JVElBTElaRUQ6IHtcbiAgICBuYW1lOiAnSW5pdGlhbGl6ZWQnLFxuICAgIGV2ZW50czoge31cbiAgfSxcbiAgQ09OTkVDVElORzoge1xuICAgIG5hbWU6ICdDb25uZWN0aW5nJyxcbiAgICBldmVudHM6IHt9XG4gIH0sXG4gIFNFTlRfUFJFTE9HSU46IHtcbiAgICBuYW1lOiAnU2VudFByZWxvZ2luJyxcbiAgICBldmVudHM6IHt9XG4gIH0sXG4gIFJFUk9VVElORzoge1xuICAgIG5hbWU6ICdSZVJvdXRpbmcnLFxuICAgIGV2ZW50czoge31cbiAgfSxcbiAgVFJBTlNJRU5UX0ZBSUxVUkVfUkVUUlk6IHtcbiAgICBuYW1lOiAnVFJBTlNJRU5UX0ZBSUxVUkVfUkVUUlknLFxuICAgIGV2ZW50czoge31cbiAgfSxcbiAgU0VOVF9UTFNTU0xORUdPVElBVElPTjoge1xuICAgIG5hbWU6ICdTZW50VExTU1NMTmVnb3RpYXRpb24nLFxuICAgIGV2ZW50czoge31cbiAgfSxcbiAgU0VOVF9MT0dJTjdfV0lUSF9TVEFOREFSRF9MT0dJTjoge1xuICAgIG5hbWU6ICdTZW50TG9naW43V2l0aFN0YW5kYXJkTG9naW4nLFxuICAgIGV2ZW50czoge31cbiAgfSxcbiAgU0VOVF9MT0dJTjdfV0lUSF9OVExNOiB7XG4gICAgbmFtZTogJ1NlbnRMb2dpbjdXaXRoTlRMTUxvZ2luJyxcbiAgICBldmVudHM6IHt9XG4gIH0sXG4gIFNFTlRfTE9HSU43X1dJVEhfRkVEQVVUSDoge1xuICAgIG5hbWU6ICdTZW50TG9naW43V2l0aEZlZGF1dGgnLFxuICAgIGV2ZW50czoge31cbiAgfSxcbiAgTE9HR0VEX0lOX1NFTkRJTkdfSU5JVElBTF9TUUw6IHtcbiAgICBuYW1lOiAnTG9nZ2VkSW5TZW5kaW5nSW5pdGlhbFNxbCcsXG4gICAgZXZlbnRzOiB7fVxuICB9LFxuICBMT0dHRURfSU46IHtcbiAgICBuYW1lOiAnTG9nZ2VkSW4nLFxuICAgIGV2ZW50czoge1xuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgICAgdGhpcy5jbGVhbnVwQ29ubmVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9DTElFTlRfUkVRVUVTVDoge1xuICAgIG5hbWU6ICdTZW50Q2xpZW50UmVxdWVzdCcsXG4gICAgZW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMubWVzc2FnZUlvLnJlYWRNZXNzYWdlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgdGhpcy5fb25Tb2NrZXRFcnJvcihlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXF1ZXN0IHRpbWVyIGlzIHN0b3BwZWQgb24gZmlyc3QgZGF0YSBwYWNrYWdlXG4gICAgICAgIHRoaXMuY2xlYXJSZXF1ZXN0VGltZXIoKTtcblxuICAgICAgICBjb25zdCB0b2tlblN0cmVhbVBhcnNlciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgbmV3IFJlcXVlc3RUb2tlbkhhbmRsZXIodGhpcywgdGhpcy5yZXF1ZXN0ISkpO1xuXG4gICAgICAgIC8vIEEgdG9rZW4gcGFyc2UgZmFpbHVyZSBsZWF2ZXMgdGhlIGNvbm5lY3Rpb24gYXQgYW4gdW5kZWZpbmVkXG4gICAgICAgIC8vIHBvc2l0aW9uIGluIHRoZSBURFMgc3RyZWFtLCBzbyBpdCBjYW5ub3QgYmUgcmVjb3ZlcmVkIGF0IHRoZVxuICAgICAgICAvLyByZXF1ZXN0IGxldmVsIOKAlCB0cmVhdCBpdCBsaWtlIGEgc29ja2V0IGVycm9yLiBXaXRob3V0IGEgbGlzdGVuZXJcbiAgICAgICAgLy8gaGVyZSwgYSBwYXJzZSBmYWlsdXJlIHdvdWxkIHN1cmZhY2UgYXMgYW4gdW5oYW5kbGVkIGAnZXJyb3InYFxuICAgICAgICAvLyBldmVudCBvbiB0aGUgcGFyc2VyJ3MgaW50ZXJuYWwgc3RyZWFtIGFuZCBjcmFzaCB0aGUgcHJvY2Vzcy5cbiAgICAgICAgY29uc3Qgb25QYXJzZXJFcnJvciA9IChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gVGhlIHJlcXVlc3QgaXMgYWJvdXQgdG8gZmFpbCB0aHJvdWdoIHRoZSBzb2NrZXQgZXJyb3IgcGF0aCwgc29cbiAgICAgICAgICAvLyBkZXRhY2ggaXRzIGxpc3RlbmVycyBmaXJzdDogYSBsYXRlIGBjYW5jZWwoKWAgbXVzdCBub3Qgd3JpdGUgYW5cbiAgICAgICAgICAvLyBhdHRlbnRpb24gcGFja2V0IHRvIHRoZSBkZXN0cm95ZWQgc29ja2V0LiAoT24gdGhlIGNhbmNlbGVkLWRyYWluXG4gICAgICAgICAgLy8gcGF0aCBiZWxvdyB0aGVzZSB3ZXJlIG5ldmVyIGF0dGFjaGVkLCBhbmQgcmVtb3ZhbCBpcyBhIG5vLW9wLilcbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/LnJlbW92ZUxpc3RlbmVyKCdjYW5jZWwnLCB0aGlzLl9jYW5jZWxBZnRlclJlcXVlc3RTZW50KTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/LnJlbW92ZUxpc3RlbmVyKCdjYW5jZWwnLCBvbkNhbmNlbCk7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5yZW1vdmVMaXN0ZW5lcigncGF1c2UnLCBvblBhdXNlKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/LnJlbW92ZUxpc3RlbmVyKCdyZXN1bWUnLCBvblJlc3VtZSk7XG5cbiAgICAgICAgICB0aGlzLl9vblNvY2tldEVycm9yKGVycik7XG4gICAgICAgIH07XG4gICAgICAgIHRva2VuU3RyZWFtUGFyc2VyLm9uKCdlcnJvcicsIG9uUGFyc2VyRXJyb3IpO1xuXG4gICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IHdhcyBjYW5jZWxlZCBhZnRlciB0aGUgcmVxdWVzdCBtZXNzYWdlIHdhc1xuICAgICAgICAvLyBmdWxseSBzZW50IG9mZiwgYW4gYXR0ZW50aW9uIG1lc3NhZ2Ugd2FzIHNlbnQgdG8gdGhlIHNlcnZlci5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2UgYWxyZWFkeSBzdGFydGVkIGNvbnN1bWluZyB0aGUgY3VycmVudCBtZXNzYWdlICh0aGUgcmVzcG9uc2VcbiAgICAgICAgLy8gdG8gdGhlIGNhbmNlbGVkIHJlcXVlc3QsIHdpdGggYWxsIHRoZSB0b2tlbiBoYW5kbGVycyBiZWluZ1xuICAgICAgICAvLyBuby1vcHMpLCBhbmQgbmVlZCB0byBlbnN1cmUgdGhlIG5leHQgbWVzc2FnZSAoY29udGFpbmluZyB0aGVcbiAgICAgICAgLy8gYXR0ZW50aW9uIGFja25vd2xlZGdlbWVudCkgaXMgaGFuZGxlZCBieSB0aGUgYFNFTlRfQVRURU5USU9OYFxuICAgICAgICAvLyBzdGF0ZS5cbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdD8uY2FuY2VsZWQgJiYgdGhpcy5hdHRlbnRpb25TZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9BVFRFTlRJT04pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb25SZXN1bWUgPSAoKSA9PiB7XG4gICAgICAgICAgdG9rZW5TdHJlYW1QYXJzZXIucmVzdW1lKCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9uUGF1c2UgPSAoKSA9PiB7XG4gICAgICAgICAgdG9rZW5TdHJlYW1QYXJzZXIucGF1c2UoKTtcblxuICAgICAgICAgIHRoaXMucmVxdWVzdD8ub25jZSgncmVzdW1lJywgb25SZXN1bWUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucmVxdWVzdD8ub24oJ3BhdXNlJywgb25QYXVzZSk7XG5cbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QgJiYgdGhpcy5yZXF1ZXN0LnBhdXNlZCkge1xuICAgICAgICAgIG9uUGF1c2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IHdhcyBjYW5jZWxlZCBiZWZvcmUgdGhlIHJlcXVlc3QgbWVzc2FnZSB3YXNcbiAgICAgICAgICAvLyBmdWxseSBzZW50LCB0aGUgbWVzc2FnZSB3YXMgdGVybWluYXRlZCB3aXRoIHRoZSBgSUdOT1JFYCBiaXRcbiAgICAgICAgICAvLyBzZXQgYW5kIG5vIGF0dGVudGlvbiBtZXNzYWdlIHdhcyBzZW50LiBUaGUgc2VydmVyJ3MgcmVzcG9uc2VcbiAgICAgICAgICAvLyB0byB0aGUgaWdub3JlZCBtZXNzYWdlIGlzIGhhbmRsZWQgbGlrZSBhIHJlZ3VsYXIgcmVzcG9uc2UuXG4gICAgICAgICAgaWYgKCF0aGlzLmF0dGVudGlvblNlbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0b2tlblN0cmVhbVBhcnNlci5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25FbmRPZk1lc3NhZ2UpO1xuXG4gICAgICAgICAgaWYgKHRoaXMucmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QgJiYgdGhpcy5yZXF1ZXN0LnBhdXNlZCkge1xuICAgICAgICAgICAgLy8gcmVzdW1lIHRoZSByZXF1ZXN0IGlmIGl0IHdhcyBwYXVzZWQgc28gd2UgY2FuIHJlYWQgdGhlIHJlbWFpbmluZyB0b2tlbnNcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdC5yZXN1bWUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/LnJlbW92ZUxpc3RlbmVyKCdwYXVzZScsIG9uUGF1c2UpO1xuICAgICAgICAgIHRoaXMucmVxdWVzdD8ucmVtb3ZlTGlzdGVuZXIoJ3Jlc3VtZScsIG9uUmVzdW1lKTtcblxuICAgICAgICAgIC8vIFRoZSBgX2NhbmNlbEFmdGVyUmVxdWVzdFNlbnRgIGNhbGxiYWNrIHdpbGwgaGF2ZSBzZW50IGFcbiAgICAgICAgICAvLyBhdHRlbnRpb24gbWVzc2FnZSwgc28gbm93IHdlIG5lZWQgdG8gYWxzbyBzd2l0Y2ggdG9cbiAgICAgICAgICAvLyB0aGUgYFNFTlRfQVRURU5USU9OYCBzdGF0ZSB0byBtYWtlIHN1cmUgdGhlIGF0dGVudGlvbiBhY2tcbiAgICAgICAgICAvLyBtZXNzYWdlIGlzIHByb2Nlc3NlZCBjb3JyZWN0bHkuXG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5TRU5UX0FUVEVOVElPTik7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgb25FbmRPZk1lc3NhZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgdG9rZW5TdHJlYW1QYXJzZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25QYXJzZXJFcnJvcik7XG5cbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/LnJlbW92ZUxpc3RlbmVyKCdjYW5jZWwnLCB0aGlzLl9jYW5jZWxBZnRlclJlcXVlc3RTZW50KTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/LnJlbW92ZUxpc3RlbmVyKCdjYW5jZWwnLCBvbkNhbmNlbCk7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5yZW1vdmVMaXN0ZW5lcigncGF1c2UnLCBvblBhdXNlKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/LnJlbW92ZUxpc3RlbmVyKCdyZXN1bWUnLCBvblJlc3VtZSk7XG5cbiAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCB3YXMgY2FuY2VsZWQgYmVmb3JlIGl0cyByZXF1ZXN0IG1lc3NhZ2Ugd2FzXG4gICAgICAgICAgLy8gZnVsbHkgc2VudCwgdGhpcyByZXNwb25zZSBiZWxvbmdzIHRvIHRoZSBpZ25vcmVkIG1lc3NhZ2UgYW5kXG4gICAgICAgICAgLy8gYSBjYW5jZWwgdGltZXIgaXMgcnVubmluZyAtIHRoZSByZXNwb25zZSdzIGFycml2YWwgaXMgd2hhdFxuICAgICAgICAgIC8vIGNvbXBsZXRlcyB0aGUgY2FuY2VsbGF0aW9uLlxuICAgICAgICAgIHRoaXMuY2xlYXJDYW5jZWxUaW1lcigpO1xuXG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5MT0dHRURfSU4pO1xuICAgICAgICAgIGNvbnN0IHNxbFJlcXVlc3QgPSB0aGlzLnJlcXVlc3QgYXMgUmVxdWVzdDtcbiAgICAgICAgICB0aGlzLnJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInICYmIHNxbFJlcXVlc3QuZXJyb3IgJiYgdGhpcy5pc1NxbEJhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3FsUmVxdWVzdC5jYWxsYmFjayhzcWxSZXF1ZXN0LmVycm9yLCBzcWxSZXF1ZXN0LnJvd0NvdW50LCBzcWxSZXF1ZXN0LnJvd3MpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRva2VuU3RyZWFtUGFyc2VyLm9uY2UoJ2VuZCcsIG9uRW5kT2ZNZXNzYWdlKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0Py5vbmNlKCdjYW5jZWwnLCBvbkNhbmNlbCk7XG4gICAgICB9KSgpO1xuXG4gICAgfSxcbiAgICBleGl0OiBmdW5jdGlvbihuZXh0U3RhdGUpIHtcbiAgICAgIHRoaXMuY2xlYXJSZXF1ZXN0VGltZXIoKTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uKGVycikge1xuICAgICAgICBjb25zdCBzcWxSZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0ITtcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgICAgdGhpcy5jbGVhbnVwQ29ubmVjdGlvbigpO1xuXG4gICAgICAgIHNxbFJlcXVlc3QuY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIFNFTlRfQVRURU5USU9OOiB7XG4gICAgbmFtZTogJ1NlbnRBdHRlbnRpb24nLFxuICAgIGVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFREUyBpcyBhIHJlcXVlc3QtcmVzcG9uc2UgcHJvdG9jb2wgYXQgdGhlIG1lc3NhZ2UgbGV2ZWw6IGV2ZXJ5XG4gICAgICAgIC8vIGNsaWVudCBtZXNzYWdlIC0gaW5jbHVkaW5nIHRoZSBhdHRlbnRpb24gbWVzc2FnZSAtIHJlY2VpdmVzXG4gICAgICAgIC8vIGV4YWN0bHkgb25lIHJlc3BvbnNlIG1lc3NhZ2UuIEJ5IHRoZSB0aW1lIHdlIGVudGVyIHRoaXMgc3RhdGUsXG4gICAgICAgIC8vIHRoZSByZXNwb25zZSB0byB0aGUgY2FuY2VsZWQgcmVxdWVzdCBpdHNlbGYgd2FzIGFscmVhZHkgY29uc3VtZWRcbiAgICAgICAgLy8gaW4gdGhlIGBTZW50Q2xpZW50UmVxdWVzdGAgc3RhdGUsIHNvIHRoZSBzaW5nbGUgbWVzc2FnZSByZWFkIGhlcmVcbiAgICAgICAgLy8gaXMgdGhlIGF0dGVudGlvbiBtZXNzYWdlJ3Mgb3duIHJlc3BvbnNlLCBjb250YWluaW5nIHRoZSBhdHRlbnRpb25cbiAgICAgICAgLy8gYWNrbm93bGVkZ2VtZW50LiBSZWFkaW5nIG1vcmUgdGhhbiBvbmUgbWVzc2FnZSB3b3VsZCBjb25zdW1lIHRoZVxuICAgICAgICAvLyByZXNwb25zZSBiZWxvbmdpbmcgdG8gdGhlIG5leHQgcmVxdWVzdCBhbmQgZGVzeW5jaHJvbml6ZSB0aGVcbiAgICAgICAgLy8gbWVzc2FnZSBzdHJlYW0gLSBzbyBkb24ndCB0dXJuIHRoaXMgaW50byBhIGxvb3AuXG4gICAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLm1lc3NhZ2VJby5yZWFkTWVzc2FnZSgpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIHRoaXMuX29uU29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYW5kbGVyID0gbmV3IEF0dGVudGlvblRva2VuSGFuZGxlcih0aGlzLCB0aGlzLnJlcXVlc3QhKTtcbiAgICAgICAgY29uc3QgdG9rZW5TdHJlYW1QYXJzZXIgPSB0aGlzLmNyZWF0ZVRva2VuU3RyZWFtUGFyc2VyKG1lc3NhZ2UsIGhhbmRsZXIpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgb25jZSh0b2tlblN0cmVhbVBhcnNlciwgJ2VuZCcpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIC8vIEEgdG9rZW4gcGFyc2UgZmFpbHVyZSBpbiB0aGUgYXR0ZW50aW9uIHJlc3BvbnNlIHJlamVjdHMgdGhlXG4gICAgICAgICAgLy8gYG9uY2UoKWAuIFRyZWF0IGl0IGxpa2UgYSBzb2NrZXQgZXJyb3IgLSB0aGUgcmVxdWVzdCBmYWlscyB3aXRoXG4gICAgICAgICAgLy8gdGhlIHBhcnNlIGVycm9yIGFuZCB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgLSBpbnN0ZWFkIG9mIHRoZVxuICAgICAgICAgIC8vIHByb2Nlc3MgZHlpbmcgb24gYW4gdW5oYW5kbGVkIHJlamVjdGlvbi5cbiAgICAgICAgICB0aGlzLl9vblNvY2tldEVycm9yKGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIDMuMi41LjcgU2VudCBBdHRlbnRpb24gU3RhdGVcbiAgICAgICAgLy8gRGlzY2FyZCBhbnkgZGF0YSBjb250YWluZWQgaW4gdGhlIHJlc3BvbnNlLCB1bnRpbCB3ZSByZWNlaXZlIHRoZSBhdHRlbnRpb24gcmVzcG9uc2VcbiAgICAgICAgaWYgKGhhbmRsZXIuYXR0ZW50aW9uUmVjZWl2ZWQpIHtcbiAgICAgICAgICB0aGlzLmF0dGVudGlvblNlbnQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNsZWFyQ2FuY2VsVGltZXIoKTtcblxuICAgICAgICAgIGNvbnN0IHNxbFJlcXVlc3QgPSB0aGlzLnJlcXVlc3QhO1xuICAgICAgICAgIHRoaXMucmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkxPR0dFRF9JTik7XG5cbiAgICAgICAgICBpZiAoc3FsUmVxdWVzdC5lcnJvciAmJiBzcWxSZXF1ZXN0LmVycm9yIGluc3RhbmNlb2YgUmVxdWVzdEVycm9yICYmIHNxbFJlcXVlc3QuZXJyb3IuY29kZSA9PT0gJ0VUSU1FT1VUJykge1xuICAgICAgICAgICAgc3FsUmVxdWVzdC5jYWxsYmFjayhzcWxSZXF1ZXN0LmVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3FsUmVxdWVzdC5jYWxsYmFjayhuZXcgUmVxdWVzdEVycm9yKCdDYW5jZWxlZC4nLCAnRUNBTkNFTCcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgY29uc3Qgc3FsUmVxdWVzdCA9IHRoaXMucmVxdWVzdCE7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgICAgdGhpcy5jbGVhbnVwQ29ubmVjdGlvbigpO1xuXG4gICAgICAgIHNxbFJlcXVlc3QuY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIEZJTkFMOiB7XG4gICAgbmFtZTogJ0ZpbmFsJyxcbiAgICBldmVudHM6IHt9XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMs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
|