@esfaenza/extensions 15.2.19 → 15.2.20

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.
@@ -377,7 +377,7 @@ export class ExportService {
377
377
  * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione
378
378
  * @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può
379
379
  */
380
- parseObject(obj, prop, headers, loc) {
380
+ parseObject(obj, prop, headers, columnsSelection, loc) {
381
381
  //se questa proprietà ha un navigator significa che deriva da un oggetto interno, recupero il valore in questa fase dato che prima non ce l'ho
382
382
  let valuenavigator = obj[prop + csvValueNavigator];
383
383
  //Es. di valuenavigator obj.subobj.subsubobj.property
@@ -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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QUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNwRyxDQUFDOzswR0F6ZlUsYUFBYTs4R0FBYixhQUFhLGNBREEsTUFBTTsyRkFDbkIsYUFBYTtrQkFEekIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gRXNmYWVuemFcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuXHJcbmltcG9ydCB7IGV4cG9ydExpc3QsIGNzdkZvcm1hdFByZWZpeCwgY3N2SGRyUHJlZml4LCBjc3ZPcmRQcmVmaXgsIGNzdlZhbHVlTmF2aWdhdG9yLCBjc3ZWaXNQcmVmaXgsIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXgsIGRpY3Rpb25hcnlDc3ZWYWxQcmVmaXgsIGxpc3RDc3ZIZHJQcmVmaXgsIGxpc3RDc3ZWYWxGb3JtYXQsIGxpc3RDc3ZWYWxQcmVmaXgsIGNzdlByb3BLZXksIGxvY1Byb3BlcnR5LCBjc3ZWYWx1ZVR5cGUgfSBmcm9tIFwiLi4vbW9kZWxzL0V4cG9ydENvbnN0c1wiO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gJy4vZXh0ZW5zaW9ucy5kYXRlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tIFwiLi9leHRlbnNpb25zLnV0aWxpdGllcy5zZXJ2aWNlXCI7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IENzdkhlYWRlcnMgfSBmcm9tIFwiLi4vbW9kZWxzL0NzdkhlYWRlcnNcIjtcclxuaW1wb3J0IHsgR2VuZXJpY0l0ZW0gfSBmcm9tIFwiLi4vbW9kZWxzL0dlbmVyaWNJdGVtXCI7XHJcblxyXG4vKipcclxuICogRGVjb3JhdG9yZSBjaGUgZm9ybmlzY2UgbGEgY2xhc3NlIGRpIGxvY2FsaXp6YXppb25lIHBlciB0dXR0ZSBsZSBwcm9wcmlldMOgIGVzcG9ydGF0ZSBjb24gQEV4cG9ydCBlIHF1YWxzaWFzaSBhbHRybyB0YWcgY2hlIHJpY2hpZWRhIGxvY2FsaXp6YXppb25pLlxyXG4gKiBcclxuICogU29zdGFuemlsYW1lbnRlIGFnZ2l1bmdlIGxhIHByb3ByaWV0w6AgKipfX2xvY19fKiogYWxsJ29nZ2V0dG8gY3JlYXRvIGRhbGxhIGNsYXNzZSBjb3JyZW50ZSBhc3NlZ25hbmRvZ2xpIGNvbWUgdmFsb3JlIGlsIHRpcG8gZGVsIExvY2FsaXphdGlvblNlcnZpY2UgZGEgdXNhcmUgcGVyIGxhIHRyYWR1emlvbmVcclxuICogXHJcbiAqIEBwYXJhbSB7VHlwZTxMb2NhbGl6YXRpb25TZXJ2aWNlPn0gbG9jIFRpcG8gZXJlZGl0YXRvIGRhbCBMb2NhbGl6YXRpb25TZXJ2aWNlIGNoZSBwdcOyIGVzc2VyZSBjcmVhdG8gYSBydW50aW1lIHNvdHRvIGNvbnRlc3RvIGRlbGxhIERJIGRpIEFuZ3VsYXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFeHBvcnRMb2NhbGl6YXRpb24obG9jOiBUeXBlPExvY2FsaXphdGlvblNlcnZpY2U+KSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGludGVncmF0ZUxvYzxUIGV4dGVuZHMgeyBuZXcoLi4uYXJnczogYW55W10pOiB7fSB9Pihjb25zdHJ1Y3RvcjogVCkge1xyXG4gICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgY29uc3RydWN0b3IgeyBfX2xvY19fID0gbG9jOyB9O1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERlY29yYXRvcmUgZGkgZXNwb3J0YXppb25lIHV0aWxpenphYmlsZSBzdSB1bmEgcHJvcHJpZXTDoCBzaW5nb2xhLiBcclxuICogVmVycmFubm8gZ2VuZXJhdGUgMyBwcm9wcmlldMOgIGNoZSBnZXN0aXJhbm5vIGwnZXNwb3J0YXppb25lOiAocHJvcCwgcHJvcF9jc3Z2aXMsIHByb3BfY3N2aGRyKS4gXHJcbiAqIFxyXG4gKiBBZCBlc2VtcGlvLCBkYSBxdWVzdGEgY29uZmlndXJhemlvbmU6XHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBcclxuICogQEV4cG9ydCh0cnVlLCBcIk15SGVhZGVyXCIpXHJcbiAqIGNpYW86IHN0cmluZztcclxuICogYGBgXHJcbiAqIFxyXG4gKiBOYXNjZXJhbm5vIGxlIHNlZ3VlbnRpIHByb3ByaWV0w6AgbmVsbCdvZ2dldHRvIGVzcG9ydGFiaWxlOlxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogYGBgXHJcbiAqIGNpYW9fY3N2dmlzOiBzdHJpbmc7ID0+IHRydWVcclxuICogY2lhbzogc3RyaW5nO1xyXG4gKiBjaWFvX2Nzdmhkcjogc3RyaW5nID0+IFwiTXlIZWFkZXJcIlxyXG4gKiBgYGBcclxuICogXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcmRlciBPcmRpbmUgZGkgZXNwb3J0YXppb25lLiBQacO5IHBpY2NvbG8gw6gsIHByaW1hIGFwcGFyZSBpbCB2YWxvcmVcclxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlciBUaXRvbG8gZGVsbGEgY29sb25uYSBuZWwgZmlsZSBDU1YgZXNwb3J0YXRvXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgRm9ybWF0byBkaSBlc3BvcnRhemlvbmUuIFB1w7IgZXNzZXJlIHVuIGZvcm1hdG8gZGF0YSBwZXIgaSBjYW1waSBkYXRhIG8gJ0YnIHBlciBpIGNhbXBpIGZsb2F0aW5nIHBvaW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXhwb3J0ID0gKG9yZGVyOiBudW1iZXIsIGhlYWRlcjogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyA9IG51bGwsIHRhYmxlaWQ6IHN0cmluZyA9IG51bGwpID0+XHJcbiAgKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAoZm9ybWF0KVxyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGNzdkZvcm1hdFByZWZpeCwgeyB2YWx1ZTogZm9ybWF0LCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGNzdk9yZFByZWZpeCwgeyB2YWx1ZTogb3JkZXIsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2VmlzUHJlZml4LCB7IHZhbHVlOiAhIWhlYWRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZIZHJQcmVmaXgsIHsgdmFsdWU6IGhlYWRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgaWYgKHRhYmxlaWQpXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2UHJvcEtleSwgeyB2YWx1ZTogdGFibGVpZCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgIGlmICh0YXJnZXRbZXhwb3J0TGlzdF0pXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XS5wdXNoKHByb3BlcnR5S2V5ICsgY3N2VmlzUHJlZml4KTtcclxuICAgIGVsc2VcclxuICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdID0gW3Byb3BlcnR5S2V5ICsgY3N2VmlzUHJlZml4XVxyXG4gIH07XHJcblxyXG4vKipcclxuICogRGVjb3JhdG9yZSBkaSBlc3BvcnRhemlvbmUgdXRpbGl6emFiaWxlIHN1IHVuIG9nZ2V0dG8uIFxyXG4gKiBQZXIgb2duaSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byB2ZXJyYW5ubyBnZW5lcmF0ZSAzIHByb3ByaWV0w6AgY2hlIGdlc3RpcmFubm8gbCdlc3BvcnRhemlvbmU6IChwcm9wLCBwcm9wX2NzdnZpcywgcHJvcF9jc3ZoZHIpLiBcclxuICogUGVyIGVzc2VyZSBlc3BvcnRhdGUsIGxlIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIGRldm9ubyBlc3NlcmUgbWFyY2F0ZSBjb24gaSBEZWNvcmF0b3JpIGRpIGVzcG9ydGF6aW9uZVxyXG4gKiBcclxuICogQWQgZXNlbXBpbywgZGEgcXVlc3RhIGNvbmZpZ3VyYXppb25lOlxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogYGBgXHJcbiAqIE15T2JqIHtcclxuICogICAgIEBFeHBvcnQodHJ1ZSwgXCJNeUhlYWRlclwiKVxyXG4gKiAgICAgY2lhbzogc3RyaW5nO1xyXG4gKiB9XHJcbiAqIFxyXG4gKiBARXhwb3J0T2JqZWN0KHRydWUsIFwiTXlIZWFkZXJcIilcclxuICogdGVzdDogTXlPYmo7IFxyXG4gKiBgYGBcclxuICogXHJcbiAqIE5hc2NlcmFubm8gbGUgc2VndWVudGkgcHJvcHJpZXTDoCBuZWxsJ29nZ2V0dG8gZXNwb3J0YWJpbGU6XHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBcclxuICogdGVzdGNpYW86IHN0cmluZzsgPT4gVmFsb3JlIGRpIE15T2JqLmNpYW9cclxuICogdGVzdGNpYW9fY3N2dmlzOiBzdHJpbmc7ID0+IHRydWVcclxuICogdGVzdGNpYW9fY3N2aGRyOiBzdHJpbmcgPT4gXCJNeUhlYWRlclwiIFxyXG4gKiBgYGBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IG9yZGVyIE9yZGluZSBkaSBlc3BvcnRhemlvbmUuIFBpw7kgcGljY29sbyDDqCwgcHJpbWEgYXBwYXJlIGlsIHZhbG9yZVxyXG4gKiBAcGFyYW0ge2FueX0gdHlwZSBUaXBvIGRhIGVzcG9ydGFyZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEV4cG9ydEFzID0gKG9yZGVyOiBudW1iZXIsIHR5cGU6IGFueSwgcHJlZml4Pzogc3RyaW5nKSA9PlxyXG4gICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgdmFyIHQgPSBuZXcgdHlwZSgpO1xyXG4gICAgdmFyIHByb3BzID0gdFtleHBvcnRMaXN0XTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHByb3AgPSBwcm9wc1tpXS5yZXBsYWNlKGNzdlZpc1ByZWZpeCwgJycpO1xyXG4gICAgICBpZiAodHlwZW9mIHRbcHJvcCArIGNzdlZpc1ByZWZpeF0gIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICB2YXIgdG9FbWl0OiBib29sZWFuID0gdFtwcm9wICsgY3N2VmlzUHJlZml4XTtcclxuICAgICAgICB2YXIgbGJsID0gdFtwcm9wICsgY3N2SGRyUHJlZml4XTtcclxuICAgICAgICB2YXIgZm9ybWF0ID0gdFtwcm9wICsgY3N2Rm9ybWF0UHJlZml4XTtcclxuICAgICAgICB2YXIgb3JkZXJQcm9wID0gdFtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuICAgICAgICBpZiAoZm9ybWF0KVxyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBwcm9wICsgY3N2Rm9ybWF0UHJlZml4LCB7IHZhbHVlOiBmb3JtYXQsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBwcm9wICsgY3N2T3JkUHJlZml4LCB7IHZhbHVlOiBvcmRlclByb3AgKyBvcmRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgcHJvcCwgeyB2YWx1ZTogbnVsbCwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBwcm9wICsgY3N2VmFsdWVOYXZpZ2F0b3IsIHsgdmFsdWU6IHByb3BlcnR5S2V5ICsgXCIuXCIgKyBwcm9wLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBwcm9wICsgY3N2VmlzUHJlZml4LCB7IHZhbHVlOiB0b0VtaXQsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZIZHJQcmVmaXgsIHsgdmFsdWU6IChwcmVmaXggPyBwcmVmaXggKyAnICcgOiAnJykgKyBsYmwsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZWYWx1ZVR5cGUsIHsgdmFsdWU6IHR5cGUsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRhcmdldFtleHBvcnRMaXN0XSlcclxuICAgICAgICAgIHRhcmdldFtleHBvcnRMaXN0XS5wdXNoKHByb3BlcnR5S2V5ICsgcHJvcCArIGNzdlZpc1ByZWZpeCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdID0gW3Byb3BlcnR5S2V5ICsgcHJvcCArIGNzdlZpc1ByZWZpeF1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4vKipcclxuICogRGVjb3JhdG9yZSBkaSBlc3BvcnRhemlvbmUgdXRpbGl6emFiaWxlIHN1IHVuYSBsaXN0YSwgXHJcbiAqIHNpIHV0aWxpenphbm8gMiBuYXZpZ2F0b3IgcmlzcGV0dGl2YW1lbnRlIHBlciBsYSB2YWxvcml6emF6aW9uZSBkZWxsJ0hlYWRlciBlIGRlbCBWYWxvcmUgZSBcclxuICogcGVyIG9nbmkgZWxlbWVudG8gZGVsbCdhcnJheSB2ZXJyYW5ubyBnZW5lcmF0ZSAzIHByb3ByaWV0w6AgY2hlIGdlc3RpcmFubm8gbCdlc3BvcnRhemlvbmU6IChwcm9wLCBwcm9wX2NzdnZpcywgcHJvcF9jc3ZoZHIpXHJcbiAqIFxyXG4gKiBBVFRFTlpJT05FOiBHbGkgb2dnZXR0aSBlc3BvcnRhdGkgaW4gcXVlc3RhIG1vZGFsaXTDoCBub24gZGV2b25vIHByZXNlbnRhcmUgYWx0cmkgdGFnIGRpIHRpcG8gQEV4cG9ydHsuLi59IGFsbCdpbnRlcm5vLiBGYSB0dXR0byBxdWVzdG8gZGVjb3JhdG9yZVxyXG4gKiBcclxuICogSSBuYXZpZ2F0b3IgaGFubm8gcXVlc3RhIGNvbnZlbnppb25lOlxyXG4gKiBcclxuICogLiAtLT4gZGl2aWRlIGR1ZSBwcm9wcmlldMOgIGRhIHJpY2hpYW1hcmUgY29uc2VjdXRpdmFtZW50ZTogXCJhLmJcIiByaWNoaWFtZXLDoCBcIm9iai5hLmJcIjtcclxuICogXHJcbiAqIHwgLS0+IGRpdmlkZSBwacO5IHByb3ByaWV0w6AgcGVyIGxlIGNvbmNhdGVuYXppb25pIGNvbiB1bm8gc3BhemlvIGZyYSB1bmEgZSBsJ2FsdHJhOiBcInJlZ2Rlc2N8c2xpY2Uuc2xpY2VuYW1lXCIgZGl2ZW50ZXLDoCBvYmoucmVnZGVzYyArIFwiIFwiICsgb2JqLnNsaWNlLnNsaWNlbmFtZVxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IG9yZGVyIE9yZGluZSBkaSBlc3BvcnRhemlvbmUuIFBpw7kgcGljY29sbyDDqCwgcHJpbWEgYXBwYXJlIGlsIHZhbG9yZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVybmF2aWdhdG9yIE5hdmlnYXRvciBjb2wgY29tcGl0byBkaSBzZWxlemlvbmFyZSBpbCB0aXRvbG8gcGVyIGxhIGNvbG9ubmFcclxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlbmF2aWdhdG9yIE5hdmlnYXRvciBjb2wgY29tcGl0byBkaSBzZWxlemlvbmFyZSBpbCB2YWxvcmUgcGVyIGxhIGNvbG9ubmFcclxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlZm9ybWF0IEZvcm1hdG8gZGkgZXNwb3J0YXppb25lIHBlciBpIHZhbG9yaSBzZWxlemlvbmF0aSBkYWwgKip2YWx1ZW5hdmlnYXRvcioqLiBQdcOyIGVzc2VyZSB1biBmb3JtYXRvIGRhdGEgcGVyIGkgY2FtcGkgZGF0YSBvICdGJyBwZXIgaSBjYW1waSBmbG9hdGluZyBwb2ludFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEV4cG9ydExpc3QgPSAob3JkZXI6IG51bWJlciwgaGVhZGVybmF2aWdhdG9yOiBzdHJpbmcsIHZhbHVlbmF2aWdhdG9yOiBzdHJpbmcsIHZhbHVlZm9ybWF0OiBzdHJpbmcgPSBudWxsKSA9PlxyXG4gICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZPcmRQcmVmaXgsIHsgdmFsdWU6IG9yZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGxpc3RDc3ZWYWxQcmVmaXgsIHsgdmFsdWU6IHZhbHVlbmF2aWdhdG9yLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGxpc3RDc3ZIZHJQcmVmaXgsIHsgdmFsdWU6IGhlYWRlcm5hdmlnYXRvciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBsaXN0Q3N2VmFsRm9ybWF0LCB7IHZhbHVlOiB2YWx1ZWZvcm1hdCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgIGlmICh0YXJnZXRbZXhwb3J0TGlzdF0pXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XS5wdXNoKHByb3BlcnR5S2V5ICsgbGlzdENzdkhkclByZWZpeCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XSA9IFtwcm9wZXJ0eUtleSArIGxpc3RDc3ZIZHJQcmVmaXhdXHJcbiAgfTtcclxuXHJcbi8qKlxyXG4gKiBEZWNvcmF0b3JlIGRpIGVzcG9ydGF6aW9uZSB1dGlsaXp6YWJpbGUgc3UgdW4gZGl6aW9uYXJpby4gU2UgYWQgZXNlbXBpbyBzaSB2b2dsaW9ubyBnZW5lcmFyZSBsZSBjb2xvbm5lXHJcbiAqIFxyXG4gKiBWYWxvcmUgQSA9IDFcclxuICogXHJcbiAqIFZhbG9yZSBCID0gMlxyXG4gKiBcclxuICogVmFsb3JlIEMgPSAzXHJcbiAqIFxyXG4gKiBwYXJ0ZW5kbyBkYSB1biBvZ2dldHRvIGluaXppYWxlIHsgVmFsb3JlIHsgQTogMSwgQjogMiwgQzogMyB9IH1cclxuICogXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcmRlciBPcmRpbmUgZGkgZXNwb3J0YXppb25lLiBQacO5IHBpY2NvbG8gw6gsIHByaW1hIGFwcGFyZSBpbCB2YWxvcmVcclxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlcm5hdmlnYXRvciBOYXZpZ2F0b3IgY29sIGNvbXBpdG8gZGkgc2VsZXppb25hcmUgaWwgdGl0b2xvIHBlciBsYSBjb2xvbm5hXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZW5hdmlnYXRvciBOYXZpZ2F0b3IgY29sIGNvbXBpdG8gZGkgc2VsZXppb25hcmUgaWwgdmFsb3JlIHBlciBsYSBjb2xvbm5hXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXhwb3J0RGljdGlvbmFyeSA9IChvcmRlcjogbnVtYmVyLCBoZWFkZXJuYXZpZ2F0b3I6IHN0cmluZywgdmFsdWVuYXZpZ2F0b3I6IHN0cmluZykgPT5cclxuICAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2T3JkUHJlZml4LCB7IHZhbHVlOiBvcmRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBkaWN0aW9uYXJ5Q3N2VmFsUHJlZml4LCB7IHZhbHVlOiB2YWx1ZW5hdmlnYXRvciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBkaWN0aW9uYXJ5Q3N2SGRyUHJlZml4LCB7IHZhbHVlOiBoZWFkZXJuYXZpZ2F0b3IsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuXHJcbiAgICBpZiAodGFyZ2V0W2V4cG9ydExpc3RdKVxyXG4gICAgICB0YXJnZXRbZXhwb3J0TGlzdF0ucHVzaChwcm9wZXJ0eUtleSArIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXgpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0YXJnZXRbZXhwb3J0TGlzdF0gPSBbcHJvcGVydHlLZXkgKyBkaWN0aW9uYXJ5Q3N2SGRyUHJlZml4XVxyXG4gIH07XHJcblxyXG4vKipcclxuICogU2VydmljZSBjaGUgc2kgb2NjdXBhIGRlbGwnZXNwb3J0YXppb25lIGRlZ2xpIG9nZ2V0dGkgbWFyY2F0aSBkYWkgRGVjb3JhdG9yaSAqKkV4cG9ydERpY3Rpb25hcnkqKiwgKipFeHBvcnRMaXN0KiosICoqRXhwb3J0QXMqKiBvICoqRXhwb3J0KipcclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcclxuZXhwb3J0IGNsYXNzIEV4cG9ydFNlcnZpY2Uge1xyXG5cclxuICAvKipcclxuICAgKiBDb3N0cnV0dG9yZVxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlczogRGF0ZVNlcnZpY2UsIHByaXZhdGUgdXRpRXh0czogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgbGM6IExvY2FsaXphdGlvblNlcnZpY2UpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRhIHVuYSBsaXN0YSBkaSBvZ2dldHRpIGdlbmVyYSBnbGkgaGVhZGVyIHBlciBsJ2VzcG9ydGF6aW9uZSBlIGludGVncmEgb2duaSBvZ2dldHRvIGNvbiBsZSBwcm9wcmlldMOgIGVzcG9ydGFiaWxpIGRhbGxhIGxpYnJlcmlhICoqQGN0cmwvbmd4LWNzdioqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnlbXX0gb2JqcyBPZ2dldHRpIGRhIGVzcG9ydGFyZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtDc3ZIZWFkZXJzW119IEhlYWRlciBkaSBlc3BvcnRhemlvbmUgZ2nDoCBvcmRpbmF0aSBjb3JyZXR0YW1lbnRlXHJcbiAgICovXHJcbiAgcHVibGljIHNldHVwRm9yRXhwb3J0KG9ianM6IGFueVtdLCBjb2x1bW5zOiBzdHJpbmdbXSA9IFtdKTogQ3N2SGVhZGVyc1tdIHtcclxuICAgIGxldCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10gPSBbXTtcclxuICAgIGxldCBoZWFkZXJzQ2FjaGUgPSB7fTtcclxuXHJcbiAgICBpZiAoIW9ianMgfHwgb2Jqcy5sZW5ndGggPT0gMClcclxuICAgICAgcmV0dXJuIGhlYWRlcnM7XHJcblxyXG4gICAgLy8gRGV2byBwZXIgZm9yemEgZmFybG8gcGVyIHR1dHRpIGdsaSBvZ2dldHRpIGRhdG8gY2hlIGRldm8gZXNwb3JyZSBsZSBwcm9wcmlldMOgIGNoZSBtaSBzZXJ2b25vIGRhIGVzcG9ydGFyZVxyXG4gICAgLy8gR2xpIGhlYWRlciBsaSByYWNjb2xnbyB0dXR0aSBwb2kgZmFjY2lvIHVhbiBkaXN0aW5jdCBpbiBtb2RvIGRhIGVzcG9ydGFyZSB0dXR0ZSBsZSBwcm9wcmlldMOgIHBlciBiZW5lXHJcbiAgICBsZXQgY29sdW1uU2VsZWN0aW9uRGljdGlvbmFyeTogeyBbaWQ6IHN0cmluZ106IHRydWUgfSA9IHt9O1xyXG5cclxuICAgIGlmIChjb2x1bW5zPy5sZW5ndGggPiAwKVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnM/Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGNvbHVtblNlbGVjdGlvbkRpY3Rpb25hcnlbY29sdW1uc1tpXV0gPSB0cnVlO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Jqcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaGRzID0gdGhpcy5wYXJzZUFuZEdldEhlYWRlcnMob2Jqc1tpXSwgY29sdW1uU2VsZWN0aW9uRGljdGlvbmFyeSk7XHJcbiAgICAgIC8vIEFnZ2l1bmdvIGdsaSBoZWFkZXIgZmFjZW5kbyBpbiBtb2RvIGRpIG5vbiBhZ2dpdW5nZXJuZSBtYWkgZHVlIHVndWFsaSBwZXIgbm9uIGRvdmVyIGZhcmUgdW5hIGRpc3RpbmN0IGRvcG9cclxuICAgICAgLy8gY2hlIGNvc3RlcmViYmUgY29tdW5xdWUgcmlzb3JzZS4gVXRpbGl6em8gdW4gZGl6aW9uYXJpbyBkJ2FwcG9nZ2lvIHBlciBsb29rdXAgaXN0YW50YW5laVxyXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IGhkcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgIGlmICghaGVhZGVyc0NhY2hlW2hkc1trXS5rZXldKSB7XHJcbiAgICAgICAgICBoZWFkZXJzQ2FjaGVbaGRzW2tdLmtleV0gPSB0cnVlO1xyXG4gICAgICAgICAgaGVhZGVycy5wdXNoKGhkc1trXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb2x1bW5zIHx8IGNvbHVtbnMubGVuZ3RoID09IDApXHJcbiAgICAgIHJldHVybiBoZWFkZXJzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBTZSBtaSBhcnJpdmEgbGEgbGlzdGEgZGkgY29sb25uZSBub24gbWkgZMOgIHNvbG8gbGEgdmlzaWJpbGl0w6AsIG1hIGFuY2hlIGwnb3JkaW5hbWVudG9cclxuICAgICAgLy8gbGUgZXNwb3J0byBkaSBjb25zZWd1ZW56YVxyXG4gICAgICBsZXQgb3JkZXJlZEhlYWRlcnMgPSBbXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHRoaXNJZCA9IGNvbHVtbnNbaV07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaGVhZGVyc1tpXS5wcm9wS2V5ID09IHRoaXNJZCkge1xyXG4gICAgICAgICAgICBvcmRlcmVkSGVhZGVycy5wdXNoKGhlYWRlcnNbaV0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9yZGVyZWRIZWFkZXJzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0YSB1bmEgbGlzdGEgZGkgb2dnZXR0aSBnZW5lcmljaSBnZW5lcmEgZ2xpIGhlYWRlciBwZXIgbCdlc3BvcnRhemlvbmUgZSBpbnRlZ3JhIG9nbmkgb2dnZXR0byBjb24gbGUgcHJvcHJpZXTDoCBlc3BvcnRhYmlsaSBkYWxsYSBsaWJyZXJpYSAqKkBjdHJsL25neC1jc3YqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7R2VuZXJpY0l0ZW1bXX0gb2JqcyBPZ2dldHRpIGdlbmVyaWNpIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc1tdfSBjb2x1bW5zIENvbG9ubmUgcmljaGllc3RlIGRhbGwnZXNwb3J0YXppb25lXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge0NzdkhlYWRlcnNbXX0gSGVhZGVyIGRpIGVzcG9ydGF6aW9uZSBnacOgIG9yZGluYXRpIGNvcnJldHRhbWVudGVcclxuICAgKi9cclxuICBwdWJsaWMgc2V0dXBGb3JHZW5lcmljRXhwb3J0KG9ianM6IEdlbmVyaWNJdGVtW10sIGNvbHVtbnM6IENzdkhlYWRlcnNbXSk6IENzdkhlYWRlcnNbXSB7XHJcbiAgICBsZXQgaGVhZGVyczogQ3N2SGVhZGVyc1tdID0gW107XHJcbiAgICBpZiAoIW9ianMgfHwgb2Jqcy5sZW5ndGggPT0gMClcclxuICAgICAgcmV0dXJuIGhlYWRlcnM7XHJcblxyXG4gICAgLy8gRGV2byBwZXIgZm9yemEgZmFybG8gcGVyIHR1dHRpIGdsaSBvZ2dldHRpIGRhdG8gY2hlIGRldm8gZXNwb3JyZSBsZSBwcm9wcmlldMOgIGNoZSBtaSBzZXJ2b25vIGRhIGVzcG9ydGFyZVxyXG4gICAgb2Jqcy5mb3JFYWNoKChvYmosIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpbmRleCA9PSAwKVxyXG4gICAgICAgIGhlYWRlcnMgPSB0aGlzLnBhcnNlQW5kR2V0R2VuZXJpY0hlYWRlcnMob2JqLCBjb2x1bW5zKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMucGFyc2VBbmRHZXRHZW5lcmljSGVhZGVycyhvYmosIGNvbHVtbnMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRvIHVuIG9nZ2V0dG8gZ2VuZXJpY28gZ2VuZXJhIGdsaSBoZWFkZXIgcGVyIGwnZXNwb3J0YXppb25lIGUgbG8gaW50ZWdyYSBjb24gbGUgcHJvcHJpZXTDoCBlc3BvcnRhYmlsaSBkYWxsYSBsaWJyZXJpYSAqKkBjdHJsL25neC1jc3YqKlxyXG4gICAqIFxyXG4gICAqIE1ldG9kbyBpbnRlcm5vIHJpY2hpYW1hdG8gZGEgKipzZXR1cEZvckdlbmVyaWNFeHBvcnQqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7R2VuZXJpY0l0ZW19IG9iaiBPZ2dldHRvIGdlbmVyaWNvIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2Q29sdW1uW119IGNvbHVtbnMgQ29sb25uZSByaWNoaWVzdGUgZGFsbCdlc3BvcnRhemlvbmVcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Q3N2SGVhZGVyc1tdfSBIZWFkZXIgZGkgZXNwb3J0YXppb25lIGdpw6Agb3JkaW5hdGkgY29ycmV0dGFtZW50ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VBbmRHZXRHZW5lcmljSGVhZGVycyhvYmo6IEdlbmVyaWNJdGVtLCBjb2x1bW5zOiBDc3ZIZWFkZXJzW10pOiBDc3ZIZWFkZXJzW10ge1xyXG4gICAgaWYgKCFvYmoucHJvcGVydGllcylcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgdmFyIGhlYWRlcnM6IENzdkhlYWRlcnNbXSA9IFtdO1xyXG5cclxuICAgIC8vTWlyYWNsZSBpbmNvbWluZ1xyXG4gICAgY29sdW1ucy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICB2YXIgcHJvcFZhbHVlID0gb2JqLnByb3BlcnRpZXNbdC5rZXldO1xyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCB0LmtleSArIFwiX2V4cFwiLCB7IHZhbHVlOiBwcm9wVmFsdWUsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWw6IHQubGFiZWwsIGtleTogdC5rZXkgKyBcIl9leHBcIiwgb3JkZXI6IHQub3JkZXIsIHR5cGU6IHQudHlwZSwgcHJvcEtleTogbnVsbCB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vVGlyYXRpIGZ1b3JpIHR1dHRpIGdsaSBoZWFkZXIgZmFjY2lvIHNvcnQgc3VsbCdvcmRpbmFtZW50b1xyXG4gICAgcmV0dXJuIGhlYWRlcnMuc29ydCgoYSwgYikgPT4geyByZXR1cm4gYS5vcmRlciAtIGIub3JkZXIgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRvIHVuIG9nZ2V0dG8gZ2VuZXJhIGdsaSBoZWFkZXIgcGVyIGwnZXNwb3J0YXppb25lIGUgbG8gaW50ZWdyYSBjb24gbGUgcHJvcHJpZXTDoCBlc3BvcnRhYmlsaSBkYWxsYSBsaWJyZXJpYSAqKkBjdHJsL25neC1jc3YqKlxyXG4gICAqIFxyXG4gICAqIE1ldG9kbyBpbnRlcm5vIHJpY2hpYW1hdG8gZGEgKipzZXR1cEZvckV4cG9ydCoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiBPZ2dldHRvIGdlbmVyaWNvIGRhIGVzcG9ydGFyZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtDc3ZIZWFkZXJzW119IEhlYWRlciBkaSBlc3BvcnRhemlvbmUgZ2nDoCBvcmRpbmF0aSBjb3JyZXR0YW1lbnRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUFuZEdldEhlYWRlcnMob2JqOiBhbnksIGNvbHVtbnNTZWxlY3Rpb24/OiB7IFtpZDogc3RyaW5nXTogdHJ1ZSB9KTogQ3N2SGVhZGVyc1tdIHtcclxuICAgIHZhciBoZWFkZXJzOiBDc3ZIZWFkZXJzW10gPSBbXTtcclxuXHJcbiAgICAvLyBNaXJhY2xlIGluY29taW5nXHJcbiAgICBsZXQgZXhwb3J0UHJvcHMgPSBvYmpbZXhwb3J0TGlzdF0gfHwgW107XHJcbiAgICBsZXQgbG9jID0gb2JqW2xvY1Byb3BlcnR5XSA/IHRoaXMubGMuZ2VuZXJhdGVGcm9tVHlwZShvYmpbbG9jUHJvcGVydHldKSA6IG51bGw7XHJcblxyXG4gICAgaWYgKGV4cG9ydFByb3BzLmxlbmd0aCA9PSAwKVxyXG4gICAgICBjb25zb2xlLndhcm4oXCJbQGVzZmFlbnphL2V4dGVuc2lvbnNdIE5lc3N1bmEgY29sb25uYSBjb25maWd1cmF0YSBkYSBlc3BvcnRhcmUhXCIpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwb3J0UHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHByb3AgPSBleHBvcnRQcm9wc1tpXTtcclxuICAgICAgbGV0IHByb3BCYXNlID0gXCJcIjtcclxuICAgICAgbGV0IHRvQ2FsbDogRnVuY3Rpb247XHJcbiAgICAgIGlmIChwcm9wLmVuZHNXaXRoKGxpc3RDc3ZIZHJQcmVmaXgpKSB7XHJcbiAgICAgICAgcHJvcEJhc2UgPSBwcm9wLnJlcGxhY2UobGlzdENzdkhkclByZWZpeCwgJycpO1xyXG4gICAgICAgIHRvQ2FsbCA9IHRoaXMucGFyc2VMaXN0LmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocHJvcC5lbmRzV2l0aChkaWN0aW9uYXJ5Q3N2SGRyUHJlZml4KSkge1xyXG4gICAgICAgIHByb3BCYXNlID0gcHJvcC5yZXBsYWNlKGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXgsICcnKTtcclxuICAgICAgICB0b0NhbGwgPSB0aGlzLnBhcnNlRGljdGlvbmFyeS5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHByb3AuZW5kc1dpdGgoY3N2VmlzUHJlZml4KSkge1xyXG4gICAgICAgIHByb3BCYXNlID0gcHJvcC5yZXBsYWNlKGNzdlZpc1ByZWZpeCwgJycpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqW3Byb3BCYXNlICsgY3N2VmFsdWVOYXZpZ2F0b3JdICE9PSBcInVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgdG9DYWxsID0gdGhpcy5wYXJzZU9iamVjdC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRvQ2FsbCA9IHRoaXMucGFyc2VQcm9wZXJ0eS5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9DYWxsKVxyXG4gICAgICAgIHRvQ2FsbChvYmosIHByb3BCYXNlLCBoZWFkZXJzLCBjb2x1bW5zU2VsZWN0aW9uLCBsb2MpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoZWFkZXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dXAgcGVyIGwnZXNwb3J0YXppb25lIGRpIHVuYSBzaW5nb2xhIHByb3ByaWV0w6AuIFxyXG4gICAqIFZpZW5lIGdlbmVyYXRvIGwnaGVhZGVyIGUgbGEgcHJvcHJpZXTDoCByZWxhdGl2YSBhbCB2YWxvcmUgZm9ybWF0dGF0byBvIG5vXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiBPZ2dldHRvIGRpIGN1aSBlc3BvcnRhcmUgbGEgcHJvcHJpZXTDoCAqKnByb3AqKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3ByaWV0w6AgZGEgZXNwb3J0YXJlXHJcbiAgICogQHBhcmFtIHtDc3ZIZWFkZXJzfSBoZWFkZXJzIENvbnRlbml0b3JlIGRlZ2xpIGhlYWRlciwgdmVycsOgIHJpZW1waXRvIGRhIHF1ZXN0YSBmdW56aW9uZSBcclxuICAgKiBAcGFyYW0ge0xvY2FsaXphdGlvblNlcnZpY2V9IGxvYyBTZXJ2aXppbyBkaSBsb2NhbGl6emF6aW9uZSBjaGUgdHJhZHVjZSB0dXR0aSBpIG5vbWkgY2hlIHB1w7JcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlUHJvcGVydHkob2JqOiBhbnksIHByb3A6IHN0cmluZywgaGVhZGVyczogQ3N2SGVhZGVyc1tdLCBjb2x1bW5zU2VsZWN0aW9uPzogeyBbaWQ6IHN0cmluZ106IHRydWUgfSwgbG9jPzogTG9jYWxpemF0aW9uU2VydmljZSkge1xyXG4gICAgbGV0IHRvRW1pdDogYm9vbGVhbiA9IG9ialtwcm9wICsgY3N2VmlzUHJlZml4XTtcclxuICAgIGxldCBmb3JtYXQ6IHN0cmluZyA9IG9ialtwcm9wICsgY3N2Rm9ybWF0UHJlZml4XTtcclxuICAgIGxldCBwcm9wS2V5ID0gb2JqW3Byb3AgKyBjc3ZQcm9wS2V5XTtcclxuXHJcbiAgICBpZiAocHJvcEtleSAmJiAhY29sdW1uc1NlbGVjdGlvbltwcm9wS2V5XSAmJiBPYmplY3Qua2V5cyhjb2x1bW5zU2VsZWN0aW9uKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiW0Blc2ZhZW56YS9leHRlbnNpb25zXSBDb2xvbm5hIGRhIG5vbiBlc3BvcnRhcmU6IFwiICsgcHJvcEtleSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdGV4dCA9IG9ialtwcm9wICsgY3N2SGRyUHJlZml4XTtcclxuICAgIGxldCBsYWJlbCA9IGxvYyAmJiB0ZXh0ID8gbG9jLmxvYyh0ZXh0KSA6IHRleHQgfHwgXCJcIjtcclxuICAgIGxldCBvcmRlciA9IG9ialtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuXHJcbiAgICBpZiAoIXRvRW1pdClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIC8vIFNlIG5vbiBobyB1biBmb3JtYXRvIGVzcG9ydG8gZGlyZXR0YW1lbnRlXHJcbiAgICBpZiAoIWZvcm1hdCkge1xyXG4gICAgICAvLyBTZSDDqCB1biBmb3JtYXRvIGRhdGEgbWkgYXNzaWN1cm8gZGkgbm9uIHN0YW1wYXJlIG1haSB1bmEgZGF0YSAwMDowMDowMCBhbHRyaW1lbnRpIGluIGVzcG9ydGF6aW9uZSB2aWVuZSB1bm8gc2NoaWZvXHJcbiAgICAgIGxldCB2YWwgPSBvYmpbcHJvcF0gPyB0aGlzLmRhdGVzLnRyaW1TZWNvbmRzKG9ialtwcm9wXS50b1N0cmluZygpKSA6IFwiXCI7XHJcbiAgICAgIGxldCBrZXkgPSBwcm9wICsgXCJfbm9mbXRcIjtcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWwsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWwsIGtleSwgb3JkZXIsIHR5cGU6IFwic3RyaW5nXCIsIHByb3BLZXkgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQga2V5ID0gcHJvcCArIFwiX2ZtdFwiO1xyXG5cclxuICAgICAgLy8gQ2FzbyBmb3JtYXRvIG51bWVyaWNvXHJcbiAgICAgIGlmIChmb3JtYXQgPT0gXCJGXCIpIHtcclxuICAgICAgICAvLyBDaGVjayBjb25zaWRlcmFuZG8gbGEgcG9zc2liaWxpdMOgIGRpIHplcmlcclxuICAgICAgICBsZXQgdmFsID0gb2JqW3Byb3BdICE9IG51bGwgPyBvYmpbcHJvcF0udG9TdHJpbmcoKSA6IFwiXCI7XHJcbiAgICAgICAgLy8gRWxpbWlubyB0dXR0ZSBsZSB2aXJnb2xlIChpbmRpY2F0b3JpIGRpIG1pZ2xpYWlhIHBlciBsYSBjdWx0dXJlIGRlZmF1bHQgZW4tVVMpXHJcbiAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoLywvLCBcIlwiKTtcclxuICAgICAgICAvLyBJbCBzaW5nb2xvIHB1bnRvIGNoZSBjJ8OoLCBzZSBwcmVzZW50ZSAoc2VwYXJhdG9yZSBkZWNpbWFsaSkgbG8gdHJhc2Zvcm1vIGluIHZpcmdvbGFcclxuICAgICAgICBsZXQgdmFsQ29udmVydGVkID0gdmFsLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWxDb252ZXJ0ZWQsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICBoZWFkZXJzLnB1c2goeyBsYWJlbCwga2V5LCBvcmRlciwgdHlwZTogXCJudW1iZXJcIiwgcHJvcEtleSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBTZSBobyB1biBmb3JtYXRvIGRhdGEgdHJhc2Zvcm1vIGluIGRheWpzLCBmb3JtYXR0byBlZCBlc3BvcnRvXHJcbiAgICAgICAgLy8gUGVyIGxhIHRyYXNmb3JtYXppb25lIGluIGRheWpzIHByb3ZvIHByaW1hIGEgcGFzc2FyZ2xpIGxhIHN0cmluZ2EgZGkgbmV0dG8sIHNwZXJhbmRvIGxhIHJpY29ub3NjYVxyXG4gICAgICAgIC8vIFNlIG5vbiBmdW56aW9uYSBwcm92byBhIGRlZmluaXJnbGkgbGEgZm9ybWF0dGF6aW9uZSBzdGFuZGFyZCBkZWwgbWV0ZXJpbmcgcGVyIHF1ZWwgbGluZ3VhZ2dpb1xyXG4gICAgICAgIGxldCB2YWwgPSB0aGlzLmRhdGVzLmdldEZvcm1hdHRlZChvYmpbcHJvcF0sIGZvcm1hdC5sZW5ndGggPD0gMTAsIGZvcm1hdC5sZW5ndGggPiAxNik7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWwgPz8gXCJcIiwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsLCBrZXksIG9yZGVyLCB0eXBlOiBcImRhdGVcIiwgcHJvcEtleSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dXAgcGVyIGwnZXNwb3J0YXppb25lIGRpIHVuYSBzaW5nb2xhIHByb3ByaWV0w6AgZGEgdW4gb2dnZXR0by4gXHJcbiAgICogVmllbmUgZ2VuZXJhdG8gbCdoZWFkZXIgZSBsYSBwcm9wcmlldMOgIHJlbGF0aXZhIGFsIHZhbG9yZSBmb3JtYXR0YXRvIG8gbm8uIFxyXG4gICAqIFxyXG4gICAqIFBlciBvdHRlbmVyZSBpbCB2YWxvcmUgZSBsJ2hlYWRlciBkZWxsYSBwcm9wcmlldMOgIHZlbmdvbm8gdXRpbGl6emF0aSBpIG5hdmlnYXRvcmkgYXV0by1nZW5lcmF0aSBuZWwgZGVjb3JhdG9yZSAqKkV4cG9ydEFzKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gb2JqIE9nZ2V0dG8gZGkgY3VpIGVzcG9ydGFyZSBsYSBwcm9wcmlldMOgICoqcHJvcCoqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcHJpZXTDoCBkYSBlc3BvcnRhcmVcclxuICAgKiBAcGFyYW0ge0NzdkhlYWRlcnN9IGhlYWRlcnMgQ29udGVuaXRvcmUgZGVnbGkgaGVhZGVyLCB2ZXJyw6AgcmllbXBpdG8gZGEgcXVlc3RhIGZ1bnppb25lIFxyXG4gICAqIEBwYXJhbSB7TG9jYWxpemF0aW9uU2VydmljZX0gbG9jIFNlcnZpemlvIGRpIGxvY2FsaXp6YXppb25lIGNoZSB0cmFkdWNlIHR1dHRpIGkgbm9taSBjaGUgcHXDslxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VPYmplY3Qob2JqOiBhbnksIHByb3A6IHN0cmluZywgaGVhZGVyczogQ3N2SGVhZGVyc1tdLCBsb2M/OiBMb2NhbGl6YXRpb25TZXJ2aWNlKSB7XHJcbiAgICAvL3NlIHF1ZXN0YSBwcm9wcmlldMOgIGhhIHVuIG5hdmlnYXRvciBzaWduaWZpY2EgY2hlIGRlcml2YSBkYSB1biBvZ2dldHRvIGludGVybm8sIHJlY3VwZXJvIGlsIHZhbG9yZSBpbiBxdWVzdGEgZmFzZSBkYXRvIGNoZSBwcmltYSBub24gY2UgbCdob1xyXG4gICAgbGV0IHZhbHVlbmF2aWdhdG9yID0gb2JqW3Byb3AgKyBjc3ZWYWx1ZU5hdmlnYXRvcl07XHJcblxyXG4gICAgLy9Fcy4gZGkgdmFsdWVuYXZpZ2F0b3Igb2JqLnN1Ym9iai5zdWJzdWJvYmoucHJvcGVydHlcclxuICAgIGxldCBqbXBzID0gdmFsdWVuYXZpZ2F0b3Iuc3BsaXQoXCIuXCIpO1xyXG5cclxuICAgIC8vIExvY2FsaXp6YXppb25lIHByZXNhIGRhbGxhIGNsYXNzZSBiYXNlIHNlIGMnw6gsIGFsdHJpbWVudGkgZGFsbGEgY2xhc3NlIGludGVybmEgKGNpb8OoIGRhbCBwcmltbyBzYWx0aW5vKVxyXG4gICAgaWYgKCFsb2MpIHtcclxuICAgICAgbGV0IHR5cGUgPSBvYmpbcHJvcCArIGNzdlZhbHVlVHlwZV07XHJcbiAgICAgIGxldCBwcm90byA9IG5ldyB0eXBlKCk7XHJcbiAgICAgIGxvYyA9IHByb3RvW2xvY1Byb3BlcnR5XTtcclxuICAgIH1cclxuXHJcbiAgICAvL01pIGNsb25vIGwnb2dnZXR0byBvcmlnaW5hbGUgcGVyIG5vbiB1Y2NpZGVyZ2xpIGkgcmlmZXJpbWVudGlcclxuICAgIGxldCBjbG9uZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XHJcbiAgICAvL1NhbHRvIHJpY29yc2l2YW1lbnRlIHN1IG1lIHN0ZXNzbyBwZXIgYXJyaXZhcmUgYWxsYSBwcm9wcmlldMOgXHJcbiAgICAvL1NhbHRvIDEgPiBkaXZlbnRhIG9ialxyXG4gICAgLy9TYWx0byAyID4gZGl2ZW50YSBvYmouc3Vib2JqXHJcbiAgICAvL2VjYy4uLlxyXG4gICAgam1wcy5mb3JFYWNoKHBwID0+IHsgY2xvbmUgPSBjbG9uZVtwcF07IH0pO1xyXG5cclxuICAgIC8vVmFsb3JlIGZpbmFsZSA6RFxyXG4gICAgbGV0IHZhbHVlID0gY2xvbmU7XHJcblxyXG4gICAgbGV0IHRleHQgPSBvYmpbcHJvcCArIGNzdkhkclByZWZpeF07XHJcbiAgICBsZXQgbGFiZWwgPSBsb2MgJiYgdGV4dCA/IGxvYy5sb2ModGV4dCkgOiB0ZXh0IHx8IFwiXCI7XHJcbiAgICBsZXQgb3JkZXIgPSBvYmpbcHJvcCArIGNzdk9yZFByZWZpeF07XHJcblxyXG4gICAgLy9TZSBwZXIgcXVlc3RhIHByb3ByaWV0w6AgaG8gdW4gZm9ybWF0byBsbyBhcHBsaWNvXHJcbiAgICBsZXQgZm9ybWF0OiBzdHJpbmcgPSBvYmpbcHJvcCArIGNzdkZvcm1hdFByZWZpeF07XHJcbiAgICBsZXQgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyA9IFwic3RyaW5nXCI7XHJcbiAgICBpZiAoZm9ybWF0ID09IFwiRlwiKSB7XHJcbiAgICAgIGxldCB2YWwgPSB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICB2YWwgPSB2YWwucmVwbGFjZSgvLC8sIFwiXCIpO1xyXG4gICAgICB2YWx1ZSA9IHZhbC5yZXBsYWNlKFwiLlwiLCBcIixcIik7XHJcbiAgICAgIHR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZm9ybWF0KSB7XHJcbiAgICAgIHZhbHVlID0gdGhpcy5kYXRlcy5nZXRGb3JtYXR0ZWQodmFsdWUsIGZvcm1hdC5sZW5ndGggPD0gMTAsIGZvcm1hdC5sZW5ndGggPiAxNik7XHJcbiAgICAgIHR5cGUgPSBcImRhdGVcIjtcclxuICAgIH1cclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCB7IHZhbHVlOiB2YWx1ZSA/PyBcIlwiLCB3cml0YWJsZTogZmFsc2UsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICBoZWFkZXJzLnB1c2goeyBsYWJlbCwga2V5OiBwcm9wLCBvcmRlciwgdHlwZSwgcHJvcEtleTogbnVsbCB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHVwIHBlciBsJ2VzcG9ydGF6aW9uZSBkaSB1bmEgbGlzdGEgZGkgdmFsb3JpIHBpdm90dGF0aSBkaW5hbWljYW1lbnRlOlxyXG4gICAqIFxyXG4gICAqID0+IFJlY3VwZXJvIGlsIHZhbG9yZSB1dGlsaXp6YW5kbyBpIG5hdmlnYXRvcmlcclxuICAgKiBcclxuICAgKiA9PiBSZWN1cGVybyBsJ2hlYWRlciB1dGlsaXp6YW5kbyBpIG5hdmlnYXRvcmlcclxuICAgKiBcclxuICAgKiA9PiBDb24gaWwgdmFsb3JlIGNpIGNyZW8gbGEgcHJvcGVydHlcclxuICAgKiBcclxuICAgKiA9PiBDb24gbCdoZWFkZXIgZSBpbCByaWZlcmltZW50byBhbGxhIHByb3BlcnR5IGFwcGVuYSBjcmVhdGEgY3JlbyB1biByZWNvcmQgbmVnbGkgaGVhZGVyIGRhIGVzcG9ydGFyZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBkaSBjdWkgZXNwb3J0YXJlIGxhIHByb3ByaWV0w6AgKipwcm9wKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wcmlldMOgIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc30gaGVhZGVycyBDb250ZW5pdG9yZSBkZWdsaSBoZWFkZXIsIHZlcnLDoCByaWVtcGl0byBkYSBxdWVzdGEgZnVuemlvbmUgXHJcbiAgICogQHBhcmFtIHtMb2NhbGl6YXRpb25TZXJ2aWNlfSBsb2MgU2Vydml6aW8gZGkgbG9jYWxpenphemlvbmUgY2hlIHRyYWR1Y2UgdHV0dGkgaSBub21pIGNoZSBwdcOyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUxpc3Qob2JqOiBhbnksIHByb3A6IHN0cmluZywgaGVhZGVyczogQ3N2SGVhZGVyc1tdLCBsb2M/OiBMb2NhbGl6YXRpb25TZXJ2aWNlKSB7XHJcbiAgICBsZXQgaGVhZGVybmF2aWdhdG9yID0gb2JqW3Byb3AgKyBsaXN0Q3N2SGRyUHJlZml4XTtcclxuICAgIGxldCB2YWx1ZW5hdmlnYXRvciA9IG9ialtwcm9wICsgbGlzdENzdlZhbFByZWZpeF07XHJcbiAgICBsZXQgdmFsdWVmb3JtYXQgPSBvYmpbcHJvcCArIGxpc3RDc3ZWYWxGb3JtYXRdO1xyXG4gICAgbGV0IG9yZGVyID0gb2JqW3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG5cclxuICAgIHZhciBqdW1wczogc3RyaW5nW10sIHRtcFJlczogYW55O1xyXG4gICAgdmFyIG9ianM6IGFueVtdID0gb2JqW3Byb3BdO1xyXG5cclxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IG9ianMubGVuZ3RoOyBpZHgrKykge1xyXG4gICAgICBsZXQgbGlzdGl0ZW0gPSBvYmpzW2lkeF07XHJcblxyXG4gICAgICB2YXIgaGVhZGVyc3BsaXQgPSBoZWFkZXJuYXZpZ2F0b3Iuc3BsaXQoXCIgXCIpO1xyXG4gICAgICB2YXIgbGFiZWwgPSBcIlwiO1xyXG5cclxuICAgICAgLy8gUGVyIGwnaGVhZGVyIHNpIGNvbnNpZGVyYSBhIHNlIHN0YW50ZSBvZ25pIHBlenpvIHNlcGFyYXRvIGRhIHNwYXppbyBwZXIgZmFyZSBsZSBjb25jYXRlbmF6aW9uaVxyXG4gICAgICBoZWFkZXJzcGxpdC5mb3JFYWNoKHByID0+IHtcclxuICAgICAgICBqdW1wcyA9IHByLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICB0bXBSZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGxpc3RpdGVtKSk7XHJcbiAgICAgICAganVtcHMuZm9yRWFjaChwcCA9PiB7IHRtcFJlcyA9IHRtcFJlc1twcF07IH0pO1xyXG5cclxuICAgICAgICBpZiAoIWxhYmVsKSBsYWJlbCA9ICEhbG9jID8gbG9jLmxvYyh0bXBSZXMpIDogdG1wUmVzO1xyXG4gICAgICAgIGVsc2UgbGFiZWwgKz0gXCIgXCIgKyAhIWxvYyA/IGxvYy5sb2ModG1wUmVzKSA6IHRtcFJlcztcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBqdW1wcyA9IHZhbHVlbmF2aWdhdG9yLnNwbGl0KFwiLlwiKTtcclxuICAgICAgdG1wUmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsaXN0aXRlbSkpO1xyXG4gICAgICBqdW1wcy5mb3JFYWNoKHBwID0+IHsgdG1wUmVzID0gdG1wUmVzW3BwXTsgfSk7XHJcbiAgICAgIGxldCB2YWx1ZSA9IHRtcFJlcztcclxuXHJcbiAgICAgIGxldCB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2RhdGUnID0gXCJzdHJpbmdcIjtcclxuICAgICAgaWYgKHZhbHVlZm9ybWF0ID09IFwiRlwiKSB7XHJcbiAgICAgICAgbGV0IHZhbCA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS50b1N0cmluZygpIDogXCJcIjtcclxuICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgvLC8sIFwiXCIpO1xyXG4gICAgICAgIHZhbHVlID0gdmFsLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuICAgICAgICB0eXBlID0gXCJudW1iZXJcIjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh2YWx1ZWZvcm1hdCkge1xyXG4gICAgICAgIHZhbHVlID0gdGhpcy5kYXRlcy5nZXRGb3JtYXR0ZWQob2JqW3Byb3BdLCB2YWx1ZWZvcm1hdC5sZW5ndGggPD0gMTAsIHZhbHVlZm9ybWF0Lmxlbmd0aCA+IDE2KTtcclxuICAgICAgICB0eXBlID0gXCJkYXRlXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AgKyBpZHgsIHsgdmFsdWU6IHZhbHVlID8/IFwiXCIsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWwsIGtleTogcHJvcCArIGlkeCwgb3JkZXI6IG9yZGVyICsgaWR4LCB0eXBlLCBwcm9wS2V5OiBudWxsIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dXAgcGVyIGwnZXNwb3J0YXppb25lIGRpIHVuYSBsaXN0YSBkaSB2YWxvcmkgcGl2b3R0YXRpIGRpbmFtaWNhbWVudGU6XHJcbiAgICogXHJcbiAgICogPT4gUmVjdXBlcm8gaWwgdmFsb3JlIHV0aWxpenphbmRvIGkgbmF2aWdhdG9yaVxyXG4gICAqIFxyXG4gICAqID0+IFJlY3VwZXJvIGwnaGVhZGVyIHV0aWxpenphbmRvIGkgbmF2aWdhdG9yaVxyXG4gICAqIFxyXG4gICAqID0+IENvbiBpbCB2YWxvcmUgY2kgY3JlbyBsYSBwcm9wZXJ0eVxyXG4gICAqIFxyXG4gICAqID0+IENvbiBsJ2hlYWRlciBlIGlsIHJpZmVyaW1lbnRvIGFsbGEgcHJvcGVydHkgYXBwZW5hIGNyZWF0YSBjcmVvIHVuIHJlY29yZCBuZWdsaSBoZWFkZXIgZGEgZXNwb3J0YXJlXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiBPZ2dldHRvIGRpIGN1aSBlc3BvcnRhcmUgbGEgcHJvcHJpZXTDoCAqKnByb3AqKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3ByaWV0w6AgZGEgZXNwb3J0YXJlXHJcbiAgICogQHBhcmFtIHtDc3ZIZWFkZXJzfSBoZWFkZXJzIENvbnRlbml0b3JlIGRlZ2xpIGhlYWRlciwgdmVycsOgIHJpZW1waXRvIGRhIHF1ZXN0YSBmdW56aW9uZVxyXG4gICAqIEBwYXJhbSB7TG9jYWxpemF0aW9uU2VydmljZX0gbG9jIFNlcnZpemlvIGRpIGxvY2FsaXp6YXppb25lIGNoZSB0cmFkdWNlIHR1dHRpIGkgbm9taSBjaGUgcHXDslxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VEaWN0aW9uYXJ5KG9iajogYW55LCBwcm9wOiBzdHJpbmcsIGhlYWRlcnM6IENzdkhlYWRlcnNbXSwgbG9jPzogTG9jYWxpemF0aW9uU2VydmljZSkge1xyXG4gICAgbGV0IGhlYWRlcm5hdmlnYXRvciA9IG9ialtwcm9wICsgZGljdGlvbmFyeUNzdkhkclByZWZpeF07XHJcbiAgICBsZXQgdmFsdWVuYXZpZ2F0b3IgPSBvYmpbcHJvcCArIGRpY3Rpb25hcnlDc3ZWYWxQcmVmaXhdO1xyXG4gICAgbGV0IG9yZGVyID0gb2JqW3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG5cclxuICAgIHZhciBqdW1wczogc3RyaW5nW10sIHRtcFJlczogYW55O1xyXG4gICAgdmFyIG9ianM6IGFueVtdID0gb2JqW3Byb3BdO1xyXG5cclxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IG9ianMubGVuZ3RoOyBpZHgrKykge1xyXG4gICAgICBsZXQgbGlzdGl0ZW0gPSBvYmpzW2lkeF07XHJcbiAgICAgIHZhciBoZWFkZXJzcGxpdCA9IGhlYWRlcm5hdmlnYXRvci5zcGxpdChcIiBcIik7XHJcbiAgICAgIHZhciBsYWJlbCA9IFwiXCI7XHJcblxyXG4gICAgICBoZWFkZXJzcGxpdC5mb3JFYWNoKHByID0+IHtcclxuICAgICAgICBqdW1wcyA9IHByLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICB0bXBSZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGxpc3RpdGVtKSk7XHJcbiAgICAgICAganVtcHMuZm9yRWFjaChwcCA9PiB7IHRtcFJlcyA9IHRtcFJlc1twcF07IH0pO1xyXG5cclxuICAgICAgICBpZiAoIWxhYmVsKSBsYWJlbCA9ICEhbG9jID8gbG9jLmxvYyh0bXBSZXMpIDogdG1wUmVzO1xyXG4gICAgICAgIGVsc2UgbGFiZWwgKz0gXCIgXCIgKyAhIWxvYyA/IGxvYy5sb2ModG1wUmVzKSA6IHRtcFJlcztcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB2YXIgdmFsdWVzcGxpdCA9IHZhbHVlbmF2aWdhdG9yLnNwbGl0KFwiLFwiKTtcclxuICAgICAgdmFsdWVzcGxpdC5mb3JFYWNoKCh0LCBpZHhpbnRlcm5hbCkgPT4ge1xyXG4gICAgICAgIHZhciBuYXZpZyA9IHQuc3BsaXQoXCItXCIpWzFdO1xyXG4gICAgICAgIHZhciBkZXNjID0gdC5zcGxpdChcIi1cIilbMF07XHJcblxyXG4gICAgICAgIGp1bXBzID0gbmF2aWcuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIHRtcFJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGlzdGl0ZW0pKTtcclxuICAgICAgICBqdW1wcy5mb3JFYWNoKHBwID0+IHsgdG1wUmVzID0gdG1wUmVzW3BwXTsgfSk7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdG1wUmVzO1xyXG5cclxuICAgICAgICBsZXQgcHJvcG5hbWUgPSBwcm9wICsgaWR4LnRvU3RyaW5nKCkgKyBpZHhpbnRlcm5hbC50b1N0cmluZygpO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3BuYW1lLCB7IHZhbHVlOiB2YWx1ZSA/PyBcIlwiLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWw6IGxhYmVsICsgXCIgXCIgKyAhIWxvYyA/IGxvYy5sb2MoZGVzYykgOiBkZXNjLCBrZXk6IHByb3BuYW1lLCBvcmRlcjogb3JkZXIgKyBpZHgsIHR5cGU6ICdzdHJpbmcnLCBwcm9wS2V5OiBudWxsIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBcclxuICAgKiBFZmZldHR1YSBsJ2VzcG9ydGF6aW9uZSBpbiBmaWxlIENTViBcclxuICAgKi9cclxuICBwcml2YXRlIGV4cG9ydENTVihmbjogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10sIGRhdGE6IGFueVtdKSB7XHJcbiAgICBsZXQgY3N2RGF0YSA9ICcnLCByb3cgPSAnJywgc2VwID0gJzsnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaCA9IGhlYWRlcnNbaV07XHJcbiAgICAgIHJvdyArPSBgJHtyb3cgIT0gJycgPyBzZXAgOiAnJ31cIiR7aC5sYWJlbH1cImA7XHJcbiAgICB9XHJcbiAgICBjc3ZEYXRhICs9IHJvdyArICdcXHJcXG4nO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICByb3cgPSAnJztcclxuICAgICAgbGV0IGl0ZW0gPSBkYXRhW2ldO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGhlYWRlcnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBsZXQgdmFsID0gaXRlbVtoZWFkZXJzW2pdLmtleV07XHJcbiAgICAgICAgcm93ICs9IGAke3JvdyAhPSAnJyA/IHNlcCA6ICcnfVwiJHt2YWx9XCJgO1xyXG4gICAgICB9XHJcbiAgICAgIGNzdkRhdGEgKz0gcm93ICsgJ1xcclxcbic7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIEJPTSA9IG5ldyBVaW50OEFycmF5KFsweEVGLDB4QkIsMHhCRl0pO1xyXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbQk9NLCBjc3ZEYXRhXSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xyXG4gICAgdmFyIG9iamVjdFVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICB0aGlzLnV0aUV4dHMuZmlsZURvd25sb2FkKG9iamVjdFVybCwgZm4uZW5kc1dpdGgoJy54bHN4JykgPyBmbi5yZXBsYWNlKCcueGxzeCcsICcuY3N2JykgOiBmbi5lbmRzV2l0aCgnLmNzdicpID8gZm4gOiBmbiArIFwiLmNzdlwiKTtcclxuICB9XHJcblxyXG5cclxuICAvKiogQ2FjaGUgZGVsIG1vZHVsbyBwZXIgbCdlc3BvcnRhemlvbmUgRXhjZWwgKi9cclxuICBwcml2YXRlIEV4Y2VsSlM6IGFueTtcclxuXHJcbiAgLyoqIEVmZmV0dHVhIGwnZXNwb3J0YXppb25lIGRlbCBmaWxlIEV4Y2VsIGJhc2FuZG9zaSBzdWwgbW9kdWxvICoqRXhjZWxKUyoqLCBzdWdsaSBoZWFkZXIgKipoZWFkZXJzKiogZSBzdWkgZGF0aSAqKmRhdGEqKiAqL1xyXG4gIHByaXZhdGUgYXN5bmMgZXhwb3J0RXhjZWwoZm46IHN0cmluZywgaGVhZGVyczogQ3N2SGVhZGVyc1tdLCBkYXRhOiBhbnlbXSkge1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuRXhjZWxKUyA9IHRoaXMuRXhjZWxKUyB8fCBhd2FpdCBpbXBvcnQoXCJleGNlbGpzXCIpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2gge1xyXG4gICAgICB0aHJvdyBcIkltcG9zc2liaWxlIGNhcmljYXJlIGxhIGxpYnJlcmlhIHBlciBsJ2VzcG9ydGF6aW9uZSBpbiBFeGNlbFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpRml4ID0gMTtcclxuICAgIGxldCB3b3JrYm9vayA9IG5ldyB0aGlzLkV4Y2VsSlMuV29ya2Jvb2soKTtcclxuICAgIHdvcmtib29rLmNyZWF0b3IgPSBcIkVtYSdzIGJpZyBFcy1UYWJsZVwiO1xyXG4gICAgd29ya2Jvb2suY3JlYXRlZCA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgbGV0IHNoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdEYXRhJyk7XHJcbiAgICBsZXQgaGVhZGVyID0gc2hlZXQuZ2V0Um93KDEpO1xyXG4gICAgaGVhZGVyLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNvcnQoKGE6IENzdkhlYWRlcnMsIGI6IENzdkhlYWRlcnMpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGggPSBoZWFkZXJzW2ldO1xyXG4gICAgICBoZWFkZXIuZ2V0Q2VsbChpICsgaUZpeCkudmFsdWUgPSBoLmxhYmVsO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcm93ID0gc2hlZXQuZ2V0Um93KGkgKyBpRml4ICsgMSk7XHJcbiAgICAgIGxldCBpdGVtID0gZGF0YVtpXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGggPSBoZWFkZXJzW2ldO1xyXG4gICAgICAgIGxldCBjZWxsID0gcm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgICAgIGxldCB2YWwgPSBpdGVtW2gua2V5XTtcclxuXHJcbiAgICAgICAgaWYgKCF2YWwpIHtcclxuICAgICAgICAgIGNlbGwudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKGgudHlwZSkge1xyXG4gICAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICAgIC8vIEV4Y2VsSlMgdmEgZGkgZGVmYXVsdCBpbiBVVEMgcXVpbmRpIHJpc2NoaWVyZWJiZSBkaSB0aXJhcmUgZ2nDuSAyIG9yZSBhZCBvZ25pIGVzcG9ydGF6aW9uZVxyXG4gICAgICAgICAgICAvLyBCaXNvZ25hIGFnZ2l1bmdlcmUgbCd1dGMgb2Zmc2V0IGFsbGEgZGF0YSBhdHR1YWxlXHJcbiAgICAgICAgICAgIGxldCBkYXRlID0gdGhpcy5kYXRlcy5nZXREYXRlQ29udmVydGlvbih2YWwpO1xyXG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgICAgICAgIGxldCBjb3JyZWN0ZWREYXRlID0gZGF0ZS5hZGQoZGF0ZS51dGNPZmZzZXQoKSwgJ21pbnV0ZScpO1xyXG4gICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBjb3JyZWN0ZWREYXRlLnRvRGF0ZSgpO1xyXG4gICAgICAgICAgICAgIGNlbGwubnVtRm10ID0gdmFsLmxlbmd0aCA+IDEwID8gJ2RkL21tL3l5eXkgaDptOnMnIDogJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICAgICAgICBsZXQgY29udmVydGVkID0gcGFyc2VGbG9hdCh2YWwucmVwbGFjZSgnLCcsICcuJykpO1xyXG4gICAgICAgICAgICBjZWxsLnZhbHVlID0gaXNOYU4oY29udmVydGVkKSA/IFwiXCIgOiBjb252ZXJ0ZWQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgY2VsbC52YWx1ZSA9IHZhbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGJ1ZmZlciA9IGF3YWl0IHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcclxuICAgIGxldCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtcIiB9KTtcclxuICAgIGxldCBvYmplY3RVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgdGhpcy51dGlFeHRzLmZpbGVEb3dubG9hZChvYmplY3RVcmwsIGZuLmVuZHNXaXRoKCcuY3N2JykgPyBmbi5yZXBsYWNlKCcuY3N2JywgJy54bHN4JykgOiBmbi5lbmRzV2l0aCgnLnhsc3gnKSA/IGZuIDogZm4gKyBcIi54bHN4XCIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBlZmZldHRpdmFtZW50ZSBnZW5lcmEgZ2xpIGhlYWRlciBlIGkgZGF0aSBwZXIgbCdlc3BvcnRhemlvbmUgY29uICoqbmd4LWNzdioqXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRhIGVzcG9ydGFyZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBleHBvcnQoaXRlbXM6IGFueVtdLCBmb3JtYXQ6ICdDU1YnIHwgJ1hMU1gnLCBmaWxlTmFtZTogc3RyaW5nLCB0eXBlOiBUeXBlPGFueT4sIGNvbHVtbnNGaWx0ZXI/OiBzdHJpbmdbXSwgZ2VuZXJpY0hlYWRlcnM/OiBDc3ZIZWFkZXJzW10pIHtcclxuICAgIHZhciBjcmVhdGVkSXRlbXMgPSBpdGVtcy5tYXAodCA9PiB7XHJcbiAgICAgIGxldCB0bXAgPSBuZXcgdHlwZSgpO1xyXG4gICAgICBmb3IobGV0IHByb3BlcnR5IGluIHQpIHRtcFtwcm9wZXJ0eV0gPSB0W3Byb3BlcnR5XTtcclxuICAgICAgcmV0dXJuIHRtcDtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBoZWFkZXJzID0gZ2VuZXJpY0hlYWRlcnMgPyB0aGlzLnNldHVwRm9yR2VuZXJpY0V4cG9ydChjcmVhdGVkSXRlbXMsIGdlbmVyaWNIZWFkZXJzKSA6IHRoaXMuc2V0dXBGb3JFeHBvcnQoY3JlYXRlZEl0ZW1zLCBjb2x1bW5zRmlsdGVyKTtcclxuICAgIChmb3JtYXQgPT0gXCJDU1ZcIiA/IHRoaXMuZXhwb3J0Q1NWIDogdGhpcy5leHBvcnRFeGNlbCkuYmluZCh0aGlzKShmaWxlTmFtZSwgaGVhZGVycywgY3JlYXRlZEl0ZW1zKTtcclxuICB9XHJcbn0iXX0=
627
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5leHBvcnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL3NyYy9saWIvc2VydmljZXMvZXh0ZW5zaW9ucy5leHBvcnRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFLakQsaUJBQWlCO0FBRWpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBUS9ROzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUE4QjtJQUMvRCxPQUFPLFNBQVMsWUFBWSxDQUF3QyxXQUFjO1FBQ2hGLE9BQU8sS0FBTSxTQUFRLFdBQVc7WUFBekI7O2dCQUE0QixZQUFPLEdBQUcsR0FBRyxDQUFDO1lBQUMsQ0FBQztTQUFBLENBQUM7SUFDdEQsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLFNBQWlCLElBQUksRUFBRSxVQUFrQixJQUFJLEVBQUUsRUFBRSxDQUNyRyxDQUFDLE1BQWMsRUFBRSxXQUFtQixFQUFFLEVBQUU7SUFDdEMsSUFBSSxNQUFNO1FBQ1IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxHQUFHLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUss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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNwRyxDQUFDOzswR0F6ZlUsYUFBYTs4R0FBYixhQUFhLGNBREEsTUFBTTsyRkFDbkIsYUFBYTtrQkFEekIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gRXNmYWVuemFcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuXHJcbmltcG9ydCB7IGV4cG9ydExpc3QsIGNzdkZvcm1hdFByZWZpeCwgY3N2SGRyUHJlZml4LCBjc3ZPcmRQcmVmaXgsIGNzdlZhbHVlTmF2aWdhdG9yLCBjc3ZWaXNQcmVmaXgsIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXgsIGRpY3Rpb25hcnlDc3ZWYWxQcmVmaXgsIGxpc3RDc3ZIZHJQcmVmaXgsIGxpc3RDc3ZWYWxGb3JtYXQsIGxpc3RDc3ZWYWxQcmVmaXgsIGNzdlByb3BLZXksIGxvY1Byb3BlcnR5LCBjc3ZWYWx1ZVR5cGUgfSBmcm9tIFwiLi4vbW9kZWxzL0V4cG9ydENvbnN0c1wiO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gJy4vZXh0ZW5zaW9ucy5kYXRlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tIFwiLi9leHRlbnNpb25zLnV0aWxpdGllcy5zZXJ2aWNlXCI7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IENzdkhlYWRlcnMgfSBmcm9tIFwiLi4vbW9kZWxzL0NzdkhlYWRlcnNcIjtcclxuaW1wb3J0IHsgR2VuZXJpY0l0ZW0gfSBmcm9tIFwiLi4vbW9kZWxzL0dlbmVyaWNJdGVtXCI7XHJcblxyXG4vKipcclxuICogRGVjb3JhdG9yZSBjaGUgZm9ybmlzY2UgbGEgY2xhc3NlIGRpIGxvY2FsaXp6YXppb25lIHBlciB0dXR0ZSBsZSBwcm9wcmlldMOgIGVzcG9ydGF0ZSBjb24gQEV4cG9ydCBlIHF1YWxzaWFzaSBhbHRybyB0YWcgY2hlIHJpY2hpZWRhIGxvY2FsaXp6YXppb25pLlxyXG4gKiBcclxuICogU29zdGFuemlsYW1lbnRlIGFnZ2l1bmdlIGxhIHByb3ByaWV0w6AgKipfX2xvY19fKiogYWxsJ29nZ2V0dG8gY3JlYXRvIGRhbGxhIGNsYXNzZSBjb3JyZW50ZSBhc3NlZ25hbmRvZ2xpIGNvbWUgdmFsb3JlIGlsIHRpcG8gZGVsIExvY2FsaXphdGlvblNlcnZpY2UgZGEgdXNhcmUgcGVyIGxhIHRyYWR1emlvbmVcclxuICogXHJcbiAqIEBwYXJhbSB7VHlwZTxMb2NhbGl6YXRpb25TZXJ2aWNlPn0gbG9jIFRpcG8gZXJlZGl0YXRvIGRhbCBMb2NhbGl6YXRpb25TZXJ2aWNlIGNoZSBwdcOyIGVzc2VyZSBjcmVhdG8gYSBydW50aW1lIHNvdHRvIGNvbnRlc3RvIGRlbGxhIERJIGRpIEFuZ3VsYXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFeHBvcnRMb2NhbGl6YXRpb24obG9jOiBUeXBlPExvY2FsaXphdGlvblNlcnZpY2U+KSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGludGVncmF0ZUxvYzxUIGV4dGVuZHMgeyBuZXcoLi4uYXJnczogYW55W10pOiB7fSB9Pihjb25zdHJ1Y3RvcjogVCkge1xyXG4gICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgY29uc3RydWN0b3IgeyBfX2xvY19fID0gbG9jOyB9O1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERlY29yYXRvcmUgZGkgZXNwb3J0YXppb25lIHV0aWxpenphYmlsZSBzdSB1bmEgcHJvcHJpZXTDoCBzaW5nb2xhLiBcclxuICogVmVycmFubm8gZ2VuZXJhdGUgMyBwcm9wcmlldMOgIGNoZSBnZXN0aXJhbm5vIGwnZXNwb3J0YXppb25lOiAocHJvcCwgcHJvcF9jc3Z2aXMsIHByb3BfY3N2aGRyKS4gXHJcbiAqIFxyXG4gKiBBZCBlc2VtcGlvLCBkYSBxdWVzdGEgY29uZmlndXJhemlvbmU6XHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBcclxuICogQEV4cG9ydCh0cnVlLCBcIk15SGVhZGVyXCIpXHJcbiAqIGNpYW86IHN0cmluZztcclxuICogYGBgXHJcbiAqIFxyXG4gKiBOYXNjZXJhbm5vIGxlIHNlZ3VlbnRpIHByb3ByaWV0w6AgbmVsbCdvZ2dldHRvIGVzcG9ydGFiaWxlOlxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogYGBgXHJcbiAqIGNpYW9fY3N2dmlzOiBzdHJpbmc7ID0+IHRydWVcclxuICogY2lhbzogc3RyaW5nO1xyXG4gKiBjaWFvX2Nzdmhkcjogc3RyaW5nID0+IFwiTXlIZWFkZXJcIlxyXG4gKiBgYGBcclxuICogXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcmRlciBPcmRpbmUgZGkgZXNwb3J0YXppb25lLiBQacO5IHBpY2NvbG8gw6gsIHByaW1hIGFwcGFyZSBpbCB2YWxvcmVcclxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlciBUaXRvbG8gZGVsbGEgY29sb25uYSBuZWwgZmlsZSBDU1YgZXNwb3J0YXRvXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgRm9ybWF0byBkaSBlc3BvcnRhemlvbmUuIFB1w7IgZXNzZXJlIHVuIGZvcm1hdG8gZGF0YSBwZXIgaSBjYW1waSBkYXRhIG8gJ0YnIHBlciBpIGNhbXBpIGZsb2F0aW5nIHBvaW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXhwb3J0ID0gKG9yZGVyOiBudW1iZXIsIGhlYWRlcjogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyA9IG51bGwsIHRhYmxlaWQ6IHN0cmluZyA9IG51bGwpID0+XHJcbiAgKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAoZm9ybWF0KVxyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGNzdkZvcm1hdFByZWZpeCwgeyB2YWx1ZTogZm9ybWF0LCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGNzdk9yZFByZWZpeCwgeyB2YWx1ZTogb3JkZXIsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2VmlzUHJlZml4LCB7IHZhbHVlOiAhIWhlYWRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZIZHJQcmVmaXgsIHsgdmFsdWU6IGhlYWRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgaWYgKHRhYmxlaWQpXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2UHJvcEtleSwgeyB2YWx1ZTogdGFibGVpZCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgIGlmICh0YXJnZXRbZXhwb3J0TGlzdF0pXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XS5wdXNoKHByb3BlcnR5S2V5ICsgY3N2VmlzUHJlZml4KTtcclxuICAgIGVsc2VcclxuICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdID0gW3Byb3BlcnR5S2V5ICsgY3N2VmlzUHJlZml4XVxyXG4gIH07XHJcblxyXG4vKipcclxuICogRGVjb3JhdG9yZSBkaSBlc3BvcnRhemlvbmUgdXRpbGl6emFiaWxlIHN1IHVuIG9nZ2V0dG8uIFxyXG4gKiBQZXIgb2duaSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byB2ZXJyYW5ubyBnZW5lcmF0ZSAzIHByb3ByaWV0w6AgY2hlIGdlc3RpcmFubm8gbCdlc3BvcnRhemlvbmU6IChwcm9wLCBwcm9wX2NzdnZpcywgcHJvcF9jc3ZoZHIpLiBcclxuICogUGVyIGVzc2VyZSBlc3BvcnRhdGUsIGxlIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIGRldm9ubyBlc3NlcmUgbWFyY2F0ZSBjb24gaSBEZWNvcmF0b3JpIGRpIGVzcG9ydGF6aW9uZVxyXG4gKiBcclxuICogQWQgZXNlbXBpbywgZGEgcXVlc3RhIGNvbmZpZ3VyYXppb25lOlxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogYGBgXHJcbiAqIE15T2JqIHtcclxuICogICAgIEBFeHBvcnQodHJ1ZSwgXCJNeUhlYWRlclwiKVxyXG4gKiAgICAgY2lhbzogc3RyaW5nO1xyXG4gKiB9XHJcbiAqIFxyXG4gKiBARXhwb3J0T2JqZWN0KHRydWUsIFwiTXlIZWFkZXJcIilcclxuICogdGVzdDogTXlPYmo7IFxyXG4gKiBgYGBcclxuICogXHJcbiAqIE5hc2NlcmFubm8gbGUgc2VndWVudGkgcHJvcHJpZXTDoCBuZWxsJ29nZ2V0dG8gZXNwb3J0YWJpbGU6XHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBcclxuICogdGVzdGNpYW86IHN0cmluZzsgPT4gVmFsb3JlIGRpIE15T2JqLmNpYW9cclxuICogdGVzdGNpYW9fY3N2dmlzOiBzdHJpbmc7ID0+IHRydWVcclxuICogdGVzdGNpYW9fY3N2aGRyOiBzdHJpbmcgPT4gXCJNeUhlYWRlclwiIFxyXG4gKiBgYGBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IG9yZGVyIE9yZGluZSBkaSBlc3BvcnRhemlvbmUuIFBpw7kgcGljY29sbyDDqCwgcHJpbWEgYXBwYXJlIGlsIHZhbG9yZVxyXG4gKiBAcGFyYW0ge2FueX0gdHlwZSBUaXBvIGRhIGVzcG9ydGFyZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEV4cG9ydEFzID0gKG9yZGVyOiBudW1iZXIsIHR5cGU6IGFueSwgcHJlZml4Pzogc3RyaW5nKSA9PlxyXG4gICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgdmFyIHQgPSBuZXcgdHlwZSgpO1xyXG4gICAgdmFyIHByb3BzID0gdFtleHBvcnRMaXN0XTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHByb3AgPSBwcm9wc1tpXS5yZXBsYWNlKGNzdlZpc1ByZWZpeCwgJycpO1xyXG4gICAgICBpZiAodHlwZW9mIHRbcHJvcCArIGNzdlZpc1ByZWZpeF0gIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICB2YXIgdG9FbWl0OiBib29sZWFuID0gdFtwcm9wICsgY3N2VmlzUHJlZml4XTtcclxuICAgICAgICB2YXIgbGJsID0gdFtwcm9wICsgY3N2SGRyUHJlZml4XTtcclxuICAgICAgICB2YXIgZm9ybWF0ID0gdFtwcm9wICsgY3N2Rm9ybWF0UHJlZml4XTtcclxuICAgICAgICB2YXIgb3JkZXJQcm9wID0gdFtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuICAgICAgICBpZiAoZm9ybWF0KVxyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBwcm9wICsgY3N2Rm9ybWF0UHJlZml4LCB7IHZhbHVlOiBmb3JtYXQsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBwcm9wICsgY3N2T3JkUHJlZml4LCB7IHZhbHVlOiBvcmRlclByb3AgKyBvcmRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgcHJvcCwgeyB2YWx1ZTogbnVsbCwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBwcm9wICsgY3N2VmFsdWVOYXZpZ2F0b3IsIHsgdmFsdWU6IHByb3BlcnR5S2V5ICsgXCIuXCIgKyBwcm9wLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBwcm9wICsgY3N2VmlzUHJlZml4LCB7IHZhbHVlOiB0b0VtaXQsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZIZHJQcmVmaXgsIHsgdmFsdWU6IChwcmVmaXggPyBwcmVmaXggKyAnICcgOiAnJykgKyBsYmwsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZWYWx1ZVR5cGUsIHsgdmFsdWU6IHR5cGUsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRhcmdldFtleHBvcnRMaXN0XSlcclxuICAgICAgICAgIHRhcmdldFtleHBvcnRMaXN0XS5wdXNoKHByb3BlcnR5S2V5ICsgcHJvcCArIGNzdlZpc1ByZWZpeCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdID0gW3Byb3BlcnR5S2V5ICsgcHJvcCArIGNzdlZpc1ByZWZpeF1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4vKipcclxuICogRGVjb3JhdG9yZSBkaSBlc3BvcnRhemlvbmUgdXRpbGl6emFiaWxlIHN1IHVuYSBsaXN0YSwgXHJcbiAqIHNpIHV0aWxpenphbm8gMiBuYXZpZ2F0b3IgcmlzcGV0dGl2YW1lbnRlIHBlciBsYSB2YWxvcml6emF6aW9uZSBkZWxsJ0hlYWRlciBlIGRlbCBWYWxvcmUgZSBcclxuICogcGVyIG9nbmkgZWxlbWVudG8gZGVsbCdhcnJheSB2ZXJyYW5ubyBnZW5lcmF0ZSAzIHByb3ByaWV0w6AgY2hlIGdlc3RpcmFubm8gbCdlc3BvcnRhemlvbmU6IChwcm9wLCBwcm9wX2NzdnZpcywgcHJvcF9jc3ZoZHIpXHJcbiAqIFxyXG4gKiBBVFRFTlpJT05FOiBHbGkgb2dnZXR0aSBlc3BvcnRhdGkgaW4gcXVlc3RhIG1vZGFsaXTDoCBub24gZGV2b25vIHByZXNlbnRhcmUgYWx0cmkgdGFnIGRpIHRpcG8gQEV4cG9ydHsuLi59IGFsbCdpbnRlcm5vLiBGYSB0dXR0byBxdWVzdG8gZGVjb3JhdG9yZVxyXG4gKiBcclxuICogSSBuYXZpZ2F0b3IgaGFubm8gcXVlc3RhIGNvbnZlbnppb25lOlxyXG4gKiBcclxuICogLiAtLT4gZGl2aWRlIGR1ZSBwcm9wcmlldMOgIGRhIHJpY2hpYW1hcmUgY29uc2VjdXRpdmFtZW50ZTogXCJhLmJcIiByaWNoaWFtZXLDoCBcIm9iai5hLmJcIjtcclxuICogXHJcbiAqIHwgLS0+IGRpdmlkZSBwacO5IHByb3ByaWV0w6AgcGVyIGxlIGNvbmNhdGVuYXppb25pIGNvbiB1bm8gc3BhemlvIGZyYSB1bmEgZSBsJ2FsdHJhOiBcInJlZ2Rlc2N8c2xpY2Uuc2xpY2VuYW1lXCIgZGl2ZW50ZXLDoCBvYmoucmVnZGVzYyArIFwiIFwiICsgb2JqLnNsaWNlLnNsaWNlbmFtZVxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IG9yZGVyIE9yZGluZSBkaSBlc3BvcnRhemlvbmUuIFBpw7kgcGljY29sbyDDqCwgcHJpbWEgYXBwYXJlIGlsIHZhbG9yZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVybmF2aWdhdG9yIE5hdmlnYXRvciBjb2wgY29tcGl0byBkaSBzZWxlemlvbmFyZSBpbCB0aXRvbG8gcGVyIGxhIGNvbG9ubmFcclxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlbmF2aWdhdG9yIE5hdmlnYXRvciBjb2wgY29tcGl0byBkaSBzZWxlemlvbmFyZSBpbCB2YWxvcmUgcGVyIGxhIGNvbG9ubmFcclxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlZm9ybWF0IEZvcm1hdG8gZGkgZXNwb3J0YXppb25lIHBlciBpIHZhbG9yaSBzZWxlemlvbmF0aSBkYWwgKip2YWx1ZW5hdmlnYXRvcioqLiBQdcOyIGVzc2VyZSB1biBmb3JtYXRvIGRhdGEgcGVyIGkgY2FtcGkgZGF0YSBvICdGJyBwZXIgaSBjYW1waSBmbG9hdGluZyBwb2ludFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEV4cG9ydExpc3QgPSAob3JkZXI6IG51bWJlciwgaGVhZGVybmF2aWdhdG9yOiBzdHJpbmcsIHZhbHVlbmF2aWdhdG9yOiBzdHJpbmcsIHZhbHVlZm9ybWF0OiBzdHJpbmcgPSBudWxsKSA9PlxyXG4gICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZPcmRQcmVmaXgsIHsgdmFsdWU6IG9yZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGxpc3RDc3ZWYWxQcmVmaXgsIHsgdmFsdWU6IHZhbHVlbmF2aWdhdG9yLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGxpc3RDc3ZIZHJQcmVmaXgsIHsgdmFsdWU6IGhlYWRlcm5hdmlnYXRvciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBsaXN0Q3N2VmFsRm9ybWF0LCB7IHZhbHVlOiB2YWx1ZWZvcm1hdCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgIGlmICh0YXJnZXRbZXhwb3J0TGlzdF0pXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XS5wdXNoKHByb3BlcnR5S2V5ICsgbGlzdENzdkhkclByZWZpeCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XSA9IFtwcm9wZXJ0eUtleSArIGxpc3RDc3ZIZHJQcmVmaXhdXHJcbiAgfTtcclxuXHJcbi8qKlxyXG4gKiBEZWNvcmF0b3JlIGRpIGVzcG9ydGF6aW9uZSB1dGlsaXp6YWJpbGUgc3UgdW4gZGl6aW9uYXJpby4gU2UgYWQgZXNlbXBpbyBzaSB2b2dsaW9ubyBnZW5lcmFyZSBsZSBjb2xvbm5lXHJcbiAqIFxyXG4gKiBWYWxvcmUgQSA9IDFcclxuICogXHJcbiAqIFZhbG9yZSBCID0gMlxyXG4gKiBcclxuICogVmFsb3JlIEMgPSAzXHJcbiAqIFxyXG4gKiBwYXJ0ZW5kbyBkYSB1biBvZ2dldHRvIGluaXppYWxlIHsgVmFsb3JlIHsgQTogMSwgQjogMiwgQzogMyB9IH1cclxuICogXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcmRlciBPcmRpbmUgZGkgZXNwb3J0YXppb25lLiBQacO5IHBpY2NvbG8gw6gsIHByaW1hIGFwcGFyZSBpbCB2YWxvcmVcclxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlcm5hdmlnYXRvciBOYXZpZ2F0b3IgY29sIGNvbXBpdG8gZGkgc2VsZXppb25hcmUgaWwgdGl0b2xvIHBlciBsYSBjb2xvbm5hXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZW5hdmlnYXRvciBOYXZpZ2F0b3IgY29sIGNvbXBpdG8gZGkgc2VsZXppb25hcmUgaWwgdmFsb3JlIHBlciBsYSBjb2xvbm5hXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXhwb3J0RGljdGlvbmFyeSA9IChvcmRlcjogbnVtYmVyLCBoZWFkZXJuYXZpZ2F0b3I6IHN0cmluZywgdmFsdWVuYXZpZ2F0b3I6IHN0cmluZykgPT5cclxuICAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2T3JkUHJlZml4LCB7IHZhbHVlOiBvcmRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBkaWN0aW9uYXJ5Q3N2VmFsUHJlZml4LCB7IHZhbHVlOiB2YWx1ZW5hdmlnYXRvciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBkaWN0aW9uYXJ5Q3N2SGRyUHJlZml4LCB7IHZhbHVlOiBoZWFkZXJuYXZpZ2F0b3IsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuXHJcbiAgICBpZiAodGFyZ2V0W2V4cG9ydExpc3RdKVxyXG4gICAgICB0YXJnZXRbZXhwb3J0TGlzdF0ucHVzaChwcm9wZXJ0eUtleSArIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXgpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0YXJnZXRbZXhwb3J0TGlzdF0gPSBbcHJvcGVydHlLZXkgKyBkaWN0aW9uYXJ5Q3N2SGRyUHJlZml4XVxyXG4gIH07XHJcblxyXG4vKipcclxuICogU2VydmljZSBjaGUgc2kgb2NjdXBhIGRlbGwnZXNwb3J0YXppb25lIGRlZ2xpIG9nZ2V0dGkgbWFyY2F0aSBkYWkgRGVjb3JhdG9yaSAqKkV4cG9ydERpY3Rpb25hcnkqKiwgKipFeHBvcnRMaXN0KiosICoqRXhwb3J0QXMqKiBvICoqRXhwb3J0KipcclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcclxuZXhwb3J0IGNsYXNzIEV4cG9ydFNlcnZpY2Uge1xyXG5cclxuICAvKipcclxuICAgKiBDb3N0cnV0dG9yZVxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlczogRGF0ZVNlcnZpY2UsIHByaXZhdGUgdXRpRXh0czogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgbGM6IExvY2FsaXphdGlvblNlcnZpY2UpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRhIHVuYSBsaXN0YSBkaSBvZ2dldHRpIGdlbmVyYSBnbGkgaGVhZGVyIHBlciBsJ2VzcG9ydGF6aW9uZSBlIGludGVncmEgb2duaSBvZ2dldHRvIGNvbiBsZSBwcm9wcmlldMOgIGVzcG9ydGFiaWxpIGRhbGxhIGxpYnJlcmlhICoqQGN0cmwvbmd4LWNzdioqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnlbXX0gb2JqcyBPZ2dldHRpIGRhIGVzcG9ydGFyZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtDc3ZIZWFkZXJzW119IEhlYWRlciBkaSBlc3BvcnRhemlvbmUgZ2nDoCBvcmRpbmF0aSBjb3JyZXR0YW1lbnRlXHJcbiAgICovXHJcbiAgcHVibGljIHNldHVwRm9yRXhwb3J0KG9ianM6IGFueVtdLCBjb2x1bW5zOiBzdHJpbmdbXSA9IFtdKTogQ3N2SGVhZGVyc1tdIHtcclxuICAgIGxldCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10gPSBbXTtcclxuICAgIGxldCBoZWFkZXJzQ2FjaGUgPSB7fTtcclxuXHJcbiAgICBpZiAoIW9ianMgfHwgb2Jqcy5sZW5ndGggPT0gMClcclxuICAgICAgcmV0dXJuIGhlYWRlcnM7XHJcblxyXG4gICAgLy8gRGV2byBwZXIgZm9yemEgZmFybG8gcGVyIHR1dHRpIGdsaSBvZ2dldHRpIGRhdG8gY2hlIGRldm8gZXNwb3JyZSBsZSBwcm9wcmlldMOgIGNoZSBtaSBzZXJ2b25vIGRhIGVzcG9ydGFyZVxyXG4gICAgLy8gR2xpIGhlYWRlciBsaSByYWNjb2xnbyB0dXR0aSBwb2kgZmFjY2lvIHVhbiBkaXN0aW5jdCBpbiBtb2RvIGRhIGVzcG9ydGFyZSB0dXR0ZSBsZSBwcm9wcmlldMOgIHBlciBiZW5lXHJcbiAgICBsZXQgY29sdW1uU2VsZWN0aW9uRGljdGlvbmFyeTogeyBbaWQ6IHN0cmluZ106IHRydWUgfSA9IHt9O1xyXG5cclxuICAgIGlmIChjb2x1bW5zPy5sZW5ndGggPiAwKVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnM/Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGNvbHVtblNlbGVjdGlvbkRpY3Rpb25hcnlbY29sdW1uc1tpXV0gPSB0cnVlO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Jqcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaGRzID0gdGhpcy5wYXJzZUFuZEdldEhlYWRlcnMob2Jqc1tpXSwgY29sdW1uU2VsZWN0aW9uRGljdGlvbmFyeSk7XHJcbiAgICAgIC8vIEFnZ2l1bmdvIGdsaSBoZWFkZXIgZmFjZW5kbyBpbiBtb2RvIGRpIG5vbiBhZ2dpdW5nZXJuZSBtYWkgZHVlIHVndWFsaSBwZXIgbm9uIGRvdmVyIGZhcmUgdW5hIGRpc3RpbmN0IGRvcG9cclxuICAgICAgLy8gY2hlIGNvc3RlcmViYmUgY29tdW5xdWUgcmlzb3JzZS4gVXRpbGl6em8gdW4gZGl6aW9uYXJpbyBkJ2FwcG9nZ2lvIHBlciBsb29rdXAgaXN0YW50YW5laVxyXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IGhkcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgIGlmICghaGVhZGVyc0NhY2hlW2hkc1trXS5rZXldKSB7XHJcbiAgICAgICAgICBoZWFkZXJzQ2FjaGVbaGRzW2tdLmtleV0gPSB0cnVlO1xyXG4gICAgICAgICAgaGVhZGVycy5wdXNoKGhkc1trXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb2x1bW5zIHx8IGNvbHVtbnMubGVuZ3RoID09IDApXHJcbiAgICAgIHJldHVybiBoZWFkZXJzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBTZSBtaSBhcnJpdmEgbGEgbGlzdGEgZGkgY29sb25uZSBub24gbWkgZMOgIHNvbG8gbGEgdmlzaWJpbGl0w6AsIG1hIGFuY2hlIGwnb3JkaW5hbWVudG9cclxuICAgICAgLy8gbGUgZXNwb3J0byBkaSBjb25zZWd1ZW56YVxyXG4gICAgICBsZXQgb3JkZXJlZEhlYWRlcnMgPSBbXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHRoaXNJZCA9IGNvbHVtbnNbaV07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaGVhZGVyc1tpXS5wcm9wS2V5ID09IHRoaXNJZCkge1xyXG4gICAgICAgICAgICBvcmRlcmVkSGVhZGVycy5wdXNoKGhlYWRlcnNbaV0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9yZGVyZWRIZWFkZXJzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0YSB1bmEgbGlzdGEgZGkgb2dnZXR0aSBnZW5lcmljaSBnZW5lcmEgZ2xpIGhlYWRlciBwZXIgbCdlc3BvcnRhemlvbmUgZSBpbnRlZ3JhIG9nbmkgb2dnZXR0byBjb24gbGUgcHJvcHJpZXTDoCBlc3BvcnRhYmlsaSBkYWxsYSBsaWJyZXJpYSAqKkBjdHJsL25neC1jc3YqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7R2VuZXJpY0l0ZW1bXX0gb2JqcyBPZ2dldHRpIGdlbmVyaWNpIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc1tdfSBjb2x1bW5zIENvbG9ubmUgcmljaGllc3RlIGRhbGwnZXNwb3J0YXppb25lXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge0NzdkhlYWRlcnNbXX0gSGVhZGVyIGRpIGVzcG9ydGF6aW9uZSBnacOgIG9yZGluYXRpIGNvcnJldHRhbWVudGVcclxuICAgKi9cclxuICBwdWJsaWMgc2V0dXBGb3JHZW5lcmljRXhwb3J0KG9ianM6IEdlbmVyaWNJdGVtW10sIGNvbHVtbnM6IENzdkhlYWRlcnNbXSk6IENzdkhlYWRlcnNbXSB7XHJcbiAgICBsZXQgaGVhZGVyczogQ3N2SGVhZGVyc1tdID0gW107XHJcbiAgICBpZiAoIW9ianMgfHwgb2Jqcy5sZW5ndGggPT0gMClcclxuICAgICAgcmV0dXJuIGhlYWRlcnM7XHJcblxyXG4gICAgLy8gRGV2byBwZXIgZm9yemEgZmFybG8gcGVyIHR1dHRpIGdsaSBvZ2dldHRpIGRhdG8gY2hlIGRldm8gZXNwb3JyZSBsZSBwcm9wcmlldMOgIGNoZSBtaSBzZXJ2b25vIGRhIGVzcG9ydGFyZVxyXG4gICAgb2Jqcy5mb3JFYWNoKChvYmosIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpbmRleCA9PSAwKVxyXG4gICAgICAgIGhlYWRlcnMgPSB0aGlzLnBhcnNlQW5kR2V0R2VuZXJpY0hlYWRlcnMob2JqLCBjb2x1bW5zKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMucGFyc2VBbmRHZXRHZW5lcmljSGVhZGVycyhvYmosIGNvbHVtbnMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRvIHVuIG9nZ2V0dG8gZ2VuZXJpY28gZ2VuZXJhIGdsaSBoZWFkZXIgcGVyIGwnZXNwb3J0YXppb25lIGUgbG8gaW50ZWdyYSBjb24gbGUgcHJvcHJpZXTDoCBlc3BvcnRhYmlsaSBkYWxsYSBsaWJyZXJpYSAqKkBjdHJsL25neC1jc3YqKlxyXG4gICAqIFxyXG4gICAqIE1ldG9kbyBpbnRlcm5vIHJpY2hpYW1hdG8gZGEgKipzZXR1cEZvckdlbmVyaWNFeHBvcnQqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7R2VuZXJpY0l0ZW19IG9iaiBPZ2dldHRvIGdlbmVyaWNvIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2Q29sdW1uW119IGNvbHVtbnMgQ29sb25uZSByaWNoaWVzdGUgZGFsbCdlc3BvcnRhemlvbmVcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Q3N2SGVhZGVyc1tdfSBIZWFkZXIgZGkgZXNwb3J0YXppb25lIGdpw6Agb3JkaW5hdGkgY29ycmV0dGFtZW50ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VBbmRHZXRHZW5lcmljSGVhZGVycyhvYmo6IEdlbmVyaWNJdGVtLCBjb2x1bW5zOiBDc3ZIZWFkZXJzW10pOiBDc3ZIZWFkZXJzW10ge1xyXG4gICAgaWYgKCFvYmoucHJvcGVydGllcylcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgdmFyIGhlYWRlcnM6IENzdkhlYWRlcnNbXSA9IFtdO1xyXG5cclxuICAgIC8vTWlyYWNsZSBpbmNvbWluZ1xyXG4gICAgY29sdW1ucy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICB2YXIgcHJvcFZhbHVlID0gb2JqLnByb3BlcnRpZXNbdC5rZXldO1xyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCB0LmtleSArIFwiX2V4cFwiLCB7IHZhbHVlOiBwcm9wVmFsdWUsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWw6IHQubGFiZWwsIGtleTogdC5rZXkgKyBcIl9leHBcIiwgb3JkZXI6IHQub3JkZXIsIHR5cGU6IHQudHlwZSwgcHJvcEtleTogbnVsbCB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vVGlyYXRpIGZ1b3JpIHR1dHRpIGdsaSBoZWFkZXIgZmFjY2lvIHNvcnQgc3VsbCdvcmRpbmFtZW50b1xyXG4gICAgcmV0dXJuIGhlYWRlcnMuc29ydCgoYSwgYikgPT4geyByZXR1cm4gYS5vcmRlciAtIGIub3JkZXIgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRvIHVuIG9nZ2V0dG8gZ2VuZXJhIGdsaSBoZWFkZXIgcGVyIGwnZXNwb3J0YXppb25lIGUgbG8gaW50ZWdyYSBjb24gbGUgcHJvcHJpZXTDoCBlc3BvcnRhYmlsaSBkYWxsYSBsaWJyZXJpYSAqKkBjdHJsL25neC1jc3YqKlxyXG4gICAqIFxyXG4gICAqIE1ldG9kbyBpbnRlcm5vIHJpY2hpYW1hdG8gZGEgKipzZXR1cEZvckV4cG9ydCoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiBPZ2dldHRvIGdlbmVyaWNvIGRhIGVzcG9ydGFyZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtDc3ZIZWFkZXJzW119IEhlYWRlciBkaSBlc3BvcnRhemlvbmUgZ2nDoCBvcmRpbmF0aSBjb3JyZXR0YW1lbnRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUFuZEdldEhlYWRlcnMob2JqOiBhbnksIGNvbHVtbnNTZWxlY3Rpb24/OiB7IFtpZDogc3RyaW5nXTogdHJ1ZSB9KTogQ3N2SGVhZGVyc1tdIHtcclxuICAgIHZhciBoZWFkZXJzOiBDc3ZIZWFkZXJzW10gPSBbXTtcclxuXHJcbiAgICAvLyBNaXJhY2xlIGluY29taW5nXHJcbiAgICBsZXQgZXhwb3J0UHJvcHMgPSBvYmpbZXhwb3J0TGlzdF0gfHwgW107XHJcbiAgICBsZXQgbG9jID0gb2JqW2xvY1Byb3BlcnR5XSA/IHRoaXMubGMuZ2VuZXJhdGVGcm9tVHlwZShvYmpbbG9jUHJvcGVydHldKSA6IG51bGw7XHJcblxyXG4gICAgaWYgKGV4cG9ydFByb3BzLmxlbmd0aCA9PSAwKVxyXG4gICAgICBjb25zb2xlLndhcm4oXCJbQGVzZmFlbnphL2V4dGVuc2lvbnNdIE5lc3N1bmEgY29sb25uYSBjb25maWd1cmF0YSBkYSBlc3BvcnRhcmUhXCIpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwb3J0UHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHByb3AgPSBleHBvcnRQcm9wc1tpXTtcclxuICAgICAgbGV0IHByb3BCYXNlID0gXCJcIjtcclxuICAgICAgbGV0IHRvQ2FsbDogRnVuY3Rpb247XHJcbiAgICAgIGlmIChwcm9wLmVuZHNXaXRoKGxpc3RDc3ZIZHJQcmVmaXgpKSB7XHJcbiAgICAgICAgcHJvcEJhc2UgPSBwcm9wLnJlcGxhY2UobGlzdENzdkhkclByZWZpeCwgJycpO1xyXG4gICAgICAgIHRvQ2FsbCA9IHRoaXMucGFyc2VMaXN0LmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocHJvcC5lbmRzV2l0aChkaWN0aW9uYXJ5Q3N2SGRyUHJlZml4KSkge1xyXG4gICAgICAgIHByb3BCYXNlID0gcHJvcC5yZXBsYWNlKGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXgsICcnKTtcclxuICAgICAgICB0b0NhbGwgPSB0aGlzLnBhcnNlRGljdGlvbmFyeS5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHByb3AuZW5kc1dpdGgoY3N2VmlzUHJlZml4KSkge1xyXG4gICAgICAgIHByb3BCYXNlID0gcHJvcC5yZXBsYWNlKGNzdlZpc1ByZWZpeCwgJycpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqW3Byb3BCYXNlICsgY3N2VmFsdWVOYXZpZ2F0b3JdICE9PSBcInVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgdG9DYWxsID0gdGhpcy5wYXJzZU9iamVjdC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRvQ2FsbCA9IHRoaXMucGFyc2VQcm9wZXJ0eS5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9DYWxsKVxyXG4gICAgICAgIHRvQ2FsbChvYmosIHByb3BCYXNlLCBoZWFkZXJzLCBjb2x1bW5zU2VsZWN0aW9uLCBsb2MpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoZWFkZXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dXAgcGVyIGwnZXNwb3J0YXppb25lIGRpIHVuYSBzaW5nb2xhIHByb3ByaWV0w6AuIFxyXG4gICAqIFZpZW5lIGdlbmVyYXRvIGwnaGVhZGVyIGUgbGEgcHJvcHJpZXTDoCByZWxhdGl2YSBhbCB2YWxvcmUgZm9ybWF0dGF0byBvIG5vXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiBPZ2dldHRvIGRpIGN1aSBlc3BvcnRhcmUgbGEgcHJvcHJpZXTDoCAqKnByb3AqKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3ByaWV0w6AgZGEgZXNwb3J0YXJlXHJcbiAgICogQHBhcmFtIHtDc3ZIZWFkZXJzfSBoZWFkZXJzIENvbnRlbml0b3JlIGRlZ2xpIGhlYWRlciwgdmVycsOgIHJpZW1waXRvIGRhIHF1ZXN0YSBmdW56aW9uZSBcclxuICAgKiBAcGFyYW0ge0xvY2FsaXphdGlvblNlcnZpY2V9IGxvYyBTZXJ2aXppbyBkaSBsb2NhbGl6emF6aW9uZSBjaGUgdHJhZHVjZSB0dXR0aSBpIG5vbWkgY2hlIHB1w7JcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlUHJvcGVydHkob2JqOiBhbnksIHByb3A6IHN0cmluZywgaGVhZGVyczogQ3N2SGVhZGVyc1tdLCBjb2x1bW5zU2VsZWN0aW9uPzogeyBbaWQ6IHN0cmluZ106IHRydWUgfSwgbG9jPzogTG9jYWxpemF0aW9uU2VydmljZSkge1xyXG4gICAgbGV0IHRvRW1pdDogYm9vbGVhbiA9IG9ialtwcm9wICsgY3N2VmlzUHJlZml4XTtcclxuICAgIGxldCBmb3JtYXQ6IHN0cmluZyA9IG9ialtwcm9wICsgY3N2Rm9ybWF0UHJlZml4XTtcclxuICAgIGxldCBwcm9wS2V5ID0gb2JqW3Byb3AgKyBjc3ZQcm9wS2V5XTtcclxuXHJcbiAgICBpZiAocHJvcEtleSAmJiAhY29sdW1uc1NlbGVjdGlvbltwcm9wS2V5XSAmJiBPYmplY3Qua2V5cyhjb2x1bW5zU2VsZWN0aW9uKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiW0Blc2ZhZW56YS9leHRlbnNpb25zXSBDb2xvbm5hIGRhIG5vbiBlc3BvcnRhcmU6IFwiICsgcHJvcEtleSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdGV4dCA9IG9ialtwcm9wICsgY3N2SGRyUHJlZml4XTtcclxuICAgIGxldCBsYWJlbCA9IGxvYyAmJiB0ZXh0ID8gbG9jLmxvYyh0ZXh0KSA6IHRleHQgfHwgXCJcIjtcclxuICAgIGxldCBvcmRlciA9IG9ialtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuXHJcbiAgICBpZiAoIXRvRW1pdClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIC8vIFNlIG5vbiBobyB1biBmb3JtYXRvIGVzcG9ydG8gZGlyZXR0YW1lbnRlXHJcbiAgICBpZiAoIWZvcm1hdCkge1xyXG4gICAgICAvLyBTZSDDqCB1biBmb3JtYXRvIGRhdGEgbWkgYXNzaWN1cm8gZGkgbm9uIHN0YW1wYXJlIG1haSB1bmEgZGF0YSAwMDowMDowMCBhbHRyaW1lbnRpIGluIGVzcG9ydGF6aW9uZSB2aWVuZSB1bm8gc2NoaWZvXHJcbiAgICAgIGxldCB2YWwgPSBvYmpbcHJvcF0gPyB0aGlzLmRhdGVzLnRyaW1TZWNvbmRzKG9ialtwcm9wXS50b1N0cmluZygpKSA6IFwiXCI7XHJcbiAgICAgIGxldCBrZXkgPSBwcm9wICsgXCJfbm9mbXRcIjtcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWwsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWwsIGtleSwgb3JkZXIsIHR5cGU6IFwic3RyaW5nXCIsIHByb3BLZXkgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQga2V5ID0gcHJvcCArIFwiX2ZtdFwiO1xyXG5cclxuICAgICAgLy8gQ2FzbyBmb3JtYXRvIG51bWVyaWNvXHJcbiAgICAgIGlmIChmb3JtYXQgPT0gXCJGXCIpIHtcclxuICAgICAgICAvLyBDaGVjayBjb25zaWRlcmFuZG8gbGEgcG9zc2liaWxpdMOgIGRpIHplcmlcclxuICAgICAgICBsZXQgdmFsID0gb2JqW3Byb3BdICE9IG51bGwgPyBvYmpbcHJvcF0udG9TdHJpbmcoKSA6IFwiXCI7XHJcbiAgICAgICAgLy8gRWxpbWlubyB0dXR0ZSBsZSB2aXJnb2xlIChpbmRpY2F0b3JpIGRpIG1pZ2xpYWlhIHBlciBsYSBjdWx0dXJlIGRlZmF1bHQgZW4tVVMpXHJcbiAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoLywvLCBcIlwiKTtcclxuICAgICAgICAvLyBJbCBzaW5nb2xvIHB1bnRvIGNoZSBjJ8OoLCBzZSBwcmVzZW50ZSAoc2VwYXJhdG9yZSBkZWNpbWFsaSkgbG8gdHJhc2Zvcm1vIGluIHZpcmdvbGFcclxuICAgICAgICBsZXQgdmFsQ29udmVydGVkID0gdmFsLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWxDb252ZXJ0ZWQsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICBoZWFkZXJzLnB1c2goeyBsYWJlbCwga2V5LCBvcmRlciwgdHlwZTogXCJudW1iZXJcIiwgcHJvcEtleSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBTZSBobyB1biBmb3JtYXRvIGRhdGEgdHJhc2Zvcm1vIGluIGRheWpzLCBmb3JtYXR0byBlZCBlc3BvcnRvXHJcbiAgICAgICAgLy8gUGVyIGxhIHRyYXNmb3JtYXppb25lIGluIGRheWpzIHByb3ZvIHByaW1hIGEgcGFzc2FyZ2xpIGxhIHN0cmluZ2EgZGkgbmV0dG8sIHNwZXJhbmRvIGxhIHJpY29ub3NjYVxyXG4gICAgICAgIC8vIFNlIG5vbiBmdW56aW9uYSBwcm92byBhIGRlZmluaXJnbGkgbGEgZm9ybWF0dGF6aW9uZSBzdGFuZGFyZCBkZWwgbWV0ZXJpbmcgcGVyIHF1ZWwgbGluZ3VhZ2dpb1xyXG4gICAgICAgIGxldCB2YWwgPSB0aGlzLmRhdGVzLmdldEZvcm1hdHRlZChvYmpbcHJvcF0sIGZvcm1hdC5sZW5ndGggPD0gMTAsIGZvcm1hdC5sZW5ndGggPiAxNik7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWwgPz8gXCJcIiwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsLCBrZXksIG9yZGVyLCB0eXBlOiBcImRhdGVcIiwgcHJvcEtleSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dXAgcGVyIGwnZXNwb3J0YXppb25lIGRpIHVuYSBzaW5nb2xhIHByb3ByaWV0w6AgZGEgdW4gb2dnZXR0by4gXHJcbiAgICogVmllbmUgZ2VuZXJhdG8gbCdoZWFkZXIgZSBsYSBwcm9wcmlldMOgIHJlbGF0aXZhIGFsIHZhbG9yZSBmb3JtYXR0YXRvIG8gbm8uIFxyXG4gICAqIFxyXG4gICAqIFBlciBvdHRlbmVyZSBpbCB2YWxvcmUgZSBsJ2hlYWRlciBkZWxsYSBwcm9wcmlldMOgIHZlbmdvbm8gdXRpbGl6emF0aSBpIG5hdmlnYXRvcmkgYXV0by1nZW5lcmF0aSBuZWwgZGVjb3JhdG9yZSAqKkV4cG9ydEFzKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gb2JqIE9nZ2V0dG8gZGkgY3VpIGVzcG9ydGFyZSBsYSBwcm9wcmlldMOgICoqcHJvcCoqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcHJpZXTDoCBkYSBlc3BvcnRhcmVcclxuICAgKiBAcGFyYW0ge0NzdkhlYWRlcnN9IGhlYWRlcnMgQ29udGVuaXRvcmUgZGVnbGkgaGVhZGVyLCB2ZXJyw6AgcmllbXBpdG8gZGEgcXVlc3RhIGZ1bnppb25lIFxyXG4gICAqIEBwYXJhbSB7TG9jYWxpemF0aW9uU2VydmljZX0gbG9jIFNlcnZpemlvIGRpIGxvY2FsaXp6YXppb25lIGNoZSB0cmFkdWNlIHR1dHRpIGkgbm9taSBjaGUgcHXDslxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VPYmplY3Qob2JqOiBhbnksIHByb3A6IHN0cmluZywgaGVhZGVyczogQ3N2SGVhZGVyc1tdLCBjb2x1bW5zU2VsZWN0aW9uPzogeyBbaWQ6IHN0cmluZ106IHRydWUgfSAsIGxvYz86IExvY2FsaXphdGlvblNlcnZpY2UpIHtcclxuICAgIC8vc2UgcXVlc3RhIHByb3ByaWV0w6AgaGEgdW4gbmF2aWdhdG9yIHNpZ25pZmljYSBjaGUgZGVyaXZhIGRhIHVuIG9nZ2V0dG8gaW50ZXJubywgcmVjdXBlcm8gaWwgdmFsb3JlIGluIHF1ZXN0YSBmYXNlIGRhdG8gY2hlIHByaW1hIG5vbiBjZSBsJ2hvXHJcbiAgICBsZXQgdmFsdWVuYXZpZ2F0b3IgPSBvYmpbcHJvcCArIGNzdlZhbHVlTmF2aWdhdG9yXTtcclxuXHJcbiAgICAvL0VzLiBkaSB2YWx1ZW5hdmlnYXRvciBvYmouc3Vib2JqLnN1YnN1Ym9iai5wcm9wZXJ0eVxyXG4gICAgbGV0IGptcHMgPSB2YWx1ZW5hdmlnYXRvci5zcGxpdChcIi5cIik7XHJcblxyXG4gICAgLy8gTG9jYWxpenphemlvbmUgcHJlc2EgZGFsbGEgY2xhc3NlIGJhc2Ugc2UgYyfDqCwgYWx0cmltZW50aSBkYWxsYSBjbGFzc2UgaW50ZXJuYSAoY2lvw6ggZGFsIHByaW1vIHNhbHRpbm8pXHJcbiAgICBpZiAoIWxvYykge1xyXG4gICAgICBsZXQgdHlwZSA9IG9ialtwcm9wICsgY3N2VmFsdWVUeXBlXTtcclxuICAgICAgbGV0IHByb3RvID0gbmV3IHR5cGUoKTtcclxuICAgICAgbG9jID0gcHJvdG9bbG9jUHJvcGVydHldO1xyXG4gICAgfVxyXG5cclxuICAgIC8vTWkgY2xvbm8gbCdvZ2dldHRvIG9yaWdpbmFsZSBwZXIgbm9uIHVjY2lkZXJnbGkgaSByaWZlcmltZW50aVxyXG4gICAgbGV0IGNsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICAgIC8vU2FsdG8gcmljb3JzaXZhbWVudGUgc3UgbWUgc3Rlc3NvIHBlciBhcnJpdmFyZSBhbGxhIHByb3ByaWV0w6BcclxuICAgIC8vU2FsdG8gMSA+IGRpdmVudGEgb2JqXHJcbiAgICAvL1NhbHRvIDIgPiBkaXZlbnRhIG9iai5zdWJvYmpcclxuICAgIC8vZWNjLi4uXHJcbiAgICBqbXBzLmZvckVhY2gocHAgPT4geyBjbG9uZSA9IGNsb25lW3BwXTsgfSk7XHJcblxyXG4gICAgLy9WYWxvcmUgZmluYWxlIDpEXHJcbiAgICBsZXQgdmFsdWUgPSBjbG9uZTtcclxuXHJcbiAgICBsZXQgdGV4dCA9IG9ialtwcm9wICsgY3N2SGRyUHJlZml4XTtcclxuICAgIGxldCBsYWJlbCA9IGxvYyAmJiB0ZXh0ID8gbG9jLmxvYyh0ZXh0KSA6IHRleHQgfHwgXCJcIjtcclxuICAgIGxldCBvcmRlciA9IG9ialtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuXHJcbiAgICAvL1NlIHBlciBxdWVzdGEgcHJvcHJpZXTDoCBobyB1biBmb3JtYXRvIGxvIGFwcGxpY29cclxuICAgIGxldCBmb3JtYXQ6IHN0cmluZyA9IG9ialtwcm9wICsgY3N2Rm9ybWF0UHJlZml4XTtcclxuICAgIGxldCB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2RhdGUnID0gXCJzdHJpbmdcIjtcclxuICAgIGlmIChmb3JtYXQgPT0gXCJGXCIpIHtcclxuICAgICAgbGV0IHZhbCA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKC8sLywgXCJcIik7XHJcbiAgICAgIHZhbHVlID0gdmFsLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuICAgICAgdHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3JtYXQpIHtcclxuICAgICAgdmFsdWUgPSB0aGlzLmRhdGVzLmdldEZvcm1hdHRlZCh2YWx1ZSwgZm9ybWF0Lmxlbmd0aCA8PSAxMCwgZm9ybWF0Lmxlbmd0aCA+IDE2KTtcclxuICAgICAgdHlwZSA9IFwiZGF0ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHsgdmFsdWU6IHZhbHVlID8/IFwiXCIsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsLCBrZXk6IHByb3AsIG9yZGVyLCB0eXBlLCBwcm9wS2V5OiBudWxsIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dXAgcGVyIGwnZXNwb3J0YXppb25lIGRpIHVuYSBsaXN0YSBkaSB2YWxvcmkgcGl2b3R0YXRpIGRpbmFtaWNhbWVudGU6XHJcbiAgICogXHJcbiAgICogPT4gUmVjdXBlcm8gaWwgdmFsb3JlIHV0aWxpenphbmRvIGkgbmF2aWdhdG9yaVxyXG4gICAqIFxyXG4gICAqID0+IFJlY3VwZXJvIGwnaGVhZGVyIHV0aWxpenphbmRvIGkgbmF2aWdhdG9yaVxyXG4gICAqIFxyXG4gICAqID0+IENvbiBpbCB2YWxvcmUgY2kgY3JlbyBsYSBwcm9wZXJ0eVxyXG4gICAqIFxyXG4gICAqID0+IENvbiBsJ2hlYWRlciBlIGlsIHJpZmVyaW1lbnRvIGFsbGEgcHJvcGVydHkgYXBwZW5hIGNyZWF0YSBjcmVvIHVuIHJlY29yZCBuZWdsaSBoZWFkZXIgZGEgZXNwb3J0YXJlXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiBPZ2dldHRvIGRpIGN1aSBlc3BvcnRhcmUgbGEgcHJvcHJpZXTDoCAqKnByb3AqKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3ByaWV0w6AgZGEgZXNwb3J0YXJlXHJcbiAgICogQHBhcmFtIHtDc3ZIZWFkZXJzfSBoZWFkZXJzIENvbnRlbml0b3JlIGRlZ2xpIGhlYWRlciwgdmVycsOgIHJpZW1waXRvIGRhIHF1ZXN0YSBmdW56aW9uZSBcclxuICAgKiBAcGFyYW0ge0xvY2FsaXphdGlvblNlcnZpY2V9IGxvYyBTZXJ2aXppbyBkaSBsb2NhbGl6emF6aW9uZSBjaGUgdHJhZHVjZSB0dXR0aSBpIG5vbWkgY2hlIHB1w7JcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlTGlzdChvYmo6IGFueSwgcHJvcDogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10sIGxvYz86IExvY2FsaXphdGlvblNlcnZpY2UpIHtcclxuICAgIGxldCBoZWFkZXJuYXZpZ2F0b3IgPSBvYmpbcHJvcCArIGxpc3RDc3ZIZHJQcmVmaXhdO1xyXG4gICAgbGV0IHZhbHVlbmF2aWdhdG9yID0gb2JqW3Byb3AgKyBsaXN0Q3N2VmFsUHJlZml4XTtcclxuICAgIGxldCB2YWx1ZWZvcm1hdCA9IG9ialtwcm9wICsgbGlzdENzdlZhbEZvcm1hdF07XHJcbiAgICBsZXQgb3JkZXIgPSBvYmpbcHJvcCArIGNzdk9yZFByZWZpeF07XHJcblxyXG4gICAgdmFyIGp1bXBzOiBzdHJpbmdbXSwgdG1wUmVzOiBhbnk7XHJcbiAgICB2YXIgb2JqczogYW55W10gPSBvYmpbcHJvcF07XHJcblxyXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgb2Jqcy5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgIGxldCBsaXN0aXRlbSA9IG9ianNbaWR4XTtcclxuXHJcbiAgICAgIHZhciBoZWFkZXJzcGxpdCA9IGhlYWRlcm5hdmlnYXRvci5zcGxpdChcIiBcIik7XHJcbiAgICAgIHZhciBsYWJlbCA9IFwiXCI7XHJcblxyXG4gICAgICAvLyBQZXIgbCdoZWFkZXIgc2kgY29uc2lkZXJhIGEgc2Ugc3RhbnRlIG9nbmkgcGV6em8gc2VwYXJhdG8gZGEgc3BhemlvIHBlciBmYXJlIGxlIGNvbmNhdGVuYXppb25pXHJcbiAgICAgIGhlYWRlcnNwbGl0LmZvckVhY2gocHIgPT4ge1xyXG4gICAgICAgIGp1bXBzID0gcHIuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIHRtcFJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGlzdGl0ZW0pKTtcclxuICAgICAgICBqdW1wcy5mb3JFYWNoKHBwID0+IHsgdG1wUmVzID0gdG1wUmVzW3BwXTsgfSk7XHJcblxyXG4gICAgICAgIGlmICghbGFiZWwpIGxhYmVsID0gISFsb2MgPyBsb2MubG9jKHRtcFJlcykgOiB0bXBSZXM7XHJcbiAgICAgICAgZWxzZSBsYWJlbCArPSBcIiBcIiArICEhbG9jID8gbG9jLmxvYyh0bXBSZXMpIDogdG1wUmVzO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGp1bXBzID0gdmFsdWVuYXZpZ2F0b3Iuc3BsaXQoXCIuXCIpO1xyXG4gICAgICB0bXBSZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGxpc3RpdGVtKSk7XHJcbiAgICAgIGp1bXBzLmZvckVhY2gocHAgPT4geyB0bXBSZXMgPSB0bXBSZXNbcHBdOyB9KTtcclxuICAgICAgbGV0IHZhbHVlID0gdG1wUmVzO1xyXG5cclxuICAgICAgbGV0IHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnZGF0ZScgPSBcInN0cmluZ1wiO1xyXG4gICAgICBpZiAodmFsdWVmb3JtYXQgPT0gXCJGXCIpIHtcclxuICAgICAgICBsZXQgdmFsID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLnRvU3RyaW5nKCkgOiBcIlwiO1xyXG4gICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKC8sLywgXCJcIik7XHJcbiAgICAgICAgdmFsdWUgPSB2YWwucmVwbGFjZShcIi5cIiwgXCIsXCIpO1xyXG4gICAgICAgIHR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHZhbHVlZm9ybWF0KSB7XHJcbiAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVzLmdldEZvcm1hdHRlZChvYmpbcHJvcF0sIHZhbHVlZm9ybWF0Lmxlbmd0aCA8PSAxMCwgdmFsdWVmb3JtYXQubGVuZ3RoID4gMTYpO1xyXG4gICAgICAgIHR5cGUgPSBcImRhdGVcIjtcclxuICAgICAgfVxyXG5cclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCArIGlkeCwgeyB2YWx1ZTogdmFsdWUgPz8gXCJcIiwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgICBoZWFkZXJzLnB1c2goeyBsYWJlbCwga2V5OiBwcm9wICsgaWR4LCBvcmRlcjogb3JkZXIgKyBpZHgsIHR5cGUsIHByb3BLZXk6IG51bGwgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR1cCBwZXIgbCdlc3BvcnRhemlvbmUgZGkgdW5hIGxpc3RhIGRpIHZhbG9yaSBwaXZvdHRhdGkgZGluYW1pY2FtZW50ZTpcclxuICAgKiBcclxuICAgKiA9PiBSZWN1cGVybyBpbCB2YWxvcmUgdXRpbGl6emFuZG8gaSBuYXZpZ2F0b3JpXHJcbiAgICogXHJcbiAgICogPT4gUmVjdXBlcm8gbCdoZWFkZXIgdXRpbGl6emFuZG8gaSBuYXZpZ2F0b3JpXHJcbiAgICogXHJcbiAgICogPT4gQ29uIGlsIHZhbG9yZSBjaSBjcmVvIGxhIHByb3BlcnR5XHJcbiAgICogXHJcbiAgICogPT4gQ29uIGwnaGVhZGVyIGUgaWwgcmlmZXJpbWVudG8gYWxsYSBwcm9wZXJ0eSBhcHBlbmEgY3JlYXRhIGNyZW8gdW4gcmVjb3JkIG5lZ2xpIGhlYWRlciBkYSBlc3BvcnRhcmVcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gb2JqIE9nZ2V0dG8gZGkgY3VpIGVzcG9ydGFyZSBsYSBwcm9wcmlldMOgICoqcHJvcCoqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcHJpZXTDoCBkYSBlc3BvcnRhcmVcclxuICAgKiBAcGFyYW0ge0NzdkhlYWRlcnN9IGhlYWRlcnMgQ29udGVuaXRvcmUgZGVnbGkgaGVhZGVyLCB2ZXJyw6AgcmllbXBpdG8gZGEgcXVlc3RhIGZ1bnppb25lXHJcbiAgICogQHBhcmFtIHtMb2NhbGl6YXRpb25TZXJ2aWNlfSBsb2MgU2Vydml6aW8gZGkgbG9jYWxpenphemlvbmUgY2hlIHRyYWR1Y2UgdHV0dGkgaSBub21pIGNoZSBwdcOyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZURpY3Rpb25hcnkob2JqOiBhbnksIHByb3A6IHN0cmluZywgaGVhZGVyczogQ3N2SGVhZGVyc1tdLCBsb2M/OiBMb2NhbGl6YXRpb25TZXJ2aWNlKSB7XHJcbiAgICBsZXQgaGVhZGVybmF2aWdhdG9yID0gb2JqW3Byb3AgKyBkaWN0aW9uYXJ5Q3N2SGRyUHJlZml4XTtcclxuICAgIGxldCB2YWx1ZW5hdmlnYXRvciA9IG9ialtwcm9wICsgZGljdGlvbmFyeUNzdlZhbFByZWZpeF07XHJcbiAgICBsZXQgb3JkZXIgPSBvYmpbcHJvcCArIGNzdk9yZFByZWZpeF07XHJcblxyXG4gICAgdmFyIGp1bXBzOiBzdHJpbmdbXSwgdG1wUmVzOiBhbnk7XHJcbiAgICB2YXIgb2JqczogYW55W10gPSBvYmpbcHJvcF07XHJcblxyXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgb2Jqcy5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgIGxldCBsaXN0aXRlbSA9IG9ianNbaWR4XTtcclxuICAgICAgdmFyIGhlYWRlcnNwbGl0ID0gaGVhZGVybmF2aWdhdG9yLnNwbGl0KFwiIFwiKTtcclxuICAgICAgdmFyIGxhYmVsID0gXCJcIjtcclxuXHJcbiAgICAgIGhlYWRlcnNwbGl0LmZvckVhY2gocHIgPT4ge1xyXG4gICAgICAgIGp1bXBzID0gcHIuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIHRtcFJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGlzdGl0ZW0pKTtcclxuICAgICAgICBqdW1wcy5mb3JFYWNoKHBwID0+IHsgdG1wUmVzID0gdG1wUmVzW3BwXTsgfSk7XHJcblxyXG4gICAgICAgIGlmICghbGFiZWwpIGxhYmVsID0gISFsb2MgPyBsb2MubG9jKHRtcFJlcykgOiB0bXBSZXM7XHJcbiAgICAgICAgZWxzZSBsYWJlbCArPSBcIiBcIiArICEhbG9jID8gbG9jLmxvYyh0bXBSZXMpIDogdG1wUmVzO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHZhciB2YWx1ZXNwbGl0ID0gdmFsdWVuYXZpZ2F0b3Iuc3BsaXQoXCIsXCIpO1xyXG4gICAgICB2YWx1ZXNwbGl0LmZvckVhY2goKHQsIGlkeGludGVybmFsKSA9PiB7XHJcbiAgICAgICAgdmFyIG5hdmlnID0gdC5zcGxpdChcIi1cIilbMV07XHJcbiAgICAgICAgdmFyIGRlc2MgPSB0LnNwbGl0KFwiLVwiKVswXTtcclxuXHJcbiAgICAgICAganVtcHMgPSBuYXZpZy5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgdG1wUmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsaXN0aXRlbSkpO1xyXG4gICAgICAgIGp1bXBzLmZvckVhY2gocHAgPT4geyB0bXBSZXMgPSB0bXBSZXNbcHBdOyB9KTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0bXBSZXM7XHJcblxyXG4gICAgICAgIGxldCBwcm9wbmFtZSA9IHByb3AgKyBpZHgudG9TdHJpbmcoKSArIGlkeGludGVybmFsLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcG5hbWUsIHsgdmFsdWU6IHZhbHVlID8/IFwiXCIsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICBoZWFkZXJzLnB1c2goeyBsYWJlbDogbGFiZWwgKyBcIiBcIiArICEhbG9jID8gbG9jLmxvYyhkZXNjKSA6IGRlc2MsIGtleTogcHJvcG5hbWUsIG9yZGVyOiBvcmRlciArIGlkeCwgdHlwZTogJ3N0cmluZycsIHByb3BLZXk6IG51bGwgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFxyXG4gICAqIEVmZmV0dHVhIGwnZXNwb3J0YXppb25lIGluIGZpbGUgQ1NWIFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZXhwb3J0Q1NWKGZuOiBzdHJpbmcsIGhlYWRlcnM6IENzdkhlYWRlcnNbXSwgZGF0YTogYW55W10pIHtcclxuICAgIGxldCBjc3ZEYXRhID0gJycsIHJvdyA9ICcnLCBzZXAgPSAnOyc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBoID0gaGVhZGVyc1tpXTtcclxuICAgICAgcm93ICs9IGAke3JvdyAhPSAnJyA/IHNlcCA6ICcnfVwiJHtoLmxhYmVsfVwiYDtcclxuICAgIH1cclxuICAgIGNzdkRhdGEgKz0gcm93ICsgJ1xcclxcbic7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHJvdyA9ICcnO1xyXG4gICAgICBsZXQgaXRlbSA9IGRhdGFbaV07XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaGVhZGVycy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGxldCB2YWwgPSBpdGVtW2hlYWRlcnNbal0ua2V5XTtcclxuICAgICAgICByb3cgKz0gYCR7cm93ICE9ICcnID8gc2VwIDogJyd9XCIke3ZhbH1cImA7XHJcbiAgICAgIH1cclxuICAgICAgY3N2RGF0YSArPSByb3cgKyAnXFxyXFxuJztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgQk9NID0gbmV3IFVpbnQ4QXJyYXkoWzB4RUYsMHhCQiwweEJGXSk7XHJcbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtCT00sIGNzdkRhdGFdLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XHJcbiAgICB2YXIgb2JqZWN0VXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIHRoaXMudXRpRXh0cy5maWxlRG93bmxvYWQob2JqZWN0VXJsLCBmbi5lbmRzV2l0aCgnLnhsc3gnKSA/IGZuLnJlcGxhY2UoJy54bHN4JywgJy5jc3YnKSA6IGZuLmVuZHNXaXRoKCcuY3N2JykgPyBmbiA6IGZuICsgXCIuY3N2XCIpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKiBDYWNoZSBkZWwgbW9kdWxvIHBlciBsJ2VzcG9ydGF6aW9uZSBFeGNlbCAqL1xyXG4gIHByaXZhdGUgRXhjZWxKUzogYW55O1xyXG5cclxuICAvKiogRWZmZXR0dWEgbCdlc3BvcnRhemlvbmUgZGVsIGZpbGUgRXhjZWwgYmFzYW5kb3NpIHN1bCBtb2R1bG8gKipFeGNlbEpTKiosIHN1Z2xpIGhlYWRlciAqKmhlYWRlcnMqKiBlIHN1aSBkYXRpICoqZGF0YSoqICovXHJcbiAgcHJpdmF0ZSBhc3luYyBleHBvcnRFeGNlbChmbjogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10sIGRhdGE6IGFueVtdKSB7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5FeGNlbEpTID0gdGhpcy5FeGNlbEpTIHx8IGF3YWl0IGltcG9ydChcImV4Y2VsanNcIik7XHJcbiAgICB9XHJcbiAgICBjYXRjaCB7XHJcbiAgICAgIHRocm93IFwiSW1wb3NzaWJpbGUgY2FyaWNhcmUgbGEgbGlicmVyaWEgcGVyIGwnZXNwb3J0YXppb25lIGluIEV4Y2VsXCI7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGlGaXggPSAxO1xyXG4gICAgbGV0IHdvcmtib29rID0gbmV3IHRoaXMuRXhjZWxKUy5Xb3JrYm9vaygpO1xyXG4gICAgd29ya2Jvb2suY3JlYXRvciA9IFwiRW1hJ3MgYmlnIEVzLVRhYmxlXCI7XHJcbiAgICB3b3JrYm9vay5jcmVhdGVkID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICBsZXQgc2hlZXQgPSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQoJ0RhdGEnKTtcclxuICAgIGxldCBoZWFkZXIgPSBzaGVldC5nZXRSb3coMSk7XHJcbiAgICBoZWFkZXIuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc29ydCgoYTogQ3N2SGVhZGVycywgYjogQ3N2SGVhZGVycykgPT4gYS5vcmRlciAtIGIub3JkZXIpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaCA9IGhlYWRlcnNbaV07XHJcbiAgICAgIGhlYWRlci5nZXRDZWxsKGkgKyBpRml4KS52YWx1ZSA9IGgubGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCByb3cgPSBzaGVldC5nZXRSb3coaSArIGlGaXggKyAxKTtcclxuICAgICAgbGV0IGl0ZW0gPSBkYXRhW2ldO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgaCA9IGhlYWRlcnNbaV07XHJcbiAgICAgICAgbGV0IGNlbGwgPSByb3cuZ2V0Q2VsbChpICsgMSk7XHJcbiAgICAgICAgbGV0IHZhbCA9IGl0ZW1baC5rZXldO1xyXG5cclxuICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgY2VsbC52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAoaC50eXBlKSB7XHJcbiAgICAgICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICAgICAgLy8gRXhjZWxKUyB2YSBkaSBkZWZhdWx0IGluIFVUQyBxdWluZGkgcmlzY2hpZXJlYmJlIGRpIHRpcmFyZSBnacO5IDIgb3JlIGFkIG9nbmkgZXNwb3J0YXppb25lXHJcbiAgICAgICAgICAgIC8vIEJpc29nbmEgYWdnaXVuZ2VyZSBsJ3V0YyBvZmZzZXQgYWxsYSBkYXRhIGF0dHVhbGVcclxuICAgICAgICAgICAgbGV0IGRhdGUgPSB0aGlzLmRhdGVzLmdldERhdGVDb252ZXJ0aW9uKHZhbCk7XHJcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNvcnJlY3RlZERhdGUgPSBkYXRlLmFkZChkYXRlLnV0Y09mZnNldCgpLCAnbWludXRlJyk7XHJcbiAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGNvcnJlY3RlZERhdGUudG9EYXRlKCk7XHJcbiAgICAgICAgICAgICAgY2VsbC5udW1GbXQgPSB2YWwubGVuZ3RoID4gMTAgPyAnZGQvbW0veXl5eSBoOm06cycgOiAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgICAgIGxldCBjb252ZXJ0ZWQgPSBwYXJzZUZsb2F0KHZhbC5yZXBsYWNlKCcsJywgJy4nKSk7XHJcbiAgICAgICAgICAgIGNlbGwudmFsdWUgPSBpc05hTihjb252ZXJ0ZWQpID8gXCJcIiA6IGNvbnZlcnRlZDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBjZWxsLnZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgYnVmZmVyID0gYXdhaXQgd29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpO1xyXG4gICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O1wiIH0pO1xyXG4gICAgbGV0IG9iamVjdFVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICB0aGlzLnV0aUV4dHMuZmlsZURvd25sb2FkKG9iamVjdFVybCwgZm4uZW5kc1dpdGgoJy5jc3YnKSA/IGZuLnJlcGxhY2UoJy5jc3YnLCAnLnhsc3gnKSA6IGZuLmVuZHNXaXRoKCcueGxzeCcpID8gZm4gOiBmbiArIFwiLnhsc3hcIik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIGVmZmV0dGl2YW1lbnRlIGdlbmVyYSBnbGkgaGVhZGVyIGUgaSBkYXRpIHBlciBsJ2VzcG9ydGF6aW9uZSBjb24gKipuZ3gtY3N2KipcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgZGEgZXNwb3J0YXJlXHJcbiAgICovXHJcbiAgcHVibGljIGV4cG9ydChpdGVtczogYW55W10sIGZvcm1hdDogJ0NTVicgfCAnWExTWCcsIGZpbGVOYW1lOiBzdHJpbmcsIHR5cGU6IFR5cGU8YW55PiwgY29sdW1uc0ZpbHRlcj86IHN0cmluZ1tdLCBnZW5lcmljSGVhZGVycz86IENzdkhlYWRlcnNbXSkge1xyXG4gICAgdmFyIGNyZWF0ZWRJdGVtcyA9IGl0ZW1zLm1hcCh0ID0+IHtcclxuICAgICAgbGV0IHRtcCA9IG5ldyB0eXBlKCk7XHJcbiAgICAgIGZvcihsZXQgcHJvcGVydHkgaW4gdCkgdG1wW3Byb3BlcnR5XSA9IHRbcHJvcGVydHldO1xyXG4gICAgICByZXR1cm4gdG1wO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGhlYWRlcnMgPSBnZW5lcmljSGVhZGVycyA/IHRoaXMuc2V0dXBGb3JHZW5lcmljRXhwb3J0KGNyZWF0ZWRJdGVtcywgZ2VuZXJpY0hlYWRlcnMpIDogdGhpcy5zZXR1cEZvckV4cG9ydChjcmVhdGVkSXRlbXMsIGNvbHVtbnNGaWx0ZXIpO1xyXG4gICAgKGZvcm1hdCA9PSBcIkNTVlwiID8gdGhpcy5leHBvcnRDU1YgOiB0aGlzLmV4cG9ydEV4Y2VsKS5iaW5kKHRoaXMpKGZpbGVOYW1lLCBoZWFkZXJzLCBjcmVhdGVkSXRlbXMpO1xyXG4gIH1cclxufSJdfQ==
@@ -974,7 +974,7 @@ class ExportService {
974
974
  * @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione
975
975
  * @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può
976
976
  */
977
- parseObject(obj, prop, headers, loc) {
977
+ parseObject(obj, prop, headers, columnsSelection, loc) {
978
978
  //se questa proprietà ha un navigator significa che deriva da un oggetto interno, recupero il valore in questa fase dato che prima non ce l'ho
979
979
  let valuenavigator = obj[prop + csvValueNavigator];
980
980
  //Es. di valuenavigator obj.subobj.subsubobj.property