@senior-gestao-pessoas/payroll-core 9.7.0 → 9.8.0-feature-hcmgdp-12459-4d08efe5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/bundles/senior-gestao-pessoas-payroll-core.umd.js +264 -68
  2. package/bundles/senior-gestao-pessoas-payroll-core.umd.js.map +1 -1
  3. package/bundles/senior-gestao-pessoas-payroll-core.umd.min.js +1 -1
  4. package/bundles/senior-gestao-pessoas-payroll-core.umd.min.js.map +1 -1
  5. package/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.d.ts +9 -1
  6. package/components/historical-pix-account/historical-pix-account.component.d.ts +1 -0
  7. package/components/input-rest-auto-complete/input-rest-auto-complete.component.d.ts +2 -0
  8. package/components/utils/cnpj-validator.d.ts +3 -0
  9. package/components/utils/format-utils/format-utils.service.d.ts +3 -2
  10. package/components/utils/generic-validators.d.ts +6 -0
  11. package/esm2015/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.js +37 -9
  12. package/esm2015/components/historical-pix-account/historical-pix-account.component.js +7 -3
  13. package/esm2015/components/input-rest-auto-complete/input-rest-auto-complete.component.js +87 -50
  14. package/esm2015/components/utils/cnpj-validator.js +54 -1
  15. package/esm2015/components/utils/format-utils/format-utils.service.js +23 -10
  16. package/esm2015/components/utils/generic-validators.js +57 -1
  17. package/esm5/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.js +41 -9
  18. package/esm5/components/historical-pix-account/historical-pix-account.component.js +7 -3
  19. package/esm5/components/input-rest-auto-complete/input-rest-auto-complete.component.js +88 -50
  20. package/esm5/components/utils/cnpj-validator.js +54 -1
  21. package/esm5/components/utils/format-utils/format-utils.service.js +23 -10
  22. package/esm5/components/utils/generic-validators.js +57 -1
  23. package/fesm2015/senior-gestao-pessoas-payroll-core.js +259 -68
  24. package/fesm2015/senior-gestao-pessoas-payroll-core.js.map +1 -1
  25. package/fesm5/senior-gestao-pessoas-payroll-core.js +264 -68
  26. package/fesm5/senior-gestao-pessoas-payroll-core.js.map +1 -1
  27. package/package.json +1 -1
  28. package/senior-gestao-pessoas-payroll-core.metadata.json +1 -1
