@esfaenza/extensions 15.2.21 → 15.2.22

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.
@@ -432,7 +432,7 @@ export class ExportService {
432
432
  * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione
433
433
  * @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può
434
434
  */
435
- parseList(obj, prop, headers, loc) {
435
+ parseList(obj, prop, headers, columnsSelection, loc) {
436
436
  let headernavigator = obj[prop + listCsvHdrPrefix];
437
437
  let valuenavigator = obj[prop + listCsvValPrefix];
438
438
  let valueformat = obj[prop + listCsvValFormat];
@@ -488,7 +488,7 @@ export class ExportService {
488
488
  * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione
489
489
  * @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può
490
490
  */
491
- parseDictionary(obj, prop, headers, loc) {
491
+ parseDictionary(obj, prop, headers, columnsSelection, loc) {
492
492
  let headernavigator = obj[prop + dictionaryCsvHdrPrefix];
493
493
  let valuenavigator = obj[prop + dictionaryCsvValPrefix];
494
494
  let order = obj[prop + csvOrdPrefix];
@@ -624,4 +624,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
624
624
  type: Injectable,
625
625
  args: [{ providedIn: "root" }]
626
626
  }], ctorParameters: function () { return [{ type: i1.DateService }, { type: i2.UtilityService }, { type: i3.LocalizationService }]; } });
627
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5leHBvcnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL3NyYy9saWIvc2VydmljZXMvZXh0ZW5zaW9ucy5leHBvcnRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFLakQsaUJBQWlCO0FBRWpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBUS9ROzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUE4QjtJQUMvRCxPQUFPLFNBQVMsWUFBWSxDQUF3QyxXQUFjO1FBQ2hGLE9BQU8sS0FBTSxTQUFRLFdBQVc7WUFBekI7O2dCQUE0QixZQUFPLEdBQUcsR0FBRyxDQUFDO1lBQUMsQ0FBQztTQUFBLENBQUM7SUFDdEQsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLFNBQWlCLElBQUksRUFBRSxVQUFrQixJQUFJLEVBQUUsRUFBRSxDQUNyRyxDQUFDLE1BQWMsRUFBRSxXQUFtQixFQUFFLEVBQUU7SUFDdEMsSUFBSSxNQUFNO1FBQ1IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxHQUFHLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUss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O1FBQzNJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3BHLENBQUM7OzBHQXpmVSxhQUFhOzhHQUFiLGFBQWEsY0FEQSxNQUFNOzJGQUNuQixhQUFhO2tCQUR6QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgVHlwZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBFc2ZhZW56YVxyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5cclxuaW1wb3J0IHsgZXhwb3J0TGlzdCwgY3N2Rm9ybWF0UHJlZml4LCBjc3ZIZHJQcmVmaXgsIGNzdk9yZFByZWZpeCwgY3N2VmFsdWVOYXZpZ2F0b3IsIGNzdlZpc1ByZWZpeCwgZGljdGlvbmFyeUNzdkhkclByZWZpeCwgZGljdGlvbmFyeUNzdlZhbFByZWZpeCwgbGlzdENzdkhkclByZWZpeCwgbGlzdENzdlZhbEZvcm1hdCwgbGlzdENzdlZhbFByZWZpeCwgY3N2UHJvcEtleSwgbG9jUHJvcGVydHksIGNzdlZhbHVlVHlwZSB9IGZyb20gXCIuLi9tb2RlbHMvRXhwb3J0Q29uc3RzXCI7XHJcbmltcG9ydCB7IERhdGVTZXJ2aWNlIH0gZnJvbSAnLi9leHRlbnNpb25zLmRhdGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gXCIuL2V4dGVuc2lvbnMudXRpbGl0aWVzLnNlcnZpY2VcIjtcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgQ3N2SGVhZGVycyB9IGZyb20gXCIuLi9tb2RlbHMvQ3N2SGVhZGVyc1wiO1xyXG5pbXBvcnQgeyBHZW5lcmljSXRlbSB9IGZyb20gXCIuLi9tb2RlbHMvR2VuZXJpY0l0ZW1cIjtcclxuXHJcbi8qKlxyXG4gKiBEZWNvcmF0b3JlIGNoZSBmb3JuaXNjZSBsYSBjbGFzc2UgZGkgbG9jYWxpenphemlvbmUgcGVyIHR1dHRlIGxlIHByb3ByaWV0w6AgZXNwb3J0YXRlIGNvbiBARXhwb3J0IGUgcXVhbHNpYXNpIGFsdHJvIHRhZyBjaGUgcmljaGllZGEgbG9jYWxpenphemlvbmkuXHJcbiAqIFxyXG4gKiBTb3N0YW56aWxhbWVudGUgYWdnaXVuZ2UgbGEgcHJvcHJpZXTDoCAqKl9fbG9jX18qKiBhbGwnb2dnZXR0byBjcmVhdG8gZGFsbGEgY2xhc3NlIGNvcnJlbnRlIGFzc2VnbmFuZG9nbGkgY29tZSB2YWxvcmUgaWwgdGlwbyBkZWwgTG9jYWxpemF0aW9uU2VydmljZSBkYSB1c2FyZSBwZXIgbGEgdHJhZHV6aW9uZVxyXG4gKiBcclxuICogQHBhcmFtIHtUeXBlPExvY2FsaXphdGlvblNlcnZpY2U+fSBsb2MgVGlwbyBlcmVkaXRhdG8gZGFsIExvY2FsaXphdGlvblNlcnZpY2UgY2hlIHB1w7IgZXNzZXJlIGNyZWF0byBhIHJ1bnRpbWUgc290dG8gY29udGVzdG8gZGVsbGEgREkgZGkgQW5ndWxhclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEV4cG9ydExvY2FsaXphdGlvbihsb2M6IFR5cGU8TG9jYWxpemF0aW9uU2VydmljZT4pIHtcclxuICByZXR1cm4gZnVuY3Rpb24gaW50ZWdyYXRlTG9jPFQgZXh0ZW5kcyB7IG5ldyguLi5hcmdzOiBhbnlbXSk6IHt9IH0+KGNvbnN0cnVjdG9yOiBUKSB7XHJcbiAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBjb25zdHJ1Y3RvciB7IF9fbG9jX18gPSBsb2M7IH07XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRGVjb3JhdG9yZSBkaSBlc3BvcnRhemlvbmUgdXRpbGl6emFiaWxlIHN1IHVuYSBwcm9wcmlldMOgIHNpbmdvbGEuIFxyXG4gKiBWZXJyYW5ubyBnZW5lcmF0ZSAzIHByb3ByaWV0w6AgY2hlIGdlc3RpcmFubm8gbCdlc3BvcnRhemlvbmU6IChwcm9wLCBwcm9wX2NzdnZpcywgcHJvcF9jc3ZoZHIpLiBcclxuICogXHJcbiAqIEFkIGVzZW1waW8sIGRhIHF1ZXN0YSBjb25maWd1cmF6aW9uZTpcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYFxyXG4gKiBARXhwb3J0KHRydWUsIFwiTXlIZWFkZXJcIilcclxuICogY2lhbzogc3RyaW5nO1xyXG4gKiBgYGBcclxuICogXHJcbiAqIE5hc2NlcmFubm8gbGUgc2VndWVudGkgcHJvcHJpZXTDoCBuZWxsJ29nZ2V0dG8gZXNwb3J0YWJpbGU6XHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBcclxuICogY2lhb19jc3Z2aXM6IHN0cmluZzsgPT4gdHJ1ZVxyXG4gKiBjaWFvOiBzdHJpbmc7XHJcbiAqIGNpYW9fY3N2aGRyOiBzdHJpbmcgPT4gXCJNeUhlYWRlclwiXHJcbiAqIGBgYFxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IG9yZGVyIE9yZGluZSBkaSBlc3BvcnRhemlvbmUuIFBpw7kgcGljY29sbyDDqCwgcHJpbWEgYXBwYXJlIGlsIHZhbG9yZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyIFRpdG9sbyBkZWxsYSBjb2xvbm5hIG5lbCBmaWxlIENTViBlc3BvcnRhdG9cclxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCBGb3JtYXRvIGRpIGVzcG9ydGF6aW9uZS4gUHXDsiBlc3NlcmUgdW4gZm9ybWF0byBkYXRhIHBlciBpIGNhbXBpIGRhdGEgbyAnRicgcGVyIGkgY2FtcGkgZmxvYXRpbmcgcG9pbnRcclxuICovXHJcbmV4cG9ydCBjb25zdCBFeHBvcnQgPSAob3JkZXI6IG51bWJlciwgaGVhZGVyOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nID0gbnVsbCwgdGFibGVpZDogc3RyaW5nID0gbnVsbCkgPT5cclxuICAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcclxuICAgIGlmIChmb3JtYXQpXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2Rm9ybWF0UHJlZml4LCB7IHZhbHVlOiBmb3JtYXQsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2T3JkUHJlZml4LCB7IHZhbHVlOiBvcmRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZWaXNQcmVmaXgsIHsgdmFsdWU6ICEhaGVhZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGNzdkhkclByZWZpeCwgeyB2YWx1ZTogaGVhZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBpZiAodGFibGVpZClcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZQcm9wS2V5LCB7IHZhbHVlOiB0YWJsZWlkLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcblxyXG4gICAgaWYgKHRhcmdldFtleHBvcnRMaXN0XSlcclxuICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdLnB1c2gocHJvcGVydHlLZXkgKyBjc3ZWaXNQcmVmaXgpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0YXJnZXRbZXhwb3J0TGlzdF0gPSBbcHJvcGVydHlLZXkgKyBjc3ZWaXNQcmVmaXhdXHJcbiAgfTtcclxuXHJcbi8qKlxyXG4gKiBEZWNvcmF0b3JlIGRpIGVzcG9ydGF6aW9uZSB1dGlsaXp6YWJpbGUgc3UgdW4gb2dnZXR0by4gXHJcbiAqIFBlciBvZ25pIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIHZlcnJhbm5vIGdlbmVyYXRlIDMgcHJvcHJpZXTDoCBjaGUgZ2VzdGlyYW5ubyBsJ2VzcG9ydGF6aW9uZTogKHByb3AsIHByb3BfY3N2dmlzLCBwcm9wX2NzdmhkcikuIFxyXG4gKiBQZXIgZXNzZXJlIGVzcG9ydGF0ZSwgbGUgcHJvcHJpZXTDoCBkZWxsJ29nZ2V0dG8gZGV2b25vIGVzc2VyZSBtYXJjYXRlIGNvbiBpIERlY29yYXRvcmkgZGkgZXNwb3J0YXppb25lXHJcbiAqIFxyXG4gKiBBZCBlc2VtcGlvLCBkYSBxdWVzdGEgY29uZmlndXJhemlvbmU6XHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBcclxuICogTXlPYmoge1xyXG4gKiAgICAgQEV4cG9ydCh0cnVlLCBcIk15SGVhZGVyXCIpXHJcbiAqICAgICBjaWFvOiBzdHJpbmc7XHJcbiAqIH1cclxuICogXHJcbiAqIEBFeHBvcnRPYmplY3QodHJ1ZSwgXCJNeUhlYWRlclwiKVxyXG4gKiB0ZXN0OiBNeU9iajsgXHJcbiAqIGBgYFxyXG4gKiBcclxuICogTmFzY2VyYW5ubyBsZSBzZWd1ZW50aSBwcm9wcmlldMOgIG5lbGwnb2dnZXR0byBlc3BvcnRhYmlsZTpcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYFxyXG4gKiB0ZXN0Y2lhbzogc3RyaW5nOyA9PiBWYWxvcmUgZGkgTXlPYmouY2lhb1xyXG4gKiB0ZXN0Y2lhb19jc3Z2aXM6IHN0cmluZzsgPT4gdHJ1ZVxyXG4gKiB0ZXN0Y2lhb19jc3ZoZHI6IHN0cmluZyA9PiBcIk15SGVhZGVyXCIgXHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gb3JkZXIgT3JkaW5lIGRpIGVzcG9ydGF6aW9uZS4gUGnDuSBwaWNjb2xvIMOoLCBwcmltYSBhcHBhcmUgaWwgdmFsb3JlXHJcbiAqIEBwYXJhbSB7YW55fSB0eXBlIFRpcG8gZGEgZXNwb3J0YXJlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXhwb3J0QXMgPSAob3JkZXI6IG51bWJlciwgdHlwZTogYW55LCBwcmVmaXg/OiBzdHJpbmcpID0+XHJcbiAgKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICB2YXIgdCA9IG5ldyB0eXBlKCk7XHJcbiAgICB2YXIgcHJvcHMgPSB0W2V4cG9ydExpc3RdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcHJvcCA9IHByb3BzW2ldLnJlcGxhY2UoY3N2VmlzUHJlZml4LCAnJyk7XHJcbiAgICAgIGlmICh0eXBlb2YgdFtwcm9wICsgY3N2VmlzUHJlZml4XSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgIHZhciB0b0VtaXQ6IGJvb2xlYW4gPSB0W3Byb3AgKyBjc3ZWaXNQcmVmaXhdO1xyXG4gICAgICAgIHZhciBsYmwgPSB0W3Byb3AgKyBjc3ZIZHJQcmVmaXhdO1xyXG4gICAgICAgIHZhciBmb3JtYXQgPSB0W3Byb3AgKyBjc3ZGb3JtYXRQcmVmaXhdO1xyXG4gICAgICAgIHZhciBvcmRlclByb3AgPSB0W3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG4gICAgICAgIGlmIChmb3JtYXQpXHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZGb3JtYXRQcmVmaXgsIHsgdmFsdWU6IGZvcm1hdCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZPcmRQcmVmaXgsIHsgdmFsdWU6IG9yZGVyUHJvcCArIG9yZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBwcm9wLCB7IHZhbHVlOiBudWxsLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZWYWx1ZU5hdmlnYXRvciwgeyB2YWx1ZTogcHJvcGVydHlLZXkgKyBcIi5cIiArIHByb3AsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZWaXNQcmVmaXgsIHsgdmFsdWU6IHRvRW1pdCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgcHJvcCArIGNzdkhkclByZWZpeCwgeyB2YWx1ZTogKHByZWZpeCA/IHByZWZpeCArICcgJyA6ICcnKSArIGxibCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgcHJvcCArIGNzdlZhbHVlVHlwZSwgeyB2YWx1ZTogdHlwZSwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgICAgICBpZiAodGFyZ2V0W2V4cG9ydExpc3RdKVxyXG4gICAgICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdLnB1c2gocHJvcGVydHlLZXkgKyBwcm9wICsgY3N2VmlzUHJlZml4KTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0YXJnZXRbZXhwb3J0TGlzdF0gPSBbcHJvcGVydHlLZXkgKyBwcm9wICsgY3N2VmlzUHJlZml4XVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbi8qKlxyXG4gKiBEZWNvcmF0b3JlIGRpIGVzcG9ydGF6aW9uZSB1dGlsaXp6YWJpbGUgc3UgdW5hIGxpc3RhLCBcclxuICogc2kgdXRpbGl6emFubyAyIG5hdmlnYXRvciByaXNwZXR0aXZhbWVudGUgcGVyIGxhIHZhbG9yaXp6YXppb25lIGRlbGwnSGVhZGVyIGUgZGVsIFZhbG9yZSBlIFxyXG4gKiBwZXIgb2duaSBlbGVtZW50byBkZWxsJ2FycmF5IHZlcnJhbm5vIGdlbmVyYXRlIDMgcHJvcHJpZXTDoCBjaGUgZ2VzdGlyYW5ubyBsJ2VzcG9ydGF6aW9uZTogKHByb3AsIHByb3BfY3N2dmlzLCBwcm9wX2NzdmhkcilcclxuICogXHJcbiAqIEFUVEVOWklPTkU6IEdsaSBvZ2dldHRpIGVzcG9ydGF0aSBpbiBxdWVzdGEgbW9kYWxpdMOgIG5vbiBkZXZvbm8gcHJlc2VudGFyZSBhbHRyaSB0YWcgZGkgdGlwbyBARXhwb3J0ey4uLn0gYWxsJ2ludGVybm8uIEZhIHR1dHRvIHF1ZXN0byBkZWNvcmF0b3JlXHJcbiAqIFxyXG4gKiBJIG5hdmlnYXRvciBoYW5ubyBxdWVzdGEgY29udmVuemlvbmU6XHJcbiAqIFxyXG4gKiAuIC0tPiBkaXZpZGUgZHVlIHByb3ByaWV0w6AgZGEgcmljaGlhbWFyZSBjb25zZWN1dGl2YW1lbnRlOiBcImEuYlwiIHJpY2hpYW1lcsOgIFwib2JqLmEuYlwiO1xyXG4gKiBcclxuICogfCAtLT4gZGl2aWRlIHBpw7kgcHJvcHJpZXTDoCBwZXIgbGUgY29uY2F0ZW5hemlvbmkgY29uIHVubyBzcGF6aW8gZnJhIHVuYSBlIGwnYWx0cmE6IFwicmVnZGVzY3xzbGljZS5zbGljZW5hbWVcIiBkaXZlbnRlcsOgIG9iai5yZWdkZXNjICsgXCIgXCIgKyBvYmouc2xpY2Uuc2xpY2VuYW1lXHJcbiAqIFxyXG4gKiBAcGFyYW0ge251bWJlcn0gb3JkZXIgT3JkaW5lIGRpIGVzcG9ydGF6aW9uZS4gUGnDuSBwaWNjb2xvIMOoLCBwcmltYSBhcHBhcmUgaWwgdmFsb3JlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJuYXZpZ2F0b3IgTmF2aWdhdG9yIGNvbCBjb21waXRvIGRpIHNlbGV6aW9uYXJlIGlsIHRpdG9sbyBwZXIgbGEgY29sb25uYVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVuYXZpZ2F0b3IgTmF2aWdhdG9yIGNvbCBjb21waXRvIGRpIHNlbGV6aW9uYXJlIGlsIHZhbG9yZSBwZXIgbGEgY29sb25uYVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVmb3JtYXQgRm9ybWF0byBkaSBlc3BvcnRhemlvbmUgcGVyIGkgdmFsb3JpIHNlbGV6aW9uYXRpIGRhbCAqKnZhbHVlbmF2aWdhdG9yKiouIFB1w7IgZXNzZXJlIHVuIGZvcm1hdG8gZGF0YSBwZXIgaSBjYW1waSBkYXRhIG8gJ0YnIHBlciBpIGNhbXBpIGZsb2F0aW5nIHBvaW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXhwb3J0TGlzdCA9IChvcmRlcjogbnVtYmVyLCBoZWFkZXJuYXZpZ2F0b3I6IHN0cmluZywgdmFsdWVuYXZpZ2F0b3I6IHN0cmluZywgdmFsdWVmb3JtYXQ6IHN0cmluZyA9IG51bGwpID0+XHJcbiAgKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGNzdk9yZFByZWZpeCwgeyB2YWx1ZTogb3JkZXIsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgbGlzdENzdlZhbFByZWZpeCwgeyB2YWx1ZTogdmFsdWVuYXZpZ2F0b3IsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgbGlzdENzdkhkclByZWZpeCwgeyB2YWx1ZTogaGVhZGVybmF2aWdhdG9yLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGxpc3RDc3ZWYWxGb3JtYXQsIHsgdmFsdWU6IHZhbHVlZm9ybWF0LCB3cml0YWJsZTogZmFsc2UgfSk7XHJcblxyXG4gICAgaWYgKHRhcmdldFtleHBvcnRMaXN0XSlcclxuICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdLnB1c2gocHJvcGVydHlLZXkgKyBsaXN0Q3N2SGRyUHJlZml4KTtcclxuICAgIGVsc2VcclxuICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdID0gW3Byb3BlcnR5S2V5ICsgbGlzdENzdkhkclByZWZpeF1cclxuICB9O1xyXG5cclxuLyoqXHJcbiAqIERlY29yYXRvcmUgZGkgZXNwb3J0YXppb25lIHV0aWxpenphYmlsZSBzdSB1biBkaXppb25hcmlvLiBTZSBhZCBlc2VtcGlvIHNpIHZvZ2xpb25vIGdlbmVyYXJlIGxlIGNvbG9ubmVcclxuICogXHJcbiAqIFZhbG9yZSBBID0gMVxyXG4gKiBcclxuICogVmFsb3JlIEIgPSAyXHJcbiAqIFxyXG4gKiBWYWxvcmUgQyA9IDNcclxuICogXHJcbiAqIHBhcnRlbmRvIGRhIHVuIG9nZ2V0dG8gaW5pemlhbGUgeyBWYWxvcmUgeyBBOiAxLCBCOiAyLCBDOiAzIH0gfVxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IG9yZGVyIE9yZGluZSBkaSBlc3BvcnRhemlvbmUuIFBpw7kgcGljY29sbyDDqCwgcHJpbWEgYXBwYXJlIGlsIHZhbG9yZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVybmF2aWdhdG9yIE5hdmlnYXRvciBjb2wgY29tcGl0byBkaSBzZWxlemlvbmFyZSBpbCB0aXRvbG8gcGVyIGxhIGNvbG9ubmFcclxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlbmF2aWdhdG9yIE5hdmlnYXRvciBjb2wgY29tcGl0byBkaSBzZWxlemlvbmFyZSBpbCB2YWxvcmUgcGVyIGxhIGNvbG9ubmFcclxuICovXHJcbmV4cG9ydCBjb25zdCBFeHBvcnREaWN0aW9uYXJ5ID0gKG9yZGVyOiBudW1iZXIsIGhlYWRlcm5hdmlnYXRvcjogc3RyaW5nLCB2YWx1ZW5hdmlnYXRvcjogc3RyaW5nKSA9PlxyXG4gICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZPcmRQcmVmaXgsIHsgdmFsdWU6IG9yZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGRpY3Rpb25hcnlDc3ZWYWxQcmVmaXgsIHsgdmFsdWU6IHZhbHVlbmF2aWdhdG9yLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXgsIHsgdmFsdWU6IGhlYWRlcm5hdmlnYXRvciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgIGlmICh0YXJnZXRbZXhwb3J0TGlzdF0pXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XS5wdXNoKHByb3BlcnR5S2V5ICsgZGljdGlvbmFyeUNzdkhkclByZWZpeCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XSA9IFtwcm9wZXJ0eUtleSArIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXhdXHJcbiAgfTtcclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNlIGNoZSBzaSBvY2N1cGEgZGVsbCdlc3BvcnRhemlvbmUgZGVnbGkgb2dnZXR0aSBtYXJjYXRpIGRhaSBEZWNvcmF0b3JpICoqRXhwb3J0RGljdGlvbmFyeSoqLCAqKkV4cG9ydExpc3QqKiwgKipFeHBvcnRBcyoqIG8gKipFeHBvcnQqKlxyXG4gKi9cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxyXG5leHBvcnQgY2xhc3MgRXhwb3J0U2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvc3RydXR0b3JlXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVzOiBEYXRlU2VydmljZSwgcHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBsYzogTG9jYWxpemF0aW9uU2VydmljZSkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdGEgdW5hIGxpc3RhIGRpIG9nZ2V0dGkgZ2VuZXJhIGdsaSBoZWFkZXIgcGVyIGwnZXNwb3J0YXppb25lIGUgaW50ZWdyYSBvZ25pIG9nZ2V0dG8gY29uIGxlIHByb3ByaWV0w6AgZXNwb3J0YWJpbGkgZGFsbGEgbGlicmVyaWEgKipAY3RybC9uZ3gtY3N2KipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueVtdfSBvYmpzIE9nZ2V0dGkgZGEgZXNwb3J0YXJlXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge0NzdkhlYWRlcnNbXX0gSGVhZGVyIGRpIGVzcG9ydGF6aW9uZSBnacOgIG9yZGluYXRpIGNvcnJldHRhbWVudGVcclxuICAgKi9cclxuICBwdWJsaWMgc2V0dXBGb3JFeHBvcnQob2JqczogYW55W10sIGNvbHVtbnM6IHN0cmluZ1tdID0gW10pOiBDc3ZIZWFkZXJzW10ge1xyXG4gICAgbGV0IGhlYWRlcnM6IENzdkhlYWRlcnNbXSA9IFtdO1xyXG4gICAgbGV0IGhlYWRlcnNDYWNoZSA9IHt9O1xyXG5cclxuICAgIGlmICghb2JqcyB8fCBvYmpzLmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm4gaGVhZGVycztcclxuXHJcbiAgICAvLyBEZXZvIHBlciBmb3J6YSBmYXJsbyBwZXIgdHV0dGkgZ2xpIG9nZ2V0dGkgZGF0byBjaGUgZGV2byBlc3BvcnJlIGxlIHByb3ByaWV0w6AgY2hlIG1pIHNlcnZvbm8gZGEgZXNwb3J0YXJlXHJcbiAgICAvLyBHbGkgaGVhZGVyIGxpIHJhY2NvbGdvIHR1dHRpIHBvaSBmYWNjaW8gdWFuIGRpc3RpbmN0IGluIG1vZG8gZGEgZXNwb3J0YXJlIHR1dHRlIGxlIHByb3ByaWV0w6AgcGVyIGJlbmVcclxuICAgIGxldCBjb2x1bW5TZWxlY3Rpb25EaWN0aW9uYXJ5OiB7IFtpZDogc3RyaW5nXTogdHJ1ZSB9ID0ge307XHJcblxyXG4gICAgaWYgKGNvbHVtbnM/Lmxlbmd0aCA+IDApXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucz8ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgY29sdW1uU2VsZWN0aW9uRGljdGlvbmFyeVtjb2x1bW5zW2ldXSA9IHRydWU7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmpzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBoZHMgPSB0aGlzLnBhcnNlQW5kR2V0SGVhZGVycyhvYmpzW2ldLCBjb2x1bW5TZWxlY3Rpb25EaWN0aW9uYXJ5KTtcclxuICAgICAgLy8gQWdnaXVuZ28gZ2xpIGhlYWRlciBmYWNlbmRvIGluIG1vZG8gZGkgbm9uIGFnZ2l1bmdlcm5lIG1haSBkdWUgdWd1YWxpIHBlciBub24gZG92ZXIgZmFyZSB1bmEgZGlzdGluY3QgZG9wb1xyXG4gICAgICAvLyBjaGUgY29zdGVyZWJiZSBjb211bnF1ZSByaXNvcnNlLiBVdGlsaXp6byB1biBkaXppb25hcmlvIGQnYXBwb2dnaW8gcGVyIGxvb2t1cCBpc3RhbnRhbmVpXHJcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgaGRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgaWYgKCFoZWFkZXJzQ2FjaGVbaGRzW2tdLmtleV0pIHtcclxuICAgICAgICAgIGhlYWRlcnNDYWNoZVtoZHNba10ua2V5XSA9IHRydWU7XHJcbiAgICAgICAgICBoZWFkZXJzLnB1c2goaGRzW2tdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWNvbHVtbnMgfHwgY29sdW1ucy5sZW5ndGggPT0gMClcclxuICAgICAgcmV0dXJuIGhlYWRlcnMuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIFNlIG1pIGFycml2YSBsYSBsaXN0YSBkaSBjb2xvbm5lIG5vbiBtaSBkw6Agc29sbyBsYSB2aXNpYmlsaXTDoCwgbWEgYW5jaGUgbCdvcmRpbmFtZW50b1xyXG4gICAgICAvLyBsZSBlc3BvcnRvIGRpIGNvbnNlZ3VlbnphXHJcbiAgICAgIGxldCBvcmRlcmVkSGVhZGVycyA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgdGhpc0lkID0gY29sdW1uc1tpXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChoZWFkZXJzW2ldLnByb3BLZXkgPT0gdGhpc0lkKSB7XHJcbiAgICAgICAgICAgIG9yZGVyZWRIZWFkZXJzLnB1c2goaGVhZGVyc1tpXSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb3JkZXJlZEhlYWRlcnM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRhIHVuYSBsaXN0YSBkaSBvZ2dldHRpIGdlbmVyaWNpIGdlbmVyYSBnbGkgaGVhZGVyIHBlciBsJ2VzcG9ydGF6aW9uZSBlIGludGVncmEgb2duaSBvZ2dldHRvIGNvbiBsZSBwcm9wcmlldMOgIGVzcG9ydGFiaWxpIGRhbGxhIGxpYnJlcmlhICoqQGN0cmwvbmd4LWNzdioqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtHZW5lcmljSXRlbVtdfSBvYmpzIE9nZ2V0dGkgZ2VuZXJpY2kgZGEgZXNwb3J0YXJlXHJcbiAgICogQHBhcmFtIHtDc3ZIZWFkZXJzW119IGNvbHVtbnMgQ29sb25uZSByaWNoaWVzdGUgZGFsbCdlc3BvcnRhemlvbmVcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Q3N2SGVhZGVyc1tdfSBIZWFkZXIgZGkgZXNwb3J0YXppb25lIGdpw6Agb3JkaW5hdGkgY29ycmV0dGFtZW50ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXR1cEZvckdlbmVyaWNFeHBvcnQob2JqczogR2VuZXJpY0l0ZW1bXSwgY29sdW1uczogQ3N2SGVhZGVyc1tdKTogQ3N2SGVhZGVyc1tdIHtcclxuICAgIGxldCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10gPSBbXTtcclxuICAgIGlmICghb2JqcyB8fCBvYmpzLmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm4gaGVhZGVycztcclxuXHJcbiAgICAvLyBEZXZvIHBlciBmb3J6YSBmYXJsbyBwZXIgdHV0dGkgZ2xpIG9nZ2V0dGkgZGF0byBjaGUgZGV2byBlc3BvcnJlIGxlIHByb3ByaWV0w6AgY2hlIG1pIHNlcnZvbm8gZGEgZXNwb3J0YXJlXHJcbiAgICBvYmpzLmZvckVhY2goKG9iaiwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGluZGV4ID09IDApXHJcbiAgICAgICAgaGVhZGVycyA9IHRoaXMucGFyc2VBbmRHZXRHZW5lcmljSGVhZGVycyhvYmosIGNvbHVtbnMpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5wYXJzZUFuZEdldEdlbmVyaWNIZWFkZXJzKG9iaiwgY29sdW1ucyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaGVhZGVycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdG8gdW4gb2dnZXR0byBnZW5lcmljbyBnZW5lcmEgZ2xpIGhlYWRlciBwZXIgbCdlc3BvcnRhemlvbmUgZSBsbyBpbnRlZ3JhIGNvbiBsZSBwcm9wcmlldMOgIGVzcG9ydGFiaWxpIGRhbGxhIGxpYnJlcmlhICoqQGN0cmwvbmd4LWNzdioqXHJcbiAgICogXHJcbiAgICogTWV0b2RvIGludGVybm8gcmljaGlhbWF0byBkYSAqKnNldHVwRm9yR2VuZXJpY0V4cG9ydCoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtHZW5lcmljSXRlbX0gb2JqIE9nZ2V0dG8gZ2VuZXJpY28gZGEgZXNwb3J0YXJlXHJcbiAgICogQHBhcmFtIHtDc3ZDb2x1bW5bXX0gY29sdW1ucyBDb2xvbm5lIHJpY2hpZXN0ZSBkYWxsJ2VzcG9ydGF6aW9uZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtDc3ZIZWFkZXJzW119IEhlYWRlciBkaSBlc3BvcnRhemlvbmUgZ2nDoCBvcmRpbmF0aSBjb3JyZXR0YW1lbnRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUFuZEdldEdlbmVyaWNIZWFkZXJzKG9iajogR2VuZXJpY0l0ZW0sIGNvbHVtbnM6IENzdkhlYWRlcnNbXSk6IENzdkhlYWRlcnNbXSB7XHJcbiAgICBpZiAoIW9iai5wcm9wZXJ0aWVzKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICB2YXIgaGVhZGVyczogQ3N2SGVhZGVyc1tdID0gW107XHJcblxyXG4gICAgLy9NaXJhY2xlIGluY29taW5nXHJcbiAgICBjb2x1bW5zLmZvckVhY2godCA9PiB7XHJcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBvYmoucHJvcGVydGllc1t0LmtleV07XHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHQua2V5ICsgXCJfZXhwXCIsIHsgdmFsdWU6IHByb3BWYWx1ZSwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICBoZWFkZXJzLnB1c2goeyBsYWJlbDogdC5sYWJlbCwga2V5OiB0LmtleSArIFwiX2V4cFwiLCBvcmRlcjogdC5vcmRlciwgdHlwZTogdC50eXBlLCBwcm9wS2V5OiBudWxsIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy9UaXJhdGkgZnVvcmkgdHV0dGkgZ2xpIGhlYWRlciBmYWNjaW8gc29ydCBzdWxsJ29yZGluYW1lbnRvXHJcbiAgICByZXR1cm4gaGVhZGVycy5zb3J0KChhLCBiKSA9PiB7IHJldHVybiBhLm9yZGVyIC0gYi5vcmRlciB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdG8gdW4gb2dnZXR0byBnZW5lcmEgZ2xpIGhlYWRlciBwZXIgbCdlc3BvcnRhemlvbmUgZSBsbyBpbnRlZ3JhIGNvbiBsZSBwcm9wcmlldMOgIGVzcG9ydGFiaWxpIGRhbGxhIGxpYnJlcmlhICoqQGN0cmwvbmd4LWNzdioqXHJcbiAgICogXHJcbiAgICogTWV0b2RvIGludGVybm8gcmljaGlhbWF0byBkYSAqKnNldHVwRm9yRXhwb3J0KipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gb2JqIE9nZ2V0dG8gZ2VuZXJpY28gZGEgZXNwb3J0YXJlXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge0NzdkhlYWRlcnNbXX0gSGVhZGVyIGRpIGVzcG9ydGF6aW9uZSBnacOgIG9yZGluYXRpIGNvcnJldHRhbWVudGVcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlQW5kR2V0SGVhZGVycyhvYmo6IGFueSwgY29sdW1uc1NlbGVjdGlvbj86IHsgW2lkOiBzdHJpbmddOiB0cnVlIH0pOiBDc3ZIZWFkZXJzW10ge1xyXG4gICAgdmFyIGhlYWRlcnM6IENzdkhlYWRlcnNbXSA9IFtdO1xyXG5cclxuICAgIC8vIE1pcmFjbGUgaW5jb21pbmdcclxuICAgIGxldCBleHBvcnRQcm9wcyA9IG9ialtleHBvcnRMaXN0XSB8fCBbXTtcclxuICAgIGxldCBsb2MgPSBvYmpbbG9jUHJvcGVydHldID8gdGhpcy5sYy5nZW5lcmF0ZUZyb21UeXBlKG9ialtsb2NQcm9wZXJ0eV0pIDogbnVsbDtcclxuXHJcbiAgICBpZiAoZXhwb3J0UHJvcHMubGVuZ3RoID09IDApXHJcbiAgICAgIGNvbnNvbGUud2FybihcIltAZXNmYWVuemEvZXh0ZW5zaW9uc10gTmVzc3VuYSBjb2xvbm5hIGNvbmZpZ3VyYXRhIGRhIGVzcG9ydGFyZSFcIik7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBvcnRQcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcHJvcCA9IGV4cG9ydFByb3BzW2ldO1xyXG4gICAgICBsZXQgcHJvcEJhc2UgPSBcIlwiO1xyXG4gICAgICBsZXQgdG9DYWxsOiBGdW5jdGlvbjtcclxuICAgICAgaWYgKHByb3AuZW5kc1dpdGgobGlzdENzdkhkclByZWZpeCkpIHtcclxuICAgICAgICBwcm9wQmFzZSA9IHByb3AucmVwbGFjZShsaXN0Q3N2SGRyUHJlZml4LCAnJyk7XHJcbiAgICAgICAgdG9DYWxsID0gdGhpcy5wYXJzZUxpc3QuYmluZCh0aGlzKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChwcm9wLmVuZHNXaXRoKGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXgpKSB7XHJcbiAgICAgICAgcHJvcEJhc2UgPSBwcm9wLnJlcGxhY2UoZGljdGlvbmFyeUNzdkhkclByZWZpeCwgJycpO1xyXG4gICAgICAgIHRvQ2FsbCA9IHRoaXMucGFyc2VEaWN0aW9uYXJ5LmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocHJvcC5lbmRzV2l0aChjc3ZWaXNQcmVmaXgpKSB7XHJcbiAgICAgICAgcHJvcEJhc2UgPSBwcm9wLnJlcGxhY2UoY3N2VmlzUHJlZml4LCAnJyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvYmpbcHJvcEJhc2UgKyBjc3ZWYWx1ZU5hdmlnYXRvcl0gIT09IFwidW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICB0b0NhbGwgPSB0aGlzLnBhcnNlT2JqZWN0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdG9DYWxsID0gdGhpcy5wYXJzZVByb3BlcnR5LmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0b0NhbGwpXHJcbiAgICAgICAgdG9DYWxsKG9iaiwgcHJvcEJhc2UsIGhlYWRlcnMsIGNvbHVtbnNTZWxlY3Rpb24sIGxvYyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR1cCBwZXIgbCdlc3BvcnRhemlvbmUgZGkgdW5hIHNpbmdvbGEgcHJvcHJpZXTDoC4gXHJcbiAgICogVmllbmUgZ2VuZXJhdG8gbCdoZWFkZXIgZSBsYSBwcm9wcmlldMOgIHJlbGF0aXZhIGFsIHZhbG9yZSBmb3JtYXR0YXRvIG8gbm9cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gb2JqIE9nZ2V0dG8gZGkgY3VpIGVzcG9ydGFyZSBsYSBwcm9wcmlldMOgICoqcHJvcCoqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcHJpZXTDoCBkYSBlc3BvcnRhcmVcclxuICAgKiBAcGFyYW0ge0NzdkhlYWRlcnN9IGhlYWRlcnMgQ29udGVuaXRvcmUgZGVnbGkgaGVhZGVyLCB2ZXJyw6AgcmllbXBpdG8gZGEgcXVlc3RhIGZ1bnppb25lIFxyXG4gICAqIEBwYXJhbSB7TG9jYWxpemF0aW9uU2VydmljZX0gbG9jIFNlcnZpemlvIGRpIGxvY2FsaXp6YXppb25lIGNoZSB0cmFkdWNlIHR1dHRpIGkgbm9taSBjaGUgcHXDslxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VQcm9wZXJ0eShvYmo6IGFueSwgcHJvcDogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10sIGNvbHVtbnNTZWxlY3Rpb24/OiB7IFtpZDogc3RyaW5nXTogdHJ1ZSB9LCBsb2M/OiBMb2NhbGl6YXRpb25TZXJ2aWNlKSB7XHJcbiAgICBsZXQgdG9FbWl0OiBib29sZWFuID0gb2JqW3Byb3AgKyBjc3ZWaXNQcmVmaXhdO1xyXG4gICAgbGV0IGZvcm1hdDogc3RyaW5nID0gb2JqW3Byb3AgKyBjc3ZGb3JtYXRQcmVmaXhdO1xyXG4gICAgbGV0IHByb3BLZXkgPSBvYmpbcHJvcCArIGNzdlByb3BLZXldO1xyXG5cclxuICAgIGlmIChwcm9wS2V5ICYmICFjb2x1bW5zU2VsZWN0aW9uW3Byb3BLZXldICYmIE9iamVjdC5rZXlzKGNvbHVtbnNTZWxlY3Rpb24pLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc29sZS5sb2coXCJbQGVzZmFlbnphL2V4dGVuc2lvbnNdIENvbG9ubmEgZGEgbm9uIGVzcG9ydGFyZTogXCIgKyBwcm9wS2V5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0ZXh0ID0gb2JqW3Byb3AgKyBjc3ZIZHJQcmVmaXhdO1xyXG4gICAgbGV0IGxhYmVsID0gbG9jICYmIHRleHQgPyBsb2MubG9jKHRleHQpIDogdGV4dCB8fCBcIlwiO1xyXG4gICAgbGV0IG9yZGVyID0gb2JqW3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG5cclxuICAgIGlmICghdG9FbWl0KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgLy8gU2Ugbm9uIGhvIHVuIGZvcm1hdG8gZXNwb3J0byBkaXJldHRhbWVudGVcclxuICAgIGlmICghZm9ybWF0KSB7XHJcbiAgICAgIC8vIFNlIMOoIHVuIGZvcm1hdG8gZGF0YSBtaSBhc3NpY3VybyBkaSBub24gc3RhbXBhcmUgbWFpIHVuYSBkYXRhIDAwOjAwOjAwIGFsdHJpbWVudGkgaW4gZXNwb3J0YXppb25lIHZpZW5lIHVubyBzY2hpZm9cclxuICAgICAgbGV0IHZhbCA9IG9ialtwcm9wXSA/IHRoaXMuZGF0ZXMudHJpbVNlY29uZHMob2JqW3Byb3BdLnRvU3RyaW5nKCkpIDogXCJcIjtcclxuICAgICAgbGV0IGtleSA9IHByb3AgKyBcIl9ub2ZtdFwiO1xyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbCwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICBoZWFkZXJzLnB1c2goeyBsYWJlbCwga2V5LCBvcmRlciwgdHlwZTogXCJzdHJpbmdcIiwgcHJvcEtleSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBrZXkgPSBwcm9wICsgXCJfZm10XCI7XHJcblxyXG4gICAgICAvLyBDYXNvIGZvcm1hdG8gbnVtZXJpY29cclxuICAgICAgaWYgKGZvcm1hdCA9PSBcIkZcIikge1xyXG4gICAgICAgIC8vIENoZWNrIGNvbnNpZGVyYW5kbyBsYSBwb3NzaWJpbGl0w6AgZGkgemVyaVxyXG4gICAgICAgIGxldCB2YWwgPSBvYmpbcHJvcF0gIT0gbnVsbCA/IG9ialtwcm9wXS50b1N0cmluZygpIDogXCJcIjtcclxuICAgICAgICAvLyBFbGltaW5vIHR1dHRlIGxlIHZpcmdvbGUgKGluZGljYXRvcmkgZGkgbWlnbGlhaWEgcGVyIGxhIGN1bHR1cmUgZGVmYXVsdCBlbi1VUylcclxuICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgvLC8sIFwiXCIpO1xyXG4gICAgICAgIC8vIElsIHNpbmdvbG8gcHVudG8gY2hlIGMnw6gsIHNlIHByZXNlbnRlIChzZXBhcmF0b3JlIGRlY2ltYWxpKSBsbyB0cmFzZm9ybW8gaW4gdmlyZ29sYVxyXG4gICAgICAgIGxldCB2YWxDb252ZXJ0ZWQgPSB2YWwucmVwbGFjZShcIi5cIiwgXCIsXCIpO1xyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbENvbnZlcnRlZCwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsLCBrZXksIG9yZGVyLCB0eXBlOiBcIm51bWJlclwiLCBwcm9wS2V5IH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFNlIGhvIHVuIGZvcm1hdG8gZGF0YSB0cmFzZm9ybW8gaW4gZGF5anMsIGZvcm1hdHRvIGVkIGVzcG9ydG9cclxuICAgICAgICAvLyBQZXIgbGEgdHJhc2Zvcm1hemlvbmUgaW4gZGF5anMgcHJvdm8gcHJpbWEgYSBwYXNzYXJnbGkgbGEgc3RyaW5nYSBkaSBuZXR0bywgc3BlcmFuZG8gbGEgcmljb25vc2NhXHJcbiAgICAgICAgLy8gU2Ugbm9uIGZ1bnppb25hIHByb3ZvIGEgZGVmaW5pcmdsaSBsYSBmb3JtYXR0YXppb25lIHN0YW5kYXJkIGRlbCBtZXRlcmluZyBwZXIgcXVlbCBsaW5ndWFnZ2lvXHJcbiAgICAgICAgbGV0IHZhbCA9IHRoaXMuZGF0ZXMuZ2V0Rm9ybWF0dGVkKG9ialtwcm9wXSwgZm9ybWF0Lmxlbmd0aCA8PSAxMCwgZm9ybWF0Lmxlbmd0aCA+IDE2KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbCA/PyBcIlwiLCB3cml0YWJsZTogZmFsc2UsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWwsIGtleSwgb3JkZXIsIHR5cGU6IFwiZGF0ZVwiLCBwcm9wS2V5IH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR1cCBwZXIgbCdlc3BvcnRhemlvbmUgZGkgdW5hIHNpbmdvbGEgcHJvcHJpZXTDoCBkYSB1biBvZ2dldHRvLiBcclxuICAgKiBWaWVuZSBnZW5lcmF0byBsJ2hlYWRlciBlIGxhIHByb3ByaWV0w6AgcmVsYXRpdmEgYWwgdmFsb3JlIGZvcm1hdHRhdG8gbyBuby4gXHJcbiAgICogXHJcbiAgICogUGVyIG90dGVuZXJlIGlsIHZhbG9yZSBlIGwnaGVhZGVyIGRlbGxhIHByb3ByaWV0w6AgdmVuZ29ubyB1dGlsaXp6YXRpIGkgbmF2aWdhdG9yaSBhdXRvLWdlbmVyYXRpIG5lbCBkZWNvcmF0b3JlICoqRXhwb3J0QXMqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBkaSBjdWkgZXNwb3J0YXJlIGxhIHByb3ByaWV0w6AgKipwcm9wKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wcmlldMOgIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc30gaGVhZGVycyBDb250ZW5pdG9yZSBkZWdsaSBoZWFkZXIsIHZlcnLDoCByaWVtcGl0byBkYSBxdWVzdGEgZnVuemlvbmUgXHJcbiAgICogQHBhcmFtIHtMb2NhbGl6YXRpb25TZXJ2aWNlfSBsb2MgU2Vydml6aW8gZGkgbG9jYWxpenphemlvbmUgY2hlIHRyYWR1Y2UgdHV0dGkgaSBub21pIGNoZSBwdcOyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZU9iamVjdChvYmo6IGFueSwgcHJvcDogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10sIGNvbHVtbnNTZWxlY3Rpb24/OiB7IFtpZDogc3RyaW5nXTogdHJ1ZSB9ICwgbG9jPzogTG9jYWxpemF0aW9uU2VydmljZSkge1xyXG4gICAgLy9zZSBxdWVzdGEgcHJvcHJpZXTDoCBoYSB1biBuYXZpZ2F0b3Igc2lnbmlmaWNhIGNoZSBkZXJpdmEgZGEgdW4gb2dnZXR0byBpbnRlcm5vLCByZWN1cGVybyBpbCB2YWxvcmUgaW4gcXVlc3RhIGZhc2UgZGF0byBjaGUgcHJpbWEgbm9uIGNlIGwnaG9cclxuICAgIGxldCB2YWx1ZW5hdmlnYXRvciA9IG9ialtwcm9wICsgY3N2VmFsdWVOYXZpZ2F0b3JdO1xyXG5cclxuICAgIC8vRXMuIGRpIHZhbHVlbmF2aWdhdG9yIG9iai5zdWJvYmouc3Vic3Vib2JqLnByb3BlcnR5XHJcbiAgICBsZXQgam1wcyA9IHZhbHVlbmF2aWdhdG9yLnNwbGl0KFwiLlwiKTtcclxuXHJcbiAgICAvLyBMb2NhbGl6emF6aW9uZSBwcmVzYSBkYWxsYSBjbGFzc2UgYmFzZSBzZSBjJ8OoLCBhbHRyaW1lbnRpIGRhbGxhIGNsYXNzZSBpbnRlcm5hIChjaW/DqCBkYWwgcHJpbW8gc2FsdGlubylcclxuICAgIGlmICghbG9jKSB7XHJcbiAgICAgIGxldCB0eXBlID0gb2JqW3Byb3AgKyBjc3ZWYWx1ZVR5cGVdO1xyXG4gICAgICBsZXQgcHJvdG8gPSBuZXcgdHlwZSgpO1xyXG4gICAgICBsb2MgPSBwcm90b1tsb2NQcm9wZXJ0eV0gPyB0aGlzLmxjLmdlbmVyYXRlRnJvbVR5cGUocHJvdG9bbG9jUHJvcGVydHldKSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy9NaSBjbG9ubyBsJ29nZ2V0dG8gb3JpZ2luYWxlIHBlciBub24gdWNjaWRlcmdsaSBpIHJpZmVyaW1lbnRpXHJcbiAgICBsZXQgY2xvbmUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xyXG4gICAgLy9TYWx0byByaWNvcnNpdmFtZW50ZSBzdSBtZSBzdGVzc28gcGVyIGFycml2YXJlIGFsbGEgcHJvcHJpZXTDoFxyXG4gICAgLy9TYWx0byAxID4gZGl2ZW50YSBvYmpcclxuICAgIC8vU2FsdG8gMiA+IGRpdmVudGEgb2JqLnN1Ym9ialxyXG4gICAgLy9lY2MuLi5cclxuICAgIGptcHMuZm9yRWFjaChwcCA9PiB7IGNsb25lID0gY2xvbmVbcHBdOyB9KTtcclxuXHJcbiAgICAvL1ZhbG9yZSBmaW5hbGUgOkRcclxuICAgIGxldCB2YWx1ZSA9IGNsb25lO1xyXG5cclxuICAgIGxldCB0ZXh0ID0gb2JqW3Byb3AgKyBjc3ZIZHJQcmVmaXhdO1xyXG4gICAgbGV0IGxhYmVsID0gbG9jICYmIHRleHQgPyBsb2MubG9jKHRleHQpIDogdGV4dCB8fCBcIlwiO1xyXG4gICAgbGV0IG9yZGVyID0gb2JqW3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG5cclxuICAgIC8vU2UgcGVyIHF1ZXN0YSBwcm9wcmlldMOgIGhvIHVuIGZvcm1hdG8gbG8gYXBwbGljb1xyXG4gICAgbGV0IGZvcm1hdDogc3RyaW5nID0gb2JqW3Byb3AgKyBjc3ZGb3JtYXRQcmVmaXhdO1xyXG4gICAgbGV0IHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnZGF0ZScgPSBcInN0cmluZ1wiO1xyXG4gICAgaWYgKGZvcm1hdCA9PSBcIkZcIikge1xyXG4gICAgICBsZXQgdmFsID0gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoLywvLCBcIlwiKTtcclxuICAgICAgdmFsdWUgPSB2YWwucmVwbGFjZShcIi5cIiwgXCIsXCIpO1xyXG4gICAgICB0eXBlID0gXCJudW1iZXJcIjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZvcm1hdCkge1xyXG4gICAgICB2YWx1ZSA9IHRoaXMuZGF0ZXMuZ2V0Rm9ybWF0dGVkKHZhbHVlLCBmb3JtYXQubGVuZ3RoIDw9IDEwLCBmb3JtYXQubGVuZ3RoID4gMTYpO1xyXG4gICAgICB0eXBlID0gXCJkYXRlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgeyB2YWx1ZTogdmFsdWUgPz8gXCJcIiwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgaGVhZGVycy5wdXNoKHsgbGFiZWwsIGtleTogcHJvcCwgb3JkZXIsIHR5cGUsIHByb3BLZXk6IG51bGwgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR1cCBwZXIgbCdlc3BvcnRhemlvbmUgZGkgdW5hIGxpc3RhIGRpIHZhbG9yaSBwaXZvdHRhdGkgZGluYW1pY2FtZW50ZTpcclxuICAgKiBcclxuICAgKiA9PiBSZWN1cGVybyBpbCB2YWxvcmUgdXRpbGl6emFuZG8gaSBuYXZpZ2F0b3JpXHJcbiAgICogXHJcbiAgICogPT4gUmVjdXBlcm8gbCdoZWFkZXIgdXRpbGl6emFuZG8gaSBuYXZpZ2F0b3JpXHJcbiAgICogXHJcbiAgICogPT4gQ29uIGlsIHZhbG9yZSBjaSBjcmVvIGxhIHByb3BlcnR5XHJcbiAgICogXHJcbiAgICogPT4gQ29uIGwnaGVhZGVyIGUgaWwgcmlmZXJpbWVudG8gYWxsYSBwcm9wZXJ0eSBhcHBlbmEgY3JlYXRhIGNyZW8gdW4gcmVjb3JkIG5lZ2xpIGhlYWRlciBkYSBlc3BvcnRhcmVcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gb2JqIE9nZ2V0dG8gZGkgY3VpIGVzcG9ydGFyZSBsYSBwcm9wcmlldMOgICoqcHJvcCoqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcHJpZXTDoCBkYSBlc3BvcnRhcmVcclxuICAgKiBAcGFyYW0ge0NzdkhlYWRlcnN9IGhlYWRlcnMgQ29udGVuaXRvcmUgZGVnbGkgaGVhZGVyLCB2ZXJyw6AgcmllbXBpdG8gZGEgcXVlc3RhIGZ1bnppb25lIFxyXG4gICAqIEBwYXJhbSB7TG9jYWxpemF0aW9uU2VydmljZX0gbG9jIFNlcnZpemlvIGRpIGxvY2FsaXp6YXppb25lIGNoZSB0cmFkdWNlIHR1dHRpIGkgbm9taSBjaGUgcHXDslxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VMaXN0KG9iajogYW55LCBwcm9wOiBzdHJpbmcsIGhlYWRlcnM6IENzdkhlYWRlcnNbXSwgbG9jPzogTG9jYWxpemF0aW9uU2VydmljZSkge1xyXG4gICAgbGV0IGhlYWRlcm5hdmlnYXRvciA9IG9ialtwcm9wICsgbGlzdENzdkhkclByZWZpeF07XHJcbiAgICBsZXQgdmFsdWVuYXZpZ2F0b3IgPSBvYmpbcHJvcCArIGxpc3RDc3ZWYWxQcmVmaXhdO1xyXG4gICAgbGV0IHZhbHVlZm9ybWF0ID0gb2JqW3Byb3AgKyBsaXN0Q3N2VmFsRm9ybWF0XTtcclxuICAgIGxldCBvcmRlciA9IG9ialtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuXHJcbiAgICB2YXIganVtcHM6IHN0cmluZ1tdLCB0bXBSZXM6IGFueTtcclxuICAgIHZhciBvYmpzOiBhbnlbXSA9IG9ialtwcm9wXTtcclxuXHJcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBvYmpzLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgbGV0IGxpc3RpdGVtID0gb2Jqc1tpZHhdO1xyXG5cclxuICAgICAgdmFyIGhlYWRlcnNwbGl0ID0gaGVhZGVybmF2aWdhdG9yLnNwbGl0KFwiIFwiKTtcclxuICAgICAgdmFyIGxhYmVsID0gXCJcIjtcclxuXHJcbiAgICAgIC8vIFBlciBsJ2hlYWRlciBzaSBjb25zaWRlcmEgYSBzZSBzdGFudGUgb2duaSBwZXp6byBzZXBhcmF0byBkYSBzcGF6aW8gcGVyIGZhcmUgbGUgY29uY2F0ZW5hemlvbmlcclxuICAgICAgaGVhZGVyc3BsaXQuZm9yRWFjaChwciA9PiB7XHJcbiAgICAgICAganVtcHMgPSBwci5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgdG1wUmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsaXN0aXRlbSkpO1xyXG4gICAgICAgIGp1bXBzLmZvckVhY2gocHAgPT4geyB0bXBSZXMgPSB0bXBSZXNbcHBdOyB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFsYWJlbCkgbGFiZWwgPSAhIWxvYyA/IGxvYy5sb2ModG1wUmVzKSA6IHRtcFJlcztcclxuICAgICAgICBlbHNlIGxhYmVsICs9IFwiIFwiICsgISFsb2MgPyBsb2MubG9jKHRtcFJlcykgOiB0bXBSZXM7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAganVtcHMgPSB2YWx1ZW5hdmlnYXRvci5zcGxpdChcIi5cIik7XHJcbiAgICAgIHRtcFJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGlzdGl0ZW0pKTtcclxuICAgICAganVtcHMuZm9yRWFjaChwcCA9PiB7IHRtcFJlcyA9IHRtcFJlc1twcF07IH0pO1xyXG4gICAgICBsZXQgdmFsdWUgPSB0bXBSZXM7XHJcblxyXG4gICAgICBsZXQgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyA9IFwic3RyaW5nXCI7XHJcbiAgICAgIGlmICh2YWx1ZWZvcm1hdCA9PSBcIkZcIikge1xyXG4gICAgICAgIGxldCB2YWwgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUudG9TdHJpbmcoKSA6IFwiXCI7XHJcbiAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoLywvLCBcIlwiKTtcclxuICAgICAgICB2YWx1ZSA9IHZhbC5yZXBsYWNlKFwiLlwiLCBcIixcIik7XHJcbiAgICAgICAgdHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodmFsdWVmb3JtYXQpIHtcclxuICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZXMuZ2V0Rm9ybWF0dGVkKG9ialtwcm9wXSwgdmFsdWVmb3JtYXQubGVuZ3RoIDw9IDEwLCB2YWx1ZWZvcm1hdC5sZW5ndGggPiAxNik7XHJcbiAgICAgICAgdHlwZSA9IFwiZGF0ZVwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wICsgaWR4LCB7IHZhbHVlOiB2YWx1ZSA/PyBcIlwiLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsLCBrZXk6IHByb3AgKyBpZHgsIG9yZGVyOiBvcmRlciArIGlkeCwgdHlwZSwgcHJvcEtleTogbnVsbCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHVwIHBlciBsJ2VzcG9ydGF6aW9uZSBkaSB1bmEgbGlzdGEgZGkgdmFsb3JpIHBpdm90dGF0aSBkaW5hbWljYW1lbnRlOlxyXG4gICAqIFxyXG4gICAqID0+IFJlY3VwZXJvIGlsIHZhbG9yZSB1dGlsaXp6YW5kbyBpIG5hdmlnYXRvcmlcclxuICAgKiBcclxuICAgKiA9PiBSZWN1cGVybyBsJ2hlYWRlciB1dGlsaXp6YW5kbyBpIG5hdmlnYXRvcmlcclxuICAgKiBcclxuICAgKiA9PiBDb24gaWwgdmFsb3JlIGNpIGNyZW8gbGEgcHJvcGVydHlcclxuICAgKiBcclxuICAgKiA9PiBDb24gbCdoZWFkZXIgZSBpbCByaWZlcmltZW50byBhbGxhIHByb3BlcnR5IGFwcGVuYSBjcmVhdGEgY3JlbyB1biByZWNvcmQgbmVnbGkgaGVhZGVyIGRhIGVzcG9ydGFyZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBkaSBjdWkgZXNwb3J0YXJlIGxhIHByb3ByaWV0w6AgKipwcm9wKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wcmlldMOgIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc30gaGVhZGVycyBDb250ZW5pdG9yZSBkZWdsaSBoZWFkZXIsIHZlcnLDoCByaWVtcGl0byBkYSBxdWVzdGEgZnVuemlvbmVcclxuICAgKiBAcGFyYW0ge0xvY2FsaXphdGlvblNlcnZpY2V9IGxvYyBTZXJ2aXppbyBkaSBsb2NhbGl6emF6aW9uZSBjaGUgdHJhZHVjZSB0dXR0aSBpIG5vbWkgY2hlIHB1w7JcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlRGljdGlvbmFyeShvYmo6IGFueSwgcHJvcDogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10sIGxvYz86IExvY2FsaXphdGlvblNlcnZpY2UpIHtcclxuICAgIGxldCBoZWFkZXJuYXZpZ2F0b3IgPSBvYmpbcHJvcCArIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXhdO1xyXG4gICAgbGV0IHZhbHVlbmF2aWdhdG9yID0gb2JqW3Byb3AgKyBkaWN0aW9uYXJ5Q3N2VmFsUHJlZml4XTtcclxuICAgIGxldCBvcmRlciA9IG9ialtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuXHJcbiAgICB2YXIganVtcHM6IHN0cmluZ1tdLCB0bXBSZXM6IGFueTtcclxuICAgIHZhciBvYmpzOiBhbnlbXSA9IG9ialtwcm9wXTtcclxuXHJcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBvYmpzLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgbGV0IGxpc3RpdGVtID0gb2Jqc1tpZHhdO1xyXG4gICAgICB2YXIgaGVhZGVyc3BsaXQgPSBoZWFkZXJuYXZpZ2F0b3Iuc3BsaXQoXCIgXCIpO1xyXG4gICAgICB2YXIgbGFiZWwgPSBcIlwiO1xyXG5cclxuICAgICAgaGVhZGVyc3BsaXQuZm9yRWFjaChwciA9PiB7XHJcbiAgICAgICAganVtcHMgPSBwci5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgdG1wUmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsaXN0aXRlbSkpO1xyXG4gICAgICAgIGp1bXBzLmZvckVhY2gocHAgPT4geyB0bXBSZXMgPSB0bXBSZXNbcHBdOyB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFsYWJlbCkgbGFiZWwgPSAhIWxvYyA/IGxvYy5sb2ModG1wUmVzKSA6IHRtcFJlcztcclxuICAgICAgICBlbHNlIGxhYmVsICs9IFwiIFwiICsgISFsb2MgPyBsb2MubG9jKHRtcFJlcykgOiB0bXBSZXM7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdmFyIHZhbHVlc3BsaXQgPSB2YWx1ZW5hdmlnYXRvci5zcGxpdChcIixcIik7XHJcbiAgICAgIHZhbHVlc3BsaXQuZm9yRWFjaCgodCwgaWR4aW50ZXJuYWwpID0+IHtcclxuICAgICAgICB2YXIgbmF2aWcgPSB0LnNwbGl0KFwiLVwiKVsxXTtcclxuICAgICAgICB2YXIgZGVzYyA9IHQuc3BsaXQoXCItXCIpWzBdO1xyXG5cclxuICAgICAgICBqdW1wcyA9IG5hdmlnLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICB0bXBSZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGxpc3RpdGVtKSk7XHJcbiAgICAgICAganVtcHMuZm9yRWFjaChwcCA9PiB7IHRtcFJlcyA9IHRtcFJlc1twcF07IH0pO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRtcFJlcztcclxuXHJcbiAgICAgICAgbGV0IHByb3BuYW1lID0gcHJvcCArIGlkeC50b1N0cmluZygpICsgaWR4aW50ZXJuYWwudG9TdHJpbmcoKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wbmFtZSwgeyB2YWx1ZTogdmFsdWUgPz8gXCJcIiwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsOiBsYWJlbCArIFwiIFwiICsgISFsb2MgPyBsb2MubG9jKGRlc2MpIDogZGVzYywga2V5OiBwcm9wbmFtZSwgb3JkZXI6IG9yZGVyICsgaWR4LCB0eXBlOiAnc3RyaW5nJywgcHJvcEtleTogbnVsbCB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogXHJcbiAgICogRWZmZXR0dWEgbCdlc3BvcnRhemlvbmUgaW4gZmlsZSBDU1YgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBleHBvcnRDU1YoZm46IHN0cmluZywgaGVhZGVyczogQ3N2SGVhZGVyc1tdLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgbGV0IGNzdkRhdGEgPSAnJywgcm93ID0gJycsIHNlcCA9ICc7JztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGggPSBoZWFkZXJzW2ldO1xyXG4gICAgICByb3cgKz0gYCR7cm93ICE9ICcnID8gc2VwIDogJyd9XCIke2gubGFiZWx9XCJgO1xyXG4gICAgfVxyXG4gICAgY3N2RGF0YSArPSByb3cgKyAnXFxyXFxuJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgcm93ID0gJyc7XHJcbiAgICAgIGxldCBpdGVtID0gZGF0YVtpXTtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBoZWFkZXJzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgbGV0IHZhbCA9IGl0ZW1baGVhZGVyc1tqXS5rZXldO1xyXG4gICAgICAgIHJvdyArPSBgJHtyb3cgIT0gJycgPyBzZXAgOiAnJ31cIiR7dmFsfVwiYDtcclxuICAgICAgfVxyXG4gICAgICBjc3ZEYXRhICs9IHJvdyArICdcXHJcXG4nO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBCT00gPSBuZXcgVWludDhBcnJheShbMHhFRiwweEJCLDB4QkZdKTtcclxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW0JPTSwgY3N2RGF0YV0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcclxuICAgIHZhciBvYmplY3RVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgdGhpcy51dGlFeHRzLmZpbGVEb3dubG9hZChvYmplY3RVcmwsIGZuLmVuZHNXaXRoKCcueGxzeCcpID8gZm4ucmVwbGFjZSgnLnhsc3gnLCAnLmNzdicpIDogZm4uZW5kc1dpdGgoJy5jc3YnKSA/IGZuIDogZm4gKyBcIi5jc3ZcIik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIENhY2hlIGRlbCBtb2R1bG8gcGVyIGwnZXNwb3J0YXppb25lIEV4Y2VsICovXHJcbiAgcHJpdmF0ZSBFeGNlbEpTOiBhbnk7XHJcblxyXG4gIC8qKiBFZmZldHR1YSBsJ2VzcG9ydGF6aW9uZSBkZWwgZmlsZSBFeGNlbCBiYXNhbmRvc2kgc3VsIG1vZHVsbyAqKkV4Y2VsSlMqKiwgc3VnbGkgaGVhZGVyICoqaGVhZGVycyoqIGUgc3VpIGRhdGkgKipkYXRhKiogKi9cclxuICBwcml2YXRlIGFzeW5jIGV4cG9ydEV4Y2VsKGZuOiBzdHJpbmcsIGhlYWRlcnM6IENzdkhlYWRlcnNbXSwgZGF0YTogYW55W10pIHtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLkV4Y2VsSlMgPSB0aGlzLkV4Y2VsSlMgfHwgYXdhaXQgaW1wb3J0KFwiZXhjZWxqc1wiKTtcclxuICAgIH1cclxuICAgIGNhdGNoIHtcclxuICAgICAgdGhyb3cgXCJJbXBvc3NpYmlsZSBjYXJpY2FyZSBsYSBsaWJyZXJpYSBwZXIgbCdlc3BvcnRhemlvbmUgaW4gRXhjZWxcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaUZpeCA9IDE7XHJcbiAgICBsZXQgd29ya2Jvb2sgPSBuZXcgdGhpcy5FeGNlbEpTLldvcmtib29rKCk7XHJcbiAgICB3b3JrYm9vay5jcmVhdG9yID0gXCJFbWEncyBiaWcgRXMtVGFibGVcIjtcclxuICAgIHdvcmtib29rLmNyZWF0ZWQgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIGxldCBzaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldCgnRGF0YScpO1xyXG4gICAgbGV0IGhlYWRlciA9IHNoZWV0LmdldFJvdygxKTtcclxuICAgIGhlYWRlci5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICBoZWFkZXJzID0gaGVhZGVycy5zb3J0KChhOiBDc3ZIZWFkZXJzLCBiOiBDc3ZIZWFkZXJzKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBoID0gaGVhZGVyc1tpXTtcclxuICAgICAgaGVhZGVyLmdldENlbGwoaSArIGlGaXgpLnZhbHVlID0gaC5sYWJlbDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHJvdyA9IHNoZWV0LmdldFJvdyhpICsgaUZpeCArIDEpO1xyXG4gICAgICBsZXQgaXRlbSA9IGRhdGFbaV07XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBoID0gaGVhZGVyc1tpXTtcclxuICAgICAgICBsZXQgY2VsbCA9IHJvdy5nZXRDZWxsKGkgKyAxKTtcclxuICAgICAgICBsZXQgdmFsID0gaXRlbVtoLmtleV07XHJcblxyXG4gICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICBjZWxsLnZhbHVlID0gXCJcIjtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoIChoLnR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgICAvLyBFeGNlbEpTIHZhIGRpIGRlZmF1bHQgaW4gVVRDIHF1aW5kaSByaXNjaGllcmViYmUgZGkgdGlyYXJlIGdpw7kgMiBvcmUgYWQgb2duaSBlc3BvcnRhemlvbmVcclxuICAgICAgICAgICAgLy8gQmlzb2duYSBhZ2dpdW5nZXJlIGwndXRjIG9mZnNldCBhbGxhIGRhdGEgYXR0dWFsZVxyXG4gICAgICAgICAgICBsZXQgZGF0ZSA9IHRoaXMuZGF0ZXMuZ2V0RGF0ZUNvbnZlcnRpb24odmFsKTtcclxuICAgICAgICAgICAgaWYgKGRhdGUpIHtcclxuICAgICAgICAgICAgICBsZXQgY29ycmVjdGVkRGF0ZSA9IGRhdGUuYWRkKGRhdGUudXRjT2Zmc2V0KCksICdtaW51dGUnKTtcclxuICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gY29ycmVjdGVkRGF0ZS50b0RhdGUoKTtcclxuICAgICAgICAgICAgICBjZWxsLm51bUZtdCA9IHZhbC5sZW5ndGggPiAxMCA/ICdkZC9tbS95eXl5IGg6bTpzJyA6ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnbnVtYmVyJzpcclxuICAgICAgICAgICAgbGV0IGNvbnZlcnRlZCA9IHBhcnNlRmxvYXQodmFsLnJlcGxhY2UoJywnLCAnLicpKTtcclxuICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGlzTmFOKGNvbnZlcnRlZCkgPyBcIlwiIDogY29udmVydGVkO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGNlbGwudmFsdWUgPSB2YWw7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBidWZmZXIgPSBhd2FpdCB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCk7XHJcbiAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7XCIgfSk7XHJcbiAgICBsZXQgb2JqZWN0VXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIHRoaXMudXRpRXh0cy5maWxlRG93bmxvYWQob2JqZWN0VXJsLCBmbi5lbmRzV2l0aCgnLmNzdicpID8gZm4ucmVwbGFjZSgnLmNzdicsICcueGxzeCcpIDogZm4uZW5kc1dpdGgoJy54bHN4JykgPyBmbiA6IGZuICsgXCIueGxzeFwiKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgZWZmZXR0aXZhbWVudGUgZ2VuZXJhIGdsaSBoZWFkZXIgZSBpIGRhdGkgcGVyIGwnZXNwb3J0YXppb25lIGNvbiAqKm5neC1jc3YqKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBkYSBlc3BvcnRhcmVcclxuICAgKi9cclxuICBwdWJsaWMgZXhwb3J0KGl0ZW1zOiBhbnlbXSwgZm9ybWF0OiAnQ1NWJyB8ICdYTFNYJywgZmlsZU5hbWU6IHN0cmluZywgdHlwZTogVHlwZTxhbnk+LCBjb2x1bW5zRmlsdGVyPzogc3RyaW5nW10sIGdlbmVyaWNIZWFkZXJzPzogQ3N2SGVhZGVyc1tdKSB7XHJcbiAgICB2YXIgY3JlYXRlZEl0ZW1zID0gaXRlbXMubWFwKHQgPT4ge1xyXG4gICAgICBsZXQgdG1wID0gbmV3IHR5cGUoKTtcclxuICAgICAgZm9yKGxldCBwcm9wZXJ0eSBpbiB0KSB0bXBbcHJvcGVydHldID0gdFtwcm9wZXJ0eV07XHJcbiAgICAgIHJldHVybiB0bXA7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgaGVhZGVycyA9IGdlbmVyaWNIZWFkZXJzID8gdGhpcy5zZXR1cEZvckdlbmVyaWNFeHBvcnQoY3JlYXRlZEl0ZW1zLCBnZW5lcmljSGVhZGVycykgOiB0aGlzLnNldHVwRm9yRXhwb3J0KGNyZWF0ZWRJdGVtcywgY29sdW1uc0ZpbHRlcik7XHJcbiAgICAoZm9ybWF0ID09IFwiQ1NWXCIgPyB0aGlzLmV4cG9ydENTViA6IHRoaXMuZXhwb3J0RXhjZWwpLmJpbmQodGhpcykoZmlsZU5hbWUsIGhlYWRlcnMsIGNyZWF0ZWRJdGVtcyk7XHJcbiAgfVxyXG59Il19
627
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5leHBvcnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL3NyYy9saWIvc2VydmljZXMvZXh0ZW5zaW9ucy5leHBvcnRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFLakQsaUJBQWlCO0FBRWpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBUS9ROzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUE4QjtJQUMvRCxPQUFPLFNBQVMsWUFBWSxDQUF3QyxXQUFjO1FBQ2hGLE9BQU8sS0FBTSxTQUFRLFdBQVc7WUFBekI7O2dCQUE0QixZQUFPLEdBQUcsR0FBRyxDQUFDO1lBQUMsQ0FBQztTQUFBLENBQUM7SUFDdEQsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLFNBQWlCLElBQUksRUFBRSxVQUFrQixJQUFJLEVBQUUsRUFBRSxDQUNyRyxDQUFDLE1BQWMsRUFBRSxXQUFtQixFQUFFLEVBQUU7SUFDdEMsSUFBSSxNQUFNO1FBQ1IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxHQUFHLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUss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WUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3BHLENBQUM7OzBHQXpmVSxhQUFhOzhHQUFiLGFBQWEsY0FEQSxNQUFNOzJGQUNuQixhQUFhO2tCQUR6QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgVHlwZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBFc2ZhZW56YVxyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5cclxuaW1wb3J0IHsgZXhwb3J0TGlzdCwgY3N2Rm9ybWF0UHJlZml4LCBjc3ZIZHJQcmVmaXgsIGNzdk9yZFByZWZpeCwgY3N2VmFsdWVOYXZpZ2F0b3IsIGNzdlZpc1ByZWZpeCwgZGljdGlvbmFyeUNzdkhkclByZWZpeCwgZGljdGlvbmFyeUNzdlZhbFByZWZpeCwgbGlzdENzdkhkclByZWZpeCwgbGlzdENzdlZhbEZvcm1hdCwgbGlzdENzdlZhbFByZWZpeCwgY3N2UHJvcEtleSwgbG9jUHJvcGVydHksIGNzdlZhbHVlVHlwZSB9IGZyb20gXCIuLi9tb2RlbHMvRXhwb3J0Q29uc3RzXCI7XHJcbmltcG9ydCB7IERhdGVTZXJ2aWNlIH0gZnJvbSAnLi9leHRlbnNpb25zLmRhdGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gXCIuL2V4dGVuc2lvbnMudXRpbGl0aWVzLnNlcnZpY2VcIjtcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgQ3N2SGVhZGVycyB9IGZyb20gXCIuLi9tb2RlbHMvQ3N2SGVhZGVyc1wiO1xyXG5pbXBvcnQgeyBHZW5lcmljSXRlbSB9IGZyb20gXCIuLi9tb2RlbHMvR2VuZXJpY0l0ZW1cIjtcclxuXHJcbi8qKlxyXG4gKiBEZWNvcmF0b3JlIGNoZSBmb3JuaXNjZSBsYSBjbGFzc2UgZGkgbG9jYWxpenphemlvbmUgcGVyIHR1dHRlIGxlIHByb3ByaWV0w6AgZXNwb3J0YXRlIGNvbiBARXhwb3J0IGUgcXVhbHNpYXNpIGFsdHJvIHRhZyBjaGUgcmljaGllZGEgbG9jYWxpenphemlvbmkuXHJcbiAqIFxyXG4gKiBTb3N0YW56aWxhbWVudGUgYWdnaXVuZ2UgbGEgcHJvcHJpZXTDoCAqKl9fbG9jX18qKiBhbGwnb2dnZXR0byBjcmVhdG8gZGFsbGEgY2xhc3NlIGNvcnJlbnRlIGFzc2VnbmFuZG9nbGkgY29tZSB2YWxvcmUgaWwgdGlwbyBkZWwgTG9jYWxpemF0aW9uU2VydmljZSBkYSB1c2FyZSBwZXIgbGEgdHJhZHV6aW9uZVxyXG4gKiBcclxuICogQHBhcmFtIHtUeXBlPExvY2FsaXphdGlvblNlcnZpY2U+fSBsb2MgVGlwbyBlcmVkaXRhdG8gZGFsIExvY2FsaXphdGlvblNlcnZpY2UgY2hlIHB1w7IgZXNzZXJlIGNyZWF0byBhIHJ1bnRpbWUgc290dG8gY29udGVzdG8gZGVsbGEgREkgZGkgQW5ndWxhclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEV4cG9ydExvY2FsaXphdGlvbihsb2M6IFR5cGU8TG9jYWxpemF0aW9uU2VydmljZT4pIHtcclxuICByZXR1cm4gZnVuY3Rpb24gaW50ZWdyYXRlTG9jPFQgZXh0ZW5kcyB7IG5ldyguLi5hcmdzOiBhbnlbXSk6IHt9IH0+KGNvbnN0cnVjdG9yOiBUKSB7XHJcbiAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBjb25zdHJ1Y3RvciB7IF9fbG9jX18gPSBsb2M7IH07XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRGVjb3JhdG9yZSBkaSBlc3BvcnRhemlvbmUgdXRpbGl6emFiaWxlIHN1IHVuYSBwcm9wcmlldMOgIHNpbmdvbGEuIFxyXG4gKiBWZXJyYW5ubyBnZW5lcmF0ZSAzIHByb3ByaWV0w6AgY2hlIGdlc3RpcmFubm8gbCdlc3BvcnRhemlvbmU6IChwcm9wLCBwcm9wX2NzdnZpcywgcHJvcF9jc3ZoZHIpLiBcclxuICogXHJcbiAqIEFkIGVzZW1waW8sIGRhIHF1ZXN0YSBjb25maWd1cmF6aW9uZTpcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYFxyXG4gKiBARXhwb3J0KHRydWUsIFwiTXlIZWFkZXJcIilcclxuICogY2lhbzogc3RyaW5nO1xyXG4gKiBgYGBcclxuICogXHJcbiAqIE5hc2NlcmFubm8gbGUgc2VndWVudGkgcHJvcHJpZXTDoCBuZWxsJ29nZ2V0dG8gZXNwb3J0YWJpbGU6XHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBcclxuICogY2lhb19jc3Z2aXM6IHN0cmluZzsgPT4gdHJ1ZVxyXG4gKiBjaWFvOiBzdHJpbmc7XHJcbiAqIGNpYW9fY3N2aGRyOiBzdHJpbmcgPT4gXCJNeUhlYWRlclwiXHJcbiAqIGBgYFxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IG9yZGVyIE9yZGluZSBkaSBlc3BvcnRhemlvbmUuIFBpw7kgcGljY29sbyDDqCwgcHJpbWEgYXBwYXJlIGlsIHZhbG9yZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyIFRpdG9sbyBkZWxsYSBjb2xvbm5hIG5lbCBmaWxlIENTViBlc3BvcnRhdG9cclxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCBGb3JtYXRvIGRpIGVzcG9ydGF6aW9uZS4gUHXDsiBlc3NlcmUgdW4gZm9ybWF0byBkYXRhIHBlciBpIGNhbXBpIGRhdGEgbyAnRicgcGVyIGkgY2FtcGkgZmxvYXRpbmcgcG9pbnRcclxuICovXHJcbmV4cG9ydCBjb25zdCBFeHBvcnQgPSAob3JkZXI6IG51bWJlciwgaGVhZGVyOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nID0gbnVsbCwgdGFibGVpZDogc3RyaW5nID0gbnVsbCkgPT5cclxuICAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcclxuICAgIGlmIChmb3JtYXQpXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2Rm9ybWF0UHJlZml4LCB7IHZhbHVlOiBmb3JtYXQsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2T3JkUHJlZml4LCB7IHZhbHVlOiBvcmRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZWaXNQcmVmaXgsIHsgdmFsdWU6ICEhaGVhZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGNzdkhkclByZWZpeCwgeyB2YWx1ZTogaGVhZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBpZiAodGFibGVpZClcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZQcm9wS2V5LCB7IHZhbHVlOiB0YWJsZWlkLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcblxyXG4gICAgaWYgKHRhcmdldFtleHBvcnRMaXN0XSlcclxuICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdLnB1c2gocHJvcGVydHlLZXkgKyBjc3ZWaXNQcmVmaXgpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0YXJnZXRbZXhwb3J0TGlzdF0gPSBbcHJvcGVydHlLZXkgKyBjc3ZWaXNQcmVmaXhdXHJcbiAgfTtcclxuXHJcbi8qKlxyXG4gKiBEZWNvcmF0b3JlIGRpIGVzcG9ydGF6aW9uZSB1dGlsaXp6YWJpbGUgc3UgdW4gb2dnZXR0by4gXHJcbiAqIFBlciBvZ25pIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIHZlcnJhbm5vIGdlbmVyYXRlIDMgcHJvcHJpZXTDoCBjaGUgZ2VzdGlyYW5ubyBsJ2VzcG9ydGF6aW9uZTogKHByb3AsIHByb3BfY3N2dmlzLCBwcm9wX2NzdmhkcikuIFxyXG4gKiBQZXIgZXNzZXJlIGVzcG9ydGF0ZSwgbGUgcHJvcHJpZXTDoCBkZWxsJ29nZ2V0dG8gZGV2b25vIGVzc2VyZSBtYXJjYXRlIGNvbiBpIERlY29yYXRvcmkgZGkgZXNwb3J0YXppb25lXHJcbiAqIFxyXG4gKiBBZCBlc2VtcGlvLCBkYSBxdWVzdGEgY29uZmlndXJhemlvbmU6XHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBcclxuICogTXlPYmoge1xyXG4gKiAgICAgQEV4cG9ydCh0cnVlLCBcIk15SGVhZGVyXCIpXHJcbiAqICAgICBjaWFvOiBzdHJpbmc7XHJcbiAqIH1cclxuICogXHJcbiAqIEBFeHBvcnRPYmplY3QodHJ1ZSwgXCJNeUhlYWRlclwiKVxyXG4gKiB0ZXN0OiBNeU9iajsgXHJcbiAqIGBgYFxyXG4gKiBcclxuICogTmFzY2VyYW5ubyBsZSBzZWd1ZW50aSBwcm9wcmlldMOgIG5lbGwnb2dnZXR0byBlc3BvcnRhYmlsZTpcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYFxyXG4gKiB0ZXN0Y2lhbzogc3RyaW5nOyA9PiBWYWxvcmUgZGkgTXlPYmouY2lhb1xyXG4gKiB0ZXN0Y2lhb19jc3Z2aXM6IHN0cmluZzsgPT4gdHJ1ZVxyXG4gKiB0ZXN0Y2lhb19jc3ZoZHI6IHN0cmluZyA9PiBcIk15SGVhZGVyXCIgXHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gb3JkZXIgT3JkaW5lIGRpIGVzcG9ydGF6aW9uZS4gUGnDuSBwaWNjb2xvIMOoLCBwcmltYSBhcHBhcmUgaWwgdmFsb3JlXHJcbiAqIEBwYXJhbSB7YW55fSB0eXBlIFRpcG8gZGEgZXNwb3J0YXJlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXhwb3J0QXMgPSAob3JkZXI6IG51bWJlciwgdHlwZTogYW55LCBwcmVmaXg/OiBzdHJpbmcpID0+XHJcbiAgKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICB2YXIgdCA9IG5ldyB0eXBlKCk7XHJcbiAgICB2YXIgcHJvcHMgPSB0W2V4cG9ydExpc3RdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcHJvcCA9IHByb3BzW2ldLnJlcGxhY2UoY3N2VmlzUHJlZml4LCAnJyk7XHJcbiAgICAgIGlmICh0eXBlb2YgdFtwcm9wICsgY3N2VmlzUHJlZml4XSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgIHZhciB0b0VtaXQ6IGJvb2xlYW4gPSB0W3Byb3AgKyBjc3ZWaXNQcmVmaXhdO1xyXG4gICAgICAgIHZhciBsYmwgPSB0W3Byb3AgKyBjc3ZIZHJQcmVmaXhdO1xyXG4gICAgICAgIHZhciBmb3JtYXQgPSB0W3Byb3AgKyBjc3ZGb3JtYXRQcmVmaXhdO1xyXG4gICAgICAgIHZhciBvcmRlclByb3AgPSB0W3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG4gICAgICAgIGlmIChmb3JtYXQpXHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZGb3JtYXRQcmVmaXgsIHsgdmFsdWU6IGZvcm1hdCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZPcmRQcmVmaXgsIHsgdmFsdWU6IG9yZGVyUHJvcCArIG9yZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBwcm9wLCB7IHZhbHVlOiBudWxsLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZWYWx1ZU5hdmlnYXRvciwgeyB2YWx1ZTogcHJvcGVydHlLZXkgKyBcIi5cIiArIHByb3AsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZWaXNQcmVmaXgsIHsgdmFsdWU6IHRvRW1pdCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgcHJvcCArIGNzdkhkclByZWZpeCwgeyB2YWx1ZTogKHByZWZpeCA/IHByZWZpeCArICcgJyA6ICcnKSArIGxibCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgcHJvcCArIGNzdlZhbHVlVHlwZSwgeyB2YWx1ZTogdHlwZSwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgICAgICBpZiAodGFyZ2V0W2V4cG9ydExpc3RdKVxyXG4gICAgICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdLnB1c2gocHJvcGVydHlLZXkgKyBwcm9wICsgY3N2VmlzUHJlZml4KTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0YXJnZXRbZXhwb3J0TGlzdF0gPSBbcHJvcGVydHlLZXkgKyBwcm9wICsgY3N2VmlzUHJlZml4XVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbi8qKlxyXG4gKiBEZWNvcmF0b3JlIGRpIGVzcG9ydGF6aW9uZSB1dGlsaXp6YWJpbGUgc3UgdW5hIGxpc3RhLCBcclxuICogc2kgdXRpbGl6emFubyAyIG5hdmlnYXRvciByaXNwZXR0aXZhbWVudGUgcGVyIGxhIHZhbG9yaXp6YXppb25lIGRlbGwnSGVhZGVyIGUgZGVsIFZhbG9yZSBlIFxyXG4gKiBwZXIgb2duaSBlbGVtZW50byBkZWxsJ2FycmF5IHZlcnJhbm5vIGdlbmVyYXRlIDMgcHJvcHJpZXTDoCBjaGUgZ2VzdGlyYW5ubyBsJ2VzcG9ydGF6aW9uZTogKHByb3AsIHByb3BfY3N2dmlzLCBwcm9wX2NzdmhkcilcclxuICogXHJcbiAqIEFUVEVOWklPTkU6IEdsaSBvZ2dldHRpIGVzcG9ydGF0aSBpbiBxdWVzdGEgbW9kYWxpdMOgIG5vbiBkZXZvbm8gcHJlc2VudGFyZSBhbHRyaSB0YWcgZGkgdGlwbyBARXhwb3J0ey4uLn0gYWxsJ2ludGVybm8uIEZhIHR1dHRvIHF1ZXN0byBkZWNvcmF0b3JlXHJcbiAqIFxyXG4gKiBJIG5hdmlnYXRvciBoYW5ubyBxdWVzdGEgY29udmVuemlvbmU6XHJcbiAqIFxyXG4gKiAuIC0tPiBkaXZpZGUgZHVlIHByb3ByaWV0w6AgZGEgcmljaGlhbWFyZSBjb25zZWN1dGl2YW1lbnRlOiBcImEuYlwiIHJpY2hpYW1lcsOgIFwib2JqLmEuYlwiO1xyXG4gKiBcclxuICogfCAtLT4gZGl2aWRlIHBpw7kgcHJvcHJpZXTDoCBwZXIgbGUgY29uY2F0ZW5hemlvbmkgY29uIHVubyBzcGF6aW8gZnJhIHVuYSBlIGwnYWx0cmE6IFwicmVnZGVzY3xzbGljZS5zbGljZW5hbWVcIiBkaXZlbnRlcsOgIG9iai5yZWdkZXNjICsgXCIgXCIgKyBvYmouc2xpY2Uuc2xpY2VuYW1lXHJcbiAqIFxyXG4gKiBAcGFyYW0ge251bWJlcn0gb3JkZXIgT3JkaW5lIGRpIGVzcG9ydGF6aW9uZS4gUGnDuSBwaWNjb2xvIMOoLCBwcmltYSBhcHBhcmUgaWwgdmFsb3JlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJuYXZpZ2F0b3IgTmF2aWdhdG9yIGNvbCBjb21waXRvIGRpIHNlbGV6aW9uYXJlIGlsIHRpdG9sbyBwZXIgbGEgY29sb25uYVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVuYXZpZ2F0b3IgTmF2aWdhdG9yIGNvbCBjb21waXRvIGRpIHNlbGV6aW9uYXJlIGlsIHZhbG9yZSBwZXIgbGEgY29sb25uYVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVmb3JtYXQgRm9ybWF0byBkaSBlc3BvcnRhemlvbmUgcGVyIGkgdmFsb3JpIHNlbGV6aW9uYXRpIGRhbCAqKnZhbHVlbmF2aWdhdG9yKiouIFB1w7IgZXNzZXJlIHVuIGZvcm1hdG8gZGF0YSBwZXIgaSBjYW1waSBkYXRhIG8gJ0YnIHBlciBpIGNhbXBpIGZsb2F0aW5nIHBvaW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXhwb3J0TGlzdCA9IChvcmRlcjogbnVtYmVyLCBoZWFkZXJuYXZpZ2F0b3I6IHN0cmluZywgdmFsdWVuYXZpZ2F0b3I6IHN0cmluZywgdmFsdWVmb3JtYXQ6IHN0cmluZyA9IG51bGwpID0+XHJcbiAgKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGNzdk9yZFByZWZpeCwgeyB2YWx1ZTogb3JkZXIsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgbGlzdENzdlZhbFByZWZpeCwgeyB2YWx1ZTogdmFsdWVuYXZpZ2F0b3IsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgbGlzdENzdkhkclByZWZpeCwgeyB2YWx1ZTogaGVhZGVybmF2aWdhdG9yLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGxpc3RDc3ZWYWxGb3JtYXQsIHsgdmFsdWU6IHZhbHVlZm9ybWF0LCB3cml0YWJsZTogZmFsc2UgfSk7XHJcblxyXG4gICAgaWYgKHRhcmdldFtleHBvcnRMaXN0XSlcclxuICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdLnB1c2gocHJvcGVydHlLZXkgKyBsaXN0Q3N2SGRyUHJlZml4KTtcclxuICAgIGVsc2VcclxuICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdID0gW3Byb3BlcnR5S2V5ICsgbGlzdENzdkhkclByZWZpeF1cclxuICB9O1xyXG5cclxuLyoqXHJcbiAqIERlY29yYXRvcmUgZGkgZXNwb3J0YXppb25lIHV0aWxpenphYmlsZSBzdSB1biBkaXppb25hcmlvLiBTZSBhZCBlc2VtcGlvIHNpIHZvZ2xpb25vIGdlbmVyYXJlIGxlIGNvbG9ubmVcclxuICogXHJcbiAqIFZhbG9yZSBBID0gMVxyXG4gKiBcclxuICogVmFsb3JlIEIgPSAyXHJcbiAqIFxyXG4gKiBWYWxvcmUgQyA9IDNcclxuICogXHJcbiAqIHBhcnRlbmRvIGRhIHVuIG9nZ2V0dG8gaW5pemlhbGUgeyBWYWxvcmUgeyBBOiAxLCBCOiAyLCBDOiAzIH0gfVxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IG9yZGVyIE9yZGluZSBkaSBlc3BvcnRhemlvbmUuIFBpw7kgcGljY29sbyDDqCwgcHJpbWEgYXBwYXJlIGlsIHZhbG9yZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVybmF2aWdhdG9yIE5hdmlnYXRvciBjb2wgY29tcGl0byBkaSBzZWxlemlvbmFyZSBpbCB0aXRvbG8gcGVyIGxhIGNvbG9ubmFcclxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlbmF2aWdhdG9yIE5hdmlnYXRvciBjb2wgY29tcGl0byBkaSBzZWxlemlvbmFyZSBpbCB2YWxvcmUgcGVyIGxhIGNvbG9ubmFcclxuICovXHJcbmV4cG9ydCBjb25zdCBFeHBvcnREaWN0aW9uYXJ5ID0gKG9yZGVyOiBudW1iZXIsIGhlYWRlcm5hdmlnYXRvcjogc3RyaW5nLCB2YWx1ZW5hdmlnYXRvcjogc3RyaW5nKSA9PlxyXG4gICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZPcmRQcmVmaXgsIHsgdmFsdWU6IG9yZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGRpY3Rpb25hcnlDc3ZWYWxQcmVmaXgsIHsgdmFsdWU6IHZhbHVlbmF2aWdhdG9yLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXgsIHsgdmFsdWU6IGhlYWRlcm5hdmlnYXRvciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgIGlmICh0YXJnZXRbZXhwb3J0TGlzdF0pXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XS5wdXNoKHByb3BlcnR5S2V5ICsgZGljdGlvbmFyeUNzdkhkclByZWZpeCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XSA9IFtwcm9wZXJ0eUtleSArIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXhdXHJcbiAgfTtcclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNlIGNoZSBzaSBvY2N1cGEgZGVsbCdlc3BvcnRhemlvbmUgZGVnbGkgb2dnZXR0aSBtYXJjYXRpIGRhaSBEZWNvcmF0b3JpICoqRXhwb3J0RGljdGlvbmFyeSoqLCAqKkV4cG9ydExpc3QqKiwgKipFeHBvcnRBcyoqIG8gKipFeHBvcnQqKlxyXG4gKi9cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxyXG5leHBvcnQgY2xhc3MgRXhwb3J0U2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvc3RydXR0b3JlXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVzOiBEYXRlU2VydmljZSwgcHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBsYzogTG9jYWxpemF0aW9uU2VydmljZSkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdGEgdW5hIGxpc3RhIGRpIG9nZ2V0dGkgZ2VuZXJhIGdsaSBoZWFkZXIgcGVyIGwnZXNwb3J0YXppb25lIGUgaW50ZWdyYSBvZ25pIG9nZ2V0dG8gY29uIGxlIHByb3ByaWV0w6AgZXNwb3J0YWJpbGkgZGFsbGEgbGlicmVyaWEgKipAY3RybC9uZ3gtY3N2KipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueVtdfSBvYmpzIE9nZ2V0dGkgZGEgZXNwb3J0YXJlXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge0NzdkhlYWRlcnNbXX0gSGVhZGVyIGRpIGVzcG9ydGF6aW9uZSBnacOgIG9yZGluYXRpIGNvcnJldHRhbWVudGVcclxuICAgKi9cclxuICBwdWJsaWMgc2V0dXBGb3JFeHBvcnQob2JqczogYW55W10sIGNvbHVtbnM6IHN0cmluZ1tdID0gW10pOiBDc3ZIZWFkZXJzW10ge1xyXG4gICAgbGV0IGhlYWRlcnM6IENzdkhlYWRlcnNbXSA9IFtdO1xyXG4gICAgbGV0IGhlYWRlcnNDYWNoZSA9IHt9O1xyXG5cclxuICAgIGlmICghb2JqcyB8fCBvYmpzLmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm4gaGVhZGVycztcclxuXHJcbiAgICAvLyBEZXZvIHBlciBmb3J6YSBmYXJsbyBwZXIgdHV0dGkgZ2xpIG9nZ2V0dGkgZGF0byBjaGUgZGV2byBlc3BvcnJlIGxlIHByb3ByaWV0w6AgY2hlIG1pIHNlcnZvbm8gZGEgZXNwb3J0YXJlXHJcbiAgICAvLyBHbGkgaGVhZGVyIGxpIHJhY2NvbGdvIHR1dHRpIHBvaSBmYWNjaW8gdWFuIGRpc3RpbmN0IGluIG1vZG8gZGEgZXNwb3J0YXJlIHR1dHRlIGxlIHByb3ByaWV0w6AgcGVyIGJlbmVcclxuICAgIGxldCBjb2x1bW5TZWxlY3Rpb25EaWN0aW9uYXJ5OiB7IFtpZDogc3RyaW5nXTogdHJ1ZSB9ID0ge307XHJcblxyXG4gICAgaWYgKGNvbHVtbnM/Lmxlbmd0aCA+IDApXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucz8ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgY29sdW1uU2VsZWN0aW9uRGljdGlvbmFyeVtjb2x1bW5zW2ldXSA9IHRydWU7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmpzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBoZHMgPSB0aGlzLnBhcnNlQW5kR2V0SGVhZGVycyhvYmpzW2ldLCBjb2x1bW5TZWxlY3Rpb25EaWN0aW9uYXJ5KTtcclxuICAgICAgLy8gQWdnaXVuZ28gZ2xpIGhlYWRlciBmYWNlbmRvIGluIG1vZG8gZGkgbm9uIGFnZ2l1bmdlcm5lIG1haSBkdWUgdWd1YWxpIHBlciBub24gZG92ZXIgZmFyZSB1bmEgZGlzdGluY3QgZG9wb1xyXG4gICAgICAvLyBjaGUgY29zdGVyZWJiZSBjb211bnF1ZSByaXNvcnNlLiBVdGlsaXp6byB1biBkaXppb25hcmlvIGQnYXBwb2dnaW8gcGVyIGxvb2t1cCBpc3RhbnRhbmVpXHJcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgaGRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgaWYgKCFoZWFkZXJzQ2FjaGVbaGRzW2tdLmtleV0pIHtcclxuICAgICAgICAgIGhlYWRlcnNDYWNoZVtoZHNba10ua2V5XSA9IHRydWU7XHJcbiAgICAgICAgICBoZWFkZXJzLnB1c2goaGRzW2tdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWNvbHVtbnMgfHwgY29sdW1ucy5sZW5ndGggPT0gMClcclxuICAgICAgcmV0dXJuIGhlYWRlcnMuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIFNlIG1pIGFycml2YSBsYSBsaXN0YSBkaSBjb2xvbm5lIG5vbiBtaSBkw6Agc29sbyBsYSB2aXNpYmlsaXTDoCwgbWEgYW5jaGUgbCdvcmRpbmFtZW50b1xyXG4gICAgICAvLyBsZSBlc3BvcnRvIGRpIGNvbnNlZ3VlbnphXHJcbiAgICAgIGxldCBvcmRlcmVkSGVhZGVycyA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgdGhpc0lkID0gY29sdW1uc1tpXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChoZWFkZXJzW2ldLnByb3BLZXkgPT0gdGhpc0lkKSB7XHJcbiAgICAgICAgICAgIG9yZGVyZWRIZWFkZXJzLnB1c2goaGVhZGVyc1tpXSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb3JkZXJlZEhlYWRlcnM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRhIHVuYSBsaXN0YSBkaSBvZ2dldHRpIGdlbmVyaWNpIGdlbmVyYSBnbGkgaGVhZGVyIHBlciBsJ2VzcG9ydGF6aW9uZSBlIGludGVncmEgb2duaSBvZ2dldHRvIGNvbiBsZSBwcm9wcmlldMOgIGVzcG9ydGFiaWxpIGRhbGxhIGxpYnJlcmlhICoqQGN0cmwvbmd4LWNzdioqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtHZW5lcmljSXRlbVtdfSBvYmpzIE9nZ2V0dGkgZ2VuZXJpY2kgZGEgZXNwb3J0YXJlXHJcbiAgICogQHBhcmFtIHtDc3ZIZWFkZXJzW119IGNvbHVtbnMgQ29sb25uZSByaWNoaWVzdGUgZGFsbCdlc3BvcnRhemlvbmVcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Q3N2SGVhZGVyc1tdfSBIZWFkZXIgZGkgZXNwb3J0YXppb25lIGdpw6Agb3JkaW5hdGkgY29ycmV0dGFtZW50ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXR1cEZvckdlbmVyaWNFeHBvcnQob2JqczogR2VuZXJpY0l0ZW1bXSwgY29sdW1uczogQ3N2SGVhZGVyc1tdKTogQ3N2SGVhZGVyc1tdIHtcclxuICAgIGxldCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10gPSBbXTtcclxuICAgIGlmICghb2JqcyB8fCBvYmpzLmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm4gaGVhZGVycztcclxuXHJcbiAgICAvLyBEZXZvIHBlciBmb3J6YSBmYXJsbyBwZXIgdHV0dGkgZ2xpIG9nZ2V0dGkgZGF0byBjaGUgZGV2byBlc3BvcnJlIGxlIHByb3ByaWV0w6AgY2hlIG1pIHNlcnZvbm8gZGEgZXNwb3J0YXJlXHJcbiAgICBvYmpzLmZvckVhY2goKG9iaiwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGluZGV4ID09IDApXHJcbiAgICAgICAgaGVhZGVycyA9IHRoaXMucGFyc2VBbmRHZXRHZW5lcmljSGVhZGVycyhvYmosIGNvbHVtbnMpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5wYXJzZUFuZEdldEdlbmVyaWNIZWFkZXJzKG9iaiwgY29sdW1ucyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaGVhZGVycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdG8gdW4gb2dnZXR0byBnZW5lcmljbyBnZW5lcmEgZ2xpIGhlYWRlciBwZXIgbCdlc3BvcnRhemlvbmUgZSBsbyBpbnRlZ3JhIGNvbiBsZSBwcm9wcmlldMOgIGVzcG9ydGFiaWxpIGRhbGxhIGxpYnJlcmlhICoqQGN0cmwvbmd4LWNzdioqXHJcbiAgICogXHJcbiAgICogTWV0b2RvIGludGVybm8gcmljaGlhbWF0byBkYSAqKnNldHVwRm9yR2VuZXJpY0V4cG9ydCoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtHZW5lcmljSXRlbX0gb2JqIE9nZ2V0dG8gZ2VuZXJpY28gZGEgZXNwb3J0YXJlXHJcbiAgICogQHBhcmFtIHtDc3ZDb2x1bW5bXX0gY29sdW1ucyBDb2xvbm5lIHJpY2hpZXN0ZSBkYWxsJ2VzcG9ydGF6aW9uZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtDc3ZIZWFkZXJzW119IEhlYWRlciBkaSBlc3BvcnRhemlvbmUgZ2nDoCBvcmRpbmF0aSBjb3JyZXR0YW1lbnRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUFuZEdldEdlbmVyaWNIZWFkZXJzKG9iajogR2VuZXJpY0l0ZW0sIGNvbHVtbnM6IENzdkhlYWRlcnNbXSk6IENzdkhlYWRlcnNbXSB7XHJcbiAgICBpZiAoIW9iai5wcm9wZXJ0aWVzKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICB2YXIgaGVhZGVyczogQ3N2SGVhZGVyc1tdID0gW107XHJcblxyXG4gICAgLy9NaXJhY2xlIGluY29taW5nXHJcbiAgICBjb2x1bW5zLmZvckVhY2godCA9PiB7XHJcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBvYmoucHJvcGVydGllc1t0LmtleV07XHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHQua2V5ICsgXCJfZXhwXCIsIHsgdmFsdWU6IHByb3BWYWx1ZSwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICBoZWFkZXJzLnB1c2goeyBsYWJlbDogdC5sYWJlbCwga2V5OiB0LmtleSArIFwiX2V4cFwiLCBvcmRlcjogdC5vcmRlciwgdHlwZTogdC50eXBlLCBwcm9wS2V5OiBudWxsIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy9UaXJhdGkgZnVvcmkgdHV0dGkgZ2xpIGhlYWRlciBmYWNjaW8gc29ydCBzdWxsJ29yZGluYW1lbnRvXHJcbiAgICByZXR1cm4gaGVhZGVycy5zb3J0KChhLCBiKSA9PiB7IHJldHVybiBhLm9yZGVyIC0gYi5vcmRlciB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdG8gdW4gb2dnZXR0byBnZW5lcmEgZ2xpIGhlYWRlciBwZXIgbCdlc3BvcnRhemlvbmUgZSBsbyBpbnRlZ3JhIGNvbiBsZSBwcm9wcmlldMOgIGVzcG9ydGFiaWxpIGRhbGxhIGxpYnJlcmlhICoqQGN0cmwvbmd4LWNzdioqXHJcbiAgICogXHJcbiAgICogTWV0b2RvIGludGVybm8gcmljaGlhbWF0byBkYSAqKnNldHVwRm9yRXhwb3J0KipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gb2JqIE9nZ2V0dG8gZ2VuZXJpY28gZGEgZXNwb3J0YXJlXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge0NzdkhlYWRlcnNbXX0gSGVhZGVyIGRpIGVzcG9ydGF6aW9uZSBnacOgIG9yZGluYXRpIGNvcnJldHRhbWVudGVcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlQW5kR2V0SGVhZGVycyhvYmo6IGFueSwgY29sdW1uc1NlbGVjdGlvbj86IHsgW2lkOiBzdHJpbmddOiB0cnVlIH0pOiBDc3ZIZWFkZXJzW10ge1xyXG4gICAgdmFyIGhlYWRlcnM6IENzdkhlYWRlcnNbXSA9IFtdO1xyXG5cclxuICAgIC8vIE1pcmFjbGUgaW5jb21pbmdcclxuICAgIGxldCBleHBvcnRQcm9wcyA9IG9ialtleHBvcnRMaXN0XSB8fCBbXTtcclxuICAgIGxldCBsb2MgPSBvYmpbbG9jUHJvcGVydHldID8gdGhpcy5sYy5nZW5lcmF0ZUZyb21UeXBlKG9ialtsb2NQcm9wZXJ0eV0pIDogbnVsbDtcclxuXHJcbiAgICBpZiAoZXhwb3J0UHJvcHMubGVuZ3RoID09IDApXHJcbiAgICAgIGNvbnNvbGUud2FybihcIltAZXNmYWVuemEvZXh0ZW5zaW9uc10gTmVzc3VuYSBjb2xvbm5hIGNvbmZpZ3VyYXRhIGRhIGVzcG9ydGFyZSFcIik7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBvcnRQcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcHJvcCA9IGV4cG9ydFByb3BzW2ldO1xyXG4gICAgICBsZXQgcHJvcEJhc2UgPSBcIlwiO1xyXG4gICAgICBsZXQgdG9DYWxsOiBGdW5jdGlvbjtcclxuICAgICAgaWYgKHByb3AuZW5kc1dpdGgobGlzdENzdkhkclByZWZpeCkpIHtcclxuICAgICAgICBwcm9wQmFzZSA9IHByb3AucmVwbGFjZShsaXN0Q3N2SGRyUHJlZml4LCAnJyk7XHJcbiAgICAgICAgdG9DYWxsID0gdGhpcy5wYXJzZUxpc3QuYmluZCh0aGlzKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChwcm9wLmVuZHNXaXRoKGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXgpKSB7XHJcbiAgICAgICAgcHJvcEJhc2UgPSBwcm9wLnJlcGxhY2UoZGljdGlvbmFyeUNzdkhkclByZWZpeCwgJycpO1xyXG4gICAgICAgIHRvQ2FsbCA9IHRoaXMucGFyc2VEaWN0aW9uYXJ5LmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocHJvcC5lbmRzV2l0aChjc3ZWaXNQcmVmaXgpKSB7XHJcbiAgICAgICAgcHJvcEJhc2UgPSBwcm9wLnJlcGxhY2UoY3N2VmlzUHJlZml4LCAnJyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvYmpbcHJvcEJhc2UgKyBjc3ZWYWx1ZU5hdmlnYXRvcl0gIT09IFwidW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICB0b0NhbGwgPSB0aGlzLnBhcnNlT2JqZWN0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdG9DYWxsID0gdGhpcy5wYXJzZVByb3BlcnR5LmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0b0NhbGwpXHJcbiAgICAgICAgdG9DYWxsKG9iaiwgcHJvcEJhc2UsIGhlYWRlcnMsIGNvbHVtbnNTZWxlY3Rpb24sIGxvYyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR1cCBwZXIgbCdlc3BvcnRhemlvbmUgZGkgdW5hIHNpbmdvbGEgcHJvcHJpZXTDoC4gXHJcbiAgICogVmllbmUgZ2VuZXJhdG8gbCdoZWFkZXIgZSBsYSBwcm9wcmlldMOgIHJlbGF0aXZhIGFsIHZhbG9yZSBmb3JtYXR0YXRvIG8gbm9cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gb2JqIE9nZ2V0dG8gZGkgY3VpIGVzcG9ydGFyZSBsYSBwcm9wcmlldMOgICoqcHJvcCoqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcHJpZXTDoCBkYSBlc3BvcnRhcmVcclxuICAgKiBAcGFyYW0ge0NzdkhlYWRlcnN9IGhlYWRlcnMgQ29udGVuaXRvcmUgZGVnbGkgaGVhZGVyLCB2ZXJyw6AgcmllbXBpdG8gZGEgcXVlc3RhIGZ1bnppb25lIFxyXG4gICAqIEBwYXJhbSB7TG9jYWxpemF0aW9uU2VydmljZX0gbG9jIFNlcnZpemlvIGRpIGxvY2FsaXp6YXppb25lIGNoZSB0cmFkdWNlIHR1dHRpIGkgbm9taSBjaGUgcHXDslxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VQcm9wZXJ0eShvYmo6IGFueSwgcHJvcDogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10sIGNvbHVtbnNTZWxlY3Rpb24/OiB7IFtpZDogc3RyaW5nXTogdHJ1ZSB9LCBsb2M/OiBMb2NhbGl6YXRpb25TZXJ2aWNlKSB7XHJcbiAgICBsZXQgdG9FbWl0OiBib29sZWFuID0gb2JqW3Byb3AgKyBjc3ZWaXNQcmVmaXhdO1xyXG4gICAgbGV0IGZvcm1hdDogc3RyaW5nID0gb2JqW3Byb3AgKyBjc3ZGb3JtYXRQcmVmaXhdO1xyXG4gICAgbGV0IHByb3BLZXkgPSBvYmpbcHJvcCArIGNzdlByb3BLZXldO1xyXG5cclxuICAgIGlmIChwcm9wS2V5ICYmICFjb2x1bW5zU2VsZWN0aW9uW3Byb3BLZXldICYmIE9iamVjdC5rZXlzKGNvbHVtbnNTZWxlY3Rpb24pLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc29sZS5sb2coXCJbQGVzZmFlbnphL2V4dGVuc2lvbnNdIENvbG9ubmEgZGEgbm9uIGVzcG9ydGFyZTogXCIgKyBwcm9wS2V5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0ZXh0ID0gb2JqW3Byb3AgKyBjc3ZIZHJQcmVmaXhdO1xyXG4gICAgbGV0IGxhYmVsID0gbG9jICYmIHRleHQgPyBsb2MubG9jKHRleHQpIDogdGV4dCB8fCBcIlwiO1xyXG4gICAgbGV0IG9yZGVyID0gb2JqW3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG5cclxuICAgIGlmICghdG9FbWl0KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgLy8gU2Ugbm9uIGhvIHVuIGZvcm1hdG8gZXNwb3J0byBkaXJldHRhbWVudGVcclxuICAgIGlmICghZm9ybWF0KSB7XHJcbiAgICAgIC8vIFNlIMOoIHVuIGZvcm1hdG8gZGF0YSBtaSBhc3NpY3VybyBkaSBub24gc3RhbXBhcmUgbWFpIHVuYSBkYXRhIDAwOjAwOjAwIGFsdHJpbWVudGkgaW4gZXNwb3J0YXppb25lIHZpZW5lIHVubyBzY2hpZm9cclxuICAgICAgbGV0IHZhbCA9IG9ialtwcm9wXSA/IHRoaXMuZGF0ZXMudHJpbVNlY29uZHMob2JqW3Byb3BdLnRvU3RyaW5nKCkpIDogXCJcIjtcclxuICAgICAgbGV0IGtleSA9IHByb3AgKyBcIl9ub2ZtdFwiO1xyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbCwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICBoZWFkZXJzLnB1c2goeyBsYWJlbCwga2V5LCBvcmRlciwgdHlwZTogXCJzdHJpbmdcIiwgcHJvcEtleSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBrZXkgPSBwcm9wICsgXCJfZm10XCI7XHJcblxyXG4gICAgICAvLyBDYXNvIGZvcm1hdG8gbnVtZXJpY29cclxuICAgICAgaWYgKGZvcm1hdCA9PSBcIkZcIikge1xyXG4gICAgICAgIC8vIENoZWNrIGNvbnNpZGVyYW5kbyBsYSBwb3NzaWJpbGl0w6AgZGkgemVyaVxyXG4gICAgICAgIGxldCB2YWwgPSBvYmpbcHJvcF0gIT0gbnVsbCA/IG9ialtwcm9wXS50b1N0cmluZygpIDogXCJcIjtcclxuICAgICAgICAvLyBFbGltaW5vIHR1dHRlIGxlIHZpcmdvbGUgKGluZGljYXRvcmkgZGkgbWlnbGlhaWEgcGVyIGxhIGN1bHR1cmUgZGVmYXVsdCBlbi1VUylcclxuICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgvLC8sIFwiXCIpO1xyXG4gICAgICAgIC8vIElsIHNpbmdvbG8gcHVudG8gY2hlIGMnw6gsIHNlIHByZXNlbnRlIChzZXBhcmF0b3JlIGRlY2ltYWxpKSBsbyB0cmFzZm9ybW8gaW4gdmlyZ29sYVxyXG4gICAgICAgIGxldCB2YWxDb252ZXJ0ZWQgPSB2YWwucmVwbGFjZShcIi5cIiwgXCIsXCIpO1xyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbENvbnZlcnRlZCwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsLCBrZXksIG9yZGVyLCB0eXBlOiBcIm51bWJlclwiLCBwcm9wS2V5IH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFNlIGhvIHVuIGZvcm1hdG8gZGF0YSB0cmFzZm9ybW8gaW4gZGF5anMsIGZvcm1hdHRvIGVkIGVzcG9ydG9cclxuICAgICAgICAvLyBQZXIgbGEgdHJhc2Zvcm1hemlvbmUgaW4gZGF5anMgcHJvdm8gcHJpbWEgYSBwYXNzYXJnbGkgbGEgc3RyaW5nYSBkaSBuZXR0bywgc3BlcmFuZG8gbGEgcmljb25vc2NhXHJcbiAgICAgICAgLy8gU2Ugbm9uIGZ1bnppb25hIHByb3ZvIGEgZGVmaW5pcmdsaSBsYSBmb3JtYXR0YXppb25lIHN0YW5kYXJkIGRlbCBtZXRlcmluZyBwZXIgcXVlbCBsaW5ndWFnZ2lvXHJcbiAgICAgICAgbGV0IHZhbCA9IHRoaXMuZGF0ZXMuZ2V0Rm9ybWF0dGVkKG9ialtwcm9wXSwgZm9ybWF0Lmxlbmd0aCA8PSAxMCwgZm9ybWF0Lmxlbmd0aCA+IDE2KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbCA/PyBcIlwiLCB3cml0YWJsZTogZmFsc2UsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWwsIGtleSwgb3JkZXIsIHR5cGU6IFwiZGF0ZVwiLCBwcm9wS2V5IH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR1cCBwZXIgbCdlc3BvcnRhemlvbmUgZGkgdW5hIHNpbmdvbGEgcHJvcHJpZXTDoCBkYSB1biBvZ2dldHRvLiBcclxuICAgKiBWaWVuZSBnZW5lcmF0byBsJ2hlYWRlciBlIGxhIHByb3ByaWV0w6AgcmVsYXRpdmEgYWwgdmFsb3JlIGZvcm1hdHRhdG8gbyBuby4gXHJcbiAgICogXHJcbiAgICogUGVyIG90dGVuZXJlIGlsIHZhbG9yZSBlIGwnaGVhZGVyIGRlbGxhIHByb3ByaWV0w6AgdmVuZ29ubyB1dGlsaXp6YXRpIGkgbmF2aWdhdG9yaSBhdXRvLWdlbmVyYXRpIG5lbCBkZWNvcmF0b3JlICoqRXhwb3J0QXMqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBkaSBjdWkgZXNwb3J0YXJlIGxhIHByb3ByaWV0w6AgKipwcm9wKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wcmlldMOgIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc30gaGVhZGVycyBDb250ZW5pdG9yZSBkZWdsaSBoZWFkZXIsIHZlcnLDoCByaWVtcGl0byBkYSBxdWVzdGEgZnVuemlvbmVcclxuICAgKiBAcGFyYW0ge0xvY2FsaXphdGlvblNlcnZpY2V9IGxvYyBTZXJ2aXppbyBkaSBsb2NhbGl6emF6aW9uZSBjaGUgdHJhZHVjZSB0dXR0aSBpIG5vbWkgY2hlIHB1w7JcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlT2JqZWN0KG9iajogYW55LCBwcm9wOiBzdHJpbmcsIGhlYWRlcnM6IENzdkhlYWRlcnNbXSwgY29sdW1uc1NlbGVjdGlvbj86IHsgW2lkOiBzdHJpbmddOiB0cnVlIH0sIGxvYz86IExvY2FsaXphdGlvblNlcnZpY2UpIHtcclxuICAgIC8vc2UgcXVlc3RhIHByb3ByaWV0w6AgaGEgdW4gbmF2aWdhdG9yIHNpZ25pZmljYSBjaGUgZGVyaXZhIGRhIHVuIG9nZ2V0dG8gaW50ZXJubywgcmVjdXBlcm8gaWwgdmFsb3JlIGluIHF1ZXN0YSBmYXNlIGRhdG8gY2hlIHByaW1hIG5vbiBjZSBsJ2hvXHJcbiAgICBsZXQgdmFsdWVuYXZpZ2F0b3IgPSBvYmpbcHJvcCArIGNzdlZhbHVlTmF2aWdhdG9yXTtcclxuXHJcbiAgICAvL0VzLiBkaSB2YWx1ZW5hdmlnYXRvciBvYmouc3Vib2JqLnN1YnN1Ym9iai5wcm9wZXJ0eVxyXG4gICAgbGV0IGptcHMgPSB2YWx1ZW5hdmlnYXRvci5zcGxpdChcIi5cIik7XHJcblxyXG4gICAgLy8gTG9jYWxpenphemlvbmUgcHJlc2EgZGFsbGEgY2xhc3NlIGJhc2Ugc2UgYyfDqCwgYWx0cmltZW50aSBkYWxsYSBjbGFzc2UgaW50ZXJuYSAoY2lvw6ggZGFsIHByaW1vIHNhbHRpbm8pXHJcbiAgICBpZiAoIWxvYykge1xyXG4gICAgICBsZXQgdHlwZSA9IG9ialtwcm9wICsgY3N2VmFsdWVUeXBlXTtcclxuICAgICAgbGV0IHByb3RvID0gbmV3IHR5cGUoKTtcclxuICAgICAgbG9jID0gcHJvdG9bbG9jUHJvcGVydHldID8gdGhpcy5sYy5nZW5lcmF0ZUZyb21UeXBlKHByb3RvW2xvY1Byb3BlcnR5XSkgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vTWkgY2xvbm8gbCdvZ2dldHRvIG9yaWdpbmFsZSBwZXIgbm9uIHVjY2lkZXJnbGkgaSByaWZlcmltZW50aVxyXG4gICAgbGV0IGNsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICAgIC8vU2FsdG8gcmljb3JzaXZhbWVudGUgc3UgbWUgc3Rlc3NvIHBlciBhcnJpdmFyZSBhbGxhIHByb3ByaWV0w6BcclxuICAgIC8vU2FsdG8gMSA+IGRpdmVudGEgb2JqXHJcbiAgICAvL1NhbHRvIDIgPiBkaXZlbnRhIG9iai5zdWJvYmpcclxuICAgIC8vZWNjLi4uXHJcbiAgICBqbXBzLmZvckVhY2gocHAgPT4geyBjbG9uZSA9IGNsb25lW3BwXTsgfSk7XHJcblxyXG4gICAgLy9WYWxvcmUgZmluYWxlIDpEXHJcbiAgICBsZXQgdmFsdWUgPSBjbG9uZTtcclxuXHJcbiAgICBsZXQgdGV4dCA9IG9ialtwcm9wICsgY3N2SGRyUHJlZml4XTtcclxuICAgIGxldCBsYWJlbCA9IGxvYyAmJiB0ZXh0ID8gbG9jLmxvYyh0ZXh0KSA6IHRleHQgfHwgXCJcIjtcclxuICAgIGxldCBvcmRlciA9IG9ialtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuXHJcbiAgICAvL1NlIHBlciBxdWVzdGEgcHJvcHJpZXTDoCBobyB1biBmb3JtYXRvIGxvIGFwcGxpY29cclxuICAgIGxldCBmb3JtYXQ6IHN0cmluZyA9IG9ialtwcm9wICsgY3N2Rm9ybWF0UHJlZml4XTtcclxuICAgIGxldCB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2RhdGUnID0gXCJzdHJpbmdcIjtcclxuICAgIGlmIChmb3JtYXQgPT0gXCJGXCIpIHtcclxuICAgICAgbGV0IHZhbCA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKC8sLywgXCJcIik7XHJcbiAgICAgIHZhbHVlID0gdmFsLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuICAgICAgdHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3JtYXQpIHtcclxuICAgICAgdmFsdWUgPSB0aGlzLmRhdGVzLmdldEZvcm1hdHRlZCh2YWx1ZSwgZm9ybWF0Lmxlbmd0aCA8PSAxMCwgZm9ybWF0Lmxlbmd0aCA+IDE2KTtcclxuICAgICAgdHlwZSA9IFwiZGF0ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHsgdmFsdWU6IHZhbHVlID8/IFwiXCIsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsLCBrZXk6IHByb3AsIG9yZGVyLCB0eXBlLCBwcm9wS2V5OiBudWxsIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dXAgcGVyIGwnZXNwb3J0YXppb25lIGRpIHVuYSBsaXN0YSBkaSB2YWxvcmkgcGl2b3R0YXRpIGRpbmFtaWNhbWVudGU6XHJcbiAgICogXHJcbiAgICogPT4gUmVjdXBlcm8gaWwgdmFsb3JlIHV0aWxpenphbmRvIGkgbmF2aWdhdG9yaVxyXG4gICAqIFxyXG4gICAqID0+IFJlY3VwZXJvIGwnaGVhZGVyIHV0aWxpenphbmRvIGkgbmF2aWdhdG9yaVxyXG4gICAqIFxyXG4gICAqID0+IENvbiBpbCB2YWxvcmUgY2kgY3JlbyBsYSBwcm9wZXJ0eVxyXG4gICAqIFxyXG4gICAqID0+IENvbiBsJ2hlYWRlciBlIGlsIHJpZmVyaW1lbnRvIGFsbGEgcHJvcGVydHkgYXBwZW5hIGNyZWF0YSBjcmVvIHVuIHJlY29yZCBuZWdsaSBoZWFkZXIgZGEgZXNwb3J0YXJlXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiBPZ2dldHRvIGRpIGN1aSBlc3BvcnRhcmUgbGEgcHJvcHJpZXTDoCAqKnByb3AqKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3ByaWV0w6AgZGEgZXNwb3J0YXJlXHJcbiAgICogQHBhcmFtIHtDc3ZIZWFkZXJzfSBoZWFkZXJzIENvbnRlbml0b3JlIGRlZ2xpIGhlYWRlciwgdmVycsOgIHJpZW1waXRvIGRhIHF1ZXN0YSBmdW56aW9uZSBcclxuICAgKiBAcGFyYW0ge0xvY2FsaXphdGlvblNlcnZpY2V9IGxvYyBTZXJ2aXppbyBkaSBsb2NhbGl6emF6aW9uZSBjaGUgdHJhZHVjZSB0dXR0aSBpIG5vbWkgY2hlIHB1w7JcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlTGlzdChvYmo6IGFueSwgcHJvcDogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10sIGNvbHVtbnNTZWxlY3Rpb24/OiB7IFtpZDogc3RyaW5nXTogdHJ1ZSB9ICwgbG9jPzogTG9jYWxpemF0aW9uU2VydmljZSkge1xyXG4gICAgbGV0IGhlYWRlcm5hdmlnYXRvciA9IG9ialtwcm9wICsgbGlzdENzdkhkclByZWZpeF07XHJcbiAgICBsZXQgdmFsdWVuYXZpZ2F0b3IgPSBvYmpbcHJvcCArIGxpc3RDc3ZWYWxQcmVmaXhdO1xyXG4gICAgbGV0IHZhbHVlZm9ybWF0ID0gb2JqW3Byb3AgKyBsaXN0Q3N2VmFsRm9ybWF0XTtcclxuICAgIGxldCBvcmRlciA9IG9ialtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuXHJcbiAgICB2YXIganVtcHM6IHN0cmluZ1tdLCB0bXBSZXM6IGFueTtcclxuICAgIHZhciBvYmpzOiBhbnlbXSA9IG9ialtwcm9wXTtcclxuXHJcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBvYmpzLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgbGV0IGxpc3RpdGVtID0gb2Jqc1tpZHhdO1xyXG5cclxuICAgICAgdmFyIGhlYWRlcnNwbGl0ID0gaGVhZGVybmF2aWdhdG9yLnNwbGl0KFwiIFwiKTtcclxuICAgICAgdmFyIGxhYmVsID0gXCJcIjtcclxuXHJcbiAgICAgIC8vIFBlciBsJ2hlYWRlciBzaSBjb25zaWRlcmEgYSBzZSBzdGFudGUgb2duaSBwZXp6byBzZXBhcmF0byBkYSBzcGF6aW8gcGVyIGZhcmUgbGUgY29uY2F0ZW5hemlvbmlcclxuICAgICAgaGVhZGVyc3BsaXQuZm9yRWFjaChwciA9PiB7XHJcbiAgICAgICAganVtcHMgPSBwci5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgdG1wUmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsaXN0aXRlbSkpO1xyXG4gICAgICAgIGp1bXBzLmZvckVhY2gocHAgPT4geyB0bXBSZXMgPSB0bXBSZXNbcHBdOyB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFsYWJlbCkgbGFiZWwgPSAhIWxvYyA/IGxvYy5sb2ModG1wUmVzKSA6IHRtcFJlcztcclxuICAgICAgICBlbHNlIGxhYmVsICs9IFwiIFwiICsgISFsb2MgPyBsb2MubG9jKHRtcFJlcykgOiB0bXBSZXM7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAganVtcHMgPSB2YWx1ZW5hdmlnYXRvci5zcGxpdChcIi5cIik7XHJcbiAgICAgIHRtcFJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGlzdGl0ZW0pKTtcclxuICAgICAganVtcHMuZm9yRWFjaChwcCA9PiB7IHRtcFJlcyA9IHRtcFJlc1twcF07IH0pO1xyXG4gICAgICBsZXQgdmFsdWUgPSB0bXBSZXM7XHJcblxyXG4gICAgICBsZXQgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyA9IFwic3RyaW5nXCI7XHJcbiAgICAgIGlmICh2YWx1ZWZvcm1hdCA9PSBcIkZcIikge1xyXG4gICAgICAgIGxldCB2YWwgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUudG9TdHJpbmcoKSA6IFwiXCI7XHJcbiAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoLywvLCBcIlwiKTtcclxuICAgICAgICB2YWx1ZSA9IHZhbC5yZXBsYWNlKFwiLlwiLCBcIixcIik7XHJcbiAgICAgICAgdHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodmFsdWVmb3JtYXQpIHtcclxuICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZXMuZ2V0Rm9ybWF0dGVkKG9ialtwcm9wXSwgdmFsdWVmb3JtYXQubGVuZ3RoIDw9IDEwLCB2YWx1ZWZvcm1hdC5sZW5ndGggPiAxNik7XHJcbiAgICAgICAgdHlwZSA9IFwiZGF0ZVwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wICsgaWR4LCB7IHZhbHVlOiB2YWx1ZSA/PyBcIlwiLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsLCBrZXk6IHByb3AgKyBpZHgsIG9yZGVyOiBvcmRlciArIGlkeCwgdHlwZSwgcHJvcEtleTogbnVsbCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHVwIHBlciBsJ2VzcG9ydGF6aW9uZSBkaSB1bmEgbGlzdGEgZGkgdmFsb3JpIHBpdm90dGF0aSBkaW5hbWljYW1lbnRlOlxyXG4gICAqIFxyXG4gICAqID0+IFJlY3VwZXJvIGlsIHZhbG9yZSB1dGlsaXp6YW5kbyBpIG5hdmlnYXRvcmlcclxuICAgKiBcclxuICAgKiA9PiBSZWN1cGVybyBsJ2hlYWRlciB1dGlsaXp6YW5kbyBpIG5hdmlnYXRvcmlcclxuICAgKiBcclxuICAgKiA9PiBDb24gaWwgdmFsb3JlIGNpIGNyZW8gbGEgcHJvcGVydHlcclxuICAgKiBcclxuICAgKiA9PiBDb24gbCdoZWFkZXIgZSBpbCByaWZlcmltZW50byBhbGxhIHByb3BlcnR5IGFwcGVuYSBjcmVhdGEgY3JlbyB1biByZWNvcmQgbmVnbGkgaGVhZGVyIGRhIGVzcG9ydGFyZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBkaSBjdWkgZXNwb3J0YXJlIGxhIHByb3ByaWV0w6AgKipwcm9wKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wcmlldMOgIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc30gaGVhZGVycyBDb250ZW5pdG9yZSBkZWdsaSBoZWFkZXIsIHZlcnLDoCByaWVtcGl0byBkYSBxdWVzdGEgZnVuemlvbmVcclxuICAgKiBAcGFyYW0ge0xvY2FsaXphdGlvblNlcnZpY2V9IGxvYyBTZXJ2aXppbyBkaSBsb2NhbGl6emF6aW9uZSBjaGUgdHJhZHVjZSB0dXR0aSBpIG5vbWkgY2hlIHB1w7JcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlRGljdGlvbmFyeShvYmo6IGFueSwgcHJvcDogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10sIGNvbHVtbnNTZWxlY3Rpb24/OiB7IFtpZDogc3RyaW5nXTogdHJ1ZSB9ICwgbG9jPzogTG9jYWxpemF0aW9uU2VydmljZSkge1xyXG4gICAgbGV0IGhlYWRlcm5hdmlnYXRvciA9IG9ialtwcm9wICsgZGljdGlvbmFyeUNzdkhkclByZWZpeF07XHJcbiAgICBsZXQgdmFsdWVuYXZpZ2F0b3IgPSBvYmpbcHJvcCArIGRpY3Rpb25hcnlDc3ZWYWxQcmVmaXhdO1xyXG4gICAgbGV0IG9yZGVyID0gb2JqW3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG5cclxuICAgIHZhciBqdW1wczogc3RyaW5nW10sIHRtcFJlczogYW55O1xyXG4gICAgdmFyIG9ianM6IGFueVtdID0gb2JqW3Byb3BdO1xyXG5cclxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IG9ianMubGVuZ3RoOyBpZHgrKykge1xyXG4gICAgICBsZXQgbGlzdGl0ZW0gPSBvYmpzW2lkeF07XHJcbiAgICAgIHZhciBoZWFkZXJzcGxpdCA9IGhlYWRlcm5hdmlnYXRvci5zcGxpdChcIiBcIik7XHJcbiAgICAgIHZhciBsYWJlbCA9IFwiXCI7XHJcblxyXG4gICAgICBoZWFkZXJzcGxpdC5mb3JFYWNoKHByID0+IHtcclxuICAgICAgICBqdW1wcyA9IHByLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICB0bXBSZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGxpc3RpdGVtKSk7XHJcbiAgICAgICAganVtcHMuZm9yRWFjaChwcCA9PiB7IHRtcFJlcyA9IHRtcFJlc1twcF07IH0pO1xyXG5cclxuICAgICAgICBpZiAoIWxhYmVsKSBsYWJlbCA9ICEhbG9jID8gbG9jLmxvYyh0bXBSZXMpIDogdG1wUmVzO1xyXG4gICAgICAgIGVsc2UgbGFiZWwgKz0gXCIgXCIgKyAhIWxvYyA/IGxvYy5sb2ModG1wUmVzKSA6IHRtcFJlcztcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB2YXIgdmFsdWVzcGxpdCA9IHZhbHVlbmF2aWdhdG9yLnNwbGl0KFwiLFwiKTtcclxuICAgICAgdmFsdWVzcGxpdC5mb3JFYWNoKCh0LCBpZHhpbnRlcm5hbCkgPT4ge1xyXG4gICAgICAgIHZhciBuYXZpZyA9IHQuc3BsaXQoXCItXCIpWzFdO1xyXG4gICAgICAgIHZhciBkZXNjID0gdC5zcGxpdChcIi1cIilbMF07XHJcblxyXG4gICAgICAgIGp1bXBzID0gbmF2aWcuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIHRtcFJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGlzdGl0ZW0pKTtcclxuICAgICAgICBqdW1wcy5mb3JFYWNoKHBwID0+IHsgdG1wUmVzID0gdG1wUmVzW3BwXTsgfSk7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdG1wUmVzO1xyXG5cclxuICAgICAgICBsZXQgcHJvcG5hbWUgPSBwcm9wICsgaWR4LnRvU3RyaW5nKCkgKyBpZHhpbnRlcm5hbC50b1N0cmluZygpO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3BuYW1lLCB7IHZhbHVlOiB2YWx1ZSA/PyBcIlwiLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWw6IGxhYmVsICsgXCIgXCIgKyAhIWxvYyA/IGxvYy5sb2MoZGVzYykgOiBkZXNjLCBrZXk6IHByb3BuYW1lLCBvcmRlcjogb3JkZXIgKyBpZHgsIHR5cGU6ICdzdHJpbmcnLCBwcm9wS2V5OiBudWxsIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBcclxuICAgKiBFZmZldHR1YSBsJ2VzcG9ydGF6aW9uZSBpbiBmaWxlIENTViBcclxuICAgKi9cclxuICBwcml2YXRlIGV4cG9ydENTVihmbjogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10sIGRhdGE6IGFueVtdKSB7XHJcbiAgICBsZXQgY3N2RGF0YSA9ICcnLCByb3cgPSAnJywgc2VwID0gJzsnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaCA9IGhlYWRlcnNbaV07XHJcbiAgICAgIHJvdyArPSBgJHtyb3cgIT0gJycgPyBzZXAgOiAnJ31cIiR7aC5sYWJlbH1cImA7XHJcbiAgICB9XHJcbiAgICBjc3ZEYXRhICs9IHJvdyArICdcXHJcXG4nO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICByb3cgPSAnJztcclxuICAgICAgbGV0IGl0ZW0gPSBkYXRhW2ldO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGhlYWRlcnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBsZXQgdmFsID0gaXRlbVtoZWFkZXJzW2pdLmtleV07XHJcbiAgICAgICAgcm93ICs9IGAke3JvdyAhPSAnJyA/IHNlcCA6ICcnfVwiJHt2YWx9XCJgO1xyXG4gICAgICB9XHJcbiAgICAgIGNzdkRhdGEgKz0gcm93ICsgJ1xcclxcbic7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIEJPTSA9IG5ldyBVaW50OEFycmF5KFsweEVGLDB4QkIsMHhCRl0pO1xyXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbQk9NLCBjc3ZEYXRhXSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xyXG4gICAgdmFyIG9iamVjdFVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICB0aGlzLnV0aUV4dHMuZmlsZURvd25sb2FkKG9iamVjdFVybCwgZm4uZW5kc1dpdGgoJy54bHN4JykgPyBmbi5yZXBsYWNlKCcueGxzeCcsICcuY3N2JykgOiBmbi5lbmRzV2l0aCgnLmNzdicpID8gZm4gOiBmbiArIFwiLmNzdlwiKTtcclxuICB9XHJcblxyXG5cclxuICAvKiogQ2FjaGUgZGVsIG1vZHVsbyBwZXIgbCdlc3BvcnRhemlvbmUgRXhjZWwgKi9cclxuICBwcml2YXRlIEV4Y2VsSlM6IGFueTtcclxuXHJcbiAgLyoqIEVmZmV0dHVhIGwnZXNwb3J0YXppb25lIGRlbCBmaWxlIEV4Y2VsIGJhc2FuZG9zaSBzdWwgbW9kdWxvICoqRXhjZWxKUyoqLCBzdWdsaSBoZWFkZXIgKipoZWFkZXJzKiogZSBzdWkgZGF0aSAqKmRhdGEqKiAqL1xyXG4gIHByaXZhdGUgYXN5bmMgZXhwb3J0RXhjZWwoZm46IHN0cmluZywgaGVhZGVyczogQ3N2SGVhZGVyc1tdLCBkYXRhOiBhbnlbXSkge1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuRXhjZWxKUyA9IHRoaXMuRXhjZWxKUyB8fCBhd2FpdCBpbXBvcnQoXCJleGNlbGpzXCIpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2gge1xyXG4gICAgICB0aHJvdyBcIkltcG9zc2liaWxlIGNhcmljYXJlIGxhIGxpYnJlcmlhIHBlciBsJ2VzcG9ydGF6aW9uZSBpbiBFeGNlbFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpRml4ID0gMTtcclxuICAgIGxldCB3b3JrYm9vayA9IG5ldyB0aGlzLkV4Y2VsSlMuV29ya2Jvb2soKTtcclxuICAgIHdvcmtib29rLmNyZWF0b3IgPSBcIkVtYSdzIGJpZyBFcy1UYWJsZVwiO1xyXG4gICAgd29ya2Jvb2suY3JlYXRlZCA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgbGV0IHNoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdEYXRhJyk7XHJcbiAgICBsZXQgaGVhZGVyID0gc2hlZXQuZ2V0Um93KDEpO1xyXG4gICAgaGVhZGVyLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNvcnQoKGE6IENzdkhlYWRlcnMsIGI6IENzdkhlYWRlcnMpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGggPSBoZWFkZXJzW2ldO1xyXG4gICAgICBoZWFkZXIuZ2V0Q2VsbChpICsgaUZpeCkudmFsdWUgPSBoLmxhYmVsO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcm93ID0gc2hlZXQuZ2V0Um93KGkgKyBpRml4ICsgMSk7XHJcbiAgICAgIGxldCBpdGVtID0gZGF0YVtpXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGggPSBoZWFkZXJzW2ldO1xyXG4gICAgICAgIGxldCBjZWxsID0gcm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgICAgIGxldCB2YWwgPSBpdGVtW2gua2V5XTtcclxuXHJcbiAgICAgICAgaWYgKCF2YWwpIHtcclxuICAgICAgICAgIGNlbGwudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKGgudHlwZSkge1xyXG4gICAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICAgIC8vIEV4Y2VsSlMgdmEgZGkgZGVmYXVsdCBpbiBVVEMgcXVpbmRpIHJpc2NoaWVyZWJiZSBkaSB0aXJhcmUgZ2nDuSAyIG9yZSBhZCBvZ25pIGVzcG9ydGF6aW9uZVxyXG4gICAgICAgICAgICAvLyBCaXNvZ25hIGFnZ2l1bmdlcmUgbCd1dGMgb2Zmc2V0IGFsbGEgZGF0YSBhdHR1YWxlXHJcbiAgICAgICAgICAgIGxldCBkYXRlID0gdGhpcy5kYXRlcy5nZXREYXRlQ29udmVydGlvbih2YWwpO1xyXG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgICAgICAgIGxldCBjb3JyZWN0ZWREYXRlID0gZGF0ZS5hZGQoZGF0ZS51dGNPZmZzZXQoKSwgJ21pbnV0ZScpO1xyXG4gICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBjb3JyZWN0ZWREYXRlLnRvRGF0ZSgpO1xyXG4gICAgICAgICAgICAgIGNlbGwubnVtRm10ID0gdmFsLmxlbmd0aCA+IDEwID8gJ2RkL21tL3l5eXkgaDptOnMnIDogJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICAgICAgICBsZXQgY29udmVydGVkID0gcGFyc2VGbG9hdCh2YWwucmVwbGFjZSgnLCcsICcuJykpO1xyXG4gICAgICAgICAgICBjZWxsLnZhbHVlID0gaXNOYU4oY29udmVydGVkKSA/IFwiXCIgOiBjb252ZXJ0ZWQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgY2VsbC52YWx1ZSA9IHZhbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGJ1ZmZlciA9IGF3YWl0IHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcclxuICAgIGxldCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtcIiB9KTtcclxuICAgIGxldCBvYmplY3RVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgdGhpcy51dGlFeHRzLmZpbGVEb3dubG9hZChvYmplY3RVcmwsIGZuLmVuZHNXaXRoKCcuY3N2JykgPyBmbi5yZXBsYWNlKCcuY3N2JywgJy54bHN4JykgOiBmbi5lbmRzV2l0aCgnLnhsc3gnKSA/IGZuIDogZm4gKyBcIi54bHN4XCIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBlZmZldHRpdmFtZW50ZSBnZW5lcmEgZ2xpIGhlYWRlciBlIGkgZGF0aSBwZXIgbCdlc3BvcnRhemlvbmUgY29uICoqbmd4LWNzdioqXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRhIGVzcG9ydGFyZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBleHBvcnQoaXRlbXM6IGFueVtdLCBmb3JtYXQ6ICdDU1YnIHwgJ1hMU1gnLCBmaWxlTmFtZTogc3RyaW5nLCB0eXBlOiBUeXBlPGFueT4sIGNvbHVtbnNGaWx0ZXI/OiBzdHJpbmdbXSwgZ2VuZXJpY0hlYWRlcnM/OiBDc3ZIZWFkZXJzW10pIHtcclxuICAgIHZhciBjcmVhdGVkSXRlbXMgPSBpdGVtcy5tYXAodCA9PiB7XHJcbiAgICAgIGxldCB0bXAgPSBuZXcgdHlwZSgpO1xyXG4gICAgICBmb3IobGV0IHByb3BlcnR5IGluIHQpIHRtcFtwcm9wZXJ0eV0gPSB0W3Byb3BlcnR5XTtcclxuICAgICAgcmV0dXJuIHRtcDtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBoZWFkZXJzID0gZ2VuZXJpY0hlYWRlcnMgPyB0aGlzLnNldHVwRm9yR2VuZXJpY0V4cG9ydChjcmVhdGVkSXRlbXMsIGdlbmVyaWNIZWFkZXJzKSA6IHRoaXMuc2V0dXBGb3JFeHBvcnQoY3JlYXRlZEl0ZW1zLCBjb2x1bW5zRmlsdGVyKTtcclxuICAgIChmb3JtYXQgPT0gXCJDU1ZcIiA/IHRoaXMuZXhwb3J0Q1NWIDogdGhpcy5leHBvcnRFeGNlbCkuYmluZCh0aGlzKShmaWxlTmFtZSwgaGVhZGVycywgY3JlYXRlZEl0ZW1zKTtcclxuICB9XHJcbn0iXX0=
@@ -1029,7 +1029,7 @@ class ExportService {
1029
1029
  * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione
1030
1030
  * @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può
1031
1031
  */
1032
- parseList(obj, prop, headers, loc) {
1032
+ parseList(obj, prop, headers, columnsSelection, loc) {
1033
1033
  let headernavigator = obj[prop + listCsvHdrPrefix];
1034
1034
  let valuenavigator = obj[prop + listCsvValPrefix];
1035
1035
  let valueformat = obj[prop + listCsvValFormat];
@@ -1085,7 +1085,7 @@ class ExportService {
1085
1085
  * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione
1086
1086
  * @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può
1087
1087
  */
1088
- parseDictionary(obj, prop, headers, loc) {
1088
+ parseDictionary(obj, prop, headers, columnsSelection, loc) {
1089
1089
  let headernavigator = obj[prop + dictionaryCsvHdrPrefix];
1090
1090
  let valuenavigator = obj[prop + dictionaryCsvValPrefix];
1091
1091
  let order = obj[prop + csvOrdPrefix];