oxygen-cli 1.20.1 → 1.21.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/build/core/OxygenCore.js +4 -3
  3. package/build/errors/helper.js +9 -5
  4. package/build/lib/cli.js +1 -1
  5. package/build/lib/util.js +6 -3
  6. package/build/ox_modules/module-db.js +2 -2
  7. package/build/ox_modules/module-email.js +97 -49
  8. package/build/ox_modules/module-eyes.js +4 -21
  9. package/build/ox_modules/module-http.js +59 -49
  10. package/build/ox_modules/module-mailinator.js +25 -32
  11. package/build/ox_modules/module-mob/commands/selectWindow.js +4 -7
  12. package/build/ox_modules/module-mob/commands/sendKeys.js +2 -2
  13. package/build/ox_modules/module-mob.js +65 -52
  14. package/build/ox_modules/module-pdf.js +12 -32
  15. package/build/ox_modules/module-proxy.js +9 -9
  16. package/build/ox_modules/module-serial.js +14 -12
  17. package/build/ox_modules/module-soap.js +88 -78
  18. package/build/ox_modules/module-twilio.js +27 -27
  19. package/build/ox_modules/module-utils.js +43 -5
  20. package/build/ox_modules/module-web/commands/fullscreenWindow.js +24 -0
  21. package/build/ox_modules/module-web/commands/index.js +25 -1
  22. package/build/ox_modules/module-web/commands/isSelected.js +2 -2
  23. package/build/ox_modules/module-web/commands/maximizeWindow.js +24 -0
  24. package/build/ox_modules/module-web/commands/minimizeWindow.js +24 -0
  25. package/build/ox_modules/module-web/commands/selectWindow.js +4 -7
  26. package/build/ox_modules/module-web/commands/waitForNotExist.js +2 -3
  27. package/build/ox_modules/module-web.js +87 -64
  28. package/build/ox_modules/utils.js +13 -2
  29. package/build/runners/WorkerProcess.js +22 -20
  30. package/package.json +3 -1
@@ -6,6 +6,8 @@ var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
6
6
 
7
7
  var _utils = _interopRequireDefault(require("./utils"));
8
8
 
9
+ var _lodash = _interopRequireDefault(require("lodash"));
10
+
9
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
12
 
11
13
  /*
@@ -26,7 +28,7 @@ var errHelper = require('../errors/helper');
26
28
  module.exports = function () {
27
29
  var imaps = require('imap-simple');
28
30
 
29
- var deasync = require('deasync');
31
+ const simpleParser = require('mailparser').simpleParser;
30
32
 
31
33
  var _config;
32
34
 
@@ -82,15 +84,35 @@ module.exports = function () {
82
84
  * @param {Number} sinceMinutes - Search for emails received since the specified amount of minutes into past.
83
85
  * @param {String|Regex} subject - Return email matching the specified subject.
84
86
  * @param {Number} timeout - Timeout (in milliseconds) for waiting for the message to arrive.
85
- * @return {Object} Email body and TO, FROM, SUBJECT, DATE headers.
87
+ * @return {Object} Email body, text, textAsHtml, attachments(every attachment have filename<String> and data<Buffer>) and TO, FROM, SUBJECT, DATE headers.
86
88
  * @example <caption>[javascript] Usage example</caption>
87
89
  * email.init('[YOUR_EMAIL]@gmail.com', 'password', 'imap.gmail.com', 993, true, 3000);
88
90
  * var mail = email.getLastEmail(60, 'email subject', 5000);
89
91
  * log.info(mail);
92
+ *
93
+ * if(r.attachments && r.attachments.length > 0){
94
+ * const fs = require('fs');
95
+ * r.attachments.map((attachment) => {
96
+ * let fileDescriptor;
97
+ * try{
98
+ * fileDescriptor = fs.openSync(attachment.filename, 'w');
99
+ * } catch(e) {
100
+ * throw 'could not open file: ' + e;
101
+ * }
102
+ *
103
+ * try{
104
+ * fs.writeFileSync(fileDescriptor, attachment.data);
105
+ * } catch(e) {
106
+ * throw 'error writing file: ' + e;
107
+ * }
108
+ *
109
+ * fs.closeSync(fileDescriptor);
110
+ * });
111
+ * }
90
112
  */
91
113
 
92
114
 