@@ -17,27 +17,40 @@ export class FormatUtilsService {
17
17
  * Retorna o CNPJ formatado
18
18
  * @param cnpj CNPJ
19
19
  */
20
- static getFormattedCnpj(cnpj) {
20
+ static getFormattedCnpj(cnpj, isAlphanumericCNPJ) {
21
21
  if (cnpj) {
22
- return cnpj
23
- .replace(/\D/g, "")
24
- .replace(/(\d{2})(\d)/, "$1.$2")
25
- .replace(/(\d{3})(\d)/, "$1.$2")
26
- .replace(/(\d{3})(\d)/, "$1/$2")
27
- .replace(/(\d{4})(\d)/, "$1-$2");
22
+ if (isAlphanumericCNPJ) {
23
+ // Remove caracteres especiais mantendo letras e números, e converte para maiúsculas
24
+ const cleanCnpj = cnpj.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();
25
+ // Aplica formatação: AA.BBB.CCC/DDDD-EE
26
+ return cleanCnpj
27
+ .replace(/^([A-Z0-9]{2})([A-Z0-9])/, '$1.$2')
28
+ .replace(/^([A-Z0-9]{2}\.)([A-Z0-9]{3})([A-Z0-9])/, '$1$2.$3')
29
+ .replace(/^([A-Z0-9]{2}\.[A-Z0-9]{3}\.)([A-Z0-9]{3})([A-Z0-9])/, '$1$2/$3')
30
+ .replace(/^([A-Z0-9]{2}\.[A-Z0-9]{3}\.[A-Z0-9]{3}\/)([A-Z0-9]{4})([0-9])/, '$1$2-$3');
31
+ }
32
+ else {
33
+ return cnpj
34
+ .replace(/\D/g, "")
35
+ .replace(/(\d{2})(\d)/, "$1.$2")
36
+ .replace(/(\d{3})(\d)/, "$1.$2")
37
+ .replace(/(\d{3})(\d)/, "$1/$2")
38
+ .replace(/(\d{4})(\d)/, "$1-$2");
39
+ }
28
40
  }
29
41
  return null;
30
42
  }
31
43
  /**
32
44
  * Retorna a mascara do CPF/CNPJ
33
45
  * @param key Valores possíveis são CPF ou CNPJ
46
+ * @param isAlphanumericCNPJ Define se o CNPJ pode ser alfanumérico.
34
47
  */
35
- static getCpfCnpjMask(key) {
48
+ static getCpfCnpjMask(key, isAlphanumericCNPJ) {
36
49
  switch (key) {
37
50
  case "CPF":
38
51
  return "999.999.999-99";
39
52
  case "CNPJ":
40
- return "99.999.999/9999-99";
53
+ return isAlphanumericCNPJ ? "**.***.***/****-99" : "99.999.999/9999-99";
41
54
  default:
42
55
  return "";
43
56
  }
@@ -93,4 +106,4 @@ export class FormatUtilsService {
93
106
  return parseFloat(value).toFixed(2).replace('.', ',') + '%';
94
107
  }
95
108
  }
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LXV0aWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1wZXNzb2FzL3BheXJvbGwtY29yZS8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvdXRpbHMvZm9ybWF0LXV0aWxzL2Zvcm1hdC11dGlscy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxrQkFBa0I7SUFFM0I7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFXO1FBQzlCLElBQUksR0FBRyxFQUFFO1lBQ0wsT0FBTyxHQUFHO2lCQUNMLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2lCQUNsQixPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQztpQkFDL0IsT0FBTyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7aUJBQy9CLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQVk7UUFDaEMsSUFBSSxJQUFJLEVBQUU7WUFDTixPQUFPLElBQUk7aUJBQ04sT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7aUJBQ2xCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO2lCQUMvQixPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQztpQkFDL0IsT0FBTyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7aUJBQy9CLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFXO1FBQzdCLFFBQVEsR0FBRyxFQUFFO1lBQ1QsS0FBSyxLQUFLO2dCQUNOLE9BQU8sZ0JBQWdCLENBQUM7WUFDNUIsS0FBSyxNQUFNO2dCQUNQLE9BQU8sb0JBQW9CLENBQUM7WUFDaEM7Z0JBQ0ksT0FBTyxFQUFFLENBQUM7U0FDakI7SUFDTCxDQUFDO0lBRUE7Ozs7TUFJRTtJQUNILE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxlQUF1QjtRQUN0RCxJQUFJLEdBQUcsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUIsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtZQUNuQixnQ0FBZ0M7WUFDaEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsNEJBQTRCLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDL0Q7YUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLGdDQUFnQztZQUNoQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUMvRDthQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekIseUJBQXlCO1lBQ3pCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLDhCQUE4QixFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ2pFO2FBQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6QixrQkFBa0I7WUFDbEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDdEQ7YUFBTTtZQUNMLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRTtnQkFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFBRTtTQUN4RDtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxLQUFVO1FBQ3ZDLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRXpDLG1EQUFtRDtRQUNuRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN2SCxPQUFPO1NBQ1Y7UUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQywyQkFBMkIsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQWE7UUFDdkMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2hFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBGb3JtYXRVdGlsc1NlcnZpY2Uge1xuXG4gICAgLyoqXG4gICAgICogUmV0b3JuYSBvIENQRiBmb3JtYXRhZG9cbiAgICAgKiBAcGFyYW0gY3BmIENQRlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGb3JtYXR0ZWRDcGYoY3BmOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoY3BmKSB7XG4gICAgICAgICAgICByZXR1cm4gY3BmXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcRC9nLCBcIlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgXCIkMS4kMlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgXCIkMS4kMlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgXCIkMS0kMlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRvcm5hIG8gQ05QSiBmb3JtYXRhZG9cbiAgICAgKiBAcGFyYW0gY25waiBDTlBKXG4gICAgICovXG4gICAgc3RhdGljIGdldEZvcm1hdHRlZENucGooY25wajogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGNucGopIHtcbiAgICAgICAgICAgIHJldHVybiBjbnBqXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcRC9nLCBcIlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxkezJ9KShcXGQpLywgXCIkMS4kMlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgXCIkMS4kMlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgXCIkMS8kMlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxkezR9KShcXGQpLywgXCIkMS0kMlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRvcm5hIGEgbWFzY2FyYSBkbyBDUEYvQ05QSlxuICAgICAqIEBwYXJhbSBrZXkgVmFsb3JlcyBwb3Nzw612ZWlzIHPDo28gQ1BGIG91IENOUEpcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q3BmQ25wak1hc2soa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJDUEZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCI5OTkuOTk5Ljk5OS05OVwiO1xuICAgICAgICAgICAgY2FzZSBcIkNOUEpcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCI5OS45OTkuOTk5Lzk5OTktOTlcIjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAgLyoqXG4gICAgICogTWV0w7NkbyBwYXJhIGZvcm1hdGFyIG8gbsO6bWVybyBkZSB0ZWxlZm9uZS5cbiAgICAgKiBAcGFyYW0gdGVsZXBob25lTnVtYmVyIFN0cmluZyBjb250ZW5kbyBvIG7Dum1lcm8gZGUgdGVsZWZvbmUuXG4gICAgICogQHJldHVybnMgU3RyaW5nIGZvcm1hdGFkYSBjb20gbyBuw7ptZXJvIGRlIHRlbGVmb25lLlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGb3JtYXR0ZWRUZWxlcGhvbmVOdW1iZXIodGVsZXBob25lTnVtYmVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdGVsID0gdGVsZXBob25lTnVtYmVyLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICAgIHRlbCA9IHRlbC5yZXBsYWNlKC9eMC8sICcnKTtcbiAgICAgICAgaWYgKHRlbC5sZW5ndGggPiAxMCkge1xuICAgICAgICAgIC8vICMjIyMjIyMjIyMgLT4gKCMjKSAjIyMjIy0jIyMjXG4gICAgICAgICAgdGVsID0gdGVsLnJlcGxhY2UoL14oXFxkezJ9KT8oXFxkezV9KT8oXFxkezR9KS4qLywgJygkMSkgJDItJDMnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZWwubGVuZ3RoID4gOSkge1xuICAgICAgICAgIC8vIEFBIyMjIyMjIyMjIC0+IChBQSkgIyMjIy0jIyMjXG4gICAgICAgICAgdGVsID0gdGVsLnJlcGxhY2UoL14oXFxkezJ9KT8oXFxkezR9KT8oXFxkezR9KS4qLywgJygkMSkgJDItJDMnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZWwubGVuZ3RoID4gNSkge1xuICAgICAgICAgIC8vICMjIyMjIyMgLT4gKCMjKSAjIyMjLSNcbiAgICAgICAgICB0ZWwgPSB0ZWwucmVwbGFjZSgvXihcXGR7Mn0pPyhcXGR7NH0pPyhcXGR7MCw0fSkuKi8sICcoJDEpICQyLSQzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGVsLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyAjIyMjIC0+ICgjIykgIyNcbiAgICAgICAgICB0ZWwgPSB0ZWwucmVwbGFjZSgvXihcXGR7Mn0pPyhcXGR7MCw1fSkuKi8sICcoJDEpICQyJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRlbCAhPT0gJycpIHsgdGVsID0gdGVsLnJlcGxhY2UoL14oXFxkKikvLCAnKCQxJyk7IH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0w7NkbyBwYXJhIGZvcm1hdGFyIG8gbsO6bWVybyBkZSB0ZWxlZm9uZSBkZSB1bSBjYW1wbyBJbnB1dC5cbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRvIElucHV0IGRvIGNhbXBvIGRlIHRlbGVmb25lLlxuICAgICAqL1xuICAgIHN0YXRpYyBmb3JtYXRUZWxlcGhvbmVJbnB1dEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgbGV0IHRlbGVwaG9uZU51bWJlciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgICAgICAvLyBQZXJtaXRlIEJhY2tzcGFjZSBwYXJhIHVzdcOhcmlvIHJlbW92ZXIgXCIpXCIgZSBcIi1cIlxuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gOCAmJiAodGVsZXBob25lTnVtYmVyLmxlbmd0aCA9PT0gOSB8fCB0ZWxlcGhvbmVOdW1iZXIubGVuZ3RoID09PSA0IHx8IHRlbGVwaG9uZU51bWJlci5sZW5ndGggPT09IDMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBGb3JtYXRVdGlsc1NlcnZpY2UuZ2V0Rm9ybWF0dGVkVGVsZXBob25lTnVtYmVyKHRlbGVwaG9uZU51bWJlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0w7NkbyBwYXJhIGZvcm1hdGFyIGEgcG9yY2VudGFnZW0gcGFyYSAyIGNhc2FzIGRlY2ltYWlzLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBOw7ptZXJvIGEgc2VyIGZvcm1hdGFkby5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Rm9ybWF0dGVkUGVyY2VudGFnZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoMikucmVwbGFjZSgnLicsICcsJykgKyAnJSc7XG4gICAgfVxufVxuIl19
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LXV0aWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1wZXNzb2FzL3BheXJvbGwtY29yZS8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvdXRpbHMvZm9ybWF0LXV0aWxzL2Zvcm1hdC11dGlscy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxrQkFBa0I7SUFFM0I7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFXO1FBQzlCLElBQUksR0FBRyxFQUFFO1lBQ0wsT0FBTyxHQUFHO2lCQUNMLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2lCQUNsQixPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQztpQkFDL0IsT0FBTyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7aUJBQy9CLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQVksRUFBRSxrQkFBNEI7UUFDOUQsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLGtCQUFrQixFQUFFO2dCQUNwQixvRkFBb0Y7Z0JBQ3BGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUVsRSx3Q0FBd0M7Z0JBQ3hDLE9BQU8sU0FBUztxQkFDWCxPQUFPLENBQUMsMEJBQTBCLEVBQUUsT0FBTyxDQUFDO3FCQUM1QyxPQUFPLENBQUMseUNBQXlDLEVBQUUsU0FBUyxDQUFDO3FCQUM3RCxPQUFPLENBQUMsc0RBQXNELEVBQUUsU0FBUyxDQUFDO3FCQUMxRSxPQUFPLENBQUMsZ0VBQWdFLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDN0Y7aUJBQU07Z0JBQ0gsT0FBTyxJQUFJO3FC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IjpbImV4cG9ydCBjbGFzcyBGb3JtYXRVdGlsc1NlcnZpY2Uge1xuXG4gICAgLyoqXG4gICAgICogUmV0b3JuYSBvIENQRiBmb3JtYXRhZG9cbiAgICAgKiBAcGFyYW0gY3BmIENQRlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGb3JtYXR0ZWRDcGYoY3BmOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoY3BmKSB7XG4gICAgICAgICAgICByZXR1cm4gY3BmXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcRC9nLCBcIlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgXCIkMS4kMlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgXCIkMS4kMlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgXCIkMS0kMlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRvcm5hIG8gQ05QSiBmb3JtYXRhZG9cbiAgICAgKiBAcGFyYW0gY25waiBDTlBKXG4gICAgICovXG4gICAgc3RhdGljIGdldEZvcm1hdHRlZENucGooY25wajogc3RyaW5nLCBpc0FscGhhbnVtZXJpY0NOUEo/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGNucGopIHtcbiAgICAgICAgICAgIGlmIChpc0FscGhhbnVtZXJpY0NOUEopIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgY2FyYWN0ZXJlcyBlc3BlY2lhaXMgbWFudGVuZG8gbGV0cmFzIGUgbsO6bWVyb3MsIGUgY29udmVydGUgcGFyYSBtYWnDunNjdWxhc1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFuQ25waiA9IGNucGoucmVwbGFjZSgvW15hLXpBLVowLTldL2csICcnKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gQXBsaWNhIGZvcm1hdGHDp8OjbzogQUEuQkJCLkNDQy9ERERELUVFXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsZWFuQ25walxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXihbQS1aMC05XXsyfSkoW0EtWjAtOV0pLywgJyQxLiQyJylcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL14oW0EtWjAtOV17Mn1cXC4pKFtBLVowLTldezN9KShbQS1aMC05XSkvLCAnJDEkMi4kMycpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eKFtBLVowLTldezJ9XFwuW0EtWjAtOV17M31cXC4pKFtBLVowLTldezN9KShbQS1aMC05XSkvLCAnJDEkMi8kMycpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eKFtBLVowLTldezJ9XFwuW0EtWjAtOV17M31cXC5bQS1aMC05XXszfVxcLykoW0EtWjAtOV17NH0pKFswLTldKS8sICckMSQyLSQzJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbnBqXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXEQvZywgXCJcIilcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyhcXGR7Mn0pKFxcZCkvLCBcIiQxLiQyXCIpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgXCIkMS4kMlwiKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKFxcZHszfSkoXFxkKS8sIFwiJDEvJDJcIilcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyhcXGR7NH0pKFxcZCkvLCBcIiQxLSQyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldG9ybmEgYSBtYXNjYXJhIGRvIENQRi9DTlBKXG4gICAgICogQHBhcmFtIGtleSBWYWxvcmVzIHBvc3PDrXZlaXMgc8OjbyBDUEYgb3UgQ05QSlxuICAgICAqIEBwYXJhbSBpc0FscGhhbnVtZXJpY0NOUEogRGVmaW5lIHNlIG8gQ05QSiBwb2RlIHNlciBhbGZhbnVtw6lyaWNvLlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRDcGZDbnBqTWFzayhrZXk6IHN0cmluZywgaXNBbHBoYW51bWVyaWNDTlBKPzogYm9vbGVhbikge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSBcIkNQRlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIjk5OS45OTkuOTk5LTk5XCI7XG4gICAgICAgICAgICBjYXNlIFwiQ05QSlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0FscGhhbnVtZXJpY0NOUEogPyBcIioqLioqKi4qKiovKioqKi05OVwiIDogXCI5OS45OTkuOTk5Lzk5OTktOTlcIjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAgLyoqXG4gICAgICogTWV0w7NkbyBwYXJhIGZvcm1hdGFyIG8gbsO6bWVybyBkZSB0ZWxlZm9uZS5cbiAgICAgKiBAcGFyYW0gdGVsZXBob25lTnVtYmVyIFN0cmluZyBjb250ZW5kbyBvIG7Dum1lcm8gZGUgdGVsZWZvbmUuXG4gICAgICogQHJldHVybnMgU3RyaW5nIGZvcm1hdGFkYSBjb20gbyBuw7ptZXJvIGRlIHRlbGVmb25lLlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGb3JtYXR0ZWRUZWxlcGhvbmVOdW1iZXIodGVsZXBob25lTnVtYmVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdGVsID0gdGVsZXBob25lTnVtYmVyLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICAgIHRlbCA9IHRlbC5yZXBsYWNlKC9eMC8sICcnKTtcbiAgICAgICAgaWYgKHRlbC5sZW5ndGggPiAxMCkge1xuICAgICAgICAgIC8vICMjIyMjIyMjIyMgLT4gKCMjKSAjIyMjIy0jIyMjXG4gICAgICAgICAgdGVsID0gdGVsLnJlcGxhY2UoL14oXFxkezJ9KT8oXFxkezV9KT8oXFxkezR9KS4qLywgJygkMSkgJDItJDMnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZWwubGVuZ3RoID4gOSkge1xuICAgICAgICAgIC8vIEFBIyMjIyMjIyMjIC0+IChBQSkgIyMjIy0jIyMjXG4gICAgICAgICAgdGVsID0gdGVsLnJlcGxhY2UoL14oXFxkezJ9KT8oXFxkezR9KT8oXFxkezR9KS4qLywgJygkMSkgJDItJDMnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZWwubGVuZ3RoID4gNSkge1xuICAgICAgICAgIC8vICMjIyMjIyMgLT4gKCMjKSAjIyMjLSNcbiAgICAgICAgICB0ZWwgPSB0ZWwucmVwbGFjZSgvXihcXGR7Mn0pPyhcXGR7NH0pPyhcXGR7MCw0fSkuKi8sICcoJDEpICQyLSQzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGVsLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyAjIyMjIC0+ICgjIykgIyNcbiAgICAgICAgICB0ZWwgPSB0ZWwucmVwbGFjZSgvXihcXGR7Mn0pPyhcXGR7MCw1fSkuKi8sICcoJDEpICQyJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRlbCAhPT0gJycpIHsgdGVsID0gdGVsLnJlcGxhY2UoL14oXFxkKikvLCAnKCQxJyk7IH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0w7NkbyBwYXJhIGZvcm1hdGFyIG8gbsO6bWVybyBkZSB0ZWxlZm9uZSBkZSB1bSBjYW1wbyBJbnB1dC5cbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRvIElucHV0IGRvIGNhbXBvIGRlIHRlbGVmb25lLlxuICAgICAqL1xuICAgIHN0YXRpYyBmb3JtYXRUZWxlcGhvbmVJbnB1dEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgbGV0IHRlbGVwaG9uZU51bWJlciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgICAgICAvLyBQZXJtaXRlIEJhY2tzcGFjZSBwYXJhIHVzdcOhcmlvIHJlbW92ZXIgXCIpXCIgZSBcIi1cIlxuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gOCAmJiAodGVsZXBob25lTnVtYmVyLmxlbmd0aCA9PT0gOSB8fCB0ZWxlcGhvbmVOdW1iZXIubGVuZ3RoID09PSA0IHx8IHRlbGVwaG9uZU51bWJlci5sZW5ndGggPT09IDMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBGb3JtYXRVdGlsc1NlcnZpY2UuZ2V0Rm9ybWF0dGVkVGVsZXBob25lTnVtYmVyKHRlbGVwaG9uZU51bWJlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0w7NkbyBwYXJhIGZvcm1hdGFyIGEgcG9yY2VudGFnZW0gcGFyYSAyIGNhc2FzIGRlY2ltYWlzLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBOw7ptZXJvIGEgc2VyIGZvcm1hdGFkby5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Rm9ybWF0dGVkUGVyY2VudGFnZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoMikucmVwbGFjZSgnLicsICcsJykgKyAnJSc7XG4gICAgfVxufVxuIl19
@@ -141,6 +141,62 @@ export class GenericValidator {
141
141
  }
142
142
  return null;
143
143
  }
144
+ /**
145
+ * Valida se o CNPJ Alfanumérico é valido. Deve-se ser informado o cpf sem máscara.
146
+ */
147
+ static isValidCnpjAlphanumeric(control) {
148
+ let cnpj = control.value;
149
+ if (cnpj) {
150
+ cnpj = cnpj.replace(/[^\dA-Za-z]/g, '').toUpperCase();
151
+ if (cnpj.length !== 14) {
152
+ return null;
153
+ }
154
+ // Valida que dígitos verificadores são numéricos
155
+ if (!/^\d$/.test(cnpj.charAt(12)) || !/^\d$/.test(cnpj.charAt(13))) {
156
+ return { cnpjNotValid: true };
157
+ }
158
+ // Elimina CNPJs invalidos conhecidos
159
+ if (cnpj === '00000000000000' ||
160
+ cnpj === '11111111111111' ||
161
+ cnpj === '22222222222222' ||
162
+ cnpj === '33333333333333' ||
163
+ cnpj === '44444444444444' ||
164
+ cnpj === '55555555555555' ||
165
+ cnpj === '66666666666666' ||
166
+ cnpj === '77777777777777' ||
167
+ cnpj === '88888888888888' ||
168
+ cnpj === '99999999999999') {
169
+ return { cnpjNotValid: true };
170
+ }
171
+ // Valida DVs
172
+ const size = cnpj.length - 2;
173
+ const digits = cnpj.substring(size);
174
+ if (!GenericValidator.validateCnpjDigit(cnpj, size, Number(digits.charAt(0)))) {
175
+ return { cnpjNotValid: true };
176
+ }
177
+ if (!GenericValidator.validateCnpjDigit(cnpj, size + 1, Number(digits.charAt(1)))) {
178
+ return { cnpjNotValid: true };
179
+ }
180
+ return null;
181
+ }
182
+ return null;
183
+ }
184
+ static validateCnpjDigit(cnpj, size, digit) {
185
+ const numbers = cnpj.substring(0, size);
186
+ let sum = 0;
187
+ let pos = size - 7;
188
+ for (let i = size; i >= 1; i--) {
189
+ sum += this.convertToAsciiMinus48(numbers.charAt(size - i)) * pos--;
190
+ if (pos < 2) {
191
+ pos = 9;
192
+ }
193
+ }
194
+ const result = sum % 11 < 2 ? 0 : 11 - (sum % 11);
195
+ return result === digit;
196
+ }
197
+ static convertToAsciiMinus48(input) {
198
+ return input.charCodeAt(0) - 48;
199
+ }
144
200
  /**
145
201
  * Válida o número de telefone da chave PIX.
146
202
  */
@@ -161,4 +217,4 @@ export class GenericValidator {
161
217
  return isValidEmail ? null : { invalidEmail: true };
162
218
  }
163
219
  }
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12YWxpZGF0b3JzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tcGVzc29hcy9wYXlyb2xsLWNvcmUvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3V0aWxzL2dlbmVyaWMtdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3pCLGdCQUFnQixDQUFDO0lBRWpCOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUF3QjtRQUN0QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRTFCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7YUFDakIsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV2QyxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQztRQUN2QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLElBQ0ksR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFO1lBQ2pCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBRXJCLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDM0I7WUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFF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RUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQXdCO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDL0IsTUFBTSxlQUFlLEdBQUcsc0NBQXNDLENBQUM7UUFFL0QsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVwRCxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZGF0b3JzLCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuZXhwb3J0IGNsYXNzIEdlbmVyaWNWYWxpZGF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGEgbyBDRUkgKENhZGFzdHJvIGVzcGVjw61maWNvIGRlIElOU1MpIGRpZ2l0YWRvLlxuICAgICAqL1xuICAgIHN0YXRpYyBpc1ZhbGlkQ2VpKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvcnMge1xuICAgICAgICBjb25zdCBjZWkgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGlmICghY2VpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgZWxzZSBpZiAoY2VpLmxlbmd0aCAhPSAxMSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgbXVsdGlwbGljYWRvckJhc2UgPSBcIjMyOTg3NjU0MzJcIjtcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcbiAgICAgICAgbGV0IHJlc3RvID0gMDtcbiAgICAgICAgbGV0IG11bHRpcGxpY2FuZG8gPSAwO1xuICAgICAgICBsZXQgbXVsdGlwbGljYWRvciA9IDA7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2VpLmxlbmd0aCAhPT0gMTEgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCIwMDAwMDAwMDAwMFwiIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiMTExMTExMTExMTFcIiB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjIyMjIyMjIyMjIyXCIgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCIzMzMzMzMzMzMzM1wiIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiNDQ0NDQ0NDQ0NDRcIiB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjU1NTU1NTU1NTU1XCIgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCI2NjY2NjY2NjY2NlwiIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiNzc3Nzc3Nzc3NzdcIiB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjg4ODg4ODg4ODg4XCIgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCI5OTk5OTk5OTk5OVwiXG4gICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiB7IGludmFsaWRDZWk6IHRydWUgfTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtdWx0aXBsaWNhbmRvID0gcGFyc2VJbnQoY2VpLnN1YnN0cmluZyhpLCBpICsgMSksIDEwKTtcbiAgICAgICAgICAgICAgICBtdWx0aXBsaWNhZG9yID0gcGFyc2VJbnQobXVsdGlwbGljYWRvckJhc2Uuc3Vic3RyaW5nKGksIGkgKyAxKSwgMTApO1xuICAgICAgICAgICAgICAgIHRvdGFsICs9IG11bHRpcGxpY2FuZG8gKiBtdWx0aXBsaWNhZG9yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN0byA9IDExIC0gKHRvdGFsICUgMTEpO1xuICAgICAgICAgICAgcmVzdG8gPSByZXN0byA9PT0gMTAgfHwgcmVzdG8gPT09IDExID8gMCA6IHJlc3RvO1xuXG4gICAgICAgICAgICBjb25zdCBkaWdpdG8gPSBwYXJzZUludChcIlwiICsgY2VpLmNoYXJBdCgxMCksIDEwKTtcbiAgICAgICAgICAgIHJldHVybiByZXN0byA9PT0gZGlnaXRvID8gbnVsbCA6IHsgaW52YWxpZENlaTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhIHNlIG8gQ1BGIMOpIHZhbGlkby4gRGV2ZS1zZSBzZXIgaW5mb3JtYWRvIG8gY3BmIHNlbSBtw6FzY2FyYS5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNWYWxpZENwZihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JzIHtcbiAgICAgICAgY29uc3QgY3BmID0gY29udHJvbC52YWx1ZTtcbiAgICAgICAgaWYgKGNwZikge1xuICAgICAgICAgICAgbGV0IG51bWJlcnMsIGRpZ2l0cywgc3VtLCBpLCByZXN1bHQsIGVxdWFsRGlnaXRzO1xuICAgICAgICAgICAgZXF1YWxEaWdpdHMgPSAxO1xuICAgICAgICAgICAgaWYgKGNwZi5sZW5ndGggPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3BmLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjcGYuY2hhckF0KGkpICE9PSBjcGYuY2hhckF0KGkgKyAxKSkge1xuICAgICAgICAgICAgICAgICAgICBlcXVhbERpZ2l0cyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZXF1YWxEaWdpdHMpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJzID0gY3BmLnN1YnN0cmluZygwLCA5KTtcbiAgICAgICAgICAgICAgICBkaWdpdHMgPSBjcGYuc3Vic3RyaW5nKDkpO1xuICAgICAgICAgICAgICAgIHN1bSA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMTA7IGkgPiAxOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtICs9IG51bWJlcnMuY2hhckF0KDEwIC0gaSkgKiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBzdW0gJSAxMSA8IDIgPyAwIDogMTEgLSAoc3VtICUgMTEpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IE51bWJlcihkaWdpdHMuY2hhckF0KDApKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjcGZOb3RWYWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBudW1iZXJzID0gY3BmLnN1YnN0cmluZygwLCAxMCk7XG4gICAgICAgICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAxMTsgaSA+IDE7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gbnVtYmVycy5jaGFyQXQoMTEgLSBpKSAqIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN1bSAlIDExIDwgMiA/IDAgOiAxMSAtIChzdW0gJSAxMSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gTnVtYmVyKGRpZ2l0cy5jaGFyQXQoMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGNwZk5vdFZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjcGZOb3RWYWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYSBzZSBvIENOUEogw6kgdmFsaWRvLiBEZXZlLXNlIHNlciBpbmZvcm1hZG8gbyBjcGYgc2VtIG3DoXNjYXJhLlxuICAgICAqL1xuICAgIHN0YXRpYyBpc1ZhbGlkQ25waihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JzIHtcbiAgICAgICAgbGV0IGNucGogPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGlmIChjbnBqKSB7XG4gICAgICAgICAgICBsZXQgc2l6ZSwgbnVtYmVycywgZGlnaXRzLCBzdW0sIHBvcywgcmVzdWx0O1xuICAgICAgICAgICAgY25waiA9IGNucGoucmVwbGFjZSgvW15cXGRdKy9nLCAnJyk7XG5cbiAgICAgICAgICAgIGlmIChjbnBqLmxlbmd0aCAhPT0gMTQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRWxpbWluYSBDTlBKcyBpbnZhbGlkb3MgY29uaGVjaWRvc1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNucGogPT09ICcwMDAwMDAwMDAwMDAwMCcgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnMTExMTExMTExMTExMTEnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzIyMjIyMjIyMjIyMjIyJyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICczMzMzMzMzMzMzMzMzMycgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnNDQ0NDQ0NDQ0NDQ0NDQnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzU1NTU1NTU1NTU1NTU1JyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICc2NjY2NjY2NjY2NjY2NicgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnNzc3Nzc3Nzc3Nzc3NzcnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzg4ODg4ODg4ODg4ODg4JyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICc5OTk5OTk5OTk5OTk5OSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpOb3RWYWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBWYWxpZGEgRFZzXG4gICAgICAgICAgICBzaXplID0gY25wai5sZW5ndGggLSAyO1xuICAgICAgICAgICAgbnVtYmVycyA9IGNucGouc3Vic3RyaW5nKDAsIHNpemUpO1xuICAgICAgICAgICAgZGlnaXRzID0gY25wai5zdWJzdHJpbmcoc2l6ZSk7XG4gICAgICAgICAgICBzdW0gPSAwO1xuICAgICAgICAgICAgcG9zID0gc2l6ZSAtIDc7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc2l6ZTsgaSA+PSAxOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBzdW0gKz0gbnVtYmVycy5jaGFyQXQoc2l6ZSAtIGkpICogcG9zLS07XG4gICAgICAgICAgICAgICAgaWYgKHBvcyA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zID0gOTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgPSBzdW0gJSAxMSA8IDIgPyAwIDogMTEgLSAoc3VtICUgMTEpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gTnVtYmVyKGRpZ2l0cy5jaGFyQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY25wak5vdFZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNpemUgPSBzaXplICsgMTtcbiAgICAgICAgICAgIG51bWJlcnMgPSBjbnBqLnN1YnN0cmluZygwLCBzaXplKTtcbiAgICAgICAgICAgIHN1bSA9IDA7XG4gICAgICAgICAgICBwb3MgPSBzaXplIC0gNztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzaXplOyBpID49IDE7IGktLSkge1xuICAgICAgICAgICAgICAgIHN1bSArPSBudW1iZXJzLmNoYXJBdChzaXplIC0gaSkgKiBwb3MtLTtcbiAgICAgICAgICAgICAgICBpZiAocG9zIDwgMikge1xuICAgICAgICAgICAgICAgICAgICBwb3MgPSA5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IHN1bSAlIDExIDwgMiA/IDAgOiAxMSAtIChzdW0gJSAxMSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBOdW1iZXIoZGlnaXRzLmNoYXJBdCgxKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjbnBqTm90VmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVsOhbGlkYSBvIG7Dum1lcm8gZGUgdGVsZWZvbmUgZGEgY2hhdmUgUElYLlxuICAgICAqL1xuICAgIHN0YXRpYyBpc1ZhbGlkUGhvbmVOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9ycyB7XG4gICAgICAgIGxldCBjZWxsUGhvbmVLZXkgPSBjb250cm9sLnZhbHVlIHx8ICcnO1xuICAgICAgICBjZWxsUGhvbmVLZXkgPSBjZWxsUGhvbmVLZXkucmVwbGFjZSgvW1xccygpLV0vZywgJycpO1xuICAgICAgICBjb25zdCByZWdleE51bWJlclRlbGVwaG9uZSA9IC9eWzEtOV1bXFxkXXsxLDJ9XFxkezgsMTB9JC87XG5cbiAgICAgICAgY29uc3QgaXNWYWxpZE51bWJlclRlbGVwaG9uZSA9IHJlZ2V4TnVtYmVyVGVsZXBob25lLnRlc3QoY2VsbFBob25lS2V5KTtcblxuICAgICAgICByZXR1cm4gaXNWYWxpZE51bWJlclRlbGVwaG9uZSA/IG51bGwgOiB7IGludmFsaWRQaG9uZU51bWJlcjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYSBvIGVtYWlsIGRhIGNoYXZlIFBJWC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNWYWxpZEVtYWlsKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvcnMge1xuICAgICAgICBjb25zdCBlbWFpbEtleSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICAgIGNvbnN0IHJlZ2V4VmFsaWRFbWFpbCA9IC9eW1xcdy1cXC5dK0BbXFx3LV0rKFxcLltcXHctXXsyLDR9KXsxLDJ9JC87XG5cbiAgICAgICAgY29uc3QgaXNWYWxpZEVtYWlsID0gcmVnZXhWYWxpZEVtYWlsLnRlc3QoZW1haWxLZXkpO1xuXG4gICAgICAgIHJldHVybiBpc1ZhbGlkRW1haWwgPyBudWxsIDogeyBpbnZhbGlkRW1haWw6IHRydWUgfTtcbiAgICB9XG59XG4iXX0=
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12YWxpZGF0b3JzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tcGVzc29hcy9wYXlyb2xsLWNvcmUvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3V0aWxzL2dlbmVyaWMtdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3pCLGdCQUFnQixDQUFDO0lBRWpCOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUF3QjtRQUN0QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRTFCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7YUFDakIsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV2QyxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQztRQUN2QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLElBQ0ksR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFO1lBQ2pCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBRXJCLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDM0I7WUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFF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cEQsTUFBTSxvQkFBb0IsR0FBRywwQkFBMEIsQ0FBQztRQUV4RCxNQUFNLHNCQUFzQixHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV2RSxPQUFPLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDeEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUF3QjtRQUN4QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQy9CLE1BQU0sZUFBZSxHQUFHLHNDQUFzQyxDQUFDO1FBRS9ELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEQsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDeEQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9ycywgQWJzdHJhY3RDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbmV4cG9ydCBjbGFzcyBHZW5lcmljVmFsaWRhdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhIG8gQ0VJIChDYWRhc3RybyBlc3BlY8OtZmljbyBkZSBJTlNTKSBkaWdpdGFkby5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNWYWxpZENlaShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JzIHtcbiAgICAgICAgY29uc3QgY2VpID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICBpZiAoIWNlaSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGVsc2UgaWYgKGNlaS5sZW5ndGggIT0gMTEpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IG11bHRpcGxpY2Fkb3JCYXNlID0gXCIzMjk4NzY1NDMyXCI7XG4gICAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICAgIGxldCByZXN0byA9IDA7XG4gICAgICAgIGxldCBtdWx0aXBsaWNhbmRvID0gMDtcbiAgICAgICAgbGV0IG11bHRpcGxpY2Fkb3IgPSAwO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNlaS5sZW5ndGggIT09IDExIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiMDAwMDAwMDAwMDBcIiB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjExMTExMTExMTExXCIgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCIyMjIyMjIyMjIyMlwiIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiMzMzMzMzMzMzMzNcIiB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjQ0NDQ0NDQ0NDQ0XCIgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCI1NTU1NTU1NTU1NVwiIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiNjY2NjY2NjY2NjZcIiB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjc3Nzc3Nzc3Nzc3XCIgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCI4ODg4ODg4ODg4OFwiIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiOTk5OTk5OTk5OTlcIlxuICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4geyBpbnZhbGlkQ2VpOiB0cnVlIH07XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbXVsdGlwbGljYW5kbyA9IHBhcnNlSW50KGNlaS5zdWJzdHJpbmcoaSwgaSArIDEpLCAxMCk7XG4gICAgICAgICAgICAgICAgbXVsdGlwbGljYWRvciA9IHBhcnNlSW50KG11bHRpcGxpY2Fkb3JCYXNlLnN1YnN0cmluZyhpLCBpICsgMSksIDEwKTtcbiAgICAgICAgICAgICAgICB0b3RhbCArPSBtdWx0aXBsaWNhbmRvICogbXVsdGlwbGljYWRvcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdG8gPSAxMSAtICh0b3RhbCAlIDExKTtcbiAgICAgICAgICAgIHJlc3RvID0gcmVzdG8gPT09IDEwIHx8IHJlc3RvID09PSAxMSA/IDAgOiByZXN0bztcblxuICAgICAgICAgICAgY29uc3QgZGlnaXRvID0gcGFyc2VJbnQoXCJcIiArIGNlaS5jaGFyQXQoMTApLCAxMCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdG8gPT09IGRpZ2l0byA/IG51bGwgOiB7IGludmFsaWRDZWk6IHRydWUgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYSBzZSBvIENQRiDDqSB2YWxpZG8uIERldmUtc2Ugc2VyIGluZm9ybWFkbyBvIGNwZiBzZW0gbcOhc2NhcmEuXG4gICAgICovXG4gICAgc3RhdGljIGlzVmFsaWRDcGYoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9ycyB7XG4gICAgICAgIGNvbnN0IGNwZiA9IGNvbnRyb2wudmFsdWU7XG4gICAgICAgIGlmIChjcGYpIHtcbiAgICAgICAgICAgIGxldCBudW1iZXJzLCBkaWdpdHMsIHN1bSwgaSwgcmVzdWx0LCBlcXVhbERpZ2l0cztcbiAgICAgICAgICAgIGVxdWFsRGlnaXRzID0gMTtcbiAgICAgICAgICAgIGlmIChjcGYubGVuZ3RoIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNwZi5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY3BmLmNoYXJBdChpKSAhPT0gY3BmLmNoYXJBdChpICsgMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWxEaWdpdHMgPSAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWVxdWFsRGlnaXRzKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVycyA9IGNwZi5zdWJzdHJpbmcoMCwgOSk7XG4gICAgICAgICAgICAgICAgZGlnaXRzID0gY3BmLnN1YnN0cmluZyg5KTtcbiAgICAgICAgICAgICAgICBzdW0gPSAwO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDEwOyBpID4gMTsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSBudW1iZXJzLmNoYXJBdCgxMCAtIGkpICogaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3VtICUgMTEgPCAyID8gMCA6IDExIC0gKHN1bSAlIDExKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBOdW1iZXIoZGlnaXRzLmNoYXJBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgY3BmTm90VmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbnVtYmVycyA9IGNwZi5zdWJzdHJpbmcoMCwgMTApO1xuICAgICAgICAgICAgICAgIHN1bSA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMTE7IGkgPiAxOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtICs9IG51bWJlcnMuY2hhckF0KDExIC0gaSkgKiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBzdW0gJSAxMSA8IDIgPyAwIDogMTEgLSAoc3VtICUgMTEpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IE51bWJlcihkaWdpdHMuY2hhckF0KDEpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjcGZOb3RWYWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY3BmTm90VmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGEgc2UgbyBDTlBKIMOpIHZhbGlkby4gRGV2ZS1zZSBzZXIgaW5mb3JtYWRvIG8gY3BmIHNlbSBtw6FzY2FyYS5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNWYWxpZENucGooY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9ycyB7XG4gICAgICAgIGxldCBjbnBqID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICBpZiAoY25waikge1xuICAgICAgICAgICAgbGV0IHNpemUsIG51bWJlcnMsIGRpZ2l0cywgc3VtLCBwb3MsIHJlc3VsdDtcbiAgICAgICAgICAgIGNucGogPSBjbnBqLnJlcGxhY2UoL1teXFxkXSsvZywgJycpO1xuXG4gICAgICAgICAgICBpZiAoY25wai5sZW5ndGggIT09IDE0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVsaW1pbmEgQ05QSnMgaW52YWxpZG9zIGNvbmhlY2lkb3NcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnMDAwMDAwMDAwMDAwMDAnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzExMTExMTExMTExMTExJyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICcyMjIyMjIyMjIyMjIyMicgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnMzMzMzMzMzMzMzMzMzMnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzQ0NDQ0NDQ0NDQ0NDQ0JyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICc1NTU1NTU1NTU1NTU1NScgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnNjY2NjY2NjY2NjY2NjYnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzc3Nzc3Nzc3Nzc3Nzc3JyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICc4ODg4ODg4ODg4ODg4OCcgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnOTk5OTk5OTk5OTk5OTknXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjbnBqTm90VmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVmFsaWRhIERWc1xuICAgICAgICAgICAgc2l6ZSA9IGNucGoubGVuZ3RoIC0gMjtcbiAgICAgICAgICAgIG51bWJlcnMgPSBjbnBqLnN1YnN0cmluZygwLCBzaXplKTtcbiAgICAgICAgICAgIGRpZ2l0cyA9IGNucGouc3Vic3RyaW5nKHNpemUpO1xuICAgICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICAgIHBvcyA9IHNpemUgLSA3O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNpemU7IGkgPj0gMTsgaS0tKSB7XG4gICAgICAgICAgICAgICAgc3VtICs9IG51bWJlcnMuY2hhckF0KHNpemUgLSBpKSAqIHBvcy0tO1xuICAgICAgICAgICAgICAgIGlmIChwb3MgPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IDk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gc3VtICUgMTEgPCAyID8gMCA6IDExIC0gKHN1bSAlIDExKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IE51bWJlcihkaWdpdHMuY2hhckF0KDApKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpOb3RWYWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzaXplID0gc2l6ZSArIDE7XG4gICAgICAgICAgICBudW1iZXJzID0gY25wai5zdWJzdHJpbmcoMCwgc2l6ZSk7XG4gICAgICAgICAgICBzdW0gPSAwO1xuICAgICAgICAgICAgcG9zID0gc2l6ZSAtIDc7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc2l6ZTsgaSA+PSAxOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBzdW0gKz0gbnVtYmVycy5jaGFyQXQoc2l6ZSAtIGkpICogcG9zLS07XG4gICAgICAgICAgICAgICAgaWYgKHBvcyA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zID0gOTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgPSBzdW0gJSAxMSA8IDIgPyAwIDogMTEgLSAoc3VtICUgMTEpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gTnVtYmVyKGRpZ2l0cy5jaGFyQXQoMSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY25wak5vdFZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogVmFsaWRhIHNlIG8gQ05QSiBBbGZhbnVtw6lyaWNvIMOpIHZhbGlkby4gRGV2ZS1zZSBzZXIgaW5mb3JtYWRvIG8gY3BmIHNlbSBtw6FzY2FyYS5cbiAgICAqL1xuICAgIHN0YXRpYyBpc1ZhbGlkQ25wakFscGhhbnVtZXJpYyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JzIHtcbiAgICAgICAgbGV0IGNucGogPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGlmIChjbnBqKSB7XG4gICAgICAgICAgICBjbnBqID0gY25wai5yZXBsYWNlKC9bXlxcZEEtWmEtel0vZywgJycpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChjbnBqLmxlbmd0aCAhPT0gMTQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVmFsaWRhIHF1ZSBkw61naXRvcyB2ZXJpZmljYWRvcmVzIHPDo28gbnVtw6lyaWNvc1xuICAgICAgICAgICAgaWYgKCEvXlxcZCQvLnRlc3QoY25wai5jaGFyQXQoMTIpKSB8fCAhL15cXGQkLy50ZXN0KGNucGouY2hhckF0KDEzKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjbnBqTm90VmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRWxpbWluYSBDTlBKcyBpbnZhbGlkb3MgY29uaGVjaWRvc1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNucGogPT09ICcwMDAwMDAwMDAwMDAwMCcgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnMTExMTExMTExMTExMTEnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzIyMjIyMjIyMjIyMjIyJyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICczMzMzMzMzMzMzMzMzMycgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnNDQ0NDQ0NDQ0NDQ0NDQnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzU1NTU1NTU1NTU1NTU1JyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICc2NjY2NjY2NjY2NjY2NicgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnNzc3Nzc3Nzc3Nzc3NzcnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzg4ODg4ODg4ODg4ODg4JyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICc5OTk5OTk5OTk5OTk5OSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpOb3RWYWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBWYWxpZGEgRFZzXG4gICAgICAgICAgICBjb25zdCBzaXplID0gY25wai5sZW5ndGggLSAyO1xuICAgICAgICAgICAgY29uc3QgZGlnaXRzID0gY25wai5zdWJzdHJpbmcoc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghR2VuZXJpY1ZhbGlkYXRvci52YWxpZGF0ZUNucGpEaWdpdChjbnBqLCBzaXplLCBOdW1iZXIoZGlnaXRzLmNoYXJBdCgwKSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY25wak5vdFZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghR2VuZXJpY1ZhbGlkYXRvci52YWxpZGF0ZUNucGpEaWdpdChjbnBqLCBzaXplICsgMSwgTnVtYmVyKGRpZ2l0cy5jaGFyQXQoMSkpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpOb3RWYWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZUNucGpEaWdpdChjbnBqOiBzdHJpbmcsIHNpemU6IG51bWJlciwgZGlnaXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1iZXJzID0gY25wai5zdWJzdHJpbmcoMCwgc2l6ZSk7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBsZXQgcG9zID0gc2l6ZSAtIDc7XG4gICAgICAgIGZvciAobGV0IGkgPSBzaXplOyBpID49IDE7IGktLSkge1xuICAgICAgICAgICAgc3VtICs9IHRoaXMuY29udmVydFRvQXNjaWlNaW51czQ4KG51bWJlcnMuY2hhckF0KHNpemUgLSBpKSkgKiBwb3MtLTtcbiAgICAgICAgICAgIGlmIChwb3MgPCAyKSB7XG4gICAgICAgICAgICAgICAgcG9zID0gOTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBzdW0gJSAxMSA8IDIgPyAwIDogMTEgLSAoc3VtICUgMTEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ID09PSBkaWdpdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjb252ZXJ0VG9Bc2NpaU1pbnVzNDgoaW5wdXQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBpbnB1dC5jaGFyQ29kZUF0KDApIC0gNDg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVsOhbGlkYSBvIG7Dum1lcm8gZGUgdGVsZWZvbmUgZGEgY2hhdmUgUElYLlxuICAgICAqL1xuICAgIHN0YXRpYyBpc1ZhbGlkUGhvbmVOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9ycyB7XG4gICAgICAgIGxldCBjZWxsUGhvbmVLZXkgPSBjb250cm9sLnZhbHVlIHx8ICcnO1xuICAgICAgICBjZWxsUGhvbmVLZXkgPSBjZWxsUGhvbmVLZXkucmVwbGFjZSgvW1xccygpLV0vZywgJycpO1xuICAgICAgICBjb25zdCByZWdleE51bWJlclRlbGVwaG9uZSA9IC9eWzEtOV1bXFxkXXsxLDJ9XFxkezgsMTB9JC87XG5cbiAgICAgICAgY29uc3QgaXNWYWxpZE51bWJlclRlbGVwaG9uZSA9IHJlZ2V4TnVtYmVyVGVsZXBob25lLnRlc3QoY2VsbFBob25lS2V5KTtcblxuICAgICAgICByZXR1cm4gaXNWYWxpZE51bWJlclRlbGVwaG9uZSA/IG51bGwgOiB7IGludmFsaWRQaG9uZU51bWJlcjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYSBvIGVtYWlsIGRhIGNoYXZlIFBJWC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNWYWxpZEVtYWlsKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvcnMge1xuICAgICAgICBjb25zdCBlbWFpbEtleSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICAgIGNvbnN0IHJlZ2V4VmFsaWRFbWFpbCA9IC9eW1xcdy1cXC5dK0BbXFx3LV0rKFxcLltcXHctXXsyLDR9KXsxLDJ9JC87XG5cbiAgICAgICAgY29uc3QgaXNWYWxpZEVtYWlsID0gcmVnZXhWYWxpZEVtYWlsLnRlc3QoZW1haWxLZXkpO1xuXG4gICAgICAgIHJldHVybiBpc1ZhbGlkRW1haWwgPyBudWxsIDogeyBpbnZhbGlkRW1haWw6IHRydWUgfTtcbiAgICB9XG59XG4iXX0=
@@ -15,6 +15,7 @@ var HistoricalPixAccountFormComponent = /** @class */ (function () {
15
15
  this.paramsForm = new FormGroup({});
16
16
  this.defaultCpfNumber = null;
17
17
  this.permitsEditBankAccountForm = false;
18
+ this.isAlphanumericCNPJ = false;
18
19
  this.visibleChange = new EventEmitter();
19
20
  this.pixAccountItemToList = new EventEmitter();
20
21
  this.ngUnsubscribe = new Subject();
@@ -66,7 +67,7 @@ var HistoricalPixAccountFormComponent = /** @class */ (function () {
66
67
  this.pixKeyType = item.key;
67
68
  this.isShowPixKeyFieldValidatorMessage = true;
68
69
  this.pixAccountFormGroup.get("pixKey").reset();
69
- this.setPixKeyValidators(true);
70
+ this.setPixKeyValidators(true, this.isAlphanumericCNPJ);
70
71
  if (item.key === "CPF") {
71
72
  this.setDefaultCpfPixKey();
72
73
  }
@@ -129,7 +130,7 @@ var HistoricalPixAccountFormComponent = /** @class */ (function () {
129
130
  this.visibleBtnSave = isEditMode;
130
131
  if (this.pixAccountFormGroup.get("pixKeyType").value) {
131
132
  this.pixKeyType = this.pixAccountFormGroup.get("pixKeyType").value.key;
132
- this.setPixKeyValidators(isEditMode);
133
+ this.setPixKeyValidators(isEditMode, this.isAlphanumericCNPJ);
133
134
  this.formatPixKeyTelephoneNumber();
134
135
  }
135
136
  configEnabledFields(this.pixAccountFormGroup, isEditMode, [
@@ -147,6 +148,12 @@ var HistoricalPixAccountFormComponent = /** @class */ (function () {
147
148
  this.pixAccountFormGroup.updateValueAndValidity();
148
149
  verifyValidationsForm.call(this.pixAccountFormGroup);
149
150
  if (this.pixAccountFormGroup.valid) {
151
+ if (this.pixKeyType === 'CNPJ' && this.isAlphanumericCNPJ) {
152
+ var pixKey = this.pixAccountFormGroup.get('pixKey').value;
153
+ if (pixKey) {
154
+ this.pixAccountFormGroup.get('pixKey').setValue(pixKey.toUpperCase().replace(/[^A-Z0-9]/g, ''));
155
+ }
156
+ }
150
157
  if (this.employeeId) {
151
158
  this.pixAccountFormGroup.get("employee").setValue({
152
159
  tableId: this.employeeId,
@@ -222,13 +229,13 @@ var HistoricalPixAccountFormComponent = /** @class */ (function () {
222
229
  });
223
230
  }
224
231
  this.beforeSetPixKeyTypeValidator();
225
- this.setPixKeyValidators(isEditMode);
232
+ this.setPixKeyValidators(isEditMode, this.isAlphanumericCNPJ);
226
233
  this.validatePercentageValid(percentageIncluded);
227
234
  };
228
235
  /**
229
236
  * Antes de setar o validator prepara as variáveis necessária para que seja feita a validação do campo.
230
237
  */
231
- HistoricalPixAccountFormComponent.prototype.setPixKeyValidators = function (isEditMode) {
238
+ HistoricalPixAccountFormComponent.prototype.setPixKeyValidators = function (isEditMode, isAlphanumericCNPJ) {
232
239
  var genericPixKey = this.pixAccountFormGroup.get("pixKey");
233
240
  if (this.pixKeyType) {
234
241
  switch (this.pixKeyType) {
@@ -248,9 +255,7 @@ var HistoricalPixAccountFormComponent = /** @class */ (function () {
248
255
  ]));
249
256
  break;
250
257
  case "CNPJ":
251
- genericPixKey.setValidators(Validators.compose([
252
- Validators.required, GenericValidator.isValidCnpj,
253
- ]));
258
+ this.configureCnpjKeyValidators(isAlphanumericCNPJ, genericPixKey);
254
259
  break;
255
260
  case "RANDOM_KEY":
256
261
  genericPixKey.setValidators(Validators.required);
@@ -265,6 +270,23 @@ var HistoricalPixAccountFormComponent = /** @class */ (function () {
265
270
  genericPixKey.updateValueAndValidity();
266
271
  }
267
272
  };
273
+ /**
274
+ * Escolhe o validator do CNPJ conforme a feature toggle alphanumericCNPJFeature.
275
+ * @param isAlphanumericCNPJ Feature toggle que define se o CNPJ pode ser alfanumérico.
276
+ * @param genericPixKey Tipo AbstractControl do campo pixKey.
277
+ */
278
+ HistoricalPixAccountFormComponent.prototype.configureCnpjKeyValidators = function (isAlphanumericCNPJ, genericPixKey) {
279
+ if (isAlphanumericCNPJ) {
280
+ genericPixKey.setValidators(Validators.compose([
281
+ Validators.required, GenericValidator.isValidCnpjAlphanumeric,
282
+ ]));
283
+ }
284
+ else {
285
+ genericPixKey.setValidators(Validators.compose([
286
+ Validators.required, GenericValidator.isValidCnpj,
287
+ ]));
288
+ }
289
+ };
268
290
  /**
269
291
  * Este método calcula as parcentagens que já foram inseridas, e seta a diferença para chegar em
270
292
  * 100% na validação do campo "percentage" como um novo maxValue;
@@ -340,6 +362,13 @@ var HistoricalPixAccountFormComponent = /** @class */ (function () {
340
362
  }
341
363
  };
342
364
  };
365
+ Object.defineProperty(HistoricalPixAccountFormComponent.prototype, "cnpjMask", {
366
+ get: function () {
367
+ return FormatUtilsService.getCpfCnpjMask("CNPJ", this.isAlphanumericCNPJ);
368
+ },
369
+ enumerable: true,
370
+ configurable: true
371
+ });
343
372
  HistoricalPixAccountFormComponent.ctorParameters = function () { return [
344
373
  { type: FormBuilder },
345
374
  { type: ChangeDetectorRef }
@@ -371,6 +400,9 @@ var HistoricalPixAccountFormComponent = /** @class */ (function () {
371
400
  tslib_1.__decorate([
372
401
  Input()
373
402
  ], HistoricalPixAccountFormComponent.prototype, "permitsEditBankAccountForm", void 0);
403
+ tslib_1.__decorate([
404
+ Input()
405
+ ], HistoricalPixAccountFormComponent.prototype, "isAlphanumericCNPJ", void 0);
374
406
  tslib_1.__decorate([
375
407
  Output()
376
408
  ], HistoricalPixAccountFormComponent.prototype, "visibleChange", void 0);
@@ -392,11 +424,11 @@ var HistoricalPixAccountFormComponent = /** @class */ (function () {
392
424
  HistoricalPixAccountFormComponent = tslib_1.__decorate([
393
425
  Component({
394
426
  selector: "pix-account",
395
- template: "<div id=\"main\">\n <form [formGroup]=\"pixAccountFormGroup\" autocomplete=\"off\">\n <div class=\"ui-fluid\">\n <div class=\"ui-g\">\n <!-- Tipo de chave -->\n <div class=\"ui-md-6 ui-sm-12 required\">\n <label>{{'hcm.payroll.employees_addition_pix_key_type'|translate}}</label>\n <input-rest-auto-complete-enum [dropdown]=\"true\" server=\"payroll\"\n enumeration=\"PixKeyType\"\n placeholder=\"{{'hcm.payroll.select' | translate}}\"\n name=\"pixKeyType\" [form]=\"pixAccountFormGroup\"\n (onSelect)=\"onChangePixKeyType($event)\"\n (onClear)=\"onClearPixKeyType()\"\n id=\"ta-pixKeyType\"></input-rest-auto-complete-enum>\n <s-control-errors [control]=\"pixAccountFormGroup.get('pixKeyType')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n pixKeyTypeBankAccountDuplicate: 'hcm.payroll.historical_pix_key_type_bank_account_duplicate' | translate\n }\">\n </s-control-errors>\n </div>\n <!--Chave Pix-->\n <div class=\"ui-md-6 ui-sm-12\" [ngClass]=\"{'required': pixKeyType !== 'BANK_ACCOUNT'}\">\n <label>{{'hcm.payroll.employees_addition_pix_key' | translate}}</label>\n <ng-container [ngSwitch]=\"pixKeyType\">\n <input *ngSwitchCase=\"'TELEPHONE'\" only-number\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n (keyup)=\"phoneMask($event)\" maxlength=\"15\"\n placeholder=\"(__) ____-____\">\n <p-inputMask *ngSwitchCase=\"'CPF'\"\n id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"___.___.___-__\"\n mask=\"999.999.999-99\" [unmask]=\"true\"></p-inputMask>\n <p-inputMask *ngSwitchCase=\"'CNPJ'\"\n id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"__.___.___/____-__\"\n mask=\"99.999.999/9999-99\" [unmask]=\"true\"></p-inputMask>\n <input *ngSwitchCase=\"'EMAIL'\"\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"{{'hcm.payroll.employees_addition_email'|translate}}\"/>\n <input *ngSwitchCase=\"'BANK_ACCOUNT'\" disabled\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"/>\n <input *ngSwitchDefault\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\" maxlength=\"100\" />\n </ng-container>\n <s-control-errors *ngIf=\"isShowPixKeyFieldValidatorMessage\" id=\"er-pix-key\"\n [control]=\"pixAccountFormGroup.get('pixKey')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n invalidPhoneNumber: 'hcm.payroll.employees_addition_invalid_phone_number' | translate: { value: pixAccountFormGroup.get('pixKey').value },\n invalidEmail: 'hcm.payroll.employees_addition_email_invalid' | translate,\n cpfNotValid: 'hcm.payroll.employees_addition_cpf_error' | translate,\n cnpjNotValid: 'hcm.payroll.employees_addition_cnpj_error' | translate\n }\">\n </s-control-errors>\n </div>\n <!--Percentual-->\n <div class=\"ui-md-6 ui-sm-12 required\">\n <label id=\"lb-percentage\"\n for=\"ff-percentage\">{{ 'hcm.payroll.historical_bank_account_label_percentage' | translate }}</label>\n <div class=\"ui-inputgroup\">\n <span class=\"ui-inputgroup-addon\">%</span>\n <input pInputText id=\"ff-percentage\" name=\"percentage\"\n formControlName=\"percentage\"\n currencyMask\n [options]=\"optionsPercentage\"\n [placeholder]=\"percentagePlaceholder\"/>\n </div>\n <s-control-errors [control]=\"pixAccountFormGroup.get('percentage')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n maxlength: 'hcm.payroll.error_max_length' | translate: { value: '6' },\n max: 'hcm.payroll.error_max_value_number' | translate: { value: maxValuePercentage },\n min: 'hcm.payroll.error_min_value_number' | translate: { value: '0,01' }\n }\">\n </s-control-errors>\n </div>\n <div class=\"ui-g-12\">\n <p-fieldset\n legend=\"{{ 'hcm.payroll.custom_fields' | translate }}\"\n [attr.data-hidden]=\"!customFields || !customFields.fields.length\"\n >\n <s-custom-fields\n domain=\"hcm\"\n service=\"{{customService}}\"\n entity=\"{{customEntity}}\"\n formControlName=\"customFields\"\n [invalidErrorLabel]=\"'hcm.payroll.employees_invalid_field' | translate\"\n >\n </s-custom-fields>\n </p-fieldset>\n </div>\n </div>\n </div>\n </form>\n\n <div [ngClass]=\"withSideBar ? 'footer' : 'footer-s-border'\">\n <div class=\"form-group\">\n <s-button id=\"btn-save\" label=\"{{ labelBtnAdd | translate}}\" priority=\"primary\"\n (onClick)=\"addItem()\" *ngIf=\"visibleBtnSave && !this.isView\"></s-button>\n <s-button *ngIf=\"withSideBar\" id=\"btn-close\" label=\"{{'hcm.payroll.cancel'|translate}}\" priority=\"secondary\"\n priority=\"link\" (onClick)=\"close()\"></s-button>\n </div>\n </div>\n</div>\n",
427
+ template: "<div id=\"main\">\n <form [formGroup]=\"pixAccountFormGroup\" autocomplete=\"off\">\n <div class=\"ui-fluid\">\n <div class=\"ui-g\">\n <!-- Tipo de chave -->\n <div class=\"ui-md-6 ui-sm-12 required\">\n <label>{{'hcm.payroll.employees_addition_pix_key_type'|translate}}</label>\n <input-rest-auto-complete-enum [dropdown]=\"true\" server=\"payroll\"\n enumeration=\"PixKeyType\"\n placeholder=\"{{'hcm.payroll.select' | translate}}\"\n name=\"pixKeyType\" [form]=\"pixAccountFormGroup\"\n (onSelect)=\"onChangePixKeyType($event)\"\n (onClear)=\"onClearPixKeyType()\"\n id=\"ta-pixKeyType\"></input-rest-auto-complete-enum>\n <s-control-errors [control]=\"pixAccountFormGroup.get('pixKeyType')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n pixKeyTypeBankAccountDuplicate: 'hcm.payroll.historical_pix_key_type_bank_account_duplicate' | translate\n }\">\n </s-control-errors>\n </div>\n <!--Chave Pix-->\n <div class=\"ui-md-6 ui-sm-12\" [ngClass]=\"{'required': pixKeyType !== 'BANK_ACCOUNT'}\">\n <label>{{'hcm.payroll.employees_addition_pix_key' | translate}}</label>\n <ng-container [ngSwitch]=\"pixKeyType\">\n <input *ngSwitchCase=\"'TELEPHONE'\" only-number\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n (keyup)=\"phoneMask($event)\" maxlength=\"15\"\n placeholder=\"(__) ____-____\">\n <p-inputMask *ngSwitchCase=\"'CPF'\"\n id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"___.___.___-__\"\n mask=\"999.999.999-99\" [unmask]=\"true\"></p-inputMask>\n <p-inputMask *ngSwitchCase=\"'CNPJ'\"\n id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"__.___.___/____-__\"\n [mask]=\"cnpjMask\" [unmask]=\"true\"></p-inputMask>\n <input *ngSwitchCase=\"'EMAIL'\"\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"{{'hcm.payroll.employees_addition_email'|translate}}\"/>\n <input *ngSwitchCase=\"'BANK_ACCOUNT'\" disabled\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"/>\n <input *ngSwitchDefault\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\" maxlength=\"100\" />\n </ng-container>\n <s-control-errors *ngIf=\"isShowPixKeyFieldValidatorMessage\" id=\"er-pix-key\"\n [control]=\"pixAccountFormGroup.get('pixKey')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n invalidPhoneNumber: 'hcm.payroll.employees_addition_invalid_phone_number' | translate: { value: pixAccountFormGroup.get('pixKey').value },\n invalidEmail: 'hcm.payroll.employees_addition_email_invalid' | translate,\n cpfNotValid: 'hcm.payroll.employees_addition_cpf_error' | translate,\n cnpjNotValid: 'hcm.payroll.employees_addition_cnpj_error' | translate\n }\">\n </s-control-errors>\n </div>\n <!--Percentual-->\n <div class=\"ui-md-6 ui-sm-12 required\">\n <label id=\"lb-percentage\"\n for=\"ff-percentage\">{{ 'hcm.payroll.historical_bank_account_label_percentage' | translate }}</label>\n <div class=\"ui-inputgroup\">\n <span class=\"ui-inputgroup-addon\">%</span>\n <input pInputText id=\"ff-percentage\" name=\"percentage\"\n formControlName=\"percentage\"\n currencyMask\n [options]=\"optionsPercentage\"\n [placeholder]=\"percentagePlaceholder\"/>\n </div>\n <s-control-errors [control]=\"pixAccountFormGroup.get('percentage')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n maxlength: 'hcm.payroll.error_max_length' | translate: { value: '6' },\n max: 'hcm.payroll.error_max_value_number' | translate: { value: maxValuePercentage },\n min: 'hcm.payroll.error_min_value_number' | translate: { value: '0,01' }\n }\">\n </s-control-errors>\n </div>\n <div class=\"ui-g-12\">\n <p-fieldset\n legend=\"{{ 'hcm.payroll.custom_fields' | translate }}\"\n [attr.data-hidden]=\"!customFields || !customFields.fields.length\"\n >\n <s-custom-fields\n domain=\"hcm\"\n service=\"{{customService}}\"\n entity=\"{{customEntity}}\"\n formControlName=\"customFields\"\n [invalidErrorLabel]=\"'hcm.payroll.employees_invalid_field' | translate\"\n >\n </s-custom-fields>\n </p-fieldset>\n </div>\n </div>\n </div>\n </form>\n\n <div [ngClass]=\"withSideBar ? 'footer' : 'footer-s-border'\">\n <div class=\"form-group\">\n <s-button id=\"btn-save\" label=\"{{ labelBtnAdd | translate}}\" priority=\"primary\"\n (onClick)=\"addItem()\" *ngIf=\"visibleBtnSave && !this.isView\"></s-button>\n <s-button *ngIf=\"withSideBar\" id=\"btn-close\" label=\"{{'hcm.payroll.cancel'|translate}}\" priority=\"secondary\"\n priority=\"link\" (onClick)=\"close()\"></s-button>\n </div>\n </div>\n</div>\n",
396
428
  styles: [".refresh{width:100%!important}#table-annuity .col-default-s{width:10%}#table-annuity .col-default-m{width:12%}#table-annuity .col-default-l{width:16%}#table-annuity .col-action{width:10%}#table-annuity .icon-warning{text-align:center!important;color:#ff6d00c7!important}@media screen and (max-width:612px){#table-annuity .col-default-1,#table-annuity .col-default-2{width:16%}#table-annuity .col-default-3{width:26%}#table-annuity .col-icon{width:10%}#table-annuity .col-action{width:27%}}#main{display:-webkit-box;display:flex;height:100%;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}#main form{height:100%}#main .footer{border-top:1px solid #ccc;padding-top:15px;margin-top:15px;flex-shrink:0;margin-bottom:-18px}#main .footer-s-border{padding-left:7px;flex-shrink:0;margin-bottom:-18px}"]
397
429
  })
398
430
  ], HistoricalPixAccountFormComponent);
399
431
  return HistoricalPixAccountFormComponent;
400
432
  }());
401
433
  export { HistoricalPixAccountFormComponent };
402
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yaWNhbC1waXgtYWNjb3VudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItZ2VzdGFvLXBlc3NvYXMvcGF5cm9sbC1jb3JlLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9oaXN0b3JpY2FsLXBpeC1hY2NvdW50L2hpc3RvcmljYWwtcGl4LWFjY291bnQtZm9ybS9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGFBQWEsRUFDYixTQUFTLEVBQ1QsT0FBTyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUF1QixxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUNILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsaUJBQWlCLEdBQ3BCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFPbkY7SUF5Q0ksMkNBQ1ksV0FBd0IsRUFDeEIsRUFBcUI7UUFEckIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFoQzFCLGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBRTVCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFNUIsZUFBVSxHQUFjLElBQUksU0FBUyxDQUFD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bnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgVmlld0NoaWxkLFxuICAgIERvQ2hlY2ssXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzLCBWYWxpZGF0b3JGbiwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBOdW1iZXJMb2NhbGVPcHRpb25zLCBDdXN0b21GaWVsZHNDb21wb25lbnQgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1xuICAgIHZlcmlmeVZhbGlkYXRpb25zRm9ybSxcbiAgICBjb25maWdFbmFibGVkRmllbGRzLFxuICAgIG1vdW50Q3VzdG9tVG9TaG93LFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvaGVscGVyc1wiO1xuaW1wb3J0IHsgR2VuZXJpY1ZhbGlkYXRvciB9IGZyb20gXCIuLi8uLi91dGlscy9nZW5lcmljLXZhbGlkYXRvcnNcIjtcbmltcG9ydCB7IEZvcm1hdFV0aWxzU2VydmljZSB9IGZyb20gXCIuLi8uLi91dGlscy9mb3JtYXQtdXRpbHMvZm9ybWF0LXV0aWxzLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwicGl4LWFjY291bnRcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2hpc3RvcmljYWwtcGl4LWFjY291bnQtZm9ybS5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi4vaGlzdG9yaWNhbC1waXgtYWNjb3VudC5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBIaXN0b3JpY2FsUGl4QWNjb3VudEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjayB7XG4gICAgQFZpZXdDaGlsZChDdXN0b21GaWVsZHNDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgY3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZHNDb21wb25lbnQ7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXJyZW5jeTogTnVtYmVyTG9jYWxlT3B0aW9ucztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXN0b21FbnRpdHk6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXN0b21TZXJ2aWNlOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgd2l0aFNpZGVCYXI6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlzRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwYXJhbXNGb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkZWZhdWx0Q3BmTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBlcm1pdHNFZGl0QmFua0FjY291bnRGb3JtOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmlzaWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwaXhBY2NvdW50SXRlbVRvTGlzdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIHByaXZhdGUgX3Zpc2libGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIGVtcGxveWVlSWQ6IHN0cmluZztcbiAgICBwcml2YXRlIHBpeEFjY291bnRMaXN0OiBvYmplY3RbXTtcbiAgICBwcml2YXRlIGluaXRpYWxWYWxpZGF0b3JPZlBlcmNlbnRhZ2U6IFZhbGlkYXRvckZuW10gPSBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4oMC4wMSldO1xuXG5cbiAgICBwdWJsaWMgbGFiZWxCdG5BZGQ6IHN0cmluZyA9IFwiaGNtLnBheXJvbGwuZW1wbG95ZWVzX2FkZFwiO1xuICAgIHB1YmxpYyBwaXhBY2NvdW50Rm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gICAgcHVibGljIG1heFZhbHVlUGVyY2VudGFnZTogbnVtYmVyID0gMTAwLjAwO1xuICAgIHB1YmxpYyB2aXNpYmxlQnRuU2F2ZTogYm9vbGVhbiA9IHRydWU7XG4gICAgcHVibGljIGlzVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBwaXhLZXlUeXBlOiBzdHJpbmc7XG4gICAgcHVibGljIGlzU2hvd1BpeEtleUZpZWxkVmFsaWRhdG9yTWVzc2FnZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICApIHtcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtR3JvdXAoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclN1YmplY3RzKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwICYmIHRoaXMucGl4S2V5VHlwZSA9PT0gXCJCQU5LX0FDQ09VTlRcIikge1xuICAgICAgICAgICAgY29uc3QgcGl4S2V5Q29udHJvbCA9IHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJwaXhLZXlcIik7XG4gICAgICAgICAgICBpZiAocGl4S2V5Q29udHJvbCAmJiAhcGl4S2V5Q29udHJvbC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHBpeEtleUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyU3ViamVjdHMoKTogdm9pZCB7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgaWQ6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKSxcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCksXG4gICAgICAgICAgICBlbXBsb3llZTogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKHsgdmFsdWU6IHsgdGFibGVJZDogbnVsbCB9LCBkaXNhYmxlZDogdHJ1ZSB9KSxcbiAgICAgICAgICAgIGRhdGVDaGFuZ2U6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKSxcbiAgICAgICAgICAgIHBpeEtleVR5cGU6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgICAgIHBpeEtleTogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpLFxuICAgICAgICAgICAgcGVyY2VudGFnZTogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5pbml0aWFsVmFsaWRhdG9yT2ZQZXJjZW50YWdlLFxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KHRoaXMubWF4VmFsdWVQZXJjZW50YWdlKSxcbiAgICAgICAgICAgIF0pKSxcbiAgICAgICAgICAgIGV4dGVybmFsSWQ6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKSxcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkczogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGFuZ2VQaXhLZXlUeXBlKGl0ZW06IGFueSkge1xuICAgICAgICBpZiAoaXRlbS5rZXkpIHtcbiAgICAgICAgICAgIHRoaXMucGl4S2V5VHlwZSA9IGl0ZW0ua2V5O1xuICAgICAgICAgICAgdGhpcy5pc1Nob3dQaXhLZXlGaWVsZFZhbGlkYXRvck1lc3NhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVwiKS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5zZXRQaXhLZXlWYWxpZGF0b3JzKHRydWUpO1xuXG4gICAgICAgICAgICBpZihpdGVtLmtleSA9PT0gXCJDUEZcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdENwZlBpeEtleSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xlYXJQaXhLZXlUeXBlKCkge1xuICAgICAgICB0aGlzLmlzU2hvd1BpeEtleUZpZWxkVmFsaWRhdG9yTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5XCIpLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRoaXMudmlzaWJsZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGlzRWRpdEFuZFZpZXdWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgIHRoaXMudmlzaWJsZUJ0blNhdmUgPSB0cnVlO1xuXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wZXJtaXRzRWRpdEJhbmtBY2NvdW50KSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1pdHNFZGl0QmFua0FjY291bnRGb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5jdXJyZW50SXRlbSAmJiBPYmplY3Qua2V5cyh2YWx1ZS5jdXJyZW50SXRlbSkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLmNvbnZlcnREVE9Ub1Nob3dXaXRoQ3VzdG9tRmllbGRzKHsuLi52YWx1ZS5jdXJyZW50SXRlbX0pKTtcbiAgICAgICAgICAgIHRoaXMubGFiZWxCdG5BZGQgPSBcImhjbS5wYXlyb2xsLmVtcGxveWVlc191cGRhdGVcIjtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdG9yc0FjY29yZGluZ0xpc3QodmFsdWUubGlzdERhdGEsIHZhbHVlLmN1cnJlbnRJdGVtW1wiaW5kZXhcIl0sIHZhbHVlICYmIHZhbHVlW1wiaXNFZGl0TW9kZVwiXSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWaWV3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWdFbmFibGVGaWVsZHModmFsdWUgJiYgdmFsdWVbXCJpc0VkaXRNb2RlXCJdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVR5cGVcIikudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waXhLZXlUeXBlID0gdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVR5cGVcIikudmFsdWUua2V5O1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0UGl4S2V5VGVsZXBob25lTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sYWJlbEJ0bkFkZCA9IFwiaGNtLnBheXJvbGwuZW1wbG95ZWVzX2FkZFwiO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdFBpeEtleVRlbGVwaG9uZU51bWJlcigpIHtcbiAgICAgICAgaWYgKHRoaXMucGl4S2V5VHlwZSA9PT0gXCJURUxFUEhPTkVcIikge1xuICAgICAgICAgICAgdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVwiKS5zZXRWYWx1ZShGb3JtYXRVdGlsc1NlcnZpY2UuZ2V0Rm9ybWF0dGVkVGVsZXBob25lTnVtYmVyKHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJwaXhLZXlcIikudmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjb252ZXJ0RFRPVG9TaG93V2l0aEN1c3RvbUZpZWxkcyhkYXRhOiBvYmplY3QpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCBvYmo6IGFueSA9IHsuLi4gZGF0YX07XG4gICAgICAgIG9ialtcImN1c3RvbUZpZWxkc1wiXSA9IG1vdW50Q3VzdG9tVG9TaG93KG9ialtcImN1c3RvbUZpZWxkc1wiXSk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25maWdFbmFibGVGaWVsZHMoaXNFZGl0TW9kZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnZpc2libGVCdG5TYXZlID0gaXNFZGl0TW9kZTtcblxuICAgICAgICBpZih0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5VHlwZVwiKS52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5waXhLZXlUeXBlID0gdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVR5cGVcIikudmFsdWUua2V5O1xuICAgICAgICAgICAgdGhpcy5zZXRQaXhLZXlWYWxpZGF0b3JzKGlzRWRpdE1vZGUpO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBpeEtleVRlbGVwaG9uZU51bWJlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRW5hYmxlZEZpZWxkcyh0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAsIGlzRWRpdE1vZGUsIFtcbiAgICAgICAgICAgIFwicGl4S2V5VHlwZVwiLFxuICAgICAgICAgICAgXCJwaXhLZXlcIixcbiAgICAgICAgICAgIFwicGVyY2VudGFnZVwiLFxuICAgICAgICAgICAgXCJjdXN0b21GaWVsZHNcIixcbiAgICAgICAgXSwgW10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEl0ZW0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHZlcmlmeVZhbGlkYXRpb25zRm9ybS5jYWxsKHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cCk7XG5cbiAgICAgICAgaWYgKHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZW1wbG95ZWVJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJlbXBsb3llZVwiKS5zZXRWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlSWQ6IHRoaXMuZW1wbG95ZWVJZCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGl4QWNjb3VudEl0ZW1Ub0xpc3QuZW1pdCh0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAucmVzZXQoKTtcbiAgICAgICAgdGhpcy5sYWJlbEJ0bkFkZCA9IFwiaGNtLnBheXJvbGwuZW1wbG95ZWVzX2FkZFwiO1xuICAgICAgICBpZiAodGhpcy5jdXN0b21GaWVsZHMgJiYgdGhpcy5jdXN0b21GaWVsZHMuZm9ybUdyb3VwKSB0aGlzLmN1c3RvbUZpZWxkcy5mb3JtR3JvdXAucmVzZXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBlcmNlbnRhZ2VQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYDAkeyB0aGlzLmN1cnJlbmN5ICYmIHRoaXMuY3VycmVuY3kuZGVjaW1hbFNlcGFyYXRvciB9MDBgO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb3B0aW9uc1BlcmNlbnRhZ2UoKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHsgLi4udGhpcy5nZXRPcHRpb25zKCksIHByZWNpc2lvbjogMiB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3B0aW9ucygpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJlZml4OiBcIlwiLFxuICAgICAgICAgICAgdGhvdXNhbmRzOiB0aGlzLmN1cnJlbmN5LnRob3VzYW5kc1NlcGFyYXRvcixcbiAgICAgICAgICAgIGRlY2ltYWw6IHRoaXMuY3VycmVuY3kuZGVjaW1hbFNlcGFyYXRvcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPIElucHV0IHF1ZSByZWNlYmUgYSBsaXN0YSBkbyBjb21wb25lbnQgcGFpIGUgY2hhbWEgbyBtw6l0b2RvIGRlIHZhbGlkYcOnw6NvIHBhc3NhbmRvIGEgbGlzdGEgcmVjZWJpZGEuXG4gICAgICogQHBhcmFtIHBpeEFjY291bnRMaXN0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGdldExpc3RQaXhBY2NvdW50KHBpeEFjY291bnRMaXN0OiBvYmplY3RbXSkge1xuICAgICAgICBpZiAocGl4QWNjb3VudExpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdG9yc0FjY29yZGluZ0xpc3QocGl4QWNjb3VudExpc3QsIG51bGwsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWNlYmUgYSBsaXN0YSBkZSByZWdpc3Ryb3MgasOhIGluc2VyaWRvcyBuYSB0YWJlbGEgYWRpY2lvbmEgZW0gdW1hIHZhcmnDoXZlbCBvcyB2YWxvcmVzIHF1ZSBzZXLDo28gdXNhZG9zIHBhcmFcbiAgICAgKiBhIHZhbGlkYcOnw6NvIGRvcyBjYW1wb3MgXCJwZXJjZW50YWdlXCIgZSBcInBpeEFjY291bnRcIi5cbiAgICAgKiBRdWFuZG8gdGVtIGluZGV4IHNpZ25pZmljYSBxdWUgZXN0w6EgZW0gdW1hIGVkacOnw6NvLCBvcyB2YWxvcmVzIG5hIHBvc2nDp8OjbyBkbyByZWdpc3RybyBkYSBlZGnDp8OjbyAoaW5kZXgpIG7Do28gc2Vyw6NvIGFkaWNpb25hZG9zXG4gICAgICogbm8gYXJyYXkgZGUgY29tcGFyYcOnw6NvIGRvcyB2YWxpZGF0b3JzLlxuICAgICAqIEBwYXJhbSBwaXhBY2NvdW50TGlzdFxuICAgICAqIEBwYXJhbSBpbmRleFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0VmFsaWRhdG9yc0FjY29yZGluZ0xpc3QocGl4QWNjb3VudExpc3Q6IG9iamVjdFtdLCBpbmRleDogbnVtYmVyID0gbnVsbCwgaXNFZGl0TW9kZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5waXhBY2NvdW50TGlzdCA9IHBpeEFjY291bnRMaXN0ICYmIHBpeEFjY291bnRMaXN0Lmxlbmd0aCA/IFsuLi5waXhBY2NvdW50TGlzdF0gOiBbXTtcblxuICAgICAgICBjb25zdCBwZXJjZW50YWdlSW5jbHVkZWQ6IGFueSA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLnBpeEFjY291bnRMaXN0ICYmIHRoaXMucGl4QWNjb3VudExpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnBpeEFjY291bnRMaXN0LmZpbHRlcigoZmllbGQ6IGFueSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkW1wicGVyY2VudGFnZVwiXSAmJiBrZXkgIT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZUluY2x1ZGVkLnB1c2goZmllbGRbXCJwZXJjZW50YWdlXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmVmb3JlU2V0UGl4S2V5VHlwZVZhbGlkYXRvcigpO1xuICAgICAgICB0aGlzLnNldFBpeEtleVZhbGlkYXRvcnMoaXNFZGl0TW9kZSk7XG4gICAgICAgIHRoaXMudmFsaWRhdGVQZXJjZW50YWdlVmFsaWQocGVyY2VudGFnZUluY2x1ZGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbnRlcyBkZSBzZXRhciBvIHZhbGlkYXRvciBwcmVwYXJhIGFzIHZhcmnDoXZlaXMgbmVjZXNzw6FyaWEgcGFyYSBxdWUgc2VqYSBmZWl0YSBhIHZhbGlkYcOnw6NvIGRvIGNhbXBvLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRQaXhLZXlWYWxpZGF0b3JzKGlzRWRpdE1vZGU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgZ2VuZXJpY1BpeEtleSA9IHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJwaXhLZXlcIik7XG4gICAgICAgIGlmICh0aGlzLnBpeEtleVR5cGUpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5waXhLZXlUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlRFTEVQSE9ORVwiOlxuICAgICAgICAgICAgICAgICAgICBnZW5lcmljUGl4S2V5LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsIEdlbmVyaWNWYWxpZGF0b3IuaXNWYWxpZFBob25lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJFTUFJTFwiOlxuICAgICAgICAgICAgICAgICAgICBnZW5lcmljUGl4S2V5LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsIEdlbmVyaWNWYWxpZGF0b3IuaXNWYWxpZEVtYWlsLFxuICAgICAgICAgICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJDUEZcIjpcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY1BpeEtleS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLCBHZW5lcmljVmFsaWRhdG9yLmlzVmFsaWRDcGYsXG4gICAgICAgICAgICAgICAgICAgIF0pKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkNOUEpcIjpcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY1BpeEtleS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLCBHZW5lcmljVmFsaWRhdG9yLmlzVmFsaWRDbnBqLFxuICAgICAgICAgICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJSQU5ET01fS0VZXCI6XG4gICAgICAgICAgICAgICAgICAgIGdlbmVyaWNQaXhLZXkuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY1BpeEtleS5zZXRWYWxpZGF0b3JzKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoaXNFZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgIGdlbmVyaWNQaXhLZXkuZW5hYmxlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdlbmVyaWNQaXhLZXkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc3RlIG3DqXRvZG8gY2FsY3VsYSBhcyBwYXJjZW50YWdlbnMgcXVlIGrDoSBmb3JhbSBpbnNlcmlkYXMsIGUgc2V0YSBhIGRpZmVyZW7Dp2EgcGFyYSBjaGVnYXIgZW1cbiAgICAgKiAxMDAlIG5hIHZhbGlkYcOnw6NvIGRvIGNhbXBvIFwicGVyY2VudGFnZVwiIGNvbW8gdW0gbm92byBtYXhWYWx1ZTtcbiAgICAgKiBAcGFyYW0gbGlzdFZhbHVlXG4gICAgICovXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVBlcmNlbnRhZ2VWYWxpZChsaXN0VmFsdWU6IG51bWJlcltdKSB7XG4gICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGVyY2VudGFnZVwiKTtcbiAgICAgICAgdGhpcy5tYXhWYWx1ZVBlcmNlbnRhZ2UgPSBsaXN0VmFsdWVcbiAgICAgICAgICAgIC5yZWR1Y2UoKGN1cnJlbnRWYWx1ZSwgdG90YWwpID0+IGN1cnJlbnRWYWx1ZSAtIHRvdGFsLFxuICAgICAgICAgICAgICAgIDEwMC4wMCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgcGVyY2VudGFnZVxuICAgICAgICAgICAgLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmluaXRpYWxWYWxpZGF0b3JPZlBlcmNlbnRhZ2UsXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgodGhpcy5tYXhWYWx1ZVBlcmNlbnRhZ2UpLFxuICAgICAgICAgICAgXSkpO1xuICAgICAgICBwZXJjZW50YWdlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgaXNWaWV3TW9kZShjb25kaXRpb246IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc1ZpZXcgPSAhIShjb25kaXRpb24gJiYgIXRoaXMud2l0aFNpZGVCYXIpO1xuICAgICAgICB0aGlzLmNvbmZpZ0VuYWJsZUZpZWxkcyghdGhpcy5pc1ZpZXcpO1xuICAgICAgICBpZiAoIXRoaXMuaXNWaWV3KSB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwaG9uZU1hc2soZXZlbnQ6IGFueSkge1xuICAgICAgICBGb3JtYXRVdGlsc1NlcnZpY2UuZm9ybWF0VGVsZXBob25lSW5wdXRFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdENwZlBpeEtleSgpIHtcbiAgICAgICAgaWYodGhpcy5kZWZhdWx0Q3BmTnVtYmVyKSB7XG4gICAgICAgICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5XCIpLnNldFZhbHVlKHRoaXMuZGVmYXVsdENwZk51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzaGVldERvY3VtZW50ID0gdGhpcy5wYXJhbXNGb3JtLmdldChcInNoZWV0RG9jdW1lbnRcIik7XG4gICAgICAgICAgICBpZihzaGVldERvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3BmID0gc2hlZXREb2N1bWVudC5nZXQoXCJjcGZOdW1iZXJcIikudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYoY3BmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJwaXhLZXlcIikuc2V0VmFsdWUoY3BmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYmVmb3JlU2V0UGl4S2V5VHlwZVZhbGlkYXRvcigpIHtcbiAgICAgICAgY29uc3QgcGl4S2V5VHlwZSA9IHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJwaXhLZXlUeXBlXCIpO1xuXG4gICAgICAgIGlmICh0aGlzLnBpeEFjY291bnRMaXN0ICYmIHRoaXMucGl4QWNjb3VudExpc3QubGVuZ3RoICYmIHBpeEtleVR5cGUpIHtcbiAgICAgICAgICAgIHBpeEtleVR5cGVcbiAgICAgICAgICAgICAgICAuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlRHVwbGljYXRlUGl4S2V5VHlwZUJhbmtBY2NvdW50KHRoaXMucGl4QWNjb3VudExpc3QpLFxuICAgICAgICAgICAgICAgIF0pKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGl4S2V5VHlwZS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUR1cGxpY2F0ZVBpeEtleVR5cGVCYW5rQWNjb3VudChsaXN0Q29tcGFyZTogb2JqZWN0W10pIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbCAmJiBjb250cm9sLnZhbHVlO1xuICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgbGlzdENvbXBhcmUuZmlsdGVyKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkW1wicGl4S2V5VHlwZVwiXS5rZXkgPT09ICdCQU5LX0FDQ09VTlQnICYmIHZhbHVlLmtleSA9PT0gZmllbGRbXCJwaXhLZXlUeXBlXCJdLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAmJiAhdGhpcy5wZXJtaXRzRWRpdEJhbmtBY2NvdW50Rm9ybSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHBpeEtleVR5cGVCYW5rQWNjb3VudER1cGxpY2F0ZTogdHJ1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
434
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yaWNhbC1waXgtYWNjb3VudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItZ2VzdGFvLXBlc3NvYXMvcGF5cm9sbC1jb3JlLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9oaXN0b3JpY2FsLXBpeC1hY2NvdW50L2hpc3RvcmljYWwtcGl4LWFjY291bnQtZm9ybS9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGFBQWEsRUFDYixTQUFTLEVBQ1QsT0FBTyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUF1QixxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUNILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsaUJBQWlCLEdBQ3BCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFPbkY7SUEyQ0ksMkNBQ1ksV0FBd0IsRUFDeEIsRUFBcUI7UUFEckIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFsQzFCLGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBRTVCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFNUIsZUFBVSxHQUFjLElBQUksU0FBUyxDQUFD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QU8sSUFBSSxDQUFDO2FBQ2Y7UUFDTCxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsc0JBQVcsdURBQVE7YUFBbkI7WUFDSSxPQUFPLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDOUUsQ0FBQzs7O09BQUE7O2dCQWpYd0IsV0FBVztnQkFDcEIsaUJBQWlCOztJQTNDakM7UUFEQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7MkVBQ2Y7SUFHcEM7UUFEQyxLQUFLLEVBQUU7dUVBQzZCO0lBRXJDO1FBREMsS0FBSyxFQUFFOzJFQUNvQjtJQUU1QjtRQURDLEtBQUssRUFBRTs0RUFDcUI7SUFFN0I7UUFEQyxLQUFLLEVBQUU7MEVBQzJCO0lBRW5DO1FBREMsS0FBSyxFQUFFO3lFQUMyQjtJQUVuQztRQURDLEtBQUssRUFBRTt5RUFDeUM7SUFFakQ7UUFEQyxLQUFLLEVBQUU7K0VBQytCO0lBRXZDO1FBREMsS0FBSyxFQUFFO3lGQUMyQztJQUVuRDtRQURDLEtBQUssRUFBRTtpRkFDbUM7SUFHM0M7UUFEQyxNQUFNLEVBQUU7NEVBQ2lFO0lBRTFFO1FBREMsTUFBTSxFQUFFO21GQUNnRTtJQXFGekU7UUFEQyxLQUFLLEVBQUU7b0VBR1A7SUFRRDtRQURDLEtBQUssRUFBRTsrRUEwQlA7SUEyRkQ7UUFEQyxLQUFLLEVBQUU7OEVBT1A7SUE0R0Q7UUFEQyxLQUFLLEVBQUU7dUVBS1A7SUFuV1EsaUNBQWlDO1FBTDdDLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLDQ0TkFBMkQ7O1NBRTlELENBQUM7T0FDVyxpQ0FBaUMsQ0E4WjdDO0lBQUQsd0NBQUM7Q0FBQSxBQTlaRCxJQThaQztTQTlaWSxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgRG9DaGVjayxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIFZhbGlkYXRvckZuLCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE51bWJlckxvY2FsZU9wdGlvbnMsIEN1c3RvbUZpZWxkc0NvbXBvbmVudCB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7XG4gICAgdmVyaWZ5VmFsaWRhdGlvbnNGb3JtLFxuICAgIGNvbmZpZ0VuYWJsZWRGaWVsZHMsXG4gICAgbW91bnRDdXN0b21Ub1Nob3csXG59IGZyb20gXCIuLi8uLi91dGlscy9oZWxwZXJzXCI7XG5pbXBvcnQgeyBHZW5lcmljVmFsaWRhdG9yIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2dlbmVyaWMtdmFsaWRhdG9yc1wiO1xuaW1wb3J0IHsgRm9ybWF0VXRpbHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Zvcm1hdC11dGlscy9mb3JtYXQtdXRpbHMuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJwaXgtYWNjb3VudFwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vaGlzdG9yaWNhbC1waXgtYWNjb3VudC1mb3JtLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuLi9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIEhpc3RvcmljYWxQaXhBY2NvdW50Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBEb0NoZWNrIHtcbiAgICBAVmlld0NoaWxkKEN1c3RvbUZpZWxkc0NvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkc0NvbXBvbmVudDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1cnJlbmN5OiBOdW1iZXJMb2NhbGVPcHRpb25zO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1c3RvbUVudGl0eTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1c3RvbVNlcnZpY2U6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB3aXRoU2lkZUJhcjogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXNFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhcmFtc0Zvcm06IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRlZmF1bHRDcGZOdW1iZXI6IHN0cmluZyA9IG51bGw7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGVybWl0c0VkaXRCYW5rQWNjb3VudEZvcm06IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpc0FscGhhbnVtZXJpY0NOUEo6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2aXNpYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBpeEFjY291bnRJdGVtVG9MaXN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgcHJpdmF0ZSBfdmlzaWJsZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgZW1wbG95ZWVJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgcGl4QWNjb3VudExpc3Q6IG9iamVjdFtdO1xuICAgIHByaXZhdGUgaW5pdGlhbFZhbGlkYXRvck9mUGVyY2VudGFnZTogVmFsaWRhdG9yRm5bXSA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwLjAxKV07XG5cblxuICAgIHB1YmxpYyBsYWJlbEJ0bkFkZDogc3RyaW5nID0gXCJoY20ucGF5cm9sbC5lbXBsb3llZXNfYWRkXCI7XG4gICAgcHVibGljIHBpeEFjY291bnRGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwdWJsaWMgbWF4VmFsdWVQZXJjZW50YWdlOiBudW1iZXIgPSAxMDAuMDA7XG4gICAgcHVibGljIHZpc2libGVCdG5TYXZlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBwdWJsaWMgaXNWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHBpeEtleVR5cGU6IHN0cmluZztcbiAgICBwdWJsaWMgaXNTaG93UGl4S2V5RmllbGRWYWxpZGF0b3JNZXNzYWdlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICkge1xuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cCgpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU3ViamVjdHMoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAgJiYgdGhpcy5waXhLZXlUeXBlID09PSBcIkJBTktfQUNDT1VOVFwiKSB7XG4gICAgICAgICAgICBjb25zdCBwaXhLZXlDb250cm9sID0gdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVwiKTtcbiAgICAgICAgICAgIGlmIChwaXhLZXlDb250cm9sICYmICFwaXhLZXlDb250cm9sLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcGl4S2V5Q29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJTdWJqZWN0cygpOiB2b2lkIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUZvcm1Hcm91cCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBpZDogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpLFxuICAgICAgICAgICAgaW5kZXg6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKSxcbiAgICAgICAgICAgIGVtcGxveWVlOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woeyB2YWx1ZTogeyB0YWJsZUlkOiBudWxsIH0sIGRpc2FibGVkOiB0cnVlIH0pLFxuICAgICAgICAgICAgZGF0ZUNoYW5nZTogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpLFxuICAgICAgICAgICAgcGl4S2V5VHlwZTogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICAgICAgcGl4S2V5OiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCksXG4gICAgICAgICAgICBwZXJjZW50YWdlOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmluaXRpYWxWYWxpZGF0b3JPZlBlcmNlbnRhZ2UsXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgodGhpcy5tYXhWYWx1ZVBlcmNlbnRhZ2UpLFxuICAgICAgICAgICAgXSkpLFxuICAgICAgICAgICAgZXh0ZXJuYWxJZDogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpLFxuICAgICAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoYW5nZVBpeEtleVR5cGUoaXRlbTogYW55KSB7XG4gICAgICAgIGlmIChpdGVtLmtleSkge1xuICAgICAgICAgICAgdGhpcy5waXhLZXlUeXBlID0gaXRlbS5rZXk7XG4gICAgICAgICAgICB0aGlzLmlzU2hvd1BpeEtleUZpZWxkVmFsaWRhdG9yTWVzc2FnZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5XCIpLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLnNldFBpeEtleVZhbGlkYXRvcnModHJ1ZSwgdGhpcy5pc0FscGhhbnVtZXJpY0NOUEopO1xuXG4gICAgICAgICAgICBpZihpdGVtLmtleSA9PT0gXCJDUEZcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdENwZlBpeEtleSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xlYXJQaXhLZXlUeXBlKCkge1xuICAgICAgICB0aGlzLmlzU2hvd1BpeEtleUZpZWxkVmFsaWRhdG9yTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5XCIpLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRoaXMudmlzaWJsZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGlzRWRpdEFuZFZpZXdWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgIHRoaXMudmlzaWJsZUJ0blNhdmUgPSB0cnVlO1xuXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wZXJtaXRzRWRpdEJhbmtBY2NvdW50KSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1pdHNFZGl0QmFua0FjY291bnRGb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5jdXJyZW50SXRlbSAmJiBPYmplY3Qua2V5cyh2YWx1ZS5jdXJyZW50SXRlbSkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLmNvbnZlcnREVE9Ub1Nob3dXaXRoQ3VzdG9tRmllbGRzKHsuLi52YWx1ZS5jdXJyZW50SXRlbX0pKTtcbiAgICAgICAgICAgIHRoaXMubGFiZWxCdG5BZGQgPSBcImhjbS5wYXlyb2xsLmVtcGxveWVlc191cGRhdGVcIjtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdG9yc0FjY29yZGluZ0xpc3QodmFsdWUubGlzdERhdGEsIHZhbHVlLmN1cnJlbnRJdGVtW1wiaW5kZXhcIl0sIHZhbHVlICYmIHZhbHVlW1wiaXNFZGl0TW9kZVwiXSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWaWV3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWdFbmFibGVGaWVsZHModmFsdWUgJiYgdmFsdWVbXCJpc0VkaXRNb2RlXCJdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVR5cGVcIikudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waXhLZXlUeXBlID0gdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVR5cGVcIikudmFsdWUua2V5O1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0UGl4S2V5VGVsZXBob25lTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sYWJlbEJ0bkFkZCA9IFwiaGNtLnBheXJvbGwuZW1wbG95ZWVzX2FkZFwiO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdFBpeEtleVRlbGVwaG9uZU51bWJlcigpIHtcbiAgICAgICAgaWYgKHRoaXMucGl4S2V5VHlwZSA9PT0gXCJURUxFUEhPTkVcIikge1xuICAgICAgICAgICAgdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVwiKS5zZXRWYWx1ZShGb3JtYXRVdGlsc1NlcnZpY2UuZ2V0Rm9ybWF0dGVkVGVsZXBob25lTnVtYmVyKHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJwaXhLZXlcIikudmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjb252ZXJ0RFRPVG9TaG93V2l0aEN1c3RvbUZpZWxkcyhkYXRhOiBvYmplY3QpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCBvYmo6IGFueSA9IHsuLi4gZGF0YX07XG4gICAgICAgIG9ialtcImN1c3RvbUZpZWxkc1wiXSA9IG1vdW50Q3VzdG9tVG9TaG93KG9ialtcImN1c3RvbUZpZWxkc1wiXSk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25maWdFbmFibGVGaWVsZHMoaXNFZGl0TW9kZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnZpc2libGVCdG5TYXZlID0gaXNFZGl0TW9kZTtcblxuICAgICAgICBpZih0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5VHlwZVwiKS52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5waXhLZXlUeXBlID0gdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVR5cGVcIikudmFsdWUua2V5O1xuICAgICAgICAgICAgdGhpcy5zZXRQaXhLZXlWYWxpZGF0b3JzKGlzRWRpdE1vZGUsIHRoaXMuaXNBbHBoYW51bWVyaWNDTlBKKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtYXRQaXhLZXlUZWxlcGhvbmVOdW1iZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0VuYWJsZWRGaWVsZHModGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLCBpc0VkaXRNb2RlLCBbXG4gICAgICAgICAgICBcInBpeEtleVR5cGVcIixcbiAgICAgICAgICAgIFwicGl4S2V5XCIsXG4gICAgICAgICAgICBcInBlcmNlbnRhZ2VcIixcbiAgICAgICAgICAgIFwiY3VzdG9tRmllbGRzXCIsXG4gICAgICAgIF0sIFtdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJdGVtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB2ZXJpZnlWYWxpZGF0aW9uc0Zvcm0uY2FsbCh0aGlzLnBpeEFjY291bnRGb3JtR3JvdXApO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC52YWxpZCkge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5waXhLZXlUeXBlID09PSAnQ05QSicgJiYgdGhpcy5pc0FscGhhbnVtZXJpY0NOUEopIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaXhLZXkgPSB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KCdwaXhLZXknKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAocGl4S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoJ3BpeEtleScpLnNldFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGl4S2V5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvW15BLVowLTldL2csICcnKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuZW1wbG95ZWVJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJlbXBsb3llZVwiKS5zZXRWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlSWQ6IHRoaXMuZW1wbG95ZWVJZCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGl4QWNjb3VudEl0ZW1Ub0xpc3QuZW1pdCh0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAucmVzZXQoKTtcbiAgICAgICAgdGhpcy5sYWJlbEJ0bkFkZCA9IFwiaGNtLnBheXJvbGwuZW1wbG95ZWVzX2FkZFwiO1xuICAgICAgICBpZiAodGhpcy5jdXN0b21GaWVsZHMgJiYgdGhpcy5jdXN0b21GaWVsZHMuZm9ybUdyb3VwKSB0aGlzLmN1c3RvbUZpZWxkcy5mb3JtR3JvdXAucmVzZXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBlcmNlbnRhZ2VQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYDAkeyB0aGlzLmN1cnJlbmN5ICYmIHRoaXMuY3VycmVuY3kuZGVjaW1hbFNlcGFyYXRvciB9MDBgO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb3B0aW9uc1BlcmNlbnRhZ2UoKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHsgLi4udGhpcy5nZXRPcHRpb25zKCksIHByZWNpc2lvbjogMiB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3B0aW9ucygpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJlZml4OiBcIlwiLFxuICAgICAgICAgICAgdGhvdXNhbmRzOiB0aGlzLmN1cnJlbmN5LnRob3VzYW5kc1NlcGFyYXRvcixcbiAgICAgICAgICAgIGRlY2ltYWw6IHRoaXMuY3VycmVuY3kuZGVjaW1hbFNlcGFyYXRvcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPIElucHV0IHF1ZSByZWNlYmUgYSBsaXN0YSBkbyBjb21wb25lbnQgcGFpIGUgY2hhbWEgbyBtw6l0b2RvIGRlIHZhbGlkYcOnw6NvIHBhc3NhbmRvIGEgbGlzdGEgcmVjZWJpZGEuXG4gICAgICogQHBhcmFtIHBpeEFjY291bnRMaXN0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGdldExpc3RQaXhBY2NvdW50KHBpeEFjY291bnRMaXN0OiBvYmplY3RbXSkge1xuICAgICAgICBpZiAocGl4QWNjb3VudExpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdG9yc0FjY29yZGluZ0xpc3QocGl4QWNjb3VudExpc3QsIG51bGwsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWNlYmUgYSBsaXN0YSBkZSByZWdpc3Ryb3MgasOhIGluc2VyaWRvcyBuYSB0YWJlbGEgYWRpY2lvbmEgZW0gdW1hIHZhcmnDoXZlbCBvcyB2YWxvcmVzIHF1ZSBzZXLDo28gdXNhZG9zIHBhcmFcbiAgICAgKiBhIHZhbGlkYcOnw6NvIGRvcyBjYW1wb3MgXCJwZXJjZW50YWdlXCIgZSBcInBpeEFjY291bnRcIi5cbiAgICAgKiBRdWFuZG8gdGVtIGluZGV4IHNpZ25pZmljYSBxdWUgZXN0w6EgZW0gdW1hIGVkacOnw6NvLCBvcyB2YWxvcmVzIG5hIHBvc2nDp8OjbyBkbyByZWdpc3RybyBkYSBlZGnDp8OjbyAoaW5kZXgpIG7Do28gc2Vyw6NvIGFkaWNpb25hZG9zXG4gICAgICogbm8gYXJyYXkgZGUgY29tcGFyYcOnw6NvIGRvcyB2YWxpZGF0b3JzLlxuICAgICAqIEBwYXJhbSBwaXhBY2NvdW50TGlzdFxuICAgICAqIEBwYXJhbSBpbmRleFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0VmFsaWRhdG9yc0FjY29yZGluZ0xpc3QocGl4QWNjb3VudExpc3Q6IG9iamVjdFtdLCBpbmRleDogbnVtYmVyID0gbnVsbCwgaXNFZGl0TW9kZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5waXhBY2NvdW50TGlzdCA9IHBpeEFjY291bnRMaXN0ICYmIHBpeEFjY291bnRMaXN0Lmxlbmd0aCA/IFsuLi5waXhBY2NvdW50TGlzdF0gOiBbXTtcblxuICAgICAgICBjb25zdCBwZXJjZW50YWdlSW5jbHVkZWQ6IGFueSA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLnBpeEFjY291bnRMaXN0ICYmIHRoaXMucGl4QWNjb3VudExpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnBpeEFjY291bnRMaXN0LmZpbHRlcigoZmllbGQ6IGFueSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkW1wicGVyY2VudGFnZVwiXSAmJiBrZXkgIT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZUluY2x1ZGVkLnB1c2goZmllbGRbXCJwZXJjZW50YWdlXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmVmb3JlU2V0UGl4S2V5VHlwZVZhbGlkYXRvcigpO1xuICAgICAgICB0aGlzLnNldFBpeEtleVZhbGlkYXRvcnMoaXNFZGl0TW9kZSwgdGhpcy5pc0FscGhhbnVtZXJpY0NOUEopO1xuICAgICAgICB0aGlzLnZhbGlkYXRlUGVyY2VudGFnZVZhbGlkKHBlcmNlbnRhZ2VJbmNsdWRlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW50ZXMgZGUgc2V0YXIgbyB2YWxpZGF0b3IgcHJlcGFyYSBhcyB2YXJpw6F2ZWlzIG5lY2Vzc8OhcmlhIHBhcmEgcXVlIHNlamEgZmVpdGEgYSB2YWxpZGHDp8OjbyBkbyBjYW1wby5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0UGl4S2V5VmFsaWRhdG9ycyhpc0VkaXRNb2RlOiBib29sZWFuLCBpc0FscGhhbnVtZXJpY0NOUEo/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGdlbmVyaWNQaXhLZXkgPSB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5XCIpO1xuICAgICAgICBpZiAodGhpcy5waXhLZXlUeXBlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMucGl4S2V5VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJURUxFUEhPTkVcIjpcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY1BpeEtleS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLCBHZW5lcmljVmFsaWRhdG9yLmlzVmFsaWRQaG9uZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgXSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiRU1BSUxcIjpcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY1BpeEtleS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLCBHZW5lcmljVmFsaWRhdG9yLmlzVmFsaWRFbWFpbCxcbiAgICAgICAgICAgICAgICAgICAgXSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiQ1BGXCI6XG4gICAgICAgICAgICAgICAgICAgIGdlbmVyaWNQaXhLZXkuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCwgR2VuZXJpY1ZhbGlkYXRvci5pc1ZhbGlkQ3BmLFxuICAgICAgICAgICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJDTlBKXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJlQ25waktleVZhbGlkYXRvcnMoaXNBbHBoYW51bWVyaWNDTlBKLCBnZW5lcmljUGl4S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlJBTkRPTV9LRVlcIjpcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY1BpeEtleS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBnZW5lcmljUGl4S2V5LnNldFZhbGlkYXRvcnMobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihpc0VkaXRNb2RlKSB7XG4gICAgICAgICAgICAgICAgZ2VuZXJpY1BpeEtleS5lbmFibGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2VuZXJpY1BpeEtleS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzY29saGUgbyB2YWxpZGF0b3IgZG8gQ05QSiBjb25mb3JtZSBhIGZlYXR1cmUgdG9nZ2xlIGFscGhhbnVtZXJpY0NOUEpGZWF0dXJlLlxuICAgICAqIEBwYXJhbSBpc0FscGhhbnVtZXJpY0NOUEogRmVhdHVyZSB0b2dnbGUgcXVlIGRlZmluZSBzZSBvIENOUEogcG9kZSBzZXIgYWxmYW51bcOpcmljby5cbiAgICAgKiBAcGFyYW0gZ2VuZXJpY1BpeEtleSBUaXBvIEFic3RyYWN0Q29udHJvbCBkbyBjYW1wbyBwaXhLZXkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb25maWd1cmVDbnBqS2V5VmFsaWRhdG9ycyhpc0FscGhhbnVtZXJpY0NOUEo6IGJvb2xlYW4sIGdlbmVyaWNQaXhLZXk6IEFic3RyYWN0Q29udHJvbCkge1xuICAgICAgICBpZiAoaXNBbHBoYW51bWVyaWNDTlBKKSB7XG4gICAgICAgICAgICBnZW5lcmljUGl4S2V5LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLCBHZW5lcmljVmFsaWRhdG9yLmlzVmFsaWRDbnBqQWxwaGFudW1lcmljLFxuICAgICAgICAgICAgXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2VuZXJpY1BpeEtleS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCwgR2VuZXJpY1ZhbGlkYXRvci5pc1ZhbGlkQ25waixcbiAgICAgICAgICAgIF0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzdGUgbcOpdG9kbyBjYWxjdWxhIGFzIHBhcmNlbnRhZ2VucyBxdWUgasOhIGZvcmFtIGluc2VyaWRhcywgZSBzZXRhIGEgZGlmZXJlbsOnYSBwYXJhIGNoZWdhciBlbVxuICAgICAqIDEwMCUgbmEgdmFsaWRhw6fDo28gZG8gY2FtcG8gXCJwZXJjZW50YWdlXCIgY29tbyB1bSBub3ZvIG1heFZhbHVlO1xuICAgICAqIEBwYXJhbSBsaXN0VmFsdWVcbiAgICAgKi9cbiAgICBwcml2YXRlIHZhbGlkYXRlUGVyY2VudGFnZVZhbGlkKGxpc3RWYWx1ZTogbnVtYmVyW10pIHtcbiAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9IHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJwZXJjZW50YWdlXCIpO1xuICAgICAgICB0aGlzLm1heFZhbHVlUGVyY2VudGFnZSA9IGxpc3RWYWx1ZVxuICAgICAgICAgICAgLnJlZHVjZSgoY3VycmVudFZhbHVlLCB0b3RhbCkgPT4gY3VycmVudFZhbHVlIC0gdG90YWwsXG4gICAgICAgICAgICAgICAgMTAwLjAwLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICBwZXJjZW50YWdlXG4gICAgICAgICAgICAuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuaW5pdGlhbFZhbGlkYXRvck9mUGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heCh0aGlzLm1heFZhbHVlUGVyY2VudGFnZSksXG4gICAgICAgICAgICBdKSk7XG4gICAgICAgIHBlcmNlbnRhZ2UudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBpc1ZpZXdNb2RlKGNvbmRpdGlvbjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzVmlldyA9ICEhKGNvbmRpdGlvbiAmJiAhdGhpcy53aXRoU2lkZUJhcik7XG4gICAgICAgIHRoaXMuY29uZmlnRW5hYmxlRmllbGRzKCF0aGlzLmlzVmlldyk7XG4gICAgICAgIGlmICghdGhpcy5pc1ZpZXcpIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBob25lTWFzayhldmVudDogYW55KSB7XG4gICAgICAgIEZvcm1hdFV0aWxzU2VydmljZS5mb3JtYXRUZWxlcGhvbmVJbnB1dEV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBzZXREZWZhdWx0Q3BmUGl4S2V5KCkge1xuICAgICAgICBpZih0aGlzLmRlZmF1bHRDcGZOdW1iZXIpIHtcbiAgICAgICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJwaXhLZXlcIikuc2V0VmFsdWUodGhpcy5kZWZhdWx0Q3BmTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNoZWV0RG9jdW1lbnQgPSB0aGlzLnBhcmFtc0Zvcm0uZ2V0KFwic2hlZXREb2N1bWVudFwiKTtcbiAgICAgICAgICAgIGlmKHNoZWV0RG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcGYgPSBzaGVldERvY3VtZW50LmdldChcImNwZk51bWJlclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZihjcGYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVwiKS5zZXRWYWx1ZShjcGYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBiZWZvcmVTZXRQaXhLZXlUeXBlVmFsaWRhdG9yKCkge1xuICAgICAgICBjb25zdCBwaXhLZXlUeXBlID0gdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVR5cGVcIik7XG5cbiAgICAgICAgaWYgKHRoaXMucGl4QWNjb3VudExpc3QgJiYgdGhpcy5waXhBY2NvdW50TGlzdC5sZW5ndGggJiYgcGl4S2V5VHlwZSkge1xuICAgICAgICAgICAgcGl4S2V5VHlwZVxuICAgICAgICAgICAgICAgIC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVEdXBsaWNhdGVQaXhLZXlUeXBlQmFua0FjY291bnQodGhpcy5waXhBY2NvdW50TGlzdCksXG4gICAgICAgICAgICAgICAgXSkpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwaXhLZXlUeXBlLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlRHVwbGljYXRlUGl4S2V5VHlwZUJhbmtBY2NvdW50KGxpc3RDb21wYXJlOiBvYmplY3RbXSkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvcnMgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sICYmIGNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICBsZXQgY29uZGl0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICBsaXN0Q29tcGFyZS5maWx0ZXIoKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRbXCJwaXhLZXlUeXBlXCJdLmtleSA9PT0gJ0JBTktfQUNDT1VOVCcgJiYgdmFsdWUua2V5ID09PSBmaWVsZFtcInBpeEtleVR5cGVcIl0ua2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uICYmICF0aGlzLnBlcm1pdHNFZGl0QmFua0FjY291bnRGb3JtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcGl4S2V5VHlwZUJhbmtBY2NvdW50RHVwbGljYXRlOiB0cnVlIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY25wak1hc2soKSB7XG4gICAgICAgIHJldHVybiBGb3JtYXRVdGlsc1NlcnZpY2UuZ2V0Q3BmQ25wak1hc2soXCJDTlBKXCIsIHRoaXMuaXNBbHBoYW51bWVyaWNDTlBKKTtcbiAgICB9XG59XG4iXX0=