appium-uiautomator2-driver 1.73.0 → 2.0.1
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/README.md +26 -5
- package/build/index.js +6 -4
- package/build/lib/commands/actions.js +1 -1
- package/build/lib/commands/alert.js +1 -1
- package/build/lib/commands/element.js +9 -9
- package/build/lib/commands/find.js +6 -12
- package/build/lib/commands/general.js +11 -10
- package/build/lib/commands/gestures.js +7 -7
- package/build/lib/commands/viewport.js +3 -3
- package/build/lib/css-converter.js +120 -113
- package/build/lib/driver.js +11 -11
- package/build/lib/extensions.js +1 -1
- package/build/lib/helpers.js +5 -5
- package/build/lib/logger.js +3 -3
- package/build/lib/server.js +5 -5
- package/build/lib/uiautomator2.js +15 -15
- package/lib/.DS_Store +0 -0
- package/lib/commands/element.js +2 -2
- package/lib/commands/find.js +5 -9
- package/lib/commands/general.js +4 -2
- package/lib/commands/gestures.js +2 -2
- package/lib/commands/viewport.js +1 -1
- package/lib/css-converter.js +178 -170
- package/lib/driver.js +2 -2
- package/lib/helpers.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/server.js +1 -1
- package/lib/uiautomator2.js +4 -4
- package/package.json +21 -15
|
@@ -9,16 +9,16 @@ exports.default = void 0;
|
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _support = require("@appium/support");
|
|
13
13
|
|
|
14
14
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _baseDriver = require("@appium/base-driver");
|
|
17
17
|
|
|
18
18
|
const commands = {};
|
|
19
19
|
|
|
20
20
|
function toOrigin(element) {
|
|
21
|
-
return element ?
|
|
21
|
+
return element ? _support.util.wrapElement(_support.util.unwrapElement(element)) : undefined;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
function toPoint(x, y) {
|
|
@@ -193,10 +193,10 @@ commands.mobileScrollBackTo = async function (opts = {}) {
|
|
|
193
193
|
} = opts;
|
|
194
194
|
|
|
195
195
|
if (!elementId || !elementToId) {
|
|
196
|
-
throw new
|
|
196
|
+
throw new _baseDriver.errors.InvalidArgumentError(`Both elementId and elementToId arguments must be provided`);
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
return await this.uiautomator2.jwproxy.command(`/appium/element/${
|
|
199
|
+
return await this.uiautomator2.jwproxy.command(`/appium/element/${_support.util.unwrapElement(elementId)}/scroll_to/${_support.util.unwrapElement(elementToId)}`, 'POST', {});
|
|
200
200
|
};
|
|
201
201
|
|
|
202
202
|
commands.mobileScroll = async function (opts = {}) {
|
|
@@ -209,7 +209,7 @@ commands.mobileScroll = async function (opts = {}) {
|
|
|
209
209
|
} = opts;
|
|
210
210
|
|
|
211
211
|
if (!strategy || !selector) {
|
|
212
|
-
throw new
|
|
212
|
+
throw new _baseDriver.errors.InvalidArgumentError(`Both strategy and selector arguments must be provided`);
|
|
213
213
|
}
|
|
214
214
|
|
|
215
215
|
return await this.uiautomator2.jwproxy.command('/touch/scroll', 'POST', {
|
|
@@ -226,4 +226,4 @@ var _default = commands;
|
|
|
226
226
|
exports.default = _default;require('source-map-support').install();
|
|
227
227
|
|
|
228
228
|
|
|
229
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZXN0dXJlcy5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInRvT3JpZ2luIiwiZWxlbWVudCIsInV0aWwiLCJ3cmFwRWxlbWVudCIsInVud3JhcEVsZW1lbnQiLCJ1bmRlZmluZWQiLCJ0b1BvaW50IiwieCIsInkiLCJfIiwiaXNGaW5pdGUiLCJ0b1JlY3QiLCJsZWZ0IiwidG9wIiwid2lkdGgiLCJoZWlnaHQiLCJzb21lIiwidiIsIm1vYmlsZUNsaWNrR2VzdHVyZSIsIm9wdHMiLCJlbGVtZW50SWQiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsIm9yaWdpbiIsIm9mZnNldCIsIm1vYmlsZUxvbmdDbGlja0dlc3R1cmUiLCJkdXJhdGlvbiIsIm1vYmlsZURvdWJsZUNsaWNrR2VzdHVyZSIsIm1vYmlsZURyYWdHZXN0dXJlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJzcGVlZCIsInN0YXJ0IiwiZW5kIiwibW9iaWxlRmxpbmdHZXN0dXJlIiwiZGlyZWN0aW9uIiwiYXJlYSIsIm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlIiwicGVyY2VudCIsIm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUiLCJtb2JpbGVTd2lwZUdlc3R1cmUiLCJtb2JpbGVTY3JvbGxHZXN0dXJlIiwibW9iaWxlU2Nyb2xsQmFja1RvIiwiZWxlbWVudFRvSWQiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1vYmlsZVNjcm9sbCIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYXhTd2lwZXMiLCJwYXJhbXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOztBQUdBLFNBQVNDLFFBQVQsQ0FBbUJDLE9BQW5CLEVBQTRCO0FBQzFCLFNBQU9BLE9BQU8sR0FBR0Msb0JBQUtDLFdBQUwsQ0FBaUJELG9CQUFLRSxhQUFMLENBQW1CSCxPQUFuQixDQUFq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QSxNQUFNLEVBQUV4QixRQUFRLENBQUNvQixTQUFTLElBQUluQixPQUFkLENBRHNEO0FBRXRFb0QsSUFBQUEsTUFBTSxFQUFFO0FBQUNILE1BQUFBLFFBQUQ7QUFBV0MsTUFBQUEsUUFBWDtBQUFxQkMsTUFBQUE7QUFBckI7QUFGOEQsR0FBM0QsQ0FBYjtBQUlELENBWkQ7O2VBY2VyRCxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5cbmZ1bmN0aW9uIHRvT3JpZ2luIChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gdXRpbC53cmFwRWxlbWVudCh1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCkpIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB0b1BvaW50ICh4LCB5KSB7XG4gIHJldHVybiBfLmlzRmluaXRlKHgpICYmIF8uaXNGaW5pdGUoeSkgPyB7eCwgeX0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHRvUmVjdCAobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSB7XG4gIHJldHVybiBbbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0XS5zb21lKCh2KSA9PiAhXy5pc0Zpbml0ZSh2KSlcbiAgICA/IHVuZGVmaW5lZFxuICAgIDoge2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodH07XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xpY2tPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBjbGlja2VkLlxuICogSWYgdGhlIGVsZW1lbnQgaXMgbWlzc2luZyB0aGVuIGJvdGggY2xpY2sgb2Zmc2V0IGNvb3JkaW5hdGVzIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCBvZmZzZXQgYXJlIHByb3ZpZGVkIHRoZW4gdGhlIGNvb3JkaW5hdGVzXG4gKiBhcmUgcGFyc2VkIGFzIHJlbGF0aXZlIG9mZnNldHMgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBjbGljayBvblxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBjbGljayBvblxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBzaW1wbGUgY2xpY2svdGFwIGdlc3R1cmVcbiAqXG4gKiBAcGFyYW0gez9DbGlja09wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2xpY2tHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQ2xpY2tHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICB4LCB5LFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9jbGljaycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBvZmZzZXQ6IHRvUG9pbnQoeCwgeSksXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb25nQ2xpY2tPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBjbGlja2VkLlxuICogSWYgdGhlIGVsZW1lbnQgaXMgbWlzc2luZyB0aGVuIGJvdGggY2xpY2sgb2Zmc2V0IGNvb3JkaW5hdGVzIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCBvZmZzZXQgYXJlIHByb3ZpZGVkIHRoZW4gdGhlIGNvb3JkaW5hdGVzXG4gKiBhcmUgcGFyc2VkIGFzIHJlbGF0aXZlIG9mZnNldHMgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBjbGljayBvblxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBjbGljayBvblxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBkdXJhdGlvbiBbNTAwXSAtIENsaWNrIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy5cbiAqIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBjbGljayB0aGF0IGxhc3RzIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb25cbiAqXG4gKiBAcGFyYW0gez9Mb25nQ2xpY2tPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxvbmdDbGlja0dlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMb25nQ2xpY2tHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICB4LCB5LFxuICAgIGR1cmF0aW9uLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9sb25nX2NsaWNrJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIG9mZnNldDogdG9Qb2ludCh4LCB5KSxcbiAgICBkdXJhdGlvbixcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERvdWJsZUNsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgZG91YmxlIGNsaWNrZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpcyBtaXNzaW5nIHRoZW4gYm90aCBjbGljayBvZmZzZXQgY29vcmRpbmF0ZXMgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIG9mZnNldCBhcmUgcHJvdmlkZWQgdGhlbiB0aGUgY29vcmRpbmF0ZXNcbiAqIGFyZSBwYXJzZWQgYXMgcmVsYXRpdmUgb2Zmc2V0cyBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGVsZW1lbnQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIGRvdWJsZSBjbGljayBvblxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBkb3VibGUgY2xpY2sgb25cbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgY2xpY2sgdGhhdCBsYXN0cyBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uXG4gKlxuICogQHBhcmFtIHs/RG91YmxlQ2xpY2tPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURvdWJsZUNsaWNrR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZURvdWJsZUNsaWNrR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgeCwgeSxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvZG91YmxlX2NsaWNrJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIG9mZnNldDogdG9Qb2ludCh4LCB5KSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERyYWdPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBkcmFnZ2VkLlxuICogSWYgdGhlIGVsZW1lbnQgaWQgaXMgbWlzc2luZyB0aGVuIHRoZSBzdGFydCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHN0YXJ0IGNvb3JkaW5hdGVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXNlXG4gKiBjb29yZGluYXRlcyBhcmUgY29uc2lkZXJlZCBhcyBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGVsZW1lbnQgY29ybmVyLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFggLSBUaGUgeCBjb29yZGluYXRlIHdoZXJlIHRoZSBkcmFnZ2luZyBzdGFydHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRZIC0gVGhlIHkgY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgc3RhcnRzXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGVuZFggLSBUaGUgeCBjb29yZGluYXRlIHdoZXJlIHRoZSBkcmFnZ2luZyBlbmRzXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGVuZFkgLSBUaGUgeSBjb29yZGluYXRlIHdoZXJlIHRoZSBkcmFnZ2luZyBlbmRzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHNwZWVkIFsyNTAwICogZGlzcGxheURlbnNpdHldIC0gVGhlIHNwZWVkIGF0IHdoaWNoIHRvIHBlcmZvcm1cbiAqIHRoaXMgZ2VzdHVyZSBpbiBwaXhlbHMgcGVyIHNlY29uZC4gVGhlIHZhbHVlIG11c3Qgbm90IGJlIG5lZ2F0aXZlXG4gKi9cblxuLyoqXG4gKiBEcmFncyB0aGlzIG9iamVjdCB0byB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7P0RyYWdPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURyYWdHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRHJhZ0dlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIHN0YXJ0WCwgc3RhcnRZLFxuICAgIGVuZFgsIGVuZFksXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL2RyYWcnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgc3RhcnQ6IHRvUG9pbnQoc3RhcnRYLCBzdGFydFkpLFxuICAgIGVuZDogdG9Qb2ludChlbmRYLCBlbmRZKSxcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEZsaW5nT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgZmxpbmdlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiBmbGluZyBib3VuZGluZyBhcmVhIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYSBhcmUgcHJvdmlkZWQgdGhlbiB0aGlzXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBmbGluZyBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBmbGluZyBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGRpcmVjdGlvbiAtIERpcmVjdGlvbiBvZiB0aGUgZmxpbmcuXG4gKiBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6IGB1cGAsIGBkb3duYCwgYGxlZnRgIGFuZCBgcmlnaHRgIChjYXNlIGluc2Vuc2l0aXZlKVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbNzUwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtIHRoaXNcbiAqIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbWluaW11bSBmbGluZ1xuICogdmVsb2NpdHkgZm9yIHRoZSBnaXZlbiB2aWV3ICg1MCBieSBkZWZhdWx0KVxuICovXG5cbi8qKlxuICogRHJhZ3MgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gez9GbGluZ09wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBvYmplY3QgY2FuIHN0aWxsIHNjcm9sbCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICovXG5jb21tYW5kcy5tb2JpbGVGbGluZ0dlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVGbGluZ0dlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL2ZsaW5nJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIGFyZWE6IHRvUmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpLFxuICAgIGRpcmVjdGlvbixcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBpbmNoT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgcGluY2hlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiBwaW5jaCBib3VuZGluZyBhcmVhIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCB0aGUgcGluY2ggYm91bmRpbmcgYXJlYSBhcmUgcHJvdmlkZWQgdGhlbiB0aGVcbiAqIGFyZWEgaXMgZWZmZWN0aXZlbHkgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIHBpbmNoIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdG9wIC0gVGhlIHRvcCBjb29yZGluYXRlIG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHBpbmNoIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gcGVyY2VudCAtIFRoZSBzaXplIG9mIHRoZSBwaW5jaCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHBpbmNoIGFyZWEgc2l6ZS5cbiAqIFZhbGlkIHZhbHVlcyBtdXN0IGJlIGZsb2F0IG51bWJlcnMgaW4gcmFuZ2UgMC4uMSwgd2hlcmUgMS4wIGlzIDEwMCVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzI1MDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybVxuICogdGhpcyBnZXN0dXJlIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgcGluY2ggY2xvc2UgZ2VzdHVyZS5cbiAqXG4gKiBAcGFyYW0gez9QaW5jaE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlUGluY2hDbG9zZUdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVQaW5jaENsb3NlR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL3BpbmNoX2Nsb3NlJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIGFyZWE6IHRvUmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIHBpbmNoIG9wZW4gZ2VzdHVyZS5cbiAqXG4gKiBAcGFyYW0gez9QaW5jaE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlUGluY2hPcGVuR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBpbmNoT3Blbkdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9waW5jaF9vcGVuJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIGFyZWE6IHRvUmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTd2lwZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIHN3aXBlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiBzd2lwZSBib3VuZGluZyBhcmVhIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYSBhcmUgcHJvdmlkZWQgdGhlbiB0aGVcbiAqIGFyZWEgaXMgZWZmZWN0aXZlbHkgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIHN3aXBlIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdG9wIC0gVGhlIHRvcCBjb29yZGluYXRlIG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHN3aXBlIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gZGlyZWN0aW9uIC0gRGlyZWN0aW9uIG9mIHRoZSBzd2lwZS5cbiAqIEFjY2VwdGFibGUgdmFsdWVzIGFyZTogYHVwYCwgYGRvd25gLCBgbGVmdGAgYW5kIGByaWdodGAgKGNhc2UgaW5zZW5zaXRpdmUpXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IHBlcmNlbnQgLSBUaGUgc2l6ZSBvZiB0aGUgc3dpcGUgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBzd2lwZSBhcmVhIHNpemUuXG4gKiBWYWxpZCB2YWx1ZXMgbXVzdCBiZSBmbG9hdCBudW1iZXJzIGluIHJhbmdlIDAuLjEsIHdoZXJlIDEuMCBpcyAxMDAlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHNwZWVkIFs1MDAwICogZGlzcGxheURlbnNpdHldIC0gVGhlIHNwZWVkIGF0IHdoaWNoIHRvIHBlcmZvcm0gdGhpc1xuICogZ2VzdHVyZSBpbiBwaXhlbHMgcGVyIHNlY29uZC4gVGhlIHZhbHVlIG11c3Qgbm90IGJlIG5lZ2F0aXZlXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHN3aXBlIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/U3dpcGVPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN3aXBlR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVN3aXBlR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LFxuICAgIGRpcmVjdGlvbixcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9zd2lwZScsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjcm9sbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIHNjcm9sbGVkLlxuICogSWYgdGhlIGVsZW1lbnQgaWQgaXMgbWlzc2luZyB0aGVuIHNjcm9sbCBib3VuZGluZyBhcmVhIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhpc1xuICogYXJlYSBpcyBlZmZlY3RpdmVseSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdG9wIC0gVGhlIHRvcCBjb29yZGluYXRlIG9mIHRoZSBzY3JvbGwgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gZGlyZWN0aW9uIC0gRGlyZWN0aW9uIG9mIHRoZSBzY3JvbGwuXG4gKiBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6IGB1cGAsIGBkb3duYCwgYGxlZnRgIGFuZCBgcmlnaHRgIChjYXNlIGluc2Vuc2l0aXZlKVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBwZXJjZW50IC0gVGhlIHNpemUgb2YgdGhlIHNjcm9sbCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHNjcm9sbGluZyBhcmVhIHNpemUuXG4gKiBWYWxpZCB2YWx1ZXMgbXVzdCBiZSBmbG9hdCBudW1iZXJzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3aGVyZSAxLjAgaXMgMTAwJVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbNTAwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtIHRoaXMgZ2VzdHVyZVxuICogaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBzY3JvbGwgZ2VzdHVyZS5cbiAqXG4gKiBAcGFyYW0gez9TY3JvbGxPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGNhbiBzdGlsbCBzY3JvbGwgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqL1xuY29tbWFuZHMubW9iaWxlU2Nyb2xsR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNjcm9sbEdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvc2Nyb2xsJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIGFyZWE6IHRvUmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpLFxuICAgIGRpcmVjdGlvbixcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2Nyb2xsRWxlbWVudFRvRWxlbWVudE9wdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBlbGVtZW50SWQgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHNjcm9sbGFibGUgZWxlbWVudCxcbiAqIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHNjcm9sbGVkLiBJdCBpcyByZXF1aXJlZCB0aGlzIGVsZW1lbnRcbiAqIGlzIGEgdmFsaWQgc2Nyb2xsYWJsZSBjb250YWluZXIgYW5kIGl0IHdhcyBsb2NhdGVkIGJ5IGAtYW5kcm9pZCB1aWF1dG9tYXRvcmBcbiAqIHN0cmF0ZWd5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGVsZW1lbnRUb0lkIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBpdGVtLCB3aGljaCBiZWxvbmdzXG4gKiB0byB0aGUgc2Nyb2xsYWJsZSBlbGVtZW50IGFib3ZlLCBhbmQgd2hpY2ggc2hvdWxkIGJlY29tZSB2aXNpYmxlIGFmdGVyXG4gKiB0aGUgc2Nyb2xsaW5nIG9wZXJhdGlvbiBpcyBmaW5pc2hlZC4gSXQgaXMgcmVxdWlyZWQgdGhpcyBlbGVtZW50XG4gKiB3YXMgbG9jYXRlZCBieSBgLWFuZHJvaWQgdWlhdXRvbWF0b3JgIHN0cmF0ZWd5LlxuICovXG5cbi8qKlxuICogU2Nyb2xscyB0aGUgZ2l2ZW4gc2Nyb2xsYWJsZSBlbGVtZW50IGBlbGVtZW50SWRgIHVudGlsIGBlbGVtZW50VG9JZGBcbiAqIGJlY29tZXMgdmlzaWJsZS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZSBgZWxlbWVudFRvSWRgXG4gKiBpcyBhbHJlYWR5IHZpc2libGUgaW4gdGhlIHZpZXcgcG9ydC4gT3RoZXJ3aXNlIGl0IHdvdWxkIHNjcm9sbFxuICogdG8gdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBzY3JvbGxhYmxlIGNvbnRyb2wgYW5kIHRyaWVzIHRvIHJlYWNoIHRoZSBkZXN0aW5hdGlvbiBlbGVtZW50XG4gKiBieSBzY3JvbGxpbmcgaXRzIHBhcmVudCB0byB0aGUgZW5kIHN0ZXAgYnkgc3RlcC4gVGhlIHNjcm9sbCBkaXJlY3Rpb24gKHZlcnRpY2FsIG9yIGhvcml6b250YWwpXG4gKiBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIEBwYXJhbSB7U2Nyb2xsRWxlbWVudFRvRWxlbWVudE9wdHN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgc2Nyb2xsaW5nIG9wZXJhdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVNjcm9sbEJhY2tUbyA9IGFzeW5jIGZ1bmN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnRJZCwgZWxlbWVudFRvSWR9ID0gb3B0cztcbiAgaWYgKCFlbGVtZW50SWQgfHwgIWVsZW1lbnRUb0lkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgQm90aCBlbGVtZW50SWQgYW5kIGVsZW1lbnRUb0lkIGFyZ3VtZW50cyBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChcbiAgICBgL2FwcGl1bS9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnRJZCl9L3Njcm9sbF90by8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50VG9JZCl9YCwgJ1BPU1QnLCB7fSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjcm9sbE9wdHNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIFRoZSBpZGVudGlmaWVyIG9mIGFuIGVsZW1lbnQuIEl0IGlzIHJlcXVpcmVkIHRoaXMgZWxlbWVudFxuICogaXMgYSB2YWxpZCBzY3JvbGxhYmxlIGNvbnRhaW5lciBhbmQgaXQgd2FzIGxvY2F0ZWQgYnkgYC1hbmRyb2lkIHVpYXV0b21hdG9yYFxuICogc3RyYXRlZ3kuIElmIHRoaXMgcHJvcGVydHkgaXMgbm90IHByb3ZpZGVkIHRoZW4gdGhlIGZpcnN0IGN1cnJlbnRseSBhdmFpbGFibGUgc2Nyb2xsYWJsZSB2aWV3XG4gKiBpcyBzZWxlY3RlZCBmb3IgdGhlIGludGVyYWN0aW9uLlxuICogQHByb3BlcnR5IHshc3RyaW5nfSBzdHJhdGVneSBUaGUgZm9sbG93aW5nIHN0cmF0ZWdpZXMgYXJlIHN1cHBvcnRlZDpcbiAqIC0gYGFjY2Vzc2liaWxpdHkgaWRgIChVaVNlbGVjdG9yKCkuZGVzY3JpcHRpb24pXG4gKiAtIGBjbGFzcyBuYW1lYCAoVWlTZWxlY3RvcigpLmNsYXNzTmFtZSlcbiAqIC0gYC1hbmRyb2lkIHVpYXV0b21hdG9yYCAoVWlTZWxlY3RvcilcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gc2VsZWN0b3IgVGhlIGNvcnJlc3BvbmRpbmcgbG9va3VwIHZhbHVlIGZvciB0aGUgZ2l2ZW5cbiAqIHN0cmF0ZWd5LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBtYXhTd2lwZXMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHN3aXBlcyB0byBwZXJmb3JtXG4gKiBvbiB0aGUgdGFyZ2V0IHNjcm9sbGFibGUgdmlldyBpbiBvcmRlciB0byByZWFjaCB0aGUgZGVzdGluYXRpb24gZWxlbWVudC5cbiAqIEluIGNhc2UgdGhpcyB2YWx1ZSBpcyB1bnNldCB0aGVuIGl0IHdvdWxkIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBzY3JvbGxhYmxlXG4gKiBlbGVtZW50IGl0c2VsZiAodnVhIGBnZXRNYXhTZWFyY2hTd2lwZXMoKWAgcHJvcGVydHkpLlxuICovXG5cbi8qKlxuICogU2Nyb2xscyB0aGUgZ2l2ZW4gc2Nyb2xsYWJsZSBlbGVtZW50IHVudGlsIHRoZSBlbGVtZW50IGlkZW50aWZpZWRcbiAqIGJ5IGBzdHJhdGVneWAgYW5kIGBzZWxlY3RvcmAgYmVjb21lcyB2aXNpYmxlLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgdGhlXG4gKiBkZXN0aW5hdGlvbiBlbGVtZW50IGlzIGFscmVhZHkgdmlzaWJsZSBpbiB0aGUgdmlldyBwb3J0LiBPdGhlcndpc2UgaXQgd291bGQgc2Nyb2xsXG4gKiB0byB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIHNjcm9sbGFibGUgY29udHJvbCBhbmQgdHJpZXMgdG8gcmVhY2ggdGhlIGRlc3RpbmF0aW9uIGVsZW1lbnRcbiAqIGJ5IHNjcm9sbGluZyBpdHMgcGFyZW50IHRvIHRoZSBlbmQgc3RlcCBieSBzdGVwLiBUaGUgc2Nyb2xsIGRpcmVjdGlvbiAodmVydGljYWwgb3IgaG9yaXpvbnRhbClcbiAqIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkuXG4gKlxuICogQHBhcmFtIHtTY3JvbGxPcHRzfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHNjcm9sbGluZyBvcGVyYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZFxuICovXG5jb21tYW5kcy5tb2JpbGVTY3JvbGwgPSBhc3luYyBmdW5jdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LCBlbGVtZW50SWQsIC8vIGBlbGVtZW50YCBpcyBkZXByZWNhdGVkLCB1c2UgYGVsZW1lbnRJZGAgaW5zdGVhZFxuICAgIHN0cmF0ZWd5LCBzZWxlY3RvciwgbWF4U3dpcGVzXG4gIH0gPSBvcHRzO1xuICBpZiAoIXN0cmF0ZWd5IHx8ICFzZWxlY3Rvcikge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEJvdGggc3RyYXRlZ3kgYW5kIHNlbGVjdG9yIGFyZ3VtZW50cyBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3RvdWNoL3Njcm9sbCcsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkIHx8IGVsZW1lbnQpLFxuICAgIHBhcmFtczoge3N0cmF0ZWd5LCBzZWxlY3RvciwgbWF4U3dpcGVzfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2dlc3R1cmVzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
229
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZXN0dXJlcy5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInRvT3JpZ2luIiwiZWxlbWVudCIsInV0aWwiLCJ3cmFwRWxlbWVudCIsInVud3JhcEVsZW1lbnQiLCJ1bmRlZmluZWQiLCJ0b1BvaW50IiwieCIsInkiLCJfIiwiaXNGaW5pdGUiLCJ0b1JlY3QiLCJsZWZ0IiwidG9wIiwid2lkdGgiLCJoZWlnaHQiLCJzb21lIiwidiIsIm1vYmlsZUNsaWNrR2VzdHVyZSIsIm9wdHMiLCJlbGVtZW50SWQiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsIm9yaWdpbiIsIm9mZnNldCIsIm1vYmlsZUxvbmdDbGlja0dlc3R1cmUiLCJkdXJhdGlvbiIsIm1vYmlsZURvdWJsZUNsaWNrR2VzdHVyZSIsIm1vYmlsZURyYWdHZXN0dXJlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJzcGVlZCIsInN0YXJ0IiwiZW5kIiwibW9iaWxlRmxpbmdHZXN0dXJlIiwiZGlyZWN0aW9uIiwiYXJlYSIsIm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlIiwicGVyY2VudCIsIm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUiLCJtb2JpbGVTd2lwZUdlc3R1cmUiLCJtb2JpbGVTY3JvbGxHZXN0dXJlIiwibW9iaWxlU2Nyb2xsQmFja1RvIiwiZWxlbWVudFRvSWQiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1vYmlsZVNjcm9sbCIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYXhTd2lwZXMiLCJwYXJhbXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOztBQUdBLFNBQVNDLFFBQVQsQ0FBbUJDLE9BQW5CLEVBQTRCO0FBQzFCLFNBQU9BLE9BQU8sR0FBR0MsY0FBS0MsV0FBTCxDQUFpQkQsY0FBS0UsYUFBTCxDQUFtQkgsT0FBbkIsQ0FBakIs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QU0sRUFBRXhCLFFBQVEsQ0FBQ29CLFNBQVMsSUFBSW5CLE9BQWQsQ0FEc0Q7QUFFdEVvRCxJQUFBQSxNQUFNLEVBQUU7QUFBQ0gsTUFBQUEsUUFBRDtBQUFXQyxNQUFBQSxRQUFYO0FBQXFCQyxNQUFBQTtBQUFyQjtBQUY4RCxHQUEzRCxDQUFiO0FBSUQsQ0FaRDs7ZUFjZXJELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuXG5mdW5jdGlvbiB0b09yaWdpbiAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IHV0aWwud3JhcEVsZW1lbnQodXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdG9Qb2ludCAoeCwgeSkge1xuICByZXR1cm4gXy5pc0Zpbml0ZSh4KSAmJiBfLmlzRmluaXRlKHkpID8ge3gsIHl9IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB0b1JlY3QgKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gW2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodF0uc29tZSgodikgPT4gIV8uaXNGaW5pdGUodikpXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHtsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHR9O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgY2xpY2tlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlzIG1pc3NpbmcgdGhlbiBib3RoIGNsaWNrIG9mZnNldCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgb2Zmc2V0IGFyZSBwcm92aWRlZCB0aGVuIHRoZSBjb29yZGluYXRlc1xuICogYXJlIHBhcnNlZCBhcyByZWxhdGl2ZSBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgc2ltcGxlIGNsaWNrL3RhcCBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHs/Q2xpY2tPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUNsaWNrR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsaWNrR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgeCwgeSxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvY2xpY2snLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgb2Zmc2V0OiB0b1BvaW50KHgsIHkpLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9uZ0NsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgY2xpY2tlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlzIG1pc3NpbmcgdGhlbiBib3RoIGNsaWNrIG9mZnNldCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgb2Zmc2V0IGFyZSBwcm92aWRlZCB0aGVuIHRoZSBjb29yZGluYXRlc1xuICogYXJlIHBhcnNlZCBhcyByZWxhdGl2ZSBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZHVyYXRpb24gWzUwMF0gLSBDbGljayBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXG4gKiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgY2xpY2sgdGhhdCBsYXN0cyBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uXG4gKlxuICogQHBhcmFtIHs/TG9uZ0NsaWNrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVMb25nQ2xpY2tHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgeCwgeSxcbiAgICBkdXJhdGlvbixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvbG9uZ19jbGljaycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBvZmZzZXQ6IHRvUG9pbnQoeCwgeSksXG4gICAgZHVyYXRpb24sXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb3VibGVDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGRvdWJsZSBjbGlja2VkLlxuICogSWYgdGhlIGVsZW1lbnQgaXMgbWlzc2luZyB0aGVuIGJvdGggY2xpY2sgb2Zmc2V0IGNvb3JkaW5hdGVzIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCBvZmZzZXQgYXJlIHByb3ZpZGVkIHRoZW4gdGhlIGNvb3JkaW5hdGVzXG4gKiBhcmUgcGFyc2VkIGFzIHJlbGF0aXZlIG9mZnNldHMgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBkb3VibGUgY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gZG91YmxlIGNsaWNrIG9uXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIGNsaWNrIHRoYXQgbGFzdHMgZm9yIHRoZSBnaXZlbiBkdXJhdGlvblxuICpcbiAqIEBwYXJhbSB7P0RvdWJsZUNsaWNrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVEb3VibGVDbGlja0dlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEb3VibGVDbGlja0dlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIHgsIHksXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL2RvdWJsZV9jbGljaycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBvZmZzZXQ6IHRvUG9pbnQoeCwgeSksXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEcmFnT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgZHJhZ2dlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiB0aGUgc3RhcnQgY29vcmRpbmF0ZXMgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIHRoZSBzdGFydCBjb29yZGluYXRlcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGVzZVxuICogY29vcmRpbmF0ZXMgYXJlIGNvbnNpZGVyZWQgYXMgb2Zmc2V0cyBmcm9tIHRoZSB0b3AgbGVmdCBlbGVtZW50IGNvcm5lci5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgc3RhcnRzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WSAtIFRoZSB5IGNvb3JkaW5hdGUgd2hlcmUgdGhlIGRyYWdnaW5nIHN0YXJ0c1xuICogQHByb3BlcnR5IHshbnVtYmVyfSBlbmRYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgZW5kc1xuICogQHByb3BlcnR5IHshbnVtYmVyfSBlbmRZIC0gVGhlIHkgY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgZW5kc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbMjUwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtXG4gKiB0aGlzIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogRHJhZ3MgdGhpcyBvYmplY3QgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gez9EcmFnT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVEcmFnR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZURyYWdHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9kcmFnJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIHN0YXJ0OiB0b1BvaW50KHN0YXJ0WCwgc3RhcnRZKSxcbiAgICBlbmQ6IHRvUG9pbnQoZW5kWCwgZW5kWSksXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGbGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGZsaW5nZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gZmxpbmcgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhpc1xuICogYXJlYSBpcyBlZmZlY3RpdmVseSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHshc3RyaW5nfSBkaXJlY3Rpb24gLSBEaXJlY3Rpb24gb2YgdGhlIGZsaW5nLlxuICogQWNjZXB0YWJsZSB2YWx1ZXMgYXJlOiBgdXBgLCBgZG93bmAsIGBsZWZ0YCBhbmQgYHJpZ2h0YCAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzc1MDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybSB0aGlzXG4gKiBnZXN0dXJlIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gZmxpbmdcbiAqIHZlbG9jaXR5IGZvciB0aGUgZ2l2ZW4gdmlldyAoNTAgYnkgZGVmYXVsdClcbiAqL1xuXG4vKipcbiAqIERyYWdzIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uXG4gKlxuICogQHBhcmFtIHs/RmxpbmdPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGNhbiBzdGlsbCBzY3JvbGwgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqL1xuY29tbWFuZHMubW9iaWxlRmxpbmdHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRmxpbmdHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgZGlyZWN0aW9uLFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9mbGluZycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQaW5jaE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIHBpbmNoZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gcGluY2ggYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHBpbmNoIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhlXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgcGluY2ggYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcGluY2ggYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IHBlcmNlbnQgLSBUaGUgc2l6ZSBvZiB0aGUgcGluY2ggYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBwaW5jaCBhcmVhIHNpemUuXG4gKiBWYWxpZCB2YWx1ZXMgbXVzdCBiZSBmbG9hdCBudW1iZXJzIGluIHJhbmdlIDAuLjEsIHdoZXJlIDEuMCBpcyAxMDAlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHNwZWVkIFsyNTAwICogZGlzcGxheURlbnNpdHldIC0gVGhlIHNwZWVkIGF0IHdoaWNoIHRvIHBlcmZvcm1cbiAqIHRoaXMgZ2VzdHVyZSBpbiBwaXhlbHMgcGVyIHNlY29uZC4gVGhlIHZhbHVlIG11c3Qgbm90IGJlIG5lZ2F0aXZlXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHBpbmNoIGNsb3NlIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/UGluY2hPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGluY2hDbG9zZUdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9waW5jaF9jbG9zZScsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBwaW5jaCBvcGVuIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/UGluY2hPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVQaW5jaE9wZW5HZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvcGluY2hfb3BlbicsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3dpcGVPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzd2lwZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gc3dpcGUgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHN3aXBlIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhlXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGRpcmVjdGlvbiAtIERpcmVjdGlvbiBvZiB0aGUgc3dpcGUuXG4gKiBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6IGB1cGAsIGBkb3duYCwgYGxlZnRgIGFuZCBgcmlnaHRgIChjYXNlIGluc2Vuc2l0aXZlKVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBwZXJjZW50IC0gVGhlIHNpemUgb2YgdGhlIHN3aXBlIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgc3dpcGUgYXJlYSBzaXplLlxuICogVmFsaWQgdmFsdWVzIG11c3QgYmUgZmxvYXQgbnVtYmVycyBpbiByYW5nZSAwLi4xLCB3aGVyZSAxLjAgaXMgMTAwJVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbNTAwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtIHRoaXNcbiAqIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBzd2lwZSBnZXN0dXJlLlxuICpcbiAqIEBwYXJhbSB7P1N3aXBlT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVTd2lwZUdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZUdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvc3dpcGUnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgYXJlYTogdG9SZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCksXG4gICAgZGlyZWN0aW9uLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JvbGxPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzY3JvbGxlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiBzY3JvbGwgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhIGFyZSBwcm92aWRlZCB0aGVuIHRoaXNcbiAqIGFyZWEgaXMgZWZmZWN0aXZlbHkgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGRpcmVjdGlvbiAtIERpcmVjdGlvbiBvZiB0aGUgc2Nyb2xsLlxuICogQWNjZXB0YWJsZSB2YWx1ZXMgYXJlOiBgdXBgLCBgZG93bmAsIGBsZWZ0YCBhbmQgYHJpZ2h0YCAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gcGVyY2VudCAtIFRoZSBzaXplIG9mIHRoZSBzY3JvbGwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBzY3JvbGxpbmcgYXJlYSBzaXplLlxuICogVmFsaWQgdmFsdWVzIG11c3QgYmUgZmxvYXQgbnVtYmVycyBncmVhdGVyIHRoYW4gemVybywgd2hlcmUgMS4wIGlzIDEwMCVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzUwMDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybSB0aGlzIGdlc3R1cmVcbiAqIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgc2Nyb2xsIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/U2Nyb2xsT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9iamVjdCBjYW4gc3RpbGwgc2Nyb2xsIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVNjcm9sbEdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGxHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgZGlyZWN0aW9uLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL3Njcm9sbCcsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjcm9sbEVsZW1lbnRUb0VsZW1lbnRPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZWxlbWVudElkIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBzY3JvbGxhYmxlIGVsZW1lbnQsXG4gKiB3aGljaCBpcyBnb2luZyB0byBiZSBzY3JvbGxlZC4gSXQgaXMgcmVxdWlyZWQgdGhpcyBlbGVtZW50XG4gKiBpcyBhIHZhbGlkIHNjcm9sbGFibGUgY29udGFpbmVyIGFuZCBpdCB3YXMgbG9jYXRlZCBieSBgLWFuZHJvaWQgdWlhdXRvbWF0b3JgXG4gKiBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBlbGVtZW50VG9JZCBUaGUgaWRlbnRpZmllciBvZiB0aGUgaXRlbSwgd2hpY2ggYmVsb25nc1xuICogdG8gdGhlIHNjcm9sbGFibGUgZWxlbWVudCBhYm92ZSwgYW5kIHdoaWNoIHNob3VsZCBiZWNvbWUgdmlzaWJsZSBhZnRlclxuICogdGhlIHNjcm9sbGluZyBvcGVyYXRpb24gaXMgZmluaXNoZWQuIEl0IGlzIHJlcXVpcmVkIHRoaXMgZWxlbWVudFxuICogd2FzIGxvY2F0ZWQgYnkgYC1hbmRyb2lkIHVpYXV0b21hdG9yYCBzdHJhdGVneS5cbiAqL1xuXG4vKipcbiAqIFNjcm9sbHMgdGhlIGdpdmVuIHNjcm9sbGFibGUgZWxlbWVudCBgZWxlbWVudElkYCB1bnRpbCBgZWxlbWVudFRvSWRgXG4gKiBiZWNvbWVzIHZpc2libGUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGUgYGVsZW1lbnRUb0lkYFxuICogaXMgYWxyZWFkeSB2aXNpYmxlIGluIHRoZSB2aWV3IHBvcnQuIE90aGVyd2lzZSBpdCB3b3VsZCBzY3JvbGxcbiAqIHRvIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgc2Nyb2xsYWJsZSBjb250cm9sIGFuZCB0cmllcyB0byByZWFjaCB0aGUgZGVzdGluYXRpb24gZWxlbWVudFxuICogYnkgc2Nyb2xsaW5nIGl0cyBwYXJlbnQgdG8gdGhlIGVuZCBzdGVwIGJ5IHN0ZXAuIFRoZSBzY3JvbGwgZGlyZWN0aW9uICh2ZXJ0aWNhbCBvciBob3Jpem9udGFsKVxuICogaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS5cbiAqXG4gKiBAcGFyYW0ge1Njcm9sbEVsZW1lbnRUb0VsZW1lbnRPcHRzfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHNjcm9sbGluZyBvcGVyYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZFxuICovXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxCYWNrVG8gPSBhc3luYyBmdW5jdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50SWQsIGVsZW1lbnRUb0lkfSA9IG9wdHM7XG4gIGlmICghZWxlbWVudElkIHx8ICFlbGVtZW50VG9JZCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEJvdGggZWxlbWVudElkIGFuZCBlbGVtZW50VG9JZCBhcmd1bWVudHMgbXVzdCBiZSBwcm92aWRlZGApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoXG4gICAgYC9hcHBpdW0vZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50SWQpfS9zY3JvbGxfdG8vJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudFRvSWQpfWAsICdQT1NUJywge30pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JvbGxPcHRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCBUaGUgaWRlbnRpZmllciBvZiBhbiBlbGVtZW50LiBJdCBpcyByZXF1aXJlZCB0aGlzIGVsZW1lbnRcbiAqIGlzIGEgdmFsaWQgc2Nyb2xsYWJsZSBjb250YWluZXIgYW5kIGl0IHdhcyBsb2NhdGVkIGJ5IGAtYW5kcm9pZCB1aWF1dG9tYXRvcmBcbiAqIHN0cmF0ZWd5LiBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBmaXJzdCBjdXJyZW50bHkgYXZhaWxhYmxlIHNjcm9sbGFibGUgdmlld1xuICogaXMgc2VsZWN0ZWQgZm9yIHRoZSBpbnRlcmFjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gc3RyYXRlZ3kgVGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIGBhY2Nlc3NpYmlsaXR5IGlkYCAoVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uKVxuICogLSBgY2xhc3MgbmFtZWAgKFVpU2VsZWN0b3IoKS5jbGFzc05hbWUpXG4gKiAtIGAtYW5kcm9pZCB1aWF1dG9tYXRvcmAgKFVpU2VsZWN0b3IpXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHNlbGVjdG9yIFRoZSBjb3JyZXNwb25kaW5nIGxvb2t1cCB2YWx1ZSBmb3IgdGhlIGdpdmVuXG4gKiBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbWF4U3dpcGVzIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzd2lwZXMgdG8gcGVyZm9ybVxuICogb24gdGhlIHRhcmdldCBzY3JvbGxhYmxlIHZpZXcgaW4gb3JkZXIgdG8gcmVhY2ggdGhlIGRlc3RpbmF0aW9uIGVsZW1lbnQuXG4gKiBJbiBjYXNlIHRoaXMgdmFsdWUgaXMgdW5zZXQgdGhlbiBpdCB3b3VsZCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgc2Nyb2xsYWJsZVxuICogZWxlbWVudCBpdHNlbGYgKHZ1YSBgZ2V0TWF4U2VhcmNoU3dpcGVzKClgIHByb3BlcnR5KS5cbiAqL1xuXG4vKipcbiAqIFNjcm9sbHMgdGhlIGdpdmVuIHNjcm9sbGFibGUgZWxlbWVudCB1bnRpbCB0aGUgZWxlbWVudCBpZGVudGlmaWVkXG4gKiBieSBgc3RyYXRlZ3lgIGFuZCBgc2VsZWN0b3JgIGJlY29tZXMgdmlzaWJsZS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZVxuICogZGVzdGluYXRpb24gZWxlbWVudCBpcyBhbHJlYWR5IHZpc2libGUgaW4gdGhlIHZpZXcgcG9ydC4gT3RoZXJ3aXNlIGl0IHdvdWxkIHNjcm9sbFxuICogdG8gdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBzY3JvbGxhYmxlIGNvbnRyb2wgYW5kIHRyaWVzIHRvIHJlYWNoIHRoZSBkZXN0aW5hdGlvbiBlbGVtZW50XG4gKiBieSBzY3JvbGxpbmcgaXRzIHBhcmVudCB0byB0aGUgZW5kIHN0ZXAgYnkgc3RlcC4gVGhlIHNjcm9sbCBkaXJlY3Rpb24gKHZlcnRpY2FsIG9yIGhvcml6b250YWwpXG4gKiBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIEBwYXJhbSB7U2Nyb2xsT3B0c30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBzY3JvbGxpbmcgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWRcbiAqL1xuY29tbWFuZHMubW9iaWxlU2Nyb2xsID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCwgZWxlbWVudElkLCAvLyBgZWxlbWVudGAgaXMgZGVwcmVjYXRlZCwgdXNlIGBlbGVtZW50SWRgIGluc3RlYWRcbiAgICBzdHJhdGVneSwgc2VsZWN0b3IsIG1heFN3aXBlc1xuICB9ID0gb3B0cztcbiAgaWYgKCFzdHJhdGVneSB8fCAhc2VsZWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBCb3RoIHN0cmF0ZWd5IGFuZCBzZWxlY3RvciBhcmd1bWVudHMgbXVzdCBiZSBwcm92aWRlZGApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy90b3VjaC9zY3JvbGwnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCB8fCBlbGVtZW50KSxcbiAgICBwYXJhbXM6IHtzdHJhdGVneSwgc2VsZWN0b3IsIG1heFN3aXBlc30sXG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9nZXN0dXJlcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -7,7 +7,7 @@ exports.default = exports.commands = void 0;
|
|
|
7
7
|
|
|
8
8
|
require("source-map-support/register");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _support = require("@appium/support");
|
|
11
11
|
|
|
12
12
|
let extensions = {},
|
|
13
13
|
commands = {};
|
|
@@ -27,7 +27,7 @@ commands.getDevicePixelRatio = async function () {
|
|
|
27
27
|
commands.getViewportScreenshot = async function () {
|
|
28
28
|
const screenshot = await this.getScreenshot();
|
|
29
29
|
const rect = await this.getViewPortRect();
|
|
30
|
-
return await
|
|
30
|
+
return await _support.imageUtil.cropBase64Image(screenshot, rect);
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
commands.getViewPortRect = async function () {
|
|
@@ -46,4 +46,4 @@ var _default = extensions;
|
|
|
46
46
|
exports.default = _default;require('source-map-support').install();
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy92aWV3cG9ydC5qcyJdLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJnZXRTdGF0dXNCYXJIZWlnaHQiLCJzdGF0dXNCYXIiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsImdldERldmljZVBpeGVsUmF0aW8iLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJzY3JlZW5zaG90IiwiZ2V0U2NyZWVuc2hvdCIsInJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJpbWFnZVV0aWwiLCJjcm9wQmFzZTY0SW1hZ2UiLCJ3aW5kb3dTaXplIiwiZ2V0V2luZG93U2l6ZSIsInN0YXR1c0JhckhlaWdodCIsImxlZnQiLCJ0b3AiLCJ3aWR0aCIsImhlaWdodCIsIk9iamVjdCIsImFzc2lnbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBR0EsSUFBSUEsVUFBVSxHQUFHLEVBQWpCO0FBQUEsSUFBcUJDLFFBQVEsR0FBRyxFQUFoQzs7O0FBR0FBLFFBQVEsQ0FBQ0Msa0JBQVQsR0FBOEIsa0JBQWtCO0FBQzlDLFFBQU07QUFBQ0MsSUFBQUE7QUFBRCxNQUFjLE1BQU0sS0FBS0MsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQW1DLDRCQUFuQyxFQUFnRSxLQUFoRSxFQUF1RSxFQUF2RSxDQUExQjtBQUNBLFNBQU9ILFNBQVA7QUFDRCxDQUhEOztBQU1BRixRQUFRLENBQUNNLG1CQUFULEdBQStCLGtCQUFrQjtBQUMvQyxTQUFPLE1BQU0sS0FBS0gsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQWtDLDRCQUFsQyxFQUFnRSxLQUFoRSxFQUF1RSxFQUF2RSxDQUFiO0FBQ0QsQ0FGRDs7QUFJQUwsUUFBUSxDQUFDTyxxQkFBVCxHQUFpQyxrQkFBa0I7QUFDakQsUUFBTUMsVUFBVSxHQUFHLE1BQU0sS0FBS0MsYUFBTCxFQUF6QjtBQUNBLFFBQU1DLElBQUksR0FBRyxNQUFNLEtBQUtDLGVBQUwsRUFBbkI7QUFDQSxTQUFPLE1BQU1DLG1CQUFVQyxlQUFWLENBQTBCTCxVQUExQixFQUFzQ0UsSUFBdEMsQ0FBYjtBQUNELENBSkQ7O0FBTUFWLFFBQVEsQ0FBQ1csZUFBVCxHQUEyQixrQkFBa0I7QUFDM0MsUUFBTUcsVUFBVSxHQUFHLE1BQU0sS0FBS0MsYUFBTCxFQUF6QjtBQUNBLFFBQU1DLGVBQWUsR0FBRyxNQUFNLEtBQUtmLGtCQUFMLEVBQTlCO0FBR0EsU0FBTztBQUNMZ0IsSUFBQUEsSUFBSSxFQUFFLENBREQ7QUFFTEMsSUFBQUEsR0FBRyxFQUFFRixlQUZBO0FBR0xHLElBQUFBLEtBQUssRUFBRUwsVUFBVSxDQUFDSyxLQUhiO0FBSUxDLElBQUFBLE1BQU0sRUFBRU4sVUFBVSxDQUFDTSxNQUFYLEdBQW9CSjtBQUp2QixHQUFQO0FBTUQsQ0FYRDs7QUFhQUssTUFBTSxDQUFDQyxNQUFQLENBQWN2QixVQUFkLEVBQTBCQyxRQUExQjtlQUVlRCxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW1hZ2VVdGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5sZXQgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG4vLyBtZW1vaXplZCBpbiBjb25zdHJ1Y3RvclxuY29tbWFuZHMuZ2V0U3RhdHVzQmFySGVpZ2h0ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCB7c3RhdHVzQmFyfSA9IGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9kZXZpY2Uvc3lzdGVtX2JhcnNgLCAnR0VUJywge30pO1xuICByZXR1cm4gc3RhdHVzQmFyO1xufTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldERldmljZVBpeGVsUmF0aW8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL3BpeGVsX3JhdGlvJywgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2NyZWVuc2hvdCA9IGF3YWl0IHRoaXMuZ2V0U2NyZWVuc2hvdCgpO1xuICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbiAgcmV0dXJuIGF3YWl0IGltYWdlVXRpbC5jcm9wQmFzZTY0SW1hZ2Uoc2NyZWVuc2hvdCwgcmVjdCk7XG59O1xuXG5jb21tYW5kcy5nZXRWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHdpbmRvd1NpemUgPSBhd2FpdCB0aGlzLmdldFdpbmRvd1NpemUoKTtcbiAgY29uc3Qgc3RhdHVzQmFySGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRTdGF0dXNCYXJIZWlnaHQoKTtcbiAgLy8gYW5kcm9pZCByZXR1cm5zIHRoZSB1cHNjYWxlZCB3aW5kb3cgc2l6ZSwgc28gdG8gZ2V0IHRoZSB0cnVlIHNpemUgb2YgdGhlXG4gIC8vIHJlY3Qgd2UgaGF2ZSB0byBkb3duc2NhbGVcbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogc3RhdHVzQmFySGVpZ2h0LFxuICAgIHdpZHRoOiB3aW5kb3dTaXplLndpZHRoLFxuICAgIGhlaWdodDogd2luZG93U2l6ZS5oZWlnaHQgLSBzdGF0dXNCYXJIZWlnaHRcbiAgfTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMpO1xuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy92aWV3cG9ydC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -11,9 +11,8 @@ var _cssSelectorParser = require("css-selector-parser");
|
|
|
11
11
|
|
|
12
12
|
var _lodash = require("lodash");
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _baseDriver = require("@appium/base-driver");
|
|
15
15
|
|
|
16
|
-
const CssConverter = {};
|
|
17
16
|
const parser = new _cssSelectorParser.CssSelectorParser();
|
|
18
17
|
parser.registerSelectorPseudos('has');
|
|
19
18
|
parser.registerNestingOperators('>', '+', '~');
|
|
@@ -69,165 +68,173 @@ function getWordMatcherRegex(word) {
|
|
|
69
68
|
return `\\b(\\w*${(0, _lodash.escapeRegExp)(word)}\\w*)\\b`;
|
|
70
69
|
}
|
|
71
70
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
class CssConverter {
|
|
72
|
+
constructor(selector, pkg) {
|
|
73
|
+
this.selector = selector;
|
|
74
|
+
this.pkg = pkg;
|
|
75
|
+
}
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
throw new Error(`'${cssAttr.name}=${cssAttr.value}' is an invalid attribute. ` + `Only 'string' and empty attribute types are supported. Found '${cssAttr.valueType}'`);
|
|
77
|
+
formatIdLocator(locator) {
|
|
78
|
+
return ID_LOCATOR_PATTERN.test(locator) ? locator : `${this.pkg || 'android'}:id/${locator}`;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
parseAttr(cssAttr) {
|
|
82
|
+
if (cssAttr.valueType && cssAttr.valueType !== 'string') {
|
|
83
|
+
throw new Error(`'${cssAttr.name}=${cssAttr.value}' is an invalid attribute. ` + `Only 'string' and empty attribute types are supported. Found '${cssAttr.valueType}'`);
|
|
84
|
+
}
|
|
83
85
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
86
|
+
const attrName = assertGetAttrName(cssAttr);
|
|
87
|
+
const methodName = toSnakeCase(attrName);
|
|
87
88
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
if (!STR_ATTRS.includes(attrName) && !BOOLEAN_ATTRS.includes(attrName)) {
|
|
90
|
+
throw new Error(`'${attrName}' is not supported. Supported attributes are ` + `'${[...STR_ATTRS, ...BOOLEAN_ATTRS].join(', ')}'`);
|
|
91
|
+
}
|
|
91
92
|
|
|
92
|
-
|
|
93
|
+
if (BOOLEAN_ATTRS.includes(attrName)) {
|
|
94
|
+
return `.${methodName}(${assertGetBool(cssAttr)})`;
|
|
95
|
+
}
|
|
93
96
|
|
|
94
|
-
|
|
95
|
-
value = formatIdLocator(value);
|
|
96
|
-
}
|
|
97
|
+
let value = cssAttr.value || '';
|
|
97
98
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
if (attrName === RESOURCE_ID) {
|
|
100
|
+
value = this.formatIdLocator(value);
|
|
101
|
+
}
|
|
101
102
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
if (value === '') {
|
|
104
|
+
return `.${methodName}Matches("")`;
|
|
105
|
+
}
|
|
105
106
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return `.${methodName}
|
|
109
|
-
}
|
|
107
|
+
switch (cssAttr.operator) {
|
|
108
|
+
case '=':
|
|
109
|
+
return `.${methodName}("${value}")`;
|
|
110
110
|
|
|
111
|
-
|
|
111
|
+
case '*=':
|
|
112
|
+
if (['description', 'text'].includes(attrName)) {
|
|
113
|
+
return `.${methodName}Contains("${value}")`;
|
|
114
|
+
}
|
|
112
115
|
|
|
113
|
-
|
|
114
|
-
if (['description', 'text'].includes(attrName)) {
|
|
115
|
-
return `.${methodName}StartsWith("${value}")`;
|
|
116
|
-
}
|
|
116
|
+
return `.${methodName}Matches("${(0, _lodash.escapeRegExp)(value)}")`;
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
case '^=':
|
|
119
|
+
if (['description', 'text'].includes(attrName)) {
|
|
120
|
+
return `.${methodName}StartsWith("${value}")`;
|
|
121
|
+
}
|
|
119
122
|
|
|
120
|
-
|
|
121
|
-
return `.${methodName}Matches("${(0, _lodash.escapeRegExp)(value)}$")`;
|
|
123
|
+
return `.${methodName}Matches("^${(0, _lodash.escapeRegExp)(value)}")`;
|
|
122
124
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
+
case '$=':
|
|
126
|
+
return `.${methodName}Matches("${(0, _lodash.escapeRegExp)(value)}$")`;
|
|
125
127
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
}
|
|
128
|
+
case '~=':
|
|
129
|
+
return `.${methodName}Matches("${getWordMatcherRegex(value)}")`;
|
|
130
130
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
default:
|
|
132
|
+
throw new Error(`Unsupported CSS attribute operator '${cssAttr.operator}'. ` + ` '=', '*=', '^=', '$=' and '~=' are supported.`);
|
|
133
|
+
}
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
parsePseudo(cssPseudo) {
|
|
137
|
+
if (cssPseudo.valueType && cssPseudo.valueType !== 'string') {
|
|
138
|
+
throw new Error(`'${cssPseudo.name}=${cssPseudo.value}'. ` + `Unsupported css pseudo class value type: '${cssPseudo.valueType}'. Only 'string' type or empty is supported.`);
|
|
139
|
+
}
|
|
137
140
|
|
|
138
|
-
|
|
139
|
-
return `.${toSnakeCase(pseudoName)}(${assertGetBool(cssPseudo)})`;
|
|
140
|
-
}
|
|
141
|
+
const pseudoName = assertGetAttrName(cssPseudo);
|
|
141
142
|
|
|
142
|
-
|
|
143
|
-
|
|
143
|
+
if (BOOLEAN_ATTRS.includes(pseudoName)) {
|
|
144
|
+
return `.${toSnakeCase(pseudoName)}(${assertGetBool(cssPseudo)})`;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (NUMERIC_ATTRS.includes(pseudoName)) {
|
|
148
|
+
return `.${pseudoName}(${cssPseudo.value})`;
|
|
149
|
+
}
|
|
144
150
|
}
|
|
145
|
-
}
|
|
146
151
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
152
|
+
parseCssRule(cssRule) {
|
|
153
|
+
const {
|
|
154
|
+
nestingOperator
|
|
155
|
+
} = cssRule;
|
|
151
156
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
157
|
+
if (nestingOperator && nestingOperator !== ' ') {
|
|
158
|
+
throw new Error(`'${nestingOperator}' is not a supported combinator. ` + `Only child combinator (>) and descendant combinator are supported.`);
|
|
159
|
+
}
|
|
155
160
|
|
|
156
|
-
|
|
161
|
+
let uiAutomatorSelector = 'new UiSelector()';
|
|
157
162
|
|
|
158
|
-
|
|
159
|
-
|
|
163
|
+
if (cssRule.tagName && cssRule.tagName !== '*') {
|
|
164
|
+
let androidClass = [cssRule.tagName];
|
|
160
165
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
166
|
+
if (cssRule.classNames) {
|
|
167
|
+
for (const cssClassNames of cssRule.classNames) {
|
|
168
|
+
androidClass.push(cssClassNames);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
uiAutomatorSelector += `.className("${androidClass.join('.')}")`;
|
|
172
|
+
} else {
|
|
173
|
+
uiAutomatorSelector += `.classNameMatches("${cssRule.tagName}")`;
|
|
164
174
|
}
|
|
175
|
+
} else if (cssRule.classNames) {
|
|
176
|
+
uiAutomatorSelector += `.classNameMatches("${cssRule.classNames.join('\\.')}")`;
|
|
177
|
+
}
|
|
165
178
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
uiAutomatorSelector += `.classNameMatches("${cssRule.tagName}")`;
|
|
179
|
+
if (cssRule.id) {
|
|
180
|
+
uiAutomatorSelector += `.resourceId("${this.formatIdLocator(cssRule.id)}")`;
|
|
169
181
|
}
|
|
170
|
-
} else if (cssRule.classNames) {
|
|
171
|
-
uiAutomatorSelector += `.classNameMatches("${cssRule.classNames.join('\\.')}")`;
|
|
172
|
-
}
|
|
173
182
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
183
|
+
if (cssRule.attrs) {
|
|
184
|
+
for (const attr of cssRule.attrs) {
|
|
185
|
+
uiAutomatorSelector += this.parseAttr(attr);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
177
188
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
189
|
+
if (cssRule.pseudos) {
|
|
190
|
+
for (const pseudo of cssRule.pseudos) {
|
|
191
|
+
uiAutomatorSelector += this.parsePseudo(pseudo);
|
|
192
|
+
}
|
|
181
193
|
}
|
|
182
|
-
}
|
|
183
194
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
uiAutomatorSelector += parsePseudo(pseudo);
|
|
195
|
+
if (cssRule.rule) {
|
|
196
|
+
uiAutomatorSelector += `.childSelector(${this.parseCssRule(cssRule.rule)})`;
|
|
187
197
|
}
|
|
188
|
-
}
|
|
189
198
|
|
|
190
|
-
|
|
191
|
-
uiAutomatorSelector += `.childSelector(${parseCssRule(cssRule.rule)})`;
|
|
199
|
+
return uiAutomatorSelector;
|
|
192
200
|
}
|
|
193
201
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
switch (css.type) {
|
|
199
|
-
case 'rule':
|
|
200
|
-
return parseCssRule(css);
|
|
202
|
+
parseCssObject(css) {
|
|
203
|
+
switch (css.type) {
|
|
204
|
+
case 'rule':
|
|
205
|
+
return this.parseCssRule(css);
|
|
201
206
|
|
|
202
|
-
|
|
203
|
-
|
|
207
|
+
case 'ruleSet':
|
|
208
|
+
return this.parseCssObject(css.rule);
|
|
204
209
|
|
|
205
|
-
|
|
206
|
-
|
|
210
|
+
case 'selectors':
|
|
211
|
+
return css.selectors.map(selector => this.parseCssObject(selector)).join('; ');
|
|
207
212
|
|
|
208
|
-
|
|
209
|
-
|
|
213
|
+
default:
|
|
214
|
+
throw new Error(`UiAutomator does not support '${css.type}' css. Only supports 'rule', 'ruleSet', 'selectors' `);
|
|
215
|
+
}
|
|
210
216
|
}
|
|
211
|
-
}
|
|
212
217
|
|
|
213
|
-
|
|
214
|
-
|
|
218
|
+
toUiAutomatorSelector() {
|
|
219
|
+
let cssObj;
|
|
215
220
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
+
try {
|
|
222
|
+
cssObj = parser.parse(this.selector);
|
|
223
|
+
} catch (e) {
|
|
224
|
+
throw new _baseDriver.errors.InvalidSelectorError(`Invalid CSS selector '${this.selector}'. Reason: '${e}'`);
|
|
225
|
+
}
|
|
221
226
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
227
|
+
try {
|
|
228
|
+
return this.parseCssObject(cssObj);
|
|
229
|
+
} catch (e) {
|
|
230
|
+
throw new _baseDriver.errors.InvalidSelectorError(`Unsupported CSS selector '${this.selector}'. Reason: '${e}'`);
|
|
231
|
+
}
|
|
226
232
|
}
|
|
227
|
-
|
|
233
|
+
|
|
234
|
+
}
|
|
228
235
|
|
|
229
236
|
var _default = CssConverter;
|
|
230
237
|
exports.default = _default;require('source-map-support').install();
|
|
231
238
|
|
|
232
239
|
|
|
233
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jc3MtY29udmVydGVyLmpzIl0sIm5hbWVzIjpbIkNzc0NvbnZlcnRlciIsInBhcnNlciIsIkNzc1NlbGVjdG9yUGFyc2VyIiwicmVnaXN0ZXJTZWxlY3RvclBzZXVkb3MiLCJyZWdpc3Rlck5lc3RpbmdPcGVyYXRvcnMiLCJyZWdpc3RlckF0dHJFcXVhbGl0eU1vZHMiLCJlbmFibGVTdWJzdGl0dXRlcyIsIlJFU09VUkNFX0lEIiwiSURfTE9DQVRPUl9QQVRURVJOIiwiQk9PTEVBTl9BVFRSUyIsIk5VTUVSSUNfQVRUUlMiLCJTVFJfQVRUUlMiLCJBTExfQVRUUlMiLCJBVFRSSUJVVEVfQUxJQVNFUyIsInRvU25ha2VDYXNlIiwic3RyIiwidG9rZW5zIiwic3BsaXQiLCJtYXAiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwidG9Mb3dlckNhc2UiLCJvdXQiLCJqb2luIiwiYXNzZXJ0R2V0Qm9vbCIsImNzcyIsInZhbCIsInZhbHVlIiwiaW5jbHVkZXMiLCJFcnJvciIsIm5hbWUiLCJhc3NlcnRHZXRBdHRyTmFtZSIsImF0dHJOYW1lIiwib2ZmaWNpYWxBdHRyIiwiYWxpYXNBdHRycyIsImdldFdvcmRNYXRjaGVyUmVnZXgiLCJ3b3JkIiwiZm9ybWF0SWRMb2NhdG9yIiwibG9jYXRvciIsInRlc3QiLCJwYXJzZUF0dHIiLCJjc3NBdHRyIiwidmFsdWVUeXBlIiwibWV0aG9kTmFtZSIsIm9wZXJhdG9yIiwicGFyc2VQc2V1ZG8iLCJjc3NQc2V1ZG8iLCJwc2V1ZG9OYW1lIiwicGFyc2VDc3NSdWxlIiwiY3NzUnVsZSIsIm5lc3RpbmdPcGVyYXRvciIsInVpQXV0b21hdG9yU2VsZWN0b3IiLCJ0YWdOYW1lIiwiYW5kcm9pZENsYXNzIiwiY2xhc3NOYW1lcyIsImNzc0NsYXNzTmFtZXMiLCJwdXNoIiwiaWQiLCJhdHRycyIsImF0dHIiLCJwc2V1ZG9zIiwicHNldWRvIiwicnVsZSIsInBhcnNlQ3NzT2JqZWN0IiwidHlwZSIsInNlbGVjdG9ycyIsInNlbGVjdG9yIiwidG9VaUF1dG9tYXRvclNlbGVjdG9yIiwiY3NzU2VsZWN0b3IiLCJjc3NPYmoiLCJwYXJzZSIsImUiLCJlcnJvcnMiLCJJbnZhbGlkU2VsZWN0b3JFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsWUFBWSxHQUFHLEVBQXJCO0FBRUEsTUFBTUMsTUFBTSxHQUFHLElBQUlDLG9DQUFKLEVBQWY7QUFDQUQsTUFBTSxDQUFDRSx1QkFBUCxDQUErQixLQUEvQjtBQUNBRixNQUFNLENBQUNHLHdCQUFQLENBQWdDLEdBQWhDLEVBQXFDLEdBQXJDLEVBQTBDLEdBQTFDO0FBQ0FILE1BQU0sQ0FBQ0ksd0JBQVAsQ0FBZ0MsR0FBaEMsRUFBcUMsR0FBckMsRUFBMEMsR0FBMUMsRUFBK0MsR0FBL0M7QUFDQUosTUFBTSxDQUFDSyxpQkFBUDtBQUVBLE1BQU1DLFdBQVcsR0FBRyxhQUFwQjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLHFDQUEzQjtBQUVBLE1BQU1DLGFBQWEsR0FBRyxDQUNwQixXQURvQixFQUNQLFNBRE8sRUFDSSxXQURKLEVBQ2lCLFNBRGpCLEVBQzRCLFdBRDVCLEVBRXBCLFNBRm9CLEVBRVQsZ0JBRlMsRUFFUyxZQUZULEVBRXVCLFVBRnZCLENBQXRCO0FBS0EsTUFBTUMsYUFBYSxHQUFHLENBQ3BCLE9BRG9CLEVBQ1gsVUFEVyxDQUF0QjtBQUlBLE1BQU1DLFNBQVMsR0FBRyxDQUNoQixhQURnQixFQUNESixXQURDLEVBQ1ksTUFEWixFQUNvQixZQURwQixFQUNrQyxjQURsQyxDQUFsQjtBQUlBLE1BQU1LLFNBQVMsR0FBRyxDQUNoQixHQUFHSCxhQURhLEVBRWhCLEdBQUdDLGFBRmEsRUFHaEIsR0FBR0MsU0FIYSxDQUFsQjtBQU1BLE1BQU1FLGlCQUFpQixHQUFHLENBQ3hCLENBQUNOLFdBQUQsRUFBYyxDQUFDLElBQUQsQ0FBZCxDQUR3QixFQUV4QixDQUFDLGFBQUQsRUFBZ0IsQ0FDZCxxQkFEYyxFQUNTLGNB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QUF3QkwsV0FBWSxlQUFjRyxDQUFFLEdBQXJGLENBQU47QUFDRDs7QUFDRCxNQUFJO0FBQ0YsV0FBT1IsY0FBYyxDQUFDTSxNQUFELENBQXJCO0FBQ0QsR0FGRCxDQUVFLE9BQU9FLENBQVAsRUFBVTtBQUNWLFVBQU0sSUFBSUMseUJBQU9DLG9CQUFYLENBQWlDLDZCQUE0QkwsV0FBWSxlQUFjRyxDQUFFLEdBQXpGLENBQU47QUFDRDtBQUNGLENBWkQ7O2VBY2V4RSxZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3NzU2VsZWN0b3JQYXJzZXIgfSBmcm9tICdjc3Mtc2VsZWN0b3ItcGFyc2VyJztcbmltcG9ydCB7IGVzY2FwZVJlZ0V4cCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuXG5jb25zdCBDc3NDb252ZXJ0ZXIgPSB7fTtcblxuY29uc3QgcGFyc2VyID0gbmV3IENzc1NlbGVjdG9yUGFyc2VyKCk7XG5wYXJzZXIucmVnaXN0ZXJTZWxlY3RvclBzZXVkb3MoJ2hhcycpO1xucGFyc2VyLnJlZ2lzdGVyTmVzdGluZ09wZXJhdG9ycygnPicsICcrJywgJ34nKTtcbnBhcnNlci5yZWdpc3RlckF0dHJFcXVhbGl0eU1vZHMoJ14nLCAnJCcsICcqJywgJ34nKTtcbnBhcnNlci5lbmFibGVTdWJzdGl0dXRlcygpO1xuXG5jb25zdCBSRVNPVVJDRV9JRCA9ICdyZXNvdXJjZS1pZCc7XG5jb25zdCBJRF9MT0NBVE9SX1BBVFRFUk4gPSAvXlthLXpBLVpfXVthLXpBLVowLTkuX10qOmlkXFwvW1xcU10rJC87XG5cbmNvbnN0IEJPT0xFQU5fQVRUUlMgPSBbXG4gICdjaGVja2FibGUnLCAnY2hlY2tlZCcsICdjbGlja2FibGUnLCAnZW5hYmxlZCcsICdmb2N1c2FibGUnLFxuICAnZm9jdXNlZCcsICdsb25nLWNsaWNrYWJsZScsICdzY3JvbGxhYmxlJywgJ3NlbGVjdGVkJyxcbl07XG5cbmNvbnN0IE5VTUVSSUNfQVRUUlMgPSBbXG4gICdpbmRleCcsICdpbnN0YW5jZScsXG5dO1xuXG5jb25zdCBTVFJfQVRUUlMgPSBbXG4gICdkZXNjcmlwdGlvbicsIFJFU09VUkNFX0lELCAndGV4dCcsICdjbGFzcy1uYW1lJywgJ3BhY2thZ2UtbmFtZSdcbl07XG5cbmNvbnN0IEFMTF9BVFRSUyA9IFtcbiAgLi4uQk9PTEVBTl9BVFRSUyxcbiAgLi4uTlVNRVJJQ19BVFRSUyxcbiAgLi4uU1RSX0FUVFJTLFxuXTtcblxuY29uc3QgQVRUUklCVVRFX0FMSUFTRVMgPSBbXG4gIFtSRVNPVVJDRV9JRCwgWydpZCddXSxcbiAgWydkZXNjcmlwdGlvbicsIFtcbiAgICAnY29udGVudC1kZXNjcmlwdGlvbicsICdjb250ZW50LWRlc2MnLFxuICAgICdkZXNjJywgJ2FjY2Vzc2liaWxpdHktaWQnLFxuICBdXSxcbiAgWydpbmRleCcsIFsnbnRoLWNoaWxkJ11dLFxuXTtcblxuLyoqXG4gKiBDb252ZXJ0IGh5cGhlbiBzZXBhcmF0ZWQgd29yZCB0byBzbmFrZSBjYXNlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGh5cGhlbiBzZXBhcmF0ZWQgd29yZCB0cmFuc2xhdGVkIHRvIHNuYWtlIGNhc2VcbiAqL1xuZnVuY3Rpb24gdG9TbmFrZUNhc2UgKHN0cikge1xuICBpZiAoIXN0cikge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCB0b2tlbnMgPSBzdHIuc3BsaXQoJy0nKS5tYXAoKHN0cikgPT4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCkpO1xuICBjb25zdCBvdXQgPSB0b2tlbnMuam9pbignJyk7XG4gIHJldHVybiBvdXQuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBvdXQuc2xpY2UoMSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzTmFtZVZhbHVlT2JqZWN0XG4gKiBAcHJvcGVydHkgez9uYW1lfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBDU1Mgb2JqZWN0XG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgQ1NTIG9iamVjdFxuICovXG5cbi8qKlxuICogR2V0IHRoZSBib29sZWFuIGZyb20gYSBDU1Mgb2JqZWN0LiBJZiBlbXB0eSwgcmV0dXJuIHRydWUuIElmIG5vdCB0cnVlL2ZhbHNlL2VtcHR5LCB0aHJvdyBleGNlcHRpb25cbiAqXG4gKiBAcGFyYW0ge0Nzc05hbWVWYWx1ZU9iamVjdH0gY3NzIEEgQ1NTIG9iamVjdCB0aGF0IGhhcyAnbmFtZScgYW5kICd2YWx1ZSdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEVpdGhlciAndHJ1ZScgb3IgJ2ZhbHNlJy4gSWYgdmFsdWUgaXMgZW1wdHksIHJldHVybiAndHJ1ZSdcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0R2V0Qm9vbCAoY3NzKSB7XG4gIGNvbnN0IHZhbCA9IGNzcy52YWx1ZT8udG9Mb3dlckNhc2UoKSB8fCAndHJ1ZSc7IC8vIGFuIG9taXR0ZWQgYm9vbGVhbiBhdHRyaWJ1dGUgbWVhbnMgJ3RydWUnIChlLmcuOiBpbnB1dFtjaGVja2VkXSBtZWFucyBjaGVja2VkIGlzIHRydWUpXG4gIGlmIChbJ3RydWUnLCAnZmFsc2UnXS5pbmNsdWRlcyh2YWwpKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYCcke2Nzcy5uYW1lfScgbXVzdCBiZSB0cnVlLCBmYWxzZSBvciBlbXB0eS4gRm91bmQgJyR7Y3NzLnZhbHVlfSdgKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNhbm9uaWNhbCBmb3JtIG9mIGEgQ1NTIGF0dHJpYnV0ZSBuYW1lXG4gKlxuICogQ29udmVydHMgdG8gbG93ZXJjYXNlIGFuZCBpZiBhbiBhdHRyaWJ1dGUgbmFtZSBpcyBhbiBhbGlhcyBmb3Igc29tZXRoaW5nIGVsc2UsIHJldHVyblxuICogd2hhdCBpdCBpcyBhbiBhbGlhcyBmb3JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3NzIENTUyBvYmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjYW5vbmljYWwgYXR0cmlidXRlIG5hbWVcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0R2V0QXR0ck5hbWUgKGNzcykge1xuICBjb25zdCBhdHRyTmFtZSA9IGNzcy5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gQ2hlY2sgaWYgaXQncyBzdXBwb3J0ZWQgYW5kIGlmIGl0IGlzLCByZXR1cm4gaXRcbiAgaWYgKEFMTF9BVFRSUy5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICByZXR1cm4gYXR0ck5hbWUudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8vIElmIGF0dHJOYW1lIGlzIGFuIGFsaWFzIGZvciBzb21ldGhpbmcgZWxzZSwgcmV0dXJuIHRoYXRcbiAgZm9yIChjb25zdCBbb2ZmaWNpYWxBdHRyLCBhbGlhc0F0dHJzXSBvZiBBVFRSSUJVVEVfQUxJQVNFUykge1xuICAgIGlmIChhbGlhc0F0dHJzLmluY2x1ZGVzKGF0dHJOYW1lKSkge1xuICAgICAgcmV0dXJuIG9mZmljaWFsQXR0cjtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGAnJHthdHRyTmFtZX0nIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZS4gYCArXG4gICAgYFN1cHBvcnRlZCBhdHRyaWJ1dGVzIGFyZSAnJHtBTExfQVRUUlMuam9pbignLCAnKX0nYCk7XG59XG5cbi8qKlxuICogR2V0IGEgcmVnZXggdGhhdCBtYXRjaGVzIGEgd2hvbGUgd29yZC4gRm9yIHRoZSB+PSBDU1MgYXR0cmlidXRlIHNlbGVjdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3JkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHJlZ2V4IFwid29yZFwiIG1hdGNoZXJcbiAqL1xuZnVuY3Rpb24gZ2V0V29yZE1hdGNoZXJSZWdleCAod29yZCkge1xuICByZXR1cm4gYFxcXFxiKFxcXFx3KiR7ZXNjYXBlUmVnRXhwKHdvcmQpfVxcXFx3KilcXFxcYmA7XG59XG5cbi8qKlxuICogQWRkIGFuZHJvaWQ6aWQvIHRvIGJlZ2lubmluZyBvZiBzdHJpbmcgaWYgaXQncyBub3QgdGhlcmUgYWxyZWFkeVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdG9yIFRoZSBpbml0aWFsIGxvY2F0b3JcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFN0cmluZyB3aXRoIGBhbmRyb2lkOmlkL2AgcHJlcGVuZGVkIChpZiBpdCB3YXNuJ3QgYWxyZWFkeSlcbiAqL1xuZnVuY3Rpb24gZm9ybWF0SWRMb2NhdG9yIChsb2NhdG9yKSB7XG4gIHJldHVybiBJRF9MT0NBVE9SX1BBVFRFUk4udGVzdChsb2NhdG9yKSA/IGxvY2F0b3IgOiBgYW5kcm9pZDppZC8ke2xvY2F0b3J9YDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDc3NBdHRyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZhbHVlVHlwZSBUeXBlIG9mIGF0dHJpYnV0ZSAobXVzdCBiZSBzdHJpbmcgb3IgZW1wdHkpXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZhbHVlIFZhbHVlIG9mIHRoZSBhdHRyaWJ1dGVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gb3BlcmF0b3IgVGhlIG9wZXJhdG9yIGJldHdlZW4gdmFsdWUgYW5kIHZhbHVlIHR5cGUgKD0sICo9LCAsIF49LCAkPSlcbiAqL1xuXG4vKipcbiAqIENvbnZlcnQgYSBDU1MgYXR0cmlidXRlIGludG8gYSBVaVNlbGVjdG9yIG1ldGhvZCBjYWxsXG4gKlxuICogQHBhcmFtIHtDc3NBdHRyfSBjc3NBdHRyIENTUyBhdHRyaWJ1dGUgb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBDU1MgYXR0cmlidXRlIHBhcnNlZCBhcyBVaVNlbGVjdG9yXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXR0ciAoY3NzQXR0cikge1xuICBpZiAoY3NzQXR0ci52YWx1ZVR5cGUgJiYgY3NzQXR0ci52YWx1ZVR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtjc3NBdHRyLm5hbWV9PSR7Y3NzQXR0ci52YWx1ZX0nIGlzIGFuIGludmFsaWQgYXR0cmlidXRlLiBgICtcbiAgICAgIGBPbmx5ICdzdHJpbmcnIGFuZCBlbXB0eSBhdHRyaWJ1dGUgdHlwZXMgYXJlIHN1cHBvcnRlZC4gRm91bmQgJyR7Y3NzQXR0ci52YWx1ZVR5cGV9J2ApO1xuICB9XG4gIGNvbnN0IGF0dHJOYW1lID0gYXNzZXJ0R2V0QXR0ck5hbWUoY3NzQXR0cik7XG4gIGNvbnN0IG1ldGhvZE5hbWUgPSB0b1NuYWtlQ2FzZShhdHRyTmFtZSk7XG5cbiAgLy8gVmFsaWRhdGUgdGhhdCBpdCdzIGEgc3VwcG9ydGVkIGF0dHJpYnV0ZVxuICBpZiAoIVNUUl9BVFRSUy5pbmNsdWRlcyhhdHRyTmFtZSkgJiYgIUJPT0xFQU5fQVRUUlMuaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHthdHRyTmFtZX0nIGlzIG5vdCBzdXBwb3J0ZWQuIFN1cHBvcnRlZCBhdHRyaWJ1dGVzIGFyZSBgICtcbiAgICAgIGAnJHtbLi4uU1RSX0FUVFJTLCAuLi5CT09MRUFOX0FUVFJTXS5qb2luKCcsICcpfSdgKTtcbiAgfVxuXG4gIC8vIFBhcnNlIGJvb2xlYW4sIGlmIGl0J3MgYSBib29sZWFuIGF0dHJpYnV0ZVxuICBpZiAoQk9PTEVBTl9BVFRSUy5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9KCR7YXNzZXJ0R2V0Qm9vbChjc3NBdHRyKX0pYDtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSBwYXJzZSBhcyBzdHJpbmdcbiAgbGV0IHZhbHVlID0gY3NzQXR0ci52YWx1ZSB8fCAnJztcbiAgaWYgKGF0dHJOYW1lID09PSBSRVNPVVJDRV9JRCkge1xuICAgIHZhbHVlID0gZm9ybWF0SWRMb2NhdG9yKHZhbHVlKTtcbiAgfVxuICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfU1hdGNoZXMoXCJcIilgO1xuICB9XG5cbiAgc3dpdGNoIChjc3NBdHRyLm9wZXJhdG9yKSB7XG4gICAgY2FzZSAnPSc6XG4gICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9KFwiJHt2YWx1ZX1cIilgO1xuICAgIGNhc2UgJyo9JzpcbiAgICAgIGlmIChbJ2Rlc2NyaXB0aW9uJywgJ3RleHQnXS5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfUNvbnRhaW5zKFwiJHt2YWx1ZX1cIilgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfU1hdGNoZXMoXCIke2VzY2FwZVJlZ0V4cCh2YWx1ZSl9XCIpYDtcbiAgICBjYXNlICdePSc6XG4gICAgICBpZiAoWydkZXNjcmlwdGlvbicsICd0ZXh0J10uaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX1TdGFydHNXaXRoKFwiJHt2YWx1ZX1cIilgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfU1hdGNoZXMoXCJeJHtlc2NhcGVSZWdFeHAodmFsdWUpfVwiKWA7XG4gICAgY2FzZSAnJD0nOlxuICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfU1hdGNoZXMoXCIke2VzY2FwZVJlZ0V4cCh2YWx1ZSl9JFwiKWA7XG4gICAgY2FzZSAnfj0nOlxuICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfU1hdGNoZXMoXCIke2dldFdvcmRNYXRjaGVyUmVnZXgodmFsdWUpfVwiKWA7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFVucmVhY2hhYmxlLCBidXQgYWRkaW5nIGVycm9yIGluIGNhc2UgYSBuZXcgQ1NTIGF0dHJpYnV0ZSBpcyBhZGRlZC5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgQ1NTIGF0dHJpYnV0ZSBvcGVyYXRvciAnJHtjc3NBdHRyLm9wZXJhdG9yfScuIGAgK1xuICAgICAgICBgICc9JywgJyo9JywgJ149JywgJyQ9JyBhbmQgJ349JyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzUHNldWRvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZhbHVlVHlwZSBUaGUgdHlwZSBvZiBDU1MgcHNldWRvIHNlbGVjdG9yIChodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9jc3Mtc2VsZWN0b3ItcGFyc2VyIGZvciByZWZlcmVuY2UpXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBzZXVkbyBzZWxlY3RvclxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHBzZXVkbyBzZWxlY3RvclxuICovXG5cbi8qKlxuICogQ29udmVydCBhIENTUyBwc2V1ZG8gY2xhc3MgdG8gYSBVaVNlbGVjdG9yXG4gKlxuICogQHBhcmFtIHtDc3NQc2V1ZG99IGNzc1BzZXVkbyBDU1MgUHNldWRvIGNsYXNzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBQc2V1ZG8gc2VsZWN0b3IgcGFyc2VkIGFzIFVpU2VsZWN0b3JcbiAqL1xuZnVuY3Rpb24gcGFyc2VQc2V1ZG8gKGNzc1BzZXVkbykge1xuICBpZiAoY3NzUHNldWRvLnZhbHVlVHlwZSAmJiBjc3NQc2V1ZG8udmFsdWVUeXBlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7Y3NzUHNldWRvLm5hbWV9PSR7Y3NzUHNldWRvLnZhbHVlfScuIGAgK1xuICAgICAgYFVuc3VwcG9ydGVkIGNzcyBwc2V1ZG8gY2xhc3MgdmFsdWUgdHlwZTogJyR7Y3NzUHNldWRvLnZhbHVlVHlwZX0nLiBPbmx5ICdzdHJpbmcnIHR5cGUgb3IgZW1wdHkgaXMgc3VwcG9ydGVkLmApO1xuICB9XG5cbiAgY29uc3QgcHNldWRvTmFtZSA9IGFzc2VydEdldEF0dHJOYW1lKGNzc1BzZXVkbyk7XG5cbiAgaWYgKEJPT0xFQU5fQVRUUlMuaW5jbHVkZXMocHNldWRvTmFtZSkpIHtcbiAgICByZXR1cm4gYC4ke3RvU25ha2VDYXNlKHBzZXVkb05hbWUpfSgke2Fzc2VydEdldEJvb2woY3NzUHNldWRvKX0pYDtcbiAgfVxuXG4gIGlmIChOVU1FUklDX0FUVFJTLmluY2x1ZGVzKHBzZXVkb05hbWUpKSB7XG4gICAgcmV0dXJuIGAuJHtwc2V1ZG9OYW1lfSgke2Nzc1BzZXVkby52YWx1ZX0pYDtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENzc1J1bGVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbmVzdGluZ09wZXJhdG9yIFRoZSBuZXN0aW5nIG9wZXJhdG9yIChha2E6IGNvbWJpbmF0b3IgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19TZWxlY3RvcnMpXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHRhZ05hbWUgVGhlIHRhZyBuYW1lIChha2E6IHR5cGUgc2VsZWN0b3IgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL1R5cGVfc2VsZWN0b3JzKVxuICogQHByb3BlcnR5IHs/c3RyaW5nW119IGNsYXNzTmFtZXMgQW4gYXJyYXkgb2YgQ1NTIGNsYXNzIG5hbWVzXG4gKiBAcHJvcGVydHkgez9Dc3NBdHRyW119IGF0dHJzIEFuIGFycmF5IG9mIENTUyBhdHRyaWJ1dGVzXG4gKiBAcHJvcGVydHkgez9Dc3NQc2V1ZG9bXX0gYXR0cnMgQW4gYXJyYXkgb2YgQ1NTIHBzZXVkb3NcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaWQgQ1NTIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7P0Nzc1J1bGV9IHJ1bGUgQSBkZXNjZW5kYW50IG9mIHRoaXMgQ1NTIHJ1bGVcbiAqL1xuXG4vKipcbiAqIENvbnZlcnQgYSBDU1MgcnVsZSB0byBhIFVpU2VsZWN0b3JcbiAqIEBwYXJhbSB7Q3NzUnVsZX0gY3NzUnVsZSBDU1MgcnVsZSBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ3NzUnVsZSAoY3NzUnVsZSkge1xuICBjb25zdCB7IG5lc3RpbmdPcGVyYXRvciB9ID0gY3NzUnVsZTtcbiAgaWYgKG5lc3RpbmdPcGVyYXRvciAmJiBuZXN0aW5nT3BlcmF0b3IgIT09ICcgJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7bmVzdGluZ09wZXJhdG9yfScgaXMgbm90IGEgc3VwcG9ydGVkIGNvbWJpbmF0b3IuIGAgK1xuICAgICAgYE9ubHkgY2hpbGQgY29tYmluYXRvciAoPikgYW5kIGRlc2NlbmRhbnQgY29tYmluYXRvciBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG5cbiAgbGV0IHVpQXV0b21hdG9yU2VsZWN0b3IgPSAnbmV3IFVpU2VsZWN0b3IoKSc7XG4gIGlmIChjc3NSdWxlLnRhZ05hbWUgJiYgY3NzUnVsZS50YWdOYW1lICE9PSAnKicpIHtcbiAgICBsZXQgYW5kcm9pZENsYXNzID0gW2Nzc1J1bGUudGFnTmFtZV07XG4gICAgaWYgKGNzc1J1bGUuY2xhc3NOYW1lcykge1xuICAgICAgZm9yIChjb25zdCBjc3NDbGFzc05hbWVzIG9mIGNzc1J1bGUuY2xhc3NOYW1lcykge1xuICAgICAgICBhbmRyb2lkQ2xhc3MucHVzaChjc3NDbGFzc05hbWVzKTtcbiAgICAgIH1cbiAgICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gYC5jbGFzc05hbWUoXCIke2FuZHJvaWRDbGFzcy5qb2luKCcuJyl9XCIpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSBgLmNsYXNzTmFtZU1hdGNoZXMoXCIke2Nzc1J1bGUudGFnTmFtZX1cIilgO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjc3NSdWxlLmNsYXNzTmFtZXMpIHtcbiAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IGAuY2xhc3NOYW1lTWF0Y2hlcyhcIiR7Y3NzUnVsZS5jbGFzc05hbWVzLmpvaW4oJ1xcXFwuJyl9XCIpYDtcbiAgfVxuICBpZiAoY3NzUnVsZS5pZCkge1xuICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gYC5yZXNvdXJjZUlkKFwiJHtmb3JtYXRJZExvY2F0b3IoY3NzUnVsZS5pZCl9XCIpYDtcbiAgfVxuICBpZiAoY3NzUnVsZS5hdHRycykge1xuICAgIGZvciAoY29uc3QgYXR0ciBvZiBjc3NSdWxlLmF0dHJzKSB7XG4gICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IHBhcnNlQXR0cihhdHRyKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNzc1J1bGUucHNldWRvcykge1xuICAgIGZvciAoY29uc3QgcHNldWRvIG9mIGNzc1J1bGUucHNldWRvcykge1xuICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSBwYXJzZVBzZXVkbyhwc2V1ZG8pO1xuICAgIH1cbiAgfVxuICBpZiAoY3NzUnVsZS5ydWxlKSB7XG4gICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSBgLmNoaWxkU2VsZWN0b3IoJHtwYXJzZUNzc1J1bGUoY3NzUnVsZS5ydWxlKX0pYDtcbiAgfVxuICByZXR1cm4gdWlBdXRvbWF0b3JTZWxlY3Rvcjtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDc3NPYmplY3RcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdHlwZSBUeXBlIG9mIENTUyBvYmplY3QuICdydWxlJywgJ3J1bGVzZXQnIG9yICdzZWxlY3RvcnMnXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0IENTUyBvYmplY3QgdG8gVWlBdXRvbWF0b3IyIHNlbGVjdG9yXG4gKiBAcGFyYW0ge0Nzc09iamVjdH0gY3NzIENTUyBvYmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBDU1Mgb2JqZWN0IHBhcnNlZCBhcyBhIFVpU2VsZWN0b3JcbiAqL1xuZnVuY3Rpb24gcGFyc2VDc3NPYmplY3QgKGNzcykge1xuICBzd2l0Y2ggKGNzcy50eXBlKSB7XG4gICAgY2FzZSAncnVsZSc6XG4gICAgICByZXR1cm4gcGFyc2VDc3NSdWxlKGNzcyk7XG4gICAgY2FzZSAncnVsZVNldCc6XG4gICAgICByZXR1cm4gcGFyc2VDc3NPYmplY3QoY3NzLnJ1bGUpO1xuICAgIGNhc2UgJ3NlbGVjdG9ycyc6XG4gICAgICByZXR1cm4gY3NzLnNlbGVjdG9ycy5tYXAoKHNlbGVjdG9yKSA9PiBwYXJzZUNzc09iamVjdChzZWxlY3RvcikpLmpvaW4oJzsgJyk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gVGhpcyBpcyBuZXZlciByZWFjaGFibGUsIGJ1dCBpZiBpdCBldmVyIGlzIGRvIHRoaXMuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVpQXV0b21hdG9yIGRvZXMgbm90IHN1cHBvcnQgJyR7Y3NzLnR5cGV9JyBjc3MuIE9ubHkgc3VwcG9ydHMgJ3J1bGUnLCAncnVsZVNldCcsICdzZWxlY3RvcnMnIGApO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIENTUyBzZWxlY3RvciB0byBhIFVpQXV0b21hdG9yMiBzZWxlY3RvclxuICogQHBhcmFtIHtzdHJpbmd9IGNzc1NlbGVjdG9yIENTUyBTZWxlY3RvclxuICogQHJldHVybnMge3N0cmluZ30gVGhlIENTUyBzZWxlY3RvciBjb252ZXJ0ZWQgdG8gYSBVaVNlbGVjdG9yXG4gKi9cbkNzc0NvbnZlcnRlci50b1VpQXV0b21hdG9yU2VsZWN0b3IgPSBmdW5jdGlvbiB0b1VpQXV0b21hdG9yU2VsZWN0b3IgKGNzc1NlbGVjdG9yKSB7XG4gIGxldCBjc3NPYmo7XG4gIHRyeSB7XG4gICAgY3NzT2JqID0gcGFyc2VyLnBhcnNlKGNzc1NlbGVjdG9yKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFNlbGVjdG9yRXJyb3IoYEludmFsaWQgQ1NTIHNlbGVjdG9yICcke2Nzc1NlbGVjdG9yfScuIFJlYXNvbjogJyR7ZX0nYCk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VDc3NPYmplY3QoY3NzT2JqKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFNlbGVjdG9yRXJyb3IoYFVuc3VwcG9ydGVkIENTUyBzZWxlY3RvciAnJHtjc3NTZWxlY3Rvcn0nLiBSZWFzb246ICcke2V9J2ApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDc3NDb252ZXJ0ZXI7Il0sImZpbGUiOiJsaWIvY3NzLWNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
240
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jc3MtY29udmVydGVyLmpzIl0sIm5hbWVzIjpbInBhcnNlciIsIkNzc1NlbGVjdG9yUGFyc2VyIiwicmVnaXN0ZXJTZWxlY3RvclBzZXVkb3MiLCJyZWdpc3Rlck5lc3RpbmdPcGVyYXRvcnMiLCJyZWdpc3RlckF0dHJFcXVhbGl0eU1vZHMiLCJlbmFibGVTdWJzdGl0dXRlcyIsIlJFU09VUkNFX0lEIiwiSURfTE9DQVRPUl9QQVRURVJOIiwiQk9PTEVBTl9BVFRSUyIsIk5VTUVSSUNfQVRUUlMiLCJTVFJfQVRUUlMiLCJBTExfQVRUUlMiLCJBVFRSSUJVVEVfQUxJQVNFUyIsInRvU25ha2VDYXNlIiwic3RyIiwidG9rZW5zIiwic3BsaXQiLCJtYXAiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwidG9Mb3dlckNhc2UiLCJvdXQiLCJqb2luIiwiYXNzZXJ0R2V0Qm9vbCIsImNzcyIsInZhbCIsInZhbHVlIiwiaW5jbHVkZXMiLCJFcnJvciIsIm5hbWUiLCJhc3NlcnRHZXRBdHRyTmFtZSIsImF0dHJOYW1lIiwib2ZmaWNpYWxBdHRyIiwiYWxpYXNBdHRycyIsImdldFdvcmRNYXRjaGVyUmVnZXgiLCJ3b3JkIiwiQ3NzQ29udmVydGVyIiwiY29uc3RydWN0b3IiLCJzZWxlY3RvciIsInBrZyIsImZvcm1hdElkTG9jYXRvciIsImxvY2F0b3IiLCJ0ZXN0IiwicGFyc2VBdHRyIiwiY3NzQXR0ciIsInZhbHVlVHlwZSIsIm1ldGhvZE5hbWUiLCJvcGVyYXRvciIsInBhcnNlUHNldWRvIiwiY3NzUHNldWRvIiwicHNldWRvTmFtZSIsInBhcnNlQ3NzUnVsZSIsImNzc1J1bGUiLCJuZXN0aW5nT3BlcmF0b3IiLCJ1aUF1dG9tYXRvclNlbGVjdG9yIiwidGFnTmFtZSIsImFuZHJvaWRDbGFzcyIsImNsYXNzTmFtZXMiLCJjc3NDbGFzc05hbWVzIiwicHVzaCIsImlkIiwiYXR0cnMiLCJhdHRyIiwicHNldWRvcyIsInBzZXVkbyIsInJ1bGUiLCJwYXJzZUNzc09iamVjdCIsInR5cGUiLCJzZWxlY3RvcnMiLCJ0b1VpQXV0b21hdG9yU2VsZWN0b3IiLCJjc3NPYmoiLCJwYXJzZSIsImUiLCJlcnJvcnMiLCJJbnZhbGlkU2VsZWN0b3JFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsTUFBTSxHQUFHLElBQUlDLG9DQUFKLEVBQWY7QUFDQUQsTUFBTSxDQUFDRSx1QkFBUCxDQUErQixLQUEvQjtBQUNBRixNQUFNLENBQUNHLHdCQUFQLENBQWdDLEdBQWhDLEVBQXFDLEdBQXJDLEVBQTBDLEdBQTFDO0FBQ0FILE1BQU0sQ0FBQ0ksd0JBQVAsQ0FBZ0MsR0FBaEMsRUFBcUMsR0FBckMsRUFBMEMsR0FBMUMsRUFBK0MsR0FBL0M7QUFDQUosTUFBTSxDQUFDSyxpQkFBUDtBQUVBLE1BQU1DLFdBQVcsR0FBRyxhQUFwQjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLHFDQUEzQjtBQUVBLE1BQU1DLGFBQWEsR0FBRyxDQUNwQixXQURvQixFQUNQLFNBRE8sRUFDSSxXQURKLEVBQ2lCLFNBRGpCLEVBQzRCLFdBRDVCLEVBRXBCLFNBRm9CLEVBRVQsZ0JBRlMsRUFFUyxZQUZULEVBRXVCLFVBRnZCLENBQXRCO0FBS0EsTUFBTUMsYUFBYSxHQUFHLENBQ3BCLE9BRG9CLEVBQ1gsVUFEVyxDQUF0QjtBQUlBLE1BQU1DLFNBQVMsR0FBRyxDQUNoQixhQURnQixFQUNESixXQURDLEVBQ1ksTUFEWixFQUNvQixZQURwQixFQUNrQyxjQURsQyxDQUFsQjtBQUlBLE1BQU1LLFNBQVMsR0FBRyxDQUNoQixHQUFHSCxhQURhLEVBRWhCLEdBQUdDLGFBRmEsRUFHaEIsR0FBR0MsU0FIYSxDQUFsQjtBQU1BLE1BQU1FLGlCQUFpQixHQUFHLENBQ3hCLENBQUNOLFdBQUQsRUFBYyxDQUFDLElBQUQsQ0FBZCxDQUR3QixFQUV4QixDQUFDLGFBQUQsRUFBZ0IsQ0FDZCxxQkFEYyxFQUNTLGNBRFQsRUFFZCxNQUZjLEVBRU4sa0JB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QUN2QixRQUFJQyxNQUFKOztBQUNBLFFBQUk7QUFDRkEsTUFBQUEsTUFBTSxHQUFHdkUsTUFBTSxDQUFDd0UsS0FBUCxDQUFhLEtBQUtqQyxRQUFsQixDQUFUO0FBQ0QsS0FGRCxDQUVFLE9BQU9rQyxDQUFQLEVBQVU7QUFDVixZQUFNLElBQUlDLG1CQUFPQyxvQkFBWCxDQUFpQyx5QkFBd0IsS0FBS3BDLFFBQVMsZUFBY2tDLENBQUUsR0FBdkYsQ0FBTjtBQUNEOztBQUNELFFBQUk7QUFDRixhQUFPLEtBQUtOLGNBQUwsQ0FBb0JJLE1BQXBCLENBQVA7QUFDRCxLQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO0FBQ1YsWUFBTSxJQUFJQyxtQkFBT0Msb0JBQVgsQ0FBaUMsNkJBQTRCLEtBQUtwQyxRQUFTLGVBQWNrQyxDQUFFLEdBQTNGLENBQU47QUFDRDtBQUNGOztBQXJMZ0I7O2VBd0xKcEMsWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENzc1NlbGVjdG9yUGFyc2VyIH0gZnJvbSAnY3NzLXNlbGVjdG9yLXBhcnNlcic7XG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5cbmNvbnN0IHBhcnNlciA9IG5ldyBDc3NTZWxlY3RvclBhcnNlcigpO1xucGFyc2VyLnJlZ2lzdGVyU2VsZWN0b3JQc2V1ZG9zKCdoYXMnKTtcbnBhcnNlci5yZWdpc3Rlck5lc3RpbmdPcGVyYXRvcnMoJz4nLCAnKycsICd+Jyk7XG5wYXJzZXIucmVnaXN0ZXJBdHRyRXF1YWxpdHlNb2RzKCdeJywgJyQnLCAnKicsICd+Jyk7XG5wYXJzZXIuZW5hYmxlU3Vic3RpdHV0ZXMoKTtcblxuY29uc3QgUkVTT1VSQ0VfSUQgPSAncmVzb3VyY2UtaWQnO1xuY29uc3QgSURfTE9DQVRPUl9QQVRURVJOID0gL15bYS16QS1aX11bYS16QS1aMC05Ll9dKjppZFxcL1tcXFNdKyQvO1xuXG5jb25zdCBCT09MRUFOX0FUVFJTID0gW1xuICAnY2hlY2thYmxlJywgJ2NoZWNrZWQnLCAnY2xpY2thYmxlJywgJ2VuYWJsZWQnLCAnZm9jdXNhYmxlJyxcbiAgJ2ZvY3VzZWQnLCAnbG9uZy1jbGlja2FibGUnLCAnc2Nyb2xsYWJsZScsICdzZWxlY3RlZCcsXG5dO1xuXG5jb25zdCBOVU1FUklDX0FUVFJTID0gW1xuICAnaW5kZXgnLCAnaW5zdGFuY2UnLFxuXTtcblxuY29uc3QgU1RSX0FUVFJTID0gW1xuICAnZGVzY3JpcHRpb24nLCBSRVNPVVJDRV9JRCwgJ3RleHQnLCAnY2xhc3MtbmFtZScsICdwYWNrYWdlLW5hbWUnXG5dO1xuXG5jb25zdCBBTExfQVRUUlMgPSBbXG4gIC4uLkJPT0xFQU5fQVRUUlMsXG4gIC4uLk5VTUVSSUNfQVRUUlMsXG4gIC4uLlNUUl9BVFRSUyxcbl07XG5cbmNvbnN0IEFUVFJJQlVURV9BTElBU0VTID0gW1xuICBbUkVTT1VSQ0VfSUQsIFsnaWQnXV0sXG4gIFsnZGVzY3JpcHRpb24nLCBbXG4gICAgJ2NvbnRlbnQtZGVzY3JpcHRpb24nLCAnY29udGVudC1kZXNjJyxcbiAgICAnZGVzYycsICdhY2Nlc3NpYmlsaXR5LWlkJyxcbiAgXV0sXG4gIFsnaW5kZXgnLCBbJ250aC1jaGlsZCddXSxcbl07XG5cbi8qKlxuICogQ29udmVydCBoeXBoZW4gc2VwYXJhdGVkIHdvcmQgdG8gc25ha2UgY2FzZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBoeXBoZW4gc2VwYXJhdGVkIHdvcmQgdHJhbnNsYXRlZCB0byBzbmFrZSBjYXNlXG4gKi9cbmZ1bmN0aW9uIHRvU25ha2VDYXNlIChzdHIpIHtcbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgdG9rZW5zID0gc3RyLnNwbGl0KCctJykubWFwKChzdHIpID0+IHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKTtcbiAgY29uc3Qgb3V0ID0gdG9rZW5zLmpvaW4oJycpO1xuICByZXR1cm4gb3V0LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgb3V0LnNsaWNlKDEpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENzc05hbWVWYWx1ZU9iamVjdFxuICogQHByb3BlcnR5IHs/bmFtZX0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgQ1NTIG9iamVjdFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIENTUyBvYmplY3RcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgYm9vbGVhbiBmcm9tIGEgQ1NTIG9iamVjdC4gSWYgZW1wdHksIHJldHVybiB0cnVlLiBJZiBub3QgdHJ1ZS9mYWxzZS9lbXB0eSwgdGhyb3cgZXhjZXB0aW9uXG4gKlxuICogQHBhcmFtIHtDc3NOYW1lVmFsdWVPYmplY3R9IGNzcyBBIENTUyBvYmplY3QgdGhhdCBoYXMgJ25hbWUnIGFuZCAndmFsdWUnXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBFaXRoZXIgJ3RydWUnIG9yICdmYWxzZScuIElmIHZhbHVlIGlzIGVtcHR5LCByZXR1cm4gJ3RydWUnXG4gKi9cbmZ1bmN0aW9uIGFzc2VydEdldEJvb2wgKGNzcykge1xuICBjb25zdCB2YWwgPSBjc3MudmFsdWU/LnRvTG93ZXJDYXNlKCkgfHwgJ3RydWUnOyAvLyBhbiBvbWl0dGVkIGJvb2xlYW4gYXR0cmlidXRlIG1lYW5zICd0cnVlJyAoZS5nLjogaW5wdXRbY2hlY2tlZF0gbWVhbnMgY2hlY2tlZCBpcyB0cnVlKVxuICBpZiAoWyd0cnVlJywgJ2ZhbHNlJ10uaW5jbHVkZXModmFsKSkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGAnJHtjc3MubmFtZX0nIG11c3QgYmUgdHJ1ZSwgZmFsc2Ugb3IgZW1wdHkuIEZvdW5kICcke2Nzcy52YWx1ZX0nYCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBjYW5vbmljYWwgZm9ybSBvZiBhIENTUyBhdHRyaWJ1dGUgbmFtZVxuICpcbiAqIENvbnZlcnRzIHRvIGxvd2VyY2FzZSBhbmQgaWYgYW4gYXR0cmlidXRlIG5hbWUgaXMgYW4gYWxpYXMgZm9yIHNvbWV0aGluZyBlbHNlLCByZXR1cm5cbiAqIHdoYXQgaXQgaXMgYW4gYWxpYXMgZm9yXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNzcyBDU1Mgb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY2Fub25pY2FsIGF0dHJpYnV0ZSBuYW1lXG4gKi9cbmZ1bmN0aW9uIGFzc2VydEdldEF0dHJOYW1lIChjc3MpIHtcbiAgY29uc3QgYXR0ck5hbWUgPSBjc3MubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8vIENoZWNrIGlmIGl0J3Mgc3VwcG9ydGVkIGFuZCBpZiBpdCBpcywgcmV0dXJuIGl0XG4gIGlmIChBTExfQVRUUlMuaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgcmV0dXJuIGF0dHJOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvLyBJZiBhdHRyTmFtZSBpcyBhbiBhbGlhcyBmb3Igc29tZXRoaW5nIGVsc2UsIHJldHVybiB0aGF0XG4gIGZvciAoY29uc3QgW29mZmljaWFsQXR0ciwgYWxpYXNBdHRyc10gb2YgQVRUUklCVVRFX0FMSUFTRVMpIHtcbiAgICBpZiAoYWxpYXNBdHRycy5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgIHJldHVybiBvZmZpY2lhbEF0dHI7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgJyR7YXR0ck5hbWV9JyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUuIGAgK1xuICAgIGBTdXBwb3J0ZWQgYXR0cmlidXRlcyBhcmUgJyR7QUxMX0FUVFJTLmpvaW4oJywgJyl9J2ApO1xufVxuXG4vKipcbiAqIEdldCBhIHJlZ2V4IHRoYXQgbWF0Y2hlcyBhIHdob2xlIHdvcmQuIEZvciB0aGUgfj0gQ1NTIGF0dHJpYnV0ZSBzZWxlY3Rvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gd29yZFxuICogQHJldHVybnMge3N0cmluZ30gQSByZWdleCBcIndvcmRcIiBtYXRjaGVyXG4gKi9cbmZ1bmN0aW9uIGdldFdvcmRNYXRjaGVyUmVnZXggKHdvcmQpIHtcbiAgcmV0dXJuIGBcXFxcYihcXFxcdyoke2VzY2FwZVJlZ0V4cCh3b3JkKX1cXFxcdyopXFxcXGJgO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENzc0F0dHJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmFsdWVUeXBlIFR5cGUgb2YgYXR0cmlidXRlIChtdXN0IGJlIHN0cmluZyBvciBlbXB0eSlcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmFsdWUgVmFsdWUgb2YgdGhlIGF0dHJpYnV0ZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBvcGVyYXRvciBUaGUgb3BlcmF0b3IgYmV0d2VlbiB2YWx1ZSBhbmQgdmFsdWUgdHlwZSAoPSwgKj0sICwgXj0sICQ9KVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzUnVsZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBuZXN0aW5nT3BlcmF0b3IgVGhlIG5lc3Rpbmcgb3BlcmF0b3IgKGFrYTogY29tYmluYXRvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ1NTX1NlbGVjdG9ycylcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdGFnTmFtZSBUaGUgdGFnIG5hbWUgKGFrYTogdHlwZSBzZWxlY3RvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvVHlwZV9zZWxlY3RvcnMpXG4gKiBAcHJvcGVydHkgez9zdHJpbmdbXX0gY2xhc3NOYW1lcyBBbiBhcnJheSBvZiBDU1MgY2xhc3MgbmFtZXNcbiAqIEBwcm9wZXJ0eSB7P0Nzc0F0dHJbXX0gYXR0cnMgQW4gYXJyYXkgb2YgQ1NTIGF0dHJpYnV0ZXNcbiAqIEBwcm9wZXJ0eSB7P0Nzc1BzZXVkb1tdfSBhdHRycyBBbiBhcnJheSBvZiBDU1MgcHNldWRvc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBpZCBDU1MgaWRlbnRpZmllclxuICogQHByb3BlcnR5IHs/Q3NzUnVsZX0gcnVsZSBBIGRlc2NlbmRhbnQgb2YgdGhpcyBDU1MgcnVsZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzT2JqZWN0XG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHR5cGUgVHlwZSBvZiBDU1Mgb2JqZWN0LiAncnVsZScsICdydWxlc2V0JyBvciAnc2VsZWN0b3JzJ1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzUHNldWRvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZhbHVlVHlwZSBUaGUgdHlwZSBvZiBDU1MgcHNldWRvIHNlbGVjdG9yIChodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9jc3Mtc2VsZWN0b3ItcGFyc2VyIGZvciByZWZlcmVuY2UpXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBzZXVkbyBzZWxlY3RvclxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHBzZXVkbyBzZWxlY3RvclxuICovXG5cbmNsYXNzIENzc0NvbnZlcnRlciB7XG5cbiAgY29uc3RydWN0b3IgKHNlbGVjdG9yLCBwa2cpIHtcbiAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgdGhpcy5wa2cgPSBwa2c7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGA8cGtnTmFtZT46aWQvYCBwcmVmaXggdG8gYmVnaW5uaW5nIG9mIHN0cmluZyBpZiBpdCdzIG5vdCB0aGVyZSBhbHJlYWR5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdG9yIFRoZSBpbml0aWFsIGxvY2F0b3JcbiAgICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIHdpdGggYDxwa2dOYW1lPjppZC9gIHByZXBlbmRlZCAoaWYgaXQgd2Fzbid0IGFscmVhZHkpXG4gICAqL1xuICBmb3JtYXRJZExvY2F0b3IgKGxvY2F0b3IpIHtcbiAgICByZXR1cm4gSURfTE9DQVRPUl9QQVRURVJOLnRlc3QobG9jYXRvcilcbiAgICAgID8gbG9jYXRvclxuICAgICAgOiBgJHt0aGlzLnBrZyB8fCAnYW5kcm9pZCd9OmlkLyR7bG9jYXRvcn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBDU1MgYXR0cmlidXRlIGludG8gYSBVaVNlbGVjdG9yIG1ldGhvZCBjYWxsXG4gICAqXG4gICAqIEBwYXJhbSB7Q3NzQXR0cn0gY3NzQXR0ciBDU1MgYXR0cmlidXRlIG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBDU1MgYXR0cmlidXRlIHBhcnNlZCBhcyBVaVNlbGVjdG9yXG4gICAqL1xuICBwYXJzZUF0dHIgKGNzc0F0dHIpIHtcbiAgICBpZiAoY3NzQXR0ci52YWx1ZVR5cGUgJiYgY3NzQXR0ci52YWx1ZVR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Nzc0F0dHIubmFtZX09JHtjc3NBdHRyLnZhbHVlfScgaXMgYW4gaW52YWxpZCBhdHRyaWJ1dGUuIGAgK1xuICAgICAgICBgT25seSAnc3RyaW5nJyBhbmQgZW1wdHkgYXR0cmlidXRlIHR5cGVzIGFyZSBzdXBwb3J0ZWQuIEZvdW5kICcke2Nzc0F0dHIudmFsdWVUeXBlfSdgKTtcbiAgICB9XG4gICAgY29uc3QgYXR0ck5hbWUgPSBhc3NlcnRHZXRBdHRyTmFtZShjc3NBdHRyKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gdG9TbmFrZUNhc2UoYXR0ck5hbWUpO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBpdCdzIGEgc3VwcG9ydGVkIGF0dHJpYnV0ZVxuICAgIGlmICghU1RSX0FUVFJTLmluY2x1ZGVzKGF0dHJOYW1lKSAmJiAhQk9PTEVBTl9BVFRSUy5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7YXR0ck5hbWV9JyBpcyBub3Qgc3VwcG9ydGVkLiBTdXBwb3J0ZWQgYXR0cmlidXRlcyBhcmUgYCArXG4gICAgICAgIGAnJHtbLi4uU1RSX0FUVFJTLCAuLi5CT09MRUFOX0FUVFJTXS5qb2luKCcsICcpfSdgKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBib29sZWFuLCBpZiBpdCdzIGEgYm9vbGVhbiBhdHRyaWJ1dGVcbiAgICBpZiAoQk9PTEVBTl9BVFRSUy5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX0oJHthc3NlcnRHZXRCb29sKGNzc0F0dHIpfSlgO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSBwYXJzZSBhcyBzdHJpbmdcbiAgICBsZXQgdmFsdWUgPSBjc3NBdHRyLnZhbHVlIHx8ICcnO1xuICAgIGlmIChhdHRyTmFtZSA9PT0gUkVTT1VSQ0VfSUQpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5mb3JtYXRJZExvY2F0b3IodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9TWF0Y2hlcyhcIlwiKWA7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjc3NBdHRyLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlICc9JzpcbiAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfShcIiR7dmFsdWV9XCIpYDtcbiAgICAgIGNhc2UgJyo9JzpcbiAgICAgICAgaWYgKFsnZGVzY3JpcHRpb24nLCAndGV4dCddLmluY2x1ZGVzKGF0dHJOYW1lKSkge1xuICAgICAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX1Db250YWlucyhcIiR7dmFsdWV9XCIpYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9TWF0Y2hlcyhcIiR7ZXNjYXBlUmVnRXhwKHZhbHVlKX1cIilgO1xuICAgICAgY2FzZSAnXj0nOlxuICAgICAgICBpZiAoWydkZXNjcmlwdGlvbicsICd0ZXh0J10uaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfVN0YXJ0c1dpdGgoXCIke3ZhbHVlfVwiKWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfU1hdGNoZXMoXCJeJHtlc2NhcGVSZWdFeHAodmFsdWUpfVwiKWA7XG4gICAgICBjYXNlICckPSc6XG4gICAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX1NYXRjaGVzKFwiJHtlc2NhcGVSZWdFeHAodmFsdWUpfSRcIilgO1xuICAgICAgY2FzZSAnfj0nOlxuICAgICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9TWF0Y2hlcyhcIiR7Z2V0V29yZE1hdGNoZXJSZWdleCh2YWx1ZSl9XCIpYDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIFVucmVhY2hhYmxlLCBidXQgYWRkaW5nIGVycm9yIGluIGNhc2UgYSBuZXcgQ1NTIGF0dHJpYnV0ZSBpcyBhZGRlZC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBDU1MgYXR0cmlidXRlIG9wZXJhdG9yICcke2Nzc0F0dHIub3BlcmF0b3J9Jy4gYCArXG4gICAgICAgICAgYCAnPScsICcqPScsICdePScsICckPScgYW5kICd+PScgYXJlIHN1cHBvcnRlZC5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIENTUyBwc2V1ZG8gY2xhc3MgdG8gYSBVaVNlbGVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7Q3NzUHNldWRvfSBjc3NQc2V1ZG8gQ1NTIFBzZXVkbyBjbGFzc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBQc2V1ZG8gc2VsZWN0b3IgcGFyc2VkIGFzIFVpU2VsZWN0b3JcbiAgICovXG4gIHBhcnNlUHNldWRvIChjc3NQc2V1ZG8pIHtcbiAgICBpZiAoY3NzUHNldWRvLnZhbHVlVHlwZSAmJiBjc3NQc2V1ZG8udmFsdWVUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtjc3NQc2V1ZG8ubmFtZX09JHtjc3NQc2V1ZG8udmFsdWV9Jy4gYCArXG4gICAgICAgIGBVbnN1cHBvcnRlZCBjc3MgcHNldWRvIGNsYXNzIHZhbHVlIHR5cGU6ICcke2Nzc1BzZXVkby52YWx1ZVR5cGV9Jy4gT25seSAnc3RyaW5nJyB0eXBlIG9yIGVtcHR5IGlzIHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBwc2V1ZG9OYW1lID0gYXNzZXJ0R2V0QXR0ck5hbWUoY3NzUHNldWRvKTtcblxuICAgIGlmIChCT09MRUFOX0FUVFJTLmluY2x1ZGVzKHBzZXVkb05hbWUpKSB7XG4gICAgICByZXR1cm4gYC4ke3RvU25ha2VDYXNlKHBzZXVkb05hbWUpfSgke2Fzc2VydEdldEJvb2woY3NzUHNldWRvKX0pYDtcbiAgICB9XG5cbiAgICBpZiAoTlVNRVJJQ19BVFRSUy5pbmNsdWRlcyhwc2V1ZG9OYW1lKSkge1xuICAgICAgcmV0dXJuIGAuJHtwc2V1ZG9OYW1lfSgke2Nzc1BzZXVkby52YWx1ZX0pYDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIENTUyBydWxlIHRvIGEgVWlTZWxlY3RvclxuICAgKiBAcGFyYW0ge0Nzc1J1bGV9IGNzc1J1bGUgQ1NTIHJ1bGUgZGVmaW5pdGlvblxuICAgKi9cbiAgcGFyc2VDc3NSdWxlIChjc3NSdWxlKSB7XG4gICAgY29uc3QgeyBuZXN0aW5nT3BlcmF0b3IgfSA9IGNzc1J1bGU7XG4gICAgaWYgKG5lc3RpbmdPcGVyYXRvciAmJiBuZXN0aW5nT3BlcmF0b3IgIT09ICcgJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtuZXN0aW5nT3BlcmF0b3J9JyBpcyBub3QgYSBzdXBwb3J0ZWQgY29tYmluYXRvci4gYCArXG4gICAgICAgIGBPbmx5IGNoaWxkIGNvbWJpbmF0b3IgKD4pIGFuZCBkZXNjZW5kYW50IGNvbWJpbmF0b3IgYXJlIHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICBsZXQgdWlBdXRvbWF0b3JTZWxlY3RvciA9ICduZXcgVWlTZWxlY3RvcigpJztcbiAgICBpZiAoY3NzUnVsZS50YWdOYW1lICYmIGNzc1J1bGUudGFnTmFtZSAhPT0gJyonKSB7XG4gICAgICBsZXQgYW5kcm9pZENsYXNzID0gW2Nzc1J1bGUudGFnTmFtZV07XG4gICAgICBpZiAoY3NzUnVsZS5jbGFzc05hbWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY3NzQ2xhc3NOYW1lcyBvZiBjc3NSdWxlLmNsYXNzTmFtZXMpIHtcbiAgICAgICAgICBhbmRyb2lkQ2xhc3MucHVzaChjc3NDbGFzc05hbWVzKTtcbiAgICAgICAgfVxuICAgICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IGAuY2xhc3NOYW1lKFwiJHthbmRyb2lkQ2xhc3Muam9pbignLicpfVwiKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IGAuY2xhc3NOYW1lTWF0Y2hlcyhcIiR7Y3NzUnVsZS50YWdOYW1lfVwiKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjc3NSdWxlLmNsYXNzTmFtZXMpIHtcbiAgICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gYC5jbGFzc05hbWVNYXRjaGVzKFwiJHtjc3NSdWxlLmNsYXNzTmFtZXMuam9pbignXFxcXC4nKX1cIilgO1xuICAgIH1cbiAgICBpZiAoY3NzUnVsZS5pZCkge1xuICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSBgLnJlc291cmNlSWQoXCIke3RoaXMuZm9ybWF0SWRMb2NhdG9yKGNzc1J1bGUuaWQpfVwiKWA7XG4gICAgfVxuICAgIGlmIChjc3NSdWxlLmF0dHJzKSB7XG4gICAgICBmb3IgKGNvbnN0IGF0dHIgb2YgY3NzUnVsZS5hdHRycykge1xuICAgICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IHRoaXMucGFyc2VBdHRyKGF0dHIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3NzUnVsZS5wc2V1ZG9zKSB7XG4gICAgICBmb3IgKGNvbnN0IHBzZXVkbyBvZiBjc3NSdWxlLnBzZXVkb3MpIHtcbiAgICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSB0aGlzLnBhcnNlUHNldWRvKHBzZXVkbyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjc3NSdWxlLnJ1bGUpIHtcbiAgICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gYC5jaGlsZFNlbGVjdG9yKCR7dGhpcy5wYXJzZUNzc1J1bGUoY3NzUnVsZS5ydWxlKX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIHVpQXV0b21hdG9yU2VsZWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBDU1Mgb2JqZWN0IHRvIFVpQXV0b21hdG9yMiBzZWxlY3RvclxuICAgKiBAcGFyYW0ge0Nzc09iamVjdH0gY3NzIENTUyBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIENTUyBvYmplY3QgcGFyc2VkIGFzIGEgVWlTZWxlY3RvclxuICAgKi9cbiAgcGFyc2VDc3NPYmplY3QgKGNzcykge1xuICAgIHN3aXRjaCAoY3NzLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3J1bGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUNzc1J1bGUoY3NzKTtcbiAgICAgIGNhc2UgJ3J1bGVTZXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUNzc09iamVjdChjc3MucnVsZSk7XG4gICAgICBjYXNlICdzZWxlY3RvcnMnOlxuICAgICAgICByZXR1cm4gY3NzLnNlbGVjdG9ycy5tYXAoKHNlbGVjdG9yKSA9PiB0aGlzLnBhcnNlQ3NzT2JqZWN0KHNlbGVjdG9yKSkuam9pbignOyAnKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gVGhpcyBpcyBuZXZlciByZWFjaGFibGUsIGJ1dCBpZiBpdCBldmVyIGlzIGRvIHRoaXMuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVWlBdXRvbWF0b3IgZG9lcyBub3Qgc3VwcG9ydCAnJHtjc3MudHlwZX0nIGNzcy4gT25seSBzdXBwb3J0cyAncnVsZScsICdydWxlU2V0JywgJ3NlbGVjdG9ycycgYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBDU1Mgc2VsZWN0b3IgdG8gYSBVaUF1dG9tYXRvcjIgc2VsZWN0b3JcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIENTUyBzZWxlY3RvciBjb252ZXJ0ZWQgdG8gYSBVaVNlbGVjdG9yXG4gICAqL1xuICB0b1VpQXV0b21hdG9yU2VsZWN0b3IgKCkge1xuICAgIGxldCBjc3NPYmo7XG4gICAgdHJ5IHtcbiAgICAgIGNzc09iaiA9IHBhcnNlci5wYXJzZSh0aGlzLnNlbGVjdG9yKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRTZWxlY3RvckVycm9yKGBJbnZhbGlkIENTUyBzZWxlY3RvciAnJHt0aGlzLnNlbGVjdG9yfScuIFJlYXNvbjogJyR7ZX0nYCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUNzc09iamVjdChjc3NPYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFNlbGVjdG9yRXJyb3IoYFVuc3VwcG9ydGVkIENTUyBzZWxlY3RvciAnJHt0aGlzLnNlbGVjdG9yfScuIFJlYXNvbjogJyR7ZX0nYCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENzc0NvbnZlcnRlcjsiXSwiZmlsZSI6ImxpYi9jc3MtY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|