appium-android-driver 5.0.5 → 5.0.8
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 +0 -1
- package/build/lib/commands/actions.js +16 -20
- package/build/lib/commands/app-management.js +10 -18
- package/build/lib/commands/context.js +43 -56
- package/build/lib/commands/coverage.js +2 -6
- package/build/lib/commands/element.js +3 -9
- package/build/lib/commands/emu-console.js +3 -5
- package/build/lib/commands/execute.js +3 -6
- package/build/lib/commands/file-actions.js +22 -29
- package/build/lib/commands/general.js +18 -30
- package/build/lib/commands/ime.js +8 -21
- package/build/lib/commands/network.js +14 -27
- package/build/lib/commands/performance.js +3 -6
- package/build/lib/commands/recordscreen.js +27 -38
- package/build/lib/commands/shell.js +6 -7
- package/build/lib/commands/streamscreen.js +29 -43
- package/build/lib/commands/system-bars.js +10 -16
- package/build/lib/commands/touch.js +4 -10
- package/build/lib/driver.js +36 -60
- package/build/lib/webview-helpers.js +3 -3
- package/lib/commands/actions.js +18 -19
- package/lib/commands/app-management.js +10 -11
- package/lib/commands/context.js +33 -34
- package/lib/commands/coverage.js +1 -4
- package/lib/commands/element.js +2 -3
- package/lib/commands/emu-console.js +2 -2
- package/lib/commands/execute.js +2 -3
- package/lib/commands/file-actions.js +31 -25
- package/lib/commands/general.js +16 -18
- package/lib/commands/ime.js +7 -8
- package/lib/commands/network.js +15 -16
- package/lib/commands/performance.js +2 -3
- package/lib/commands/recordscreen.js +23 -22
- package/lib/commands/shell.js +6 -6
- package/lib/commands/streamscreen.js +22 -23
- package/lib/commands/system-bars.js +11 -10
- package/lib/commands/touch.js +3 -4
- package/lib/driver.js +35 -36
- package/lib/webview-helpers.js +3 -1
- package/package.json +2 -2
|
@@ -11,8 +11,6 @@ require("source-map-support/register");
|
|
|
11
11
|
|
|
12
12
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
13
|
|
|
14
|
-
var _logger = _interopRequireDefault(require("../logger"));
|
|
15
|
-
|
|
16
14
|
var _appiumChromedriver = _interopRequireDefault(require("appium-chromedriver"));
|
|
17
15
|
|
|
18
16
|
var _portfinder = _interopRequireDefault(require("portfinder"));
|
|
@@ -94,9 +92,7 @@ helpers.assignContexts = function assignContexts(webviewsMapping) {
|
|
|
94
92
|
const webviews = _webviewHelpers.default.parseWebviewNames(webviewsMapping, opts);
|
|
95
93
|
|
|
96
94
|
this.contexts = [_webviewHelpers.NATIVE_WIN, ...webviews];
|
|
97
|
-
|
|
98
|
-
_logger.default.debug(`Available contexts: ${JSON.stringify(this.contexts)}`);
|
|
99
|
-
|
|
95
|
+
this.log.debug(`Available contexts: ${JSON.stringify(this.contexts)}`);
|
|
100
96
|
return this.contexts;
|
|
101
97
|
};
|
|
102
98
|
|
|
@@ -105,8 +101,7 @@ helpers.switchContext = async function switchContext(name, webviewsMapping) {
|
|
|
105
101
|
await this.startChromedriverProxy(name, webviewsMapping);
|
|
106
102
|
} else if (this.isChromedriverContext(this.curContext)) {
|
|
107
103
|
if (this.opts.recreateChromeDriverSessions) {
|
|
108
|
-
|
|
109
|
-
|
|
104
|
+
this.log.debug('recreateChromeDriverSessions set to true; killing existing chromedrivers');
|
|
110
105
|
await this.stopChromedriverProxies();
|
|
111
106
|
} else {
|
|
112
107
|
await this.suspendChromedriverProxy();
|
|
@@ -129,15 +124,13 @@ helpers.isWebContext = function isWebContext() {
|
|
|
129
124
|
};
|
|
130
125
|
|
|
131
126
|
helpers.startChromedriverProxy = async function startChromedriverProxy(context, webviewsMapping) {
|
|
132
|
-
|
|
133
|
-
|
|
127
|
+
this.log.debug(`Connecting to chrome-backed webview context '${context}'`);
|
|
134
128
|
let cd;
|
|
135
129
|
|
|
136
130
|
if (this.sessionChromedrivers[context]) {
|
|
137
|
-
|
|
138
|
-
|
|
131
|
+
this.log.debug(`Found existing Chromedriver for context '${context}'. Using it.`);
|
|
139
132
|
cd = this.sessionChromedrivers[context];
|
|
140
|
-
await setupExistingChromedriver(cd);
|
|
133
|
+
await setupExistingChromedriver(this.log, cd);
|
|
141
134
|
} else {
|
|
142
135
|
let opts = _lodash.default.cloneDeep(this.opts);
|
|
143
136
|
|
|
@@ -163,9 +156,7 @@ helpers.startChromedriverProxy = async function startChromedriverProxy(context,
|
|
|
163
156
|
|
|
164
157
|
if (_lodash.default.includes([_androidHelpers.APP_STATE.RUNNING_IN_BACKGROUND, _androidHelpers.APP_STATE.RUNNING_IN_FOREGROUND], appState)) {
|
|
165
158
|
opts.chromeAndroidPackage = knownPackage;
|
|
166
|
-
|
|
167
|
-
_logger.default.debug(`Identified chromeAndroidPackage as '${opts.chromeAndroidPackage}' ` + `for context '${context}' by querying states of Chrome app packages`);
|
|
168
|
-
|
|
159
|
+
this.log.debug(`Identified chromeAndroidPackage as '${opts.chromeAndroidPackage}' ` + `for context '${context}' by querying states of Chrome app packages`);
|
|
169
160
|
break;
|
|
170
161
|
}
|
|
171
162
|
}
|
|
@@ -173,9 +164,7 @@ helpers.startChromedriverProxy = async function startChromedriverProxy(context,
|
|
|
173
164
|
for (const wm of webviewsMapping) {
|
|
174
165
|
if (wm.webviewName === context && _lodash.default.has(wm === null || wm === void 0 ? void 0 : wm.info, 'Android-Package')) {
|
|
175
166
|
opts.chromeAndroidPackage = wm.info['Android-Package'];
|
|
176
|
-
|
|
177
|
-
_logger.default.debug(`Identified chromeAndroidPackage as '${opts.chromeAndroidPackage}' ` + `for context '${context}' by CDP`);
|
|
178
|
-
|
|
167
|
+
this.log.debug(`Identified chromeAndroidPackage as '${opts.chromeAndroidPackage}' ` + `for context '${context}' by CDP`);
|
|
179
168
|
break;
|
|
180
169
|
}
|
|
181
170
|
}
|
|
@@ -206,14 +195,13 @@ helpers.suspendChromedriverProxy = function suspendChromedriverProxy() {
|
|
|
206
195
|
};
|
|
207
196
|
|
|
208
197
|
helpers.onChromedriverStop = async function onChromedriverStop(context) {
|
|
209
|
-
|
|
198
|
+
this.log.warn(`Chromedriver for context ${context} stopped unexpectedly`);
|
|
210
199
|
|
|
211
200
|
if (context === this.curContext) {
|
|
212
201
|
let err = new Error('Chromedriver quit unexpectedly during session');
|
|
213
202
|
await this.startUnexpectedShutdown(err);
|
|
214
203
|
} else {
|
|
215
|
-
|
|
216
|
-
|
|
204
|
+
this.log.warn("Chromedriver quit unexpectedly, but it wasn't the active " + 'context, ignoring');
|
|
217
205
|
delete this.sessionChromedrivers[context];
|
|
218
206
|
}
|
|
219
207
|
};
|
|
@@ -223,15 +211,13 @@ helpers.stopChromedriverProxies = async function stopChromedriverProxies() {
|
|
|
223
211
|
|
|
224
212
|
for (let context of _lodash.default.keys(this.sessionChromedrivers)) {
|
|
225
213
|
let cd = this.sessionChromedrivers[context];
|
|
226
|
-
|
|
227
|
-
_logger.default.debug(`Stopping chromedriver for context ${context}`);
|
|
228
|
-
|
|
214
|
+
this.log.debug(`Stopping chromedriver for context ${context}`);
|
|
229
215
|
cd.removeAllListeners(_appiumChromedriver.default.EVENT_CHANGED);
|
|
230
216
|
|
|
231
217
|
try {
|
|
232
218
|
await cd.stop();
|
|
233
219
|
} catch (err) {
|
|
234
|
-
|
|
220
|
+
this.log.warn(`Error stopping Chromedriver: ${err.message}`);
|
|
235
221
|
}
|
|
236
222
|
|
|
237
223
|
delete this.sessionChromedrivers[context];
|
|
@@ -247,13 +233,11 @@ helpers.shouldDismissChromeWelcome = function shouldDismissChromeWelcome() {
|
|
|
247
233
|
};
|
|
248
234
|
|
|
249
235
|
helpers.dismissChromeWelcome = async function dismissChromeWelcome() {
|
|
250
|
-
|
|
251
|
-
|
|
236
|
+
this.log.info('Trying to dismiss Chrome welcome');
|
|
252
237
|
let activity = await this.getCurrentActivity();
|
|
253
238
|
|
|
254
239
|
if (activity !== 'org.chromium.chrome.browser.firstrun.FirstRunActivity') {
|
|
255
|
-
|
|
256
|
-
|
|
240
|
+
this.log.info('Chrome welcome dialog never showed up! Continuing');
|
|
257
241
|
return;
|
|
258
242
|
}
|
|
259
243
|
|
|
@@ -264,12 +248,12 @@ helpers.dismissChromeWelcome = async function dismissChromeWelcome() {
|
|
|
264
248
|
let el = await this.findElOrEls('id', 'com.android.chrome:id/negative_button', false);
|
|
265
249
|
await this.click(el.ELEMENT);
|
|
266
250
|
} catch (e) {
|
|
267
|
-
|
|
251
|
+
this.log.warn(`This device did not show Chrome SignIn dialog, ${e.message}`);
|
|
268
252
|
}
|
|
269
253
|
};
|
|
270
254
|
|
|
271
255
|
helpers.startChromeSession = async function startChromeSession() {
|
|
272
|
-
|
|
256
|
+
this.log.info('Starting a chrome-based browser session');
|
|
273
257
|
|
|
274
258
|
let opts = _lodash.default.cloneDeep(this.opts);
|
|
275
259
|
|
|
@@ -298,31 +282,27 @@ helpers.startChromeSession = async function startChromeSession() {
|
|
|
298
282
|
}
|
|
299
283
|
};
|
|
300
284
|
|
|
301
|
-
async function setupExistingChromedriver(chromedriver) {
|
|
285
|
+
async function setupExistingChromedriver(log, chromedriver) {
|
|
302
286
|
if (!(await chromedriver.hasWorkingWebview())) {
|
|
303
|
-
|
|
304
|
-
|
|
287
|
+
log.debug('ChromeDriver is not associated with a window. ' + 'Re-initializing the session.');
|
|
305
288
|
await chromedriver.restart();
|
|
306
289
|
}
|
|
307
290
|
|
|
308
291
|
return chromedriver;
|
|
309
292
|
}
|
|
310
293
|
|
|
311
|
-
async function getChromedriverPort(portSpec) {
|
|
294
|
+
async function getChromedriverPort(portSpec, log = null) {
|
|
312
295
|
const getPort = _bluebird.default.promisify(_portfinder.default.getPort, {
|
|
313
296
|
context: _portfinder.default
|
|
314
297
|
});
|
|
315
298
|
|
|
316
299
|
if (!portSpec) {
|
|
317
300
|
const port = await getPort();
|
|
318
|
-
|
|
319
|
-
_logger.default.debug(`A port was not given, using random free port: ${port}`);
|
|
320
|
-
|
|
301
|
+
log === null || log === void 0 ? void 0 : log.debug(`A port was not given, using random free port: ${port}`);
|
|
321
302
|
return port;
|
|
322
303
|
}
|
|
323
304
|
|
|
324
|
-
|
|
325
|
-
|
|
305
|
+
log === null || log === void 0 ? void 0 : log.debug(`Finding a free port for chromedriver using spec ${JSON.stringify(portSpec)}`);
|
|
326
306
|
let foundPort = null;
|
|
327
307
|
|
|
328
308
|
for (const potentialPort of portSpec) {
|
|
@@ -336,15 +316,14 @@ async function getChromedriverPort(portSpec) {
|
|
|
336
316
|
}
|
|
337
317
|
|
|
338
318
|
try {
|
|
339
|
-
|
|
340
|
-
|
|
319
|
+
log === null || log === void 0 ? void 0 : log.debug(`Checking port range ${port}:${stopPort}`);
|
|
341
320
|
foundPort = await getPort({
|
|
342
321
|
port,
|
|
343
322
|
stopPort
|
|
344
323
|
});
|
|
345
324
|
break;
|
|
346
325
|
} catch (e) {
|
|
347
|
-
|
|
326
|
+
log === null || log === void 0 ? void 0 : log.debug(`Nothing in port range ${port}:${stopPort} was available`);
|
|
348
327
|
}
|
|
349
328
|
}
|
|
350
329
|
|
|
@@ -352,38 +331,45 @@ async function getChromedriverPort(portSpec) {
|
|
|
352
331
|
throw new Error(`Could not find a free port for chromedriver using ` + `chromedriverPorts spec ${JSON.stringify(portSpec)}`);
|
|
353
332
|
}
|
|
354
333
|
|
|
355
|
-
|
|
356
|
-
|
|
334
|
+
log === null || log === void 0 ? void 0 : log.debug(`Using free port ${foundPort} for chromedriver`);
|
|
357
335
|
return foundPort;
|
|
358
336
|
}
|
|
359
337
|
|
|
360
338
|
helpers.isChromedriverAutodownloadEnabled = function isChromedriverAutodownloadEnabled() {
|
|
339
|
+
var _this$log;
|
|
340
|
+
|
|
361
341
|
if (this.isFeatureEnabled(CHROMEDRIVER_AUTODOWNLOAD_FEATURE)) {
|
|
362
342
|
return true;
|
|
363
343
|
}
|
|
364
344
|
|
|
365
|
-
|
|
366
|
-
|
|
345
|
+
this === null || this === void 0 ? void 0 : (_this$log = this.log) === null || _this$log === void 0 ? void 0 : _this$log.debug(`Automated Chromedriver download is disabled. ` + `Use '${CHROMEDRIVER_AUTODOWNLOAD_FEATURE}' server feature to enable it`);
|
|
367
346
|
return false;
|
|
368
347
|
};
|
|
369
348
|
|
|
370
349
|
helpers.setupNewChromedriver = async function setupNewChromedriver(opts, curDeviceId, adb, context = null) {
|
|
350
|
+
var _this$isChromedriverA, _this$log6;
|
|
351
|
+
|
|
371
352
|
if (opts.chromeDriverPort) {
|
|
372
|
-
|
|
353
|
+
var _this$log2;
|
|
373
354
|
|
|
355
|
+
this === null || this === void 0 ? void 0 : (_this$log2 = this.log) === null || _this$log2 === void 0 ? void 0 : _this$log2.warn(`The 'chromeDriverPort' capability is deprecated. Please use 'chromedriverPort' instead`);
|
|
374
356
|
opts.chromedriverPort = opts.chromeDriverPort;
|
|
375
357
|
}
|
|
376
358
|
|
|
377
359
|
if (opts.chromedriverPort) {
|
|
378
|
-
|
|
360
|
+
var _this$log3;
|
|
361
|
+
|
|
362
|
+
this === null || this === void 0 ? void 0 : (_this$log3 = this.log) === null || _this$log3 === void 0 ? void 0 : _this$log3.debug(`Using user-specified port ${opts.chromedriverPort} for chromedriver`);
|
|
379
363
|
} else {
|
|
380
|
-
opts.chromedriverPort = await getChromedriverPort(opts.chromedriverPorts);
|
|
364
|
+
opts.chromedriverPort = await getChromedriverPort(opts.chromedriverPorts, this === null || this === void 0 ? void 0 : this.log);
|
|
381
365
|
}
|
|
382
366
|
|
|
383
367
|
const details = context ? _webviewHelpers.default.getWebviewDetails(adb, context) : undefined;
|
|
384
368
|
|
|
385
369
|
if (!_lodash.default.isEmpty(details)) {
|
|
386
|
-
|
|
370
|
+
var _this$log4;
|
|
371
|
+
|
|
372
|
+
this === null || this === void 0 ? void 0 : (_this$log4 = this.log) === null || _this$log4 === void 0 ? void 0 : _this$log4.debug('Passing web view details to the Chromedriver constructor: ' + JSON.stringify(details, null, 2));
|
|
387
373
|
}
|
|
388
374
|
|
|
389
375
|
const chromedriver = new _appiumChromedriver.default({
|
|
@@ -398,13 +384,15 @@ helpers.setupNewChromedriver = async function setupNewChromedriver(opts, curDevi
|
|
|
398
384
|
useSystemExecutable: opts.chromedriverUseSystemExecutable,
|
|
399
385
|
disableBuildCheck: opts.chromedriverDisableBuildCheck,
|
|
400
386
|
details,
|
|
401
|
-
isAutodownloadEnabled:
|
|
387
|
+
isAutodownloadEnabled: this === null || this === void 0 ? void 0 : (_this$isChromedriverA = this.isChromedriverAutodownloadEnabled) === null || _this$isChromedriverA === void 0 ? void 0 : _this$isChromedriverA.call(this)
|
|
402
388
|
});
|
|
403
389
|
opts.chromeOptions = opts.chromeOptions || {};
|
|
404
390
|
|
|
405
391
|
for (const opt of _lodash.default.keys(opts)) {
|
|
406
392
|
if (opt.endsWith(':chromeOptions')) {
|
|
407
|
-
|
|
393
|
+
var _this$log5;
|
|
394
|
+
|
|
395
|
+
this === null || this === void 0 ? void 0 : (_this$log5 = this.log) === null || _this$log5 === void 0 ? void 0 : _this$log5.warn(`Merging '${opt}' into 'chromeOptions'. This may cause unexpected behavior`);
|
|
408
396
|
|
|
409
397
|
_lodash.default.merge(opts.chromeOptions, opts[opt]);
|
|
410
398
|
}
|
|
@@ -412,8 +400,7 @@ helpers.setupNewChromedriver = async function setupNewChromedriver(opts, curDevi
|
|
|
412
400
|
|
|
413
401
|
const caps = _webviewHelpers.default.createChromedriverCaps(opts, curDeviceId, details);
|
|
414
402
|
|
|
415
|
-
|
|
416
|
-
|
|
403
|
+
this === null || this === void 0 ? void 0 : (_this$log6 = this.log) === null || _this$log6 === void 0 ? void 0 : _this$log6.debug(`Before starting chromedriver, androidPackage is '${caps.chromeOptions.androidPackage}'`);
|
|
417
404
|
await chromedriver.start(caps);
|
|
418
405
|
return chromedriver;
|
|
419
406
|
};
|
|
@@ -425,4 +412,4 @@ var _default = extensions;
|
|
|
425
412
|
exports.default = _default;require('source-map-support').install();
|
|
426
413
|
|
|
427
414
|
|
|
428
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIkNIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJnZXRDb250ZXh0cyIsIm9wdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJpc0Nocm9tZVNlc3Npb24iLCJ3ZWJ2aWV3c01hcHBpbmciLCJ3ZWJ2aWV3SGVscGVycyIsImdldFdlYlZpZXdzTWFwcGluZyIsImFkYiIsImFzc2lnbkNvbnRleHRzIiwic2V0Q29udGV4dCIsIm5hbWUiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXRUJWSUVXX1dJTiIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImNvbnRleHRzIiwiXyIsImluY2x1ZGVzIiwiZXJyb3JzIiwiTm9TdWNoQ29udGV4dEVycm9yIiwic3dpdGNoQ29udGV4dCIsIm1vYmlsZUdldENvbnRleHRzIiwiYW5kcm9pZERldmljZVNvY2tldCIsImVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzIiwid2Vidmlld0RldnRvb2xzUG9ydCIsImVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiIsIndlYnZpZXdzIiwicGFyc2VXZWJ2aWV3TmFtZXMiLCJOQVRJVkVfV0lOIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwiaXNDaHJvbWVkcml2ZXJDb250ZXh0Iiwic3RhcnRDaHJvbWVkcml2ZXJQcm94eSIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsIkVycm9yIiwiV0VCVklFV19CQVNFIiwiYXBwUGFja2FnZSIsImlzV2ViQ29udGV4dCIsImNvbnRleHQiLCJjZCIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwic2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciIsImNsb25lRGVlcCIsImNocm9tZVVzZVJ1bm5pbmdBcHAiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhbmRyb2lkUGFja2FnZSIsIm1hdGNoIiwibGVuZ3RoIiwiY2hyb21lQW5kcm9pZFBhY2thZ2UiLCJoYXMiLCJtYXAiLCJ3bSIsIndlYnZpZXdOYW1lIiwia25vd25QYWNrYWdlIiwiS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVMiLCJhcHBTdGF0ZSIsInF1ZXJ5QXBwU3RhdGUiLCJBUFBfU1RBVEUiLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJpbmZvIiwic2V0dXBOZXdDaHJvbWVkcml2ZXIiLCJjdXJEZXZpY2VJZCIsIm9uIiwiQ2hyb21lZHJpdmVyIiwiRVZFTlRfQ0hBTkdFRCIsIm1zZyIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIm9uQ2hyb21lZHJpdmVyU3RvcCIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwicHJveHlSZXEiLCJiaW5kIiwicHJveHlDb21tYW5kIiwiandwcm94eSIsImNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIndhcm4iLCJlcnIiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdG9wIiwibWVzc2FnZSIsInZpZXdOYW1lIiwiQ0hST01JVU1fV0lOIiwic2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJjaHJvbWVPcHRpb25zIiwiaXNBcnJheSIsImFyZ3MiLCJkaXNtaXNzQ2hyb21lV2VsY29tZSIsImFjdGl2aXR5IiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZWwiLCJmaW5kRWxPckVscyIsImNsaWNrIiwiRUxFTUVOVCIsImUiLCJzdGFydENocm9tZVNlc3Npb24iLCJrbm93blBhY2thZ2VzIiwiY2hyb21lQnVuZGxlSWQiLCJjaHJvbWVBbmRyb2lkQWN0aXZpdHkiLCJhcHBBY3Rpdml0eSIsImhhc1dvcmtpbmdXZWJ2aWV3IiwicmVzdGFydCIsImdldENocm9tZWRyaXZlclBvcnQiLCJwb3J0U3BlYyIsImdldFBvcnQiLCJCIiwicHJvbWlzaWZ5IiwiUG9ydEZpbmRlciIsInBvcnQiLCJmb3VuZFBvcnQiLCJwb3RlbnRpYWxQb3J0Iiwic3RvcFBvcnQiLCJwYXJzZUludCIsImlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCIsImlzRmVhdHVyZUVuYWJsZWQiLCJjaHJvbWVEcml2ZXJQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnRzIiwiZGV0YWlscyIsImdldFdlYnZpZXdEZXRhaWxzIiwidW5kZWZpbmVkIiwiaXNFbXB0eSIsImV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlIiwiY21kQXJncyIsImNocm9tZWRyaXZlckFyZ3MiLCJ2ZXJib3NlIiwic2hvd0Nocm9tZWRyaXZlckxvZyIsImV4ZWN1dGFibGVEaXIiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlRGlyIiwibWFwcGluZ1BhdGgiLCJjaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZSIsImJ1bmRsZUlkIiwidXNlU3lzdGVtRXhlY3V0YWJsZSIsImNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGUiLCJkaXNhYmxlQnVpbGRDaGVjayIsImNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrIiwiaXNBdXRvZG93bmxvYWRFbmFibGVkIiwib3B0IiwiZW5kc1dpdGgiLCJtZXJnZSIsImNhcHMiLCJjcmVhdGVDaHJvbWVkcml2ZXJDYXBzIiwic3RhcnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7Ozs7OztBQUVBLE1BQU1BLGlDQUFpQyxHQUFHLDJCQUExQztBQUVBLElBQUlDLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlD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QVQsRUFBYXhCLGlDQUFiLEdBQ25CLEtBQUtBLGlDQUFMLEVBRG1CLEdBQ3dCTztBQWJYLEdBQWpCLENBQXJCO0FBaUJBaEksRUFBQUEsSUFBSSxDQUFDNEYsYUFBTCxHQUFxQjVGLElBQUksQ0FBQzRGLGFBQUwsSUFBc0IsRUFBM0M7O0FBR0EsT0FBSyxNQUFNc0QsR0FBWCxJQUFrQmxJLGdCQUFFcUUsSUFBRixDQUFPckYsSUFBUCxDQUFsQixFQUFnQztBQUM5QixRQUFJa0osR0FBRyxDQUFDQyxRQUFKLENBQWEsZ0JBQWIsQ0FBSixFQUFvQztBQUNsQ3RILHNCQUFJcUQsSUFBSixDQUFVLFlBQVdnRSxHQUFJLDREQUF6Qjs7QUFDQWxJLHNCQUFFb0ksS0FBRixDQUFRcEosSUFBSSxDQUFDNEYsYUFBYixFQUE0QjVGLElBQUksQ0FBQ2tKLEdBQUQsQ0FBaEM7QUFDRDtBQUNGOztBQUVELFFBQU1HLElBQUksR0FBR2hKLHdCQUFlaUosc0JBQWYsQ0FBc0N0SixJQUF0QyxFQUE0Q2tFLFdBQTVDLEVBQXlENEQsT0FBekQsQ0FBYjs7QUFDQWpHLGtCQUFJQyxLQUFKLENBQVcsb0RBQW1EdUgsSUFBSSxDQUFDekQsYUFBTCxDQUFtQjNDLGNBQWUsR0FBaEc7O0FBQ0EsUUFBTXlCLFlBQVksQ0FBQzZFLEtBQWIsQ0FBbUJGLElBQW5CLENBQU47QUFDQSxTQUFPM0UsWUFBUDtBQUNELENBbEREOztBQW1EQSxNQUFNVCxvQkFBb0IsR0FBR3ZFLE9BQU8sQ0FBQ3VFLG9CQUFyQzs7QUFHQWhFLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjUCxVQUFkLEVBQTBCRixRQUExQixFQUFvQ0MsT0FBcEM7ZUFFZUMsVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgQ2hyb21lZHJpdmVyIGZyb20gJ2FwcGl1bS1jaHJvbWVkcml2ZXInO1xuaW1wb3J0IFBvcnRGaW5kZXIgZnJvbSAncG9ydGZpbmRlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHtcbiAgZGVmYXVsdCBhcyB3ZWJ2aWV3SGVscGVycyxcbiAgTkFUSVZFX1dJTiwgV0VCVklFV19CQVNFLCBXRUJWSUVXX1dJTiwgQ0hST01JVU1fV0lOLCBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FU1xufSBmcm9tICcuLi93ZWJ2aWV3LWhlbHBlcnMnO1xuaW1wb3J0IHsgQVBQX1NUQVRFIH0gZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcblxuY29uc3QgQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFID0gJ2Nocm9tZWRyaXZlcl9hdXRvZG93bmxvYWQnO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQWN0dWFsIE1KU09OV1AgY29tbWFuZCBoYW5kbGVyc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuY29tbWFuZHMuZ2V0Q3VycmVudENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50Q29udGV4dCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAvLyBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGBudWxsYCwgaW5kaWNhdGluZyBubyBjb250ZXh0XG4gIC8vIGV4cGxpY2l0bHkgc2V0LCBpdCBpcyB0aGUgZGVmYXVsdCBjb250ZXh0XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQgfHwgdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbn07XG5cbmNvbW1hbmRzLmdldENvbnRleHRzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dHMgKCkge1xuICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7aXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvbn0sIHRoaXMub3B0cyk7XG4gIGNvbnN0IHdlYnZpZXdzTWFwcGluZyA9IGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyh0aGlzLmFkYiwgb3B0cyk7XG4gIHJldHVybiB0aGlzLmFzc2lnbkNvbnRleHRzKHdlYnZpZXdzTWFwcGluZyk7XG59O1xuXG5jb21tYW5kcy5zZXRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29udGV4dCAobmFtZSkge1xuICBpZiAoIXV0aWwuaGFzVmFsdWUobmFtZSkpIHtcbiAgICBuYW1lID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbiAgfSBlbHNlIGlmIChuYW1lID09PSBXRUJWSUVXX1dJTikge1xuICAgIC8vIGhhbmRsZSBzZXRDb250ZXh0IFwiV0VCVklFV1wiXG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gIH1cbiAgLy8gaWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgY29udGV4dCB3ZSB3YW50LCBkbyBub3RoaW5nXG4gIGlmIChuYW1lID09PSB0aGlzLmN1ckNvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7aXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvbn0sIHRoaXMub3B0cyk7XG4gIGNvbnN0IHdlYnZpZXdzTWFwcGluZyA9IGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyh0aGlzLmFkYiwgb3B0cyk7XG4gIGNvbnN0IGNvbnRleHRzID0gdGhpcy5hc3NpZ25Db250ZXh0cyh3ZWJ2aWV3c01hcHBpbmcpO1xuICAvLyBpZiB0aGUgY29udGV4dCB3ZSB3YW50IGRvZXNuJ3QgZXhpc3QsIGZhaWxcbiAgaWYgKCFfLmluY2x1ZGVzKGNvbnRleHRzLCBuYW1lKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoQ29udGV4dEVycm9yKCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnN3aXRjaENvbnRleHQobmFtZSwgd2Vidmlld3NNYXBwaW5nKTtcbiAgdGhpcy5jdXJDb250ZXh0ID0gbmFtZTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2Vidmlld3NNYXBwaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvYyBUaGUgbmFtZSBvZiB0aGUgRGV2dG9vbHMgVW5peCBzb2NrZXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWJ2aWV3IFRoZSB3ZWIgdmlldyBhbGlhcy4gTG9va3MgbGlrZSBgV0VCVklFV19gXG4gKiBwcmVmaXggcGx1cyBQSUQgb3IgcGFja2FnZSBuYW1lXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGluZm8gV2VidmlldyBpbmZvcm1hdGlvbiBhcyBpdCBpcyByZXRyaWV2ZWQgYnlcbiAqIC9qc29uL3ZlcnNpb24gQ0RQIGVuZHBvaW50XG4gKiBAcHJvcGVydHkgez9BcnJheTxPYmplY3Q+fSBwYWdlcyBXZWJ2aWV3IHBhZ2VzIGxpc3QgYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi9saXN0IENEUCBlbmRwb2ludFxuICogQHByb3Blcnkgez9zdHJpbmd9IHdlYnZpZXdOYW1lIEFuIGFjdHVhbCB3ZWJ2aWV3IG5hbWUgZm9yIHN3aXRjaGluZyBjb250ZXh0LlxuICogVGhpcyB2YWx1ZSBiZWNvbWVzIG51bGwgd2hlbiBmYWlsaW5nIHRvIGZpbmQgYSBQSUQgZm9yIGEgd2Vidmlldy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGpzb24gZGVtb25zdHJhdGVzIHRoZSBleGFtcGxlIG9mIFdlYnZpZXdzTWFwcGluZyBvYmplY3QuXG4gKiBOb3RlIHRoYXQgYGRlc2NyaXB0aW9uYCBpbiBgcGFnZWAgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBtb3N0IGxpa2VseSB3aGVuIGl0IGNvbWVzIHRvIE1vYmlsZSBDaHJvbWUpXG4gKiB7XG4gKiAgIFwicHJvY1wiOiBcIkB3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV8yMjEzOFwiLFxuICogICBcIndlYnZpZXdcIjogXCJXRUJWSUVXXzIyMTM4XCIsXG4gKiAgIFwiaW5mb1wiOiB7XG4gKiAgICAgXCJBbmRyb2lkLVBhY2thZ2VcIjogXCJpby5hcHBpdW0uc2V0dGluZ3NcIixcbiAqICAgICBcIkJyb3dzZXJcIjogXCJDaHJvbWUvNzQuMC4zNzI5LjE4NVwiLFxuICogICAgIFwiUHJvdG9jb2wtVmVyc2lvblwiOiBcIjEuM1wiLFxuICogICAgIFwiVXNlci1BZ2VudFwiOiBcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgQW5kcm9pZCBTREsgYnVpbHQgZm9yIHg4NiBCdWlsZC9RU1IxLjE5MDkyMC4wMDE7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvNzQuMC4zNzI5LjE4NSBNb2JpbGUgU2FmYXJpLzUzNy4zNlwiLFxuICogICAgIFwiVjgtVmVyc2lvblwiOiBcIjcuNC4yODguMjhcIixcbiAqICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2IChAMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZClcIixcbiAqICAgICBcIndlYlNvY2tldERlYnVnZ2VyVXJsXCI6IFwid3M6Ly8xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvYnJvd3NlclwiXG4gKiAgIH0sXG4gKiAgIFwicGFnZXNcIjogW1xuICogICAgIHtcbiAqICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ7XFxcImF0dGFjaGVkXFxcIjp0cnVlLFxcXCJlbXB0eVxcXCI6ZmFsc2UsXFxcImhlaWdodFxcXCI6MTQ1OCxcXFwic2NyZWVuWFxcXCI6MCxcXFwic2NyZWVuWVxcXCI6MzM2LFxcXCJ2aXNpYmxlXFxcIjp0cnVlLFxcXCJ3aWR0aFxcXCI6MTA4MH1cIixcbiAqICAgICAgIFwiZGV2dG9vbHNGcm9udGVuZFVybFwiOiBcImh0dHA6Ly9jaHJvbWUtZGV2dG9vbHMtZnJvbnRlbmQuYXBwc3BvdC5jb20vc2VydmVfcmV2L0AyMjk1NTY4MmY5NGNlMDkzMzYxOTdiZmI4ZGZmZWE5OTFmYTMyZjBkL2luc3BlY3Rvci5odG1sP3dzPTEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcImlkXCI6IFwiMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIixcbiAqICAgICAgIFwidGl0bGVcIjogXCJSZWxlYXNlcyDCtyBhcHBpdW0vYXBwaXVtIMK3IEdpdEh1YlwiLFxuICogICAgICAgXCJ0eXBlXCI6IFwicGFnZVwiLFxuICogICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9yZWxlYXNlc1wiLFxuICogICAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL3BhZ2UvMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIlxuICogICAgIH1cbiAqICAgXSxcbiAqICAgXCJ3ZWJ2aWV3TmFtZVwiOiBcIldFQlZJRVdfY29tLmlvLmFwcGl1bS5zZXR0aW5nXCJcbiAqIH1cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSB3ZWJ2aWV3c01hcHBpbmcgYmFzZWQgb24gQ0RQIGVuZHBvaW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PFdlYnZpZXdzTWFwcGluZz59IHdlYnZpZXdzTWFwcGluZ1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldENvbnRleHRzICgpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBhbmRyb2lkRGV2aWNlU29ja2V0OiB0aGlzLm9wdHMuYW5kcm9pZERldmljZVNvY2tldCxcbiAgICBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlczogdHJ1ZSxcbiAgICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB0aGlzLm9wdHMud2Vidmlld0RldnRvb2xzUG9ydCxcbiAgICBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb246IHRydWUsXG4gICAgaXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvblxuICB9O1xuICByZXR1cm4gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCBvcHRzKTtcbn07XG5cbmhlbHBlcnMuYXNzaWduQ29udGV4dHMgPSBmdW5jdGlvbiBhc3NpZ25Db250ZXh0cyAod2Vidmlld3NNYXBwaW5nKSB7XG4gIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHtpc0Nocm9tZVNlc3Npb246IHRoaXMuaXNDaHJvbWVTZXNzaW9ufSwgdGhpcy5vcHRzKTtcbiAgY29uc3Qgd2Vidmlld3MgPSB3ZWJ2aWV3SGVscGVycy5wYXJzZVdlYnZpZXdOYW1lcyh3ZWJ2aWV3c01hcHBpbmcsIG9wdHMpO1xuICB0aGlzLmNvbnRleHRzID0gW05BVElWRV9XSU4sIC4uLndlYnZpZXdzXTtcbiAgbG9nLmRlYnVnKGBBdmFpbGFibGUgY29udGV4dHM6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb250ZXh0cyl9YCk7XG4gIHJldHVybiB0aGlzLmNvbnRleHRzO1xufTtcblxuaGVscGVycy5zd2l0Y2hDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc3dpdGNoQ29udGV4dCAobmFtZSwgd2Vidmlld3NNYXBwaW5nKSB7XG4gIC8vIFdlIGhhdmUgc29tZSBvcHRpb25zIHdoZW4gaXQgY29tZXMgdG8gd2Vidmlld3MuIElmIHdlIHdhbnQgYVxuICAvLyBDaHJvbWVkcml2ZXIgd2Vidmlldywgd2UgY2FuIG9ubHkgY29udHJvbCBvbmUgYXQgYSB0aW1lLlxuICBpZiAodGhpcy5pc0Nocm9tZWRyaXZlckNvbnRleHQobmFtZSkpIHtcbiAgICAvLyBzdGFydCBwcm94eWluZyBjb21tYW5kcyBkaXJlY3RseSB0byBjaHJvbWVkcml2ZXJcbiAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lZHJpdmVyUHJveHkobmFtZSwgd2Vidmlld3NNYXBwaW5nKTtcbiAgfSBlbHNlIGlmICh0aGlzLmlzQ2hyb21lZHJpdmVyQ29udGV4dCh0aGlzLmN1ckNvbnRleHQpKSB7XG4gICAgLy8gaWYgd2UncmUgbW92aW5nIHRvIGEgbm9uLWNocm9tZWRyaXZlciB3ZWJ2aWV3LCBhbmQgb3VyIGN1cnJlbnQgY29udGV4dFxuICAgIC8vIF9pc18gYSBjaHJvbWVkcml2ZXIgd2VidmlldywgaWYgY2FwcyByZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zIGlzIHNldFxuICAgIC8vIHRvIHRydWUgdGhlbiBraWxsIGNocm9tZWRyaXZlciBzZXNzaW9uIHVzaW5nIHN0b3BDaHJvbWVkcml2ZXJQcm94aWVzIG9yXG4gICAgLy8gZWxzZSBzaW1wbHkgc3VzcGVuZCBwcm94eWluZyB0byB0aGUgbGF0dGVyXG4gICAgaWYgKHRoaXMub3B0cy5yZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zKSB7XG4gICAgICBsb2cuZGVidWcoJ3JlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMgc2V0IHRvIHRydWU7IGtpbGxpbmcgZXhpc3RpbmcgY2hyb21lZHJpdmVycycpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERpZG4ndCBrbm93IGhvdyB0byBoYW5kbGUgc3dpdGNoaW5nIHRvIGNvbnRleHQgJyR7bmFtZX0nYCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBPbi1vYmplY3QgY29udGV4dC1yZWxhdGVkIGhlbHBlcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vLyBUaGUgcmVhc29uIHRoaXMgaXMgYSBmdW5jdGlvbiBhbmQgbm90IGp1c3QgYSBjb25zdGFudCBpcyB0aGF0IGJvdGggYW5kcm9pZC1cbi8vIGRyaXZlciBhbmQgc2VsZW5kcm9pZC1kcml2ZXIgdXNlIHRoaXMgbG9naWMsIGFuZCBlYWNoIG9uZSByZXR1cm5zXG4vLyBhIGRpZmZlcmVudCBkZWZhdWx0IGNvbnRleHQgbmFtZVxuaGVscGVycy5kZWZhdWx0Q29udGV4dE5hbWUgPSBmdW5jdGlvbiBkZWZhdWx0Q29udGV4dE5hbWUgKCkge1xuICByZXR1cm4gTkFUSVZFX1dJTjtcbn07XG5cbmhlbHBlcnMuZGVmYXVsdFdlYnZpZXdOYW1lID0gZnVuY3Rpb24gZGVmYXVsdFdlYnZpZXdOYW1lICgpIHtcbiAgcmV0dXJuIFdFQlZJRVdfQkFTRSArIHRoaXMub3B0cy5hcHBQYWNrYWdlO1xufTtcblxuaGVscGVycy5pc1dlYkNvbnRleHQgPSBmdW5jdGlvbiBpc1dlYkNvbnRleHQgKCkge1xuICByZXR1cm4gdGhpcy5jdXJDb250ZXh0ICE9PSBudWxsICYmIHRoaXMuY3VyQ29udGV4dCAhPT0gTkFUSVZFX1dJTjtcbn07XG5cbi8vIFR1cm4gb24gcHJveHlpbmcgdG8gYW4gZXhpc3RpbmcgQ2hyb21lZHJpdmVyIHNlc3Npb24gb3IgYSBuZXcgb25lXG5oZWxwZXJzLnN0YXJ0Q2hyb21lZHJpdmVyUHJveHkgPSBhc3luYyBmdW5jdGlvbiBzdGFydENocm9tZWRyaXZlclByb3h5IChjb250ZXh0LCB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgbG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIGNocm9tZS1iYWNrZWQgd2VidmlldyBjb250ZXh0ICcke2NvbnRleHR9J2ApO1xuXG4gIGxldCBjZDtcbiAgaWYgKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF0pIHtcbiAgICAvLyBpbiB0aGUgY2FzZSB3aGVyZSB3ZSd2ZSBhbHJlYWR5IHNldCB1cCBhIGNocm9tZWRyaXZlciBmb3IgYSBjb250ZXh0LFxuICAgIC8vIHdlIHdhbnQgdG8gcmVjb25uZWN0IHRvIGl0LCBub3QgY3JlYXRlIGEgd2hvbGUgbmV3IG9uZVxuICAgIGxvZy5kZWJ1ZyhgRm91bmQgZXhpc3RpbmcgQ2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICcke2NvbnRleHR9Jy4gVXNpbmcgaXQuYCk7XG4gICAgY2QgPSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICAgIGF3YWl0IHNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIoY2QpO1xuICB9IGVsc2Uge1xuICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICBvcHRzLmNocm9tZVVzZVJ1bm5pbmdBcHAgPSB0cnVlO1xuXG4gICAgLy8gaWYgcmVxdWVzdGVkLCB0ZWxsIGNocm9tZWRyaXZlciB0byBhdHRhY2ggdG8gdGhlIGFuZHJvaWQgcGFja2FnZSB3ZSBoYXZlXG4gICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG5hbWUsIHJhdGhlciB0aGFuIHRoZSBwYWNrYWdlIG9mIHRoZSBBVVQuXG4gICAgLy8gQW5kIHR1cm4gdGhpcyBvbiBieSBkZWZhdWx0IGZvciBjaHJvbWUtLWlmIGNocm9tZSBwb3BzIHVwIHdpdGggYSB3ZWJ2aWV3XG4gICAgLy8gYW5kIHNvbWVvbmUgd2FudHMgdG8gc3dpdGNoIHRvIGl0LCB3ZSBzaG91bGQgbGV0IGNocm9tZWRyaXZlciBjb25uZWN0IHRvXG4gICAgLy8gY2hyb21lIHJhdGhlciB0aGFuIHN0YXlpbmcgc3R1Y2sgb24gdGhlIEFVVFxuICAgIGlmIChvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSB8fCBjb250ZXh0ID09PSBgJHtXRUJWSUVXX0JBU0V9Y2hyb21lYCkge1xuICAgICAgbGV0IGFuZHJvaWRQYWNrYWdlID0gY29udGV4dC5tYXRjaChgJHtXRUJWSUVXX0JBU0V9KC4rKWApO1xuICAgICAgaWYgKGFuZHJvaWRQYWNrYWdlICYmIGFuZHJvaWRQYWNrYWdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSA9IGFuZHJvaWRQYWNrYWdlWzFdO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSkge1xuICAgICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uJykgJiYgIXRoaXMub3B0cy5lbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24pIHtcbiAgICAgICAgICAvLyBXaGVuIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiBjYXBhYmlsaXR5IGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQsIHRyeSB0byBpZGVudGlmeVxuICAgICAgICAgIC8vIGNocm9tZUFuZHJvaWRQYWNrYWdlIGJhc2VkIG9uIGNvbnRleHRzLCBrbm93biBjaHJvbWUgdmFyaWFudCBwYWNrYWdlcyBhbmQgcXVlcnlBcHBTdGF0ZSByZXN1bHRcbiAgICAgICAgICAvLyBzaW5jZSB3ZWJ2aWV3c01hcHBpbmcgZG9lcyBub3QgaGF2ZSBpbmZvIG9iamVjdFxuICAgICAgICAgIGNvbnN0IGNvbnRleHRzID0gd2Vidmlld3NNYXBwaW5nLm1hcCgod20pID0+IHdtLndlYnZpZXdOYW1lKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtub3duUGFja2FnZSBvZiBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FUykge1xuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoY29udGV4dHMsIGAke1dFQlZJRVdfQkFTRX0ke2tub3duUGFja2FnZX1gKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwcFN0YXRlID0gYXdhaXQgdGhpcy5xdWVyeUFwcFN0YXRlKGtub3duUGFja2FnZSk7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhbQVBQX1NUQVRFLlJVTk5JTkdfSU5fQkFDS0dST1VORCwgQVBQX1NUQVRFLlJVTk5JTkdfSU5fRk9SRUdST1VORF0sIGFwcFN0YXRlKSkge1xuICAgICAgICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0ga25vd25QYWNrYWdlO1xuICAgICAgICAgICAgICBsb2cuZGVidWcoYElkZW50aWZpZWQgY2hyb21lQW5kcm9pZFBhY2thZ2UgYXMgJyR7b3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZX0nIGAgK1xuICAgICAgICAgICAgICAgIGBmb3IgY29udGV4dCAnJHtjb250ZXh0fScgYnkgcXVlcnlpbmcgc3RhdGVzIG9mIENocm9tZSBhcHAgcGFja2FnZXNgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3Qgd20gb2Ygd2Vidmlld3NNYXBwaW5nKSB7XG4gICAgICAgICAgICBpZiAod20ud2Vidmlld05hbWUgPT09IGNvbnRleHQgJiYgXy5oYXMod20/LmluZm8sICdBbmRyb2lkLVBhY2thZ2UnKSkge1xuICAgICAgICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0gd20uaW5mb1snQW5kcm9pZC1QYWNrYWdlJ107XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgSWRlbnRpZmllZCBjaHJvbWVBbmRyb2lkUGFja2FnZSBhcyAnJHtvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlfScgYCArXG4gICAgICAgICAgICAgICAgYGZvciBjb250ZXh0ICcke2NvbnRleHR9JyBieSBDRFBgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2QgPSBhd2FpdCB0aGlzLnNldHVwTmV3Q2hyb21lZHJpdmVyKG9wdHMsIHRoaXMuYWRiLmN1ckRldmljZUlkLCB0aGlzLmFkYiwgY29udGV4dCk7XG4gICAgLy8gYmluZCBvdXIgc3RvcC9leGl0IGhhbmRsZXIsIHBhc3NpbmcgaW4gY29udGV4dCBzbyB3ZSBrbm93IHdoaWNoXG4gICAgLy8gb25lIHN0b3BwZWQgdW5leHBlY3RlZGx5XG4gICAgY2Qub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICAgIHRoaXMub25DaHJvbWVkcml2ZXJTdG9wKGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNhdmUgdGhlIGNocm9tZWRyaXZlciBvYmplY3QgdW5kZXIgdGhlIGNvbnRleHRcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdID0gY2Q7XG4gIH1cbiAgLy8gaG9vayB1cCB0aGUgbG9jYWwgdmFyaWFibGVzIHNvIHdlIGNhbiBwcm94eSB0aGlzIGJpelxuICB0aGlzLmNocm9tZWRyaXZlciA9IGNkO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIuandwcm94eSk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uIHN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gIHRoaXMucHJveHlDb21tYW5kID0gbnVsbDtcbiAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xufTtcblxuLy8gSGFuZGxlIGFuIG91dC1vZi1iYW5kIENocm9tZWRyaXZlciBzdG9wIGV2ZW50XG5oZWxwZXJzLm9uQ2hyb21lZHJpdmVyU3RvcCA9IGFzeW5jIGZ1bmN0aW9uIG9uQ2hyb21lZHJpdmVyU3RvcCAoY29udGV4dCkge1xuICBsb2cud2FybihgQ2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICR7Y29udGV4dH0gc3RvcHBlZCB1bmV4cGVjdGVkbHlgKTtcbiAgaWYgKGNvbnRleHQgPT09IHRoaXMuY3VyQ29udGV4dCkge1xuICAgIC8vIHdlIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2hpbGUgYXV0b21hdGluZyB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBzbyB3YW50XG4gICAgLy8gdG8gc2h1dCBkb3duIHRoZSBzZXNzaW9uIGFuZCByZXNwb25kIHdpdGggYW4gZXJyb3JcbiAgICBsZXQgZXJyID0gbmV3IEVycm9yKCdDaHJvbWVkcml2ZXIgcXVpdCB1bmV4cGVjdGVkbHkgZHVyaW5nIHNlc3Npb24nKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKGVycik7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgYSBDaHJvbWVkcml2ZXIgaW4gdGhlIG5vbi1hY3RpdmUgY29udGV4dCBiYXJmcywgd2UgZG9uJ3QgcmVhbGx5XG4gICAgLy8gY2FyZSwgd2UnbGwganVzdCBtYWtlIGEgbmV3IG9uZSBuZXh0IHRpbWUgd2UgbmVlZCB0aGUgY29udGV4dC5cbiAgICBsb2cud2FybihcIkNocm9tZWRyaXZlciBxdWl0IHVuZXhwZWN0ZWRseSwgYnV0IGl0IHdhc24ndCB0aGUgYWN0aXZlIFwiICtcbiAgICAgICAgICAgICAgICAnY29udGV4dCwgaWdub3JpbmcnKTtcbiAgICBkZWxldGUgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgfVxufTtcblxuLy8gSW50ZW50aW9uYWxseSBzdG9wIGFsbCB0aGUgY2hyb21lZHJpdmVycyBjdXJyZW50bHkgYWN0aXZlLCBhbmQgaWdub3JlXG4vLyB0aGVpciBleGl0IGV2ZW50c1xuaGVscGVycy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcyA9IGFzeW5jIGZ1bmN0aW9uIHN0b3BDaHJvbWVkcml2ZXJQcm94aWVzICgpIHtcbiAgdGhpcy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkoKTsgLy8gbWFrZSBzdXJlIHdlIHR1cm4gb2ZmIHRoZSBwcm94eSBmbGFnXG4gIGZvciAobGV0IGNvbnRleHQgb2YgXy5rZXlzKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnMpKSB7XG4gICAgbGV0IGNkID0gdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgICBsb2cuZGVidWcoYFN0b3BwaW5nIGNocm9tZWRyaXZlciBmb3IgY29udGV4dCAke2NvbnRleHR9YCk7XG4gICAgLy8gc3RvcCBsaXN0ZW5pbmcgZm9yIHRoZSBzdG9wcGVkIHN0YXRlIGV2ZW50XG4gICAgY2QucmVtb3ZlQWxsTGlzdGVuZXJzKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VEKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2Quc3RvcCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYEVycm9yIHN0b3BwaW5nIENocm9tZWRyaXZlcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgZGVsZXRlIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gIH1cbn07XG5cbmhlbHBlcnMuaXNDaHJvbWVkcml2ZXJDb250ZXh0ID0gZnVuY3Rpb24gaXNDaHJvbWVkcml2ZXJDb250ZXh0ICh2aWV3TmFtZSkge1xuICByZXR1cm4gXy5pbmNsdWRlcyh2aWV3TmFtZSwgV0VCVklFV19XSU4pIHx8IHZpZXdOYW1lID09PSBDSFJPTUlVTV9XSU47XG59O1xuXG5oZWxwZXJzLnNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lID0gZnVuY3Rpb24gc2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUgKCkge1xuICByZXR1cm4gISF0aGlzLm9wdHMuY2hyb21lT3B0aW9ucyAmJlxuICAgICAgICAgXy5pc0FycmF5KHRoaXMub3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MpICYmXG4gICAgICAgICB0aGlzLm9wdHMuY2hyb21lT3B0aW9ucy5hcmdzLmluY2x1ZGVzKCctLW5vLWZpcnN0LXJ1bicpO1xufTtcblxuaGVscGVycy5kaXNtaXNzQ2hyb21lV2VsY29tZSA9IGFzeW5jIGZ1bmN0aW9uIGRpc21pc3NDaHJvbWVXZWxjb21lICgpIHtcbiAgbG9nLmluZm8oJ1RyeWluZyB0byBkaXNtaXNzIENocm9tZSB3ZWxjb21lJyk7XG4gIGxldCBhY3Rpdml0eSA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudEFjdGl2aXR5KCk7XG4gIGlmIChhY3Rpdml0eSAhPT0gJ29yZy5jaHJvbWl1bS5jaHJvbWUuYnJvd3Nlci5maXJzdHJ1bi5GaXJzdFJ1bkFjdGl2aXR5Jykge1xuICAgIGxvZy5pbmZvKCdDaHJvbWUgd2VsY29tZSBkaWFsb2cgbmV2ZXIgc2hvd2VkIHVwISBDb250aW51aW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBlbCA9IGF3YWl0IHRoaXMuZmluZEVsT3JFbHMoJ2lkJywgJ2NvbS5hbmRyb2lkLmNocm9tZTppZC90ZXJtc19hY2NlcHQnLCBmYWxzZSk7XG4gIGF3YWl0IHRoaXMuY2xpY2soZWwuRUxFTUVOVCk7XG4gIHRyeSB7XG4gICAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuY2hyb21lOmlkL25lZ2F0aXZlX2J1dHRvbicsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLmNsaWNrKGVsLkVMRU1FTlQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRE8gTk9USElORywgVEhJUyBERVZJQ0UgRElETlQgTEFVTkNIIFRIRSBTSUdOSU4gRElBTE9HXG4gICAgLy8gSVQgTVVTVCBCRSBBIE5PTiBHTVMgREVWSUNFXG4gICAgbG9nLndhcm4oYFRoaXMgZGV2aWNlIGRpZCBub3Qgc2hvdyBDaHJvbWUgU2lnbkluIGRpYWxvZywgJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuc3RhcnRDaHJvbWVTZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRDaHJvbWVTZXNzaW9uICgpIHtcbiAgbG9nLmluZm8oJ1N0YXJ0aW5nIGEgY2hyb21lLWJhc2VkIGJyb3dzZXIgc2Vzc2lvbicpO1xuICBsZXQgb3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgY29uc3Qga25vd25QYWNrYWdlcyA9IFtcbiAgICAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgJ2NvbS5jaHJvbWUuYmV0YScsXG4gICAgJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gIF07XG5cbiAgaWYgKF8uaW5jbHVkZXMoa25vd25QYWNrYWdlcywgdGhpcy5vcHRzLmFwcFBhY2thZ2UpKSB7XG4gICAgb3B0cy5jaHJvbWVCdW5kbGVJZCA9IHRoaXMub3B0cy5hcHBQYWNrYWdlO1xuICB9IGVsc2Uge1xuICAgIG9wdHMuY2hyb21lQW5kcm9pZEFjdGl2aXR5ID0gdGhpcy5vcHRzLmFwcEFjdGl2aXR5O1xuICB9XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gYXdhaXQgdGhpcy5zZXR1cE5ld0Nocm9tZWRyaXZlcihvcHRzLCB0aGlzLmFkYi5jdXJEZXZpY2VJZCwgdGhpcy5hZGIpO1xuICB0aGlzLmNocm9tZWRyaXZlci5vbihDaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCwgKG1zZykgPT4ge1xuICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICB0aGlzLm9uQ2hyb21lZHJpdmVyU3RvcChDSFJPTUlVTV9XSU4pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIENocm9tZSBzZXNzaW9uLCB3ZSBlbnN1cmUgdGhhdCB0aGUgY29udGV4dCBpc1xuICAvLyBhcHByb3ByaWF0ZWx5IHNldCBhbmQgdGhhdCB0aGlzIGNocm9tZWRyaXZlciBpcyBhZGRlZCB0byB0aGUgbGlzdFxuICAvLyBvZiBzZXNzaW9uIGNocm9tZWRyaXZlcnMgc28gd2UgY2FuIHN3aXRjaCBiYWNrIGFuZCBmb3J0aFxuICB0aGlzLmN1ckNvbnRleHQgPSBDSFJPTUlVTV9XSU47XG4gIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbQ0hST01JVU1fV0lOXSA9IHRoaXMuY2hyb21lZHJpdmVyO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIuandwcm94eSk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gIGlmICh0aGlzLnNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lKCkpIHtcbiAgICAvLyBkaXNtaXNzIENocm9tZSB3ZWxjb21lIGRpYWxvZ1xuICAgIGF3YWl0IHRoaXMuZGlzbWlzc0Nocm9tZVdlbGNvbWUoKTtcbiAgfVxufTtcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogSW50ZXJuYWwgbGlicmFyeSBmdW5jdGlvbnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIgKGNocm9tZWRyaXZlcikge1xuICAvLyBjaGVjayB0aGUgc3RhdHVzIGJ5IHNlbmRpbmcgYSBzaW1wbGUgd2luZG93LWJhc2VkIGNvbW1hbmQgdG8gQ2hyb21lRHJpdmVyXG4gIC8vIGlmIHRoZXJlIGlzIGFuIGVycm9yLCB3ZSB3YW50IHRvIHJlY3JlYXRlIHRoZSBDaHJvbWVEcml2ZXIgc2Vzc2lvblxuICBpZiAoIWF3YWl0IGNocm9tZWRyaXZlci5oYXNXb3JraW5nV2VidmlldygpKSB7XG4gICAgbG9nLmRlYnVnKCdDaHJvbWVEcml2ZXIgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHdpbmRvdy4gJyArXG4gICAgICAgICAgICAgICAgICdSZS1pbml0aWFsaXppbmcgdGhlIHNlc3Npb24uJyk7XG4gICAgYXdhaXQgY2hyb21lZHJpdmVyLnJlc3RhcnQoKTtcbiAgfVxuICByZXR1cm4gY2hyb21lZHJpdmVyO1xufVxuXG4vKipcbiAqIEZpbmQgYSBmcmVlIHBvcnQgdG8gaGF2ZSBDaHJvbWVkcml2ZXIgbGlzdGVuIG9uLlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IFtwb3J0U3BlY10gLSBBcnJheSB3aGljaCBpcyBhIGxpc3Qgb2YgcG9ydHMuIEEgbGlzdCBpdGVtIG1heVxuICogYWxzbyBpdHNlbGYgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIDIgc3BlY2lmeWluZyBhIHN0YXJ0IGFuZCBlbmQgcG9ydCBvZlxuICogYSByYW5nZS4gU29tZSB2YWxpZCBwb3J0IHNwZWNzOlxuICogICAgLSBbODAwMCwgODAwMSwgODAwMl1cbiAqICAgIC0gW1s4MDAwLCA4MDA1XV1cbiAqICAgIC0gWzgwMDAsIFs5MDAwLCA5MTAwXV1cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgZnJlZSBwb3J0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENocm9tZWRyaXZlclBvcnQgKHBvcnRTcGVjKSB7XG4gIGNvbnN0IGdldFBvcnQgPSBCLnByb21pc2lmeShQb3J0RmluZGVyLmdldFBvcnQsIHtjb250ZXh0OiBQb3J0RmluZGVyfSk7XG5cbiAgLy8gaWYgdGhlIHVzZXIgZGlkbid0IGdpdmUgdXMgYW55IHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IGNocm9tZWRyaXZlclxuICAvLyBwb3J0IHJhbmdlcywganVzdCBmaW5kIGFueSBmcmVlIHBvcnRcbiAgaWYgKCFwb3J0U3BlYykge1xuICAgIGNvbnN0IHBvcnQgPSBhd2FpdCBnZXRQb3J0KCk7XG4gICAgbG9nLmRlYnVnKGBBIHBvcnQgd2FzIG5vdCBnaXZlbiwgdXNpbmcgcmFuZG9tIGZyZWUgcG9ydDogJHtwb3J0fWApO1xuICAgIHJldHVybiBwb3J0O1xuICB9XG5cbiAgLy8gb3RoZXJ3aXNlIGZpbmQgdGhlIGZyZWUgcG9ydCBiYXNlZCBvbiBhIGxpc3Qgb3IgcmFuZ2UgcHJvdmlkZWQgYnkgdGhlIHVzZXJcbiAgbG9nLmRlYnVnKGBGaW5kaW5nIGEgZnJlZSBwb3J0IGZvciBjaHJvbWVkcml2ZXIgdXNpbmcgc3BlYyAke0pTT04uc3RyaW5naWZ5KHBvcnRTcGVjKX1gKTtcbiAgbGV0IGZvdW5kUG9ydCA9IG51bGw7XG4gIGZvciAoY29uc3QgcG90ZW50aWFsUG9ydCBvZiBwb3J0U3BlYykge1xuICAgIGxldCBwb3J0LCBzdG9wUG9ydDtcbiAgICBpZiAoXy5pc0FycmF5KHBvdGVudGlhbFBvcnQpKSB7XG4gICAgICAoW3BvcnQsIHN0b3BQb3J0XSA9IHBvdGVudGlhbFBvcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3J0ID0gcGFyc2VJbnQocG90ZW50aWFsUG9ydCwgMTApOyAvLyBlbnN1cmUgd2UgaGF2ZSBhIG51bWJlciBhbmQgbm90IGEgc3RyaW5nXG4gICAgICBzdG9wUG9ydCA9IHBvcnQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoYENoZWNraW5nIHBvcnQgcmFuZ2UgJHtwb3J0fToke3N0b3BQb3J0fWApO1xuICAgICAgZm91bmRQb3J0ID0gYXdhaXQgZ2V0UG9ydCh7cG9ydCwgc3RvcFBvcnR9KTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgTm90aGluZyBpbiBwb3J0IHJhbmdlICR7cG9ydH06JHtzdG9wUG9ydH0gd2FzIGF2YWlsYWJsZWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmb3VuZFBvcnQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGEgZnJlZSBwb3J0IGZvciBjaHJvbWVkcml2ZXIgdXNpbmcgYCArXG4gICAgICAgICAgICAgICAgICAgIGBjaHJvbWVkcml2ZXJQb3J0cyBzcGVjICR7SlNPTi5zdHJpbmdpZnkocG9ydFNwZWMpfWApO1xuICB9XG5cbiAgbG9nLmRlYnVnKGBVc2luZyBmcmVlIHBvcnQgJHtmb3VuZFBvcnR9IGZvciBjaHJvbWVkcml2ZXJgKTtcbiAgcmV0dXJuIGZvdW5kUG9ydDtcbn1cblxuaGVscGVycy5pc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQgPSBmdW5jdGlvbiBpc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQgKCkge1xuICBpZiAodGhpcy5pc0ZlYXR1cmVFbmFibGVkKENIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsb2cuZGVidWcoYEF1dG9tYXRlZCBDaHJvbWVkcml2ZXIgZG93bmxvYWQgaXMgZGlzYWJsZWQuIGAgK1xuICAgIGBVc2UgJyR7Q0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFfScgc2VydmVyIGZlYXR1cmUgdG8gZW5hYmxlIGl0YCk7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmhlbHBlcnMuc2V0dXBOZXdDaHJvbWVkcml2ZXIgPSBhc3luYyBmdW5jdGlvbiBzZXR1cE5ld0Nocm9tZWRyaXZlciAob3B0cywgY3VyRGV2aWNlSWQsIGFkYiwgY29udGV4dCA9IG51bGwpIHtcbiAgaWYgKG9wdHMuY2hyb21lRHJpdmVyUG9ydCkge1xuICAgIGxvZy53YXJuKGBUaGUgJ2Nocm9tZURyaXZlclBvcnQnIGNhcGFiaWxpdHkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnY2hyb21lZHJpdmVyUG9ydCcgaW5zdGVhZGApO1xuICAgIG9wdHMuY2hyb21lZHJpdmVyUG9ydCA9IG9wdHMuY2hyb21lRHJpdmVyUG9ydDtcbiAgfVxuXG4gIGlmIChvcHRzLmNocm9tZWRyaXZlclBvcnQpIHtcbiAgICBsb2cuZGVidWcoYFVzaW5nIHVzZXItc3BlY2lmaWVkIHBvcnQgJHtvcHRzLmNocm9tZWRyaXZlclBvcnR9IGZvciBjaHJvbWVkcml2ZXJgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBhIHNpbmdsZSBwb3J0IHdhc24ndCBnaXZlbiwgd2UnbGwgbG9vayBmb3IgYSBmcmVlIG9uZVxuICAgIG9wdHMuY2hyb21lZHJpdmVyUG9ydCA9IGF3YWl0IGdldENocm9tZWRyaXZlclBvcnQob3B0cy5jaHJvbWVkcml2ZXJQb3J0cyk7XG4gIH1cblxuICBjb25zdCBkZXRhaWxzID0gY29udGV4dCA/IHdlYnZpZXdIZWxwZXJzLmdldFdlYnZpZXdEZXRhaWxzKGFkYiwgY29udGV4dCkgOiB1bmRlZmluZWQ7XG4gIGlmICghXy5pc0VtcHR5KGRldGFpbHMpKSB7XG4gICAgbG9nLmRlYnVnKCdQYXNzaW5nIHdlYiB2aWV3IGRldGFpbHMgdG8gdGhlIENocm9tZWRyaXZlciBjb25zdHJ1Y3RvcjogJyArXG4gICAgICBKU09OLnN0cmluZ2lmeShkZXRhaWxzLCBudWxsLCAyKSk7XG4gIH1cblxuICBjb25zdCBjaHJvbWVkcml2ZXIgPSBuZXcgQ2hyb21lZHJpdmVyKHtcbiAgICBwb3J0OiBvcHRzLmNocm9tZWRyaXZlclBvcnQsXG4gICAgZXhlY3V0YWJsZTogb3B0cy5jaHJvbWVkcml2ZXJFeGVjdXRhYmxlLFxuICAgIGFkYixcbiAgICBjbWRBcmdzOiBvcHRzLmNocm9tZWRyaXZlckFyZ3MsXG4gICAgdmVyYm9zZTogISFvcHRzLnNob3dDaHJvbWVkcml2ZXJMb2csXG4gICAgZXhlY3V0YWJsZURpcjogb3B0cy5jaHJvbWVkcml2ZXJFeGVjdXRhYmxlRGlyLFxuICAgIG1hcHBpbmdQYXRoOiBvcHRzLmNocm9tZWRyaXZlckNocm9tZU1hcHBpbmdGaWxlLFxuICAgIGJ1bmRsZUlkOiBvcHRzLmNocm9tZUJ1bmRsZUlkLFxuICAgIHVzZVN5c3RlbUV4ZWN1dGFibGU6IG9wdHMuY2hyb21lZHJpdmVyVXNlU3lzdGVtRXhlY3V0YWJsZSxcbiAgICBkaXNhYmxlQnVpbGRDaGVjazogb3B0cy5jaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjayxcbiAgICBkZXRhaWxzLFxuICAgIGlzQXV0b2Rvd25sb2FkRW5hYmxlZDogKHRoaXMgfHwge30pLmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZFxuICAgICAgPyB0aGlzLmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCgpIDogdW5kZWZpbmVkLFxuICB9KTtcblxuICAvLyBtYWtlIHN1cmUgdGhlcmUgYXJlIGNocm9tZU9wdGlvbnNcbiAgb3B0cy5jaHJvbWVPcHRpb25zID0gb3B0cy5jaHJvbWVPcHRpb25zIHx8IHt9O1xuICAvLyB0cnkgb3V0IGFueSBwcmVmaXhlZCBjaHJvbWVPcHRpb25zLFxuICAvLyBhbmQgc3RyaXAgdGhlIHByZWZpeFxuICBmb3IgKGNvbnN0IG9wdCBvZiBfLmtleXMob3B0cykpIHtcbiAgICBpZiAob3B0LmVuZHNXaXRoKCc6Y2hyb21lT3B0aW9ucycpKSB7XG4gICAgICBsb2cud2FybihgTWVyZ2luZyAnJHtvcHR9JyBpbnRvICdjaHJvbWVPcHRpb25zJy4gVGhpcyBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcmApO1xuICAgICAgXy5tZXJnZShvcHRzLmNocm9tZU9wdGlvbnMsIG9wdHNbb3B0XSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2FwcyA9IHdlYnZpZXdIZWxwZXJzLmNyZWF0ZUNocm9tZWRyaXZlckNhcHMob3B0cywgY3VyRGV2aWNlSWQsIGRldGFpbHMpO1xuICBsb2cuZGVidWcoYEJlZm9yZSBzdGFydGluZyBjaHJvbWVkcml2ZXIsIGFuZHJvaWRQYWNrYWdlIGlzICcke2NhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUGFja2FnZX0nYCk7XG4gIGF3YWl0IGNocm9tZWRyaXZlci5zdGFydChjYXBzKTtcbiAgcmV0dXJuIGNocm9tZWRyaXZlcjtcbn07XG5jb25zdCBzZXR1cE5ld0Nocm9tZWRyaXZlciA9IGhlbHBlcnMuc2V0dXBOZXdDaHJvbWVkcml2ZXI7XG5cblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycywgc2V0dXBOZXdDaHJvbWVkcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
415
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIkNIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJnZXRDb250ZXh0cyIsIm9wdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJpc0Nocm9tZVNlc3Npb24iLCJ3ZWJ2aWV3c01hcHBpbmciLCJ3ZWJ2aWV3SGVscGVycyIsImdldFdlYlZpZXdzTWFwcGluZyIsImFkYiIsImFzc2lnbkNvbnRleHRzIiwic2V0Q29udGV4dCIsIm5hbWUiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXRUJWSUVXX1dJTiIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImNvbnRleHRzIiwiXyIsImluY2x1ZGVzIiwiZXJyb3JzIiwiTm9TdWNoQ29udGV4dEVycm9yIiwic3dpdGNoQ29udGV4dCIsIm1vYmlsZUdldENvbnRleHRzIiwiYW5kcm9pZERldmljZVNvY2tldCIsImVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzIiwid2Vidmlld0RldnRvb2xzUG9ydCIsImVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiIsIndlYnZpZXdzIiwicGFyc2VXZWJ2aWV3TmFtZXMiLCJOQVRJVkVfV0lOIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwiaXNDaHJvbWVkcml2ZXJDb250ZXh0Iiwic3RhcnRDaHJvbWVkcml2ZXJQcm94eSIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsIkVycm9yIiwiV0VCVklFV19CQVNFIiwiYXBwUGFja2FnZSIsImlzV2ViQ29udGV4dCIsImNvbnRleHQiLCJjZCIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwic2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciIsImNsb25lRGVlcCIsImNocm9tZVVzZVJ1bm5pbmdBcHAiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhbmRyb2lkUGFja2FnZSIsIm1hdGNoIiwibGVuZ3RoIiwiY2hyb21lQW5kcm9pZFBhY2thZ2UiLCJoYXMiLCJtYXAiLCJ3bSIsIndlYnZpZXdOYW1lIiwia25vd25QYWNrYWdlIiwiS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVMiLCJhcHBTdGF0ZSIsInF1ZXJ5QXBwU3RhdGUiLCJBUFBfU1RBVEUiLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJpbmZvIiwic2V0dXBOZXdDaHJvbWVkcml2ZXIiLCJjdXJEZXZpY2VJZCIsIm9uIiwiQ2hyb21lZHJpdmVyIiwiRVZFTlRfQ0hBTkdFRCIsIm1zZyIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIm9uQ2hyb21lZHJpdmVyU3RvcCIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwicHJveHlSZXEiLCJiaW5kIiwicHJveHlDb21tYW5kIiwiandwcm94eSIsImNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIndhcm4iLCJlcnIiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdG9wIiwibWVzc2FnZSIsInZpZXdOYW1lIiwiQ0hST01JVU1fV0lOIiwic2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJjaHJvbWVPcHRpb25zIiwiaXNBcnJheSIsImFyZ3MiLCJkaXNtaXNzQ2hyb21lV2VsY29tZSIsImFjdGl2aXR5IiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZWwiLCJmaW5kRWxPckVscyIsImNsaWNrIiwiRUxFTUVOVCIsImUiLCJzdGFydENocm9tZVNlc3Npb24iLCJrbm93blBhY2thZ2VzIiwiY2hyb21lQnVuZGxlSWQiLCJjaHJvbWVBbmRyb2lkQWN0aXZpdHkiLCJhcHBBY3Rpdml0eSIsImhhc1dvcmtpbmdXZWJ2aWV3IiwicmVzdGFydCIsImdldENocm9tZWRyaXZlclBvcnQiLCJwb3J0U3BlYyIsImdldFBvcnQiLCJCIiwicHJvbWlzaWZ5IiwiUG9ydEZpbmRlciIsInBvcnQiLCJmb3VuZFBvcnQiLCJwb3RlbnRpYWxQb3J0Iiwic3RvcFBvcnQiLCJwYXJzZUludCIsImlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCIsImlzRmVhdHVyZUVuYWJsZWQiLCJjaHJvbWVEcml2ZXJQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnRzIiwiZGV0YWlscyIsImdldFdlYnZpZXdEZXRhaWxzIiwidW5kZWZpbmVkIiwiaXNFbXB0eSIsImV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlIiwiY21kQXJncyIsImNocm9tZWRyaXZlckFyZ3MiLCJ2ZXJib3NlIiwic2hvd0Nocm9tZWRyaXZlckxvZyIsImV4ZWN1dGFibGVEaXIiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlRGlyIiwibWFwcGluZ1BhdGgiLCJjaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZSIsImJ1bmRsZUlkIiwidXNlU3lzdGVtRXhlY3V0YWJsZSIsImNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGUiLCJkaXNhYmxlQnVpbGRDaGVjayIsImNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrIiwiaXNBdXRvZG93bmxvYWRFbmFibGVkIiwib3B0IiwiZW5kc1dpdGgiLCJtZXJnZSIsImNhcHMiLCJjcmVhdGVDaHJvbWVkcml2ZXJDYXBzIiwic3RhcnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7Ozs7OztBQUVBLE1BQU1BLGlDQUFpQyxHQUFHLDJCQUExQztBQUVBLElBQUlDLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFBOUM7Ozs7QUFNQUYsUUFBUSxDQUFDRyxpQkFBVCxHQUE2QixlQUFlQSxpQkFBZixHQUFvQztBQUcvRCxTQUFPLEtBQUtDLFVBQUwsSUFBbUIsS0FBS0Msa0JBQUwsRUFBMUI7QUFDRCxDQUpEOztBQU1BTCxRQUFRLENBQUNNLFdBQVQsR0FBdUIsZUFBZUEsV0FBZixHQUE4QjtBQUNuRCxRQUFNQyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQUNDLElBQUFBLGVBQWUsRUFBRSxLQUFLQTtBQUF2QixHQUFkLEVBQXVELEtBQUtILElBQTVELENBQWI7QUFDQSxRQUFNSSxlQUFlLEdBQUcsTUFBTUMsd0JBQWVDLGtCQUFmLENBQWtDLEtBQUtDLEdBQXZDLEVBQTRDUCxJQUE1QyxDQUE5QjtBQUNBLFNBQU8sS0FBS1EsY0FBTCxDQUFvQkosZUFBcEIsQ0FBUDtBQUNELENBSkQ7O0FBTUFYLFFBQVEsQ0FBQ2dCLFVBQVQsR0FBc0IsZUFBZUEsVUFBZixDQUEyQkMsSUFBM0IsRUFBaUM7QUFDckQsTUFBSSxDQUFDQyxjQUFLQyxRQUFMLENBQWNGLElBQWQsQ0FBTCxFQUEwQjtBQUN4QkEsSUFBQUEsSUFBSSxHQUFHLEtBQUtaLGtCQUFMLEVBQVA7QUFDRCxHQUZELE1BRU8sSUFBSVksSUFBSSxLQUFLRywyQkFBYixFQUEwQjtBQUUvQkgsSUFBQUEsSUFBSSxHQUFHLEtBQUtJLGtCQUFMLEVBQVA7QUFDRDs7QUFFRCxNQUFJSixJQUFJLEtBQUssS0FBS2IsVUFBbEIsRUFBOEI7QUFDNUI7QUFDRDs7QUFFRCxRQUFNRyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQUNDLElBQUFBLGVBQWUsRUFBRSxLQUFLQTtBQUF2QixHQUFkLEVBQXVELEtBQUtILElBQTVELENBQWI7QUFDQSxRQUFNSSxlQUFlLEdBQUcsTUFBTUMsd0JBQWVDLGtCQUFmLENBQWtDLEtBQUtDLEdBQXZDLEVBQTRDUCxJQUE1QyxDQUE5QjtBQUNBLFFBQU1lLFFBQVEsR0FBRyxLQUFLUCxjQUFMLENBQW9CSixlQUFwQixDQUFqQjs7QUFFQSxNQUFJLENBQUNZLGdCQUFFQyxRQUFGLENBQVdGLFFBQVgsRUFBcUJMLElBQXJCLENBQUwsRUFBaUM7QUFDL0IsVUFBTSxJQUFJUSxtQkFBT0Msa0JBQVgsRUFBTjtBQUNEOztBQUVELFFBQU0sS0FBS0MsYUFBTCxDQUFtQlYsSUFBbkIsRUFBeUJOLGVBQXpCLENBQU47QUFDQSxPQUFLUCxVQUFMLEdBQWtCYSxJQUFsQjtBQUNELENBdEJEOztBQXNFQWpCLFFBQVEsQ0FBQzRCLGlCQUFULEdBQTZCLGVBQWVBLGlCQUFmLEdBQW9DO0FBQy9ELFFBQU1yQixJQUFJLEdBQUc7QUFDWHNCLElBQUFBLG1CQUFtQixFQUFFLEtBQUt0QixJQUFMLENBQVVzQixtQkFEcEI7QUFFWEMsSUFBQUEsdUJBQXVCLEVBQUUsSUFGZDtBQUdYQyxJQUFBQSxtQkFBbUIsRUFBRSxLQUFLeEIsSUFBTCxDQUFVd0IsbUJBSHBCO0FBSVhDLElBQUFBLDhCQUE4QixFQUFFLElBSnJCO0FBS1h0QixJQUFBQSxlQUFlLEVBQUUsS0FBS0E7QUFMWCxHQUFiO0FBT0EsU0FBTyxNQUFNRSx3QkFBZUMsa0JBQWYsQ0FBa0MsS0FBS0MsR0FBdkMsRUFBNENQLElBQTVDLENBQWI7QUFDRCxDQVREOztBQVdBTixPQUFPLENBQUNjLGNBQVIsR0FBeUIsU0FBU0EsY0FBVCxDQUF5QkosZUFBekIsRUFBMEM7QUFDakUsUUFBTUosSUFBSSxHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztBQUFDQyxJQUFBQSxlQUFlLEVBQUUsS0FBS0E7QUFBdkIsR0FBZCxFQUF1RCxLQUFLSCxJQUE1RCxDQUFiOztBQUNBLFFBQU0wQixRQUFRLEdBQUdyQix3QkFBZXNCLGlCQUFmLENBQWlDdkIsZUFBakMsRUFBa0RKLElBQWxELENBQWpCOztBQUNBLE9BQUtlLFFBQUwsR0FBZ0IsQ0FBQ2EsMEJBQUQsRUFBYSxHQUFHRixRQUFoQixDQUFoQjtBQUNBLE9BQUtHLEdBQUwsQ0FBU0MsS0FBVCxDQUFnQix1QkFBc0JDLElBQUksQ0FBQ0MsU0FBTCxDQUFlLEtBQUtqQixRQUFwQixDQUE4QixFQUFwRTtBQUNBLFNBQU8sS0FBS0EsUUFBWjtBQUNELENBTkQ7O0FBUUFyQixPQUFPLENBQUMwQixhQUFSLEdBQXdCLGVBQWVBLGFBQWYsQ0FBOEJWLElBQTlCLEVBQW9DTixlQUFwQyxFQUFxRDtBQUczRSxNQUFJLEtBQUs2QixxQkFBTCxDQUEyQnZCLElBQTNCLENBQUosRUFBc0M7QUFFcEMsVUFBTSxLQUFLd0Isc0JBQUwsQ0FBNEJ4QixJQUE1QixFQUFrQ04sZUFBbEMsQ0FBTjtBQUNELEdBSEQsTUFHTyxJQUFJLEtBQUs2QixxQkFBTCxDQUEyQixLQUFLcEMsVUFBaEMsQ0FBSixFQUFpRDtBQUt0RCxRQUFJLEtBQUtHLElBQUwsQ0FBVW1DLDRCQUFkLEVBQTRDO0FBQzFDLFdBQUtOLEdBQUwsQ0FBU0MsS0FBVCxDQUFlLDBFQUFmO0FBQ0EsWUFBTSxLQUFLTSx1QkFBTCxFQUFOO0FBQ0QsS0FIRCxNQUdPO0FBQ0wsWUFBTSxLQUFLQyx3QkFBTCxFQUFOO0FBQ0Q7QUFDRixHQVhNLE1BV0E7QUFDTCxVQUFNLElBQUlDLEtBQUosQ0FBVyxtREFBa0Q1QixJQUFLLEdBQWxFLENBQU47QUFDRDtBQUNGLENBcEJEOztBQThCQWhCLE9BQU8sQ0FBQ0ksa0JBQVIsR0FBNkIsU0FBU0Esa0JBQVQsR0FBK0I7QUFDMUQsU0FBTzhCLDBCQUFQO0FBQ0QsQ0FGRDs7QUFJQWxDLE9BQU8sQ0FBQ29CLGtCQUFSLEdBQTZCLFNBQVNBLGtCQUFULEdBQStCO0FBQzFELFNBQU95QiwrQkFBZSxLQUFLdkMsSUFBTCxDQUFVd0MsVUFBaEM7QUFDRCxDQUZEOztBQUlBOUMsT0FBTyxDQUFDK0MsWUFBUixHQUF1QixTQUFTQSxZQUFULEdBQXlCO0FBQzlDLFNBQU8sS0FBSzVDLFVBQUwsS0FBb0IsSUFBcEIsSUFBNEIsS0FBS0EsVUFBTCxLQUFvQitCLDBCQUF2RDtBQUNELENBRkQ7O0FBS0FsQyxPQUFPLENBQUN3QyxzQkFBUixHQUFpQyxlQUFlQSxzQkFBZixDQUF1Q1EsT0FBdkMsRUFBZ0R0QyxlQUFoRCxFQUFpRTtBQUNoRyxPQUFLeUIsR0FBTCxDQUFTQyxLQUFULENBQWdCLGdEQUErQ1ksT0FBUSxHQUF2RTtBQUVBLE1BQUlDLEVBQUo7O0FBQ0EsTUFBSSxLQUFLQyxvQkFBTCxDQUEwQkYsT0FBMUIsQ0FBSixFQUF3QztBQUd0QyxTQUFLYixHQUFMLENBQVNDLEtBQVQsQ0FBZ0IsNENBQTJDWSxPQUFRLGNBQW5FO0FBQ0FDLElBQUFBLEVBQUUsR0FBRyxLQUFLQyxvQkFBTCxDQUEwQkYsT0FBMUIsQ0FBTDtBQUNBLFVBQU1HLHlCQUF5QixDQUFDLEtBQUtoQixHQUFOLEVBQVdjLEVBQVgsQ0FBL0I7QUFDRCxHQU5ELE1BTU87QUFDTCxRQUFJM0MsSUFBSSxHQUFHZ0IsZ0JBQUU4QixTQUFGLENBQVksS0FBSzlDLElBQWpCLENBQVg7O0FBQ0FBLElBQUFBLElBQUksQ0FBQytDLG1CQUFMLEdBQTJCLElBQTNCOztBQU9BLFFBQUkvQyxJQUFJLENBQUNnRCwwQ0FBTCxJQUFtRE4sT0FBTyxLQUFNLEdBQUVILDRCQUFhLFFBQW5GLEVBQTRGO0FBQzFGLFVBQUlVLGNBQWMsR0FBR1AsT0FBTyxDQUFDUSxLQUFSLENBQWUsR0FBRVgsNEJBQWEsTUFBOUIsQ0FBckI7O0FBQ0EsVUFBSVUsY0FBYyxJQUFJQSxjQUFjLENBQUNFLE1BQWYsR0FBd0IsQ0FBOUMsRUFBaUQ7QUFDL0NuRCxRQUFBQSxJQUFJLENBQUNvRCxvQkFBTCxHQUE0QkgsY0FBYyxDQUFDLENBQUQsQ0FBMUM7QUFDRDs7QUFDRCxVQUFJLENBQUNqRCxJQUFJLENBQUNnRCwwQ0FBVixFQUFzRDtBQUNwRCxZQUFJaEMsZ0JBQUVxQyxHQUFGLENBQU0sS0FBS3JELElBQVgsRUFBaUIsZ0NBQWpCLEtBQXNELENBQUMsS0FBS0EsSUFBTCxDQUFVeUIsOEJBQXJFLEVBQXFHO0FBSW5HLGdCQUFNVixRQUFRLEdBQUdYLGVBQWUsQ0FBQ2tELEdBQWhCLENBQXFCQyxFQUFELElBQVFBLEVBQUUsQ0FBQ0MsV0FBL0IsQ0FBakI7O0FBQ0EsZUFBSyxNQUFNQyxZQUFYLElBQTJCQywwQ0FBM0IsRUFBdUQ7QUFDckQsZ0JBQUkxQyxnQkFBRUMsUUFBRixDQUFXRixRQUFYLEVBQXNCLEdBQUV3Qiw0QkFBYSxHQUFFa0IsWUFBYSxFQUFwRCxDQUFKLEVBQTREO0FBQzFEO0FBQ0Q7O0FBQ0Qsa0JBQU1FLFFBQVEsR0FBRyxNQUFNLEtBQUtDLGFBQUwsQ0FBbUJILFlBQW5CLENBQXZCOztBQUNBLGdCQUFJekMsZ0JBQUVDLFFBQUYsQ0FBVyxDQUFDNEMsMEJBQVVDLHFCQUFYLEVBQWtDRCwwQkFBVUUscUJBQTVDLENBQVgsRUFBK0VKLFFBQS9FLENBQUosRUFBOEY7QUFDNUYzRCxjQUFBQSxJQUFJLENBQUNvRCxvQkFBTCxHQUE0QkssWUFBNUI7QUFDQSxtQkFBSzVCLEdBQUwsQ0FBU0MsS0FBVCxDQUFnQix1Q0FBc0M5QixJQUFJLENBQUNvRCxvQkFBcUIsSUFBakUsR0FDWixnQkFBZVYsT0FBUSw2Q0FEMUI7QUFFQTtBQUNEO0FBQ0Y7QUFDRixTQWpCRCxNQWlCTztBQUNMLGVBQUssTUFBTWEsRUFBWCxJQUFpQm5ELGVBQWpCLEVBQWtDO0FBQ2hDLGdCQUFJbUQsRUFBRSxDQUFDQyxXQUFILEtBQW1CZCxPQUFuQixJQUE4QjFCLGdCQUFFcUMsR0FBRixDQUFNRSxFQUFOLGFBQU1BLEVBQU4sdUJBQU1BLEVBQUUsQ0FBRVMsSUFBVixFQUFnQixpQkFBaEIsQ0FBbEMsRUFBc0U7QUFDcEVoRSxjQUFBQSxJQUFJLENBQUNvRCxvQkFBTCxHQUE0QkcsRUFBRSxDQUFDUyxJQUFILENBQVEsaUJBQVIsQ0FBNUI7QUFDQSxtQkFBS25DLEdBQUwsQ0FBU0MsS0FBVCxDQUFnQix1Q0FBc0M5QixJQUFJLENBQUNvRCxvQkFBcUIsSUFBakUsR0FDWixnQkFBZVYsT0FBUSxVQUQxQjtBQUVBO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7QUFDRjs7QUFFREMsSUFBQUEsRUFBRSxHQUFHLE1BQU0sS0FBS3NCLG9CQUFMLENBQTBCakUsSUFBMUIsRUFBZ0MsS0FBS08sR0FBTCxDQUFTMkQsV0FBekMsRUFBc0QsS0FBSzNELEdBQTNELEVBQWdFbUMsT0FBaEUsQ0FBWDtBQUdBQyxJQUFBQSxFQUFFLENBQUN3QixFQUFILENBQU1DLDRCQUFhQyxhQUFuQixFQUFtQ0MsR0FBRCxJQUFTO0FBQ3pDLFVBQUlBLEdBQUcsQ0FBQ0MsS0FBSixLQUFjSCw0QkFBYUksYUFBL0IsRUFBOEM7QUFDNUMsYUFBS0Msa0JBQUwsQ0FBd0IvQixPQUF4QjtBQUNEO0FBQ0YsS0FKRDtBQU1BLFNBQUtFLG9CQUFMLENBQTBCRixPQUExQixJQUFxQ0MsRUFBckM7QUFDRDs7QUFFRCxPQUFLK0IsWUFBTCxHQUFvQi9CLEVBQXBCO0FBQ0EsT0FBS2dDLFdBQUwsR0FBbUIsS0FBS0QsWUFBTCxDQUFrQkUsUUFBbEIsQ0FBMkJDLElBQTNCLENBQWdDLEtBQUtILFlBQXJDLENBQW5CO0FBQ0EsT0FBS0ksWUFBTCxHQUFvQixLQUFLSixZQUFMLENBQWtCSyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBa0NILElBQWxDLENBQXVDLEtBQUtILFlBQUwsQ0FBa0JLLE9BQXpELENBQXBCO0FBQ0EsT0FBS0UsY0FBTCxHQUFzQixJQUF0QjtBQUNELENBdkVEOztBQTBFQXZGLE9BQU8sQ0FBQzJDLHdCQUFSLEdBQW1DLFNBQVNBLHdCQUFULEdBQXFDO0FBQ3RFLE9BQUtxQyxZQUFMLEdBQW9CLElBQXBCO0FBQ0EsT0FBS0MsV0FBTCxHQUFtQixJQUFuQjtBQUNBLE9BQUtHLFlBQUwsR0FBb0IsSUFBcEI7QUFDQSxPQUFLRyxjQUFMLEdBQXNCLEtBQXRCO0FBQ0QsQ0FMRDs7QUFRQXZGLE9BQU8sQ0FBQytFLGtCQUFSLEdBQTZCLGVBQWVBLGtCQUFmLENBQW1DL0IsT0FBbkMsRUFBNEM7QUFDdkUsT0FBS2IsR0FBTCxDQUFTcUQsSUFBVCxDQUFlLDRCQUEyQnhDLE9BQVEsdUJBQWxEOztBQUNBLE1BQUlBLE9BQU8sS0FBSyxLQUFLN0MsVUFBckIsRUFBaUM7QUFHL0IsUUFBSXNGLEdBQUcsR0FBRyxJQUFJN0MsS0FBSixDQUFVLCtDQUFWLENBQVY7QUFDQSxVQUFNLEtBQUs4Qyx1QkFBTCxDQUE2QkQsR0FBN0IsQ0FBTjtBQUNELEdBTEQsTUFLTztBQUdMLFNBQUt0RCxHQUFMLENBQVNxRCxJQUFULENBQWMsOERBQ1osbUJBREY7QUFFQSxXQUFPLEtBQUt0QyxvQkFBTCxDQUEwQkYsT0FBMUIsQ0FBUDtBQUNEO0FBQ0YsQ0FkRDs7QUFrQkFoRCxPQUFPLENBQUMwQyx1QkFBUixHQUFrQyxlQUFlQSx1QkFBZixHQUEwQztBQUMxRSxPQUFLQyx3QkFBTDs7QUFDQSxPQUFLLElBQUlLLE9BQVQsSUFBb0IxQixnQkFBRXFFLElBQUYsQ0FBTyxLQUFLekMsb0JBQVosQ0FBcEIsRUFBdUQ7QUFDckQsUUFBSUQsRUFBRSxHQUFHLEtBQUtDLG9CQUFMLENBQTBCRixPQUExQixDQUFUO0FBQ0EsU0FBS2IsR0FBTCxDQUFTQyxLQUFULENBQWdCLHFDQUFvQ1ksT0FBUSxFQUE1RDtBQUVBQyxJQUFBQSxFQUFFLENBQUMyQyxrQkFBSCxDQUFzQmxCLDRCQUFhQyxhQUFuQzs7QUFDQSxRQUFJO0FBQ0YsWUFBTTFCLEVBQUUsQ0FBQzRDLElBQUgsRUFBTjtBQUNELEtBRkQsQ0FFRSxPQUFPSixHQUFQLEVBQVk7QUFDWixXQUFLdEQsR0FBTCxDQUFTcUQsSUFBVCxDQUFlLGdDQUErQkMsR0FBRyxDQUFDSyxPQUFRLEVBQTFEO0FBQ0Q7O0FBQ0QsV0FBTyxLQUFLNUMsb0JBQUwsQ0FBMEJGLE9BQTFCLENBQVA7QUFDRDtBQUNGLENBZEQ7O0FBZ0JBaEQsT0FBTyxDQUFDdUMscUJBQVIsR0FBZ0MsU0FBU0EscUJBQVQsQ0FBZ0N3RCxRQUFoQyxFQUEwQztBQUN4RSxTQUFPekUsZ0JBQUVDLFFBQUYsQ0FBV3dFLFFBQVgsRUFBcUI1RSwyQkFBckIsS0FBcUM0RSxRQUFRLEtBQUtDLDRCQUF6RDtBQUNELENBRkQ7O0FBSUFoRyxPQUFPLENBQUNpRywwQkFBUixHQUFxQyxTQUFTQSwwQkFBVCxHQUF1QztBQUMxRSxTQUFPLENBQUMsQ0FBQyxLQUFLM0YsSUFBTCxDQUFVNEYsYUFBWixJQUNBNUUsZ0JBQUU2RSxPQUFGLENBQVUsS0FBSzdGLElBQUwsQ0FBVTRGLGFBQVYsQ0FBd0JFLElBQWxDLENBREEsSUFFQSxLQUFLOUYsSUFBTCxDQUFVNEYsYUFBVixDQUF3QkUsSUFBeEIsQ0FBNkI3RSxRQUE3QixDQUFzQyxnQkFBdEMsQ0FGUDtBQUdELENBSkQ7O0FBTUF2QixPQUFPLENBQUNxRyxvQkFBUixHQUErQixlQUFlQSxvQkFBZixHQUF1QztBQUNwRSxPQUFLbEUsR0FBTCxDQUFTbUMsSUFBVCxDQUFjLGtDQUFkO0FBQ0EsTUFBSWdDLFFBQVEsR0FBRyxNQUFNLEtBQUtDLGtCQUFMLEVBQXJCOztBQUNBLE1BQUlELFFBQVEsS0FBSyx1REFBakIsRUFBMEU7QUFDeEUsU0FBS25FLEdBQUwsQ0FBU21DLElBQVQsQ0FBYyxtREFBZDtBQUNBO0FBQ0Q7O0FBQ0QsTUFBSWtDLEVBQUUsR0FBRyxNQUFNLEtBQUtDLFdBQUwsQ0FBaUIsSUFBakIsRUFBdUIsb0NBQXZCLEVBQTZELEtBQTdELENBQWY7QUFDQSxRQUFNLEtBQUtDLEtBQUwsQ0FBV0YsRUFBRSxDQUFDRyxPQUFkLENBQU47O0FBQ0EsTUFBSTtBQUNGLFFBQUlILEVBQUUsR0FBRyxNQUFNLEtBQUtDLFdBQUwsQ0FBaUIsSUFBakIsRUFBdUIsdUNBQXZCLEVBQWdFLEtBQWhFLENBQWY7QUFDQSxVQUFNLEtBQUtDLEtBQUwsQ0FBV0YsRUFBRSxDQUFDRyxPQUFkLENBQU47QUFDRCxHQUhELENBR0UsT0FBT0MsQ0FBUCxFQUFVO0FBR1YsU0FBS3pFLEdBQUwsQ0FBU3FELElBQVQsQ0FBZSxrREFBaURvQixDQUFDLENBQUNkLE9BQVEsRUFBMUU7QUFDRDtBQUNGLENBakJEOztBQW1CQTlGLE9BQU8sQ0FBQzZHLGtCQUFSLEdBQTZCLGVBQWVBLGtCQUFmLEdBQXFDO0FBQ2hFLE9BQUsxRSxHQUFMLENBQVNtQyxJQUFULENBQWMseUNBQWQ7O0FBQ0EsTUFBSWhFLElBQUksR0FBR2dCLGdCQUFFOEIsU0FBRixDQUFZLEtBQUs5QyxJQUFqQixDQUFYOztBQUVBLFFBQU13RyxhQUFhLEdBQUcsQ0FDcEIsMkJBRG9CLEVBRXBCLG9CQUZvQixFQUdwQixpQkFIb0IsRUFJcEIscUJBSm9CLEVBS3BCLDRCQUxvQixDQUF0Qjs7QUFRQSxNQUFJeEYsZ0JBQUVDLFFBQUYsQ0FBV3VGLGFBQVgsRUFBMEIsS0FBS3hHLElBQUwsQ0FBVXdDLFVBQXBDLENBQUosRUFBcUQ7QUFDbkR4QyxJQUFBQSxJQUFJLENBQUN5RyxjQUFMLEdBQXNCLEtBQUt6RyxJQUFMLENBQVV3QyxVQUFoQztBQUNELEdBRkQsTUFFTztBQUNMeEMsSUFBQUEsSUFBSSxDQUFDMEcscUJBQUwsR0FBNkIsS0FBSzFHLElBQUwsQ0FBVTJHLFdBQXZDO0FBQ0Q7O0FBQ0QsT0FBS2pDLFlBQUwsR0FBb0IsTUFBTSxLQUFLVCxvQkFBTCxDQUEwQmpFLElBQTFCLEVBQWdDLEtBQUtPLEdBQUwsQ0FBUzJELFdBQXpDLEVBQXNELEtBQUszRCxHQUEzRCxDQUExQjtBQUNBLE9BQUttRSxZQUFMLENBQWtCUCxFQUFsQixDQUFxQkMsNEJBQWFDLGFBQWxDLEVBQWtEQyxHQUFELElBQVM7QUFDeEQsUUFBSUEsR0FBRyxDQUFDQyxLQUFKLEtBQWNILDRCQUFhSSxhQUEvQixFQUE4QztBQUM1QyxXQUFLQyxrQkFBTCxDQUF3QmlCLDRCQUF4QjtBQUNEO0FBQ0YsR0FKRDtBQVNBLE9BQUs3RixVQUFMLEdBQWtCNkYsNEJBQWxCO0FBQ0EsT0FBSzlDLG9CQUFMLENBQTBCOEMsNEJBQTFCLElBQTBDLEtBQUtoQixZQUEvQztBQUNBLE9BQUtDLFdBQUwsR0FBbUIsS0FBS0QsWUFBTCxDQUFrQkUsUUFBbEIsQ0FBMkJDLElBQTNCLENBQWdDLEtBQUtILFlBQXJDLENBQW5CO0FBQ0EsT0FBS0ksWUFBTCxHQUFvQixLQUFLSixZQUFMLENBQWtCSyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBa0NILElBQWxDLENBQXVDLEtBQUtILFlBQUwsQ0FBa0JLLE9BQXpELENBQXBCO0FBQ0EsT0FBS0UsY0FBTCxHQUFzQixJQUF0Qjs7QUFFQSxNQUFJLEtBQUtVLDBCQUFMLEVBQUosRUFBdUM7QUFFckMsVUFBTSxLQUFLSSxvQkFBTCxFQUFOO0FBQ0Q7QUFDRixDQXJDRDs7QUE0Q0EsZUFBZWxELHlCQUFmLENBQTBDaEIsR0FBMUMsRUFBK0M2QyxZQUEvQyxFQUE2RDtBQUczRCxNQUFJLEVBQUMsTUFBTUEsWUFBWSxDQUFDa0MsaUJBQWIsRUFBUCxDQUFKLEVBQTZDO0FBQzNDL0UsSUFBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVUsbURBQ0csOEJBRGI7QUFFQSxVQUFNNEMsWUFBWSxDQUFDbUMsT0FBYixFQUFOO0FBQ0Q7O0FBQ0QsU0FBT25DLFlBQVA7QUFDRDs7QUFlRCxlQUFlb0MsbUJBQWYsQ0FBb0NDLFFBQXBDLEVBQThDbEYsR0FBRyxHQUFHLElBQXBELEVBQTBEO0FBQ3hELFFBQU1tRixPQUFPLEdBQUdDLGtCQUFFQyxTQUFGLENBQVlDLG9CQUFXSCxPQUF2QixFQUFnQztBQUFDdEUsSUFBQUEsT0FBTyxFQUFFeUU7QUFBVixHQUFoQyxDQUFoQjs7QUFJQSxNQUFJLENBQUNKLFFBQUwsRUFBZTtBQUNiLFVBQU1LLElBQUksR0FBRyxNQUFNSixPQUFPLEVBQTFCO0FBQ0FuRixJQUFBQSxHQUFHLFNBQUgsSUFBQUEsR0FBRyxXQUFILFlBQUFBLEdBQUcsQ0FBRUMsS0FBTCxDQUFZLGlEQUFnRHNGLElBQUssRUFBakU7QUFDQSxXQUFPQSxJQUFQO0FBQ0Q7O0FBR0R2RixFQUFBQSxHQUFHLFNBQUgsSUFBQUEsR0FBRyxXQUFILFlBQUFBLEdBQUcsQ0FBRUMsS0FBTCxDQUFZLG1EQUFrREMsSUFBSSxDQUFDQyxTQUFMLENBQWUrRSxRQUFmLENBQXlCLEVBQXZGO0FBQ0EsTUFBSU0sU0FBUyxHQUFHLElBQWhCOztBQUNBLE9BQUssTUFBTUMsYUFBWCxJQUE0QlAsUUFBNUIsRUFBc0M7QUFDcEMsUUFBSUssSUFBSixFQUFVRyxRQUFWOztBQUNBLFFBQUl2RyxnQkFBRTZFLE9BQUYsQ0FBVXlCLGFBQVYsQ0FBSixFQUE4QjtBQUMzQixPQUFDRixJQUFELEVBQU9HLFFBQVAsSUFBbUJELGFBQXBCO0FBQ0QsS0FGRCxNQUVPO0FBQ0xGLE1BQUFBLElBQUksR0FBR0ksUUFBUSxDQUFDRixhQUFELEVBQWdCLEVBQWhCLENBQWY7QUFDQUMsTUFBQUEsUUFBUSxHQUFHSCxJQUFYO0FBQ0Q7O0FBQ0QsUUFBSTtBQUNGdkYsTUFBQUEsR0FBRyxTQUFILElBQUFBLEdBQUcsV0FBSCxZQUFBQSxHQUFHLENBQUVDLEtBQUwsQ0FBWSx1QkFBc0JzRixJQUFLLElBQUdHLFFBQVMsRUFBbkQ7QUFDQUYsTUFBQUEsU0FBUyxHQUFHLE1BQU1MLE9BQU8sQ0FBQztBQUFDSSxRQUFBQSxJQUFEO0FBQU9HLFFBQUFBO0FBQVAsT0FBRCxDQUF6QjtBQUNBO0FBQ0QsS0FKRCxDQUlFLE9BQU9qQixDQUFQLEVBQVU7QUFDVnpFLE1BQUFBLEdBQUcsU0FBSCxJQUFBQSxHQUFHLFdBQUgsWUFBQUEsR0FBRyxDQUFFQyxLQUFMLENBQVkseUJBQXdCc0YsSUFBSyxJQUFHRyxRQUFTLGdCQUFyRDtBQUNEO0FBQ0Y7O0FBRUQsTUFBSUYsU0FBUyxLQUFLLElBQWxCLEVBQXdCO0FBQ3RCLFVBQU0sSUFBSS9FLEtBQUosQ0FBVyxvREFBRCxHQUNDLDBCQUF5QlAsSUFBSSxDQUFDQyxTQUFMLENBQWUrRSxRQUFmLENBQXlCLEVBRDdELENBQU47QUFFRDs7QUFFRGxGLEVBQUFBLEdBQUcsU0FBSCxJQUFBQSxHQUFHLFdBQUgsWUFBQUEsR0FBRyxDQUFFQyxLQUFMLENBQVksbUJBQWtCdUYsU0FBVSxtQkFBeEM7QUFDQSxTQUFPQSxTQUFQO0FBQ0Q7O0FBRUQzSCxPQUFPLENBQUMrSCxpQ0FBUixHQUE0QyxTQUFTQSxpQ0FBVCxHQUE4QztBQUFBOztBQUN4RixNQUFJLEtBQUtDLGdCQUFMLENBQXNCbEksaUNBQXRCLENBQUosRUFBOEQ7QUFDNUQsV0FBTyxJQUFQO0FBQ0Q7O0FBQ0QsZ0VBQU1xQyxHQUFOLHdEQUFXQyxLQUFYLENBQWtCLCtDQUFELEdBQ2QsUUFBT3RDLGlDQUFrQywrQkFENUM7QUFFQSxTQUFPLEtBQVA7QUFDRCxDQVBEOztBQVNBRSxPQUFPLENBQUN1RSxvQkFBUixHQUErQixlQUFlQSxvQkFBZixDQUFxQ2pFLElBQXJDLEVBQTJDa0UsV0FBM0MsRUFBd0QzRCxHQUF4RCxFQUE2RG1DLE9BQU8sR0FBRyxJQUF2RSxFQUE2RTtBQUFBOztBQUMxRyxNQUFJMUMsSUFBSSxDQUFDMkgsZ0JBQVQsRUFBMkI7QUFBQTs7QUFDekIsbUVBQU05RixHQUFOLDBEQUFXcUQsSUFBWCxDQUFpQix3RkFBakI7QUFDQWxGLElBQUFBLElBQUksQ0FBQzRILGdCQUFMLEdBQXdCNUgsSUFBSSxDQUFDMkgsZ0JBQTdCO0FBQ0Q7O0FBRUQsTUFBSTNILElBQUksQ0FBQzRILGdCQUFULEVBQTJCO0FBQUE7O0FBQ3pCLG1FQUFNL0YsR0FBTiwwREFBV0MsS0FBWCxDQUFrQiw2QkFBNEI5QixJQUFJLENBQUM0SCxnQkFBaUIsbUJBQXBFO0FBQ0QsR0FGRCxNQUVPO0FBRUw1SCxJQUFBQSxJQUFJLENBQUM0SCxnQkFBTCxHQUF3QixNQUFNZCxtQkFBbUIsQ0FBQzlHLElBQUksQ0FBQzZILGlCQUFOLEVBQXlCLElBQXpCLGFBQXlCLElBQXpCLHVCQUF5QixLQUFNaEcsR0FBL0IsQ0FBakQ7QUFDRDs7QUFFRCxRQUFNaUcsT0FBTyxHQUFHcEYsT0FBTyxHQUFHckMsd0JBQWUwSCxpQkFBZixDQUFpQ3hILEdBQWpDLEVBQXNDbUMsT0FBdEMsQ0FBSCxHQUFvRHNGLFNBQTNFOztBQUNBLE1BQUksQ0FBQ2hILGdCQUFFaUgsT0FBRixDQUFVSCxPQUFWLENBQUwsRUFBeUI7QUFBQTs7QUFDdkIsbUVBQU1qRyxHQUFOLDBEQUFXQyxLQUFYLENBQWlCLCtEQUNmQyxJQUFJLENBQUNDLFNBQUwsQ0FBZThGLE9BQWYsRUFBd0IsSUFBeEIsRUFBOEIsQ0FBOUIsQ0FERjtBQUVEOztBQUVELFFBQU1wRCxZQUFZLEdBQUcsSUFBSU4sMkJBQUosQ0FBaUI7QUFDcENnRCxJQUFBQSxJQUFJLEVBQUVwSCxJQUFJLENBQUM0SCxnQkFEeUI7QUFFcENNLElBQUFBLFVBQVUsRUFBRWxJLElBQUksQ0FBQ21JLHNCQUZtQjtBQUdwQzVILElBQUFBLEdBSG9DO0FBSXBDNkgsSUFBQUEsT0FBTyxFQUFFcEksSUFBSSxDQUFDcUksZ0JBSnNCO0FBS3BDQyxJQUFBQSxPQUFPLEVBQUUsQ0FBQyxDQUFDdEksSUFBSSxDQUFDdUksbUJBTG9CO0FBTXBDQyxJQUFBQSxhQUFhLEVBQUV4SSxJQUFJLENBQUN5SSx5QkFOZ0I7QUFPcENDLElBQUFBLFdBQVcsRUFBRTFJLElBQUksQ0FBQzJJLDZCQVBrQjtBQVFwQ0MsSUFBQUEsUUFBUSxFQUFFNUksSUFBSSxDQUFDeUcsY0FScUI7QUFTcENvQyxJQUFBQSxtQkFBbUIsRUFBRTdJLElBQUksQ0FBQzhJLCtCQVRVO0FBVXBDQyxJQUFBQSxpQkFBaUIsRUFBRS9JLElBQUksQ0FBQ2dKLDZCQVZZO0FBV3BDbEIsSUFBQUEsT0FYb0M7QUFZcENtQixJQUFBQSxxQkFBcUIsRUFBRSxJQUFGLGFBQUUsSUFBRixnREFBRSxLQUFNeEIsaUNBQVIsMERBQUU7QUFaYSxHQUFqQixDQUFyQjtBQWdCQXpILEVBQUFBLElBQUksQ0FBQzRGLGFBQUwsR0FBcUI1RixJQUFJLENBQUM0RixhQUFMLElBQXNCLEVBQTNDOztBQUdBLE9BQUssTUFBTXNELEdBQVgsSUFBa0JsSSxnQkFBRXFFLElBQUYsQ0FBT3JGLElBQVAsQ0FBbEIsRUFBZ0M7QUFDOUIsUUFBSWtKLEdBQUcsQ0FBQ0MsUUFBSixDQUFhLGdCQUFiLENBQUosRUFBb0M7QUFBQTs7QUFDbEMscUVBQU10SCxHQUFOLDBEQUFXcUQsSUFBWCxDQUFpQixZQUFXZ0UsR0FBSSw0REFBaEM7O0FBQ0FsSSxzQkFBRW9JLEtBQUYsQ0FBUXBKLElBQUksQ0FBQzRGLGFBQWIsRUFBNEI1RixJQUFJLENBQUNrSixHQUFELENBQWhDO0FBQ0Q7QUFDRjs7QUFFRCxRQUFNRyxJQUFJLEdBQUdoSix3QkFBZWlKLHNCQUFmLENBQXNDdEosSUFBdEMsRUFBNENrRSxXQUE1QyxFQUF5RDRELE9BQXpELENBQWI7O0FBQ0EsaUVBQU1qRyxHQUFOLDBEQUFXQyxLQUFYLENBQWtCLG9EQUFtRHVILElBQUksQ0FBQ3pELGFBQUwsQ0FBbUIzQyxjQUFlLEdBQXZHO0FBQ0EsUUFBTXlCLFlBQVksQ0FBQzZFLEtBQWIsQ0FBbUJGLElBQW5CLENBQU47QUFDQSxTQUFPM0UsWUFBUDtBQUNELENBakREOztBQWtEQSxNQUFNVCxvQkFBb0IsR0FBR3ZFLE9BQU8sQ0FBQ3VFLG9CQUFyQzs7QUFHQWhFLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjUCxVQUFkLEVBQTBCRixRQUExQixFQUFvQ0MsT0FBcEM7ZUFFZUMsVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQ2hyb21lZHJpdmVyIGZyb20gJ2FwcGl1bS1jaHJvbWVkcml2ZXInO1xuaW1wb3J0IFBvcnRGaW5kZXIgZnJvbSAncG9ydGZpbmRlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHtcbiAgZGVmYXVsdCBhcyB3ZWJ2aWV3SGVscGVycyxcbiAgTkFUSVZFX1dJTiwgV0VCVklFV19CQVNFLCBXRUJWSUVXX1dJTiwgQ0hST01JVU1fV0lOLCBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FU1xufSBmcm9tICcuLi93ZWJ2aWV3LWhlbHBlcnMnO1xuaW1wb3J0IHsgQVBQX1NUQVRFIH0gZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcblxuY29uc3QgQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFID0gJ2Nocm9tZWRyaXZlcl9hdXRvZG93bmxvYWQnO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQWN0dWFsIE1KU09OV1AgY29tbWFuZCBoYW5kbGVyc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuY29tbWFuZHMuZ2V0Q3VycmVudENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50Q29udGV4dCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAvLyBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGBudWxsYCwgaW5kaWNhdGluZyBubyBjb250ZXh0XG4gIC8vIGV4cGxpY2l0bHkgc2V0LCBpdCBpcyB0aGUgZGVmYXVsdCBjb250ZXh0XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQgfHwgdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbn07XG5cbmNvbW1hbmRzLmdldENvbnRleHRzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dHMgKCkge1xuICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7aXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvbn0sIHRoaXMub3B0cyk7XG4gIGNvbnN0IHdlYnZpZXdzTWFwcGluZyA9IGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyh0aGlzLmFkYiwgb3B0cyk7XG4gIHJldHVybiB0aGlzLmFzc2lnbkNvbnRleHRzKHdlYnZpZXdzTWFwcGluZyk7XG59O1xuXG5jb21tYW5kcy5zZXRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29udGV4dCAobmFtZSkge1xuICBpZiAoIXV0aWwuaGFzVmFsdWUobmFtZSkpIHtcbiAgICBuYW1lID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbiAgfSBlbHNlIGlmIChuYW1lID09PSBXRUJWSUVXX1dJTikge1xuICAgIC8vIGhhbmRsZSBzZXRDb250ZXh0IFwiV0VCVklFV1wiXG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gIH1cbiAgLy8gaWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgY29udGV4dCB3ZSB3YW50LCBkbyBub3RoaW5nXG4gIGlmIChuYW1lID09PSB0aGlzLmN1ckNvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7aXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvbn0sIHRoaXMub3B0cyk7XG4gIGNvbnN0IHdlYnZpZXdzTWFwcGluZyA9IGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyh0aGlzLmFkYiwgb3B0cyk7XG4gIGNvbnN0IGNvbnRleHRzID0gdGhpcy5hc3NpZ25Db250ZXh0cyh3ZWJ2aWV3c01hcHBpbmcpO1xuICAvLyBpZiB0aGUgY29udGV4dCB3ZSB3YW50IGRvZXNuJ3QgZXhpc3QsIGZhaWxcbiAgaWYgKCFfLmluY2x1ZGVzKGNvbnRleHRzLCBuYW1lKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoQ29udGV4dEVycm9yKCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnN3aXRjaENvbnRleHQobmFtZSwgd2Vidmlld3NNYXBwaW5nKTtcbiAgdGhpcy5jdXJDb250ZXh0ID0gbmFtZTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2Vidmlld3NNYXBwaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvYyBUaGUgbmFtZSBvZiB0aGUgRGV2dG9vbHMgVW5peCBzb2NrZXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWJ2aWV3IFRoZSB3ZWIgdmlldyBhbGlhcy4gTG9va3MgbGlrZSBgV0VCVklFV19gXG4gKiBwcmVmaXggcGx1cyBQSUQgb3IgcGFja2FnZSBuYW1lXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGluZm8gV2VidmlldyBpbmZvcm1hdGlvbiBhcyBpdCBpcyByZXRyaWV2ZWQgYnlcbiAqIC9qc29uL3ZlcnNpb24gQ0RQIGVuZHBvaW50XG4gKiBAcHJvcGVydHkgez9BcnJheTxPYmplY3Q+fSBwYWdlcyBXZWJ2aWV3IHBhZ2VzIGxpc3QgYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi9saXN0IENEUCBlbmRwb2ludFxuICogQHByb3Blcnkgez9zdHJpbmd9IHdlYnZpZXdOYW1lIEFuIGFjdHVhbCB3ZWJ2aWV3IG5hbWUgZm9yIHN3aXRjaGluZyBjb250ZXh0LlxuICogVGhpcyB2YWx1ZSBiZWNvbWVzIG51bGwgd2hlbiBmYWlsaW5nIHRvIGZpbmQgYSBQSUQgZm9yIGEgd2Vidmlldy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGpzb24gZGVtb25zdHJhdGVzIHRoZSBleGFtcGxlIG9mIFdlYnZpZXdzTWFwcGluZyBvYmplY3QuXG4gKiBOb3RlIHRoYXQgYGRlc2NyaXB0aW9uYCBpbiBgcGFnZWAgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBtb3N0IGxpa2VseSB3aGVuIGl0IGNvbWVzIHRvIE1vYmlsZSBDaHJvbWUpXG4gKiB7XG4gKiAgIFwicHJvY1wiOiBcIkB3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV8yMjEzOFwiLFxuICogICBcIndlYnZpZXdcIjogXCJXRUJWSUVXXzIyMTM4XCIsXG4gKiAgIFwiaW5mb1wiOiB7XG4gKiAgICAgXCJBbmRyb2lkLVBhY2thZ2VcIjogXCJpby5hcHBpdW0uc2V0dGluZ3NcIixcbiAqICAgICBcIkJyb3dzZXJcIjogXCJDaHJvbWUvNzQuMC4zNzI5LjE4NVwiLFxuICogICAgIFwiUHJvdG9jb2wtVmVyc2lvblwiOiBcIjEuM1wiLFxuICogICAgIFwiVXNlci1BZ2VudFwiOiBcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgQW5kcm9pZCBTREsgYnVpbHQgZm9yIHg4NiBCdWlsZC9RU1IxLjE5MDkyMC4wMDE7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvNzQuMC4zNzI5LjE4NSBNb2JpbGUgU2FmYXJpLzUzNy4zNlwiLFxuICogICAgIFwiVjgtVmVyc2lvblwiOiBcIjcuNC4yODguMjhcIixcbiAqICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2IChAMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZClcIixcbiAqICAgICBcIndlYlNvY2tldERlYnVnZ2VyVXJsXCI6IFwid3M6Ly8xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvYnJvd3NlclwiXG4gKiAgIH0sXG4gKiAgIFwicGFnZXNcIjogW1xuICogICAgIHtcbiAqICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ7XFxcImF0dGFjaGVkXFxcIjp0cnVlLFxcXCJlbXB0eVxcXCI6ZmFsc2UsXFxcImhlaWdodFxcXCI6MTQ1OCxcXFwic2NyZWVuWFxcXCI6MCxcXFwic2NyZWVuWVxcXCI6MzM2LFxcXCJ2aXNpYmxlXFxcIjp0cnVlLFxcXCJ3aWR0aFxcXCI6MTA4MH1cIixcbiAqICAgICAgIFwiZGV2dG9vbHNGcm9udGVuZFVybFwiOiBcImh0dHA6Ly9jaHJvbWUtZGV2dG9vbHMtZnJvbnRlbmQuYXBwc3BvdC5jb20vc2VydmVfcmV2L0AyMjk1NTY4MmY5NGNlMDkzMzYxOTdiZmI4ZGZmZWE5OTFmYTMyZjBkL2luc3BlY3Rvci5odG1sP3dzPTEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcImlkXCI6IFwiMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIixcbiAqICAgICAgIFwidGl0bGVcIjogXCJSZWxlYXNlcyDCtyBhcHBpdW0vYXBwaXVtIMK3IEdpdEh1YlwiLFxuICogICAgICAgXCJ0eXBlXCI6IFwicGFnZVwiLFxuICogICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9yZWxlYXNlc1wiLFxuICogICAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL3BhZ2UvMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIlxuICogICAgIH1cbiAqICAgXSxcbiAqICAgXCJ3ZWJ2aWV3TmFtZVwiOiBcIldFQlZJRVdfY29tLmlvLmFwcGl1bS5zZXR0aW5nXCJcbiAqIH1cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSB3ZWJ2aWV3c01hcHBpbmcgYmFzZWQgb24gQ0RQIGVuZHBvaW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PFdlYnZpZXdzTWFwcGluZz59IHdlYnZpZXdzTWFwcGluZ1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldENvbnRleHRzICgpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBhbmRyb2lkRGV2aWNlU29ja2V0OiB0aGlzLm9wdHMuYW5kcm9pZERldmljZVNvY2tldCxcbiAgICBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlczogdHJ1ZSxcbiAgICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB0aGlzLm9wdHMud2Vidmlld0RldnRvb2xzUG9ydCxcbiAgICBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb246IHRydWUsXG4gICAgaXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvblxuICB9O1xuICByZXR1cm4gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCBvcHRzKTtcbn07XG5cbmhlbHBlcnMuYXNzaWduQ29udGV4dHMgPSBmdW5jdGlvbiBhc3NpZ25Db250ZXh0cyAod2Vidmlld3NNYXBwaW5nKSB7XG4gIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHtpc0Nocm9tZVNlc3Npb246IHRoaXMuaXNDaHJvbWVTZXNzaW9ufSwgdGhpcy5vcHRzKTtcbiAgY29uc3Qgd2Vidmlld3MgPSB3ZWJ2aWV3SGVscGVycy5wYXJzZVdlYnZpZXdOYW1lcyh3ZWJ2aWV3c01hcHBpbmcsIG9wdHMpO1xuICB0aGlzLmNvbnRleHRzID0gW05BVElWRV9XSU4sIC4uLndlYnZpZXdzXTtcbiAgdGhpcy5sb2cuZGVidWcoYEF2YWlsYWJsZSBjb250ZXh0czogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbnRleHRzKX1gKTtcbiAgcmV0dXJuIHRoaXMuY29udGV4dHM7XG59O1xuXG5oZWxwZXJzLnN3aXRjaENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBzd2l0Y2hDb250ZXh0IChuYW1lLCB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgLy8gV2UgaGF2ZSBzb21lIG9wdGlvbnMgd2hlbiBpdCBjb21lcyB0byB3ZWJ2aWV3cy4gSWYgd2Ugd2FudCBhXG4gIC8vIENocm9tZWRyaXZlciB3ZWJ2aWV3LCB3ZSBjYW4gb25seSBjb250cm9sIG9uZSBhdCBhIHRpbWUuXG4gIGlmICh0aGlzLmlzQ2hyb21lZHJpdmVyQ29udGV4dChuYW1lKSkge1xuICAgIC8vIHN0YXJ0IHByb3h5aW5nIGNvbW1hbmRzIGRpcmVjdGx5IHRvIGNocm9tZWRyaXZlclxuICAgIGF3YWl0IHRoaXMuc3RhcnRDaHJvbWVkcml2ZXJQcm94eShuYW1lLCB3ZWJ2aWV3c01hcHBpbmcpO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNDaHJvbWVkcml2ZXJDb250ZXh0KHRoaXMuY3VyQ29udGV4dCkpIHtcbiAgICAvLyBpZiB3ZSdyZSBtb3ZpbmcgdG8gYSBub24tY2hyb21lZHJpdmVyIHdlYnZpZXcsIGFuZCBvdXIgY3VycmVudCBjb250ZXh0XG4gICAgLy8gX2lzXyBhIGNocm9tZWRyaXZlciB3ZWJ2aWV3LCBpZiBjYXBzIHJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMgaXMgc2V0XG4gICAgLy8gdG8gdHJ1ZSB0aGVuIGtpbGwgY2hyb21lZHJpdmVyIHNlc3Npb24gdXNpbmcgc3RvcENocm9tZWRyaXZlclByb3hpZXMgb3JcbiAgICAvLyBlbHNlIHNpbXBseSBzdXNwZW5kIHByb3h5aW5nIHRvIHRoZSBsYXR0ZXJcbiAgICBpZiAodGhpcy5vcHRzLnJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdyZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zIHNldCB0byB0cnVlOyBraWxsaW5nIGV4aXN0aW5nIGNocm9tZWRyaXZlcnMnKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcENocm9tZWRyaXZlclByb3hpZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEaWRuJ3Qga25vdyBob3cgdG8gaGFuZGxlIHN3aXRjaGluZyB0byBjb250ZXh0ICcke25hbWV9J2ApO1xuICB9XG59O1xuXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogT24tb2JqZWN0IGNvbnRleHQtcmVsYXRlZCBoZWxwZXJzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLy8gVGhlIHJlYXNvbiB0aGlzIGlzIGEgZnVuY3Rpb24gYW5kIG5vdCBqdXN0IGEgY29uc3RhbnQgaXMgdGhhdCBib3RoIGFuZHJvaWQtXG4vLyBkcml2ZXIgYW5kIHNlbGVuZHJvaWQtZHJpdmVyIHVzZSB0aGlzIGxvZ2ljLCBhbmQgZWFjaCBvbmUgcmV0dXJuc1xuLy8gYSBkaWZmZXJlbnQgZGVmYXVsdCBjb250ZXh0IG5hbWVcbmhlbHBlcnMuZGVmYXVsdENvbnRleHROYW1lID0gZnVuY3Rpb24gZGVmYXVsdENvbnRleHROYW1lICgpIHtcbiAgcmV0dXJuIE5BVElWRV9XSU47XG59O1xuXG5oZWxwZXJzLmRlZmF1bHRXZWJ2aWV3TmFtZSA9IGZ1bmN0aW9uIGRlZmF1bHRXZWJ2aWV3TmFtZSAoKSB7XG4gIHJldHVybiBXRUJWSUVXX0JBU0UgKyB0aGlzLm9wdHMuYXBwUGFja2FnZTtcbn07XG5cbmhlbHBlcnMuaXNXZWJDb250ZXh0ID0gZnVuY3Rpb24gaXNXZWJDb250ZXh0ICgpIHtcbiAgcmV0dXJuIHRoaXMuY3VyQ29udGV4dCAhPT0gbnVsbCAmJiB0aGlzLmN1ckNvbnRleHQgIT09IE5BVElWRV9XSU47XG59O1xuXG4vLyBUdXJuIG9uIHByb3h5aW5nIHRvIGFuIGV4aXN0aW5nIENocm9tZWRyaXZlciBzZXNzaW9uIG9yIGEgbmV3IG9uZVxuaGVscGVycy5zdGFydENocm9tZWRyaXZlclByb3h5ID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRDaHJvbWVkcml2ZXJQcm94eSAoY29udGV4dCwgd2Vidmlld3NNYXBwaW5nKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIGNocm9tZS1iYWNrZWQgd2VidmlldyBjb250ZXh0ICcke2NvbnRleHR9J2ApO1xuXG4gIGxldCBjZDtcbiAgaWYgKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF0pIHtcbiAgICAvLyBpbiB0aGUgY2FzZSB3aGVyZSB3ZSd2ZSBhbHJlYWR5IHNldCB1cCBhIGNocm9tZWRyaXZlciBmb3IgYSBjb250ZXh0LFxuICAgIC8vIHdlIHdhbnQgdG8gcmVjb25uZWN0IHRvIGl0LCBub3QgY3JlYXRlIGEgd2hvbGUgbmV3IG9uZVxuICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCBleGlzdGluZyBDaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJyR7Y29udGV4dH0nLiBVc2luZyBpdC5gKTtcbiAgICBjZCA9IHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gICAgYXdhaXQgc2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlcih0aGlzLmxvZywgY2QpO1xuICB9IGVsc2Uge1xuICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICBvcHRzLmNocm9tZVVzZVJ1bm5pbmdBcHAgPSB0cnVlO1xuXG4gICAgLy8gaWYgcmVxdWVzdGVkLCB0ZWxsIGNocm9tZWRyaXZlciB0byBhdHRhY2ggdG8gdGhlIGFuZHJvaWQgcGFja2FnZSB3ZSBoYXZlXG4gICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG5hbWUsIHJhdGhlciB0aGFuIHRoZSBwYWNrYWdlIG9mIHRoZSBBVVQuXG4gICAgLy8gQW5kIHR1cm4gdGhpcyBvbiBieSBkZWZhdWx0IGZvciBjaHJvbWUtLWlmIGNocm9tZSBwb3BzIHVwIHdpdGggYSB3ZWJ2aWV3XG4gICAgLy8gYW5kIHNvbWVvbmUgd2FudHMgdG8gc3dpdGNoIHRvIGl0LCB3ZSBzaG91bGQgbGV0IGNocm9tZWRyaXZlciBjb25uZWN0IHRvXG4gICAgLy8gY2hyb21lIHJhdGhlciB0aGFuIHN0YXlpbmcgc3R1Y2sgb24gdGhlIEFVVFxuICAgIGlmIChvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSB8fCBjb250ZXh0ID09PSBgJHtXRUJWSUVXX0JBU0V9Y2hyb21lYCkge1xuICAgICAgbGV0IGFuZHJvaWRQYWNrYWdlID0gY29udGV4dC5tYXRjaChgJHtXRUJWSUVXX0JBU0V9KC4rKWApO1xuICAgICAgaWYgKGFuZHJvaWRQYWNrYWdlICYmIGFuZHJvaWRQYWNrYWdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSA9IGFuZHJvaWRQYWNrYWdlWzFdO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSkge1xuICAgICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uJykgJiYgIXRoaXMub3B0cy5lbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24pIHtcbiAgICAgICAgICAvLyBXaGVuIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiBjYXBhYmlsaXR5IGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQsIHRyeSB0byBpZGVudGlmeVxuICAgICAgICAgIC8vIGNocm9tZUFuZHJvaWRQYWNrYWdlIGJhc2VkIG9uIGNvbnRleHRzLCBrbm93biBjaHJvbWUgdmFyaWFudCBwYWNrYWdlcyBhbmQgcXVlcnlBcHBTdGF0ZSByZXN1bHRcbiAgICAgICAgICAvLyBzaW5jZSB3ZWJ2aWV3c01hcHBpbmcgZG9lcyBub3QgaGF2ZSBpbmZvIG9iamVjdFxuICAgICAgICAgIGNvbnN0IGNvbnRleHRzID0gd2Vidmlld3NNYXBwaW5nLm1hcCgod20pID0+IHdtLndlYnZpZXdOYW1lKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtub3duUGFja2FnZSBvZiBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FUykge1xuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoY29udGV4dHMsIGAke1dFQlZJRVdfQkFTRX0ke2tub3duUGFja2FnZX1gKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwcFN0YXRlID0gYXdhaXQgdGhpcy5xdWVyeUFwcFN0YXRlKGtub3duUGFja2FnZSk7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhbQVBQX1NUQVRFLlJVTk5JTkdfSU5fQkFDS0dST1VORCwgQVBQX1NUQVRFLlJVTk5JTkdfSU5fRk9SRUdST1VORF0sIGFwcFN0YXRlKSkge1xuICAgICAgICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0ga25vd25QYWNrYWdlO1xuICAgICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgSWRlbnRpZmllZCBjaHJvbWVBbmRyb2lkUGFja2FnZSBhcyAnJHtvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlfScgYCArXG4gICAgICAgICAgICAgICAgYGZvciBjb250ZXh0ICcke2NvbnRleHR9JyBieSBxdWVyeWluZyBzdGF0ZXMgb2YgQ2hyb21lIGFwcCBwYWNrYWdlc2ApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCB3bSBvZiB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgICAgICAgICAgIGlmICh3bS53ZWJ2aWV3TmFtZSA9PT0gY29udGV4dCAmJiBfLmhhcyh3bT8uaW5mbywgJ0FuZHJvaWQtUGFja2FnZScpKSB7XG4gICAgICAgICAgICAgIG9wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2UgPSB3bS5pbmZvWydBbmRyb2lkLVBhY2thZ2UnXTtcbiAgICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYElkZW50aWZpZWQgY2hyb21lQW5kcm9pZFBhY2thZ2UgYXMgJyR7b3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZX0nIGAgK1xuICAgICAgICAgICAgICAgIGBmb3IgY29udGV4dCAnJHtjb250ZXh0fScgYnkgQ0RQYCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNkID0gYXdhaXQgdGhpcy5zZXR1cE5ld0Nocm9tZWRyaXZlcihvcHRzLCB0aGlzLmFkYi5jdXJEZXZpY2VJZCwgdGhpcy5hZGIsIGNvbnRleHQpO1xuICAgIC8vIGJpbmQgb3VyIHN0b3AvZXhpdCBoYW5kbGVyLCBwYXNzaW5nIGluIGNvbnRleHQgc28gd2Uga25vdyB3aGljaFxuICAgIC8vIG9uZSBzdG9wcGVkIHVuZXhwZWN0ZWRseVxuICAgIGNkLm9uKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCAobXNnKSA9PiB7XG4gICAgICBpZiAobXNnLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgICB0aGlzLm9uQ2hyb21lZHJpdmVyU3RvcChjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBzYXZlIHRoZSBjaHJvbWVkcml2ZXIgb2JqZWN0IHVuZGVyIHRoZSBjb250ZXh0XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XSA9IGNkO1xuICB9XG4gIC8vIGhvb2sgdXAgdGhlIGxvY2FsIHZhcmlhYmxlcyBzbyB3ZSBjYW4gcHJveHkgdGhpcyBiaXpcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBjZDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuY2hyb21lZHJpdmVyLnByb3h5UmVxLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIpO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZC5iaW5kKHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlclxuaGVscGVycy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgPSBmdW5jdGlvbiBzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IG51bGw7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbn07XG5cbi8vIEhhbmRsZSBhbiBvdXQtb2YtYmFuZCBDaHJvbWVkcml2ZXIgc3RvcCBldmVudFxuaGVscGVycy5vbkNocm9tZWRyaXZlclN0b3AgPSBhc3luYyBmdW5jdGlvbiBvbkNocm9tZWRyaXZlclN0b3AgKGNvbnRleHQpIHtcbiAgdGhpcy5sb2cud2FybihgQ2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICR7Y29udGV4dH0gc3RvcHBlZCB1bmV4cGVjdGVkbHlgKTtcbiAgaWYgKGNvbnRleHQgPT09IHRoaXMuY3VyQ29udGV4dCkge1xuICAgIC8vIHdlIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2hpbGUgYXV0b21hdGluZyB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBzbyB3YW50XG4gICAgLy8gdG8gc2h1dCBkb3duIHRoZSBzZXNzaW9uIGFuZCByZXNwb25kIHdpdGggYW4gZXJyb3JcbiAgICBsZXQgZXJyID0gbmV3IEVycm9yKCdDaHJvbWVkcml2ZXIgcXVpdCB1bmV4cGVjdGVkbHkgZHVyaW5nIHNlc3Npb24nKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKGVycik7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgYSBDaHJvbWVkcml2ZXIgaW4gdGhlIG5vbi1hY3RpdmUgY29udGV4dCBiYXJmcywgd2UgZG9uJ3QgcmVhbGx5XG4gICAgLy8gY2FyZSwgd2UnbGwganVzdCBtYWtlIGEgbmV3IG9uZSBuZXh0IHRpbWUgd2UgbmVlZCB0aGUgY29udGV4dC5cbiAgICB0aGlzLmxvZy53YXJuKFwiQ2hyb21lZHJpdmVyIHF1aXQgdW5leHBlY3RlZGx5LCBidXQgaXQgd2Fzbid0IHRoZSBhY3RpdmUgXCIgK1xuICAgICAgJ2NvbnRleHQsIGlnbm9yaW5nJyk7XG4gICAgZGVsZXRlIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gIH1cbn07XG5cbi8vIEludGVudGlvbmFsbHkgc3RvcCBhbGwgdGhlIGNocm9tZWRyaXZlcnMgY3VycmVudGx5IGFjdGl2ZSwgYW5kIGlnbm9yZVxuLy8gdGhlaXIgZXhpdCBldmVudHNcbmhlbHBlcnMuc3RvcENocm9tZWRyaXZlclByb3hpZXMgPSBhc3luYyBmdW5jdGlvbiBzdG9wQ2hyb21lZHJpdmVyUHJveGllcyAoKSB7XG4gIHRoaXMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5KCk7IC8vIG1ha2Ugc3VyZSB3ZSB0dXJuIG9mZiB0aGUgcHJveHkgZmxhZ1xuICBmb3IgKGxldCBjb250ZXh0IG9mIF8ua2V5cyh0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzKSkge1xuICAgIGxldCBjZCA9IHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gICAgdGhpcy5sb2cuZGVidWcoYFN0b3BwaW5nIGNocm9tZWRyaXZlciBmb3IgY29udGV4dCAke2NvbnRleHR9YCk7XG4gICAgLy8gc3RvcCBsaXN0ZW5pbmcgZm9yIHRoZSBzdG9wcGVkIHN0YXRlIGV2ZW50XG4gICAgY2QucmVtb3ZlQWxsTGlzdGVuZXJzKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VEKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2Quc3RvcCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cud2FybihgRXJyb3Igc3RvcHBpbmcgQ2hyb21lZHJpdmVyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgfVxufTtcblxuaGVscGVycy5pc0Nocm9tZWRyaXZlckNvbnRleHQgPSBmdW5jdGlvbiBpc0Nocm9tZWRyaXZlckNvbnRleHQgKHZpZXdOYW1lKSB7XG4gIHJldHVybiBfLmluY2x1ZGVzKHZpZXdOYW1lLCBXRUJWSUVXX1dJTikgfHwgdmlld05hbWUgPT09IENIUk9NSVVNX1dJTjtcbn07XG5cbmhlbHBlcnMuc2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUgPSBmdW5jdGlvbiBzaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSAoKSB7XG4gIHJldHVybiAhIXRoaXMub3B0cy5jaHJvbWVPcHRpb25zICYmXG4gICAgICAgICBfLmlzQXJyYXkodGhpcy5vcHRzLmNocm9tZU9wdGlvbnMuYXJncykgJiZcbiAgICAgICAgIHRoaXMub3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MuaW5jbHVkZXMoJy0tbm8tZmlyc3QtcnVuJyk7XG59O1xuXG5oZWxwZXJzLmRpc21pc3NDaHJvbWVXZWxjb21lID0gYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0Nocm9tZVdlbGNvbWUgKCkge1xuICB0aGlzLmxvZy5pbmZvKCdUcnlpbmcgdG8gZGlzbWlzcyBDaHJvbWUgd2VsY29tZScpO1xuICBsZXQgYWN0aXZpdHkgPSBhd2FpdCB0aGlzLmdldEN1cnJlbnRBY3Rpdml0eSgpO1xuICBpZiAoYWN0aXZpdHkgIT09ICdvcmcuY2hyb21pdW0uY2hyb21lLmJyb3dzZXIuZmlyc3RydW4uRmlyc3RSdW5BY3Rpdml0eScpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdDaHJvbWUgd2VsY29tZSBkaWFsb2cgbmV2ZXIgc2hvd2VkIHVwISBDb250aW51aW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBlbCA9IGF3YWl0IHRoaXMuZmluZEVsT3JFbHMoJ2lkJywgJ2NvbS5hbmRyb2lkLmNocm9tZTppZC90ZXJtc19hY2NlcHQnLCBmYWxzZSk7XG4gIGF3YWl0IHRoaXMuY2xpY2soZWwuRUxFTUVOVCk7XG4gIHRyeSB7XG4gICAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuY2hyb21lOmlkL25lZ2F0aXZlX2J1dHRvbicsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLmNsaWNrKGVsLkVMRU1FTlQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRE8gTk9USElORywgVEhJUyBERVZJQ0UgRElETlQgTEFVTkNIIFRIRSBTSUdOSU4gRElBTE9HXG4gICAgLy8gSVQgTVVTVCBCRSBBIE5PTiBHTVMgREVWSUNFXG4gICAgdGhpcy5sb2cud2FybihgVGhpcyBkZXZpY2UgZGlkIG5vdCBzaG93IENocm9tZSBTaWduSW4gZGlhbG9nLCAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5zdGFydENocm9tZVNlc3Npb24gPSBhc3luYyBmdW5jdGlvbiBzdGFydENocm9tZVNlc3Npb24gKCkge1xuICB0aGlzLmxvZy5pbmZvKCdTdGFydGluZyBhIGNocm9tZS1iYXNlZCBicm93c2VyIHNlc3Npb24nKTtcbiAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuXG4gIGNvbnN0IGtub3duUGFja2FnZXMgPSBbXG4gICAgJ29yZy5jaHJvbWl1bS5jaHJvbWUuc2hlbGwnLFxuICAgICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgICdjb20uY2hyb21lLmJldGEnLFxuICAgICdvcmcuY2hyb21pdW0uY2hyb21lJyxcbiAgICAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnLFxuICBdO1xuXG4gIGlmIChfLmluY2x1ZGVzKGtub3duUGFja2FnZXMsIHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgIG9wdHMuY2hyb21lQnVuZGxlSWQgPSB0aGlzLm9wdHMuYXBwUGFja2FnZTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzLmNocm9tZUFuZHJvaWRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBBY3Rpdml0eTtcbiAgfVxuICB0aGlzLmNocm9tZWRyaXZlciA9IGF3YWl0IHRoaXMuc2V0dXBOZXdDaHJvbWVkcml2ZXIob3B0cywgdGhpcy5hZGIuY3VyRGV2aWNlSWQsIHRoaXMuYWRiKTtcbiAgdGhpcy5jaHJvbWVkcml2ZXIub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICBpZiAobXNnLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgdGhpcy5vbkNocm9tZWRyaXZlclN0b3AoQ0hST01JVU1fV0lOKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBDaHJvbWUgc2Vzc2lvbiwgd2UgZW5zdXJlIHRoYXQgdGhlIGNvbnRleHQgaXNcbiAgLy8gYXBwcm9wcmlhdGVseSBzZXQgYW5kIHRoYXQgdGhpcyBjaHJvbWVkcml2ZXIgaXMgYWRkZWQgdG8gdGhlIGxpc3RcbiAgLy8gb2Ygc2Vzc2lvbiBjaHJvbWVkcml2ZXJzIHNvIHdlIGNhbiBzd2l0Y2ggYmFjayBhbmQgZm9ydGhcbiAgdGhpcy5jdXJDb250ZXh0ID0gQ0hST01JVU1fV0lOO1xuICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW0NIUk9NSVVNX1dJTl0gPSB0aGlzLmNocm9tZWRyaXZlcjtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuY2hyb21lZHJpdmVyLnByb3h5UmVxLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIpO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZC5iaW5kKHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICBpZiAodGhpcy5zaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSgpKSB7XG4gICAgLy8gZGlzbWlzcyBDaHJvbWUgd2VsY29tZSBkaWFsb2dcbiAgICBhd2FpdCB0aGlzLmRpc21pc3NDaHJvbWVXZWxjb21lKCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEludGVybmFsIGxpYnJhcnkgZnVuY3Rpb25zXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5hc3luYyBmdW5jdGlvbiBzZXR1cEV4aXN0aW5nQ2hyb21lZHJpdmVyIChsb2csIGNocm9tZWRyaXZlcikge1xuICAvLyBjaGVjayB0aGUgc3RhdHVzIGJ5IHNlbmRpbmcgYSBzaW1wbGUgd2luZG93LWJhc2VkIGNvbW1hbmQgdG8gQ2hyb21lRHJpdmVyXG4gIC8vIGlmIHRoZXJlIGlzIGFuIGVycm9yLCB3ZSB3YW50IHRvIHJlY3JlYXRlIHRoZSBDaHJvbWVEcml2ZXIgc2Vzc2lvblxuICBpZiAoIWF3YWl0IGNocm9tZWRyaXZlci5oYXNXb3JraW5nV2VidmlldygpKSB7XG4gICAgbG9nLmRlYnVnKCdDaHJvbWVEcml2ZXIgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHdpbmRvdy4gJyArXG4gICAgICAgICAgICAgICAgICdSZS1pbml0aWFsaXppbmcgdGhlIHNlc3Npb24uJyk7XG4gICAgYXdhaXQgY2hyb21lZHJpdmVyLnJlc3RhcnQoKTtcbiAgfVxuICByZXR1cm4gY2hyb21lZHJpdmVyO1xufVxuXG4vKipcbiAqIEZpbmQgYSBmcmVlIHBvcnQgdG8gaGF2ZSBDaHJvbWVkcml2ZXIgbGlzdGVuIG9uLlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IHBvcnRTcGVjIC0gQXJyYXkgd2hpY2ggaXMgYSBsaXN0IG9mIHBvcnRzLiBBIGxpc3QgaXRlbSBtYXlcbiAqIGFsc28gaXRzZWxmIGJlIGFuIGFycmF5IG9mIGxlbmd0aCAyIHNwZWNpZnlpbmcgYSBzdGFydCBhbmQgZW5kIHBvcnQgb2ZcbiAqIGEgcmFuZ2UuIFNvbWUgdmFsaWQgcG9ydCBzcGVjczpcbiAqICAgIC0gWzgwMDAsIDgwMDEsIDgwMDJdXG4gKiAgICAtIFtbODAwMCwgODAwNV1dXG4gKiAgICAtIFs4MDAwLCBbOTAwMCwgOTEwMF1dXG4gKiBAcGFyYW0ge09iamVjdD99IGxvZyBMb2dnZXIgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgZnJlZSBwb3J0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENocm9tZWRyaXZlclBvcnQgKHBvcnRTcGVjLCBsb2cgPSBudWxsKSB7XG4gIGNvbnN0IGdldFBvcnQgPSBCLnByb21pc2lmeShQb3J0RmluZGVyLmdldFBvcnQsIHtjb250ZXh0OiBQb3J0RmluZGVyfSk7XG5cbiAgLy8gaWYgdGhlIHVzZXIgZGlkbid0IGdpdmUgdXMgYW55IHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IGNocm9tZWRyaXZlclxuICAvLyBwb3J0IHJhbmdlcywganVzdCBmaW5kIGFueSBmcmVlIHBvcnRcbiAgaWYgKCFwb3J0U3BlYykge1xuICAgIGNvbnN0IHBvcnQgPSBhd2FpdCBnZXRQb3J0KCk7XG4gICAgbG9nPy5kZWJ1ZyhgQSBwb3J0IHdhcyBub3QgZ2l2ZW4sIHVzaW5nIHJhbmRvbSBmcmVlIHBvcnQ6ICR7cG9ydH1gKTtcbiAgICByZXR1cm4gcG9ydDtcbiAgfVxuXG4gIC8vIG90aGVyd2lzZSBmaW5kIHRoZSBmcmVlIHBvcnQgYmFzZWQgb24gYSBsaXN0IG9yIHJhbmdlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG4gIGxvZz8uZGVidWcoYEZpbmRpbmcgYSBmcmVlIHBvcnQgZm9yIGNocm9tZWRyaXZlciB1c2luZyBzcGVjICR7SlNPTi5zdHJpbmdpZnkocG9ydFNwZWMpfWApO1xuICBsZXQgZm91bmRQb3J0ID0gbnVsbDtcbiAgZm9yIChjb25zdCBwb3RlbnRpYWxQb3J0IG9mIHBvcnRTcGVjKSB7XG4gICAgbGV0IHBvcnQsIHN0b3BQb3J0O1xuICAgIGlmIChfLmlzQXJyYXkocG90ZW50aWFsUG9ydCkpIHtcbiAgICAgIChbcG9ydCwgc3RvcFBvcnRdID0gcG90ZW50aWFsUG9ydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcnQgPSBwYXJzZUludChwb3RlbnRpYWxQb3J0LCAxMCk7IC8vIGVuc3VyZSB3ZSBoYXZlIGEgbnVtYmVyIGFuZCBub3QgYSBzdHJpbmdcbiAgICAgIHN0b3BQb3J0ID0gcG9ydDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxvZz8uZGVidWcoYENoZWNraW5nIHBvcnQgcmFuZ2UgJHtwb3J0fToke3N0b3BQb3J0fWApO1xuICAgICAgZm91bmRQb3J0ID0gYXdhaXQgZ2V0UG9ydCh7cG9ydCwgc3RvcFBvcnR9KTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZz8uZGVidWcoYE5vdGhpbmcgaW4gcG9ydCByYW5nZSAke3BvcnR9OiR7c3RvcFBvcnR9IHdhcyBhdmFpbGFibGVgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRQb3J0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBhIGZyZWUgcG9ydCBmb3IgY2hyb21lZHJpdmVyIHVzaW5nIGAgK1xuICAgICAgICAgICAgICAgICAgICBgY2hyb21lZHJpdmVyUG9ydHMgc3BlYyAke0pTT04uc3RyaW5naWZ5KHBvcnRTcGVjKX1gKTtcbiAgfVxuXG4gIGxvZz8uZGVidWcoYFVzaW5nIGZyZWUgcG9ydCAke2ZvdW5kUG9ydH0gZm9yIGNocm9tZWRyaXZlcmApO1xuICByZXR1cm4gZm91bmRQb3J0O1xufVxuXG5oZWxwZXJzLmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCA9IGZ1bmN0aW9uIGlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCAoKSB7XG4gIGlmICh0aGlzLmlzRmVhdHVyZUVuYWJsZWQoQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHRoaXM/LmxvZz8uZGVidWcoYEF1dG9tYXRlZCBDaHJvbWVkcml2ZXIgZG93bmxvYWQgaXMgZGlzYWJsZWQuIGAgK1xuICAgIGBVc2UgJyR7Q0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFfScgc2VydmVyIGZlYXR1cmUgdG8gZW5hYmxlIGl0YCk7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmhlbHBlcnMuc2V0dXBOZXdDaHJvbWVkcml2ZXIgPSBhc3luYyBmdW5jdGlvbiBzZXR1cE5ld0Nocm9tZWRyaXZlciAob3B0cywgY3VyRGV2aWNlSWQsIGFkYiwgY29udGV4dCA9IG51bGwpIHtcbiAgaWYgKG9wdHMuY2hyb21lRHJpdmVyUG9ydCkge1xuICAgIHRoaXM/LmxvZz8ud2FybihgVGhlICdjaHJvbWVEcml2ZXJQb3J0JyBjYXBhYmlsaXR5IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJ2Nocm9tZWRyaXZlclBvcnQnIGluc3RlYWRgKTtcbiAgICBvcHRzLmNocm9tZWRyaXZlclBvcnQgPSBvcHRzLmNocm9tZURyaXZlclBvcnQ7XG4gIH1cblxuICBpZiAob3B0cy5jaHJvbWVkcml2ZXJQb3J0KSB7XG4gICAgdGhpcz8ubG9nPy5kZWJ1ZyhgVXNpbmcgdXNlci1zcGVjaWZpZWQgcG9ydCAke29wdHMuY2hyb21lZHJpdmVyUG9ydH0gZm9yIGNocm9tZWRyaXZlcmApO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGEgc2luZ2xlIHBvcnQgd2Fzbid0IGdpdmVuLCB3ZSdsbCBsb29rIGZvciBhIGZyZWUgb25lXG4gICAgb3B0cy5jaHJvbWVkcml2ZXJQb3J0ID0gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyUG9ydChvcHRzLmNocm9tZWRyaXZlclBvcnRzLCB0aGlzPy5sb2cpO1xuICB9XG5cbiAgY29uc3QgZGV0YWlscyA9IGNvbnRleHQgPyB3ZWJ2aWV3SGVscGVycy5nZXRXZWJ2aWV3RGV0YWlscyhhZGIsIGNvbnRleHQpIDogdW5kZWZpbmVkO1xuICBpZiAoIV8uaXNFbXB0eShkZXRhaWxzKSkge1xuICAgIHRoaXM/LmxvZz8uZGVidWcoJ1Bhc3Npbmcgd2ViIHZpZXcgZGV0YWlscyB0byB0aGUgQ2hyb21lZHJpdmVyIGNvbnN0cnVjdG9yOiAnICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KGRldGFpbHMsIG51bGwsIDIpKTtcbiAgfVxuXG4gIGNvbnN0IGNocm9tZWRyaXZlciA9IG5ldyBDaHJvbWVkcml2ZXIoe1xuICAgIHBvcnQ6IG9wdHMuY2hyb21lZHJpdmVyUG9ydCxcbiAgICBleGVjdXRhYmxlOiBvcHRzLmNocm9tZWRyaXZlckV4ZWN1dGFibGUsXG4gICAgYWRiLFxuICAgIGNtZEFyZ3M6IG9wdHMuY2hyb21lZHJpdmVyQXJncyxcbiAgICB2ZXJib3NlOiAhIW9wdHMuc2hvd0Nocm9tZWRyaXZlckxvZyxcbiAgICBleGVjdXRhYmxlRGlyOiBvcHRzLmNocm9tZWRyaXZlckV4ZWN1dGFibGVEaXIsXG4gICAgbWFwcGluZ1BhdGg6IG9wdHMuY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUsXG4gICAgYnVuZGxlSWQ6IG9wdHMuY2hyb21lQnVuZGxlSWQsXG4gICAgdXNlU3lzdGVtRXhlY3V0YWJsZTogb3B0cy5jaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlLFxuICAgIGRpc2FibGVCdWlsZENoZWNrOiBvcHRzLmNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrLFxuICAgIGRldGFpbHMsXG4gICAgaXNBdXRvZG93bmxvYWRFbmFibGVkOiB0aGlzPy5pc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQ/LigpXG4gIH0pO1xuXG4gIC8vIG1ha2Ugc3VyZSB0aGVyZSBhcmUgY2hyb21lT3B0aW9uc1xuICBvcHRzLmNocm9tZU9wdGlvbnMgPSBvcHRzLmNocm9tZU9wdGlvbnMgfHwge307XG4gIC8vIHRyeSBvdXQgYW55IHByZWZpeGVkIGNocm9tZU9wdGlvbnMsXG4gIC8vIGFuZCBzdHJpcCB0aGUgcHJlZml4XG4gIGZvciAoY29uc3Qgb3B0IG9mIF8ua2V5cyhvcHRzKSkge1xuICAgIGlmIChvcHQuZW5kc1dpdGgoJzpjaHJvbWVPcHRpb25zJykpIHtcbiAgICAgIHRoaXM/LmxvZz8ud2FybihgTWVyZ2luZyAnJHtvcHR9JyBpbnRvICdjaHJvbWVPcHRpb25zJy4gVGhpcyBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcmApO1xuICAgICAgXy5tZXJnZShvcHRzLmNocm9tZU9wdGlvbnMsIG9wdHNbb3B0XSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2FwcyA9IHdlYnZpZXdIZWxwZXJzLmNyZWF0ZUNocm9tZWRyaXZlckNhcHMob3B0cywgY3VyRGV2aWNlSWQsIGRldGFpbHMpO1xuICB0aGlzPy5sb2c/LmRlYnVnKGBCZWZvcmUgc3RhcnRpbmcgY2hyb21lZHJpdmVyLCBhbmRyb2lkUGFja2FnZSBpcyAnJHtjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2V9J2ApO1xuICBhd2FpdCBjaHJvbWVkcml2ZXIuc3RhcnQoY2Fwcyk7XG4gIHJldHVybiBjaHJvbWVkcml2ZXI7XG59O1xuY29uc3Qgc2V0dXBOZXdDaHJvbWVkcml2ZXIgPSBoZWxwZXJzLnNldHVwTmV3Q2hyb21lZHJpdmVyO1xuXG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMsIHNldHVwTmV3Q2hyb21lZHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -9,8 +7,6 @@ exports.default = exports.commands = void 0;
|
|
|
9
7
|
|
|
10
8
|
require("source-map-support/register");
|
|
11
9
|
|
|
12
|
-
var _logger = _interopRequireDefault(require("../logger"));
|
|
13
|
-
|
|
14
10
|
const commands = {};
|
|
15
11
|
exports.commands = commands;
|
|
16
12
|
|
|
@@ -20,7 +16,7 @@ commands.endCoverage = async function endCoverage(intentToBroadcast, ecOnDeviceP
|
|
|
20
16
|
await this.adb.broadcastProcessEnd(intentToBroadcast, this.appProcess);
|
|
21
17
|
return await this.pullFile(ecOnDevicePath);
|
|
22
18
|
} catch (err) {
|
|
23
|
-
|
|
19
|
+
this.log.warn(`Error ending test coverage: ${err.message}`);
|
|
24
20
|
}
|
|
25
21
|
|
|
26
22
|
return '';
|
|
@@ -30,4 +26,4 @@ var _default = commands;
|
|
|
30
26
|
exports.default = _default;require('source-map-support').install();
|
|
31
27
|
|
|
32
28
|
|
|
33
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb3ZlcmFnZS5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsImVuZENvdmVyYWdlIiwiaW50ZW50VG9Ccm9hZGNhc3QiLCJlY09uRGV2aWNlUGF0aCIsImFkYiIsInJpbXJhZiIsImJyb2FkY2FzdFByb2Nlc3NFbmQiLCJhcHBQcm9jZXNzIiwicHVsbEZpbGUiLCJlcnIiLCJsb2ciLCJ3YXJuIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOzs7QUFHQUEsUUFBUSxDQUFDQyxXQUFULEdBQXVCLGVBQWVBLFdBQWYsQ0FBNEJDLGlCQUE1QixFQUErQ0MsY0FBL0MsRUFBK0Q7QUFDcEYsTUFBSTtBQUVGLFVBQU0sS0FBS0MsR0FBTCxDQUFTQyxNQUFULENBQWdCRixjQUFoQixDQUFOO0FBQ0EsVUFBTSxLQUFLQyxHQUFMLENBQVNFLG1CQUFULENBQTZCSixpQkFBN0IsRUFBZ0QsS0FBS0ssVUFBckQsQ0FBTjtBQUNBLFdBQU8sTUFBTSxLQUFLQyxRQUFMLENBQWNMLGNBQWQsQ0FBYjtBQUNELEdBTEQsQ0FLRSxPQUFPTSxHQUFQLEVBQVk7QUFDWixTQUFLQyxHQUFMLENBQVNDLElBQVQsQ0FBZSwrQkFBOEJGLEdBQUcsQ0FBQ0csT0FBUSxFQUF6RDtBQUNEOztBQUNELFNBQU8sRUFBUDtBQUNELENBVkQ7O2VBY2VaLFEiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjb21tYW5kcyA9IHt9O1xuXG5cbmNvbW1hbmRzLmVuZENvdmVyYWdlID0gYXN5bmMgZnVuY3Rpb24gZW5kQ292ZXJhZ2UgKGludGVudFRvQnJvYWRjYXN0LCBlY09uRGV2aWNlUGF0aCkge1xuICB0cnkge1xuICAgIC8vIGVuc3VyZSB0aGUgZWMgd2UncmUgcHVsbGluZyBpcyBuZXdseSBjcmVhdGVkIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnRlbnQuXG4gICAgYXdhaXQgdGhpcy5hZGIucmltcmFmKGVjT25EZXZpY2VQYXRoKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5icm9hZGNhc3RQcm9jZXNzRW5kKGludGVudFRvQnJvYWRjYXN0LCB0aGlzLmFwcFByb2Nlc3MpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnB1bGxGaWxlKGVjT25EZXZpY2VQYXRoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5sb2cud2FybihgRXJyb3IgZW5kaW5nIHRlc3QgY292ZXJhZ2U6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuICcnO1xufTtcblxuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9jb3ZlcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|