bit-ng-library 16.0.13 → 16.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,7 +26,7 @@ To get more help on the Angular CLI use `ng help` or go check out the [Angular C
26
26
 
27
27
  ## changelog
28
28
 
29
- ## [16.0.13] - 2024-02-27
29
+ ## [16.0.13/14] - 2024-02-27
30
30
 
31
31
  Corregida la validación de CIF para que funcione con todos los valores reales.
32
32
 
@@ -485,49 +485,47 @@ export class CustomValidators {
485
485
  static isValidDNI(value) {
486
486
  return true; // ¿deberíamos validar algo? Con letra ya tenemos el NIF
487
487
  }
488
- // https://github.com/jquery-validation/jquery-validation/blob/master/src/additional/cifES.js
488
+ // Referencia principal: https://gist.github.com/carlos-mg89/4aaafa310c9e4b91f5fb890540f38cae
489
489
  static isValidCIF(value) {
490
- let cifRegEx = new RegExp(/^([ABCDEFGHJKLMNPQRSUVW])(\d{7})([0-9A-J])$/gi);
491
- let letter = value.substring(0, 1), // [ T ]
492
- number = value.substring(1, 8), // [ P ][ P ][ N ][ N ][ N ][ N ][ N ]
493
- control = value.substring(8, 9), // [ C ]
494
- all_sum = 0, even_sum = 0, odd_sum = 0, i, n, control_digit, control_letter;
495
- function isOdd(n) {
496
- return n % 2 === 0;
497
- }
498
- // Quick format test
499
- if (value.length !== 9 || !cifRegEx.test(value)) {
490
+ const CIF_REGEX = /^([ABCDEFGHJKLMNPQRSUVW])(\d{7})([0-9A-J])$/;
491
+ if (!value || !value.match(CIF_REGEX))
500
492
  return false;
501
- }
502
- for (i = 0; i < number.length; i++) {
493
+ value = value.toUpperCase();
494
+ var match = value.match(CIF_REGEX);
495
+ const letter = match[1];
496
+ const number = match[2];
497
+ const control = match[3];
498
+ var even_sum = 0;
499
+ var odd_sum = 0;
500
+ var n;
501
+ for (var i = 0; i < number.length; i++) {
503
502
  n = parseInt(number[i], 10);
504
- // Odd positions
505
- if (isOdd(i)) {
506
- // Odd positions are multiplied first.
503
+ // Odd positions (Even index equals to odd position. i=0 equals first position)
504
+ if (i % 2 === 0) {
505
+ // Odd positions are multiplied first
507
506
  n *= 2;
508
507
  // If the multiplication is bigger than 10 we need to adjust
509
508
  odd_sum += n < 10 ? n : n - 9;
510
- // Even positions
511
- // Just sum them
509
+ // Even positions, just sum them
512
510
  }
513
511
  else {
514
512
  even_sum += n;
515
513
  }
516
514
  }
517
- all_sum = even_sum + odd_sum;
518
- control_digit = (10 - Number(all_sum.toString().substring(-1))).toString();
519
- control_digit = parseInt(control_digit, 10) > 9 ? "0" : control_digit;
520
- control_letter = "JABCDEFGHI".substring(control_digit, 1).toString();
515
+ const control_digit = (10 - Number((even_sum + odd_sum).toString().substr(-1))).toString().substr(-1);
516
+ const control_letter = "JABCDEFGHI".substr(Number(control_digit), 1);
521
517
  // Control must be a digit
522
518
  if (letter.match(/[ABEH]/)) {
523
519
  return control === control_digit;
524
- // Control must be a letter
525
520
  }
526
- else if (letter.match(/[KPQS]/)) {
521
+ // Control must be a letter ( referencia: https://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal )
522
+ else if (letter.match(/[PQRSWN]/)) {
527
523
  return control === control_letter;
528
524
  }
529
525
  // Can be either
530
- return control === control_digit || control === control_letter;
526
+ else {
527
+ return control === control_digit || control === control_letter;
528
+ }
531
529
  }
532
530
  // https://github.com/jquery-validation/jquery-validation/blob/master/src/additional/nifES.js
533
531
  static isValidNIF(value) {
@@ -629,4 +627,4 @@ export class CustomValidators {
629
627
  return result;
630
628
  }
631
629
  }
632
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXZhbGlkYXRvcnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JpdC1uZy1saWJyYXJ5L3NyYy9saWIvc2hhcmVkbGlicmFyeS9zZXJ2aWNlcy9jdXN0b20tdmFsaWRhdG9ycy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0QsTUFBTSxPQUFPLGdCQUFnQjthQUNwQixXQUFNLEdBQUc7UUFDZCxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBQ3hELFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQztRQUNsRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDO1FBQzlELG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO1FBQzlFLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixDQUFDO1FBQ3BGLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7UUFDaEUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO1FBQ3RFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUM7UUFDOUQsYUFBYSxFQUFFLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztRQUNsRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FB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Q0FBQyxDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Hcm91cCwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUFycmF5LCBWYWxpZGF0b3JGbiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBHZW5lcmFsVXRpbHMgfSBmcm9tIFwiLi9nZW5lcmFsLXV0aWxzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlZE1lc3NhZ2UsIEVycm9yVmFsaWRhdGVGb3JtIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbW9kZWxzL3R5cGVzXCI7XHJcbmltcG9ydCB7IGJ1aWxkVHJhbnNsYXRlZE1lc3NhZ2UgfSBmcm9tIFwiLi90cmFuc2xhdGUuc2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbVZhbGlkYXRvcnMge1xyXG4gIHN0YXRpYyBjb25maWcgPSB7XHJcbiAgICByZXF1aXJlZDogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcInJlcXVpcmVkXCIpLFxyXG4gICAgaW52YWxpZERhdGU6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJEYXRhIGluY29ycmVjdGFcIiksXHJcbiAgICBpbnZhbGlkVGltZTogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRUaW1lXCIpLFxyXG4gICAgaW52YWxpZEVtYWlsQWRkcmVzczogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRFbWFpbEFkZHJlc3NcIiksXHJcbiAgICBpbnZhbGlkRW1haWxDU1ZBZGRyZXNzOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZEVtYWlsQ1NWQWRkcmVzc1wiKSxcclxuICAgIGludmFsaWRMb2dpbjogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRMb2dpblwiKSxcclxuICAgIGludmFsaWRFdGlxdWV0YTogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRFdGlxdWV0YVwiKSxcclxuICAgIGludmFsaWROYW1lOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZE5hbWVcIiksXHJcbiAgICBpbnZhbGlkQ29kaWdvOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZENvZGlnb1wiKSxcclxuICAgIGludmFsaWRBbGZhbnVtZXJpY286IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkQWxmYW51bWVyaWNvXCIpLFxyXG4gICAgaW52YWxpZENhbnRpZGFkOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZENhbnRpZGFkXCIpLFxyXG4gICAgaW52YWxpZEVudGVyb1Bvc2l0aXZvOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZEVudGVyb1Bvc2l0aXZvXCIpLFxyXG4gICAgaW52YWxpZEVudGVyb1Bvc2l0aXZvSW5jbHV5ZUNlcm86IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkRW50ZXJvUG9zaXRpdm9JbmNsdXllQ2Vyb1wiKSxcclxuICAgIGludmFsaWRDYW50aWRhZERlY2ltYWw6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkQ2FudGlkYWREZWNpbWFsXCIpLFxyXG4gICAgaW52YWxpZE51bWVyb1Bvc2l0aXZvOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZE51bWVyb1Bvc2l0aXZvXCIpLFxyXG4gICAgaW52YWxpZENvZGlnb1Bvc3RhbDogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRDb2RpZ29Qb3N0YWxcIiksXHJcbiAgICBpbnZhbGlkVGVsZWZvbm86IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkVGVsZWZvbm9cIiksXHJcbiAgICBpbnZhbGlkVGVsZWZvbm9DU1Y6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkVGVsZWZvbm9DU1ZcIiksXHJcbiAgICBpbnZhbGlkUG9yY2VudGFqZTogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRQb3JjZW50YWplXCIpLFxyXG4gICAgaW52YWxpZFVybDogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRVcmxcIiksXHJcbiAgICBpbnZhbGlkUGF0aDogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRQYXRoXCIpLFxyXG4gICAgaW52YWxpZE5JRjogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWROSUZcIiksXHJcbiAgICBpbnZhbGlkTklFOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZE5JRVwiKSxcclxuICAgIGludmFsaWRDSUY6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkQ0lGXCIpLFxyXG4gICAgaW52YWxpZE5JRk5JRTogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWROSUZOSUVcIiksXHJcbiAgICBpbnZhbGlkQW55bzogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRBbnlvXCIpLFxyXG4gICAgbWF4bGVuZ3RoOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwibWF4bGVuZ3RoXCIpLFxyXG4gICAgaW52YWxpZE51bWVyb0RvY3VtZW50b1RpcG9Eb2N1bWVudG86IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkTnVtZXJvRG9jdW1lbnRvVGlwb0RvY3VtZW50b1wiKSxcclxuICAgIGRpcmVjY2lvbkluY29tcGxldGE6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJkaXJlY2Npb25JbmNvbXBsZXRhXCIpLFxyXG4gICAgcmVxdWlyZWRFeHRyYURhdGE6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJyZXF1aXJlZEV4dHJhRGF0YVwiKSxcclxuICAgIGludmFsaWRSYW5nb0ZlY2hhRmluUG9zdGVyaW9ySW5pY2lvOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZFJhbmdvRmVjaGFGaW5Qb3N0ZXJpb3JJbmljaW9cIiksXHJcbiAgICBpbnZhbGlkUmFuZ29Ib3JhRmluUG9zdGVyaW9ySW5pY2lvOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZFJhbmdvSG9yYUZpblBvc3RlcmlvckluaWNpb1wiKSxcclxuICAgIGludmFsaWREYXRlVGltZU5vdEFmdGVyQ3VycmVudERhdGU6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkRGF0ZVRpbWVOb3RBZnRlckN1cnJlbnREYXRlXCIpXHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIEN1c3RvbVZhbGlkYXRvcnNNYXAgPSB7XHJcbiAgICBjb2RpZ29OdW1lcmljbzogQ3VzdG9tVmFsaWRhdG9ycy5jb2RpZ29WYWxpZGF0b3IsXHJcbiAgICBjb2RpZ29BbGZhbnVtZXJpY286IEN1c3RvbVZhbGlkYXRvcnMuYWxmYW51bWVyaWNvVmFsaWRhdG9yLFxyXG4gICAgbm9tYnJlOiBDdXN0b21WYWxpZGF0b3JzLm5vbWJyZVZhbGlkYXRvcixcclxuICAgIG51bWVybzogQ3VzdG9tVmFsaWRhdG9ycy5jYW50aWRhZERlY2ltYWxWYWxpZGF0b3IsXHJcbiAgICBlbnRlcm86IEN1c3RvbVZhbGlkYXRvcnMuY2FudGlkYWRWYWxpZGF0b3IsXHJcbiAgICBudW1lcm9Qb3NpdGl2bzogQ3VzdG9tVmFsaWRhdG9ycy5udW1lcm9Qb3NpdGl2b1ZhbGlkYXRvcixcclxuICAgIGVudGVyb1Bvc2l0aXZvOiBDdXN0b21WYWxpZGF0b3JzLmVudGVyb1Bvc2l0aXZvVmFsaWRhdG9yLFxyXG4gICAgbmlmOiBDdXN0b21WYWxpZGF0b3JzLm5pZlZhbGlkYXRvcixcclxuICAgIG5pZTogQ3VzdG9tVmFsaWRhdG9ycy5uaWVWYWxpZGF0b3IsXHJcbiAgICBjaWY6IEN1c3RvbVZhbGlkYXRvcnMuY2lmVmFsaWRhdG9yLFxyXG4gICAgbmlmbmllOiBDdXN0b21WYWxpZGF0b3JzLm5pZk5pZVZhbGlkYXRvcixcclxuICAgIGNwOiBDdXN0b21WYWxpZGF0b3JzLmNvZGlnb1Bvc3RhbFZhbGlkYXRvcixcclxuICAgIHRlbGVmb25vOiBDdXN0b21WYWxpZGF0b3JzLnRlbGVmb25vVmFsaWRhdG9yLFxyXG4gICAgdGVsZWZvbm9DU1Y6IEN1c3RvbVZhbGlkYXRvcnMudGVsZWZvbm9DU1ZWYWxpZGF0b3IsXHJcbiAgICBlbWFpbENTVjogQ3VzdG9tVmFsaWRhdG9ycy5lbWFpbENTVlZhbGlkYXRvcixcclxuICAgIGVtYWlsOiBDdXN0b21WYWxpZGF0b3JzLmVtYWlsVmFsaWRhdG9yLFxyXG4gICAgZmVjaGE6IEN1c3RvbVZhbGlkYXRvcnMuZGF0YVZhbGlkYXRvcixcclxuICAgIGFueW86IEN1c3RvbVZhbGlkYXRvcnMuYW55b1ZhbGlkYXRvclxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBidWlsZEVycm9yTWVzc2FnZShjb2RlOiBzdHJpbmcsIHBhcmFtcz86IHt9KTogVHJhbnNsYXRlZE1lc3NhZ2Uge1xyXG4gICAgcmV0dXJuIGJ1aWxkVHJhbnNsYXRlZE1lc3NhZ2UoXCJmb3JtLm1lc3NhZ2VzLlwiICsgY29kZSwgXCJiaXRuZ2xpYnJhcnlcIiwgcGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRWYWxpZGF0b3JFcnJvck1lc3NhZ2UoY29kZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gQ3VzdG9tVmFsaWRhdG9ycy5jb25maWdbY29kZV07XHJcbiAgfVxyXG5cclxuICAvLyBtw6l0b2RvIHBhcmEgdW5pciB2YWxpZGFkb3Jlc1xyXG4gIHN0YXRpYyBjb21wb3NlKHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10pOiBWYWxpZGF0b3JGbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZnVuY3Rpb24gKGc6IEZvcm1Hcm91cCkge1xyXG4gICAgICAvLyBlamVjdXRhbW9zIGNhZGEgdW5vIGRlIGxvcyB2YWxpZGFkb3JlcyB5IHVuaW1vcyBzdXMgcmVzdWx0YWRvc1xyXG4gICAgICBsZXQgaW5uZXJSZXN1bHQgPSB2YWxpZGF0b3JzLm1hcCgodmFsaWRhdG9yKSA9PiB2YWxpZGF0b3IoZykpLnJlZHVjZSgoYWNjLCByZXN1bHQgPSB7fSkgPT4gT2JqZWN0LmFzc2lnbihhY2MsIHJlc3VsdCksIHt9KTtcclxuICAgICAgcmV0dXJuIGlubmVyUmVzdWx0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVxdWlyZWQoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHtyZXF1aXJlZDogdHJ1ZX07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGVzdGUgdmFsaWRhZG9yIGVuIHJlYWxpZGFkIG5vIGVzdMOhIGhhY2llbmRvIG5hZGEgcG9ycXVlIGJpdC1pbnB1dCwgcGFyYSBmZWNoYXMgbm8gdsOhbGlkYXMsIHN1c3RpdHV5ZVxyXG4gIC8vIGNvbnRyb2wudmFsdWUgcG9yIHVuIG51bGwgeSBlbCB2YWxpZGFkb3IgcGFzYSBzaWVtcHJlXHJcbiAgc3RhdGljIGRhdGFWYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICAvLyBmb3JtYXRvIGRkL01NL3l5eXlcclxuICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlLm1hdGNoKC9eKDBbMS05XXwxXFxkfDJcXGR8M1swMV0pXFwvKDBbMS05XXwxWzAtMl0pXFwvKDE5fDIwKVxcZHsyfSQvKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7aW52YWxpZERhdGU6IHRydWV9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRpbWVWYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICAvLyBmb3JtYXRvIGhoOm1tXHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgKGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS5tYXRjaCgvXlswLTldWzAtOV06WzAtOV1bMC05XSQvKSkpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge2ludmFsaWRUaW1lOiB0cnVlfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbWFpbFZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIC8vIFJGQyAyODIyIGNvbXBsaWFudCByZWdleFxyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUubWF0Y2goL1xcUytAKFstXFx3XStcXC4pK1xcdysvZykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge2ludmFsaWRFbWFpbEFkZHJlc3M6IHRydWV9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGVtYWlsQ1NWVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgLy8gUkZDIDI4MjIgY29tcGxpYW50IHJlZ2V4XHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZS5tYXRjaCgvXigoICkqW1xcd1xcLl0rQChbLVxcd10rXFwuKStcXHcrKCApKikoLCggKSpbXFx3XFwuXStAKFstXFx3XStcXC4pK1xcdysoICkqKSokL2cpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtpbnZhbGlkRW1haWxDU1ZBZGRyZXNzOiB0cnVlfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBsb2dpblZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlLm1hdGNoKC9eW2EtejAtOV8tXXszLDE1fS8pKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtpbnZhbGlkTG9naW46IHRydWV9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV0aXF1ZXRhVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUubWF0Y2goL15bYS16QS1aMC05Xy1dKy8pKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtpbnZhbGlkRXRpcXVldGE6IHRydWV9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIG5vbWJyZVZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGlmIChcclxuICAgICAgIWNvbnRyb2wudmFsdWUgfHxcclxuICAgICAgL14oW0EtWmEtejAtOV9cXC5cXCxcXCdcXFwiXFwoXFwpXFw7XFw6XFwtXFwvXFxAXFw/XFwlXFw/XFzCv1xcJlxcK1xcLVxcKlxcL1xcIFxcblxccsK6wqonwrTigJnCt8Ovw7w/YMOhw6nDrcOzw7rDgcOJw43Dk8Oaw6DDqMOsw7LDucOAw4jDjMOSw5nDhMOLw4/DlsOcw6TDq8Ovw7bDvMOxw5HDp8OHwqEhI10pKyQvLnRlc3QoY29udHJvbC52YWx1ZSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7aW52YWxpZE5hbWU6IHRydWV9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNvZGlnb1ZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlLm1hdGNoKC9eKFswLTldKSskLykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge2ludmFsaWRDb2RpZ286IHRydWV9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFsZmFudW1lcmljb1ZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlLm1hdGNoKC9eKFtBLVowLTlfXFwuXFwtw5HDh10pKyQvKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7aW52YWxpZEFsZmFudW1lcmljbzogdHJ1ZX07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2FudGlkYWRWYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICAvLyB2YWx1ZSBpcyBlaXRoZXIgZW1wdHksIG9yIGEgbnVtYmVyIHdpdGhvdXQgZGVjaW1hbHNcclxuICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlID09PSBcIlwiKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgbGV0IG51bSA9IE51bWJlcihjb250cm9sLnZhbHVlKTtcclxuICAgIGlmICghaXNOYU4obnVtKSAmJiBudW0gJSAxID09IDApIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge2ludmFsaWRDYW50aWRhZDogdHJ1ZX07XHJcbiAgfVxyXG5cclxuICAvKiBWYWxpZGEgbsO6bWVyb3MgZW50ZXJvcyAoc2luIGRlY2ltYWxlcykgcG9zaXRpdm9zICg+PTApICovXHJcbiAgc3RhdGljIGVudGVyb1Bvc2l0aXZvVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgLy8gdmFsdWUgaXMgZWl0aGVyIGVtcHR5LCBvciBhIG51bWJlciB3aXRob3V0IGRlY2ltYWxzXHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZSA9PT0gXCJcIikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGxldCBudW0gPSBOdW1iZXIoY29udHJvbC52YWx1ZSk7XHJcbiAgICBpZiAoIWlzTmFOKG51bSkgJiYgbnVtICUgMSA9PSAwICYmIG51bSA+PSAwKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtpbnZhbGlkRW50ZXJvUG9zaXRpdm86IHRydWV9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGVudGVyb1Bvc2l0aXZvVmFsaWRhdG9ySW5jbHV5ZUNlcm9WYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICAvLyB2YWx1ZSBpcyBlaXRoZXIgZW1wdHksIG9yIGEgcG9zaXRpdmUgbnVtYmVyIChpbmNsdWRpbmcgMCkgd2l0aG91dCBkZWNpbWFsc1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUgPT09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBsZXQgbnVtID0gTnVtYmVyKGNvbnRyb2wudmFsdWUpO1xyXG4gICAgaWYgKCFpc05hTihudW0pICYmIG51bSAlIDEgPT0gMCAmJiBudW0gPj0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB7aW52YWxpZEVudGVyb1Bvc2l0aXZvSW5jbHV5ZUNlcm86IHRydWV9O1xyXG4gIH1cclxuXHJcbiAgLyogVmFsaWRhIG7Dum1lcm9zIGVudGVyb3MgKGNvbiBkZWNpbWFsZXMpICovXHJcbiAgc3RhdGljIGNhbnRpZGFkRGVjaW1hbFZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIC8vIHZhbHVlIGlzIGVpdGhlciBlbXB0eSwgb3IgYSBudW1iZXIgKGluY2x1ZGluZyBkZWNpbWFscylcclxuICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlID09PSBcIlwiIHx8ICFpc05hTihOdW1iZXIoY29udHJvbC52YWx1ZSkpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtpbnZhbGlkQ2FudGlkYWREZWNpbWFsOiB0cnVlfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIFZhbGlkYSBuw7ptZXJvcyBlbnRlcm9zIChjb24gZGVjaW1hbGVzKSBwb3NpdGl2b3MgKD49MCkgKi9cclxuICBzdGF0aWMgbnVtZXJvUG9zaXRpdm9WYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZSA9PT0gXCJcIiB8fCAoIWlzTmFOKE51bWJlcihjb250cm9sLnZhbHVlKSkgJiYgTnVtYmVyKGNvbnRyb2wudmFsdWUpID49IDApKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtpbnZhbGlkTnVtZXJvUG9zaXRpdm86IHRydWV9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogVmFsaWRhIGPDs2RpZ28gcG9zdGFsIChudW1lcm8gZGUgNSBkw61naXRvcykgKi9cclxuICBzdGF0aWMgY29kaWdvUG9zdGFsVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IChjb250cm9sLnZhbHVlLm1hdGNoKC9eKFswLTldKSskLykgJiYgY29udHJvbC52YWx1ZS5sZW5ndGggPT0gNSkpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge2ludmFsaWRDb2RpZ29Qb3N0YWw6IHRydWV9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogVmFsaWRhIHRlbGVmb25vIChudW1lcm8gZGUgOSBkw61naXRvcykgKi9cclxuICBzdGF0aWMgdGVsZWZvbm9WYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZS5tYXRjaCgvXlswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XSQvKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7aW52YWxpZFRlbGVmb25vOiB0cnVlfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIFZhbGlkYSB0ZWxlZm9ubyAobnVtZXJvIGRlIDkgZMOtZ2l0b3MpICovXHJcbiAgc3RhdGljIHRlbGVmb25vQ1NWVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUubWF0Y2goL15bMC05XXs5fSgoICosICopWzAtOV17OX0pKiQvZykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge2ludmFsaWRUZWxlZm9ub0NTVjogdHJ1ZX07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYnVpbGRMb25naXR1ZFZhbGlkYXRvcihsb246IG51bWJlcikge1xyXG4gICAgbGV0IGVycm9yS2V5ID0gXCJpbnZhbGlkTG9uZ2l0dWRcIjtcclxuICAgIGxldCBlcnJvcktleUluZGV4ID0gZXJyb3JLZXkgKyBcIiBfXCIgKyBsb24udG9TdHJpbmcoKTtcclxuICAgIEN1c3RvbVZhbGlkYXRvcnMuY29uZmlnW2Vycm9yS2V5SW5kZXhdID0gQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShlcnJvcktleSwge2xvbjogbG9ufSk7XHJcbiAgICByZXR1cm4gKGNvbnRyb2wpID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUubGVuZ3RoIDw9IGxvbikge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCByZXQgPSB7fTtcclxuICAgICAgICByZXRbZXJyb3JLZXlJbmRleF0gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYnVpbGRDYW50aWRhZE1pblZhbGlkYXRvcihtaW46IG51bWJlcikge1xyXG4gICAgbGV0IGVycm9yS2V5ID0gXCJpbnZhbGlkQ2FudGlkYWRNaW5cIjtcclxuICAgIGxldCBlcnJvcktleUluZGV4ID0gZXJyb3JLZXkgKyBcIiBfXCIgKyBtaW4udG9TdHJpbmcoKTtcclxuICAgIEN1c3RvbVZhbGlkYXRvcnMuY29uZmlnW2Vycm9yS2V5SW5kZXhdID0gQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShlcnJvcktleSwge21pbjogbWlufSk7XHJcbiAgICByZXR1cm4gKGNvbnRyb2wpID0+IHtcclxuICAgICAgaWYgKGNvbnRyb2wudmFsdWUgPT09IFwiXCIgfHwgY29udHJvbC52YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgbGV0IG51bSA9IE51bWJlcihjb250cm9sLnZhbHVlKTtcclxuICAgICAgaWYgKGlzTmFOKG51bSkgfHwgbnVtID49IG1pbikge1xyXG4gICAgICAgIC8vIHNpIG5vIGVzIG51bcOpcmljbyBvIGVsIHZhbG9yID49IG1pbiwgcGFzYSBsYSB2YWxpZGFjacOzblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCByZXQgPSB7fTtcclxuICAgICAgICByZXRbZXJyb3JLZXlJbmRleF0gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYnVpbGRDYW50aWRhZE1heFZhbGlkYXRvcihtYXg6IG51bWJlcikge1xyXG4gICAgbGV0IGVycm9yS2V5ID0gXCJpbnZhbGlkQ2FudGlkYWRNYXhcIjtcclxuICAgIGxldCBlcnJvcktleUluZGV4ID0gZXJyb3JLZXkgKyBcIl9cIiArIG1heC50b1N0cmluZygpO1xyXG4gICAgQ3VzdG9tVmFsaWRhdG9ycy5jb25maWdbZXJyb3JLZXlJbmRleF0gPSBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKGVycm9yS2V5LCB7bWF4OiBtYXh9KTtcclxuICAgIHJldHVybiAoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbC52YWx1ZSA9PT0gXCJcIiB8fCBjb250cm9sLnZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICBsZXQgbnVtID0gTnVtYmVyKGNvbnRyb2wudmFsdWUpO1xyXG4gICAgICBpZiAoaXNOYU4obnVtKSB8fCBudW0gPD0gbWF4KSB7XHJcbiAgICAgICAgLy8gc2kgbm8gZXMgbnVtw6lyaWNvIG8gZWwgdmFsb3Ig4omkIG1heCwgcGFzYSBsYSB2YWxpZGFjacOzblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCByZXQgPSB7fTtcclxuICAgICAgICByZXRbZXJyb3JLZXlJbmRleF0gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYnVpbGRDYW50aWRhZE1pbk1heFZhbGlkYXRvcihtaW46IG51bWJlciwgbWF4OiBudW1iZXIpIHtcclxuICAgIGxldCBlcnJvcktleSA9IFwiaW52YWxpZENhbnRpZGFkTWluTWF4XCI7XHJcbiAgICBsZXQgZXJyb3JLZXlJbmRleCA9IGVycm9yS2V5ICsgXCJfXCIgKyBtaW4udG9TdHJpbmcoKSArIFwiX1wiICsgbWF4LnRvU3RyaW5nKCk7XHJcbiAgICBDdXN0b21WYWxpZGF0b3JzLmNvbmZpZ1tlcnJvcktleUluZGV4XSA9IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoZXJyb3JLZXksIHtcclxuICAgICAgbWluOiBtaW4sXHJcbiAgICAgIG1heDogbWF4XHJcbiAgICB9KTtcclxuICAgIHJldHVybiAoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbC52YWx1ZSA9PT0gXCJcIiB8fCBjb250cm9sLnZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICBsZXQgbnVtID0gTnVtYmVyKGNvbnRyb2wudmFsdWUpO1xyXG4gICAgICBpZiAoIWlzTmFOKG51bSkgJiYgbnVtID49IG1pbiAmJiBudW0gPD0gbWF4KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHJldCA9IHt9O1xyXG4gICAgICAgIHJldFtlcnJvcktleUluZGV4XSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwb3JjZW50YWplVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgLy8gZXhwZWN0ZWQgYSBudW1lcmljIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwXHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZSA9PT0gXCJcIikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBuID0gTnVtYmVyKGNvbnRyb2wudmFsdWUpO1xyXG4gICAgICBpZiAoIWlzTmFOKG4pICYmIG4gPj0gMCAmJiBuIDw9IDEwMCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7aW52YWxpZFBvcmNlbnRhamU6IHRydWV9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdXJsVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgbGV0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKFxyXG4gICAgICBcIl4oaHR0cHM/OlxcXFwvXFxcXC8pP1wiICsgLy8gcHJvdG9jb2xcclxuICAgICAgXCIoKChbYS16XFxcXGRdKFthLXpcXFxcZC1dKlthLXpcXFxcZF0pKilcXFxcLj8pK1thLXpdezIsfXxcIiArIC8vIGRvbWFpbiBuYW1lXHJcbiAgICAgIFwiKChcXFxcZHsxLDN9XFxcXC4pezN9XFxcXGR7MSwzfSkpXCIgKyAvLyBPUiBpcCAodjQpIGFkZHJlc3NcclxuICAgICAgXCIoXFxcXDpcXFxcZCspPyhcXFxcL1stYS16XFxcXGQlXy5+K10qKSpcIiArIC8vIHBvcnQgYW5kIHBhdGhcclxuICAgICAgXCIoXFxcXD9bOyZhLXpcXFxcZCVfLn4rPS1dKik/XCIgKyAvLyBxdWVyeSBzdHJpbmdcclxuICAgICAgXCIoXFxcXCNbLWEtelxcXFxkX10qKT8kXCIsXHJcbiAgICAgIFwiaVwiXHJcbiAgICApOyAvLyBmcmFnbWVudCBsb2NhdG9yXHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgcGF0dGVybi50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtpbnZhbGlkVXJsOiB0cnVlfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBwYXRoVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgbGV0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKFxyXG4gICAgICBcIl4oKFxcXFwvKT9bLWEtelxcXFxkJV8ufitdKikqXCIgKyAvLyBwb3J0IGFuZCBwYXRoXHJcbiAgICAgIFwiKFxcXFw/WzsmYS16XFxcXGQlXy5+Kz0tXSopP1wiICsgLy8gcXVlcnkgc3RyaW5nXHJcbiAgICAgIFwiKFxcXFwjWy1hLXpcXFxcZF9dKik/JFwiLFxyXG4gICAgICBcImlcIlxyXG4gICAgKTsgLy8gZnJhZ21lbnQgbG9jYXRvclxyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IHBhdHRlcm4udGVzdChjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7aW52YWxpZFBhdGg6IHRydWV9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0b3JuYSB1biBzdHJpbmcgY29uIHRvZG9zIGxvcyBlcnJvcmVzIHF1ZSBjb250aWVuZSBlbCBmb3JtdWxhcmlvLCBzZXBhcmFkb3MgcG9yIHNhbHRvcyBkZSBsw61uZWEuXHJcbiAgICovXHJcbiAgc3RhdGljIHZhbGlkYXRlRm9ybShmb3JtOiBGb3JtR3JvdXAsIHByZWZpeDogc3RyaW5nW10gPSBbXSk6IEVycm9yVmFsaWRhdGVGb3JtW10ge1xyXG4gICAgbGV0IG1lbnNhamVzOiBFcnJvclZhbGlkYXRlRm9ybVtdID0gW107XHJcbiAgICAvLyBlcnJvcmVzIGVuIHTDqXJtaW5vcyBkZSBncnVwb1xyXG4gICAgZm9yIChsZXQgZXJyb3JLZXkgaW4gZm9ybS5lcnJvcnMpIHtcclxuICAgICAgbGV0IHByID0gcHJlZml4ID8gYCR7cHJlZml4fTogYCA6IFwiXCI7XHJcbiAgICAgIG1lbnNhamVzLnB1c2goe3ByZWZpeGVzOiBbcHJdLCBlcnJvck1lc3NhZ2U6IEN1c3RvbVZhbGlkYXRvcnMuY29uZmlnW2Vycm9yS2V5XX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGNvbnRyb2xLZXkgaW4gZm9ybS5jb250cm9scykge1xyXG4gICAgICBsZXQgY29udHJvbCA9IGZvcm0uY29udHJvbHNbY29udHJvbEtleV07XHJcbiAgICAgIGlmICghY29udHJvbC52YWxpZCkge1xyXG4gICAgICAgIC8vIG5vIGVzIHbDoWxpZG8sIGhheSBtZW5zYWplcyBxdWUgcmVjdXBlcmFyXHJcbiAgICAgICAgbGV0IGNvbnRyb2xMYWJlbDogc3RyaW5nW10gPSBwcmVmaXguY29uY2F0KFtjb250cm9sS2V5XSk7IC8vIG5vbWJyZSBhcGlsYWRvXHJcblxyXG4gICAgICAgIC8vIGRldGVjdGFtb3Mgc2kgZXMgdW4gY2FtcG8gbyB1biBmb3JtdWxhcmlvIGFuaWRhZG9cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgLy8gZXMgdW4gZm9ybXVsYXJpbyBhbmlkYWRvLCBzZWd1aW1vcyBiYWphbmRvIHJlY3Vyc2l2YW1lbnRlXHJcbiAgICAgICAgICBtZW5zYWplcyA9IG1lbnNhamVzLmNvbmNhdChDdXN0b21WYWxpZGF0b3JzLnZhbGlkYXRlRm9ybShjb250cm9sLCBjb250cm9sTGFiZWwpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgIC8vIGVzIHVuIGNhbXBvIGZpbmFsLCBhw7FhZGltb3Mgc3VzIG1lbnNhamVzIGRlIGVycm9yXHJcbiAgICAgICAgICBmb3IgKGxldCBlcnJvcktleSBpbiBjb250cm9sLmVycm9ycykge1xyXG4gICAgICAgICAgICBtZW5zYWplcy5wdXNoKHtwcmVmaXhlczogY29udHJvbExhYmVsLCBlcnJvck1lc3NhZ2U6IEN1c3RvbVZhbGlkYXRvcnMuY29uZmlnW2Vycm9yS2V5XX0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcclxuICAgICAgICAgIC8vIGVzIHVuYSBsaXN0YSBkZSBjb250cm9sZXMgYW5pZGFkYSwgbGEgcmVjb3JyZW1vc1xyXG4gICAgICAgICAgY29udHJvbC5jb250cm9scyAmJlxyXG4gICAgICAgICAgY29udHJvbC5jb250cm9scy5mb3JFYWNoKChhcnJDb250cm9sLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgYXJyQ29udHJvbExhYmVsOiBzdHJpbmdbXSA9IGNvbnRyb2xMYWJlbC5jb25jYXQoW2luZGV4LnRvU3RyaW5nKCldKTtcclxuICAgICAgICAgICAgaWYgKGFyckNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgICAgICAgICAvLyBlcyB1bmEgbGlzdGEgZGUgRm9ybUdyb3VwcywgYmFqYW1vcyBhIGVsbG9zIHJlY3Vyc2l2YW1lbnRlXHJcbiAgICAgICAgICAgICAgbWVuc2FqZXMgPSBtZW5zYWplcy5jb25jYXQoQ3VzdG9tVmFsaWRhdG9ycy52YWxpZGF0ZUZvcm0oYXJyQ29udHJvbCwgYXJyQ29udHJvbExhYmVsKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyQ29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgIC8vIGVzIHVuYSBsaXN0YSBkZSBGb3JtQ29udHJvbHMsIGxvcyB0cmF0YW1vcyBkZXNkZSBhcXXDrVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IGVycm9yS2V5IGluIGNvbnRyb2wuZXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICBtZW5zYWplcy5wdXNoKHtwcmVmaXhlczogYXJyQ29udHJvbExhYmVsLCBlcnJvck1lc3NhZ2U6IEN1c3RvbVZhbGlkYXRvcnMuY29uZmlnW2Vycm9yS2V5XX0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyA/Pz8gwr9VbiBhcnJheSBkZSBhcnJheXM/IE5vIGVzdMOhIHByZXZpc3RvLlxyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiW0N1c3RvbVZhbGlkYXRvcnNdIFVuZXhwZWN0ZWQgRm9ybUFycmF5IHdpdGggbmVzdGVkIEZvcm1BcnJheXNcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1lbnNhamVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjaWJlIHVuIG9iamV0byBjb24gbGFzIHByb3BpZWRhZGVzIHtmaWVsZFRpcG8sIGZpZWxkTnVtZXJvfSB5IGRldnVlbHZlIHVuIHZhbGlkYWRvciBkZSBmb3JtdWxhcmlvIHBhcmEgZG9jdW1lbnRvcyBkZSBpZGVudGlmaWNhY2nDs24uXHJcbiAgICogRWwgZXJyb3IgcXVlIHB1ZWRlIGdlbmVyYXJzZSBlcyBkZWwgdGlwbyAnaW52YWxpZE51bWVyb0RvY3VtZW50b1RpcG9Eb2N1bWVudG8nLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBidWlsZE51bWVyb0RvY3VtZW50b1ZhbGlkYXRvcih7ZmllbGRUaXBvID0gXCJkb2N1bWVudG9UaXBvXCIsIGZpZWxkTnVtZXJvID0gXCJkb2N1bWVudG9OdW1lcm9cIn0gPSB7fSk6IFZhbGlkYXRvckZuIHtcclxuICAgIGxldCByZXN1bHQgPSBmdW5jdGlvbiAoZzogRm9ybUdyb3VwKSB7XHJcbiAgICAgIGlmICghZykge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBkb2N1bWVudG9UaXBvID0gZy5nZXQoZmllbGRUaXBvKSAmJiBnLmdldChmaWVsZFRpcG8pLnZhbHVlO1xyXG4gICAgICBsZXQgZG9jdW1lbnRvTnVtZXJvID0gZyAmJiBnLmdldChmaWVsZE51bWVybykgJiYgZy5nZXQoZmllbGROdW1lcm8pLnZhbHVlO1xyXG4gICAgICBsZXQgaW52YWxpZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoZG9jdW1lbnRvVGlwbyAmJiBkb2N1bWVudG9OdW1lcm8pIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnRvVGlwbyA9PSBcIkROSVwiKSB7XHJcbiAgICAgICAgICBpbnZhbGlkID0gIUN1c3RvbVZhbGlkYXRvcnMuaXNWYWxpZEROSShkb2N1bWVudG9OdW1lcm8pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRvVGlwbyA9PSBcIkNJRlwiKSB7XHJcbiAgICAgICAgICBpbnZhbGlkID0gIUN1c3RvbVZhbGlkYXRvcnMuaXNWYWxpZENJRihkb2N1bWVudG9OdW1lcm8pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRvVGlwbyA9PSBcIk5JRlwiKSB7XHJcbiAgICAgICAgICAvL2ludmFsaWQgPSAhZG9jdW1lbnRvTnVtZXJvLm1hdGNoKC9eWzAtOV17OH1bYS16fEEtWl0kLyk7XHJcbiAgICAgICAgICBpbnZhbGlkID0gIUN1c3RvbVZhbGlkYXRvcnMuaXNWYWxpZE5JRihkb2N1bWVudG9OdW1lcm8pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRvVGlwbyA9PSBcIk5JRVwiKSB7XHJcbiAgICAgICAgICBpbnZhbGlkID0gIUN1c3RvbVZhbGlkYXRvcnMuaXNWYWxpZE5JRShkb2N1bWVudG9OdW1lcm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGludmFsaWQpIHtcclxuICAgICAgICByZXR1cm4ge2ludmFsaWROdW1lcm9Eb2N1bWVudG9UaXBvRG9jdW1lbnRvOiB0cnVlfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbmlmVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IEN1c3RvbVZhbGlkYXRvcnMuaXNWYWxpZE5JRihjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7aW52YWxpZE5JRjogdHJ1ZX07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbmllVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IEN1c3RvbVZhbGlkYXRvcnMuaXNWYWxpZE5JRShjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7aW52YWxpZE5JRTogdHJ1ZX07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbmlmTmllVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IEN1c3RvbVZhbGlkYXRvcnMuaXNWYWxpZE5JRihjb250cm9sLnZhbHVlKSB8fCBDdXN0b21WYWxpZGF0b3JzLmlzVmFsaWROSUUoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge2ludmFsaWROSUZOSUU6IHRydWV9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNpZlZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGxldCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgvXlthLXp8QS1aXVswLTldezd9W2EtenxBLVp8MC05XS8pOyAvLyBUT0RPXHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgcGF0dGVybi50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtpbnZhbGlkQ0lGOiB0cnVlfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBhbnlvVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgbGV0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKC9eWzAtOV17NH0kLyk7IC8vIFRPRE9cclxuICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBwYXR0ZXJuLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge2ludmFsaWRBbnlvOiB0cnVlfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc1ZhbGlkRE5JKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlOyAvLyDCv2RlYmVyw61hbW9zIHZhbGlkYXIgYWxnbz8gQ29uIGxldHJhIHlhIHRlbmVtb3MgZWwgTklGXHJcbiAgfVxyXG5cclxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5LXZhbGlkYXRpb24vanF1ZXJ5LXZhbGlkYXRpb24vYmxvYi9tYXN0ZXIvc3JjL2FkZGl0aW9uYWwvY2lmRVMuanNcclxuICBzdGF0aWMgaXNWYWxpZENJRih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgY2lmUmVnRXggPSBuZXcgUmVnRXhwKC9eKFtBQkNERUZHSEpLTE1OUFFSU1VWV10pKFxcZHs3fSkoWzAtOUEtSl0pJC9naSk7XHJcbiAgICBsZXQgbGV0dGVyID0gdmFsdWUuc3Vic3RyaW5nKDAsIDEpLCAvLyBbIFQgXVxyXG4gICAgICBudW1iZXIgPSB2YWx1ZS5zdWJzdHJpbmcoMSwgOCksIC8vIFsgUCBdWyBQIF1bIE4gXVsgTiBdWyBOIF1bIE4gXVsgTiBdXHJcbiAgICAgIGNvbnRyb2wgPSB2YWx1ZS5zdWJzdHJpbmcoOCwgOSksIC8vIFsgQyBdXHJcbiAgICAgIGFsbF9zdW0gPSAwLFxyXG4gICAgICBldmVuX3N1bSA9IDAsXHJcbiAgICAgIG9kZF9zdW0gPSAwLFxyXG4gICAgICBpLFxyXG4gICAgICBuLFxyXG4gICAgICBjb250cm9sX2RpZ2l0LFxyXG4gICAgICBjb250cm9sX2xldHRlcjtcclxuXHJcbiAgICBmdW5jdGlvbiBpc09kZChuKSB7XHJcbiAgICAgIHJldHVybiBuICUgMiA9PT0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBRdWljayBmb3JtYXQgdGVzdFxyXG4gICAgaWYgKHZhbHVlLmxlbmd0aCAhPT0gOSB8fCAhY2lmUmVnRXgudGVzdCh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbiA9IHBhcnNlSW50KG51bWJlcltpXSwgMTApO1xyXG4gICAgICAvLyBPZGQgcG9zaXRpb25zXHJcbiAgICAgIGlmIChpc09kZChpKSkge1xyXG4gICAgICAgIC8vIE9kZCBwb3NpdGlvbnMgYXJlIG11bHRpcGxpZWQgZmlyc3QuXHJcbiAgICAgICAgbiAqPSAyO1xyXG4gICAgICAgIC8vIElmIHRoZSBtdWx0aXBsaWNhdGlvbiBpcyBiaWdnZXIgdGhhbiAxMCB3ZSBuZWVkIHRvIGFkanVzdFxyXG4gICAgICAgIG9kZF9zdW0gKz0gbiA8IDEwID8gbiA6IG4gLSA5O1xyXG4gICAgICAgIC8vIEV2ZW4gcG9zaXRpb25zXHJcbiAgICAgICAgLy8gSnVzdCBzdW0gdGhlbVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGV2ZW5fc3VtICs9IG47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhbGxfc3VtID0gZXZlbl9zdW0gKyBvZGRfc3VtO1xyXG4gICAgY29udHJvbF9kaWdpdCA9ICgxMCAtIE51bWJlcihhbGxfc3VtLnRvU3RyaW5nKCkuc3Vic3RyaW5nKC0xKSkpLnRvU3RyaW5nKCk7XHJcbiAgICBjb250cm9sX2RpZ2l0ID0gcGFyc2VJbnQoY29udHJvbF9kaWdpdCwgMTApID4gOSA/IFwiMFwiIDogY29udHJvbF9kaWdpdDtcclxuICAgIGNvbnRyb2xfbGV0dGVyID0gXCJKQUJDREVGR0hJXCIuc3Vic3RyaW5nKGNvbnRyb2xfZGlnaXQsIDEpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgLy8gQ29udHJvbCBtdXN0IGJlIGEgZGlnaXRcclxuICAgIGlmIChsZXR0ZXIubWF0Y2goL1tBQkVIXS8pKSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sID09PSBjb250cm9sX2RpZ2l0O1xyXG4gICAgICAvLyBDb250cm9sIG11c3QgYmUgYSBsZXR0ZXJcclxuICAgIH0gZWxzZSBpZiAobGV0dGVyLm1hdGNoKC9bS1BRU10vKSkge1xyXG4gICAgICByZXR1cm4gY29udHJvbCA9PT0gY29udHJvbF9sZXR0ZXI7XHJcbiAgICB9XHJcbiAgICAvLyBDYW4gYmUgZWl0aGVyXHJcbiAgICByZXR1cm4gY29udHJvbCA9PT0gY29udHJvbF9kaWdpdCB8fCBjb250cm9sID09PSBjb250cm9sX2xldHRlcjtcclxuICB9XHJcblxyXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnktdmFsaWRhdGlvbi9qcXVlcnktdmFsaWRhdGlvbi9ibG9iL21hc3Rlci9zcmMvYWRkaXRpb25hbC9uaWZFUy5qc1xyXG4gIHN0YXRpYyBpc1ZhbGlkTklGKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHZhbHVlID0gdmFsdWUudG9VcHBlckNhc2UoKTtcclxuICAgIC8vIEJhc2ljIGZvcm1hdCB0ZXN0XHJcbiAgICBpZiAoIXZhbHVlLm1hdGNoKFwiKCheW0EtWl17MX1bMC05XXs3fVtBLVowLTldezF9JHxeW1RdezF9W0EtWjAtOV17OH0kKXxeWzAtOV17OH1bQS1aXXsxfSQpXCIpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIFRlc3QgTklGXHJcbiAgICBpZiAoL15bMC05XXs4fVtBLVpdezF9JC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIFwiVFJXQUdNWUZQRFhCTkpaU1FWSExDS0VcIi5jaGFyQXQoTnVtYmVyKHZhbHVlLnN1YnN0cmluZyg4LCAwKSkgJSAyMykgPT09IHZhbHVlLmNoYXJBdCg4KTtcclxuICAgIH1cclxuICAgIC8vIFRlc3Qgc3BlY2lhbHMgTklGIChzdGFydHMgd2l0aCBLLCBMIG9yIE0pXHJcbiAgICBpZiAoL15bS0xNXXsxfS8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlWzhdICE9PSBcIlRSV0FHTVlGUERYQk5KWlNRVkhMQ0tFXCIuY2hhckF0KE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoOCwgMSkpICUgMjMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzVmFsaWROSUUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgLy8gVW4gTklFIHNpZ3VlIHVuYSB2YWxpZGFjacOzbiBtdXkgc2ltaWxhciBhIGxhIGRlIHVuIEROSSwgY29uIGxhIGRpZmVyZW5jaWFcclxuICAgIC8vIGRlIHF1ZSBlbiBsdWdhciBkZSBzZXIgb2NobyBuw7ptZXJvcyArIGxldHJhIGRlYmUgc2VyIGxldHJhICsgc2lldGUgbsO6bWVyb3MgKyBsZXRyYSxcclxuICAgIC8vIHNpZW5kbyBsYSBwcmltZXJhIGxldHJhIFgsIFkgbyBaIHN1c3RpdHVpYmxlIHBvciAwLCAxIG8gMiByZXNwZWN0aXZhbWVudGUuXHJcbiAgICBsZXQgbmllUmVnRXggPSBuZXcgUmVnRXhwKC9eW1hZWl17MX1bMC05XXs3fVtUUldBR01ZRlBEWEJOSlpTUVZITENLRVRdezF9JC9naSk7XHJcblxyXG4gICAgLy8gU2kgbm8gdGllbmUgZWwgZm9ybWF0byBiw6FzaWNvLCBubyBlcyB2w6FsaWRvXHJcbiAgICBpZiAoIW5pZVJlZ0V4LnRlc3QodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdXN0aXR1aW1vcyBsYSBwcmltZXJhIGxldHJhIHBvciBlbCBuw7ptZXJvIGVxdWl2YWxlbnRlIHkgYXByb3ZlY2hhbW9zIGxhIHZhbGlkYWNpw7NuIGRlIE5JRlxyXG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvXltYXS8sIFwiMFwiKS5yZXBsYWNlKC9eW1ldLywgXCIxXCIpLnJlcGxhY2UoL15bWl0vLCBcIjJcIik7XHJcblxyXG4gICAgcmV0dXJuIEN1c3RvbVZhbGlkYXRvcnMuaXNWYWxpZE5JRih2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmFuZ29GZWNoYXNWYWxpZGF0b3Ioe2ZpZWxkRmVjaGFJbmljaW8gPSBcImZlY2hhSW5pY2lvXCIsIGZpZWxkRmVjaGFGaW4gPSBcImZlY2hhRmluXCJ9ID0ge30pOiBWYWxpZGF0b3JGbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZnVuY3Rpb24gKGc6IEZvcm1Hcm91cCkge1xyXG4gICAgICBpZiAoIWcpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBsZXQgZmVjaGFJbmljaW8gPSBnLmdldChmaWVsZEZlY2hhSW5pY2lvKSAmJiBnLmdldChmaWVsZEZlY2hhSW5pY2lvKS52YWx1ZTtcclxuICAgICAgbGV0IGZlY2hhRmluID0gZyAmJiBnLmdldChmaWVsZEZlY2hhRmluKSAmJiBnLmdldChmaWVsZEZlY2hhRmluKS52YWx1ZTtcclxuICAgICAgaWYgKGZlY2hhSW5pY2lvICYmIGZlY2hhRmluKSB7XHJcbiAgICAgICAgbGV0IGluaWNpbyA9IEdlbmVyYWxVdGlscy5zdHJpbmdTaG9ydFRvRGF0ZShmZWNoYUluaWNpbyk7XHJcbiAgICAgICAgbGV0IGZpbiA9IEdlbmVyYWxVdGlscy5zdHJpbmdTaG9ydFRvRGF0ZShmZWNoYUZpbik7XHJcbiAgICAgICAgaWYgKGluaWNpbyA+IGZpbikge1xyXG4gICAgICAgICAgcmV0dXJuIHtpbnZhbGlkUmFuZ29GZWNoYUZpblBvc3RlcmlvckluaWNpbzogdHJ1ZX07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmFuZ29Ib3Jhc1ZhbGlkYXRvcih7ZmllbGRIb3JhSW5pY2lvID0gXCJob3JhSW5pY2lvXCIsIGZpZWxkSG9yYUZpbiA9IFwiaG9yYUZpblwifSA9IHt9KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgbGV0IHJlc3VsdCA9IGZ1bmN0aW9uIChnOiBGb3JtR3JvdXApIHtcclxuICAgICAgaWYgKCFnKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGluaWNpbyA9IGcuZ2V0KGZpZWxkSG9yYUluaWNpbykgJiYgZy5nZXQoZmllbGRIb3JhSW5pY2lvKS52YWx1ZSAmJiBHZW5lcmFsVXRpbHMuc3RyaW5nVG9UaW1lKGcuZ2V0KGZpZWxkSG9yYUluaWNpbykudmFsdWUpO1xyXG4gICAgICBsZXQgZmluID0gZyAmJiBnLmdldChmaWVsZEhvcmFGaW4pICYmIGcuZ2V0KGZpZWxkSG9yYUZpbikudmFsdWUgJiYgR2VuZXJhbFV0aWxzLnN0cmluZ1RvVGltZShnLmdldChmaWVsZEhvcmFGaW4pLnZhbHVlKTtcclxuICAgICAgaWYgKGluaWNpbyAmJiBmaW4gJiYgaW5pY2lvID49IGZpbikge1xyXG4gICAgICAgIHJldHVybiB7aW52YWxpZFJhbmdvSG9yYUZpblBvc3RlcmlvckluaWNpbzogdHJ1ZX07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkYXRlVGltZU5vdEFmdGVyQ3VycmVudERhdGVWYWxpZGF0b3Ioe2ZpZWxkZmVjaGEgPSBcImZlY2hhXCIsIGZpZWxkSG9yYSA9IFwiaG9yYVwifSA9IHt9KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgbGV0IHJlc3VsdCA9IGZ1bmN0aW9uIChnOiBGb3JtR3JvdXApIHtcclxuICAgICAgaWYgKCFnKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGNhbXBvRmVjaGEgPSBnLmdldChmaWVsZGZlY2hhKTtcclxuICAgICAgbGV0IGNhbXBvSG9yYSA9IGcuZ2V0KGZpZWxkSG9yYSk7XHJcbiAgICAgIGlmIChjYW1wb0ZlY2hhICYmIGNhbXBvRmVjaGEudmFsdWUgJiYgY2FtcG9GZWNoYS52YWx1ZS5tYXRjaCgvXigwWzEtOV18MVxcZHwyXFxkfDNbMDFdKVxcLygwWzEtOV18MVswLTJdKVxcLygxOXwyMClcXGR7Mn0kLykpIHtcclxuICAgICAgICBsZXQgZGF0ZSA9IEdlbmVyYWxVdGlscy5nZXRTdHJpbmdBc0RhdGUoY2FtcG9GZWNoYS52YWx1ZSk7XHJcbiAgICAgICAgaWYgKGNhbXBvSG9yYSAmJiBjYW1wb0hvcmEudmFsdWUgJiYgY2FtcG9Ib3JhLnZhbHVlLm1hdGNoKC9eWzAtOV1bMC05XTpbMC05XVswLTldJC8pKSB7XHJcbiAgICAgICAgICBkYXRlLnNldEhvdXJzKGNhbXBvSG9yYS52YWx1ZS5zcGxpdChcIjpcIilbMF0pO1xyXG4gICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKGNhbXBvSG9yYS52YWx1ZS5zcGxpdChcIjpcIilbMV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0ZSA8IG5ldyBEYXRlKCkpIHtcclxuICAgICAgICAgIHJldHVybiB7aW52YWxpZERhdGVUaW1lTm90QWZ0ZXJDdXJyZW50RGF0ZTogdHJ1ZX07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYnVpbGRNaW5Mb25naXR1ZFZhbGlkYXRvcihsb246IG51bWJlcikge1xyXG4gICAgbGV0IGVycm9yS2V5ID0gXCJpbnZhbGlkTWluTG9uZ2l0dWRcIjtcclxuICAgIGxldCBlcnJvcktleUluZGV4ID0gZXJyb3JLZXkgKyBcIl9cIiArIGxvbi50b1N0cmluZygpO1xyXG4gICAgQ3VzdG9tVmFsaWRhdG9ycy5jb25maWdbZXJyb3JLZXlJbmRleF0gPSBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKGVycm9yS2V5LCB7bG9uOiBsb259KTtcclxuICAgIGxldCByZXN1bHQgPSAoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZS5sZW5ndGggPj0gbG9uKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHJldCA9IHt9O1xyXG4gICAgICAgIHJldFtlcnJvcktleUluZGV4XSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
630
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXZhbGlkYXRvcnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JpdC1uZy1saWJyYXJ5L3NyYy9saWIvc2hhcmVkbGlicmFyeS9zZXJ2aWNlcy9jdXN0b20tdmFsaWRhdG9ycy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0QsTUFBTSxPQUFPLGdCQUFnQjthQUNwQixXQUFNLEdBQUc7UUFDZCxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBQ3hELFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQztRQUNsRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDO1FBQzlELG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO1FBQzlFLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixDQUFDO1FBQ3BGLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7UUFDaEUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO1FBQ3RFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUM7UUFDOUQsYUFBYSxFQUFFLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztRQUNsRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FB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RyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDaEQ7Z0JBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBRTtvQkFDckIsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUNyRDthQUNGO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEdBQVc7UUFDMUMsSUFBSSxRQUFRLEdBQUcsb0JBQW9CLENBQUM7UUFDcEMsSUFBSSxhQUFhLEdBQUcsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEQsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLElBQUksTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFO2dCQUNqRCxPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNO2dCQUNMLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDYixHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixPQUFPLEdBQUcsQ0FBQzthQUNaO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Hcm91cCwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUFycmF5LCBWYWxpZGF0b3JGbiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBHZW5lcmFsVXRpbHMgfSBmcm9tIFwiLi9nZW5lcmFsLXV0aWxzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlZE1lc3NhZ2UsIEVycm9yVmFsaWRhdGVGb3JtIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbW9kZWxzL3R5cGVzXCI7XHJcbmltcG9ydCB7IGJ1aWxkVHJhbnNsYXRlZE1lc3NhZ2UgfSBmcm9tIFwiLi90cmFuc2xhdGUuc2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbVZhbGlkYXRvcnMge1xyXG4gIHN0YXRpYyBjb25maWcgPSB7XHJcbiAgICByZXF1aXJlZDogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcInJlcXVpcmVkXCIpLFxyXG4gICAgaW52YWxpZERhdGU6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJEYXRhIGluY29ycmVjdGFcIiksXHJcbiAgICBpbnZhbGlkVGltZTogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRUaW1lXCIpLFxyXG4gICAgaW52YWxpZEVtYWlsQWRkcmVzczogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRFbWFpbEFkZHJlc3NcIiksXHJcbiAgICBpbnZhbGlkRW1haWxDU1ZBZGRyZXNzOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZEVtYWlsQ1NWQWRkcmVzc1wiKSxcclxuICAgIGludmFsaWRMb2dpbjogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRMb2dpblwiKSxcclxuICAgIGludmFsaWRFdGlxdWV0YTogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRFdGlxdWV0YVwiKSxcclxuICAgIGludmFsaWROYW1lOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZE5hbWVcIiksXHJcbiAgICBpbnZhbGlkQ29kaWdvOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZENvZGlnb1wiKSxcclxuICAgIGludmFsaWRBbGZhbnVtZXJpY286IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkQWxmYW51bWVyaWNvXCIpLFxyXG4gICAgaW52YWxpZENhbnRpZGFkOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZENhbnRpZGFkXCIpLFxyXG4gICAgaW52YWxpZEVudGVyb1Bvc2l0aXZvOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZEVudGVyb1Bvc2l0aXZvXCIpLFxyXG4gICAgaW52YWxpZEVudGVyb1Bvc2l0aXZvSW5jbHV5ZUNlcm86IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkRW50ZXJvUG9zaXRpdm9JbmNsdXllQ2Vyb1wiKSxcclxuICAgIGludmFsaWRDYW50aWRhZERlY2ltYWw6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkQ2FudGlkYWREZWNpbWFsXCIpLFxyXG4gICAgaW52YWxpZE51bWVyb1Bvc2l0aXZvOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZE51bWVyb1Bvc2l0aXZvXCIpLFxyXG4gICAgaW52YWxpZENvZGlnb1Bvc3RhbDogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRDb2RpZ29Qb3N0YWxcIiksXHJcbiAgICBpbnZhbGlkVGVsZWZvbm86IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkVGVsZWZvbm9cIiksXHJcbiAgICBpbnZhbGlkVGVsZWZvbm9DU1Y6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkVGVsZWZvbm9DU1ZcIiksXHJcbiAgICBpbnZhbGlkUG9yY2VudGFqZTogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRQb3JjZW50YWplXCIpLFxyXG4gICAgaW52YWxpZFVybDogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRVcmxcIiksXHJcbiAgICBpbnZhbGlkUGF0aDogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRQYXRoXCIpLFxyXG4gICAgaW52YWxpZE5JRjogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWROSUZcIiksXHJcbiAgICBpbnZhbGlkTklFOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZE5JRVwiKSxcclxuICAgIGludmFsaWRDSUY6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkQ0lGXCIpLFxyXG4gICAgaW52YWxpZE5JRk5JRTogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWROSUZOSUVcIiksXHJcbiAgICBpbnZhbGlkQW55bzogQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShcImludmFsaWRBbnlvXCIpLFxyXG4gICAgbWF4bGVuZ3RoOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwibWF4bGVuZ3RoXCIpLFxyXG4gICAgaW52YWxpZE51bWVyb0RvY3VtZW50b1RpcG9Eb2N1bWVudG86IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkTnVtZXJvRG9jdW1lbnRvVGlwb0RvY3VtZW50b1wiKSxcclxuICAgIGRpcmVjY2lvbkluY29tcGxldGE6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJkaXJlY2Npb25JbmNvbXBsZXRhXCIpLFxyXG4gICAgcmVxdWlyZWRFeHRyYURhdGE6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJyZXF1aXJlZEV4dHJhRGF0YVwiKSxcclxuICAgIGludmFsaWRSYW5nb0ZlY2hhRmluUG9zdGVyaW9ySW5pY2lvOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZFJhbmdvRmVjaGFGaW5Qb3N0ZXJpb3JJbmljaW9cIiksXHJcbiAgICBpbnZhbGlkUmFuZ29Ib3JhRmluUG9zdGVyaW9ySW5pY2lvOiBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKFwiaW52YWxpZFJhbmdvSG9yYUZpblBvc3RlcmlvckluaWNpb1wiKSxcclxuICAgIGludmFsaWREYXRlVGltZU5vdEFmdGVyQ3VycmVudERhdGU6IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoXCJpbnZhbGlkRGF0ZVRpbWVOb3RBZnRlckN1cnJlbnREYXRlXCIpXHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIEN1c3RvbVZhbGlkYXRvcnNNYXAgPSB7XHJcbiAgICBjb2RpZ29OdW1lcmljbzogQ3VzdG9tVmFsaWRhdG9ycy5jb2RpZ29WYWxpZGF0b3IsXHJcbiAgICBjb2RpZ29BbGZhbnVtZXJpY286IEN1c3RvbVZhbGlkYXRvcnMuYWxmYW51bWVyaWNvVmFsaWRhdG9yLFxyXG4gICAgbm9tYnJlOiBDdXN0b21WYWxpZGF0b3JzLm5vbWJyZVZhbGlkYXRvcixcclxuICAgIG51bWVybzogQ3VzdG9tVmFsaWRhdG9ycy5jYW50aWRhZERlY2ltYWxWYWxpZGF0b3IsXHJcbiAgICBlbnRlcm86IEN1c3RvbVZhbGlkYXRvcnMuY2FudGlkYWRWYWxpZGF0b3IsXHJcbiAgICBudW1lcm9Qb3NpdGl2bzogQ3VzdG9tVmFsaWRhdG9ycy5udW1lcm9Qb3NpdGl2b1ZhbGlkYXRvcixcclxuICAgIGVudGVyb1Bvc2l0aXZvOiBDdXN0b21WYWxpZGF0b3JzLmVudGVyb1Bvc2l0aXZvVmFsaWRhdG9yLFxyXG4gICAgbmlmOiBDdXN0b21WYWxpZGF0b3JzLm5pZlZhbGlkYXRvcixcclxuICAgIG5pZTogQ3VzdG9tVmFsaWRhdG9ycy5uaWVWYWxpZGF0b3IsXHJcbiAgICBjaWY6IEN1c3RvbVZhbGlkYXRvcnMuY2lmVmFsaWRhdG9yLFxyXG4gICAgbmlmbmllOiBDdXN0b21WYWxpZGF0b3JzLm5pZk5pZVZhbGlkYXRvcixcclxuICAgIGNwOiBDdXN0b21WYWxpZGF0b3JzLmNvZGlnb1Bvc3RhbFZhbGlkYXRvcixcclxuICAgIHRlbGVmb25vOiBDdXN0b21WYWxpZGF0b3JzLnRlbGVmb25vVmFsaWRhdG9yLFxyXG4gICAgdGVsZWZvbm9DU1Y6IEN1c3RvbVZhbGlkYXRvcnMudGVsZWZvbm9DU1ZWYWxpZGF0b3IsXHJcbiAgICBlbWFpbENTVjogQ3VzdG9tVmFsaWRhdG9ycy5lbWFpbENTVlZhbGlkYXRvcixcclxuICAgIGVtYWlsOiBDdXN0b21WYWxpZGF0b3JzLmVtYWlsVmFsaWRhdG9yLFxyXG4gICAgZmVjaGE6IEN1c3RvbVZhbGlkYXRvcnMuZGF0YVZhbGlkYXRvcixcclxuICAgIGFueW86IEN1c3RvbVZhbGlkYXRvcnMuYW55b1ZhbGlkYXRvclxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBidWlsZEVycm9yTWVzc2FnZShjb2RlOiBzdHJpbmcsIHBhcmFtcz86IHt9KTogVHJhbnNsYXRlZE1lc3NhZ2Uge1xyXG4gICAgcmV0dXJuIGJ1aWxkVHJhbnNsYXRlZE1lc3NhZ2UoXCJmb3JtLm1lc3NhZ2VzLlwiICsgY29kZSwgXCJiaXRuZ2xpYnJhcnlcIiwgcGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRWYWxpZGF0b3JFcnJvck1lc3NhZ2UoY29kZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gQ3VzdG9tVmFsaWRhdG9ycy5jb25maWdbY29kZV07XHJcbiAgfVxyXG5cclxuICAvLyBtw6l0b2RvIHBhcmEgdW5pciB2YWxpZGFkb3Jlc1xyXG4gIHN0YXRpYyBjb21wb3NlKHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10pOiBWYWxpZGF0b3JGbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZnVuY3Rpb24gKGc6IEZvcm1Hcm91cCkge1xyXG4gICAgICAvLyBlamVjdXRhbW9zIGNhZGEgdW5vIGRlIGxvcyB2YWxpZGFkb3JlcyB5IHVuaW1vcyBzdXMgcmVzdWx0YWRvc1xyXG4gICAgICBsZXQgaW5uZXJSZXN1bHQgPSB2YWxpZGF0b3JzLm1hcCgodmFsaWRhdG9yKSA9PiB2YWxpZGF0b3IoZykpLnJlZHVjZSgoYWNjLCByZXN1bHQgPSB7fSkgPT4gT2JqZWN0LmFzc2lnbihhY2MsIHJlc3VsdCksIHt9KTtcclxuICAgICAgcmV0dXJuIGlubmVyUmVzdWx0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVxdWlyZWQoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHsgcmVxdWlyZWQ6IHRydWUgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZXN0ZSB2YWxpZGFkb3IgZW4gcmVhbGlkYWQgbm8gZXN0w6EgaGFjaWVuZG8gbmFkYSBwb3JxdWUgYml0LWlucHV0LCBwYXJhIGZlY2hhcyBubyB2w6FsaWRhcywgc3VzdGl0dXllXHJcbiAgLy8gY29udHJvbC52YWx1ZSBwb3IgdW4gbnVsbCB5IGVsIHZhbGlkYWRvciBwYXNhIHNpZW1wcmVcclxuICBzdGF0aWMgZGF0YVZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIC8vIGZvcm1hdG8gZGQvTU0veXl5eVxyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUubWF0Y2goL14oMFsxLTldfDFcXGR8MlxcZHwzWzAxXSlcXC8oMFsxLTldfDFbMC0yXSlcXC8oMTl8MjApXFxkezJ9JC8pKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZERhdGU6IHRydWUgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyB0aW1lVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgLy8gZm9ybWF0byBoaDptbVxyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubWF0Y2goL15bMC05XVswLTldOlswLTldWzAtOV0kLykpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZFRpbWU6IHRydWUgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbWFpbFZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIC8vIFJGQyAyODIyIGNvbXBsaWFudCByZWdleFxyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUubWF0Y2goL1xcUytAKFstXFx3XStcXC4pK1xcdysvZykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4geyBpbnZhbGlkRW1haWxBZGRyZXNzOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZW1haWxDU1ZWYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICAvLyBSRkMgMjgyMiBjb21wbGlhbnQgcmVnZXhcclxuICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlLm1hdGNoKC9eKCggKSpbXFx3XFwuXStAKFstXFx3XStcXC4pK1xcdysoICkqKSgsKCApKltcXHdcXC5dK0AoWy1cXHddK1xcLikrXFx3KyggKSopKiQvZykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4geyBpbnZhbGlkRW1haWxDU1ZBZGRyZXNzOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbG9naW5WYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZS5tYXRjaCgvXlthLXowLTlfLV17MywxNX0vKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGludmFsaWRMb2dpbjogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV0aXF1ZXRhVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUubWF0Y2goL15bYS16QS1aMC05Xy1dKy8pKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZEV0aXF1ZXRhOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbm9tYnJlVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgaWYgKFxyXG4gICAgICAhY29udHJvbC52YWx1ZSB8fFxyXG4gICAgICAvXihbQS1aYS16MC05X1xcLlxcLFxcJ1xcXCJcXChcXClcXDtcXDpcXC1cXC9cXEBcXD9cXCVcXD9cXMK/XFwmXFwrXFwtXFwqXFwvXFwgXFxuXFxywrrCqifCtOKAmcK3w6/DvD9gw6HDqcOtw7PDusOBw4nDjcOTw5rDoMOow6zDssO5w4DDiMOMw5LDmcOEw4vDj8OWw5zDpMOrw6/DtsO8w7HDkcOnw4fCoSEjXSkrJC8udGVzdChjb250cm9sLnZhbHVlKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZE5hbWU6IHRydWUgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBjb2RpZ29WYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZS5tYXRjaCgvXihbMC05XSkrJC8pKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZENvZGlnbzogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFsZmFudW1lcmljb1ZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlLm1hdGNoKC9eKFtBLVowLTlfXFwuXFwtw5HDh10pKyQvKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGludmFsaWRBbGZhbnVtZXJpY286IHRydWUgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBjYW50aWRhZFZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIC8vIHZhbHVlIGlzIGVpdGhlciBlbXB0eSwgb3IgYSBudW1iZXIgd2l0aG91dCBkZWNpbWFsc1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUgPT09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBsZXQgbnVtID0gTnVtYmVyKGNvbnRyb2wudmFsdWUpO1xyXG4gICAgaWYgKCFpc05hTihudW0pICYmIG51bSAlIDEgPT0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGludmFsaWRDYW50aWRhZDogdHJ1ZSB9O1xyXG4gIH1cclxuXHJcbiAgLyogVmFsaWRhIG7Dum1lcm9zIGVudGVyb3MgKHNpbiBkZWNpbWFsZXMpIHBvc2l0aXZvcyAoPj0wKSAqL1xyXG4gIHN0YXRpYyBlbnRlcm9Qb3NpdGl2b1ZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIC8vIHZhbHVlIGlzIGVpdGhlciBlbXB0eSwgb3IgYSBudW1iZXIgd2l0aG91dCBkZWNpbWFsc1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUgPT09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBsZXQgbnVtID0gTnVtYmVyKGNvbnRyb2wudmFsdWUpO1xyXG4gICAgaWYgKCFpc05hTihudW0pICYmIG51bSAlIDEgPT0gMCAmJiBudW0gPj0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGludmFsaWRFbnRlcm9Qb3NpdGl2bzogdHJ1ZSB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGVudGVyb1Bvc2l0aXZvVmFsaWRhdG9ySW5jbHV5ZUNlcm9WYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICAvLyB2YWx1ZSBpcyBlaXRoZXIgZW1wdHksIG9yIGEgcG9zaXRpdmUgbnVtYmVyIChpbmNsdWRpbmcgMCkgd2l0aG91dCBkZWNpbWFsc1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUgPT09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBsZXQgbnVtID0gTnVtYmVyKGNvbnRyb2wudmFsdWUpO1xyXG4gICAgaWYgKCFpc05hTihudW0pICYmIG51bSAlIDEgPT0gMCAmJiBudW0gPj0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGludmFsaWRFbnRlcm9Qb3NpdGl2b0luY2x1eWVDZXJvOiB0cnVlIH07XHJcbiAgfVxyXG5cclxuICAvKiBWYWxpZGEgbsO6bWVyb3MgZW50ZXJvcyAoY29uIGRlY2ltYWxlcykgKi9cclxuICBzdGF0aWMgY2FudGlkYWREZWNpbWFsVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgLy8gdmFsdWUgaXMgZWl0aGVyIGVtcHR5LCBvciBhIG51bWJlciAoaW5jbHVkaW5nIGRlY2ltYWxzKVxyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUgPT09IFwiXCIgfHwgIWlzTmFOKE51bWJlcihjb250cm9sLnZhbHVlKSkpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4geyBpbnZhbGlkQ2FudGlkYWREZWNpbWFsOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBWYWxpZGEgbsO6bWVyb3MgZW50ZXJvcyAoY29uIGRlY2ltYWxlcykgcG9zaXRpdm9zICg+PTApICovXHJcbiAgc3RhdGljIG51bWVyb1Bvc2l0aXZvVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUgPT09IFwiXCIgfHwgKCFpc05hTihOdW1iZXIoY29udHJvbC52YWx1ZSkpICYmIE51bWJlcihjb250cm9sLnZhbHVlKSA+PSAwKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGludmFsaWROdW1lcm9Qb3NpdGl2bzogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogVmFsaWRhIGPDs2RpZ28gcG9zdGFsIChudW1lcm8gZGUgNSBkw61naXRvcykgKi9cclxuICBzdGF0aWMgY29kaWdvUG9zdGFsVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IChjb250cm9sLnZhbHVlLm1hdGNoKC9eKFswLTldKSskLykgJiYgY29udHJvbC52YWx1ZS5sZW5ndGggPT0gNSkpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4geyBpbnZhbGlkQ29kaWdvUG9zdGFsOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBWYWxpZGEgdGVsZWZvbm8gKG51bWVybyBkZSA5IGTDrWdpdG9zKSAqL1xyXG4gIHN0YXRpYyB0ZWxlZm9ub1ZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlLm1hdGNoKC9eWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldJC8pKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZFRlbGVmb25vOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBWYWxpZGEgdGVsZWZvbm8gKG51bWVybyBkZSA5IGTDrWdpdG9zKSAqL1xyXG4gIHN0YXRpYyB0ZWxlZm9ub0NTVlZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlLm1hdGNoKC9eWzAtOV17OX0oKCAqLCAqKVswLTldezl9KSokL2cpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZFRlbGVmb25vQ1NWOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYnVpbGRMb25naXR1ZFZhbGlkYXRvcihsb246IG51bWJlcikge1xyXG4gICAgbGV0IGVycm9yS2V5ID0gXCJpbnZhbGlkTG9uZ2l0dWRcIjtcclxuICAgIGxldCBlcnJvcktleUluZGV4ID0gZXJyb3JLZXkgKyBcIiBfXCIgKyBsb24udG9TdHJpbmcoKTtcclxuICAgIEN1c3RvbVZhbGlkYXRvcnMuY29uZmlnW2Vycm9yS2V5SW5kZXhdID0gQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShlcnJvcktleSwgeyBsb246IGxvbiB9KTtcclxuICAgIHJldHVybiAoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZS5sZW5ndGggPD0gbG9uKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHJldCA9IHt9O1xyXG4gICAgICAgIHJldFtlcnJvcktleUluZGV4XSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBidWlsZENhbnRpZGFkTWluVmFsaWRhdG9yKG1pbjogbnVtYmVyKSB7XHJcbiAgICBsZXQgZXJyb3JLZXkgPSBcImludmFsaWRDYW50aWRhZE1pblwiO1xyXG4gICAgbGV0IGVycm9yS2V5SW5kZXggPSBlcnJvcktleSArIFwiIF9cIiArIG1pbi50b1N0cmluZygpO1xyXG4gICAgQ3VzdG9tVmFsaWRhdG9ycy5jb25maWdbZXJyb3JLZXlJbmRleF0gPSBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKGVycm9yS2V5LCB7IG1pbjogbWluIH0pO1xyXG4gICAgcmV0dXJuIChjb250cm9sKSA9PiB7XHJcbiAgICAgIGlmIChjb250cm9sLnZhbHVlID09PSBcIlwiIHx8IGNvbnRyb2wudmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgIGxldCBudW0gPSBOdW1iZXIoY29udHJvbC52YWx1ZSk7XHJcbiAgICAgIGlmIChpc05hTihudW0pIHx8IG51bSA+PSBtaW4pIHtcclxuICAgICAgICAvLyBzaSBubyBlcyBudW3DqXJpY28gbyBlbCB2YWxvciA+PSBtaW4sIHBhc2EgbGEgdmFsaWRhY2nDs25cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgcmV0ID0ge307XHJcbiAgICAgICAgcmV0W2Vycm9yS2V5SW5kZXhdID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGJ1aWxkQ2FudGlkYWRNYXhWYWxpZGF0b3IobWF4OiBudW1iZXIpIHtcclxuICAgIGxldCBlcnJvcktleSA9IFwiaW52YWxpZENhbnRpZGFkTWF4XCI7XHJcbiAgICBsZXQgZXJyb3JLZXlJbmRleCA9IGVycm9yS2V5ICsgXCJfXCIgKyBtYXgudG9TdHJpbmcoKTtcclxuICAgIEN1c3RvbVZhbGlkYXRvcnMuY29uZmlnW2Vycm9yS2V5SW5kZXhdID0gQ3VzdG9tVmFsaWRhdG9ycy5idWlsZEVycm9yTWVzc2FnZShlcnJvcktleSwgeyBtYXg6IG1heCB9KTtcclxuICAgIHJldHVybiAoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbC52YWx1ZSA9PT0gXCJcIiB8fCBjb250cm9sLnZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICBsZXQgbnVtID0gTnVtYmVyKGNvbnRyb2wudmFsdWUpO1xyXG4gICAgICBpZiAoaXNOYU4obnVtKSB8fCBudW0gPD0gbWF4KSB7XHJcbiAgICAgICAgLy8gc2kgbm8gZXMgbnVtw6lyaWNvIG8gZWwgdmFsb3Ig4omkIG1heCwgcGFzYSBsYSB2YWxpZGFjacOzblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCByZXQgPSB7fTtcclxuICAgICAgICByZXRbZXJyb3JLZXlJbmRleF0gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYnVpbGRDYW50aWRhZE1pbk1heFZhbGlkYXRvcihtaW46IG51bWJlciwgbWF4OiBudW1iZXIpIHtcclxuICAgIGxldCBlcnJvcktleSA9IFwiaW52YWxpZENhbnRpZGFkTWluTWF4XCI7XHJcbiAgICBsZXQgZXJyb3JLZXlJbmRleCA9IGVycm9yS2V5ICsgXCJfXCIgKyBtaW4udG9TdHJpbmcoKSArIFwiX1wiICsgbWF4LnRvU3RyaW5nKCk7XHJcbiAgICBDdXN0b21WYWxpZGF0b3JzLmNvbmZpZ1tlcnJvcktleUluZGV4XSA9IEN1c3RvbVZhbGlkYXRvcnMuYnVpbGRFcnJvck1lc3NhZ2UoZXJyb3JLZXksIHtcclxuICAgICAgbWluOiBtaW4sXHJcbiAgICAgIG1heDogbWF4XHJcbiAgICB9KTtcclxuICAgIHJldHVybiAoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbC52YWx1ZSA9PT0gXCJcIiB8fCBjb250cm9sLnZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICBsZXQgbnVtID0gTnVtYmVyKGNvbnRyb2wudmFsdWUpO1xyXG4gICAgICBpZiAoIWlzTmFOKG51bSkgJiYgbnVtID49IG1pbiAmJiBudW0gPD0gbWF4KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHJldCA9IHt9O1xyXG4gICAgICAgIHJldFtlcnJvcktleUluZGV4XSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwb3JjZW50YWplVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgLy8gZXhwZWN0ZWQgYSBudW1lcmljIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwXHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZSA9PT0gXCJcIikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBuID0gTnVtYmVyKGNvbnRyb2wudmFsdWUpO1xyXG4gICAgICBpZiAoIWlzTmFOKG4pICYmIG4gPj0gMCAmJiBuIDw9IDEwMCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IGludmFsaWRQb3JjZW50YWplOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyB1cmxWYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBsZXQgcGF0dGVybiA9IG5ldyBSZWdFeHAoXHJcbiAgICAgIFwiXihodHRwcz86XFxcXC9cXFxcLyk/XCIgKyAvLyBwcm90b2NvbFxyXG4gICAgICAgIFwiKCgoW2EtelxcXFxkXShbYS16XFxcXGQtXSpbYS16XFxcXGRdKSopXFxcXC4/KStbYS16XXsyLH18XCIgKyAvLyBkb21haW4gbmFtZVxyXG4gICAgICAgIFwiKChcXFxcZHsxLDN9XFxcXC4pezN9XFxcXGR7MSwzfSkpXCIgKyAvLyBPUiBpcCAodjQpIGFkZHJlc3NcclxuICAgICAgICBcIihcXFxcOlxcXFxkKyk/KFxcXFwvWy1hLXpcXFxcZCVfLn4rXSopKlwiICsgLy8gcG9ydCBhbmQgcGF0aFxyXG4gICAgICAgIFwiKFxcXFw/WzsmYS16XFxcXGQlXy5+Kz0tXSopP1wiICsgLy8gcXVlcnkgc3RyaW5nXHJcbiAgICAgICAgXCIoXFxcXCNbLWEtelxcXFxkX10qKT8kXCIsXHJcbiAgICAgIFwiaVwiXHJcbiAgICApOyAvLyBmcmFnbWVudCBsb2NhdG9yXHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgcGF0dGVybi50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZFVybDogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHBhdGhWYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBsZXQgcGF0dGVybiA9IG5ldyBSZWdFeHAoXHJcbiAgICAgIFwiXigoXFxcXC8pP1stYS16XFxcXGQlXy5+K10qKSpcIiArIC8vIHBvcnQgYW5kIHBhdGhcclxuICAgICAgICBcIihcXFxcP1s7JmEtelxcXFxkJV8ufis9LV0qKT9cIiArIC8vIHF1ZXJ5IHN0cmluZ1xyXG4gICAgICAgIFwiKFxcXFwjWy1hLXpcXFxcZF9dKik/JFwiLFxyXG4gICAgICBcImlcIlxyXG4gICAgKTsgLy8gZnJhZ21lbnQgbG9jYXRvclxyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IHBhdHRlcm4udGVzdChjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGludmFsaWRQYXRoOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRvcm5hIHVuIHN0cmluZyBjb24gdG9kb3MgbG9zIGVycm9yZXMgcXVlIGNvbnRpZW5lIGVsIGZvcm11bGFyaW8sIHNlcGFyYWRvcyBwb3Igc2FsdG9zIGRlIGzDrW5lYS5cclxuICAgKi9cclxuICBzdGF0aWMgdmFsaWRhdGVGb3JtKGZvcm06IEZvcm1Hcm91cCwgcHJlZml4OiBzdHJpbmdbXSA9IFtdKTogRXJyb3JWYWxpZGF0ZUZvcm1bXSB7XHJcbiAgICBsZXQgbWVuc2FqZXM6IEVycm9yVmFsaWRhdGVGb3JtW10gPSBbXTtcclxuICAgIC8vIGVycm9yZXMgZW4gdMOpcm1pbm9zIGRlIGdydXBvXHJcbiAgICBmb3IgKGxldCBlcnJvcktleSBpbiBmb3JtLmVycm9ycykge1xyXG4gICAgICBsZXQgcHIgPSBwcmVmaXggPyBgJHtwcmVmaXh9OiBgIDogXCJcIjtcclxuICAgICAgbWVuc2FqZXMucHVzaCh7IHByZWZpeGVzOiBbcHJdLCBlcnJvck1lc3NhZ2U6IEN1c3RvbVZhbGlkYXRvcnMuY29uZmlnW2Vycm9yS2V5XSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBjb250cm9sS2V5IGluIGZvcm0uY29udHJvbHMpIHtcclxuICAgICAgbGV0IGNvbnRyb2wgPSBmb3JtLmNvbnRyb2xzW2NvbnRyb2xLZXldO1xyXG4gICAgICBpZiAoIWNvbnRyb2wudmFsaWQpIHtcclxuICAgICAgICAvLyBubyBlcyB2w6FsaWRvLCBoYXkgbWVuc2FqZXMgcXVlIHJlY3VwZXJhclxyXG4gICAgICAgIGxldCBjb250cm9sTGFiZWw6IHN0cmluZ1tdID0gcHJlZml4LmNvbmNhdChbY29udHJvbEtleV0pOyAvLyBub21icmUgYXBpbGFkb1xyXG5cclxuICAgICAgICAvLyBkZXRlY3RhbW9zIHNpIGVzIHVuIGNhbXBvIG8gdW4gZm9ybXVsYXJpbyBhbmlkYWRvXHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgICAgIC8vIGVzIHVuIGZvcm11bGFyaW8gYW5pZGFkbywgc2VndWltb3MgYmFqYW5kbyByZWN1cnNpdmFtZW50ZVxyXG4gICAgICAgICAgbWVuc2FqZXMgPSBtZW5zYWplcy5jb25jYXQoQ3VzdG9tVmFsaWRhdG9ycy52YWxpZGF0ZUZvcm0oY29udHJvbCwgY29udHJvbExhYmVsKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgICAvLyBlcyB1biBjYW1wbyBmaW5hbCwgYcOxYWRpbW9zIHN1cyBtZW5zYWplcyBkZSBlcnJvclxyXG4gICAgICAgICAgZm9yIChsZXQgZXJyb3JLZXkgaW4gY29udHJvbC5lcnJvcnMpIHtcclxuICAgICAgICAgICAgbWVuc2FqZXMucHVzaCh7IHByZWZpeGVzOiBjb250cm9sTGFiZWwsIGVycm9yTWVzc2FnZTogQ3VzdG9tVmFsaWRhdG9ycy5jb25maWdbZXJyb3JLZXldIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcclxuICAgICAgICAgIC8vIGVzIHVuYSBsaXN0YSBkZSBjb250cm9sZXMgYW5pZGFkYSwgbGEgcmVjb3JyZW1vc1xyXG4gICAgICAgICAgY29udHJvbC5jb250cm9scyAmJlxyXG4gICAgICAgICAgICBjb250cm9sLmNvbnRyb2xzLmZvckVhY2goKGFyckNvbnRyb2wsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGFyckNvbnRyb2xMYWJlbDogc3RyaW5nW10gPSBjb250cm9sTGFiZWwuY29uY2F0KFtpbmRleC50b1N0cmluZygpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKGFyckNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIC8vIGVzIHVuYSBsaXN0YSBkZSBGb3JtR3JvdXBzLCBiYWphbW9zIGEgZWxsb3MgcmVjdXJzaXZhbWVudGVcclxuICAgICAgICAgICAgICAgIG1lbnNhamVzID0gbWVuc2FqZXMuY29uY2F0KEN1c3RvbVZhbGlkYXRvcnMudmFsaWRhdGVGb3JtKGFyckNvbnRyb2wsIGFyckNvbnRyb2xMYWJlbCkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyQ29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgLy8gZXMgdW5hIGxpc3RhIGRlIEZvcm1Db250cm9scywgbG9zIHRyYXRhbW9zIGRlc2RlIGFxdcOtXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBlcnJvcktleSBpbiBjb250cm9sLmVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgICBtZW5zYWplcy5wdXNoKHsgcHJlZml4ZXM6IGFyckNvbnRyb2xMYWJlbCwgZXJyb3JNZXNzYWdlOiBDdXN0b21WYWxpZGF0b3JzLmNvbmZpZ1tlcnJvcktleV0gfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vID8/PyDCv1VuIGFycmF5IGRlIGFycmF5cz8gTm8gZXN0w6EgcHJldmlzdG8uXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIltDdXN0b21WYWxpZGF0b3JzXSBVbmV4cGVjdGVkIEZvcm1BcnJheSB3aXRoIG5lc3RlZCBGb3JtQXJyYXlzXCIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWVuc2FqZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWNpYmUgdW4gb2JqZXRvIGNvbiBsYXMgcHJvcGllZGFkZXMge2ZpZWxkVGlwbywgZmllbGROdW1lcm99IHkgZGV2dWVsdmUgdW4gdmFsaWRhZG9yIGRlIGZvcm11bGFyaW8gcGFyYSBkb2N1bWVudG9zIGRlIGlkZW50aWZpY2FjacOzbi5cclxuICAgKiBFbCBlcnJvciBxdWUgcHVlZGUgZ2VuZXJhcnNlIGVzIGRlbCB0aXBvICdpbnZhbGlkTnVtZXJvRG9jdW1lbnRvVGlwb0RvY3VtZW50bycuXHJcbiAgICovXHJcbiAgc3RhdGljIGJ1aWxkTnVtZXJvRG9jdW1lbnRvVmFsaWRhdG9yKHsgZmllbGRUaXBvID0gXCJkb2N1bWVudG9UaXBvXCIsIGZpZWxkTnVtZXJvID0gXCJkb2N1bWVudG9OdW1lcm9cIiB9ID0ge30pOiBWYWxpZGF0b3JGbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZnVuY3Rpb24gKGc6IEZvcm1Hcm91cCkge1xyXG4gICAgICBpZiAoIWcpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBsZXQgZG9jdW1lbnRvVGlwbyA9IGcuZ2V0KGZpZWxkVGlwbykgJiYgZy5nZXQoZmllbGRUaXBvKS52YWx1ZTtcclxuICAgICAgbGV0IGRvY3VtZW50b051bWVybyA9IGcgJiYgZy5nZXQoZmllbGROdW1lcm8pICYmIGcuZ2V0KGZpZWxkTnVtZXJvKS52YWx1ZTtcclxuICAgICAgbGV0IGludmFsaWQgPSBmYWxzZTtcclxuICAgICAgaWYgKGRvY3VtZW50b1RpcG8gJiYgZG9jdW1lbnRvTnVtZXJvKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50b1RpcG8gPT0gXCJETklcIikge1xyXG4gICAgICAgICAgaW52YWxpZCA9ICFDdXN0b21WYWxpZGF0b3JzLmlzVmFsaWRETkkoZG9jdW1lbnRvTnVtZXJvKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50b1RpcG8gPT0gXCJDSUZcIikge1xyXG4gICAgICAgICAgaW52YWxpZCA9ICFDdXN0b21WYWxpZGF0b3JzLmlzVmFsaWRDSUYoZG9jdW1lbnRvTnVtZXJvKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50b1RpcG8gPT0gXCJOSUZcIikge1xyXG4gICAgICAgICAgLy9pbnZhbGlkID0gIWRvY3VtZW50b051bWVyby5tYXRjaCgvXlswLTldezh9W2EtenxBLVpdJC8pO1xyXG4gICAgICAgICAgaW52YWxpZCA9ICFDdXN0b21WYWxpZGF0b3JzLmlzVmFsaWROSUYoZG9jdW1lbnRvTnVtZXJvKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50b1RpcG8gPT0gXCJOSUVcIikge1xyXG4gICAgICAgICAgaW52YWxpZCA9ICFDdXN0b21WYWxpZGF0b3JzLmlzVmFsaWROSUUoZG9jdW1lbnRvTnVtZXJvKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpbnZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgaW52YWxpZE51bWVyb0RvY3VtZW50b1RpcG9Eb2N1bWVudG86IHRydWUgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbmlmVmFsaWRhdG9yKGNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IEN1c3RvbVZhbGlkYXRvcnMuaXNWYWxpZE5JRihjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGludmFsaWROSUY6IHRydWUgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBuaWVWYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgQ3VzdG9tVmFsaWRhdG9ycy5pc1ZhbGlkTklFKGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZE5JRTogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIG5pZk5pZVZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBDdXN0b21WYWxpZGF0b3JzLmlzVmFsaWROSUYoY29udHJvbC52YWx1ZSkgfHwgQ3VzdG9tVmFsaWRhdG9ycy5pc1ZhbGlkTklFKGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZE5JRk5JRTogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNpZlZhbGlkYXRvcihjb250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGxldCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgvXlthLXp8QS1aXVswLTldezd9W2EtenxBLVp8MC05XS8pOyAvLyBUT0RPXHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgcGF0dGVybi50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZENJRjogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFueW9WYWxpZGF0b3IoY29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBsZXQgcGF0dGVybiA9IG5ldyBSZWdFeHAoL15bMC05XXs0fSQvKTsgLy8gVE9ET1xyXG4gICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IHBhdHRlcm4udGVzdChjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGludmFsaWRBbnlvOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNWYWxpZEROSSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTsgLy8gwr9kZWJlcsOtYW1vcyB2YWxpZGFyIGFsZ28/IENvbiBsZXRyYSB5YSB0ZW5lbW9zIGVsIE5JRlxyXG4gIH1cclxuXHJcbiAgLy8gUmVmZXJlbmNpYSBwcmluY2lwYWw6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2Nhcmxvcy1tZzg5LzRhYWFmYTMxMGM5ZTRiOTFmNWZiODkwNTQwZjM4Y2FlXHJcbiAgc3RhdGljIGlzVmFsaWRDSUYodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgQ0lGX1JFR0VYID0gL14oW0FCQ0RFRkdISktMTU5QUVJTVVZXXSkoXFxkezd9KShbMC05QS1KXSkkLztcclxuICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLm1hdGNoKENJRl9SRUdFWCkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB2YWx1ZSA9IHZhbHVlLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB2YXIgbWF0Y2ggPSB2YWx1ZS5tYXRjaChDSUZfUkVHRVgpO1xyXG4gICAgY29uc3QgbGV0dGVyID0gbWF0Y2hbMV07XHJcbiAgICBjb25zdCBudW1iZXIgPSBtYXRjaFsyXTtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSBtYXRjaFszXTtcclxuXHJcbiAgICB2YXIgZXZlbl9zdW0gPSAwO1xyXG4gICAgdmFyIG9kZF9zdW0gPSAwO1xyXG4gICAgdmFyIG46IG51bWJlcjtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlci5sZW5ndGg7IGkrKykge1xyXG4gICAgICBuID0gcGFyc2VJbnQobnVtYmVyW2ldLCAxMCk7XHJcbiAgICAgIC8vIE9kZCBwb3NpdGlvbnMgKEV2ZW4gaW5kZXggZXF1YWxzIHRvIG9kZCBwb3NpdGlvbi4gaT0wIGVxdWFscyBmaXJzdCBwb3NpdGlvbilcclxuICAgICAgaWYgKGkgJSAyID09PSAwKSB7XHJcbiAgICAgICAgLy8gT2RkIHBvc2l0aW9ucyBhcmUgbXVsdGlwbGllZCBmaXJzdFxyXG4gICAgICAgIG4gKj0gMjtcclxuICAgICAgICAvLyBJZiB0aGUgbXVsdGlwbGljYXRpb24gaXMgYmlnZ2VyIHRoYW4gMTAgd2UgbmVlZCB0byBhZGp1c3RcclxuICAgICAgICBvZGRfc3VtICs9IG4gPCAxMCA/IG4gOiBuIC0gOTtcclxuICAgICAgICAvLyBFdmVuIHBvc2l0aW9ucywganVzdCBzdW0gdGhlbVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGV2ZW5fc3VtICs9IG47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250cm9sX2RpZ2l0ID0gKDEwIC0gTnVtYmVyKChldmVuX3N1bSArIG9kZF9zdW0pLnRvU3RyaW5nKCkuc3Vic3RyKC0xKSkpLnRvU3RyaW5nKCkuc3Vic3RyKC0xKTtcclxuICAgIGNvbnN0IGNvbnRyb2xfbGV0dGVyID0gXCJKQUJDREVGR0hJXCIuc3Vic3RyKE51bWJlcihjb250cm9sX2RpZ2l0KSwgMSk7XHJcblxyXG4gICAgLy8gQ29udHJvbCBtdXN0IGJlIGEgZGlnaXRcclxuICAgIGlmIChsZXR0ZXIubWF0Y2goL1tBQkVIXS8pKSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sID09PSBjb250cm9sX2RpZ2l0O1xyXG4gICAgfVxyXG4gICAgLy8gQ29udHJvbCBtdXN0IGJlIGEgbGV0dGVyICggcmVmZXJlbmNpYTogaHR0cHM6Ly9lcy53aWtpcGVkaWEub3JnL3dpa2kvQyVDMyVCM2RpZ29fZGVfaWRlbnRpZmljYWNpJUMzJUIzbl9maXNjYWwgKVxyXG4gICAgZWxzZSBpZiAobGV0dGVyLm1hdGNoKC9bUFFSU1dOXS8pKSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sID09PSBjb250cm9sX2xldHRlcjtcclxuICAgIH1cclxuICAgIC8vIENhbiBiZSBlaXRoZXJcclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gY29udHJvbCA9PT0gY29udHJvbF9kaWdpdCB8fCBjb250cm9sID09PSBjb250cm9sX2xldHRlcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnktdmFsaWRhdGlvbi9qcXVlcnktdmFsaWRhdGlvbi9ibG9iL21hc3Rlci9zcmMvYWRkaXRpb25hbC9uaWZFUy5qc1xyXG4gIHN0YXRpYyBpc1ZhbGlkTklGKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHZhbHVlID0gdmFsdWUudG9VcHBlckNhc2UoKTtcclxuICAgIC8vIEJhc2ljIGZvcm1hdCB0ZXN0XHJcbiAgICBpZiAoIXZhbHVlLm1hdGNoKFwiKCheW0EtWl17MX1bMC05XXs3fVtBLVowLTldezF9JHxeW1RdezF9W0EtWjAtOV17OH0kKXxeWzAtOV17OH1bQS1aXXsxfSQpXCIpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIFRlc3QgTklGXHJcbiAgICBpZiAoL15bMC05XXs4fVtBLVpdezF9JC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIFwiVFJXQUdNWUZQRFhCTkpaU1FWSExDS0VcIi5jaGFyQXQoTnVtYmVyKHZhbHVlLnN1YnN0cmluZyg4LCAwKSkgJSAyMykgPT09IHZhbHVlLmNoYXJBdCg4KTtcclxuICAgIH1cclxuICAgIC8vIFRlc3Qgc3BlY2lhbHMgTklGIChzdGFydHMgd2l0aCBLLCBMIG9yIE0pXHJcbiAgICBpZiAoL15bS0xNXXsxfS8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlWzhdICE9PSBcIlRSV0FHTVlGUERYQk5KWlNRVkhMQ0tFXCIuY2hhckF0KE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoOCwgMSkpICUgMjMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzVmFsaWROSUUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgLy8gVW4gTklFIHNpZ3VlIHVuYSB2YWxpZGFjacOzbiBtdXkgc2ltaWxhciBhIGxhIGRlIHVuIEROSSwgY29uIGxhIGRpZmVyZW5jaWFcclxuICAgIC8vIGRlIHF1ZSBlbiBsdWdhciBkZSBzZXIgb2NobyBuw7ptZXJvcyArIGxldHJhIGRlYmUgc2VyIGxldHJhICsgc2lldGUgbsO6bWVyb3MgKyBsZXRyYSxcclxuICAgIC8vIHNpZW5kbyBsYSBwcmltZXJhIGxldHJhIFgsIFkgbyBaIHN1c3RpdHVpYmxlIHBvciAwLCAxIG8gMiByZXNwZWN0aXZhbWVudGUuXHJcbiAgICBsZXQgbmllUmVnRXggPSBuZXcgUmVnRXhwKC9eW1hZWl17MX1bMC05XXs3fVtUUldBR01ZRlBEWEJOSlpTUVZITENLRVRdezF9JC9naSk7XHJcblxyXG4gICAgLy8gU2kgbm8gdGllbmUgZWwgZm9ybWF0byBiw6FzaWNvLCBubyBlcyB2w6FsaWRvXHJcbiAgICBpZiAoIW5pZVJlZ0V4LnRlc3QodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdXN0aXR1aW1vcyBsYSBwcmltZXJhIGxldHJhIHBvciBlbCBuw7ptZXJvIGVxdWl2YWxlbnRlIHkgYXByb3ZlY2hhbW9zIGxhIHZhbGlkYWNpw7NuIGRlIE5JRlxyXG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvXltYXS8sIFwiMFwiKS5yZXBsYWNlKC9eW1ldLywgXCIxXCIpLnJlcGxhY2UoL15bWl0vLCBcIjJcIik7XHJcblxyXG4gICAgcmV0dXJuIEN1c3RvbVZhbGlkYXRvcnMuaXNWYWxpZE5JRih2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmFuZ29GZWNoYXNWYWxpZGF0b3IoeyBmaWVsZEZlY2hhSW5pY2lvID0gXCJmZWNoYUluaWNpb1wiLCBmaWVsZEZlY2hhRmluID0gXCJmZWNoYUZpblwiIH0gPSB7fSk6IFZhbGlkYXRvckZuIHtcclxuICAgIGxldCByZXN1bHQgPSBmdW5jdGlvbiAoZzogRm9ybUdyb3VwKSB7XHJcbiAgICAgIGlmICghZykge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBmZWNoYUluaWNpbyA9IGcuZ2V0KGZpZWxkRmVjaGFJbmljaW8pICYmIGcuZ2V0KGZpZWxkRmVjaGFJbmljaW8pLnZhbHVlO1xyXG4gICAgICBsZXQgZmVjaGFGaW4gPSBnICYmIGcuZ2V0KGZpZWxkRmVjaGFGaW4pICYmIGcuZ2V0KGZpZWxkRmVjaGFGaW4pLnZhbHVlO1xyXG4gICAgICBpZiAoZmVjaGFJbmljaW8gJiYgZmVjaGFGaW4pIHtcclxuICAgICAgICBsZXQgaW5pY2lvID0gR2VuZXJhbFV0aWxzLnN0cmluZ1Nob3J0VG9EYXRlKGZlY2hhSW5pY2lvKTtcclxuICAgICAgICBsZXQgZmluID0gR2VuZXJhbFV0aWxzLnN0cmluZ1Nob3J0VG9EYXRlKGZlY2hhRmluKTtcclxuICAgICAgICBpZiAoaW5pY2lvID4gZmluKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBpbnZhbGlkUmFuZ29GZWNoYUZpblBvc3RlcmlvckluaWNpbzogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJhbmdvSG9yYXNWYWxpZGF0b3IoeyBmaWVsZEhvcmFJbmljaW8gPSBcImhvcmFJbmljaW9cIiwgZmllbGRIb3JhRmluID0gXCJob3JhRmluXCIgfSA9IHt9KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgbGV0IHJlc3VsdCA9IGZ1bmN0aW9uIChnOiBGb3JtR3JvdXApIHtcclxuICAgICAgaWYgKCFnKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGluaWNpbyA9IGcuZ2V0KGZpZWxkSG9yYUluaWNpbykgJiYgZy5nZXQoZmllbGRIb3JhSW5pY2lvKS52YWx1ZSAmJiBHZW5lcmFsVXRpbHMuc3RyaW5nVG9UaW1lKGcuZ2V0KGZpZWxkSG9yYUluaWNpbykudmFsdWUpO1xyXG4gICAgICBsZXQgZmluID0gZyAmJiBnLmdldChmaWVsZEhvcmFGaW4pICYmIGcuZ2V0KGZpZWxkSG9yYUZpbikudmFsdWUgJiYgR2VuZXJhbFV0aWxzLnN0cmluZ1RvVGltZShnLmdldChmaWVsZEhvcmFGaW4pLnZhbHVlKTtcclxuICAgICAgaWYgKGluaWNpbyAmJiBmaW4gJiYgaW5pY2lvID49IGZpbikge1xyXG4gICAgICAgIHJldHVybiB7IGludmFsaWRSYW5nb0hvcmFGaW5Qb3N0ZXJpb3JJbmljaW86IHRydWUgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRhdGVUaW1lTm90QWZ0ZXJDdXJyZW50RGF0ZVZhbGlkYXRvcih7IGZpZWxkZmVjaGEgPSBcImZlY2hhXCIsIGZpZWxkSG9yYSA9IFwiaG9yYVwiIH0gPSB7fSk6IFZhbGlkYXRvckZuIHtcclxuICAgIGxldCByZXN1bHQgPSBmdW5jdGlvbiAoZzogRm9ybUdyb3VwKSB7XHJcbiAgICAgIGlmICghZykge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBjYW1wb0ZlY2hhID0gZy5nZXQoZmllbGRmZWNoYSk7XHJcbiAgICAgIGxldCBjYW1wb0hvcmEgPSBnLmdldChmaWVsZEhvcmEpO1xyXG4gICAgICBpZiAoY2FtcG9GZWNoYSAmJiBjYW1wb0ZlY2hhLnZhbHVlICYmIGNhbXBvRmVjaGEudmFsdWUubWF0Y2goL14oMFsxLTldfDFcXGR8MlxcZHwzWzAxXSlcXC8oMFsxLTldfDFbMC0yXSlcXC8oMTl8MjApXFxkezJ9JC8pKSB7XHJcbiAgICAgICAgbGV0IGRhdGUgPSBHZW5lcmFsVXRpbHMuZ2V0U3RyaW5nQXNEYXRlKGNhbXBvRmVjaGEudmFsdWUpO1xyXG4gICAgICAgIGlmIChjYW1wb0hvcmEgJiYgY2FtcG9Ib3JhLnZhbHVlICYmIGNhbXBvSG9yYS52YWx1ZS5tYXRjaCgvXlswLTldWzAtOV06WzAtOV1bMC05XSQvKSkge1xyXG4gICAgICAgICAgZGF0ZS5zZXRIb3VycyhjYW1wb0hvcmEudmFsdWUuc3BsaXQoXCI6XCIpWzBdKTtcclxuICAgICAgICAgIGRhdGUuc2V0TWludXRlcyhjYW1wb0hvcmEudmFsdWUuc3BsaXQoXCI6XCIpWzFdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRhdGUgPCBuZXcgRGF0ZSgpKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBpbnZhbGlkRGF0ZVRpbWVOb3RBZnRlckN1cnJlbnREYXRlOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYnVpbGRNaW5Mb25naXR1ZFZhbGlkYXRvcihsb246IG51bWJlcikge1xyXG4gICAgbGV0IGVycm9yS2V5ID0gXCJpbnZhbGlkTWluTG9uZ2l0dWRcIjtcclxuICAgIGxldCBlcnJvcktleUluZGV4ID0gZXJyb3JLZXkgKyBcIl9cIiArIGxvbi50b1N0cmluZygpO1xyXG4gICAgQ3VzdG9tVmFsaWRhdG9ycy5jb25maWdbZXJyb3JLZXlJbmRleF0gPSBDdXN0b21WYWxpZGF0b3JzLmJ1aWxkRXJyb3JNZXNzYWdlKGVycm9yS2V5LCB7IGxvbjogbG9uIH0pO1xyXG4gICAgbGV0IHJlc3VsdCA9IChjb250cm9sKSA9PiB7XHJcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlLmxlbmd0aCA+PSBsb24pIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgcmV0ID0ge307XHJcbiAgICAgICAgcmV0W2Vycm9yS2V5SW5kZXhdID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbn1cclxuIl19
@@ -1785,49 +1785,47 @@ class CustomValidators {
1785
1785
  static isValidDNI(value) {
1786
1786
  return true; // ¿deberíamos validar algo? Con letra ya tenemos el NIF
1787
1787
  }
1788
- // https://github.com/jquery-validation/jquery-validation/blob/master/src/additional/cifES.js
1788
+ // Referencia principal: https://gist.github.com/carlos-mg89/4aaafa310c9e4b91f5fb890540f38cae
1789
1789
  static isValidCIF(value) {
1790
- let cifRegEx = new RegExp(/^([ABCDEFGHJKLMNPQRSUVW])(\d{7})([0-9A-J])$/gi);
1791
- let letter = value.substring(0, 1), // [ T ]
1792
- number = value.substring(1, 8), // [ P ][ P ][ N ][ N ][ N ][ N ][ N ]
1793
- control = value.substring(8, 9), // [ C ]
1794
- all_sum = 0, even_sum = 0, odd_sum = 0, i, n, control_digit, control_letter;
1795
- function isOdd(n) {
1796
- return n % 2 === 0;
1797
- }
1798
- // Quick format test
1799
- if (value.length !== 9 || !cifRegEx.test(value)) {
1790
+ const CIF_REGEX = /^([ABCDEFGHJKLMNPQRSUVW])(\d{7})([0-9A-J])$/;
1791
+ if (!value || !value.match(CIF_REGEX))
1800
1792
  return false;
1801
- }
1802
- for (i = 0; i < number.length; i++) {
1793
+ value = value.toUpperCase();
1794
+ var match = value.match(CIF_REGEX);
1795
+ const letter = match[1];
1796
+ const number = match[2];
1797
+ const control = match[3];
1798
+ var even_sum = 0;
1799
+ var odd_sum = 0;
1800
+ var n;
1801
+ for (var i = 0; i < number.length; i++) {
1803
1802
  n = parseInt(number[i], 10);
1804
- // Odd positions
1805
- if (isOdd(i)) {
1806
- // Odd positions are multiplied first.
1803
+ // Odd positions (Even index equals to odd position. i=0 equals first position)
1804
+ if (i % 2 === 0) {
1805
+ // Odd positions are multiplied first
1807
1806
  n *= 2;
1808
1807
  // If the multiplication is bigger than 10 we need to adjust
1809
1808
  odd_sum += n < 10 ? n : n - 9;
1810
- // Even positions
1811
- // Just sum them
1809
+ // Even positions, just sum them
1812
1810
  }
1813
1811
  else {
1814
1812
  even_sum += n;
1815
1813
  }
1816
1814
  }
1817
- all_sum = even_sum + odd_sum;
1818
- control_digit = (10 - Number(all_sum.toString().substring(-1))).toString();
1819
- control_digit = parseInt(control_digit, 10) > 9 ? "0" : control_digit;
1820
- control_letter = "JABCDEFGHI".substring(control_digit, 1).toString();
1815
+ const control_digit = (10 - Number((even_sum + odd_sum).toString().substr(-1))).toString().substr(-1);
1816
+ const control_letter = "JABCDEFGHI".substr(Number(control_digit), 1);
1821
1817
  // Control must be a digit
1822
1818
  if (letter.match(/[ABEH]/)) {
1823
1819
  return control === control_digit;
1824
- // Control must be a letter
1825
1820
  }
1826
- else if (letter.match(/[KPQS]/)) {
1821
+ // Control must be a letter ( referencia: https://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal )
1822
+ else if (letter.match(/[PQRSWN]/)) {
1827
1823
  return control === control_letter;
1828
1824
  }
1829
1825
  // Can be either
1830
- return control === control_digit || control === control_letter;
1826
+ else {
1827
+ return control === control_digit || control === control_letter;
1828
+ }
1831
1829
  }
1832
1830
  // https://github.com/jquery-validation/jquery-validation/blob/master/src/additional/nifES.js
1833
1831
  static isValidNIF(value) {