93
- module.getLastEmail = function (sinceMinutes, subject, timeout) {
115
+ module.getLastEmail = async function (sinceMinutes, subject, timeout) {
94
116
  _utils.default.assertArgumentNumberNonNegative(sinceMinutes, 'sinceMinutes');
95
117
 
96
118
  _utils.default.assertArgumentNumberNonNegative(timeout, 'timeout');
@@ -100,54 +122,80 @@ module.exports = function () {
100
122
  var err;
101
123
 
102
124
  while (!err && !mail && new Date().getTime() - now < timeout) {
103
- var done = false;
104
- imaps.connect(_config).then(function (connection) {
105
- return connection.openBox('INBOX').then(function () {
106
- // fetch unseen emails from the last sinceMinutes
107
- var startDate = new Date();
108
- startDate.setTime(Date.now() - sinceMinutes * 60 * 1000);
109
- startDate = startDate.toISOString();
110
- var searchCriteria = ['UNSEEN', ['SINCE', startDate]]; // fetch certain headers and stripped down body
111
-
112
- var fetchOptions = {
113
- bodies: ['HEADER.FIELDS (FROM TO SUBJECT DATE)', '1'],
114
- markSeen: false
115
- };
116
- return connection.search(searchCriteria, fetchOptions).then(function (results) {
117
- for (var result of results) {
118
- if (subject.constructor.name === 'RegExp') {
119
- if (subject.test(result.parts[0].body.subject[0])) {
120
- let to = result.parts[0].body.to ? result.parts[0].body.to[0] : null;
121
- mail = {
122
- from: result.parts[0].body.from[0],
123
- to: to,
124
- subject: result.parts[0].body.subject[0],
125
- date: result.parts[0].body.date[0],
126
- body: result.parts[1].body
127
- };
128
- }
129
- } else {
130
- if (subject === result.parts[0].body.subject[0]) {
131
- let to = result.parts[0].body.to ? result.parts[0].body.to[0] : null;
132
- mail = {
133
- from: result.parts[0].body.from[0],
134
- to: to,
135
- subject: result.parts[0].body.subject[0],
136
- date: result.parts[0].body.date[0],
137
- body: result.parts[1].body
138
- };
139
- }
140
- }
141
- }
125
+ try {
126
+ const connection = await imaps.connect(_config);
127
+ await connection.openBox('INBOX'); // fetch unseen emails from the last sinceMinutes
128
+
129
+ var startDate = new Date();
130
+ startDate.setTime(Date.now() - sinceMinutes * 60 * 1000);
131
+ startDate = startDate.toISOString();
132
+ var searchCriteria = ['UNSEEN', ['SINCE', startDate]]; // fetch certain headers and stripped down body
133
+
134
+ var fetchOptions = {
135
+ bodies: ['HEADER.FIELDS (FROM TO SUBJECT DATE)', 'TEXT'],
136
+ struct: true,
137
+ markSeen: false
138
+ };
139
+ const results = await connection.search(searchCriteria, fetchOptions);
140
+
141
+ for (var result of results) {
142
+ const headerPart = _lodash.default.find(result.parts, {
143
+ 'which': fetchOptions.bodies[0]
144
+ });
142
145
 
143
- done = true;
146
+ const bodyPart = _lodash.default.find(result.parts, {
147
+ 'which': fetchOptions.bodies[1]
144
148
  });
145
- });
146
- }).catch(function (e) {
149
+
150
+ const id = result.attributes.uid;
151
+ const idHeader = 'Imap-Id: ' + id + '\r\n';
152
+ const simple = await simpleParser(idHeader + bodyPart.body);
153
+ const attachments = [];
154
+ const parts = imaps.getParts(result.attributes.struct);
155
+
156
+ for (const part of parts) {
157
+ if (part.disposition && part.disposition.type.toUpperCase() === 'ATTACHMENT') {
158
+ const partData = await connection.getPartData(result, part);
159
+ attachments.push({
160
+ filename: part.disposition.params.filename,
161
+ data: partData
162
+ });
163
+ }
164
+ }
165
+
166
+ let body;
167
+ let html;
168
+ let textAsHtml;
169
+
170
+ if (simple.html || simple.text || simple.textAsHtml) {
171
+ // parsed success
172
+ body = bodyPart.text;
173
+ html = simple.html;
174
+ textAsHtml = simple.textAsHtml;
175
+ } else {
176
+ // don't parsed
177
+ body = bodyPart.body;
178
+ }
179
+
180
+ if (headerPart) {
181
+ if (subject && (subject.constructor.name === 'RegExp' && subject.test(headerPart.body.subject[0]) || subject === headerPart.body.subject[0])) {
182
+ let to = headerPart.body.to ? headerPart.body.to[0] : null;
183
+ mail = {
184
+ from: headerPart.body.from[0],
185
+ to: to,
186
+ subject: headerPart.body.subject[0],
187
+ date: headerPart.body.date[0],
188
+ body: body,
189
+ attachments: attachments,
190
+ textAsHtml: textAsHtml,
191
+ html: html
192
+ };
193
+ }
194
+ }
195
+ }
196
+ } catch (e) {
147
197
  err = e;
148
- });
149
- deasync.loopWhile(() => !done && !err);
150
- deasync.sleep(500);
198
+ }
151
199
  }
152
200
 
153
201
  if (err) {
@@ -161,4 +209,4 @@ module.exports = function () {
161
209
 
162
210
  return module;
163
211
  };
164
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1lbWFpbC5qcyJdLCJuYW1lcyI6WyJlcnJIZWxwZXIiLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsImltYXBzIiwiZGVhc3luYyIsIl9jb25maWciLCJpc0luaXRpYWxpemVkIiwidW5kZWZpbmVkIiwiaW5pdCIsInVzZXIiLCJwYXNzd29yZCIsImhvc3QiLCJwb3J0IiwidGxzIiwiYXV0aFRpbWVvdXQiLCJlbmFibGVTTkkiLCJ1dGlscyIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiaW1hcCIsInRsc09wdGlvbnMiLCJzZXJ2ZXJuYW1lIiwiZ2V0TGFzdEVtYWlsIiwic2luY2VNaW51dGVzIiwic3ViamVjdCIsInRpbWVvdXQiLCJtYWlsIiwibm93IiwiRGF0ZSIsImdldFRpbWUiLCJlcnIiLCJkb25lIiwiY29ubmVjdCIsInRoZW4iLCJjb25uZWN0aW9uIiwib3BlbkJveCIsInN0YXJ0RGF0ZSIsInNldFRpbWUiLCJ0b0lTT1N0cmluZyIsInNlYXJjaENyaXRlcmlhIiwiZmV0Y2hPcHRpb25zIiwiYm9kaWVzIiwibWFya1NlZW4iLCJzZWFyY2giLCJyZXN1bHRzIiwicmVzdWx0IiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsInBhcnRzIiwiYm9keSIsInRvIiwiZnJvbSIsImRhdGUiLCJjYXRjaCIsImUiLCJsb29wV2hpbGUiLCJzbGVlcCIsIk94RXJyb3IiLCJlcnJvckNvZGUiLCJFTUFJTF9FUlJPUiIsInRvU3RyaW5nIiwiVElNRU9VVCJdLCJtYXBwaW5ncyI6Ijs7OztBQWNBOztBQUNBOzs7O0FBZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBLElBQUlBLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGtCQUFELENB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LFlBQUFBLElBQUksR0FBRyxJQUFQO0FBQ0gsV0EzQk0sQ0FBUDtBQTRCSCxTQXpDTSxDQUFQO0FBMENILE9BM0NELEVBMkNHdUIsS0EzQ0gsQ0EyQ1MsVUFBVUMsQ0FBVixFQUFhO0FBQ2xCekIsUUFBQUEsR0FBRyxHQUFHeUIsQ0FBTjtBQUNILE9BN0NEO0FBK0NBcEQsTUFBQUEsT0FBTyxDQUFDcUQsU0FBUixDQUFrQixNQUFNLENBQUN6QixJQUFELElBQVMsQ0FBQ0QsR0FBbEM7QUFDQTNCLE1BQUFBLE9BQU8sQ0FBQ3NELEtBQVIsQ0FBYyxHQUFkO0FBQ0g7O0FBRUQsUUFBSTNCLEdBQUosRUFBUztBQUNMLFlBQU0sSUFBSTRCLG9CQUFKLENBQVk1RCxTQUFTLENBQUM2RCxTQUFWLENBQW9CQyxXQUFoQyxFQUE2QzlCLEdBQUcsQ0FBQytCLFFBQUosRUFBN0MsQ0FBTjtBQUNILEtBRkQsTUFFTyxJQUFJLENBQUNuQyxJQUFMLEVBQVc7QUFDZCxZQUFNLElBQUlnQyxvQkFBSixDQUFZNUQsU0FBUyxDQUFDNkQsU0FBVixDQUFvQkcsT0FBaEMsRUFBeUMsa0NBQWtDckMsT0FBbEMsR0FBNEMsTUFBckYsQ0FBTjtBQUNIOztBQUVELFdBQU9DLElBQVA7QUFDSCxHQXBFRDs7QUFzRUEsU0FBTzFCLE1BQVA7QUFDSCxDQWpJRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGVtYWlsXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggZW1haWwgdmlhIElNQVAuXHJcbiAqL1xyXG5cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG52YXIgZXJySGVscGVyID0gcmVxdWlyZSgnLi4vZXJyb3JzL2hlbHBlcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBpbWFwcyA9IHJlcXVpcmUoJ2ltYXAtc2ltcGxlJyk7XHJcbiAgICB2YXIgZGVhc3luYyA9IHJlcXVpcmUoJ2RlYXN5bmMnKTtcclxuXHJcbiAgICB2YXIgX2NvbmZpZztcclxuXHJcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBfY29uZmlnICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0IGVtYWlsIGNvbm5lY3Rpb24gZGV0YWlscy5cclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXNlciAtIFVzZXJuYW1lIChlLmcuICd5b3VyQGVtYWlsLmFkZHJlc3MnKS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzd29yZCAtIFBhc3N3b3JkLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhvc3QgLSBIb3N0IG5hbWUgKGUuZy4gJ2ltYXAuZ21haWwuY29tJykuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gcG9ydCAtIFBvcnQgbnVtYmVyIChlLmcuIDk5MykuXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHRscyAtIHRydWUgdG8gdXNlIFRMUywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGF1dGhUaW1lb3V0IC0gQXV0aGVudGljYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW49fSBlbmFibGVTTkkgLSBFbmFibGUgc2VuZGluZyBTTkkgd2hlbiBlc3RhYmxpc2hpbmcgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHNvbWUgbWFpbCBzZXJ2ZXJzLiBEZWZhdWx0IGlzIGZhbHNlLiBcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmluaXQgPSBmdW5jdGlvbih1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCwgdGxzLCBhdXRoVGltZW91dCwgZW5hYmxlU05JKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyh1c2VyLCAndXNlcicpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcocGFzc3dvcmQsICdwYXNzd29yZCcpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcoaG9zdCwgJ2hvc3QnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKHBvcnQsICdwb3J0Jyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sKHRscywgJ3RscycpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoYXV0aFRpbWVvdXQsICdhdXRoVGltZW91dCcpO1xyXG5cclxuICAgICAgICBfY29uZmlnID0ge1xyXG4gICAgICAgICAgICBpbWFwOiB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiB1c2VyLFxyXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgaG9zdDogaG9zdCxcclxuICAgICAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgICAgICB0bHM6IHRscyxcclxuICAgICAgICAgICAgICAgIGF1dGhUaW1lb3V0OiBhdXRoVGltZW91dFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHNlcnZlcm5hbWUgaWYgU05JIGlzIGVuYWJsZWQgb3Igd2UgYXJlIHVzaW5nIEdtYWlsXHJcbiAgICAgICAgaWYgKGVuYWJsZVNOSSB8fCBob3N0ID09PSAnaW1hcC5nbWFpbC5jb20nKSB7XHJcbiAgICAgICAgICAgIF9jb25maWcuaW1hcC50bHNPcHRpb25zID0geyBzZXJ2ZXJuYW1lOiBob3N0IH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBsYXN0IHVuc2VlbiBlbWFpbC5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRMYXN0RW1haWxcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzaW5jZU1pbnV0ZXMgLSBTZWFyY2ggZm9yIGVtYWlscyByZWNlaXZlZCBzaW5jZSB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiBtaW51dGVzIGludG8gcGFzdC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ2V4fSBzdWJqZWN0IC0gUmV0dXJuIGVtYWlsIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgc3ViamVjdC5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lb3V0IC0gVGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKSBmb3Igd2FpdGluZyBmb3IgdGhlIG1lc3NhZ2UgdG8gYXJyaXZlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBFbWFpbCBib2R5IGFuZCBUTywgRlJPTSwgU1VCSkVDVCwgREFURSBoZWFkZXJzLlxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiBlbWFpbC5pbml0KCdbWU9VUl9FTUFJTF1AZ21haWwuY29tJywgJ3Bhc3N3b3JkJywgJ2ltYXAuZ21haWwuY29tJywgOTkzLCB0cnVlLCAzMDAwKTtcclxuICAgICAqIHZhciBtYWlsID0gZW1haWwuZ2V0TGFzdEVtYWlsKDYwLCAnZW1haWwgc3ViamVjdCcsIDUwMDApO1xyXG4gICAgICogbG9nLmluZm8obWFpbCk7XHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRMYXN0RW1haWwgPSBmdW5jdGlvbihzaW5jZU1pbnV0ZXMsIHN1YmplY3QsIHRpbWVvdXQpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKHNpbmNlTWludXRlcywgJ3NpbmNlTWludXRlcycpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuXHJcbiAgICAgICAgdmFyIG1haWw7XHJcbiAgICAgICAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgdmFyIGVycjtcclxuXHJcbiAgICAgICAgd2hpbGUgKCFlcnIgJiYgIW1haWwgJiYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSBub3cpIDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpbWFwcy5jb25uZWN0KF9jb25maWcpLnRoZW4oZnVuY3Rpb24gKGNvbm5lY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uLm9wZW5Cb3goJ0lOQk9YJykudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZmV0Y2ggdW5zZWVuIGVtYWlscyBmcm9tIHRoZSBsYXN0IHNpbmNlTWludXRlc1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZS5zZXRUaW1lKERhdGUubm93KCkgLSAoc2luY2VNaW51dGVzICogNjAgKiAxMDAwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaENyaXRlcmlhID0gWydVTlNFRU4nLCBbJ1NJTkNFJywgc3RhcnREYXRlXV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGZldGNoIGNlcnRhaW4gaGVhZGVycyBhbmQgc3RyaXBwZWQgZG93biBib2R5XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZldGNoT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9kaWVzOiBbJ0hFQURFUi5GSUVMRFMgKEZST00gVE8gU1VCSkVDVCBEQVRFKScsICcxJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtTZWVuOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uLnNlYXJjaChzZWFyY2hDcml0ZXJpYSwgZmV0Y2hPcHRpb25zKS50aGVuKGZ1bmN0aW9uIChyZXN1bHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3VsdCBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViamVjdC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJqZWN0LnRlc3QocmVzdWx0LnBhcnRzWzBdLmJvZHkuc3ViamVjdFswXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvID0gcmVzdWx0LnBhcnRzWzBdLmJvZHkudG8gPyByZXN1bHQucGFydHNbMF0uYm9keS50b1swXSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haWwgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiByZXN1bHQucGFydHNbMF0uYm9keS5mcm9tWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86IHRvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdDogcmVzdWx0LnBhcnRzWzBdLmJvZHkuc3ViamVjdFswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IHJlc3VsdC5wYXJ0c1swXS5ib2R5LmRhdGVbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiByZXN1bHQucGFydHNbMV0uYm9keVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YmplY3QgPT09IHJlc3VsdC5wYXJ0c1swXS5ib2R5LnN1YmplY3RbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvID0gcmVzdWx0LnBhcnRzWzBdLmJvZHkudG8gPyByZXN1bHQucGFydHNbMF0uYm9keS50b1swXSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haWwgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiByZXN1bHQucGFydHNbMF0uYm9keS5mcm9tWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86IHRvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdDogcmVzdWx0LnBhcnRzWzBdLmJvZHkuc3ViamVjdFswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IHJlc3VsdC5wYXJ0c1swXS5ib2R5LmRhdGVbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiByZXN1bHQucGFydHNbMV0uYm9keVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgZXJyID0gZTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSAmJiAhZXJyKTtcclxuICAgICAgICAgICAgZGVhc3luYy5zbGVlcCg1MDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkVNQUlMX0VSUk9SLCBlcnIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghbWFpbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRJTUVPVVQsIFwiQ291bGRuJ3QgZ2V0IGFuIGVtYWlsIHdpdGhpbiBcIiArIHRpbWVvdXQgKyAnIG1zLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1haWw7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdfQ==
212
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1lbWFpbC5qcyJdLCJuYW1lcyI6WyJlcnJIZWxwZXIiLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsImltYXBzIiwic2ltcGxlUGFyc2VyIiwiX2NvbmZpZyIsImlzSW5pdGlhbGl6ZWQiLCJ1bmRlZmluZWQiLCJpbml0IiwidXNlciIsInBhc3N3b3JkIiwiaG9zdCIsInBvcnQiLCJ0bHMiLCJhdXRoVGltZW91dCIsImVuYWJsZVNOSSIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJpbWFwIiwidGxzT3B0aW9ucyIsInNlcnZlcm5hbWUiLCJnZXRMYXN0RW1haWwiLCJzaW5jZU1pbnV0ZXMiLCJzdWJqZWN0IiwidGltZW91dCIsIm1haWwiLCJub3ciLCJEYXRlIiwiZ2V0VGltZSIsImVyciIsImNvbm5lY3Rpb24iLCJjb25uZWN0Iiwib3BlbkJveCIsInN0YXJ0RGF0ZSIsInNldFRpbWUiLCJ0b0lTT1N0cmluZyIsInNlYXJjaENyaXRlcmlhIiwiZmV0Y2hPcHRpb25zIiwiYm9kaWVzIiwic3RydWN0IiwibWFya1NlZW4iLCJyZXN1bHRzIiwic2VhcmNoIiwicmVzdWx0IiwiaGVhZGVyUGFydCIsIl8iLCJmaW5kIiwicGFydHMiLCJib2R5UGFydCIsImlkIiwiYXR0cmlidXRlcyIsInVpZCIsImlkSGVhZGVyIiwic2ltcGxlIiwiYm9keSIsImF0dGFjaG1lbnRzIiwiZ2V0UGFydHMiLCJwYXJ0IiwiZGlzcG9zaXRpb24iLCJ0eXBlIiwidG9VcHBlckNhc2UiLCJwYXJ0RGF0YSIsImdldFBhcnREYXRhIiwicHVzaCIsImZpbGVuYW1lIiwicGFyYW1zIiwiZGF0YSIsImh0bWwiLCJ0ZXh0QXNIdG1sIiwidGV4dCIsImNvbnN0cnVjdG9yIiwibmFtZSIsInRlc3QiLCJ0byIsImZyb20iLCJkYXRlIiwiZSIsIk94RXJyb3IiLCJlcnJvckNvZGUiLCJFTUFJTF9FUlJPUiIsInRvU3RyaW5nIiwiVElNRU9VVCJdLCJtYXBwaW5ncyI6Ijs7OztBQWNBOztBQUNBOztBQUNBOzs7O0FBaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQSxJQUFJQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxrQkFBRCxDQUF2Qjs7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFlBQVc7QUFDeEIsTUFBSUMsS0FBSyxHQUFHSCxPQUFPLENBQUMsYUFBRCxDQUFuQjs7QUFDQSxRQUFNSSxZQUFZLEdBQUdKLE9BQU8sQ0FBQyxZQUFELENBQVAsQ0FBc0JJLFlBQTNDOztBQUNBLE1BQUlDLE9BQUo7O0FBRUFKLEVBQUFBLE1BQU0sQ0FBQ0ssYUFBUCxHQUF1QixZQUFXO0FBQzlCLFdBQU9ELE9BQU8sS0FBS0UsU0FBbkI7QUFDSCxHQUZEO0FBSUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lOLEVBQUFBLE1BQU0sQ0FBQ08sSUFBUCxHQUFjLFVBQVNDLElBQVQsRUFBZUMsUUFBZixFQUF5QkMsSUFBekIsRUFBK0JDLElBQS9CLEVBQXFDQyxHQUFyQyxFQUEwQ0MsV0FBMUMsRUFBdURDLFNBQXZELEVBQWtFO0FBQzVFQyxtQkFBTUMsNEJBQU4sQ0FBbUNSLElBQW5DLEVBQXlDLE1BQXpDOztBQUNBTyxtQkFBTUMsNEJBQU4sQ0FBbUNQLFFBQW5DLEVBQTZDLFVBQTdDOztBQUNBTSxtQkFBTUMsNEJBQU4sQ0FBbUNOLElBQW5DLEVBQXlDLE1BQXpDOztBQUNBSyxtQkFBTUUsK0JBQU4sQ0FBc0NOLElBQXRDLEVBQTRDLE1BQTVDOztBQUNBSSxtQkFBTUcsa0JBQU4sQ0FBeUJOLEdBQXpCLEVBQThCLEtBQTlCOztBQUNBRyxtQkFBTUUsK0JBQU4sQ0FBc0NKLFdBQXRDLEVBQW1ELGFBQW5EOztB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QUFTO0FBQ0wsWUFBTSxJQUFJZ0Qsb0JBQUosQ0FBWWhGLFNBQVMsQ0FBQ2lGLFNBQVYsQ0FBb0JDLFdBQWhDLEVBQTZDbEQsR0FBRyxDQUFDbUQsUUFBSixFQUE3QyxDQUFOO0FBQ0gsS0FGRCxNQUVPLElBQUksQ0FBQ3ZELElBQUwsRUFBVztBQUNkLFlBQU0sSUFBSW9ELG9CQUFKLENBQVloRixTQUFTLENBQUNpRixTQUFWLENBQW9CRyxPQUFoQyxFQUF5QyxrQ0FBa0N6RCxPQUFsQyxHQUE0QyxNQUFyRixDQUFOO0FBQ0g7O0FBRUQsV0FBT0MsSUFBUDtBQUNILEdBL0ZEOztBQWlHQSxTQUFPMUIsTUFBUDtBQUNILENBL0tEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgZW1haWxcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBlbWFpbCB2aWEgSU1BUC5cclxuICovXHJcblxyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbnZhciBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGltYXBzID0gcmVxdWlyZSgnaW1hcC1zaW1wbGUnKTtcclxuICAgIGNvbnN0IHNpbXBsZVBhcnNlciA9IHJlcXVpcmUoJ21haWxwYXJzZXInKS5zaW1wbGVQYXJzZXI7XHJcbiAgICB2YXIgX2NvbmZpZztcclxuXHJcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBfY29uZmlnICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0IGVtYWlsIGNvbm5lY3Rpb24gZGV0YWlscy5cclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXNlciAtIFVzZXJuYW1lIChlLmcuICd5b3VyQGVtYWlsLmFkZHJlc3MnKS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzd29yZCAtIFBhc3N3b3JkLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhvc3QgLSBIb3N0IG5hbWUgKGUuZy4gJ2ltYXAuZ21haWwuY29tJykuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gcG9ydCAtIFBvcnQgbnVtYmVyIChlLmcuIDk5MykuXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHRscyAtIHRydWUgdG8gdXNlIFRMUywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGF1dGhUaW1lb3V0IC0gQXV0aGVudGljYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW49fSBlbmFibGVTTkkgLSBFbmFibGUgc2VuZGluZyBTTkkgd2hlbiBlc3RhYmxpc2hpbmcgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHNvbWUgbWFpbCBzZXJ2ZXJzLiBEZWZhdWx0IGlzIGZhbHNlLiBcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmluaXQgPSBmdW5jdGlvbih1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCwgdGxzLCBhdXRoVGltZW91dCwgZW5hYmxlU05JKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyh1c2VyLCAndXNlcicpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcocGFzc3dvcmQsICdwYXNzd29yZCcpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcoaG9zdCwgJ2hvc3QnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKHBvcnQsICdwb3J0Jyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sKHRscywgJ3RscycpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoYXV0aFRpbWVvdXQsICdhdXRoVGltZW91dCcpO1xyXG5cclxuICAgICAgICBfY29uZmlnID0ge1xyXG4gICAgICAgICAgICBpbWFwOiB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiB1c2VyLFxyXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgaG9zdDogaG9zdCxcclxuICAgICAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgICAgICB0bHM6IHRscyxcclxuICAgICAgICAgICAgICAgIGF1dGhUaW1lb3V0OiBhdXRoVGltZW91dFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHNlcnZlcm5hbWUgaWYgU05JIGlzIGVuYWJsZWQgb3Igd2UgYXJlIHVzaW5nIEdtYWlsXHJcbiAgICAgICAgaWYgKGVuYWJsZVNOSSB8fCBob3N0ID09PSAnaW1hcC5nbWFpbC5jb20nKSB7XHJcbiAgICAgICAgICAgIF9jb25maWcuaW1hcC50bHNPcHRpb25zID0geyBzZXJ2ZXJuYW1lOiBob3N0IH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBsYXN0IHVuc2VlbiBlbWFpbC5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRMYXN0RW1haWxcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzaW5jZU1pbnV0ZXMgLSBTZWFyY2ggZm9yIGVtYWlscyByZWNlaXZlZCBzaW5jZSB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiBtaW51dGVzIGludG8gcGFzdC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ2V4fSBzdWJqZWN0IC0gUmV0dXJuIGVtYWlsIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgc3ViamVjdC5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lb3V0IC0gVGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKSBmb3Igd2FpdGluZyBmb3IgdGhlIG1lc3NhZ2UgdG8gYXJyaXZlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBFbWFpbCBib2R5LCB0ZXh0LCB0ZXh0QXNIdG1sLCBhdHRhY2htZW50cyhldmVyeSBhdHRhY2htZW50IGhhdmUgZmlsZW5hbWU8U3RyaW5nPiBhbmQgZGF0YTxCdWZmZXI+KSBhbmQgVE8sIEZST00sIFNVQkpFQ1QsIERBVEUgaGVhZGVycy5cclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogZW1haWwuaW5pdCgnW1lPVVJfRU1BSUxdQGdtYWlsLmNvbScsICdwYXNzd29yZCcsICdpbWFwLmdtYWlsLmNvbScsIDk5MywgdHJ1ZSwgMzAwMCk7XHJcbiAgICAgKiB2YXIgbWFpbCA9IGVtYWlsLmdldExhc3RFbWFpbCg2MCwgJ2VtYWlsIHN1YmplY3QnLCA1MDAwKTtcclxuICAgICAqIGxvZy5pbmZvKG1haWwpO1xyXG4gICAgICogXHJcbiAgICAgKiBpZihyLmF0dGFjaG1lbnRzICYmIHIuYXR0YWNobWVudHMubGVuZ3RoID4gMCl7XHJcbiAgICAgKiBcdGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcclxuICAgICAqIFx0ci5hdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQpID0+IHtcclxuICAgICAqIFx0XHRsZXQgZmlsZURlc2NyaXB0b3I7XHJcbiAgICAgKiBcdFx0dHJ5e1xyXG4gICAgICogXHRcdFx0ZmlsZURlc2NyaXB0b3IgPSBmcy5vcGVuU3luYyhhdHRhY2htZW50LmZpbGVuYW1lLCAndycpO1xyXG4gICAgICogXHRcdH0gY2F0Y2goZSkge1xyXG4gICAgICogXHRcdFx0dGhyb3cgJ2NvdWxkIG5vdCBvcGVuIGZpbGU6ICcgKyBlO1xyXG4gICAgICogXHRcdH1cclxuICAgICAqIFx0XHRcclxuICAgICAqIFx0XHR0cnl7XHJcbiAgICAgKiBcdFx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVEZXNjcmlwdG9yLCBhdHRhY2htZW50LmRhdGEpO1xyXG4gICAgICogXHRcdH0gY2F0Y2goZSkge1xyXG4gICAgICogXHRcdFx0dGhyb3cgJ2Vycm9yIHdyaXRpbmcgZmlsZTogJyArIGU7XHJcbiAgICAgKiBcdFx0fVxyXG4gICAgICogXHRcdFxyXG4gICAgICogXHRcdGZzLmNsb3NlU3luYyhmaWxlRGVzY3JpcHRvcik7XHJcbiAgICAgKiBcdH0pO1xyXG4gICAgICogfVxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZ2V0TGFzdEVtYWlsID0gYXN5bmMgZnVuY3Rpb24oc2luY2VNaW51dGVzLCBzdWJqZWN0LCB0aW1lb3V0KSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShzaW5jZU1pbnV0ZXMsICdzaW5jZU1pbnV0ZXMnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcblxyXG4gICAgICAgIHZhciBtYWlsO1xyXG4gICAgICAgIHZhciBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xyXG4gICAgICAgIHZhciBlcnI7XHJcblxyXG4gICAgICAgIHdoaWxlICghZXJyICYmICFtYWlsICYmICgobmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gbm93KSA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBhd2FpdCBpbWFwcy5jb25uZWN0KF9jb25maWcpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5vcGVuQm94KCdJTkJPWCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGZldGNoIHVuc2VlbiBlbWFpbHMgZnJvbSB0aGUgbGFzdCBzaW5jZU1pbnV0ZXNcclxuICAgICAgICAgICAgICAgIHZhciBzdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldFRpbWUoRGF0ZS5ub3coKSAtIChzaW5jZU1pbnV0ZXMgKiA2MCAqIDEwMDApKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZS50b0lTT1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlYXJjaENyaXRlcmlhID0gWydVTlNFRU4nLCBbJ1NJTkNFJywgc3RhcnREYXRlXV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gZmV0Y2ggY2VydGFpbiBoZWFkZXJzIGFuZCBzdHJpcHBlZCBkb3duIGJvZHlcclxuICAgICAgICAgICAgICAgIHZhciBmZXRjaE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9kaWVzOiBbJ0hFQURFUi5GSUVMRFMgKEZST00gVE8gU1VCSkVDVCBEQVRFKScsICdURVhUJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmtTZWVuOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgY29ubmVjdGlvbi5zZWFyY2goc2VhcmNoQ3JpdGVyaWEsIGZldGNoT3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJQYXJ0ID0gXy5maW5kKHJlc3VsdC5wYXJ0cywgeyAnd2hpY2gnOiBmZXRjaE9wdGlvbnMuYm9kaWVzWzBdIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlQYXJ0ID0gXy5maW5kKHJlc3VsdC5wYXJ0cywgeyAnd2hpY2gnOiBmZXRjaE9wdGlvbnMuYm9kaWVzWzFdIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHJlc3VsdC5hdHRyaWJ1dGVzLnVpZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZEhlYWRlciA9ICdJbWFwLUlkOiAnK2lkKydcXHJcXG4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpbXBsZSA9IGF3YWl0IHNpbXBsZVBhcnNlcihpZEhlYWRlcitib2R5UGFydC5ib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gaW1hcHMuZ2V0UGFydHMocmVzdWx0LmF0dHJpYnV0ZXMuc3RydWN0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0LmRpc3Bvc2l0aW9uICYmIHBhcnQuZGlzcG9zaXRpb24udHlwZS50b1VwcGVyQ2FzZSgpID09PSAnQVRUQUNITUVOVCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnREYXRhID0gYXdhaXQgY29ubmVjdGlvbi5nZXRQYXJ0RGF0YShyZXN1bHQsIHBhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IHBhcnQuZGlzcG9zaXRpb24ucGFyYW1zLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHBhcnREYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRleHRBc0h0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpbXBsZS5odG1sIHx8IHNpbXBsZS50ZXh0IHx8IHNpbXBsZS50ZXh0QXNIdG1sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlZCBzdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBib2R5UGFydC50ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gc2ltcGxlLmh0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBc0h0bWwgPSBzaW1wbGUudGV4dEFzSHRtbDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBwYXJzZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGJvZHlQYXJ0LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyUGFydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0ICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3ViamVjdC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiBzdWJqZWN0LnRlc3QoaGVhZGVyUGFydC5ib2R5LnN1YmplY3RbMF0pKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJqZWN0ID09PSBoZWFkZXJQYXJ0LmJvZHkuc3ViamVjdFswXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG8gPSBoZWFkZXJQYXJ0LmJvZHkudG8gPyBoZWFkZXJQYXJ0LmJvZHkudG9bMF0gOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haWwgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogaGVhZGVyUGFydC5ib2R5LmZyb21bMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86IHRvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3Q6IGhlYWRlclBhcnQuYm9keS5zdWJqZWN0WzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IGhlYWRlclBhcnQuYm9keS5kYXRlWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBc0h0bWw6IHRleHRBc0h0bWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogaHRtbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgZXJyID0gZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkVNQUlMX0VSUk9SLCBlcnIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghbWFpbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRJTUVPVVQsIFwiQ291bGRuJ3QgZ2V0IGFuIGVtYWlsIHdpdGhpbiBcIiArIHRpbWVvdXQgKyAnIG1zLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1haWw7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdfQ==
@@ -30,8 +30,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
30
30
  * @name eyes
31
31
  * @description Provides access to Applitools Eyes service.
32
32
  */
33
- var deasync = require('deasync');
34
-
35
33
  const DEFAULT_VIEWPORT = {
36
34
  width: 1440,
37
35
  height: 900
@@ -169,28 +167,13 @@ class ApplitoolsModule extends _OxygenModule.default {
169
167
  */
170
168
 
171
169
 
172
- checkWindow(name, matchTimeout) {
170
+ async checkWindow(name, matchTimeout) {
173
171
  if (!this._eyes) {
174
172
  return false;
175
173
  }
176
174
 
177
- let done = false;
178
- let result;
179
-
180
- this._driver.call(async () => {
181
- const resultPromise = this._eyes.checkWindow(name, matchTimeout);
182
-
183
- if (resultPromise && resultPromise.then) {
184
- result = await resultPromise;
185
- done = true;
186
- } else {
187
- done = true;
188
- result = resultPromise;
189
- }
190
- });
191
-
192
- deasync.loopWhile(() => {
193
- return !done;
175
+ const result = await this._driver.call(async () => {
176
+ return await this._eyes.checkWindow(name, matchTimeout);
194
177
  });
195
178
 
196
179
  if (result._asExpected) {
@@ -203,4 +186,4 @@ class ApplitoolsModule extends _OxygenModule.default {
203
186
  }
204
187
 
205
188
  exports.default = ApplitoolsModule;
206
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1leWVzLmpzIl0sIm5hbWVzIjpbImRlYXN5bmMiLCJyZXF1aXJlIiwiREVGQVVMVF9WSUVXUE9SVCIsIndpZHRoIiwiaGVpZ2h0IiwiTU9EVUxFX05BTUUiLCJBcHBsaXRvb2xzTW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX2V5ZXMiLCJuYW1lIiwiaW5pdCIsIm1vZHVsZSIsImFwaUtleSIsIl9leWVzQ29uZmlnIiwiYXBwbGl0b29sc09wdHMiLCJNb2R1bGVFcnJvciIsIl92aWV3cG9ydCIsIk9iamVjdCIsImFzc2lnbiIsInZpZXdwb3J0IiwiX2FwaUtleSIsImFwcGxpdG9vbHNLZXkiLCJrZXkiLCJwcm9jZXNzIiwiZW52IiwiQVBQTElUT09MU19LRVkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJnZXREcml2ZXIiLCJkcml2ZXIiLCJfZHJpdmVyIiwiRXllcyIsInNldEFwaUtleSIsImFwcE5hbWUiLCJ0ZXN0TmFtZSIsIm9wZW4iLCJlIiwibWVzc2FnZSIsImRpc3Bvc2UiLCJpc0luaXRpYWxpemVkIiwicmVzdWx0cyIsImNsb3NlIiwiYWJvcnRJZk5vdENsb3NlZCIsImNoZWNrIiwidGFyZ2V0IiwiVGFyZ2V0IiwicmVzdWx0Iiwid2luZG93IiwiZnVsbHkiLCJfYXNFeHBlY3RlZCIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJlcnJvckNvZGUiLCJBU1NFUlRfRVJST1IiLCJjaGVja1dpbmRvdyIsIm1hdGNoVGltZW91dCIsImRvbmUiLCJyZXN1bHRQcm9taXNlIiwidGhlbiIsImxvb3BXaGlsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBY0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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ekM7O0FBRUEsUUFBSVYsTUFBTSxDQUFDRyxXQUFYLEVBQXdCO0FBQ3BCLGFBQU8sSUFBUDtBQUNIOztBQUNELFVBQU0sSUFBSUMsb0JBQUosQ0FBWUMsZ0JBQVVDLFNBQVYsQ0FBb0JDLFlBQWhDLEVBQThDLElBQTlDLENBQU47QUFDSDs7QUExSXNEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgZXllc1xyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgYWNjZXNzIHRvIEFwcGxpdG9vbHMgRXllcyBzZXJ2aWNlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBPeHlnZW5Nb2R1bGUgZnJvbSAnLi4vY29yZS9PeHlnZW5Nb2R1bGUnO1xyXG5pbXBvcnQgTW9kdWxlRXJyb3IgZnJvbSAnLi4vZXJyb3JzL01vZHVsZUVycm9yJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVyckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxudmFyIGRlYXN5bmMgPSByZXF1aXJlKCdkZWFzeW5jJyk7XHJcblxyXG5jb25zdCBERUZBVUxUX1ZJRVdQT1JUID0ge1xyXG4gICAgd2lkdGg6IDE0NDAsXHJcbiAgICBoZWlnaHQ6IDkwMFxyXG59O1xyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICdleWVzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpdG9vbHNNb2R1bGUgZXh0ZW5kcyBPeHlnZW5Nb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgLy8gdGhpcyBtb2R1bGUgZG9lc24ndCByZXF1aXJlIGNhbGxpbmcgaW5pdCgpIG1ldGhvZFxyXG4gICAgICAgIHRoaXMuX2V5ZXMgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBBcHBsaXRvb2xzIEV5ZXMgc2Vzc2lvbi5cclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IG1vZHVsZSAtIEEgbW9kdWxlIG5hbWUgb3IgYSByZWZlcmVuY2UgdG8gdGhlIG1vZG9kdWxlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBFeWVzIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7YXBpS2V5fSBbYXBpS2V5XSAtIEFuIG9wdGlvbmFsIEFwcGxpdG9vbHMgQVBJIEtleS4gXHJcbiAgICAgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3QgcHJvdmlkZWQsIEFQSSBLZXkgbXVzdCBiZSBzcGVjaWZpZWQgaW4gdGhlIHRlc3QgY29uZmlndXJhdGlvbiBmaWxlLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KG1vZHVsZSwgYXBpS2V5ID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX2V5ZXNDb25maWcgPSB0aGlzLm9wdGlvbnMuYXBwbGl0b29sc09wdHM7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYXBwbGl0b29sc09wdHMpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE1vZHVsZUVycm9yKCdBcHBsaXRvb2xzIHNldHRpbmdzIGFyZSBtaXNzaW5nLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl92aWV3cG9ydCA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9WSUVXUE9SVCwgdGhpcy5fZXllc0NvbmZpZy52aWV3cG9ydCB8fCB7fSk7XHJcbiAgICAgICAgdGhpcy5fYXBpS2V5ID0gYXBpS2V5IHx8IHRoaXMub3B0aW9ucy5hcHBsaXRvb2xzS2V5IHx8IHRoaXMuX2V5ZXNDb25maWcua2V5IHx8IHByb2Nlc3MuZW52LkFQUExJVE9PTFNfS0VZIHx8IG51bGw7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fYXBpS2V5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2R1bGVFcnJvcignQVBJIGtleSBpcyBtaXNzaW5nLiBUbyB1c2UgQXBwbGl0b29scyBzZXJ2aWNlLCB5b3UgbXVzdCBzcGVjaWZ5IEFwcGxpdG9vbHMgQVBJIGtleS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5tb2R1bGVzLCBtb2R1bGUpKSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUgPSB0aGlzLm1vZHVsZXNbbW9kdWxlXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBNb2R1bGVFcnJvcihgTW9kdWxlIG5vdCBmb3VuZDogJHttb2R1bGV9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlLmdldERyaXZlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9kdWxlRXJyb3IoYFRoZSBtb2R1bGUgXCIke21vZHVsZS5uYW1lfVwiIGRvZXMgbm90IGhhdmUgXCJnZXREcml2ZXJcIiBmdW5jdGlvbiBpbXBsZW1lbnRlZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZHJpdmVyID0gbW9kdWxlLmdldERyaXZlcigpO1xyXG4gICAgICAgIHRoaXMuX2RyaXZlciA9IGRyaXZlcjtcclxuXHJcbiAgICAgICAgY29uc3QgRXllcyA9IHJlcXVpcmUoJ0BhcHBsaXRvb2xzL2V5ZXMtd2ViZHJpdmVyaW8nKS5FeWVzO1xyXG4gICAgICAgIHRoaXMuX2V5ZXMgPSBuZXcgRXllcygpO1xyXG4gICAgICAgIHRoaXMuX2V5ZXMuc2V0QXBpS2V5KHRoaXMuX2FwaUtleSk7XHJcblxyXG4gICAgICAgIGxldCBhcHBOYW1lID0gJ094eWdlbiBBcHAnO1xyXG4gICAgICAgIGxldCB0ZXN0TmFtZSA9ICdPeHlnZW4gVGVzdCc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBwTmFtZSAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLmFwcE5hbWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGFwcE5hbWUgPSB0aGlzLm9wdGlvbnMuYXBwTmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5uYW1lICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMubmFtZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGVzdE5hbWUgPSB0aGlzLm9wdGlvbnMubmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgZHJpdmVyLmNhbGwoKCkgPT4gdGhpcy5fZXllcy5vcGVuKGRyaXZlciwgYXBwTmFtZSwgdGVzdE5hbWUsIHRoaXMuX3ZpZXdwb3J0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2R1bGVFcnJvcihgRmFpbGVkIHRvIGluaXRpYWxpemUgXCJleWVzXCIgbW9kdWxlOiAke2UubWVzc2FnZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBDbG9zZXMgQXBwbGl0b29scyBFeWVzIHNlc3Npb24sIHRlcm1pbmF0ZXMgdGhlIHNlcXVlbmNlIG9mIGNoZWNrcG9pbnRzLCBhbmQgdGhlbiB3YWl0cyBmb3IgYW5kIHJldHVybnMgdGhlIHRlc3QgcmVzdWx0cy5cclxuICAgICAqIEBmdW5jdGlvbiBkaXNwb3NlXHJcbiAgICAgKiBAcmV0dXJuIHtUZXN0UmVzdWx0fSBFeWVzIHRlc3QgcmVzdWx0LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkaXNwb3NlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9leWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXN1bHRzID0gbnVsbDtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVzdWx0cyA9IHRoaXMuX2V5ZXMuY2xvc2UoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5fZXllcy5hYm9ydElmTm90Q2xvc2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2V5ZXMgPSBudWxsO1xyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFByZWZvcm0gdmlzdWFsIHZhbGlkYXRpb24gZm9yIGEgY2VydGFpbiB0YXJnZXQuXHJcbiAgICAgKiBAZnVuY3Rpb24gY2hlY2tcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQSBuYW1lIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWF0Y2guXHJcbiAgICAgKiBAcGFyYW0ge1RhcmdldH0gW3RhcmdldF0gLSBBbiBvcHRpb25hbCB0YXJnZXQgaW5zdGFuY2Ugd2hpY2ggZGVzY3JpYmVzIHdoZXRoZXIgd2Ugd2FudCBhIHdpbmRvdy9yZWdpb24vZnJhbWUuXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBBIHByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsaWRhdGlvbiBpcyBmaW5pc2hlZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY2hlY2sobmFtZSwgdGFyZ2V0ID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZXllcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IFRhcmdldCA9IHJlcXVpcmUoJ0BhcHBsaXRvb2xzL2V5ZXMtd2ViZHJpdmVyaW8nKS5UYXJnZXQ7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gIGF3YWl0IHRoaXMuX2V5ZXMuY2hlY2sobmFtZSwgdGFyZ2V0IHx8IFRhcmdldC53aW5kb3coKS5mdWxseSgpKTtcclxuICAgICAgICBpZiAocmVzdWx0Ll9hc0V4cGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBUYWtlcyBhIHNuYXBzaG90IG9mIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0IGFuZCBtYXRjaGVzIGl0IHdpdGhcclxuICAgICAqIHRoZSBleHBlY3RlZCBvdXRwdXQuXHJcbiAgICAgKiBAZnVuY3Rpb24gY2hlY2tXaW5kb3dcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT1dIC0gQW4gb3B0aW9uYWwgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc25hcHNob3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW21hdGNoVGltZW91dD0tMV0gLSBUaGUgYW1vdW50IG9mIHRpbWUgdG8gcmV0cnkgbWF0Y2hpbmcgKE1pbGxpc2Vjb25kcykuXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBBIHByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsaWRhdGlvbiBpcyBmaW5pc2hlZC5cclxuICAgICAqL1xyXG4gICAgY2hlY2tXaW5kb3cobmFtZSwgbWF0Y2hUaW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9leWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkb25lID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHJlc3VsdDtcclxuXHJcbiAgICAgICAgdGhpcy5fZHJpdmVyLmNhbGwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSB0aGlzLl9leWVzLmNoZWNrV2luZG93KG5hbWUsIG1hdGNoVGltZW91dCk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzdWx0UHJvbWlzZSAmJiByZXN1bHRQcm9taXNlLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHJlc3VsdFByb21pc2U7XHJcbiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0UHJvbWlzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiB7IHJldHVybiAhZG9uZTsgfSk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQuX2FzRXhwZWN0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBudWxsKTtcclxuICAgIH1cclxufVxyXG4iXX0=
189
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1leWVzLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfVklFV1BPUlQiLCJ3aWR0aCIsImhlaWdodCIsIk1PRFVMRV9OQU1FIiwiQXBwbGl0b29sc01vZHVsZSIsIk94eWdlbk1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsIl9leWVzIiwibmFtZSIsImluaXQiLCJtb2R1bGUiLCJhcGlLZXkiLCJfZXllc0NvbmZpZyIsImFwcGxpdG9vbHNPcHRzIiwiTW9kdWxlRXJyb3IiLCJfdmlld3BvcnQiLCJPYmplY3QiLCJhc3NpZ24iLCJ2aWV3cG9ydCIsIl9hcGlLZXkiLCJhcHBsaXRvb2xzS2V5Iiwia2V5IiwicHJvY2VzcyIsImVudiIsIkFQUExJVE9PTFNfS0VZIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0RHJpdmVyIiwiZHJpdmVyIiwiX2RyaXZlciIsIkV5ZXMiLCJyZXF1aXJlIiwic2V0QXBpS2V5IiwiYXBwTmFtZSIsInRlc3ROYW1lIiwib3BlbiIsImUiLCJtZXNzYWdlIiwiZGlzcG9zZSIsImlzSW5pdGlhbGl6ZWQiLCJyZXN1bHRzIiwiY2xvc2UiLCJhYm9ydElmTm90Q2xvc2VkIiwiY2hlY2siLCJ0YXJnZXQiLCJUYXJnZXQiLCJyZXN1bHQiLCJ3aW5kb3ciLCJmdWxseSIsIl9hc0V4cGVjdGVkIiwiT3hFcnJvciIsImVyckhlbHBlciIsImVycm9yQ29kZSIsIkFTU0VSVF9FUlJPUiIsImNoZWNrV2luZG93IiwibWF0Y2hUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFjQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQWpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBT0EsTUFBTUEsZ0JBQWdCLEdBQUc7QUFDckJD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S0FBS3hDLEtBQUwsQ0FBV3FDLEtBQVgsQ0FBaUJwQyxJQUFqQixFQUF1QnFDLE1BQU0sSUFBSUMsTUFBTSxDQUFDRSxNQUFQLEdBQWdCQyxLQUFoQixFQUFqQyxDQUF0Qjs7QUFDQSxRQUFJRixNQUFNLENBQUNHLFdBQVgsRUFBd0I7QUFDcEIsYUFBTyxJQUFQO0FBQ0g7O0FBQ0QsVUFBTSxJQUFJQyxvQkFBSixDQUFZQyxnQkFBVUMsU0FBVixDQUFvQkMsWUFBaEMsRUFBOEMsSUFBOUMsQ0FBTjtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ3FCLFFBQVhDLFdBQVcsQ0FBQy9DLElBQUQsRUFBT2dELFlBQVAsRUFBcUI7QUFDbEMsUUFBSSxDQUFDLEtBQUtqRCxLQUFWLEVBQWlCO0FBQ2IsYUFBTyxLQUFQO0FBQ0g7O0FBRUQsVUFBTXdDLE1BQU0sR0FBRyxNQUFNLEtBQUtqQixPQUFMLENBQWFILElBQWIsQ0FBa0IsWUFBVztBQUM5QyxhQUFPLE1BQU0sS0FBS3BCLEtBQUwsQ0FBV2dELFdBQVgsQ0FBdUIvQyxJQUF2QixFQUE2QmdELFlBQTdCLENBQWI7QUFDSCxLQUZvQixDQUFyQjs7QUFJQSxRQUFJVCxNQUFNLENBQUNHLFdBQVgsRUFBd0I7QUFDcEIsYUFBTyxJQUFQO0FBQ0g7O0FBQ0QsVUFBTSxJQUFJQyxvQkFBSixDQUFZQyxnQkFBVUMsU0FBVixDQUFvQkMsWUFBaEMsRUFBOEMsSUFBOUMsQ0FBTjtBQUNIOztBQTdIc0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBleWVzXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBhY2Nlc3MgdG8gQXBwbGl0b29scyBFeWVzIHNlcnZpY2UuXHJcbiAqL1xyXG5cclxuaW1wb3J0IE94eWdlbk1vZHVsZSBmcm9tICcuLi9jb3JlL094eWdlbk1vZHVsZSc7XHJcbmltcG9ydCBNb2R1bGVFcnJvciBmcm9tICcuLi9lcnJvcnMvTW9kdWxlRXJyb3InO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuY29uc3QgREVGQVVMVF9WSUVXUE9SVCA9IHtcclxuICAgIHdpZHRoOiAxNDQwLFxyXG4gICAgaGVpZ2h0OiA5MDBcclxufTtcclxuY29uc3QgTU9EVUxFX05BTUUgPSAnZXllcyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaXRvb2xzTW9kdWxlIGV4dGVuZHMgT3h5Z2VuTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIC8vIHRoaXMgbW9kdWxlIGRvZXNuJ3QgcmVxdWlyZSBjYWxsaW5nIGluaXQoKSBtZXRob2RcclxuICAgICAgICB0aGlzLl9leWVzID0gbnVsbDtcclxuICAgIH1cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgQXBwbGl0b29scyBFeWVzIHNlc3Npb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBtb2R1bGUgLSBBIG1vZHVsZSBuYW1lIG9yIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2RvZHVsZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggRXllcyBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge2FwaUtleX0gW2FwaUtleV0gLSBBbiBvcHRpb25hbCBBcHBsaXRvb2xzIEFQSSBLZXkuIFxyXG4gICAgICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHByb3ZpZGVkLCBBUEkgS2V5IG11c3QgYmUgc3BlY2lmaWVkIGluIHRoZSB0ZXN0IGNvbmZpZ3VyYXRpb24gZmlsZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5pdChtb2R1bGUsIGFwaUtleSA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLl9leWVzQ29uZmlnID0gdGhpcy5vcHRpb25zLmFwcGxpdG9vbHNPcHRzO1xyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmFwcGxpdG9vbHNPcHRzKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2R1bGVFcnJvcignQXBwbGl0b29scyBzZXR0aW5ncyBhcmUgbWlzc2luZy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdmlld3BvcnQgPSBPYmplY3QuYXNzaWduKERFRkFVTFRfVklFV1BPUlQsIHRoaXMuX2V5ZXNDb25maWcudmlld3BvcnQgfHwge30pO1xyXG4gICAgICAgIHRoaXMuX2FwaUtleSA9IGFwaUtleSB8fCB0aGlzLm9wdGlvbnMuYXBwbGl0b29sc0tleSB8fCB0aGlzLl9leWVzQ29uZmlnLmtleSB8fCBwcm9jZXNzLmVudi5BUFBMSVRPT0xTX0tFWSB8fCBudWxsO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2FwaUtleSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9kdWxlRXJyb3IoJ0FQSSBrZXkgaXMgbWlzc2luZy4gVG8gdXNlIEFwcGxpdG9vbHMgc2VydmljZSwgeW91IG11c3Qgc3BlY2lmeSBBcHBsaXRvb2xzIEFQSSBrZXkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMubW9kdWxlcywgbW9kdWxlKSkge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlID0gdGhpcy5tb2R1bGVzW21vZHVsZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTW9kdWxlRXJyb3IoYE1vZHVsZSBub3QgZm91bmQ6ICR7bW9kdWxlfS5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZS5nZXREcml2ZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE1vZHVsZUVycm9yKGBUaGUgbW9kdWxlIFwiJHttb2R1bGUubmFtZX1cIiBkb2VzIG5vdCBoYXZlIFwiZ2V0RHJpdmVyXCIgZnVuY3Rpb24gaW1wbGVtZW50ZWQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRyaXZlciA9IG1vZHVsZS5nZXREcml2ZXIoKTtcclxuICAgICAgICB0aGlzLl9kcml2ZXIgPSBkcml2ZXI7XHJcblxyXG4gICAgICAgIGNvbnN0IEV5ZXMgPSByZXF1aXJlKCdAYXBwbGl0b29scy9leWVzLXdlYmRyaXZlcmlvJykuRXllcztcclxuICAgICAgICB0aGlzLl9leWVzID0gbmV3IEV5ZXMoKTtcclxuICAgICAgICB0aGlzLl9leWVzLnNldEFwaUtleSh0aGlzLl9hcGlLZXkpO1xyXG5cclxuICAgICAgICBsZXQgYXBwTmFtZSA9ICdPeHlnZW4gQXBwJztcclxuICAgICAgICBsZXQgdGVzdE5hbWUgPSAnT3h5Z2VuIFRlc3QnO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFwcE5hbWUgJiYgdHlwZW9mIHRoaXMub3B0aW9ucy5hcHBOYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBhcHBOYW1lID0gdGhpcy5vcHRpb25zLmFwcE5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubmFtZSAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLm5hbWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRlc3ROYW1lID0gdGhpcy5vcHRpb25zLm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGRyaXZlci5jYWxsKCgpID0+IHRoaXMuX2V5ZXMub3Blbihkcml2ZXIsIGFwcE5hbWUsIHRlc3ROYW1lLCB0aGlzLl92aWV3cG9ydCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9kdWxlRXJyb3IoYEZhaWxlZCB0byBpbml0aWFsaXplIFwiZXllc1wiIG1vZHVsZTogJHtlLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLmluaXQoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQ2xvc2VzIEFwcGxpdG9vbHMgRXllcyBzZXNzaW9uLCB0ZXJtaW5hdGVzIHRoZSBzZXF1ZW5jZSBvZiBjaGVja3BvaW50cywgYW5kIHRoZW4gd2FpdHMgZm9yIGFuZCByZXR1cm5zIHRoZSB0ZXN0IHJlc3VsdHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxyXG4gICAgICogQHJldHVybiB7VGVzdFJlc3VsdH0gRXllcyB0ZXN0IHJlc3VsdC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCB8fCAhdGhpcy5fZXllcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmVzdWx0cyA9IG51bGw7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMgPSB0aGlzLl9leWVzLmNsb3NlKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2V5ZXMuYWJvcnRJZk5vdENsb3NlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9leWVzID0gbnVsbDtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQcmVmb3JtIHZpc3VhbCB2YWxpZGF0aW9uIGZvciBhIGNlcnRhaW4gdGFyZ2V0LlxyXG4gICAgICogQGZ1bmN0aW9uIGNoZWNrXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIEEgbmFtZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1hdGNoLlxyXG4gICAgICogQHBhcmFtIHtUYXJnZXR9IFt0YXJnZXRdIC0gQW4gb3B0aW9uYWwgdGFyZ2V0IGluc3RhbmNlIHdoaWNoIGRlc2NyaWJlcyB3aGV0aGVyIHdlIHdhbnQgYSB3aW5kb3cvcmVnaW9uL2ZyYW1lLlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gQSBwcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gdGhlIHZhbGlkYXRpb24gaXMgZmluaXNoZWQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNoZWNrKG5hbWUsIHRhcmdldCA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2V5ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBUYXJnZXQgPSByZXF1aXJlKCdAYXBwbGl0b29scy9leWVzLXdlYmRyaXZlcmlvJykuVGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9ICBhd2FpdCB0aGlzLl9leWVzLmNoZWNrKG5hbWUsIHRhcmdldCB8fCBUYXJnZXQud2luZG93KCkuZnVsbHkoKSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5fYXNFeHBlY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgVGFrZXMgYSBzbmFwc2hvdCBvZiB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCBhbmQgbWF0Y2hlcyBpdCB3aXRoXHJcbiAgICAgKiB0aGUgZXhwZWN0ZWQgb3V0cHV0LlxyXG4gICAgICogQGZ1bmN0aW9uIGNoZWNrV2luZG93XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9XSAtIEFuIG9wdGlvbmFsIHRhZyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNuYXBzaG90LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFttYXRjaFRpbWVvdXQ9LTFdIC0gVGhlIGFtb3VudCBvZiB0aW1lIHRvIHJldHJ5IG1hdGNoaW5nIChNaWxsaXNlY29uZHMpLlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gQSBwcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gdGhlIHZhbGlkYXRpb24gaXMgZmluaXNoZWQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNoZWNrV2luZG93KG5hbWUsIG1hdGNoVGltZW91dCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZXllcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9kcml2ZXIuY2FsbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2V5ZXMuY2hlY2tXaW5kb3cobmFtZSwgbWF0Y2hUaW1lb3V0KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5fYXNFeHBlY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG51bGwpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==