ngx-mask 16.0.3 → 16.0.4

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.
@@ -306,7 +306,13 @@ class NgxMaskApplierService {
306
306
  }
307
307
  }
308
308
  if (maskExpression[cursor] === 'h') {
309
- if (result === '2' && Number(inputSymbol) > 3) {
309
+ if ((result === '2' && Number(inputSymbol) > 3) ||
310
+ ((result.slice(cursor - 2, cursor) === '2' ||
311
+ result.slice(cursor - 3, cursor) === '2' ||
312
+ result.slice(cursor - 4, cursor) === '2' ||
313
+ result.slice(cursor - 1, cursor) === '2') &&
314
+ Number(inputSymbol) > 3 &&
315
+ cursor > 10)) {
310
316
  // eslint-disable-next-line no-param-reassign
311
317
  position = position + 1;
312
318
  cursor += 1;
@@ -328,31 +334,32 @@ class NgxMaskApplierService {
328
334
  }
329
335
  }
330
336
  const daysCount = 31;
337
+ const inputValueCursor = inputValue[cursor];
338
+ const inputValueCursorPlusOne = inputValue[cursor + 1];
339
+ const inputValueCursorPlusTwo = inputValue[cursor + 2];
340
+ const inputValueCursorMinusOne = inputValue[cursor - 1];
341
+ const inputValueCursorMinusTwo = inputValue[cursor - 2];
342
+ const inputValueCursorMinusThree = inputValue[cursor - 3];
343
+ const inputValueSliceMinusThreeMinusOne = inputValue.slice(cursor - 3, cursor - 1);
344
+ const inputValueSliceMinusOnePlusOne = inputValue.slice(cursor - 1, cursor + 1);
345
+ const inputValueSliceCursorPlusTwo = inputValue.slice(cursor, cursor + 2);
346
+ const inputValueSliceMinusTwoCursor = inputValue.slice(cursor - 2, cursor);
331
347
  if (maskExpression[cursor] === 'd') {
332
348
  const maskStartWithMonth = maskExpression.slice(0, 2) === 'M0';
333
349
  const startWithMonthInput = maskExpression.slice(0, 2) === 'M0' &&
334
- (inputValue[cursor - 2] === '/' ||
335
- inputValue[cursor - 2] === '.' ||
336
- inputValue[cursor - 2] === '-');
350
+ this.specialCharacters.includes(inputValueCursorMinusTwo);
337
351
  if ((Number(inputSymbol) > 3 && this.leadZeroDateTime) ||
338
352
  (!maskStartWithMonth &&
339
- (Number(inputValue.slice(cursor, cursor + 2)) > daysCount ||
340
- Number(inputValue.slice(cursor - 1, cursor + 1)) > daysCount ||
341
- inputValue[cursor + 1] === '/' ||
342
- inputValue[cursor + 1] === '-')) ||
353
+ (Number(inputValueSliceCursorPlusTwo) > daysCount ||
354
+ Number(inputValueSliceMinusOnePlusOne) > daysCount ||
355
+ this.specialCharacters.includes(inputValueCursorPlusOne))) ||
343
356
  (startWithMonthInput
344
- ? Number(inputValue.slice(cursor - 1, cursor + 1)) > daysCount ||
345
- (inputValue[cursor] !== '/' &&
346
- (inputValue[cursor + 2] === '.' ||
347
- inputValue[cursor + 2] === '/' ||
348
- inputValue[cursor + 2] === '-')) ||
349
- inputValue[cursor] === '.' ||
350
- inputValue[cursor] === '/' ||
351
- inputValue[cursor] === '-'
352
- : Number(inputValue.slice(cursor, cursor + 2)) > daysCount ||
353
- inputValue[cursor + 1] === '/' ||
354
- inputValue[cursor + 1] === '-' ||
355
- inputValue[cursor + 1] === '.')) {
357
+ ? Number(inputValueSliceMinusOnePlusOne) > daysCount ||
358
+ (!this.specialCharacters.includes(inputValueCursor) &&
359
+ this.specialCharacters.includes(inputValueCursorPlusTwo)) ||
360
+ this.specialCharacters.includes(inputValueCursor)
361
+ : Number(inputValueSliceCursorPlusTwo) > daysCount ||
362
+ this.specialCharacters.includes(inputValueCursorPlusOne))) {
356
363
  // eslint-disable-next-line no-param-reassign
357
364
  position = position + 1;
358
365
  cursor += 1;
@@ -369,43 +376,39 @@ class NgxMaskApplierService {
369
376
  // mask without day
370
377
  const withoutDays = cursor === 0 &&
371
378
  (Number(inputSymbol) > 2 ||
372
- Number(inputValue.slice(cursor, cursor + 2)) > monthsCount ||
373
- inputValue[cursor + 1] === '/');
379
+ Number(inputValueSliceCursorPlusTwo) > monthsCount ||
380
+ this.specialCharacters.includes(inputValueCursorPlusOne));
374
381
  // day<10 && month<12 for input
375
- const day1monthInput = inputValue.slice(cursor - 3, cursor - 1).includes('/') &&
376
- ((inputValue[cursor - 2] === '/' &&
377
- Number(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount &&
378
- inputValue[cursor] !== '/') ||
379
- inputValue[cursor] === '/' ||
380
- inputValue[cursor] === '-' ||
381
- (inputValue[cursor - 3] === '/' &&
382
- Number(inputValue.slice(cursor - 2, cursor)) > monthsCount &&
383
- inputValue[cursor - 1] !== '/') ||
384
- inputValue[cursor - 1] === '/' ||
385
- inputValue[cursor - 1] === '-');
382
+ const specialChart = maskExpression.slice(cursor + 2, cursor + 3);
383
+ const day1monthInput = inputValueSliceMinusThreeMinusOne.includes(specialChart) &&
384
+ ((this.specialCharacters.includes(inputValueCursorMinusTwo) &&
385
+ Number(inputValueSliceMinusOnePlusOne) > monthsCount &&
386
+ !this.specialCharacters.includes(inputValueCursor)) ||
387
+ this.specialCharacters.includes(inputValueCursor) ||
388
+ (this.specialCharacters.includes(inputValueCursorMinusThree) &&
389
+ Number(inputValueSliceMinusTwoCursor) > monthsCount &&
390
+ !this.specialCharacters.includes(inputValueCursorMinusOne)) ||
391
+ this.specialCharacters.includes(inputValueCursorMinusOne));
386
392
  // month<12 && day<10 for input
387
- const day2monthInput = Number(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&
388
- !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&
389
- (inputValue[cursor - 1] === '/' || inputValue[cursor - 1] === '-') &&
390
- (Number(inputValue.slice(cursor, cursor + 2)) > monthsCount ||
391
- inputValue[cursor + 1] === '/' ||
392
- inputValue[cursor + 1] === '-');
393
+ const day2monthInput = Number(inputValueSliceMinusThreeMinusOne) <= daysCount &&
394
+ !this.specialCharacters.includes(inputValueSliceMinusThreeMinusOne) &&
395
+ this.specialCharacters.includes(inputValueCursorMinusOne) &&
396
+ (Number(inputValueSliceCursorPlusTwo) > monthsCount ||
397
+ this.specialCharacters.includes(inputValueCursorPlusOne));
393
398
  // cursor === 5 && without days
394
- const day2monthInputDot = (Number(inputValue.slice(cursor, cursor + 2)) > monthsCount &&
395
- cursor === 5) ||
396
- inputValue[cursor + 1] === '.' ||
397
- inputValue[cursor + 1] === '-' ||
398
- inputValue[cursor + 1] === '/';
399
- // day<10 && month<12 for paste whole data
400
- const day1monthPaste = Number(inputValue.slice(cursor - 3, cursor - 1)) > daysCount &&
401
- !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&
402
- !inputValue.slice(cursor - 2, cursor).includes('/') &&
403
- Number(inputValue.slice(cursor - 2, cursor)) > monthsCount;
399
+ const day2monthInputDot = (Number(inputValueSliceCursorPlusTwo) > monthsCount && cursor === 5) ||
400
+ (this.specialCharacters.includes(inputValueCursorPlusOne) &&
401
+ cursor === 5);
402
+ // // day<10 && month<12 for paste whole data
403
+ const day1monthPaste = Number(inputValueSliceMinusThreeMinusOne) > daysCount &&
404
+ !this.specialCharacters.includes(inputValueSliceMinusThreeMinusOne) &&
405
+ !this.specialCharacters.includes(inputValueSliceMinusTwoCursor) &&
406
+ Number(inputValueSliceMinusTwoCursor) > monthsCount;
404
407
  // 10<day<31 && month<12 for paste whole data
405
- const day2monthPaste = Number(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&
406
- !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&
407
- inputValue[cursor - 1] !== '/' &&
408
- Number(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount;
408
+ const day2monthPaste = Number(inputValueSliceMinusThreeMinusOne) <= daysCount &&
409
+ !this.specialCharacters.includes(inputValueSliceMinusThreeMinusOne) &&
410
+ !this.specialCharacters.includes(inputValueCursorMinusOne) &&
411
+ Number(inputValueSliceMinusOnePlusOne) > monthsCount;
409
412
  if ((Number(inputSymbol) > 1 && this.leadZeroDateTime) ||
410
413
  withoutDays ||
411
414
  day1monthInput ||
@@ -566,4 +569,4 @@ export { NgxMaskApplierService };
566
569
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskApplierService, decorators: [{
567
570
  type: Injectable
568
571
  }] });
569
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hc2stYXBwbGllci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hc2stbGliL3NyYy9saWIvbmd4LW1hc2stYXBwbGllci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQVcsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFN0QsTUFDYSxxQkFBcUI7SUFEbEM7UUFFYyxZQUFPLEdBQUcsTUFBTSxDQUFVLGVBQWUsQ0FBQyxDQUFDO1FBRTlDLDBCQUFxQixHQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDO1FBRWhDLGdCQUFXLEdBQTJCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBSS9ELG9CQUFlLEdBQStCLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1FBRTNFLHNCQUFpQixHQUFpQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBRWpGLGFBQVEsR0FBd0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFFdEQsV0FBTSxHQUFzQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUVoRCxXQUFNLEdBQXNCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBRWhELHNCQUFpQixHQUFpQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBRWpGLGtCQUFhLEdBQTZCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBSXJFLGtCQUFhLEdBQTZCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBRXJFLHlCQUFvQixHQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO1FBRS9CLGVBQVUsR0FBMEIsSUFBSSxDQUFDLE9BQU8s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Q3pELENBQUM7SUFFUyxrQkFBa0IsQ0FBSSxLQUFRLEVBQUUsYUFBc0IsRUFBRSxhQUFnQjtRQUM5RSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQy9CLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNsRSxDQUFDLENBQUMsS0FBSyxLQUFLLGFBQWEsQ0FBQztJQUNsQyxDQUFDO0lBRU8sUUFBUSxDQUFDLFFBQWtCO1FBQy9CLE9BQU8sQ0FBQyxDQUNKLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUNyQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUU7Z0JBQzVDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxLQUFLLEdBQUcsQ0FBQyxFQUFFO29CQUMvQixPQUFPLEtBQUssS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztpQkFDOUM7Z0JBQ0QsT0FBTyxLQUFLLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUMvRCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs4R0ExckJRLHFCQUFxQjtrSEFBckIscUJBQXFCOztTQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdYX01BU0tfQ09ORklHLCBJQ29uZmlnIH0gZnJvbSAnLi9uZ3gtbWFzay5jb25maWcnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd4TWFza0FwcGxpZXJTZXJ2aWNlIHtcbiAgICBwcm90ZWN0ZWQgX2NvbmZpZyA9IGluamVjdDxJQ29uZmlnPihOR1hfTUFTS19DT05GSUcpO1xuXG4gICAgcHVibGljIGRyb3BTcGVjaWFsQ2hhcmFjdGVyczogSUNvbmZpZ1snZHJvcFNwZWNpYWxDaGFyYWN0ZXJzJ10gPVxuICAgICAgICB0aGlzLl9jb25maWcuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzO1xuXG4gICAgcHVibGljIGhpZGRlbklucHV0OiBJQ29uZmlnWydoaWRkZW5JbnB1dCddID0gdGhpcy5fY29uZmlnLmhpZGRlbklucHV0O1xuXG4gICAgcHVibGljIHNob3dUZW1wbGF0ZSE6IElDb25maWdbJ3Nob3dUZW1wbGF0ZSddO1xuXG4gICAgcHVibGljIGNsZWFySWZOb3RNYXRjaDogSUNvbmZpZ1snY2xlYXJJZk5vdE1hdGNoJ10gPSB0aGlzLl9jb25maWcuY2xlYXJJZk5vdE1hdGNoO1xuXG4gICAgcHVibGljIHNwZWNpYWxDaGFyYWN0ZXJzOiBJQ29uZmlnWydzcGVjaWFsQ2hhcmFjdGVycyddID0gdGhpcy5fY29uZmlnLnNwZWNpYWxDaGFyYWN0ZXJzO1xuXG4gICAgcHVibGljIHBhdHRlcm5zOiBJQ29uZmlnWydwYXR0ZXJucyddID0gdGhpcy5fY29uZmlnLnBhdHRlcm5zO1xuXG4gICAgcHVibGljIHByZWZpeDogSUNvbmZpZ1sncHJlZml4J10gPSB0aGlzLl9jb25maWcucHJlZml4O1xuXG4gICAgcHVibGljIHN1ZmZpeDogSUNvbmZpZ1snc3VmZml4J10gPSB0aGlzLl9jb25maWcuc3VmZml4O1xuXG4gICAgcHVibGljIHRob3VzYW5kU2VwYXJhdG9yOiBJQ29uZmlnWyd0aG91c2FuZFNlcGFyYXRvciddID0gdGhpcy5fY29uZmlnLnRob3VzYW5kU2VwYXJhdG9yO1xuXG4gICAgcHVibGljIGRlY2ltYWxNYXJrZXI6IElDb25maWdbJ2RlY2ltYWxNYXJrZXInXSA9IHRoaXMuX2NvbmZpZy5kZWNpbWFsTWFya2VyO1xuXG4gICAgcHVibGljIGN1c3RvbVBhdHRlcm4hOiBJQ29uZmlnWydwYXR0ZXJucyddO1xuXG4gICAgcHVibGljIHNob3dNYXNrVHlwZWQ6IElDb25maWdbJ3Nob3dNYXNrVHlwZWQnXSA9IHRoaXMuX2NvbmZpZy5zaG93TWFza1R5cGVkO1xuXG4gICAgcHVibGljIHBsYWNlSG9sZGVyQ2hhcmFjdGVyOiBJQ29uZmlnWydwbGFjZUhvbGRlckNoYXJhY3RlciddID1cbiAgICAgICAgdGhpcy5fY29uZmlnLnBsYWNlSG9sZGVyQ2hhcmFjdGVyO1xuXG4gICAgcHVibGljIHZhbGlkYXRpb246IElDb25maWdbJ3ZhbGlkYXRpb24nXSA9IHRoaXMuX2NvbmZpZy52YWxpZGF0aW9uO1xuXG4gICAgcHVibGljIHNlcGFyYXRvckxpbWl0OiBJQ29uZmlnWydzZXBhcmF0b3JMaW1pdCddID0gdGhpcy5fY29uZmlnLnNlcGFyYXRvckxpbWl0O1xuXG4gICAgcHVibGljIGFsbG93TmVnYXRpdmVOdW1iZXJzOiBJQ29uZmlnWydhbGxvd05lZ2F0aXZlTnVtYmVycyddID1cbiAgICAgICAgdGhpcy5fY29uZmlnLmFsbG93TmVnYXRpdmVOdW1iZXJzO1xuXG4gICAgcHVibGljIGxlYWRaZXJvRGF0ZVRpbWU6IElDb25maWdbJ2xlYWRaZXJvRGF0ZVRpbWUnXSA9IHRoaXMuX2NvbmZpZy5sZWFkWmVyb0RhdGVUaW1lO1xuXG4gICAgcHJpdmF0ZSBfc2hpZnQ6IFNldDxudW1iZXI+ID0gbmV3IFNldCgpO1xuXG4gICAgcHVibGljIG1hc2tFeHByZXNzaW9uID0gJyc7XG5cbiAgICBwdWJsaWMgYWN0dWFsVmFsdWUgPSAnJztcblxuICAgIHB1YmxpYyBzaG93bk1hc2tFeHByZXNzaW9uID0gJyc7XG5cbiAgICBwdWJsaWMgaXBFcnJvcj86IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY3BmQ25wakVycm9yPzogYm9vbGVhbjtcbiAgICBwdWJsaWMgYXBwbHlNYXNrV2l0aFBhdHRlcm4oXG4gICAgICAgIGlucHV0VmFsdWU6IHN0cmluZyxcbiAgICAgICAgbWFza0FuZFBhdHRlcm46IFtzdHJpbmcsIElDb25maWdbJ3BhdHRlcm5zJ11dXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgW21hc2ssIGN1c3RvbVBhdHRlcm5dID0gbWFza0FuZFBhdHRlcm47XG4gICAgICAgIHRoaXMuY3VzdG9tUGF0dGVybiA9IGN1c3RvbVBhdHRlcm47XG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5TWFzayhpbnB1dFZhbHVlLCBtYXNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXBwbHlNYXNrKFxuICAgICAgICBpbnB1dFZhbHVlOiBzdHJpbmcgfCBvYmplY3QgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICAgICAgbWFza0V4cHJlc3Npb246IHN0cmluZyxcbiAgICAgICAgcG9zaXRpb24gPSAwLFxuICAgICAgICBqdXN0UGFzdGVkID0gZmFsc2UsXG4gICAgICAgIGJhY2tzcGFjZWQgPSBmYWxzZSxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjYjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkgPSAoKSA9PiB7fVxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGlmICghbWFza0V4cHJlc3Npb24gfHwgdHlwZW9mIGlucHV0VmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGN1cnNvciA9IDA7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgbGV0IG11bHRpID0gZmFsc2U7XG4gICAgICAgIGxldCBiYWNrc3BhY2VTaGlmdCA9IGZhbHNlO1xuICAgICAgICBsZXQgc2hpZnQgPSAxO1xuICAgICAgICBsZXQgc3RlcEJhY2sgPSBmYWxzZTtcbiAgICAgICAgaWYgKGlucHV0VmFsdWUuc2xpY2UoMCwgdGhpcy5wcmVmaXgubGVuZ3RoKSA9PT0gdGhpcy5wcmVmaXgpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IGlucHV0VmFsdWUuc2xpY2UodGhpcy5wcmVmaXgubGVuZ3RoLCBpbnB1dFZhbHVlLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhdGhpcy5zdWZmaXggJiYgaW5wdXRWYWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBpbnB1dFZhbHVlID0gdGhpcy5jaGVja0FuZFJlbW92ZVN1ZmZpeChpbnB1dFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dEFycmF5OiBzdHJpbmdbXSA9IGlucHV0VmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnJyk7XG4gICAgICAgIGlmICh0aGlzLmFsbG93TmVnYXRpdmVOdW1iZXJzICYmIGlucHV0VmFsdWUuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyAxKSA9PT0gJy0nKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHJlc3VsdCArPSBpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hc2tFeHByZXNzaW9uID09PSAnSVAnKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXNJUCA9IGlucHV0VmFsdWUuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIHRoaXMuaXBFcnJvciA9IHRoaXMuX3ZhbGlkSVAodmFsdWVzSVApO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBtYXNrRXhwcmVzc2lvbiA9ICcwOTkuMDk5LjA5OS4wOTknO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFycjogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZVtpXT8ubWF0Y2goJ1xcXFxkJykpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaChpbnB1dFZhbHVlW2ldID8/ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWFza0V4cHJlc3Npb24gPT09ICdDUEZfQ05QSicpIHtcbiAgICAgICAgICAgIHRoaXMuY3BmQ25wakVycm9yID0gYXJyLmxlbmd0aCAhPT0gMTEgJiYgYXJyLmxlbmd0aCAhPT0gMTQ7XG4gICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDExKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgbWFza0V4cHJlc3Npb24gPSAnMDAuMDAwLjAwMC8wMDAwLTAwJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgbWFza0V4cHJlc3Npb24gPSAnMDAwLjAwMC4wMDAtMDAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXNrRXhwcmVzc2lvbi5zdGFydHNXaXRoKCdwZXJjZW50JykpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLm1hdGNoKCdbYS16XXxbQS1aXScpIHx8XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZS5tYXRjaCgvWy0hJCVeJiooKV8rfH49YHt9XFxbXFxdOlwiOyc8Pj8sXFwvLl0vKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMuX3N0cmlwVG9EZWNpbWFsKGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZWNpc2lvbjogbnVtYmVyID0gdGhpcy5nZXRQcmVjaXNpb24obWFza0V4cHJlc3Npb24pO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUgPSB0aGlzLmNoZWNrSW5wdXRQcmVjaXNpb24oaW5wdXRWYWx1ZSwgcHJlY2lzaW9uLCB0aGlzLmRlY2ltYWxNYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUuaW5kZXhPZignLicpID4gMCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnBlcmNlbnRhZ2UoaW5wdXRWYWx1ZS5zdWJzdHJpbmcoMCwgaW5wdXRWYWx1ZS5pbmRleE9mKCcuJykpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbGV0IGJhc2U6IHN0cmluZyA9IGlucHV0VmFsdWUuc3Vic3RyaW5nKDAsIGlucHV0VmFsdWUuaW5kZXhPZignLicpIC0gMSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dOZWdhdGl2ZU51bWJlcnMgJiYgaW5wdXRWYWx1ZS5zbGljZShjdXJzb3IsIGN1cnNvciArIDEpID09PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGlucHV0VmFsdWUuc3Vic3RyaW5nKDAsIGlucHV0VmFsdWUuaW5kZXhPZignLicpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IGAke2Jhc2V9JHtpbnB1dFZhbHVlLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZS5pbmRleE9mKCcuJyksXG4gICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLmFsbG93TmVnYXRpdmVOdW1iZXJzICYmIGlucHV0VmFsdWUuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyAxKSA9PT0gJy0nXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgPSBpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciArIDEsIGN1cnNvciArIGlucHV0VmFsdWUubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICA6ICh2YWx1ZSA9IGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVyY2VudGFnZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpbnB1dFZhbHVlLnN1YnN0cmluZygwLCBpbnB1dFZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1hc2tFeHByZXNzaW9uLnN0YXJ0c1dpdGgoJ3NlcGFyYXRvcicpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZS5tYXRjaCgnW3fQsC3Rj9CQLdCvXScpIHx8XG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZS5tYXRjaCgnW9CB0ZHQkC3Rj10nKSB8fFxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUubWF0Y2goJ1thLXpdfFtBLVpdJykgfHxcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLm1hdGNoKC9bLUAjISQlXFxcXF4mKigpX8KjwqwnK3x+PWB7fVxcXTpcIjs8Pi4/L10vKSB8fFxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUubWF0Y2goJ1teQS1aYS16MC05LF0nKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMuX3N0cmlwVG9EZWNpbWFsKGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBpbnB1dFZhbHVlID1cbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlWzBdID09PSAnMCcgJiZcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlWzFdICE9PSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuX2NvbXBhcmVPckluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlWzFdLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2ltYWxNYXJrZXIsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3JcbiAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgIWJhY2tzcGFjZWRcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dFZhbHVlLnNsaWNlKDAsIGlucHV0VmFsdWUubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgaWYgKGJhY2tzcGFjZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gdGhpcy5fY29tcGFyZU9ySW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWVbaW5wdXRWYWx1ZS5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsTWFya2VyLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0VmFsdWUuc2xpY2UoMCwgaW5wdXRWYWx1ZS5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUT0RPOiB3ZSBoYWQgZGlmZmVyZW50IHJleGV4cHMgaGVyZSBmb3IgdGhlIGRpZmZlcmVudCBjYXNlcy4uLiBidXQgdGVzdHMgZG9udCBzZWFtIHRvIGJvdGhlciAtIGNoZWNrIHRoaXNcbiAgICAgICAgICAgIC8vICBzZXBhcmF0b3I6IG5vIENPTU1BLCBkb3Qtc2VwOiBubyBTUEFDRSwgQ09NTUEgT0ssIGNvbW1hLXNlcDogbm8gU1BBQ0UsIENPTU1BIE9LXG5cbiAgICAgICAgICAgIGNvbnN0IHRob3VzYW5kU2VwYXJhdG9yQ2hhckVzY2FwZWQ6IHN0cmluZyA9IHRoaXMuX2NoYXJUb1JlZ0V4cEV4cHJlc3Npb24oXG4gICAgICAgICAgICAgICAgdGhpcy50aG91c2FuZFNlcGFyYXRvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBpbnZhbGlkQ2hhcnM6IHN0cmluZyA9ICdAIyEkJV4mKigpXyt8fj1ge31cXFxcW1xcXFxdOlxcXFxzLFxcXFwuXCI7PD4/XFxcXC8nLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgdGhvdXNhbmRTZXBhcmF0b3JDaGFyRXNjYXBlZCxcbiAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIC8vLnJlcGxhY2UoZGVjaW1hbE1hcmtlckVzY2FwZWQsICcnKTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGVjaW1hbE1hcmtlcikpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hcmtlciBvZiB0aGlzLmRlY2ltYWxNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52YWxpZENoYXJzID0gaW52YWxpZENoYXJzLnJlcGxhY2UodGhpcy5fY2hhclRvUmVnRXhwRXhwcmVzc2lvbihtYXJrZXIpLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkQ2hhcnMgPSBpbnZhbGlkQ2hhcnMucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhclRvUmVnRXhwRXhwcmVzc2lvbih0aGlzLmRlY2ltYWxNYXJrZXIpLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRDaGFyUmVnZXhwID0gbmV3IFJlZ0V4cCgnWycgKyBpbnZhbGlkQ2hhcnMgKyAnXScpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZS5tYXRjaChpbnZhbGlkQ2hhclJlZ2V4cCkgfHxcbiAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcGFyZU9ySW5jbHVkZXMoaW5wdXRWYWx1ZSwgdGhpcy5kZWNpbWFsTWFya2VyLCB0aGlzLnRob3VzYW5kU2VwYXJhdG9yKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUgPSBpbnB1dFZhbHVlLnN1YnN0cmluZygwLCBpbnB1dFZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcmVjaXNpb246IG51bWJlciA9IHRoaXMuZ2V0UHJlY2lzaW9uKG1hc2tFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMuY2hlY2tJbnB1dFByZWNpc2lvbihpbnB1dFZhbHVlLCBwcmVjaXNpb24sIHRoaXMuZGVjaW1hbE1hcmtlcik7XG4gICAgICAgICAgICBjb25zdCBzdHJGb3JTZXA6IHN0cmluZyA9IGlucHV0VmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKHRob3VzYW5kU2VwYXJhdG9yQ2hhckVzY2FwZWQsICdnJyksXG4gICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLl9mb3JtYXRXaXRoU2VwYXJhdG9ycyhcbiAgICAgICAgICAgICAgICBzdHJGb3JTZXAsXG4gICAgICAgICAgICAgICAgdGhpcy50aG91c2FuZFNlcGFyYXRvcixcbiAgICAgICAgICAgICAgICB0aGlzLmRlY2ltYWxNYXJrZXIsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY29tbWFTaGlmdDogbnVtYmVyID0gcmVzdWx0LmluZGV4T2YoJywnKSAtIGlucHV0VmFsdWUuaW5kZXhPZignLCcpO1xuICAgICAgICAgICAgY29uc3Qgc2hpZnRTdGVwOiBudW1iZXIgPSByZXN1bHQubGVuZ3RoIC0gaW5wdXRWYWx1ZS5sZW5ndGg7XG5cbiAgICAgICAgICAgIGlmIChzaGlmdFN0ZXAgPiAwICYmIHJlc3VsdFtwb3NpdGlvbl0gIT09ICcsJykge1xuICAgICAgICAgICAgICAgIGJhY2tzcGFjZVNoaWZ0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBsZXQgX3NoaWZ0ID0gMDtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoaWZ0LmFkZChwb3NpdGlvbiArIF9zaGlmdCk7XG4gICAgICAgICAgICAgICAgICAgIF9zaGlmdCsrO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKF9zaGlmdCA8IHNoaWZ0U3RlcCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIChjb21tYVNoaWZ0ICE9PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAhKHJlc3VsdC5pbmRleE9mKCcsJykgPj0gcG9zaXRpb24gJiYgcG9zaXRpb24gPiAzKSkgfHxcbiAgICAgICAgICAgICAgICAoIShyZXN1bHQuaW5kZXhPZignLicpID49IHBvc2l0aW9uICYmIHBvc2l0aW9uID4gMykgJiYgc2hpZnRTdGVwIDw9IDApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaGlmdC5jbGVhcigpO1xuICAgICAgICAgICAgICAgIGJhY2tzcGFjZVNoaWZ0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzaGlmdCA9IHNoaWZ0U3RlcDtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBzaGlmdFN0ZXA7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hpZnQuYWRkKHBvc2l0aW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hpZnQuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgbGV0IGk6IG51bWJlciA9IDAsIGlucHV0U3ltYm9sOiBzdHJpbmcgPSBpbnB1dEFycmF5WzBdITtcbiAgICAgICAgICAgICAgICBpIDwgaW5wdXRBcnJheS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaSsrLCBpbnB1dFN5bWJvbCA9IGlucHV0QXJyYXlbaV0gPz8gJydcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJzb3IgPT09IG1hc2tFeHByZXNzaW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1N5bWJvbE1hc2soaW5wdXRTeW1ib2wsIG1hc2tFeHByZXNzaW9uW2N1cnNvcl0gPz8gJycpICYmXG4gICAgICAgICAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uW2N1cnNvciArIDFdID09PSAnPydcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGlucHV0U3ltYm9sO1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBtYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAxXSA9PT0gJyonICYmXG4gICAgICAgICAgICAgICAgICAgIG11bHRpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU3ltYm9sTWFzayhpbnB1dFN5bWJvbCwgbWFza0V4cHJlc3Npb25bY3Vyc29yICsgMl0gPz8gJycpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbnB1dFN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDM7XG4gICAgICAgICAgICAgICAgICAgIG11bHRpID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTeW1ib2xNYXNrKGlucHV0U3ltYm9sLCBtYXNrRXhwcmVzc2lvbltjdXJzb3JdID8/ICcnKSAmJlxuICAgICAgICAgICAgICAgICAgICBtYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAxXSA9PT0gJyonXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbnB1dFN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgbXVsdGkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uW2N1cnNvciArIDFdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTeW1ib2xNYXNrKGlucHV0U3ltYm9sLCBtYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAyXSA/PyAnJylcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGlucHV0U3ltYm9sO1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNrU3ltYm9sTWFzayhpbnB1dFN5bWJvbCwgbWFza0V4cHJlc3Npb25bY3Vyc29yXSA/PyAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2tFeHByZXNzaW9uW2N1cnNvcl0gPT09ICdIJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihpbnB1dFN5bWJvbCkgPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hpZnRTdGVwKG1hc2tFeHByZXNzaW9uLCBjdXJzb3IsIGlucHV0QXJyYXkubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGVhZFplcm9EYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJzAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobWFza0V4cHJlc3Npb25bY3Vyc29yXSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSAnMicgJiYgTnVtYmVyKGlucHV0U3ltYm9sKSA+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2tFeHByZXNzaW9uW2N1cnNvcl0gPT09ICdtJyB8fCBtYXNrRXhwcmVzc2lvbltjdXJzb3JdID09PSAncycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoaW5wdXRTeW1ib2wpID4gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoaWZ0U3RlcChtYXNrRXhwcmVzc2lvbiwgY3Vyc29yLCBpbnB1dEFycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxlYWRaZXJvRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcwJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5c0NvdW50ID0gMzE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXNrRXhwcmVzc2lvbltjdXJzb3JdID09PSAnZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hc2tTdGFydFdpdGhNb250aCA9IG1hc2tFeHByZXNzaW9uLnNsaWNlKDAsIDIpID09PSAnTTAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRXaXRoTW9udGhJbnB1dDogYm9vbGVhbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0V4cHJlc3Npb24uc2xpY2UoMCwgMikgPT09ICdNMCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZVtjdXJzb3IgLSAyXSA9PT0gJy8nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWVbY3Vyc29yIC0gMl0gPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlW2N1cnNvciAtIDJdID09PSAnLScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOdW1iZXIoaW5wdXRTeW1ib2wpID4gMyAmJiB0aGlzLmxlYWRaZXJvRGF0ZVRpbWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFtYXNrU3RhcnRXaXRoTW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE51bWJlcihpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgMikpID4gZGF5c0NvdW50IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIoaW5wdXRWYWx1ZS5zbGljZShjdXJzb3IgLSAxLCBjdXJzb3IgKyAxKSkgPiBkYXlzQ291bnQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWVbY3Vyc29yICsgMV0gPT09ICcvJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtjdXJzb3IgKyAxXSA9PT0gJy0nKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhcnRXaXRoTW9udGhJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE51bWJlcihpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciAtIDEsIGN1cnNvciArIDEpKSA+IGRheXNDb3VudCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dFZhbHVlW2N1cnNvcl0gIT09ICcvJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZVtjdXJzb3IgKyAyXSA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlW2N1cnNvciArIDJdID09PSAnLycgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWVbY3Vyc29yICsgMl0gPT09ICctJykpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtjdXJzb3JdID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlW2N1cnNvcl0gPT09ICcvJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWVbY3Vyc29yXSA9PT0gJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTnVtYmVyKGlucHV0VmFsdWUuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyAyKSkgPiBkYXlzQ291bnQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlW2N1cnNvciArIDFdID09PSAnLycgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlW2N1cnNvciArIDFdID09PSAnLScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlW2N1cnNvciArIDFdID09PSAnLicpXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGlmdFN0ZXAobWFza0V4cHJlc3Npb24sIGN1cnNvciwgaW5wdXRBcnJheS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sZWFkWmVyb0RhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXNrRXhwcmVzc2lvbltjdXJzb3JdID09PSAnTScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoc0NvdW50ID0gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXNrIHdpdGhvdXQgZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aXRob3V0RGF5czogYm9vbGVhbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKE51bWJlcihpbnB1dFN5bWJvbCkgPiAyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgMikpID4gbW9udGhzQ291bnQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtjdXJzb3IgKyAxXSA9PT0gJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRheTwxMCAmJiBtb250aDwxMiBmb3IgaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheTFtb250aElucHV0OiBib29sZWFuID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciAtIDMsIGN1cnNvciAtIDEpLmluY2x1ZGVzKCcvJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGlucHV0VmFsdWVbY3Vyc29yIC0gMl0gPT09ICcvJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIoaW5wdXRWYWx1ZS5zbGljZShjdXJzb3IgLSAxLCBjdXJzb3IgKyAxKSkgPiBtb250aHNDb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlW2N1cnNvcl0gIT09ICcvJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtjdXJzb3JdID09PSAnLycgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtjdXJzb3JdID09PSAnLScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0VmFsdWVbY3Vyc29yIC0gM10gPT09ICcvJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyKGlucHV0VmFsdWUuc2xpY2UoY3Vyc29yIC0gMiwgY3Vyc29yKSkgPiBtb250aHNDb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtjdXJzb3IgLSAxXSAhPT0gJy8nKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlW2N1cnNvciAtIDFdID09PSAnLycgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtjdXJzb3IgLSAxXSA9PT0gJy0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICBtb250aDwxMiAmJiBkYXk8MTAgZm9yIGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkybW9udGhJbnB1dDogYm9vbGVhbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyKGlucHV0VmFsdWUuc2xpY2UoY3Vyc29yIC0gMywgY3Vyc29yIC0gMSkpIDw9IGRheXNDb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciAtIDMsIGN1cnNvciAtIDEpLmluY2x1ZGVzKCcvJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZVtjdXJzb3IgLSAxXSA9PT0gJy8nIHx8IGlucHV0VmFsdWVbY3Vyc29yIC0gMV0gPT09ICctJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTnVtYmVyKGlucHV0VmFsdWUuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyAyKSkgPiBtb250aHNDb3VudCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlW2N1cnNvciArIDFdID09PSAnLycgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtjdXJzb3IgKyAxXSA9PT0gJy0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN1cnNvciA9PT0gNSAmJiB3aXRob3V0IGRheXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheTJtb250aElucHV0RG90OiBib29sZWFuID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTnVtYmVyKGlucHV0VmFsdWUuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyAyKSkgPiBtb250aHNDb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgPT09IDUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtjdXJzb3IgKyAxXSA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtjdXJzb3IgKyAxXSA9PT0gJy0nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtjdXJzb3IgKyAxXSA9PT0gJy8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF5PDEwICYmIG1vbnRoPDEyIGZvciBwYXN0ZSB3aG9sZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkxbW9udGhQYXN0ZTogYm9vbGVhbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyKGlucHV0VmFsdWUuc2xpY2UoY3Vyc29yIC0gMywgY3Vyc29yIC0gMSkpID4gZGF5c0NvdW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlucHV0VmFsdWUuc2xpY2UoY3Vyc29yIC0gMywgY3Vyc29yIC0gMSkuaW5jbHVkZXMoJy8nKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciAtIDIsIGN1cnNvcikuaW5jbHVkZXMoJy8nKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciAtIDIsIGN1cnNvcikpID4gbW9udGhzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAxMDxkYXk8MzEgJiYgbW9udGg8MTIgZm9yIHBhc3RlIHdob2xlIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheTJtb250aFBhc3RlOiBib29sZWFuID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIoaW5wdXRWYWx1ZS5zbGljZShjdXJzb3IgLSAzLCBjdXJzb3IgLSAxKSkgPD0gZGF5c0NvdW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlucHV0VmFsdWUuc2xpY2UoY3Vyc29yIC0gMywgY3Vyc29yIC0gMSkuaW5jbHVkZXMoJy8nKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWVbY3Vyc29yIC0gMV0gIT09ICcvJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciAtIDEsIGN1cnNvciArIDEpKSA+IG1vbnRoc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOdW1iZXIoaW5wdXRTeW1ib2wpID4gMSAmJiB0aGlzLmxlYWRaZXJvRGF0ZVRpbWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dERheXMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXkxbW9udGhJbnB1dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheTJtb250aFBhc3RlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5MW1vbnRoUGFzdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXkybW9udGhJbnB1dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheTJtb250aElucHV0RG90XG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGlmdFN0ZXAobWFza0V4cHJlc3Npb24sIGN1cnNvciwgaW5wdXRBcnJheS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sZWFkWmVyb0RhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbnB1dFN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dFN5bWJvbCA9PT0gJyAnICYmIG1hc2tFeHByZXNzaW9uW2N1cnNvcl0gPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gaW5wdXRTeW1ib2w7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcisrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmRleE9mKG1hc2tFeHByZXNzaW9uW2N1cnNvcl0gPz8gJycpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbWFza0V4cHJlc3Npb25bY3Vyc29yXTtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yKys7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoaWZ0U3RlcChtYXNrRXhwcmVzc2lvbiwgY3Vyc29yLCBpbnB1dEFycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hc2tFeHByZXNzaW9uW2N1cnNvcl0gPT09ICc5JyAmJiB0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hpZnRTdGVwKG1hc2tFeHByZXNzaW9uLCBjdXJzb3IsIGlucHV0QXJyYXkubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluZGV4T2YoaW5wdXRTeW1ib2wpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXR0ZXJuc1ttYXNrRXhwcmVzc2lvbltjdXJzb3JdID8/ICcnXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdHRlcm5zW21hc2tFeHByZXNzaW9uW2N1cnNvcl0gPz8gJyddPy5vcHRpb25hbFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAhIWlucHV0QXJyYXlbY3Vyc29yXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbWFza0V4cHJlc3Npb24gIT09ICcwOTkuMDk5LjA5OS4wOTknICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrRXhwcmVzc2lvbiAhPT0gJzAwMC4wMDAuMDAwLTAwJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbWFza0V4cHJlc3Npb24gIT09ICcwMC4wMDAuMDAwLzAwMDAtMDAnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhbWFza0V4cHJlc3Npb24ubWF0Y2goL145K1xcLjArJC8pXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGlucHV0QXJyYXlbY3Vyc29yXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJzb3IrKztcbiAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFza0V4cHJlc3Npb25bY3Vyc29yICsgMV0gPT09ICcqJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maW5kU3BlY2lhbENoYXIodGhpcy5tYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAyXSA/PyAnJykgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmluZFNwZWNpYWxDaGFyKGlucHV0U3ltYm9sKSA9PT0gdGhpcy5tYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAyXSAmJlxuICAgICAgICAgICAgICAgICAgICBtdWx0aVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMztcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGlucHV0U3ltYm9sO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFza0V4cHJlc3Npb25bY3Vyc29yICsgMV0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maW5kU3BlY2lhbENoYXIodGhpcy5tYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAyXSA/PyAnJykgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmluZFNwZWNpYWxDaGFyKGlucHV0U3ltYm9sKSA9PT0gdGhpcy5tYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAyXSAmJlxuICAgICAgICAgICAgICAgICAgICBtdWx0aVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMztcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGlucHV0U3ltYm9sO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd01hc2tUeXBlZCAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluZGV4T2YoaW5wdXRTeW1ib2wpIDwgMCAmJlxuICAgICAgICAgICAgICAgICAgICBpbnB1dFN5bWJvbCAhPT0gdGhpcy5wbGFjZUhvbGRlckNoYXJhY3RlclxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzdGVwQmFjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc3VsdC5sZW5ndGggKyAxID09PSBtYXNrRXhwcmVzc2lvbi5sZW5ndGggJiZcbiAgICAgICAgICAgIHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5kZXhPZihtYXNrRXhwcmVzc2lvblttYXNrRXhwcmVzc2lvbi5sZW5ndGggLSAxXSA/PyAnJykgIT09IC0xXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IG1hc2tFeHByZXNzaW9uW21hc2tFeHByZXNzaW9uLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXdQb3NpdGlvbjogbnVtYmVyID0gcG9zaXRpb24gKyAxO1xuXG4gICAgICAgIHdoaWxlICh0aGlzLl9zaGlmdC5oYXMobmV3UG9zaXRpb24pKSB7XG4gICAgICAgICAgICBzaGlmdCsrO1xuICAgICAgICAgICAgbmV3UG9zaXRpb24rKztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhY3R1YWxTaGlmdDogbnVtYmVyID1cbiAgICAgICAgICAgIGp1c3RQYXN0ZWQgJiYgIW1hc2tFeHByZXNzaW9uLnN0YXJ0c1dpdGgoJ3NlcGFyYXRvcicpXG4gICAgICAgICAgICAgICAgPyBjdXJzb3JcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3NoaWZ0Lmhhcyhwb3NpdGlvbilcbiAgICAgICAgICAgICAgICA/IHNoaWZ0XG4gICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICBpZiAoc3RlcEJhY2spIHtcbiAgICAgICAgICAgIGFjdHVhbFNoaWZ0LS07XG4gICAgICAgIH1cblxuICAgICAgICBjYihhY3R1YWxTaGlmdCwgYmFja3NwYWNlU2hpZnQpO1xuICAgICAgICBpZiAoc2hpZnQgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLl9zaGlmdC5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvbmx5U3BlY2lhbCA9IGZhbHNlO1xuICAgICAgICBpZiAoYmFja3NwYWNlZCkge1xuICAgICAgICAgICAgb25seVNwZWNpYWwgPSBpbnB1dEFycmF5LmV2ZXJ5KChjaGFyKSA9PiB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKGNoYXIpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzID0gYCR7dGhpcy5wcmVmaXh9JHtvbmx5U3BlY2lhbCA/ICcnIDogcmVzdWx0fSR7dGhpcy5zdWZmaXh9YDtcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcyA9IGAke3RoaXMucHJlZml4fSR7cmVzdWx0fWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgX2ZpbmRTcGVjaWFsQ2hhcihpbnB1dFN5bWJvbDogc3RyaW5nKTogdW5kZWZpbmVkIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuZmluZCgodmFsOiBzdHJpbmcpID0+IHZhbCA9PT0gaW5wdXRTeW1ib2wpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfY2hlY2tTeW1ib2xNYXNrKGlucHV0U3ltYm9sOiBzdHJpbmcsIG1hc2tTeW1ib2w6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICB0aGlzLnBhdHRlcm5zID0gdGhpcy5jdXN0b21QYXR0ZXJuID8gdGhpcy5jdXN0b21QYXR0ZXJuIDogdGhpcy5wYXR0ZXJucztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLnBhdHRlcm5zW21hc2tTeW1ib2xdPy5wYXR0ZXJuICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wYXR0ZXJuc1ttYXNrU3ltYm9sXT8ucGF0dGVybi50ZXN0KGlucHV0U3ltYm9sKSkgPz9cbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9ybWF0V2l0aFNlcGFyYXRvcnMgPSAoXG4gICAgICAgIHN0cjogc3RyaW5nLFxuICAgICAgICB0aG91c2FuZFNlcGFyYXRvckNoYXI6IHN0cmluZyxcbiAgICAgICAgZGVjaW1hbENoYXJzOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgcHJlY2lzaW9uOiBudW1iZXJcbiAgICApID0+IHtcbiAgICAgICAgbGV0IHg6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGxldCBkZWNpbWFsQ2hhciA9ICcnO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWNpbWFsQ2hhcnMpKSB7XG4gICAgICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgIGRlY2ltYWxDaGFycy5tYXAoKHYpID0+ICgnW1xcXFxeJC58PyorKCknLmluZGV4T2YodikgPj0gMCA/IGBcXFxcJHt2fWAgOiB2KSkuam9pbignfCcpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgeCA9IHN0ci5zcGxpdChyZWdFeHApO1xuICAgICAgICAgICAgZGVjaW1hbENoYXIgPSBzdHIubWF0Y2gocmVnRXhwKT8uWzBdID8/ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeCA9IHN0ci5zcGxpdChkZWNpbWFsQ2hhcnMpO1xuICAgICAgICAgICAgZGVjaW1hbENoYXIgPSBkZWNpbWFsQ2hhcnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVjaW1hbHM6IHN0cmluZyA9IHgubGVuZ3RoID4gMSA/IGAke2RlY2ltYWxDaGFyfSR7eFsxXX1gIDogJyc7XG4gICAgICAgIGxldCByZXM6IHN0cmluZyA9IHhbMF0gPz8gJyc7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvckxpbWl0OiBzdHJpbmcgPSB0aGlzLnNlcGFyYXRvckxpbWl0LnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgIGlmIChzZXBhcmF0b3JMaW1pdCAmJiArc2VwYXJhdG9yTGltaXQpIHtcbiAgICAgICAgICAgIGlmIChyZXNbMF0gPT09ICctJykge1xuICAgICAgICAgICAgICAgIHJlcyA9IGAtJHtyZXMuc2xpY2UoMSwgcmVzLmxlbmd0aCkuc2xpY2UoMCwgc2VwYXJhdG9yTGltaXQubGVuZ3RoKX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXMgPSByZXMuc2xpY2UoMCwgc2VwYXJhdG9yTGltaXQubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZ3ggPSAvKFxcZCspKFxcZHszfSkvO1xuXG4gICAgICAgIHdoaWxlICh0aG91c2FuZFNlcGFyYXRvckNoYXIgJiYgcmd4LnRlc3QocmVzKSkge1xuICAgICAgICAgICAgcmVzID0gcmVzLnJlcGxhY2Uocmd4LCAnJDEnICsgdGhvdXNhbmRTZXBhcmF0b3JDaGFyICsgJyQyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlY2lzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXMgKyBkZWNpbWFscztcbiAgICAgICAgfSBlbHNlIGlmIChwcmVjaXNpb24gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcyArIGRlY2ltYWxzLnN1YnN0cmluZygwLCBwcmVjaXNpb24gKyAxKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBwZXJjZW50YWdlID0gKHN0cjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoc3RyKSA+PSAwICYmIE51bWJlcihzdHIpIDw9IDEwMDtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBnZXRQcmVjaXNpb24gPSAobWFza0V4cHJlc3Npb246IHN0cmluZyk6IG51bWJlciA9PiB7XG4gICAgICAgIGNvbnN0IHg6IHN0cmluZ1tdID0gbWFza0V4cHJlc3Npb24uc3BsaXQoJy4nKTtcbiAgICAgICAgaWYgKHgubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih4W3gubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH07XG5cbiAgICBwcml2YXRlIGNoZWNrQW5kUmVtb3ZlU3VmZml4ID0gKGlucHV0VmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN1ZmZpeD8ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0ciA9IHRoaXMuc3VmZml4LnN1YnN0cmluZyhpLCB0aGlzLnN1ZmZpeD8ubGVuZ3RoKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLmluY2x1ZGVzKHN1YnN0cikgJiZcbiAgICAgICAgICAgICAgICBpICE9PSB0aGlzLnN1ZmZpeD8ubGVuZ3RoIC0gMSAmJlxuICAgICAgICAgICAgICAgIChpIC0gMSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgIWlucHV0VmFsdWUuaW5jbHVkZXModGhpcy5zdWZmaXguc3Vic3RyaW5nKGkgLSAxLCB0aGlzLnN1ZmZpeD8ubGVuZ3RoKSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRWYWx1ZS5yZXBsYWNlKHN1YnN0ciwgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dFZhbHVlO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGNoZWNrSW5wdXRQcmVjaXNpb24gPSAoXG4gICAgICAgIGlucHV0VmFsdWU6IHN0cmluZyxcbiAgICAgICAgcHJlY2lzaW9uOiBudW1iZXIsXG4gICAgICAgIGRlY2ltYWxNYXJrZXI6IElDb25maWdbJ2RlY2ltYWxNYXJrZXInXVxuICAgICk6IHN0cmluZyA9PiB7XG4gICAgICAgIGlmIChwcmVjaXNpb24gPCBJbmZpbml0eSkge1xuICAgICAgICAgICAgLy8gVE9ETyBuZWVkIHRoaW5rIGFib3V0IGRlY2ltYWxNYXJrZXJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRlY2ltYWxNYXJrZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFya2VyID0gZGVjaW1hbE1hcmtlci5maW5kKChkbSkgPT4gZG0gIT09IHRoaXMudGhvdXNhbmRTZXBhcmF0b3IpO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGRlY2ltYWxNYXJrZXIgPSBtYXJrZXIgPyBtYXJrZXIgOiBkZWNpbWFsTWFya2VyWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJlY2lzaW9uUmVnRXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJUb1JlZ0V4cEV4cHJlc3Npb24oZGVjaW1hbE1hcmtlcikgKyBgXFxcXGR7JHtwcmVjaXNpb259fS4qJGBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHByZWNpc2lvbk1hdGNoOiBSZWdFeHBNYXRjaEFycmF5IHwgbnVsbCA9IGlucHV0VmFsdWUubWF0Y2gocHJlY2lzaW9uUmVnRXgpO1xuICAgICAgICAgICAgY29uc3QgcHJlY2lzaW9uTWF0Y2hMZW5ndGg6IG51bWJlciA9IChwcmVjaXNpb25NYXRjaCAmJiBwcmVjaXNpb25NYXRjaFswXT8ubGVuZ3RoKSA/PyAwO1xuICAgICAgICAgICAgaWYgKHByZWNpc2lvbk1hdGNoTGVuZ3RoIC0gMSA+IHByZWNpc2lvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBwcmVjaXNpb25NYXRjaExlbmd0aCAtIDEgLSBwcmVjaXNpb247XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IGlucHV0VmFsdWUuc3Vic3RyaW5nKDAsIGlucHV0VmFsdWUubGVuZ3RoIC0gZGlmZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uID09PSAwICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcGFyZU9ySW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWVbaW5wdXRWYWx1ZS5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbE1hcmtlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aG91c2FuZFNlcGFyYXRvclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUgPSBpbnB1dFZhbHVlLnN1YnN0cmluZygwLCBpbnB1dFZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dFZhbHVlO1xuICAgIH07XG5cbiAgICBwcml2YXRlIF9zdHJpcFRvRGVjaW1hbChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzdHJcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5maWx0ZXIoKGk6IHN0cmluZywgaWR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0RlY2ltYWxNYXJrZXIgPVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5kZWNpbWFsTWFya2VyID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBpID09PSB0aGlzLmRlY2ltYWxNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogLy8gVE9ETyAoaW5lcGlwZW5rbykgdXNlIHV0aWxpdHkgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2ltYWxNYXJrZXIuaW5jbHVkZXMoaSBhcyAnLCcgfCAnLicpO1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGkubWF0Y2goJ14tP1xcXFxkJykgfHxcbiAgICAgICAgICAgICAgICAgICAgaSA9PT0gdGhpcy50aG91c2FuZFNlcGFyYXRvciB8fFxuICAgICAgICAgICAgICAgICAgICBpc0RlY2ltYWxNYXJrZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgKGkgPT09ICctJyAmJiBpZHggPT09IDAgJiYgdGhpcy5hbGxvd05lZ2F0aXZlTnVtYmVycylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGFyVG9SZWdFeHBFeHByZXNzaW9uKGNoYXI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIC8vIGlmIChBcnJheS5pc0FycmF5KGNoYXIpKSB7XG4gICAgICAgIC8vIFx0cmV0dXJuIGNoYXIubWFwKCh2KSA9PiAoJ1tcXFxcXiQufD8qKygpJy5pbmRleE9mKHYpID49IDAgPyBgXFxcXCR7dn1gIDogdikpLmpvaW4oJ3wnKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBpZiAoY2hhcikge1xuICAgICAgICAgICAgY29uc3QgY2hhcnNUb0VzY2FwZSA9ICdbXFxcXF4kLnw/KisoKSc7XG4gICAgICAgICAgICByZXR1cm4gY2hhciA9PT0gJyAnID8gJ1xcXFxzJyA6IGNoYXJzVG9Fc2NhcGUuaW5kZXhPZihjaGFyKSA+PSAwID8gYFxcXFwke2NoYXJ9YCA6IGNoYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2hpZnRTdGVwKG1hc2tFeHByZXNzaW9uOiBzdHJpbmcsIGN1cnNvcjogbnVtYmVyLCBpbnB1dExlbmd0aDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHNoaWZ0U3RlcDogbnVtYmVyID0gL1sqP10vZy50ZXN0KG1hc2tFeHByZXNzaW9uLnNsaWNlKDAsIGN1cnNvcikpXG4gICAgICAgICAgICA/IGlucHV0TGVuZ3RoXG4gICAgICAgICAgICA6IGN1cnNvcjtcbiAgICAgICAgdGhpcy5fc2hpZnQuYWRkKHNoaWZ0U3RlcCArIHRoaXMucHJlZml4Lmxlbmd0aCB8fCAwKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2NvbXBhcmVPckluY2x1ZGVzPFQ+KHZhbHVlOiBULCBjb21wYXJlZFZhbHVlOiBUIHwgVFtdLCBleGNsdWRlZFZhbHVlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGNvbXBhcmVkVmFsdWUpXG4gICAgICAgICAgICA/IGNvbXBhcmVkVmFsdWUuZmlsdGVyKCh2KSA9PiB2ICE9PSBleGNsdWRlZFZhbHVlKS5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgICAgIDogdmFsdWUgPT09IGNvbXBhcmVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFsaWRJUCh2YWx1ZXNJUDogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEoXG4gICAgICAgICAgICB2YWx1ZXNJUC5sZW5ndGggPT09IDQgJiZcbiAgICAgICAgICAgICF2YWx1ZXNJUC5zb21lKCh2YWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlc0lQLmxlbmd0aCAhPT0gaW5kZXggKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gJycgfHwgTnVtYmVyKHZhbHVlKSA+IDI1NTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSAnJyB8fCBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDAsIDMpKSA+IDI1NTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
572
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hc2stYXBwbGllci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hc2stbGliL3NyYy9saWIvbmd4LW1hc2stYXBwbGllci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQVcsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFN0QsTUFDYSxxQkFBcUI7SUFEbEM7UUFFYyxZQUFPLEdBQUcsTUFBTSxDQUFVLGVBQWUsQ0FBQyxDQUFDO1FBRTlDLDBCQUFxQixHQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDO1FBRWhDLGdCQUFXLEdBQTJCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBSS9ELG9CQUFlLEdBQStCLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1FBRTNFLHNCQUFpQixHQUFpQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBRWpGLGFBQVEsR0FBd0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFFdEQsV0FBTSxHQUFzQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUVoRCxXQUFNLEdBQXNCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBRWhELHNCQUFpQixHQUFpQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBRWpGLGtCQUFhLEdBQTZCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBSXJFLGtCQUFhLEdBQTZCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBRXJFLHlCQUFvQixHQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO1FBRS9CLGVBQVUsR0FBMEIsSUFBSSxDQUFDLE9BQU8s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QUMsTUFBTSxLQUFLLENBQUM7WUFDckIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssS0FBSyxHQUFHLENBQUMsRUFBRTtvQkFDL0IsT0FBTyxLQUFLLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQzlDO2dCQUNELE9BQU8sS0FBSyxLQUFLLEVBQUUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDL0QsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7OEdBMXNCUSxxQkFBcUI7a0hBQXJCLHFCQUFxQjs7U0FBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HWF9NQVNLX0NPTkZJRywgSUNvbmZpZyB9IGZyb20gJy4vbmd4LW1hc2suY29uZmlnJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5neE1hc2tBcHBsaWVyU2VydmljZSB7XG4gICAgcHJvdGVjdGVkIF9jb25maWcgPSBpbmplY3Q8SUNvbmZpZz4oTkdYX01BU0tfQ09ORklHKTtcblxuICAgIHB1YmxpYyBkcm9wU3BlY2lhbENoYXJhY3RlcnM6IElDb25maWdbJ2Ryb3BTcGVjaWFsQ2hhcmFjdGVycyddID1cbiAgICAgICAgdGhpcy5fY29uZmlnLmRyb3BTcGVjaWFsQ2hhcmFjdGVycztcblxuICAgIHB1YmxpYyBoaWRkZW5JbnB1dDogSUNvbmZpZ1snaGlkZGVuSW5wdXQnXSA9IHRoaXMuX2NvbmZpZy5oaWRkZW5JbnB1dDtcblxuICAgIHB1YmxpYyBzaG93VGVtcGxhdGUhOiBJQ29uZmlnWydzaG93VGVtcGxhdGUnXTtcblxuICAgIHB1YmxpYyBjbGVhcklmTm90TWF0Y2g6IElDb25maWdbJ2NsZWFySWZOb3RNYXRjaCddID0gdGhpcy5fY29uZmlnLmNsZWFySWZOb3RNYXRjaDtcblxuICAgIHB1YmxpYyBzcGVjaWFsQ2hhcmFjdGVyczogSUNvbmZpZ1snc3BlY2lhbENoYXJhY3RlcnMnXSA9IHRoaXMuX2NvbmZpZy5zcGVjaWFsQ2hhcmFjdGVycztcblxuICAgIHB1YmxpYyBwYXR0ZXJuczogSUNvbmZpZ1sncGF0dGVybnMnXSA9IHRoaXMuX2NvbmZpZy5wYXR0ZXJucztcblxuICAgIHB1YmxpYyBwcmVmaXg6IElDb25maWdbJ3ByZWZpeCddID0gdGhpcy5fY29uZmlnLnByZWZpeDtcblxuICAgIHB1YmxpYyBzdWZmaXg6IElDb25maWdbJ3N1ZmZpeCddID0gdGhpcy5fY29uZmlnLnN1ZmZpeDtcblxuICAgIHB1YmxpYyB0aG91c2FuZFNlcGFyYXRvcjogSUNvbmZpZ1sndGhvdXNhbmRTZXBhcmF0b3InXSA9IHRoaXMuX2NvbmZpZy50aG91c2FuZFNlcGFyYXRvcjtcblxuICAgIHB1YmxpYyBkZWNpbWFsTWFya2VyOiBJQ29uZmlnWydkZWNpbWFsTWFya2VyJ10gPSB0aGlzLl9jb25maWcuZGVjaW1hbE1hcmtlcjtcblxuICAgIHB1YmxpYyBjdXN0b21QYXR0ZXJuITogSUNvbmZpZ1sncGF0dGVybnMnXTtcblxuICAgIHB1YmxpYyBzaG93TWFza1R5cGVkOiBJQ29uZmlnWydzaG93TWFza1R5cGVkJ10gPSB0aGlzLl9jb25maWcuc2hvd01hc2tUeXBlZDtcblxuICAgIHB1YmxpYyBwbGFjZUhvbGRlckNoYXJhY3RlcjogSUNvbmZpZ1sncGxhY2VIb2xkZXJDaGFyYWN0ZXInXSA9XG4gICAgICAgIHRoaXMuX2NvbmZpZy5wbGFjZUhvbGRlckNoYXJhY3RlcjtcblxuICAgIHB1YmxpYyB2YWxpZGF0aW9uOiBJQ29uZmlnWyd2YWxpZGF0aW9uJ10gPSB0aGlzLl9jb25maWcudmFsaWRhdGlvbjtcblxuICAgIHB1YmxpYyBzZXBhcmF0b3JMaW1pdDogSUNvbmZpZ1snc2VwYXJhdG9yTGltaXQnXSA9IHRoaXMuX2NvbmZpZy5zZXBhcmF0b3JMaW1pdDtcblxuICAgIHB1YmxpYyBhbGxvd05lZ2F0aXZlTnVtYmVyczogSUNvbmZpZ1snYWxsb3dOZWdhdGl2ZU51bWJlcnMnXSA9XG4gICAgICAgIHRoaXMuX2NvbmZpZy5hbGxvd05lZ2F0aXZlTnVtYmVycztcblxuICAgIHB1YmxpYyBsZWFkWmVyb0RhdGVUaW1lOiBJQ29uZmlnWydsZWFkWmVyb0RhdGVUaW1lJ10gPSB0aGlzLl9jb25maWcubGVhZFplcm9EYXRlVGltZTtcblxuICAgIHByaXZhdGUgX3NoaWZ0OiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKTtcblxuICAgIHB1YmxpYyBtYXNrRXhwcmVzc2lvbiA9ICcnO1xuXG4gICAgcHVibGljIGFjdHVhbFZhbHVlID0gJyc7XG5cbiAgICBwdWJsaWMgc2hvd25NYXNrRXhwcmVzc2lvbiA9ICcnO1xuXG4gICAgcHVibGljIGlwRXJyb3I/OiBib29sZWFuO1xuXG4gICAgcHVibGljIGNwZkNucGpFcnJvcj86IGJvb2xlYW47XG4gICAgcHVibGljIGFwcGx5TWFza1dpdGhQYXR0ZXJuKFxuICAgICAgICBpbnB1dFZhbHVlOiBzdHJpbmcsXG4gICAgICAgIG1hc2tBbmRQYXR0ZXJuOiBbc3RyaW5nLCBJQ29uZmlnWydwYXR0ZXJucyddXVxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IFttYXNrLCBjdXN0b21QYXR0ZXJuXSA9IG1hc2tBbmRQYXR0ZXJuO1xuICAgICAgICB0aGlzLmN1c3RvbVBhdHRlcm4gPSBjdXN0b21QYXR0ZXJuO1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBseU1hc2soaW5wdXRWYWx1ZSwgbWFzayk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5TWFzayhcbiAgICAgICAgaW5wdXRWYWx1ZTogc3RyaW5nIHwgb2JqZWN0IHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgICAgIG1hc2tFeHByZXNzaW9uOiBzdHJpbmcsXG4gICAgICAgIHBvc2l0aW9uID0gMCxcbiAgICAgICAganVzdFBhc3RlZCA9IGZhbHNlLFxuICAgICAgICBiYWNrc3BhY2VkID0gZmFsc2UsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY2I6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID0gKCkgPT4ge31cbiAgICApOiBzdHJpbmcge1xuICAgICAgICBpZiAoIW1hc2tFeHByZXNzaW9uIHx8IHR5cGVvZiBpbnB1dFZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjdXJzb3IgPSAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGxldCBtdWx0aSA9IGZhbHNlO1xuICAgICAgICBsZXQgYmFja3NwYWNlU2hpZnQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHNoaWZ0ID0gMTtcbiAgICAgICAgbGV0IHN0ZXBCYWNrID0gZmFsc2U7XG4gICAgICAgIGlmIChpbnB1dFZhbHVlLnNsaWNlKDAsIHRoaXMucHJlZml4Lmxlbmd0aCkgPT09IHRoaXMucHJlZml4KSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIGlucHV0VmFsdWUgPSBpbnB1dFZhbHVlLnNsaWNlKHRoaXMucHJlZml4Lmxlbmd0aCwgaW5wdXRWYWx1ZS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMuc3VmZml4ICYmIGlucHV0VmFsdWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMuY2hlY2tBbmRSZW1vdmVTdWZmaXgoaW5wdXRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXRBcnJheTogc3RyaW5nW10gPSBpbnB1dFZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJycpO1xuICAgICAgICBpZiAodGhpcy5hbGxvd05lZ2F0aXZlTnVtYmVycyAmJiBpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgMSkgPT09ICctJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICByZXN1bHQgKz0gaW5wdXRWYWx1ZS5zbGljZShjdXJzb3IsIGN1cnNvciArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXNrRXhwcmVzc2lvbiA9PT0gJ0lQJykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzSVAgPSBpbnB1dFZhbHVlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICB0aGlzLmlwRXJyb3IgPSB0aGlzLl92YWxpZElQKHZhbHVlc0lQKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgbWFza0V4cHJlc3Npb24gPSAnMDk5LjA5OS4wOTkuMDk5JztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcnI6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGlucHV0VmFsdWVbaV0/Lm1hdGNoKCdcXFxcZCcpKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goaW5wdXRWYWx1ZVtpXSA/PyAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hc2tFeHByZXNzaW9uID09PSAnQ1BGX0NOUEonKSB7XG4gICAgICAgICAgICB0aGlzLmNwZkNucGpFcnJvciA9IGFyci5sZW5ndGggIT09IDExICYmIGFyci5sZW5ndGggIT09IDE0O1xuICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPiAxMSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uID0gJzAwLjAwMC4wMDAvMDAwMC0wMCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uID0gJzAwMC4wMDAuMDAwLTAwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWFza0V4cHJlc3Npb24uc3RhcnRzV2l0aCgncGVyY2VudCcpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZS5tYXRjaCgnW2Etel18W0EtWl0nKSB8fFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUubWF0Y2goL1stISQlXiYqKClfK3x+PWB7fVxcW1xcXTpcIjsnPD4/LFxcLy5dLylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUgPSB0aGlzLl9zdHJpcFRvRGVjaW1hbChpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVjaXNpb246IG51bWJlciA9IHRoaXMuZ2V0UHJlY2lzaW9uKG1hc2tFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gdGhpcy5jaGVja0lucHV0UHJlY2lzaW9uKGlucHV0VmFsdWUsIHByZWNpc2lvbiwgdGhpcy5kZWNpbWFsTWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLmluZGV4T2YoJy4nKSA+IDAgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5wZXJjZW50YWdlKGlucHV0VmFsdWUuc3Vic3RyaW5nKDAsIGlucHV0VmFsdWUuaW5kZXhPZignLicpKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlOiBzdHJpbmcgPSBpbnB1dFZhbHVlLnN1YnN0cmluZygwLCBpbnB1dFZhbHVlLmluZGV4T2YoJy4nKSAtIDEpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsbG93TmVnYXRpdmVOdW1iZXJzICYmIGlucHV0VmFsdWUuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyAxKSA9PT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSBpbnB1dFZhbHVlLnN1YnN0cmluZygwLCBpbnB1dFZhbHVlLmluZGV4T2YoJy4nKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUgPSBgJHtiYXNlfSR7aW5wdXRWYWx1ZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWUuaW5kZXhPZignLicpLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICAgICl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hbGxvd05lZ2F0aXZlTnVtYmVycyAmJiBpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgMSkgPT09ICctJ1xuICAgICAgICAgICAgICAgID8gKHZhbHVlID0gaW5wdXRWYWx1ZS5zbGljZShjdXJzb3IgKyAxLCBjdXJzb3IgKyBpbnB1dFZhbHVlLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgOiAodmFsdWUgPSBpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBlcmNlbnRhZ2UodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaW5wdXRWYWx1ZS5zdWJzdHJpbmcoMCwgaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChtYXNrRXhwcmVzc2lvbi5zdGFydHNXaXRoKCdzZXBhcmF0b3InKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUubWF0Y2goJ1t30LAt0Y/QkC3Qr10nKSB8fFxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUubWF0Y2goJ1vQgdGR0JAt0Y9dJykgfHxcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLm1hdGNoKCdbYS16XXxbQS1aXScpIHx8XG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZS5tYXRjaCgvWy1AIyEkJVxcXFxeJiooKV/Co8KsJyt8fj1ge31cXF06XCI7PD4uPy9dLykgfHxcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLm1hdGNoKCdbXkEtWmEtejAtOSxdJylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUgPSB0aGlzLl9zdHJpcFRvRGVjaW1hbChpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgaW5wdXRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZS5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVswXSA9PT0gJzAnICYmXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVsxXSAhPT0gdGhpcy50aG91c2FuZFNlcGFyYXRvciAmJlxuICAgICAgICAgICAgICAgICF0aGlzLl9jb21wYXJlT3JJbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVsxXSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsTWFya2VyLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yXG4gICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICFiYWNrc3BhY2VkXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXRWYWx1ZS5zbGljZSgwLCBpbnB1dFZhbHVlLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChiYWNrc3BhY2VkKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMuX2NvbXBhcmVPckluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlW2lucHV0VmFsdWUubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjaW1hbE1hcmtlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aG91c2FuZFNlcGFyYXRvclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dFZhbHVlLnNsaWNlKDAsIGlucHV0VmFsdWUubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVE9ETzogd2UgaGFkIGRpZmZlcmVudCByZXhleHBzIGhlcmUgZm9yIHRoZSBkaWZmZXJlbnQgY2FzZXMuLi4gYnV0IHRlc3RzIGRvbnQgc2VhbSB0byBib3RoZXIgLSBjaGVjayB0aGlzXG4gICAgICAgICAgICAvLyAgc2VwYXJhdG9yOiBubyBDT01NQSwgZG90LXNlcDogbm8gU1BBQ0UsIENPTU1BIE9LLCBjb21tYS1zZXA6IG5vIFNQQUNFLCBDT01NQSBPS1xuXG4gICAgICAgICAgICBjb25zdCB0aG91c2FuZFNlcGFyYXRvckNoYXJFc2NhcGVkOiBzdHJpbmcgPSB0aGlzLl9jaGFyVG9SZWdFeHBFeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgaW52YWxpZENoYXJzOiBzdHJpbmcgPSAnQCMhJCVeJiooKV8rfH49YHt9XFxcXFtcXFxcXTpcXFxccyxcXFxcLlwiOzw+P1xcXFwvJy5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIHRob3VzYW5kU2VwYXJhdG9yQ2hhckVzY2FwZWQsXG4gICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvLy5yZXBsYWNlKGRlY2ltYWxNYXJrZXJFc2NhcGVkLCAnJyk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRlY2ltYWxNYXJrZXIpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtYXJrZXIgb2YgdGhpcy5kZWNpbWFsTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGludmFsaWRDaGFycyA9IGludmFsaWRDaGFycy5yZXBsYWNlKHRoaXMuX2NoYXJUb1JlZ0V4cEV4cHJlc3Npb24obWFya2VyKSwgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW52YWxpZENoYXJzID0gaW52YWxpZENoYXJzLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJUb1JlZ0V4cEV4cHJlc3Npb24odGhpcy5kZWNpbWFsTWFya2VyKSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbnZhbGlkQ2hhclJlZ2V4cCA9IG5ldyBSZWdFeHAoJ1snICsgaW52YWxpZENoYXJzICsgJ10nKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUubWF0Y2goaW52YWxpZENoYXJSZWdleHApIHx8XG4gICAgICAgICAgICAgICAgKGlucHV0VmFsdWUubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBhcmVPckluY2x1ZGVzKGlucHV0VmFsdWUsIHRoaXMuZGVjaW1hbE1hcmtlciwgdGhpcy50aG91c2FuZFNlcGFyYXRvcikpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gaW5wdXRWYWx1ZS5zdWJzdHJpbmcoMCwgaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcHJlY2lzaW9uOiBudW1iZXIgPSB0aGlzLmdldFByZWNpc2lvbihtYXNrRXhwcmVzc2lvbik7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIGlucHV0VmFsdWUgPSB0aGlzLmNoZWNrSW5wdXRQcmVjaXNpb24oaW5wdXRWYWx1ZSwgcHJlY2lzaW9uLCB0aGlzLmRlY2ltYWxNYXJrZXIpO1xuICAgICAgICAgICAgY29uc3Qgc3RyRm9yU2VwOiBzdHJpbmcgPSBpbnB1dFZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgbmV3IFJlZ0V4cCh0aG91c2FuZFNlcGFyYXRvckNoYXJFc2NhcGVkLCAnZycpLFxuICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5fZm9ybWF0V2l0aFNlcGFyYXRvcnMoXG4gICAgICAgICAgICAgICAgc3RyRm9yU2VwLFxuICAgICAgICAgICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IsXG4gICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsTWFya2VyLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hU2hpZnQ6IG51bWJlciA9IHJlc3VsdC5pbmRleE9mKCcsJykgLSBpbnB1dFZhbHVlLmluZGV4T2YoJywnKTtcbiAgICAgICAgICAgIGNvbnN0IHNoaWZ0U3RlcDogbnVtYmVyID0gcmVzdWx0Lmxlbmd0aCAtIGlucHV0VmFsdWUubGVuZ3RoO1xuXG4gICAgICAgICAgICBpZiAoc2hpZnRTdGVwID4gMCAmJiByZXN1bHRbcG9zaXRpb25dICE9PSAnLCcpIHtcbiAgICAgICAgICAgICAgICBiYWNrc3BhY2VTaGlmdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgbGV0IF9zaGlmdCA9IDA7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGlmdC5hZGQocG9zaXRpb24gKyBfc2hpZnQpO1xuICAgICAgICAgICAgICAgICAgICBfc2hpZnQrKztcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChfc2hpZnQgPCBzaGlmdFN0ZXApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAoY29tbWFTaGlmdCAhPT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgIShyZXN1bHQuaW5kZXhPZignLCcpID49IHBvc2l0aW9uICYmIHBvc2l0aW9uID4gMykpIHx8XG4gICAgICAgICAgICAgICAgKCEocmVzdWx0LmluZGV4T2YoJy4nKSA+PSBwb3NpdGlvbiAmJiBwb3NpdGlvbiA+IDMpICYmIHNoaWZ0U3RlcCA8PSAwKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hpZnQuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICBiYWNrc3BhY2VTaGlmdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2hpZnQgPSBzaGlmdFN0ZXA7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gc2hpZnRTdGVwO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NoaWZ0LmFkZChwb3NpdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NoaWZ0LmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIGxldCBpOiBudW1iZXIgPSAwLCBpbnB1dFN5bWJvbDogc3RyaW5nID0gaW5wdXRBcnJheVswXSE7XG4gICAgICAgICAgICAgICAgaSA8IGlucHV0QXJyYXkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGkrKywgaW5wdXRTeW1ib2wgPSBpbnB1dEFycmF5W2ldID8/ICcnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBtYXNrRXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTeW1ib2xNYXNrKGlucHV0U3ltYm9sLCBtYXNrRXhwcmVzc2lvbltjdXJzb3JdID8/ICcnKSAmJlxuICAgICAgICAgICAgICAgICAgICBtYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAxXSA9PT0gJz8nXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbnB1dFN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbWFza0V4cHJlc3Npb25bY3Vyc29yICsgMV0gPT09ICcqJyAmJlxuICAgICAgICAgICAgICAgICAgICBtdWx0aSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1N5bWJvbE1hc2soaW5wdXRTeW1ib2wsIG1hc2tFeHByZXNzaW9uW2N1cnNvciArIDJdID8/ICcnKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gaW5wdXRTeW1ib2w7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciArPSAzO1xuICAgICAgICAgICAgICAgICAgICBtdWx0aSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU3ltYm9sTWFzayhpbnB1dFN5bWJvbCwgbWFza0V4cHJlc3Npb25bY3Vyc29yXSA/PyAnJykgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFza0V4cHJlc3Npb25bY3Vyc29yICsgMV0gPT09ICcqJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gaW5wdXRTeW1ib2w7XG4gICAgICAgICAgICAgICAgICAgIG11bHRpID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBtYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAxXSA9PT0gJz8nICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU3ltYm9sTWFzayhpbnB1dFN5bWJvbCwgbWFza0V4cHJlc3Npb25bY3Vyc29yICsgMl0gPz8gJycpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbnB1dFN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jaGVja1N5bWJvbE1hc2soaW5wdXRTeW1ib2wsIG1hc2tFeHByZXNzaW9uW2N1cnNvcl0gPz8gJycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXNrRXhwcmVzc2lvbltjdXJzb3JdID09PSAnSCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoaW5wdXRTeW1ib2wpID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoaWZ0U3RlcChtYXNrRXhwcmVzc2lvbiwgY3Vyc29yLCBpbnB1dEFycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxlYWRaZXJvRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcwJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2tFeHByZXNzaW9uW2N1cnNvcl0gPT09ICdoJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQgPT09ICcyJyAmJiBOdW1iZXIoaW5wdXRTeW1ib2wpID4gMykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHJlc3VsdC5zbGljZShjdXJzb3IgLSAyLCBjdXJzb3IpID09PSAnMicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNsaWNlKGN1cnNvciAtIDMsIGN1cnNvcikgPT09ICcyJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2xpY2UoY3Vyc29yIC0gNCwgY3Vyc29yKSA9PT0gJzInIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zbGljZShjdXJzb3IgLSAxLCBjdXJzb3IpID09PSAnMicpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihpbnB1dFN5bWJvbCkgPiAzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciA+IDEwKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXNrRXhwcmVzc2lvbltjdXJzb3JdID09PSAnbScgfHwgbWFza0V4cHJlc3Npb25bY3Vyc29yXSA9PT0gJ3MnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKGlucHV0U3ltYm9sKSA+IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGlmdFN0ZXAobWFza0V4cHJlc3Npb24sIGN1cnNvciwgaW5wdXRBcnJheS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sZWFkWmVyb0RhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheXNDb3VudCA9IDMxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlQ3Vyc29yID0gaW5wdXRWYWx1ZVtjdXJzb3JdIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZUN1cnNvclBsdXNPbmUgPSBpbnB1dFZhbHVlW2N1cnNvciArIDFdIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZUN1cnNvclBsdXNUd28gPSBpbnB1dFZhbHVlW2N1cnNvciArIDJdIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZUN1cnNvck1pbnVzT25lID0gaW5wdXRWYWx1ZVtjdXJzb3IgLSAxXSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0VmFsdWVDdXJzb3JNaW51c1R3byA9IGlucHV0VmFsdWVbY3Vyc29yIC0gMl0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlQ3Vyc29yTWludXNUaHJlZSA9IGlucHV0VmFsdWVbY3Vyc29yIC0gM10gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlU2xpY2VNaW51c1RocmVlTWludXNPbmUgPSBpbnB1dFZhbHVlLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yIC0gMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciAtIDFcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZVNsaWNlTWludXNPbmVQbHVzT25lID0gaW5wdXRWYWx1ZS5zbGljZShjdXJzb3IgLSAxLCBjdXJzb3IgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZVNsaWNlQ3Vyc29yUGx1c1R3byA9IGlucHV0VmFsdWUuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyAyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZVNsaWNlTWludXNUd29DdXJzb3IgPSBpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciAtIDIsIGN1cnNvcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXNrRXhwcmVzc2lvbltjdXJzb3JdID09PSAnZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hc2tTdGFydFdpdGhNb250aCA9IG1hc2tFeHByZXNzaW9uLnNsaWNlKDAsIDIpID09PSAnTTAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRXaXRoTW9udGhJbnB1dDogYm9vbGVhbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0V4cHJlc3Npb24uc2xpY2UoMCwgMikgPT09ICdNMCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKGlucHV0VmFsdWVDdXJzb3JNaW51c1R3byk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKE51bWJlcihpbnB1dFN5bWJvbCkgPiAzICYmIHRoaXMubGVhZFplcm9EYXRlVGltZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIW1hc2tTdGFydFdpdGhNb250aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTnVtYmVyKGlucHV0VmFsdWVTbGljZUN1cnNvclBsdXNUd28pID4gZGF5c0NvdW50IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIoaW5wdXRWYWx1ZVNsaWNlTWludXNPbmVQbHVzT25lKSA+IGRheXNDb3VudCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhpbnB1dFZhbHVlQ3Vyc29yUGx1c09uZSkpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydFdpdGhNb250aElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTnVtYmVyKGlucHV0VmFsdWVTbGljZU1pbnVzT25lUGx1c09uZSkgPiBkYXlzQ291bnQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIXRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoaW5wdXRWYWx1ZUN1cnNvcikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhpbnB1dFZhbHVlQ3Vyc29yUGx1c1R3bykpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhpbnB1dFZhbHVlQ3Vyc29yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE51bWJlcihpbnB1dFZhbHVlU2xpY2VDdXJzb3JQbHVzVHdvKSA+IGRheXNDb3VudCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoaW5wdXRWYWx1ZUN1cnNvclBsdXNPbmUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hpZnRTdGVwKG1hc2tFeHByZXNzaW9uLCBjdXJzb3IsIGlucHV0QXJyYXkubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGVhZFplcm9EYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJzAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobWFza0V4cHJlc3Npb25bY3Vyc29yXSA9PT0gJ00nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aHNDb3VudCA9IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFzayB3aXRob3V0IGRheVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2l0aG91dERheXM6IGJvb2xlYW4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOdW1iZXIoaW5wdXRTeW1ib2wpID4gMiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIoaW5wdXRWYWx1ZVNsaWNlQ3Vyc29yUGx1c1R3bykgPiBtb250aHNDb3VudCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKGlucHV0VmFsdWVDdXJzb3JQbHVzT25lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXk8MTAgJiYgbW9udGg8MTIgZm9yIGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGVjaWFsQ2hhcnQgPSBtYXNrRXhwcmVzc2lvbi5zbGljZShjdXJzb3IgKyAyLCBjdXJzb3IgKyAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheTFtb250aElucHV0OiBib29sZWFuID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlU2xpY2VNaW51c1RocmVlTWludXNPbmUuaW5jbHVkZXMoc3BlY2lhbENoYXJ0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhpbnB1dFZhbHVlQ3Vyc29yTWludXNUd28pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihpbnB1dFZhbHVlU2xpY2VNaW51c09uZVBsdXNPbmUpID4gbW9udGhzQ291bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoaW5wdXRWYWx1ZUN1cnNvcikpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoaW5wdXRWYWx1ZUN1cnNvcikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoaW5wdXRWYWx1ZUN1cnNvck1pbnVzVGhyZWUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIoaW5wdXRWYWx1ZVNsaWNlTWludXNUd29DdXJzb3IpID4gbW9udGhzQ291bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKGlucHV0VmFsdWVDdXJzb3JNaW51c09uZSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoaW5wdXRWYWx1ZUN1cnNvck1pbnVzT25lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgbW9udGg8MTIgJiYgZGF5PDEwIGZvciBpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5Mm1vbnRoSW5wdXQ6IGJvb2xlYW4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihpbnB1dFZhbHVlU2xpY2VNaW51c1RocmVlTWludXNPbmUpIDw9IGRheXNDb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlU2xpY2VNaW51c1RocmVlTWludXNPbmUgYXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoaW5wdXRWYWx1ZUN1cnNvck1pbnVzT25lKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOdW1iZXIoaW5wdXRWYWx1ZVNsaWNlQ3Vyc29yUGx1c1R3bykgPiBtb250aHNDb3VudCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKGlucHV0VmFsdWVDdXJzb3JQbHVzT25lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjdXJzb3IgPT09IDUgJiYgd2l0aG91dCBkYXlzXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkybW9udGhJbnB1dERvdDogYm9vbGVhbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKE51bWJlcihpbnB1dFZhbHVlU2xpY2VDdXJzb3JQbHVzVHdvKSA+IG1vbnRoc0NvdW50ICYmIGN1cnNvciA9PT0gNSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhpbnB1dFZhbHVlQ3Vyc29yUGx1c09uZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yID09PSA1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIC8vIGRheTwxMCAmJiBtb250aDwxMiBmb3IgcGFzdGUgd2hvbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5MW1vbnRoUGFzdGU6IGJvb2xlYW4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihpbnB1dFZhbHVlU2xpY2VNaW51c1RocmVlTWludXNPbmUpID4gZGF5c0NvdW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWVTbGljZU1pbnVzVGhyZWVNaW51c09uZSBhcyBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWVTbGljZU1pbnVzVHdvQ3Vyc29yIGFzIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIoaW5wdXRWYWx1ZVNsaWNlTWludXNUd29DdXJzb3IpID4gbW9udGhzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAxMDxkYXk8MzEgJiYgbW9udGg8MTIgZm9yIHBhc3RlIHdob2xlIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheTJtb250aFBhc3RlOiBib29sZWFuID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIoaW5wdXRWYWx1ZVNsaWNlTWludXNUaHJlZU1pbnVzT25lKSA8PSBkYXlzQ291bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVNsaWNlTWludXNUaHJlZU1pbnVzT25lIGFzIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhpbnB1dFZhbHVlQ3Vyc29yTWludXNPbmUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyKGlucHV0VmFsdWVTbGljZU1pbnVzT25lUGx1c09uZSkgPiBtb250aHNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTnVtYmVyKGlucHV0U3ltYm9sKSA+IDEgJiYgdGhpcy5sZWFkWmVyb0RhdGVUaW1lKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXREYXlzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5MW1vbnRoSW5wdXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXkybW9udGhQYXN0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheTFtb250aFBhc3RlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5Mm1vbnRoSW5wdXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXkybW9udGhJbnB1dERvdFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hpZnRTdGVwKG1hc2tFeHByZXNzaW9uLCBjdXJzb3IsIGlucHV0QXJyYXkubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGVhZFplcm9EYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJzAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gaW5wdXRTeW1ib2w7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcisrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRTeW1ib2wgPT09ICcgJyAmJiBtYXNrRXhwcmVzc2lvbltjdXJzb3JdID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGlucHV0U3ltYm9sO1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3IrKztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5kZXhPZihtYXNrRXhwcmVzc2lvbltjdXJzb3JdID8/ICcnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1hc2tFeHByZXNzaW9uW2N1cnNvcl07XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcisrO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGlmdFN0ZXAobWFza0V4cHJlc3Npb24sIGN1cnNvciwgaW5wdXRBcnJheS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXNrRXhwcmVzc2lvbltjdXJzb3JdID09PSAnOScgJiYgdGhpcy5zaG93TWFza1R5cGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoaWZ0U3RlcChtYXNrRXhwcmVzc2lvbiwgY3Vyc29yLCBpbnB1dEFycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmRleE9mKGlucHV0U3ltYm9sKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybnNbbWFza0V4cHJlc3Npb25bY3Vyc29yXSA/PyAnJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXR0ZXJuc1ttYXNrRXhwcmVzc2lvbltjdXJzb3JdID8/ICcnXT8ub3B0aW9uYWxcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgISFpbnB1dEFycmF5W2N1cnNvcl0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uICE9PSAnMDk5LjA5OS4wOTkuMDk5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbWFza0V4cHJlc3Npb24gIT09ICcwMDAuMDAwLjAwMC0wMCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uICE9PSAnMDAuMDAwLjAwMC8wMDAwLTAwJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIW1hc2tFeHByZXNzaW9uLm1hdGNoKC9eOStcXC4wKyQvKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbnB1dEFycmF5W2N1cnNvcl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yKys7XG4gICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uW2N1cnNvciArIDFdID09PSAnKicgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmluZFNwZWNpYWxDaGFyKHRoaXMubWFza0V4cHJlc3Npb25bY3Vyc29yICsgMl0gPz8gJycpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmRTcGVjaWFsQ2hhcihpbnB1dFN5bWJvbCkgPT09IHRoaXMubWFza0V4cHJlc3Npb25bY3Vyc29yICsgMl0gJiZcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDM7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbnB1dFN5bWJvbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uW2N1cnNvciArIDFdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmluZFNwZWNpYWxDaGFyKHRoaXMubWFza0V4cHJlc3Npb25bY3Vyc29yICsgMl0gPz8gJycpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmRTcGVjaWFsQ2hhcihpbnB1dFN5bWJvbCkgPT09IHRoaXMubWFza0V4cHJlc3Npb25bY3Vyc29yICsgMl0gJiZcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDM7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbnB1dFN5bWJvbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNYXNrVHlwZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmRleE9mKGlucHV0U3ltYm9sKSA8IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRTeW1ib2wgIT09IHRoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc3RlcEJhY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXN1bHQubGVuZ3RoICsgMSA9PT0gbWFza0V4cHJlc3Npb24ubGVuZ3RoICYmXG4gICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluZGV4T2YobWFza0V4cHJlc3Npb25bbWFza0V4cHJlc3Npb24ubGVuZ3RoIC0gMV0gPz8gJycpICE9PSAtMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBtYXNrRXhwcmVzc2lvblttYXNrRXhwcmVzc2lvbi5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3UG9zaXRpb246IG51bWJlciA9IHBvc2l0aW9uICsgMTtcblxuICAgICAgICB3aGlsZSAodGhpcy5fc2hpZnQuaGFzKG5ld1Bvc2l0aW9uKSkge1xuICAgICAgICAgICAgc2hpZnQrKztcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uKys7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYWN0dWFsU2hpZnQ6IG51bWJlciA9XG4gICAgICAgICAgICBqdXN0UGFzdGVkICYmICFtYXNrRXhwcmVzc2lvbi5zdGFydHNXaXRoKCdzZXBhcmF0b3InKVxuICAgICAgICAgICAgICAgID8gY3Vyc29yXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9zaGlmdC5oYXMocG9zaXRpb24pXG4gICAgICAgICAgICAgICAgPyBzaGlmdFxuICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgaWYgKHN0ZXBCYWNrKSB7XG4gICAgICAgICAgICBhY3R1YWxTaGlmdC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgY2IoYWN0dWFsU2hpZnQsIGJhY2tzcGFjZVNoaWZ0KTtcbiAgICAgICAgaWYgKHNoaWZ0IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5fc2hpZnQuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgb25seVNwZWNpYWwgPSBmYWxzZTtcbiAgICAgICAgaWYgKGJhY2tzcGFjZWQpIHtcbiAgICAgICAgICAgIG9ubHlTcGVjaWFsID0gaW5wdXRBcnJheS5ldmVyeSgoY2hhcikgPT4gdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhjaGFyKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlcyA9IGAke3RoaXMucHJlZml4fSR7b25seVNwZWNpYWwgPyAnJyA6IHJlc3VsdH0ke3RoaXMuc3VmZml4fWA7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXMgPSBgJHt0aGlzLnByZWZpeH0ke3Jlc3VsdH1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHVibGljIF9maW5kU3BlY2lhbENoYXIoaW5wdXRTeW1ib2w6IHN0cmluZyk6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmZpbmQoKHZhbDogc3RyaW5nKSA9PiB2YWwgPT09IGlucHV0U3ltYm9sKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2NoZWNrU3ltYm9sTWFzayhpbnB1dFN5bWJvbDogc3RyaW5nLCBtYXNrU3ltYm9sOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IHRoaXMuY3VzdG9tUGF0dGVybiA/IHRoaXMuY3VzdG9tUGF0dGVybiA6IHRoaXMucGF0dGVybnM7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodGhpcy5wYXR0ZXJuc1ttYXNrU3ltYm9sXT8ucGF0dGVybiAmJlxuICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybnNbbWFza1N5bWJvbF0/LnBhdHRlcm4udGVzdChpbnB1dFN5bWJvbCkpID8/XG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Zvcm1hdFdpdGhTZXBhcmF0b3JzID0gKFxuICAgICAgICBzdHI6IHN0cmluZyxcbiAgICAgICAgdGhvdXNhbmRTZXBhcmF0b3JDaGFyOiBzdHJpbmcsXG4gICAgICAgIGRlY2ltYWxDaGFyczogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgICAgIHByZWNpc2lvbjogbnVtYmVyXG4gICAgKSA9PiB7XG4gICAgICAgIGxldCB4OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBsZXQgZGVjaW1hbENoYXIgPSAnJztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVjaW1hbENoYXJzKSkge1xuICAgICAgICAgICAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICBkZWNpbWFsQ2hhcnMubWFwKCh2KSA9PiAoJ1tcXFxcXiQufD8qKygpJy5pbmRleE9mKHYpID49IDAgPyBgXFxcXCR7dn1gIDogdikpLmpvaW4oJ3wnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHggPSBzdHIuc3BsaXQocmVnRXhwKTtcbiAgICAgICAgICAgIGRlY2ltYWxDaGFyID0gc3RyLm1hdGNoKHJlZ0V4cCk/LlswXSA/PyAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHggPSBzdHIuc3BsaXQoZGVjaW1hbENoYXJzKTtcbiAgICAgICAgICAgIGRlY2ltYWxDaGFyID0gZGVjaW1hbENoYXJzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzOiBzdHJpbmcgPSB4Lmxlbmd0aCA+IDEgPyBgJHtkZWNpbWFsQ2hhcn0ke3hbMV19YCA6ICcnO1xuICAgICAgICBsZXQgcmVzOiBzdHJpbmcgPSB4WzBdID8/ICcnO1xuICAgICAgICBjb25zdCBzZXBhcmF0b3JMaW1pdDogc3RyaW5nID0gdGhpcy5zZXBhcmF0b3JMaW1pdC5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBpZiAoc2VwYXJhdG9yTGltaXQgJiYgK3NlcGFyYXRvckxpbWl0KSB7XG4gICAgICAgICAgICBpZiAocmVzWzBdID09PSAnLScpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBgLSR7cmVzLnNsaWNlKDEsIHJlcy5sZW5ndGgpLnNsaWNlKDAsIHNlcGFyYXRvckxpbWl0Lmxlbmd0aCl9YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzID0gcmVzLnNsaWNlKDAsIHNlcGFyYXRvckxpbWl0Lmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcmd4ID0gLyhcXGQrKShcXGR7M30pLztcblxuICAgICAgICB3aGlsZSAodGhvdXNhbmRTZXBhcmF0b3JDaGFyICYmIHJneC50ZXN0KHJlcykpIHtcbiAgICAgICAgICAgIHJlcyA9IHJlcy5yZXBsYWNlKHJneCwgJyQxJyArIHRob3VzYW5kU2VwYXJhdG9yQ2hhciArICckMicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzICsgZGVjaW1hbHM7XG4gICAgICAgIH0gZWxzZSBpZiAocHJlY2lzaW9uID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMgKyBkZWNpbWFscy5zdWJzdHJpbmcoMCwgcHJlY2lzaW9uICsgMSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcGVyY2VudGFnZSA9IChzdHI6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gTnVtYmVyKHN0cikgPj0gMCAmJiBOdW1iZXIoc3RyKSA8PSAxMDA7XG4gICAgfTtcblxuICAgIHByaXZhdGUgZ2V0UHJlY2lzaW9uID0gKG1hc2tFeHByZXNzaW9uOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xuICAgICAgICBjb25zdCB4OiBzdHJpbmdbXSA9IG1hc2tFeHByZXNzaW9uLnNwbGl0KCcuJyk7XG4gICAgICAgIGlmICh4Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoeFt4Lmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBjaGVja0FuZFJlbW92ZVN1ZmZpeCA9IChpbnB1dFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdWZmaXg/Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJzdHIgPSB0aGlzLnN1ZmZpeC5zdWJzdHJpbmcoaSwgdGhpcy5zdWZmaXg/Lmxlbmd0aCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZS5pbmNsdWRlcyhzdWJzdHIpICYmXG4gICAgICAgICAgICAgICAgaSAhPT0gdGhpcy5zdWZmaXg/Lmxlbmd0aCAtIDEgJiZcbiAgICAgICAgICAgICAgICAoaSAtIDEgPCAwIHx8XG4gICAgICAgICAgICAgICAgICAgICFpbnB1dFZhbHVlLmluY2x1ZGVzKHRoaXMuc3VmZml4LnN1YnN0cmluZyhpIC0gMSwgdGhpcy5zdWZmaXg/Lmxlbmd0aCkpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0VmFsdWUucmVwbGFjZShzdWJzdHIsICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXRWYWx1ZTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBjaGVja0lucHV0UHJlY2lzaW9uID0gKFxuICAgICAgICBpbnB1dFZhbHVlOiBzdHJpbmcsXG4gICAgICAgIHByZWNpc2lvbjogbnVtYmVyLFxuICAgICAgICBkZWNpbWFsTWFya2VyOiBJQ29uZmlnWydkZWNpbWFsTWFya2VyJ11cbiAgICApOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAocHJlY2lzaW9uIDwgSW5maW5pdHkpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gbmVlZCB0aGluayBhYm91dCBkZWNpbWFsTWFya2VyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWNpbWFsTWFya2VyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IGRlY2ltYWxNYXJrZXIuZmluZCgoZG0pID0+IGRtICE9PSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yKTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICBkZWNpbWFsTWFya2VyID0gbWFya2VyID8gbWFya2VyIDogZGVjaW1hbE1hcmtlclswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZWNpc2lvblJlZ0V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFyVG9SZWdFeHBFeHByZXNzaW9uKGRlY2ltYWxNYXJrZXIpICsgYFxcXFxkeyR7cHJlY2lzaW9ufX0uKiRgXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBwcmVjaXNpb25NYXRjaDogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGwgPSBpbnB1dFZhbHVlLm1hdGNoKHByZWNpc2lvblJlZ0V4KTtcbiAgICAgICAgICAgIGNvbnN0IHByZWNpc2lvbk1hdGNoTGVuZ3RoOiBudW1iZXIgPSAocHJlY2lzaW9uTWF0Y2ggJiYgcHJlY2lzaW9uTWF0Y2hbMF0/Lmxlbmd0aCkgPz8gMDtcbiAgICAgICAgICAgIGlmIChwcmVjaXNpb25NYXRjaExlbmd0aCAtIDEgPiBwcmVjaXNpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gcHJlY2lzaW9uTWF0Y2hMZW5ndGggLSAxIC0gcHJlY2lzaW9uO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUgPSBpbnB1dFZhbHVlLnN1YnN0cmluZygwLCBpbnB1dFZhbHVlLmxlbmd0aCAtIGRpZmYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9PT0gMCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBhcmVPckluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlW2lucHV0VmFsdWUubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWxNYXJrZXIsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gaW5wdXRWYWx1ZS5zdWJzdHJpbmcoMCwgaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXRWYWx1ZTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfc3RyaXBUb0RlY2ltYWwoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3RyXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAuZmlsdGVyKChpOiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNEZWNpbWFsTWFya2VyID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuZGVjaW1hbE1hcmtlciA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaSA9PT0gdGhpcy5kZWNpbWFsTWFya2VyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IC8vIFRPRE8gKGluZXBpcGVua28pIHVzZSB1dGlsaXR5IHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsTWFya2VyLmluY2x1ZGVzKGkgYXMgJywnIHwgJy4nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBpLm1hdGNoKCdeLT9cXFxcZCcpIHx8XG4gICAgICAgICAgICAgICAgICAgIGkgPT09IHRoaXMudGhvdXNhbmRTZXBhcmF0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgaXNEZWNpbWFsTWFya2VyIHx8XG4gICAgICAgICAgICAgICAgICAgIChpID09PSAnLScgJiYgaWR4ID09PSAwICYmIHRoaXMuYWxsb3dOZWdhdGl2ZU51bWJlcnMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hhclRvUmVnRXhwRXhwcmVzc2lvbihjaGFyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICAvLyBpZiAoQXJyYXkuaXNBcnJheShjaGFyKSkge1xuICAgICAgICAvLyBcdHJldHVybiBjaGFyLm1hcCgodikgPT4gKCdbXFxcXF4kLnw/KisoKScuaW5kZXhPZih2KSA+PSAwID8gYFxcXFwke3Z9YCA6IHYpKS5qb2luKCd8Jyk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKGNoYXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXJzVG9Fc2NhcGUgPSAnW1xcXFxeJC58PyorKCknO1xuICAgICAgICAgICAgcmV0dXJuIGNoYXIgPT09ICcgJyA/ICdcXFxccycgOiBjaGFyc1RvRXNjYXBlLmluZGV4T2YoY2hhcikgPj0gMCA/IGBcXFxcJHtjaGFyfWAgOiBjaGFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGFyO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NoaWZ0U3RlcChtYXNrRXhwcmVzc2lvbjogc3RyaW5nLCBjdXJzb3I6IG51bWJlciwgaW5wdXRMZW5ndGg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBzaGlmdFN0ZXA6IG51bWJlciA9IC9bKj9dL2cudGVzdChtYXNrRXhwcmVzc2lvbi5zbGljZSgwLCBjdXJzb3IpKVxuICAgICAgICAgICAgPyBpbnB1dExlbmd0aFxuICAgICAgICAgICAgOiBjdXJzb3I7XG4gICAgICAgIHRoaXMuX3NoaWZ0LmFkZChzaGlmdFN0ZXAgKyB0aGlzLnByZWZpeC5sZW5ndGggfHwgMCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9jb21wYXJlT3JJbmNsdWRlczxUPih2YWx1ZTogVCwgY29tcGFyZWRWYWx1ZTogVCB8IFRbXSwgZXhjbHVkZWRWYWx1ZTogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjb21wYXJlZFZhbHVlKVxuICAgICAgICAgICAgPyBjb21wYXJlZFZhbHVlLmZpbHRlcigodikgPT4gdiAhPT0gZXhjbHVkZWRWYWx1ZSkuaW5jbHVkZXModmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlID09PSBjb21wYXJlZFZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ZhbGlkSVAodmFsdWVzSVA6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKFxuICAgICAgICAgICAgdmFsdWVzSVAubGVuZ3RoID09PSA0ICYmXG4gICAgICAgICAgICAhdmFsdWVzSVAuc29tZSgodmFsdWU6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNJUC5sZW5ndGggIT09IGluZGV4ICsgMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09ICcnIHx8IE51bWJlcih2YWx1ZSkgPiAyNTU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gJycgfHwgTnVtYmVyKHZhbHVlLnN1YnN0cmluZygwLCAzKSkgPiAyNTU7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==