ontimize-web-ngx 15.0.0-beta.4 → 15.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/form/navigation/o-form.navigation.class.mjs +5 -2
- package/esm2020/lib/components/form/o-form.component.mjs +11 -2
- package/esm2020/lib/components/grid/o-grid.component.mjs +11 -1
- package/esm2020/lib/components/image/o-image.component.mjs +3 -3
- package/esm2020/lib/components/index.mjs +2 -1
- package/esm2020/lib/components/input/combo/combo-search/o-combo-search.component.mjs +3 -3
- package/esm2020/lib/components/input/currency-input/o-currency-input.component.mjs +4 -4
- package/esm2020/lib/components/input/file-input/o-file-input.component.mjs +2 -18
- package/esm2020/lib/components/input/o-form-service-component.class.mjs +7 -9
- package/esm2020/lib/components/o-service-component.class.mjs +3 -6
- package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +26 -4
- package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +20 -4
- package/esm2020/lib/components/table/o-table.component.mjs +4 -1
- package/esm2020/lib/components/tree/header/index.mjs +2 -0
- package/esm2020/lib/components/tree/header/tree-menu/o-tree-menu.component.mjs +33 -0
- package/esm2020/lib/components/tree/index.mjs +5 -0
- package/esm2020/lib/components/tree/o-tree-dao.service.mjs +43 -0
- package/esm2020/lib/components/tree/o-tree.component.mjs +523 -0
- package/esm2020/lib/components/tree/o-tree.datasource.mjs +79 -0
- package/esm2020/lib/components/tree/o-tree.module.mjs +24 -0
- package/esm2020/lib/components/tree/tree-node/tree-node.component.mjs +49 -0
- package/esm2020/lib/config/o-modules.mjs +8 -6
- package/esm2020/lib/directives/o-mat-error.directive.mjs +4 -1
- package/esm2020/lib/i18n/i18n.mjs +17 -8
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager-base.class.mjs +1 -1
- package/esm2020/lib/ontimize-web-ngx.module.mjs +4 -3
- package/esm2020/lib/services/permissions/o-permissions.module.mjs +1 -3
- package/esm2020/lib/services/permissions/permissions.service.mjs +18 -8
- package/esm2020/lib/services/state/o-tree-component-state.class.mjs +4 -0
- package/esm2020/lib/services/state/o-tree-component-state.service.mjs +50 -0
- package/fesm2015/ontimize-web-ngx.mjs +6441 -5678
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +6424 -5665
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/form/o-form.component.d.ts +4 -1
- package/lib/components/grid/o-grid.component.d.ts +1 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/input/file-input/o-file-input.component.d.ts +1 -1
- package/lib/components/table/extensions/header/table-menu/o-table-menu.component.d.ts +5 -0
- package/lib/components/table/o-table.component.d.ts +1 -1
- package/lib/components/tree/header/index.d.ts +1 -0
- package/lib/components/tree/header/tree-menu/o-tree-menu.component.d.ts +13 -0
- package/lib/components/tree/index.d.ts +4 -0
- package/lib/components/tree/o-tree-dao.service.d.ts +18 -0
- package/lib/components/tree/o-tree.component.d.ts +111 -0
- package/lib/components/tree/o-tree.datasource.d.ts +22 -0
- package/lib/components/tree/o-tree.module.d.ts +14 -0
- package/lib/components/tree/tree-node/tree-node.component.d.ts +14 -0
- package/lib/i18n/i18n.d.ts +9 -0
- package/lib/layouts/form-layout/o-form-layout-manager-base.class.d.ts +1 -0
- package/lib/ontimize-web-ngx.module.d.ts +2 -1
- package/lib/services/state/o-tree-component-state.class.d.ts +3 -0
- package/lib/services/state/o-tree-component-state.service.d.ts +13 -0
- package/package.json +1 -1
- package/theme.scss +2 -2
- package/theming/ontimize-style-v8.scss +2 -1
- package/theming/styles/density.scss +6 -2
- package/theming/styles/ontimize-v8/o-form-field-style.scss +6 -3
- package/theming/themes/ontimize-black-yellow.scss +13 -3
|
@@ -1204,6 +1204,9 @@ export class OTableComponent extends AbstractOServiceComponent {
|
|
|
1204
1204
|
selectedItems.forEach(item => {
|
|
1205
1205
|
this.selection.deselect(item);
|
|
1206
1206
|
});
|
|
1207
|
+
if (this.formLayoutManager) {
|
|
1208
|
+
this.formLayoutManager.closeDetails(filters, { exitWithoutConfirmation: true });
|
|
1209
|
+
}
|
|
1207
1210
|
this.reloadData();
|
|
1208
1211
|
}
|
|
1209
1212
|
});
|
|
@@ -2667,4 +2670,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
2667
2670
|
type: ContentChild,
|
|
2668
2671
|
args: [OTableContextMenuComponent, { static: true }]
|
|
2669
2672
|
}] } });
|
|
2670
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9vLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL28tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0YsT0FBTyxFQUdMLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBR04sUUFBUSxFQUNSLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsRUFFakIsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsYUFBYSxFQUFFLEVBQUUs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LEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFHOUMsY0FBYztzQkFEYixTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBaUIvQyxVQUFVO3NCQURULFNBQVM7dUJBQUMsV0FBVztnQkFJdEIsWUFBWTtzQkFEWCxlQUFlO3VCQUFDLHFCQUFxQjtnQkFNdEMsWUFBWTtzQkFEWCxlQUFlO3VCQUFDLHFCQUFxQjtnQkFJdEMsdUJBQXVCO3NCQUR0QixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFLckQsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQjtnQkFJL0IsZ0NBQWdDO3NCQUQvQixZQUFZO3VCQUFDLDhCQUE4QjtnQkFPNUMsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFO2dCQStCakMsdUJBQXVCO3NCQUR0QixZQUFZO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ2hhbmdlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIFZpZXdSZWYsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRNZW51IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0VGFiLCBNYXRUYWJHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRG9tUG9ydGFsT3V0bGV0LCBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQm9vbGVhbkNvbnZlcnRlciwgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHR5cGUgeyBJT0NvbnRleHRNZW51Q29udGV4dCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby1jb250ZXh0LW1lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlQnV0dG9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWJ1dHRvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVCdXR0b25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWJ1dHRvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlQ29sdW1uc0dyb3VwaW5nIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWNvbHVtbnMtZ3JvdXBpbmctaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1kYXRhc291cmNlLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZU1lbnUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtbWVudS5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlUGFnaW5hdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLXBhZ2luYXRvci5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVRdWlja2ZpbHRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1xdWlja2ZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NlcnZpY2UtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLCBPX0NPTVBPTkVOVF9TVEFURV9TRVJWSUNFLCBPbnRpbWl6ZVNlcnZpY2VQcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zbmFja2Jhci5zZXJ2aWNlJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudFN0YXRlQ2xhc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLXRhYmxlLWNvbXBvbmVudC1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLXRhYmxlLWNvbXBvbmVudC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9Db2x1bW5EaXNwbGF5LCBPRmlsdGVyRGVmaW5pdGlvbiwgT0dyb3VwZWRDb2x1bW5UeXBlcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi90eXBlcy9leHByZXNzaW9uLnR5cGUnO1xuaW1wb3J0IHsgT1Blcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvby1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IE9RdWVyeURhdGFBcmdzIH0gZnJvbSAnLi4vLi4vdHlwZXMvcXVlcnktZGF0YS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgUXVpY2tGaWx0ZXJGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL3F1aWNrLWZpbHRlci1mdW5jdGlvbi50eXBlJztcbmltcG9ydCB7IFNRTE9yZGVyIH0gZnJvbSAnLi4vLi4vdHlwZXMvc3FsLW9yZGVyLnR5cGUnO1xuaW1wb3J0IHsgT0NvbHVtbkFnZ3JlZ2F0ZSB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tY29sdW1uLWFnZ3JlZ2F0ZS50eXBlJztcbmltcG9ydCB7IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IsIE9Db2x1bW5WYWx1ZUZpbHRlciB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tY29sdW1uLXZhbHVlLWZpbHRlci50eXBlJztcbmltcG9ydCB7IFRhYmxlRmlsdGVyQnlDb2x1bW5EaWFsb2dSZXN1bHQgfSBmcm9tICcuLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4tZGF0YS50eXBlJztcbmltcG9ydCB7IE9UYWJsZUdsb2JhbENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tdGFibGUtZ2xvYmFsLWNvbmZpZy50eXBlJztcbmltcG9ydCB7IE9UYWJsZUluaXRpYWxpemF0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tdGFibGUtaW5pdGlhbGl6YXRpb24tb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IE9UYWJsZU1lbnVQZXJtaXNzaW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tdGFibGUtbWVudS1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IE9UYWJsZVBlcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUvby10YWJsZS1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IE9ic2VydmFibGVXcmFwcGVyIH0gZnJvbSAnLi4vLi4vdXRpbC9hc3luYyc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvblV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9maWx0ZXItZXhwcmVzc2lvbi51dGlscyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1V0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBTZXJ2aWNlVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL3NlcnZpY2UudXRpbHMnO1xuaW1wb3J0IHsgU1FMVHlwZXMgfSBmcm9tICcuLi8uLi91dGlsL3NxbHR5cGVzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0NvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vY29udGV4dG1lbnUvby1jb250ZXh0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9vLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQgfSBmcm9tICcuLi9vLXNlcnZpY2UtY29tcG9uZW50LmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUNvbHVtbkNhbGN1bGF0ZWRDb21wb25lbnQgfSBmcm9tICcuL2NvbHVtbi9jYWxjdWxhdGVkL28tdGFibGUtY29sdW1uLWNhbGN1bGF0ZWQuY29tcG9uZW50JztcbmltcG9ydCB7IE9CYXNlVGFibGVDZWxsUmVuZGVyZXIgfSBmcm9tICcuL2NvbHVtbi9jZWxsLXJlbmRlcmVyL28tYmFzZS10YWJsZS1jZWxsLXJlbmRlcmVyLmNsYXNzJztcbmltcG9ydCB7IE9Db2x1bW4gfSBmcm9tICcuL2NvbHVtbi9vLWNvbHVtbi5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL2NvbHVtbi9vLXRhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvY29udGV4dG1lbnUvby10YWJsZS1jb250ZXh0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IERlZmF1bHRPVGFibGVPcHRpb25zIH0gZnJvbSAnLi9leHRlbnNpb25zL2RlZmF1bHQtby10YWJsZS1vcHRpb25zLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUZpbHRlckJ5Q29sdW1uRGF0YURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9kaWFsb2cvZmlsdGVyLWJ5LWNvbHVtbi9vLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4tZGF0YS1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE9CYXNlVGFibGVQYWdpbmF0b3IgfSBmcm9tICcuL2V4dGVuc2lvbnMvZm9vdGVyL3BhZ2luYXRvci9vLWJhc2UtdGFibGUtcGFnaW5hdG9yLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtYnV0dG9uL28tdGFibGUtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVDb2x1bW5TZWxlY3RBbGxEaXJlY3RpdmUgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWNvbHVtbi1zZWxlY3QtYWxsL28tdGFibGUtY29sdW1uLXNlbGVjdC1hbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7IE9GaWx0ZXJDb2x1bW4gfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWNvbHVtbnMtZmlsdGVyL2NvbHVtbnMvby10YWJsZS1jb2x1bW5zLWZpbHRlci1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWNvbHVtbnMtZmlsdGVyL28tdGFibGUtY29sdW1ucy1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtY29sdW1ucy1ncm91cGluZy9jb2x1bW5zL28tdGFibGUtY29sdW1ucy1ncm91cGluZy1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtaGVhZGVyL28tdGFibGUtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb25zL2hlYWRlci90YWJsZS1pbnNlcnRhYmxlLXJvdy9vLXRhYmxlLWluc2VydGFibGUtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLW9wdGlvbi9vLXRhYmxlLW9wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlRGF0YVNvdXJjZVNlcnZpY2UgfSBmcm9tICcuL2V4dGVuc2lvbnMvby10YWJsZS1kYXRhc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RhYmxlVmlydHVhbFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnLi9leHRlbnNpb25zL28tdGFibGUtc3RyYXRlZ3kuc2VydmljZSc7XG5pbXBvcnQgeyBPVGFibGVEYW8gfSBmcm9tICcuL2V4dGVuc2lvbnMvby10YWJsZS5kYW8nO1xuaW1wb3J0IHsgT1RhYmxlR3JvdXBlZFJvdyB9IGZyb20gJy4vZXh0ZW5zaW9ucy9yb3cvby10YWJsZS1yb3ctZ3JvdXAuY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlUm93RXhwYW5kYWJsZUNvbXBvbmVudCwgT1RhYmxlUm93RXhwYW5kZWRDaGFuZ2UgfSBmcm9tICcuL2V4dGVuc2lvbnMvcm93L3RhYmxlLXJvdy1leHBhbmRhYmxlL28tdGFibGUtcm93LWV4cGFuZGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9NYXRTb3J0IH0gZnJvbSAnLi9leHRlbnNpb25zL3NvcnQvby1tYXQtc29ydCc7XG5pbXBvcnQgeyBPVGFibGVCYXNlIH0gZnJvbSAnLi9vLXRhYmxlLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT19UQUJMRV9HTE9CQUxfQ09ORklHIH0gZnJvbSAnLi91dGlscy9vLXRhYmxlLnRva2Vucyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX1RBQkxFID0gW1xuICAvLyB2aXNpYmxlLWNvbHVtbnMgW3N0cmluZ106IHZpc2libGUgY29sdW1ucywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICd2aXNpYmxlQ29sdW1uczogdmlzaWJsZS1jb2x1bW5zJyxcblxuICAvLyB2aXNpYmxlLWNvbHVtbnMtYnktZGVmYXVsdCBbc3RyaW5nXTogY29sdW1ucyB0aGF0IGFyZSB2aXNpYmxlIGJ5IGRlZmF1bHQsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnZGVmYXVsdFZpc2libGVDb2x1bW5zOiBkZWZhdWx0LXZpc2libGUtY29sdW1ucycsXG5cbiAgLy8gZWRpdGFibGUtY29sdW1ucyBbc3RyaW5nXTogY29sdW1ucyB0aGF0IGNhbiBiZSBlZGl0ZWQgZGlyZWN0bHkgb3ZlciB0aGUgdGFibGUsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAvLyAnZWRpdGFibGVDb2x1bW5zOiBlZGl0YWJsZS1jb2x1bW5zJyxcblxuICAvLyBzb3J0LWNvbHVtbnMgW3N0cmluZ106IGluaXRpYWwgc29ydGluZywgd2l0aCB0aGUgZm9ybWF0IGNvbHVtbjpbQVNDfERFU0NdLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3NvcnRDb2x1bW5zOiBzb3J0LWNvbHVtbnMnLFxuXG4gICdxdWlja0ZpbHRlckNhbGxiYWNrOiBxdWljay1maWx0ZXItZnVuY3Rpb24nLFxuXG4gIC8vIGRlbGV0ZS1idXR0b24gW25vfHllc106IHNob3cgZGVsZXRlIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnZGVsZXRlQnV0dG9uOiBkZWxldGUtYnV0dG9uJyxcblxuICAvLyByZWZyZXNoLWJ1dHRvbiBbbm98eWVzXTogc2hvdyByZWZyZXNoIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAncmVmcmVzaEJ1dHRvbjogcmVmcmVzaC1idXR0b24nLFxuXG4gIC8vIGNvbHVtbnMtdmlzaWJpbGl0eS1idXR0b24gW25vfHllc106IHNob3cgY29sdW1ucyB2aXNpYmlsaXR5IGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnY29sdW1uc1Zpc2liaWxpdHlCdXR0b246IGNvbHVtbnMtdmlzaWJpbGl0eS1idXR0b24nLFxuXG4gIC8vIC8vIGNvbHVtbnMtcmVzaXplLWJ1dHRvbiBbbm98eWVzXTogc2hvdyBjb2x1bW5zIHJlc2l6ZSBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgLy8gJ2NvbHVtbnNSZXNpemVCdXR0b246IGNvbHVtbnMtcmVzaXplLWJ1dHRvbicsXG5cbiAgLy8gLy8gY29sdW1ucy1ncm91cC1idXR0b24gW25vfHllc106IHNob3cgY29sdW1ucyBncm91cCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgLy8gJ2NvbHVtbnNHcm91cEJ1dHRvbjogY29sdW1ucy1ncm91cC1idXR0b24nLFxuXG4gIC8vIGV4cG9ydC1idXR0b24gW25vfHllc106IHNob3cgZXhwb3J0IGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnZXhwb3J0QnV0dG9uOiBleHBvcnQtYnV0dG9uJyxcblxuICAvLyBzaG93LWNvbmZpZ3VyYXRpb24tb3B0aW9uIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgY29uZmlndXJhdGlvbiBidXR0b24gaW4gaGVhZGVyLiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93Q29uZmlndXJhdGlvbk9wdGlvbjogc2hvdy1jb25maWd1cmF0aW9uLW9wdGlvbicsXG5cbiAgLy8gc2hvdy1idXR0b25zLXRleHQgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyB0ZXh0IG9mIGhlYWRlciBidXR0b25zLiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93QnV0dG9uc1RleHQ6IHNob3ctYnV0dG9ucy10ZXh0JyxcblxuICAvLyBzZWxlY3QtYWxsLWNoZWNrYm94IFt5ZXN8bm98dHJ1ZXxmYWxzZV06ICBzaG93IGluIHRoZSBtZW51IHRoZSBvcHRpb24gb2Ygc2VsZWN0aW9uIGNoZWNrIGJveGVzIC4gRGVmYXVsdDogbm8uXG4gICdzZWxlY3RBbGxDaGVja2JveDogc2VsZWN0LWFsbC1jaGVja2JveCcsXG5cbiAgLy8gcGFnaW5hdGlvbi1jb250cm9scyBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHBhZ2luYXRpb24gY29udHJvbHMuIERlZmF1bHQ6IHllcy5cbiAgJ3BhZ2luYXRpb25Db250cm9sczogcGFnaW5hdGlvbi1jb250cm9scycsXG5cbiAgLy8gZml4LWhlYWRlciBbeWVzfG5vfHRydWV8ZmFsc2VdOiBmaXhlZCBoZWFkZXIgYW5kIGZvb3RlciB3aGVuIHRoZSBjb250ZW50IGlzIGdyZWF0aGVyIHRoYW4gaXRzIG93biBoZWlnaHQuIERlZmF1bHQ6IHllcy5cbiAgJ2ZpeGVkSGVhZGVyOiBmaXhlZC1oZWFkZXInLFxuXG4gIC8vIHNob3ctdGl0bGUgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyB0aGUgdGFibGUgdGl0bGUuIERlZmF1bHQ6IG5vLlxuICAnc2hvd1RpdGxlOiBzaG93LXRpdGxlJyxcblxuICAvLyBlZGl0aW9uLW1vZGUgW25vbmUgfCBpbmxpbmUgfCBjbGljayB8IGRibGNsaWNrXTogZWRpdGlvbiBtb2RlLiBEZWZhdWx0IG5vbmVcbiAgJ2VkaXRpb25Nb2RlOiBlZGl0aW9uLW1vZGUnLFxuXG4gIC8vIHNlbGVjdGlvbi1tb2RlIFtub25lIHwgc2ltcGxlIHwgbXVsdGlwbGUgXTogc2VsZWN0aW9uIG1vZGUuIERlZmF1bHQgbXVsdGlwbGVcbiAgJ3NlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbi1tb2RlJyxcblxuICAnaG9yaXpvbnRhbFNjcm9sbDogaG9yaXpvbnRhbC1zY3JvbGwnLFxuXG4gICdzaG93UGFnaW5hdG9yRmlyc3RMYXN0QnV0dG9uczogc2hvdy1wYWdpbmF0b3ItZmlyc3QtbGFzdC1idXR0b25zJyxcblxuICAnYXV0b0FsaWduVGl0bGVzOiBhdXRvLWFsaWduLXRpdGxlcycsXG5cbiAgJ211bHRpcGxlU29ydDogbXVsdGlwbGUtc29ydCcsXG4gIC8vIHNlbGVjdC1hbGwtY2hlY2tib3gtdmlzaWJsZSBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHNlbGVjdGlvbiBjaGVjayBib3hlcy5EZWZhdWx0OiBuby5cbiAgJ3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZTogc2VsZWN0LWFsbC1jaGVja2JveC12aXNpYmxlJyxcblxuICAnb3JkZXJhYmxlJyxcblxuICAncmVzaXphYmxlJyxcblxuICAna2VlcFNlbGVjdGVkSXRlbXM6IGtlZXAtc2VsZWN0ZWQtaXRlbXMnLFxuXG4gIC8vIGV4cG9ydC1tb2RlIFsndmlzaWJsZSd8J2xvY2FsJ3wnYWxsJ106IHNldHMgdGhlIG1vZGUgdG8gZXhwb3J0IGRhdGEuIERlZmF1bHQ6ICd2aXNpYmxlJ1xuICAnZXhwb3J0TW9kZTogZXhwb3J0LW1vZGUnLFxuXG4gIC8vIGV4cG9ydFNlcnZpY2VUeXBlIFsgc3RyaW5nIF06IFRoZSBzZXJ2aWNlIHVzZWQgYnkgdGhlIHRhYmxlIGZvciBleHBvcnRpbmcgaXQncyBkYXRhLCBpdCBtdXN0IGltcGxlbWVudCAnSUV4cG9ydFNlcnZpY2UnIGludGVyZmFjZS4gRGVmYXVsdDogJ09udGltaXplRXhwb3J0U2VydmljZSdcbiAgJ2V4cG9ydFNlcnZpY2VUeXBlOiBleHBvcnQtc2VydmljZS10eXBlJyxcblxuICAvLyBhdXRvLWFkanVzdCBbdHJ1ZXxmYWxzZV06IEF1dG8gYWRqdXN0IGNvbHVtbiB3aWR0aCB0byBmaXQgaXRzIGNvbnRlbnQuIERlZmF1bHQ6IHRydWVcbiAgJ2F1dG9BZGp1c3Q6IGF1dG8tYWRqdXN0JyxcblxuICAvLyBzaG93LWZpbHRlci1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBmaWx0ZXIgbWVudSBvcHRpb24gaW4gdGhlIGhlYWRlciBtZW51LiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93RmlsdGVyT3B0aW9uOiBzaG93LWZpbHRlci1vcHRpb24nLFxuXG4gIC8vIHZpc2libGUtZXhwb3J0LWRpYWxvZy1idXR0b25zIFtzdHJpbmddOiB2aXNpYmxlIGJ1dHRvbnMgaW4gZXhwb3J0IGRpYWxvZywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdC9ubyBjb25maWd1cmVkOiBzaG93IGFsbC4gRW1wdHkgdmFsdWU6IGhpZGUgYWxsLlxuICAndmlzaWJsZUV4cG9ydERpYWxvZ0J1dHRvbnM6IHZpc2libGUtZXhwb3J0LWRpYWxvZy1idXR0b25zJyxcblxuICAvLyByb3ctY2xhc3MgW2Z1bmN0aW9uLCAocm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgfCBzdHJpbmdbXV06IGFkZHMgdGhlIGNsYXNzIG9yIGNsYXNzZXMgcmV0dXJuZWQgYnkgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHRvIHRoZSB0YWJsZSByb3dzLlxuICAncm93Q2xhc3M6IHJvdy1jbGFzcycsXG5cbiAgLy8gZmlsdGVyLWNvbHVtbi1hY3RpdmUtYnktZGVmYXVsdCBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IGljb24gZmlsdGVyIGJ5IGRlZmF1bHQgaW4gdGhlIHRhYmxlLiBEZWZhdWx0Onllc1xuICAnZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0OmZpbHRlci1jb2x1bW4tYWN0aXZlLWJ5LWRlZmF1bHQnLFxuXG4gIC8vIGdyb3VwZWQtY29sdW1ucyBbc3RyaW5nXTogZ3JvdXBlZCBjb2x1bW5zIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnZ3JvdXBlZENvbHVtbnM6IGdyb3VwZWQtY29sdW1ucycsXG5cbiAgLy8gZ3JvdXBhYmxlW2Jvb2xlYW5dOiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGNvbHVtbiBjYW4gYmUgZ3JvdXBhYmxlLiBCeSBkZWZhdWx0OiB0cnVlXG4gICdncm91cGFibGUnLFxuXG4gIC8vIGV4cGFuZC1ncm91cHMtc2FtZS1sZXZlbFtib29sZWFuXTogSW5kaWNhdGVzIGlmIGNsaWNrIGluIHJvdyBleHBhbmRzL2NvbGxhcHNlcyBhbGwgcm93cyBvbiBzYW1lIGxldmVsLiBCeSBkZWZhdWx0OiB0cnVlXG4gICdleHBhbmRHcm91cHNTYW1lTGV2ZWw6IGV4cGFuZC1ncm91cHMtc2FtZS1sZXZlbCcsXG5cbiAgLy8gY29sbGFwc2UtZ3JvdXBlZC1jb2x1bW5zIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IFdoZXRoZXIgY29sbGFwc2UgdGhlIGdyb3VwZWQgY29sdW1ucyBieSBkZWZhdWx0XG4gICdjb2xsYXBzZUdyb3VwZWRDb2x1bW5zOiBjb2xsYXBzZS1ncm91cGVkLWNvbHVtbnMnLFxuXG4gIC8vIHZpcnR1YWwtc2Nyb2xsIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IFdoZXRoZXIgZW5hYmxlZCBvciBub3QgdGhlIHZpcnR1YWwgc2Nyb2xsXG4gICd2aXJ0dWFsU2Nyb2xsOiB2aXJ0dWFsLXNjcm9sbCcsXG5cbiAgLy9jb250ZXh0LW1lbnUgW3llc3xub3x0cnVlfGZhbHNlXTogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIHRhYmxlIGNvbnRleHQgbWVudVxuICAnY29udGV4dE1lbnU6IGNvbnRleHQtbWVudScsXG5cbiAgLy8gc2hvdy1leHBhbmRhYmxlLWljb24tZnVuY3Rpb24gW2Z1bmN0aW9uXTogRXhwYW5kYWJsZSBmdW5jdGlvbiB0byBjaGVjayBpZiBleHBhbmRhYmxlIGhhcyBkYXRhIHRvIHNob3cgb3Igbm90IGljb25cbiAgJ3Nob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uOiBzaG93LWV4cGFuZGFibGUtaWNvbi1mdW5jdGlvbicsXG5cbiAgLy8gc2hvdy1yZXBvcnQtb24tZGVtYW5kLW9wdGlvbiBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHJlcG9ydCBvbiBkZW1hbmQgb3B0aW9uIGluIHRoZSB0YWJsZSBtZW51LiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93UmVwb3J0T25EZW1hbmRPcHRpb246IHNob3ctcmVwb3J0LW9uLWRlbWFuZC1vcHRpb24nLFxuXG4gIC8vIHNob3ctY2hhcnRzLW9uLWRlbWFuZC1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBjaGFydHMgb24gZGVtYW5kIG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dDaGFydHNPbkRlbWFuZE9wdGlvbjogc2hvdy1jaGFydHMtb24tZGVtYW5kLW9wdGlvbicsXG5cbiAgLy8gc2hvdy1yZXNldC13aWR0aC1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyByZXNldCB3aWR0aCBtZW51IG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dSZXNldFdpZHRoT3B0aW9uOiBzaG93LXJlc2V0LXdpZHRoLW9wdGlvbicsXG5cbiAgJ2Rpc2FibGVTZWxlY3Rpb25GdW5jdGlvbjogZGlzYWJsZS1zZWxlY3Rpb24tZnVuY3Rpb24nXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fVEFCTEUgPSBbXG4gICdvblJvd1NlbGVjdGVkJyxcbiAgJ29uUm93RGVzZWxlY3RlZCcsXG4gICdvblJvd0RlbGV0ZWQnXG5dO1xuXG5jb25zdCBzdGlja3lIZWFkZXJTZWxlY3RvciA9ICcubWF0LW1kYy1oZWFkZXItcm93IC5tYXQtbWRjLXRhYmxlLXN0aWNreSc7XG5jb25zdCBzdGlja3lGb290ZXJTZWxlY3RvciA9ICcubWF0LW1kYy1mb290ZXItcm93IC5tYXQtbWRjLXRhYmxlLXN0aWNreSc7XG5jb25zdCByb3dTZWxlY3RvciA9ICcubWF0LW1kYy1yb3cnO1xuY29uc3QgaGVhZGVyU2VsZWN0b3IgPSAnLm1hdC1tZGMtaGVhZGVyLXJvdyc7XG5jb25zdCBmb290ZXJTZWxlY3RvciA9ICcubWF0LW1kYy1oZWFkZXItcm93JztcblxudHlwZSBEaXNhYmxlU2VsZWN0aW9uRnVuY3Rpb24gPSAoaXRlbTogYW55KSA9PiBib29sZWFuO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIE9udGltaXplU2VydmljZVByb3ZpZGVyLFxuICAgIENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLFxuICAgIE9UYWJsZURhdGFTb3VyY2VTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogT19DT01QT05FTlRfU1RBVEVfU0VSVklDRSwgdXNlQ2xhc3M6IE9UYWJsZUNvbXBvbmVudFN0YXRlU2VydmljZSB9LFxuICAgIHsgcHJvdmlkZTogVklSVFVBTF9TQ1JPTExfU1RSQVRFR1ksIHVzZUNsYXNzOiBPVGFibGVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3kgfSxcbiAgICB7IHByb3ZpZGU6IE9UYWJsZUJhc2UsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE9UYWJsZUNvbXBvbmVudCkgfVxuICBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcgfSkpLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkJywgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJykpLFxuICAgIF0pXG4gIF0sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19UQUJMRSxcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fVEFCTEUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLXRhYmxlXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLm9udGltaXplLXRhYmxlXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLm8tdGFibGUtZml4ZWRdJzogJ2ZpeGVkSGVhZGVyJyxcbiAgICAnW2NsYXNzLm8tdGFibGUtZGlzYWJsZWRdJzogJyFlbmFibGVkJyxcbiAgICAnKGRvY3VtZW50OmNsaWNrKSc6ICdoYW5kbGVET01DbGljaygkZXZlbnQpJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQ8T1RhYmxlQ29tcG9uZW50U3RhdGVTZXJ2aWNlPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgcHVibGljIHN0YXRpYyBERUZBVUxUX0JBU0VfU0laRV9TUElOTkVSID0gMTAwO1xuICBwdWJsaWMgc3RhdGljIEZJUlNUX0xBU1RfQ0VMTF9QQURESU5HID0gMjQ7XG4gIHB1YmxpYyBzdGF0aWMgRVhQQU5ERURfUk9XX0NPTlRBSU5FUl9DTEFTUyA9ICdleHBhbmRlZC1yb3ctY29udGFpbmVyLSc7XG4gIHB1YmxpYyBzdGF0aWMgQVZBSUxBQkxFX0dST1VQSU5HX0NPTFVNTlNfUkVOREVSRVJTID0gWydjdXJyZW5jeScsICdpbnRlZ2VyJywgJ3JlYWwnXTtcblxuICBwdWJsaWMgREVUQUlMX01PREVfTk9ORSA9IENvZGVzLkRFVEFJTF9NT0RFX05PTkU7XG4gIHB1YmxpYyBFRElUX01PREVfTk9ORSA9IENvZGVzLkVESVRJT05fTU9ERV9OT05FO1xuXG4gIHByb3RlY3RlZCBzbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZTtcblxuICBwdWJsaWMgcGFnaW5hdG9yOiBPVGFibGVQYWdpbmF0b3I7XG5cbiAgQFZpZXdDaGlsZChPTWF0U29ydCkgc29ydDogT01hdFNvcnQ7XG5cbiAgcHVibGljIHZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIHB1YmxpYyBvVGFibGVHbG9iYWxDb25maWc6IE9UYWJsZUdsb2JhbENvbmZpZztcbiAgQFZpZXdDaGlsZCgndmlydHVhbFNjcm9sbFZpZXdQb3J0Jykgc2V0IGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCh2YWx1ZTogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgaWYgKHZhbHVlICE9IHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCA9IHZhbHVlO1xuICAgICAgdGhpcy51cGRhdGVIZWFkZXJBbmRGb290ZXJTdGlja3lQb3NpdGlvbnMoKTtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmlld3BvcnRTaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24gPSB0aGlzLmNoZWNrVmlld1BvcnRTdWJqZWN0LnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0RGF0YXNvdXJjZSgpO1xuICAgICAgdGhpcy5yZWdpc3RlclNvcnRMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG9ubHkgZm9yIGluc2lkZVRhYkJ1Z1dvcmthcm91bmRcbiAgcHJvdGVjdGVkIHRhYmxlSGVhZGVyczogQXJyYXk8T1RhYmxlSGVhZGVyQ29tcG9uZW50PiA9IFtdO1xuXG4gIEBWaWV3Q2hpbGQoJ3NwaW5uZXJDb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgc3Bpbm5lckNvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICBAQ29udGVudENoaWxkKE9UYWJsZVJvd0V4cGFuZGFibGVDb21wb25lbnQpXG4gIHRhYmxlUm93RXhwYW5kYWJsZTogT1RhYmxlUm93RXhwYW5kYWJsZUNvbXBvbmVudDtcblxuICBfZmlsdGVyQ29sdW1uczogQXJyYXk8T0ZpbHRlckNvbHVtbj47XG4gIHBvcnRhbEhvc3Q6IEFycmF5PERvbVBvcnRhbE91dGxldD4gPSBbXTtcbiAgb25EYXRhTG9hZGVkQ2VsbFJlbmRlcmVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IGRpYW1ldGVyU3Bpbm5lcigpIHtcbiAgICBjb25zdCBtaW5IZWlnaHQgPSBPVGFibGVDb21wb25lbnQuREVGQVVMVF9CQVNFX1NJWkVfU1BJTk5FUjtcbiAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICBpZiAodGhpcy5zcGlubmVyQ29udGFpbmVyICYmIHRoaXMuc3Bpbm5lckNvbnRhaW5lci5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBoZWlnaHQgPSB0aGlzLnNwaW5uZXJDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuICAgIGlmIChoZWlnaHQgPiAwICYmIGhlaWdodCA8PSAxMDApIHtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGhlaWdodCAtIChoZWlnaHQgKiAwLjEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pbkhlaWdodDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdGFibGVDb250ZXh0TWVudTogT0NvbnRleHRNZW51Q29tcG9uZW50O1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzZWxlY3RBbGxDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dDb25maWd1cmF0aW9uT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGNvbHVtbnNWaXNpYmlsaXR5QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dGaWx0ZXJPcHRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dDaGFydHNPbkRlbWFuZE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93QnV0dG9uc1RleHQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0OiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dSZXNldFdpZHRoT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBFeHBhbmRhYmxlIGlucHV0IGNhbGxiYWNrIGZ1bmN0aW9uXG4gIHNob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uOiAocm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBwcm90ZWN0ZWQgX29UYWJsZU9wdGlvbnM6IE9UYWJsZU9wdGlvbnM7XG5cbiAgZ2V0IG9UYWJsZU9wdGlvbnMoKTogT1RhYmxlT3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuX29UYWJsZU9wdGlvbnM7XG4gIH1cblxuICBzZXQgb1RhYmxlT3B0aW9ucyh2YWx1ZTogT1RhYmxlT3B0aW9ucykge1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCBxdWlja0ZpbHRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHZhbHVlID0gVXRpbC5wYXJzZUJvb2xlYW4oU3RyaW5nKHZhbHVlKSk7XG4gICAgdGhpcy5fcXVpY2tGaWx0ZXIgPSB2YWx1ZTtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmZpbHRlciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHF1aWNrRmlsdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9xdWlja0ZpbHRlcjtcbiAgfVxuXG4gIHNldCBmaWx0ZXJDYXNlU2Vuc2l0aXZlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZmlsdGVyQ2FzZVNlbnNpdGl2ZSA9IEJvb2xlYW5Db252ZXJ0ZXIodmFsdWUpO1xuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUgPSB0aGlzLl9maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXJDYXNlU2Vuc2l0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICB9XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGluc2VydEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICByZWZyZXNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGRlbGV0ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBmaXhlZEhlYWRlcjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93VGl0bGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZWRpdGlvbk1vZGU6IHN0cmluZyA9IENvZGVzLkVESVRJT05fTU9ERV9OT05FO1xuICBzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgPSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9NVUxUSVBMRTtcblxuICBwcm90ZWN0ZWQgX2hvcml6b250YWxTY3JvbGwgPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNldCBob3Jpem9udGFsU2Nyb2xsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faG9yaXpvbnRhbFNjcm9sbCA9IEJvb2xlYW5Db252ZXJ0ZXIodmFsdWUpO1xuICAgIHRoaXMucmVmcmVzaENvbHVtbnNXaWR0aEZyb21PcmlnaW5hbERlZmluaXRpb24oKTtcbiAgfVxuXG4gIGdldCBob3Jpem9udGFsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9ob3Jpem9udGFsU2Nyb2xsO1xuICB9XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dQYWdpbmF0b3JGaXJzdExhc3RCdXR0b25zOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGF1dG9BbGlnblRpdGxlczogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBtdWx0aXBsZVNvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgb3JkZXJhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHJlc2l6YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBhdXRvQWRqdXN0OiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGdyb3VwYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBleHBhbmRHcm91cHNTYW1lTGV2ZWw6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgY29sbGFwc2VHcm91cGVkQ29sdW1uczogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgdmlydHVhbFNjcm9sbDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBjb250ZXh0TWVudTogYm9vbGVhbiA9IHRydWU7XG4gIC8vIE1haW50YWluaW5nIHRoaXMgZ2V0dGVyIHRvIGFsbG93IGNvbXBvbmVudCBleHRlbnNpb25zIChhdm9pZGluZyBhIGJyZWFraW5nIGNoYW5nZSlcbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub2VuYWJsZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIF9zZWxlY3RBbGxDaGVja2JveFZpc2libGU6IGJvb2xlYW47XG4gIHNldCBzZWxlY3RBbGxDaGVja2JveFZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zZWxlY3RBbGxDaGVja2JveFZpc2libGUgPSBCb29sZWFuQ29udmVydGVyKHZhbHVlKTtcbiAgICBpZiAodGhpcy5zdGF0ZSkge1xuICAgICAgdGhpcy5fc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlID0gQm9vbGVhbkNvbnZlcnRlcih0aGlzLnN0YXRlLnNlbGVjdENvbHVtblZpc2libGUpO1xuICAgIH1cbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gdGhpcy5fc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNoZWNrYm94Q29sdW1uKCk7XG4gIH1cblxuICBnZXQgc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RBbGxDaGVja2JveFZpc2libGU7XG4gIH1cblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAga2VlcFNlbGVjdGVkSXRlbXM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHB1YmxpYyBleHBvcnRNb2RlOiBzdHJpbmcgPSBDb2Rlcy5FWFBPUlRfTU9ERV9WSVNJQkxFO1xuICBwdWJsaWMgZXhwb3J0U2VydmljZVR5cGU6IHN0cmluZztcbiAgcHVibGljIHZpc2libGVFeHBvcnREaWFsb2dCdXR0b25zOiBzdHJpbmc7XG4gIHB1YmxpYyBkYW9UYWJsZTogT1RhYmxlRGFvIHwgbnVsbDtcbiAgcHVibGljIGRhdGFTb3VyY2U6IE9UYWJsZURhdGFTb3VyY2UgfCBudWxsO1xuICBwdWJsaWMgdmlzaWJsZUNvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIHNlYXJjaGVhYmxlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGRlZmF1bHRWaXNpYmxlQ29sdW1uczogc3RyaW5nO1xuICBwdWJsaWMgZ3JvdXBlZENvbHVtbnM6IHN0cmluZztcblxuICBwdWJsaWMgc29ydENvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIGdyb3VwZWRDb2x1bW5UeXBlczogT0dyb3VwZWRDb2x1bW5UeXBlc1tdID0gW107XG4gIHB1YmxpYyByb3dDbGFzczogKHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLypwYXJzZWQgaW5wdXRzIHZhcmlhYmxlcyAqL1xuICBwcm90ZWN0ZWQgX3Zpc2libGVDb2xBcnJheTogc3RyaW5nW10gPSBbXTtcblxuICBnZXQgdmlzaWJsZUNvbEFycmF5KCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbEFycmF5O1xuICB9XG5cbiAgc2V0IHZpc2libGVDb2xBcnJheShhcmc6IGFueVtdKSB7XG4gICAgY29uc3QgcGVybWlzc2lvbnNCbG9ja2VkID0gdGhpcy5wZXJtaXNzaW9ucyA/IHRoaXMucGVybWlzc2lvbnMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlID09PSBmYWxzZSkubWFwKGNvbCA9PiBjb2wuYXR0cikgOiBbXTtcbiAgICBjb25zdCBwZXJtaXNzaW9uc0NoZWNrZWQgPSBhcmcuZmlsdGVyKHZhbHVlID0+IHBlcm1pc3Npb25zQmxvY2tlZC5pbmRleE9mKHZhbHVlKSA9PT0gLTEpO1xuICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheSA9IHBlcm1pc3Npb25zQ2hlY2tlZDtcbiAgICBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucykge1xuICAgICAgY29uc3QgY29udGFpbnNTZWxlY3Rpb25Db2wgPSB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluZGV4T2YoQ29kZXMuTkFNRV9DT0xVTU5fU0VMRUNUKSAhPT0gLTE7XG4gICAgICBjb25zdCBjb250YWluc0V4cGFuZGFibGVDb2wgPSB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluZGV4T2YoQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSkgIT09IC0xO1xuICAgICAgaWYgKGNvbnRhaW5zU2VsZWN0aW9uQ29sKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheS51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGFpbnNTZWxlY3Rpb25Db2wgJiYgY29udGFpbnNFeHBhbmRhYmxlQ29sKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheSA9IFt0aGlzLl92aXNpYmxlQ29sQXJyYXlbMF1dLmNvbmNhdChDb2Rlcy5OQU1FX0NPTFVNTl9FWFBBTkRBQkxFLCB0aGlzLl92aXNpYmxlQ29sQXJyYXkuc3BsaWNlKDEpKTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNvbnRhaW5zRXhwYW5kYWJsZUNvbCkge1xuICAgICAgICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheS51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zID0gdGhpcy5fdmlzaWJsZUNvbEFycmF5O1xuICAgICAgdGhpcy5ncm91cGluZ0hlYWRlcnNSb3dzID0gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5tYXAodmlzaWJsZUNvbCA9PiAnZ3JvdXBIZWFkZXItJyArIHZpc2libGVDb2wpO1xuICAgIH1cbiAgfVxuXG4gIHNvcnRDb2xBcnJheTogU1FMT3JkZXJbXSA9IFtdO1xuICAvKmVuZCBvZiBwYXJzZWQgaW5wdXRzIHZhcmlhYmxlcyAqL1xuXG4gIHByb3RlY3RlZCB0YWJHcm91cENvbnRhaW5lcjogTWF0VGFiR3JvdXA7XG4gIHByb3RlY3RlZCB0YWJDb250YWluZXI6IE1hdFRhYjtcbiAgdGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcm90ZWN0ZWQgcGVuZGluZ1F1ZXJ5OiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBwZW5kaW5nUXVlcnlGaWx0ZXIgPSB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIHNldFN0YXRpY0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGF2b2lkUXVlcnlDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBhc3luY0xvYWRDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBhc3luY0xvYWRTdWJzY3JpcHRpb25zOiBvYmplY3QgPSB7fTtcblxuICBwcm90ZWN0ZWQgcXVlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGNvbnRleHRNZW51U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCB2aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBjaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgZmluaXNoUXVlcnlTdWJzY3JpcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgb25Sb3dTZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvblJvd0Rlc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25Sb3dEZWxldGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uUmVpbml0aWFsaXplOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uQ29udGVudENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvbkZpbHRlckJ5Q29sdW1uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHVibGljIG9UYWJsZUZpbHRlckJ5Q29sdW1uRGF0YURpYWxvZ0NvbXBvbmVudDogT1RhYmxlRmlsdGVyQnlDb2x1bW5EYXRhRGlhbG9nQ29tcG9uZW50O1xuICBwdWJsaWMgb1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudDogT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudDtcblxuICBwcml2YXRlIHNob3dUb3RhbHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBzaG93VG90YWxzOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zaG93VG90YWxzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgcHJpdmF0ZSBsb2FkaW5nU29ydGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmdTb3J0aW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5sb2FkaW5nU29ydGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIHByaXZhdGUgbG9hZGluZ1Njcm9sbFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGxvYWRpbmdTY3JvbGw6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxvYWRpbmdTY3JvbGxTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHB1YmxpYyBzaG93TG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMubG9hZGluZy5waXBlKGRlYm91bmNlVGltZSgyMDApKSwgLy8gYXZvaWQgZGlzcGxheWluZyBsb2FkaW5nIHNwaW5uZXIgZm9yIGEgdmVyeSBzaG9ydCB0aW1lXG4gICAgdGhpcy5sb2FkaW5nU29ydGluZyxcbiAgICB0aGlzLmxvYWRpbmdTY3JvbGxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4gcHJldlswXSA9PT0gY3VyclswXSAmJiBwcmV2WzFdID09PSBjdXJyWzFdICYmIHByZXZbMl0gPT09IGN1cnJbMl0pLCAvLyBhdm9pZCBlbWl0dGluZyBzYW1lIHZhbHVlIG11bHRpcGxlIHRpbWVzXG4gICAgbWFwKChyZXM6IGJvb2xlYW5bXSkgPT4gcmVzLnNvbWUociA9PiByKSlcbiAgKTtcblxuICBwdWJsaWMgb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudDogT1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudDtcbiAgcHVibGljIHNob3dGaXJzdEluc2VydGFibGVSb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNob3dMYXN0SW5zZXJ0YWJsZVJvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZXhwYW5kYWJsZUl0ZW06IFNlbGVjdGlvbk1vZGVsPGFueT47XG5cbiAgcHJvdGVjdGVkIGNsaWNrVGltZXI7XG4gIHByb3RlY3RlZCBjbGlja0RlbGF5ID0gMjAwO1xuICBwcm90ZWN0ZWQgY2xpY2tQcmV2ZW50ID0gZmFsc2U7XG4gIHB1YmxpYyBlZGl0aW5nQ2VsbDogYW55O1xuICBwcm90ZWN0ZWQgZWRpdGluZ1JvdzogYW55O1xuXG4gIHNldCBjdXJyZW50UGFnZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX2N1cnJlbnRQYWdlID0gdmFsO1xuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdmFsO1xuICAgICAgaWYgKHRoaXMubWF0cGFnaW5hdG9yKSB7XG4gICAgICAgIHRoaXMubWF0cGFnaW5hdG9yLnBhZ2VJbmRleCA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY3VycmVudFBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2U7XG4gIH1cblxuICBwdWJsaWMgb1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQ6IE9UYWJsZVF1aWNrZmlsdGVyO1xuICBwcm90ZWN0ZWQgc29ydFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgb25SZW5kZXJlZERhdGFDaGFuZ2U6IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIHByZXZpb3VzUmVuZGVyZXJEYXRhO1xuXG4gIHF1aWNrRmlsdGVyQ2FsbGJhY2s6IFF1aWNrRmlsdGVyRnVuY3Rpb247XG4gIGRpc2FibGVTZWxlY3Rpb25GdW5jdGlvbjogRGlzYWJsZVNlbGVjdGlvbkZ1bmN0aW9uO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQm9keScpXG4gIHByb3RlY3RlZCB0YWJsZUJvZHlFbDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGFibGVIZWFkZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgdGFibGVIZWFkZXJFbDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGFibGVUb29sYmFyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHRhYmxlVG9vbGJhckVsOiBFbGVtZW50UmVmO1xuXG4gIGhvcml6b250YWxTY3JvbGxlZDogYm9vbGVhbjtcbiAgcHVibGljIG9uVXBkYXRlU2Nyb2xsZWRTdGF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyByb3dXaWR0aDtcblxuICBzdG9yZVBhZ2luYXRpb25TdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qIEluIHRoZSBjYXNlIHRoZSB0YWJsZSBoYXZlbnQgcGFnaW5hdGlvbkNvbnRyb2wgYW5kIHBhZ2VhYmxlLCB0aGUgdGFibGUgaGFzIHBhZ2luYXRpb24gdmlydHVhbCovXG4gIHBhZ2VTY3JvbGxWaXJ0dWFsID0gMTtcblxuICBwdWJsaWMgc3RhdGljIERFRkFVTFRfUk9XX0hFSUdIVCA9IDM2O1xuICBwcm90ZWN0ZWQgcGVybWlzc2lvbnM6IE9UYWJsZVBlcm1pc3Npb25zO1xuICBtYXRNZW51OiBNYXRNZW51O1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlTWVudScpXG4gIG9UYWJsZU1lbnU6IE9UYWJsZU1lbnU7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihPVGFibGVPcHRpb25Db21wb25lbnQpXG4gIHRhYmxlT3B0aW9uczogUXVlcnlMaXN0PE9UYWJsZU9wdGlvbkNvbXBvbmVudD47XG5cbiAgb1RhYmxlQnV0dG9uczogT1RhYmxlQnV0dG9ucztcblxuICBAQ29udGVudENoaWxkcmVuKE9UYWJsZUJ1dHRvbkNvbXBvbmVudClcbiAgdGFibGVCdXR0b25zOiBRdWVyeUxpc3Q8T1RhYmxlQnV0dG9uPjtcblxuICBAQ29udGVudENoaWxkKCdvLXRhYmxlLXF1aWNrZmlsdGVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcXVpY2tmaWx0ZXJDb250ZW50Q2hpbGQ6IE9UYWJsZVF1aWNrZmlsdGVyO1xuXG5cbiAgQFZpZXdDaGlsZCgnZXhwb3J0T3B0c1RlbXBsYXRlJylcbiAgZXhwb3J0T3B0c1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoT1RhYmxlQ29sdW1uU2VsZWN0QWxsRGlyZWN0aXZlKVxuICB0YWJsZUNvbHVtblNlbGVjdEFsbENvbnRlbnRDaGlsZDogT1RhYmxlQ29sdW1uU2VsZWN0QWxsRGlyZWN0aXZlO1xuXG5cblxuICBwdWJsaWMgZ3JvdXBlZENvbHVtbnNBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFtdKVxuICB1cGRhdGVTY3JvbGxlZFN0YXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhvcml6b250YWxTY3JvbGwpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBib2R5V2lkdGggPSB0aGlzLnRhYmxlQm9keUVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gdGhpcy50YWJsZUJvZHlFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICBjb25zdCBwcmV2aW91c1N0YXRlID0gdGhpcy5ob3Jpem9udGFsU2Nyb2xsZWQ7XG4gICAgICAgIHRoaXMuaG9yaXpvbnRhbFNjcm9sbGVkID0gc2Nyb2xsV2lkdGggPiBib2R5V2lkdGg7XG4gICAgICAgIGlmIChwcmV2aW91c1N0YXRlICE9PSB0aGlzLmhvcml6b250YWxTY3JvbGxlZCkge1xuICAgICAgICAgIHRoaXMub25VcGRhdGVTY3JvbGxlZFN0YXRlLmVtaXQodGhpcy5ob3Jpem9udGFsU2Nyb2xsZWQpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9pc0NvbHVtbkZpbHRlcnNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBnZXQgaXNDb2x1bW5GaWx0ZXJzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0NvbHVtbkZpbHRlcnNBY3RpdmU7XG4gIH1cblxuICBzZXQgaXNDb2x1bW5GaWx0ZXJzQWN0aXZlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzQ29sdW1uRmlsdGVyc0FjdGl2ZSA9IHZhbDtcbiAgfVxuXG4gIGdyb3VwaW5nSGVhZGVyc1Jvd3M6IHN0cmluZ1tdID0gW107XG5cbiAgcHVibGljIG9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudDogT1RhYmxlQ29sdW1uc0dyb3VwaW5nO1xuXG4gIEBDb250ZW50Q2hpbGQoT1RhYmxlQ29udGV4dE1lbnVDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGNvbnRleHRNZW51Q29udGVudENoaWxkOiBPVGFibGVDb250ZXh0TWVudUNvbXBvbmVudDtcblxuICBwcm90ZWN0ZWQgdHJpZ2dlclNlbGVjdGlvbkV2ZW50czogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE9Gb3JtQ29tcG9uZW50KSkgZm9ybTogT0Zvcm1Db21wb25lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSkgcHVibGljIHJlYWRvbmx5IHNjcm9sbFN0cmF0ZWd5OiBPVGFibGVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3lcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IsIGVsUmVmLCBmb3JtKTtcblxuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMgPSBuZXcgRGVmYXVsdE9UYWJsZU9wdGlvbnMoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhYkdyb3VwQ29udGFpbmVyID0gdGhpcy5pbmplY3Rvci5nZXQoTWF0VGFiR3JvdXApO1xuICAgICAgdGhpcy50YWJDb250YWluZXIgPSB0aGlzLmluamVjdG9yLmdldChNYXRUYWIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGR1ZSB0byBub3QgYWx3YXlzIGlzIGNvbnRhaW5lZCBvbiB0YWIuXG4gICAgfVxuXG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChTbmFja0JhclNlcnZpY2UpO1xuICAgIHRoaXMuZ2V0R2xvYmFsQ29uZmlnKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEdsb2JhbENvbmZpZygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vVGFibGVHbG9iYWxDb25maWcgPSB0aGlzLmluamVjdG9yLmdldChPX1RBQkxFX0dMT0JBTF9DT05GSUcpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlR2xvYmFsQ29uZmlnLmF1dG9BZGp1c3QpKSB7XG4gICAgICAgIHRoaXMuYXV0b0FkanVzdCA9IHRoaXMub1RhYmxlR2xvYmFsQ29uZmlnLmF1dG9BZGp1c3Q7XG4gICAgICB9O1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlR2xvYmFsQ29uZmlnLmF1dG9BbGlnblRpdGxlcykpIHtcbiAgICAgICAgdGhpcy5hdXRvQWxpZ25UaXRsZXMgPSB0aGlzLm9UYWJsZUdsb2JhbENvbmZpZy5hdXRvQWxpZ25UaXRsZXM7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSBpcyBvcHRpb25hbFxuICAgIH1cbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBPVGFibGVDb21wb25lbnRTdGF0ZUNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RhdGU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICBpZiAodGhpcy5vVGFibGVCdXR0b25zICYmIHRoaXMudGFibGVCdXR0b25zICYmIHRoaXMudGFibGVCdXR0b25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub1RhYmxlQnV0dG9ucy5yZWdpc3RlckJ1dHRvbnModGhpcy50YWJsZUJ1dHRvbnMudG9BcnJheSgpKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIuYWZ0ZXJWaWV3SW5pdCgpO1xuICAgIHRoaXMuaW5pdFRhYmxlQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMubWF0TWVudSA9IHRoaXMub1RhYmxlTWVudS5tYXRNZW51O1xuICAgICAgdGhpcy5vVGFibGVNZW51LnJlZ2lzdGVyT3B0aW9ucyh0aGlzLnRhYmxlT3B0aW9ucy50b0FycmF5KCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhYmxlUm93RXhwYW5kYWJsZSkge1xuICAgICAgdGhpcy5leHBhbmRhYmxlSXRlbSA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRoaXMudGFibGVSb3dFeHBhbmRhYmxlLm11bHRpcGxlLCBbXSk7XG4gICAgICB0aGlzLmNyZWF0ZUV4cGFuZGFibGVDb2x1bW4oKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgaWYgKHRoaXMudGFibGVDb2x1bW5TZWxlY3RBbGxDb250ZW50Q2hpbGQpIHtcbiAgICAgIC8vXG4gICAgICB0aGlzLnNldEN1c3RvbURlZmluaXRpb25JblNlbGVjdENvbHVtbih0aGlzLnRhYmxlQ29sdW1uU2VsZWN0QWxsQ29udGVudENoaWxkKVxuICAgIH1cbiAgfVxuXG4gIHNldEN1c3RvbURlZmluaXRpb25JblNlbGVjdENvbHVtbihkZWZpbml0aW9uOiBPVGFibGVDb2x1bW5TZWxlY3RBbGxEaXJlY3RpdmUpIHtcbiAgICBpZiAoZGVmaW5pdGlvbi50aXRsZSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udGl0bGUgPSBkZWZpbml0aW9uLnRpdGxlO1xuICAgIH1cbiAgICBpZiAoZGVmaW5pdGlvbi53aWR0aCkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ud2lkdGggPSBkZWZpbml0aW9uLndpZHRoO1xuICAgIH1cbiAgICBpZiAoZGVmaW5pdGlvbi5taW5XaWR0aCkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubWluV2lkdGggPSBkZWZpbml0aW9uLm1pbldpZHRoO1xuICAgIH1cbiAgICBpZiAoZGVmaW5pdGlvbi5tYXhXaWR0aCkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubWF4V2lkdGggPSBkZWZpbml0aW9uLm1heFdpZHRoO1xuICAgIH1cbiAgICBpZiAoZGVmaW5pdGlvbi5yZXNpemFibGUpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnJlc2l6YWJsZSA9IGRlZmluaXRpb24ucmVzaXphYmxlO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSk6IHZvaWQge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjaGFuZ2VzLmF1dG9BZGp1c3QpICYmIGNoYW5nZXMuYXV0b0FkanVzdC5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuYXV0b0FkanVzdC5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICB0aGlzLmF1dG9BZGp1c3QgPSBjaGFuZ2VzLmF1dG9BZGp1c3QuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUhlYWRlckFuZEZvb3RlclN0aWNreVBvc2l0aW9ucygpIHtcbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIGNvbnN0IHpvbmUgPSB0aGlzLmluamVjdG9yLmdldChOZ1pvbmUpO1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uID0gdGhpcy5zY3JvbGxTdHJhdGVneS5zdGlja3lDaGFuZ2UucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZml4ZWRIZWFkZXIgfHwgdGhpcy5oYXNJbnNlcnRhYmxlUm93KCkpXG4gICAgICApLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHN0aWNreUhlYWRlclNlbGVjdG9yKS5mb3JFYWNoKChlbDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGVsLnN0eWxlLnRvcCA9IC0geCArICdweCc7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc3RpY2t5Rm9vdGVyU2VsZWN0b3IpLmZvckVhY2goKGVsOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgZWwuc3R5bGUuYm90dG9tID0geCArICdweCc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUV4cGFuZGFibGVDb2x1bW4oKSB7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5leHBhbmRhYmxlQ29sdW1uID0gbmV3IE9Db2x1bW4oKTtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmV4cGFuZGFibGVDb2x1bW4udmlzaWJsZSA9IHRoaXMudGFibGVSb3dFeHBhbmRhYmxlICYmIHRoaXMudGFibGVSb3dFeHBhbmRhYmxlLmV4cGFuZGFibGVDb2x1bW5WaXNpYmxlO1xuICAgIHRoaXMudXBkYXRlU3RhdGVFeHBhbmRlZENvbHVtbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy9kZXRhY2ggYWxsIHBvcnRhIGhvc3QgY3JlYXRlZFxuICAgIGlmICh0aGlzLnBvcnRhbEhvc3QpIHtcbiAgICAgIHRoaXMucG9ydGFsSG9zdC5mb3JFYWNoKHggPT4geC5kZXRhY2goKSk7XG4gICAgfVxuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgZ2V0U3VmZml4Q29sdW1uSW5zZXJ0YWJsZSgpIHtcbiAgICByZXR1cm4gQ29kZXMuU1VGRklYX0NPTFVNTl9JTlNFUlRBQkxFO1xuICB9XG5cbiAgZ2V0QWN0aW9uc1Blcm1pc3Npb25zKCk6IE9QZXJtaXNzaW9uc1tdIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucyA/ICh0aGlzLnBlcm1pc3Npb25zLmFjdGlvbnMgfHwgW10pIDogW107XG4gIH1cblxuICBnZXRNZW51UGVybWlzc2lvbnMoKTogT1RhYmxlTWVudVBlcm1pc3Npb25zIHtcbiAgICBjb25zdCByZXN1bHQ6IE9UYWJsZU1lbnVQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMgPyB0aGlzLnBlcm1pc3Npb25zLm1lbnUgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdCA6IHtcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgaXRlbXM6IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldE9Db2x1bW5QZXJtaXNzaW9ucyhhdHRyOiBzdHJpbmcpOiBPUGVybWlzc2lvbnMge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLnBlcm1pc3Npb25zID8gKHRoaXMucGVybWlzc2lvbnMuY29sdW1ucyB8fCBbXSkgOiBbXTtcbiAgICByZXR1cm4gY29sdW1ucy5maW5kKGNvbXAgPT4gY29tcC5hdHRyID09PSBhdHRyKSB8fCB7IGF0dHI6IGF0dHIsIGVuYWJsZWQ6IHRydWUsIHZpc2libGU6IHRydWUgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBY3Rpb25QZXJtaXNzaW9ucyhhdHRyOiBzdHJpbmcpOiBPUGVybWlzc2lvbnMge1xuICAgIGNvbnN0IGFjdGlvbnNQZXJtID0gdGhpcy5wZXJtaXNzaW9ucyA/ICh0aGlzLnBlcm1pc3Npb25zLmFjdGlvbnMgfHwgW10pIDogW107XG4gICAgY29uc3QgcGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IGFjdGlvbnNQZXJtLmZpbmQocCA9PiBwLmF0dHIgPT09IGF0dHIpO1xuICAgIHJldHVybiBwZXJtaXNzaW9ucyB8fCB7XG4gICAgICBhdHRyOiBhdHRyLFxuICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oYXR0cjogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aW9uc1Blcm0gPSB0aGlzLnBlcm1pc3Npb25zID8gKHRoaXMucGVybWlzc2lvbnMuYWN0aW9ucyB8fCBbXSkgOiBbXTtcbiAgICBjb25zdCBwZXJtaXNzaW9uczogT1Blcm1pc3Npb25zID0gYWN0aW9uc1Blcm0uZmluZChwID0+IHAuYXR0ciA9PT0gYXR0cik7XG4gICAgY29uc3QgZW5hYmxlZFBlcm1pc2lvbiA9IFBlcm1pc3Npb25zVXRpbHMuY2hlY2tFbmFibGVkUGVybWlzc2lvbihwZXJtaXNzaW9ucyk7XG4gICAgaWYgKCFlbmFibGVkUGVybWlzaW9uKSB7XG4gICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUEVSTUlTU0lPTicpO1xuICAgIH1cbiAgICByZXR1cm4gZW5hYmxlZFBlcm1pc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2Qgd2hhdCBpbml0aWFsaXplIHZhcnMgYW5kIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGluaXRpYWxpemUoKTogYW55IHtcbiAgICBzdXBlci5pbml0aWFsaXplKCk7XG5cbiAgICB0aGlzLl9vVGFibGVPcHRpb25zID0gbmV3IERlZmF1bHRPVGFibGVPcHRpb25zKCk7XG4gICAgaWYgKHRoaXMudGFiR3JvdXBDb250YWluZXIgJiYgdGhpcy50YWJDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJUYWJMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgcGFyYW1zIG9mIHRoZSB0YWJsZVxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhcmFtcygpO1xuXG4gICAgdGhpcy5pbml0aWFsaXplRGFvKCk7XG5cbiAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0VGFibGVQZXJtaXNzaW9ucyh0aGlzLm9hdHRyLCB0aGlzLmFjdFJvdXRlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0aWFsaXplRGFvKCkge1xuICAgIC8vIENvbmZpZ3VyZSBkYW8gbWV0aG9kc1xuICAgIGNvbnN0IHF1ZXJ5TWV0aG9kTmFtZSA9IHRoaXMucGFnZWFibGUgPyB0aGlzLnBhZ2luYXRlZFF1ZXJ5TWV0aG9kIDogdGhpcy5xdWVyeU1ldGhvZDtcbiAgICBjb25zdCBtZXRob2RzID0ge1xuICAgICAgcXVlcnk6IHF1ZXJ5TWV0aG9kTmFtZSxcbiAgICAgIHVwZGF0ZTogdGhpcy51cGRhdGVNZXRob2QsXG4gICAgICBkZWxldGU6IHRoaXMuZGVsZXRlTWV0aG9kLFxuICAgICAgaW5zZXJ0OiB0aGlzLmluc2VydE1ldGhvZFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zdGF0aWNEYXRhKSB7XG4gICAgICB0aGlzLnF1ZXJ5T25CaW5kID0gZmFsc2U7XG4gICAgICB0aGlzLnF1ZXJ5T25Jbml0ID0gZmFsc2U7XG4gICAgICB0aGlzLmRhb1RhYmxlID0gbmV3IE9UYWJsZURhbyh1bmRlZmluZWQsIHRoaXMuZW50aXR5LCBtZXRob2RzKTtcbiAgICAgIHRoaXMuc2V0RGF0YUFycmF5KHRoaXMuc3RhdGljRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlndXJlU2VydmljZSgpO1xuICAgICAgdGhpcy5kYW9UYWJsZSA9IG5ldyBPVGFibGVEYW8odGhpcy5kYXRhU2VydmljZSwgdGhpcy5lbnRpdHksIG1ldGhvZHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyByZWluaXRpYWxpemUgdGFibGUgYWRkaW5nIG9wdGlvbnNcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHJlaW5pdGlhbGl6ZShvcHRpb25zOiBPVGFibGVJbml0aWFsaXphdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgY29uc3QgY2xvbmVkT3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ2VudGl0eScpKSB7XG4gICAgICAgIHRoaXMuZW50aXR5ID0gY2xvbmVkT3B0cy5lbnRpdHk7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnc2VydmljZScpKSB7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IGNsb25lZE9wdHMuc2VydmljZTtcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdjb2x1bW5zJykpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gY2xvbmVkT3B0cy5jb2x1bW5zO1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVDb2x1bW5zJykpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IGNsb25lZE9wdHMudmlzaWJsZUNvbHVtbnM7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZpc2libGVDb2x1bW5zJykpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0VmlzaWJsZUNvbHVtbnMgPSBjbG9uZWRPcHRzLmRlZmF1bHRWaXNpYmxlQ29sdW1ucztcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdrZXlzJykpIHtcbiAgICAgICAgdGhpcy5rZXlzID0gY2xvbmVkT3B0cy5rZXlzO1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ3NvcnRDb2x1bW5zJykpIHtcbiAgICAgICAgdGhpcy5zb3J0Q29sdW1ucyA9IGNsb25lZE9wdHMuc29ydENvbHVtbnM7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgncGFyZW50S2V5cycpKSB7XG4gICAgICAgIHRoaXMucGFyZW50S2V5cyA9IGNsb25lZE9wdHMucGFyZW50S2V5cztcbiAgICAgIH1cblxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ2ZpbHRlckNvbHVtbnMnKSkge1xuICAgICAgICBpZiAoIXRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgICAgIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCA9IG5ldyBPVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KHRoaXMuaW5qZWN0b3IsIHRoaXMpO1xuICAgICAgICAgIHRoaXMub1RhYmxlTWVudS5vblZpc2libGVGaWx0ZXJPcHRpb25DaGFuZ2UubmV4dCh0aGlzLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdCk7XG4gICAgICAgICAgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LmNvbHVtbnMgPSBjbG9uZWRPcHRzLmZpbHRlckNvbHVtbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LmNvbHVtbnMgPSB0aGlzLnNlYXJjaGVhYmxlQ29sdW1ucy5qb2luKFwiO1wiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIHRoaXMuc3RhdGUucmVzZXQodGhpcy5wYWdlYWJsZSk7XG4gICAgdGhpcy5pbml0VGFibGVBZnRlclZpZXdJbml0KCk7XG4gICAgdGhpcy5vblJlaW5pdGlhbGl6ZS5lbWl0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRUYWJsZUFmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5wYXJzZVZpc2libGVDb2x1bW5zKCk7XG4gICAgdGhpcy5wYXJzZVNlYXJjaGVhYmxlQ29sdW1ucygpO1xuICAgIHRoaXMuc2V0RGF0YXNvdXJjZSgpO1xuICAgIHRoaXMucGFyc2VHcm91cGVkQ29sdW1ucygpO1xuICAgIHRoaXMucGFyc2VHcm91cGVkQ29sdW1uVHlwZXMoKTtcbiAgICB0aGlzLnBhcnNlU29ydENvbHVtbnMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyU29ydExpc3RlbmVyKCk7XG4gICAgdGhpcy5zZXRGaWx0ZXJzQ29uZmlndXJhdGlvbigpO1xuICAgIHRoaXMuYWRkRGVmYXVsdFJvd0J1dHRvbnMoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQpKSB7XG4gICAgICB0aGlzLnNldEdyb3VwQ29sdW1ucyh0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudC5jb2x1bW5zQXJyYXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVyeU9uSW5pdCkge1xuICAgICAgdGhpcy5xdWVyeURhdGEoKTtcbiAgICB9XG4gIH1cbiAgcGFyc2VTZWFyY2hlYWJsZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5zZWFyY2hlYWJsZUNvbHVtbnMgPSB0aGlzLnZpc2libGVDb2xBcnJheS5maWx0ZXIoY29sID0+IHtcbiAgICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4oY29sKTtcbiAgICAgIHJldHVybiBvQ29sICYmIG9Db2wuc2VhcmNoYWJsZTtcbiAgICB9KVxuXG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgaWYgKHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNvcnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub25SZW5kZXJlZERhdGFDaGFuZ2UpIHtcbiAgICAgIHRoaXMub25SZW5kZXJlZERhdGFDaGFuZ2UudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNjcm9sbFN0cmF0ZWd5KSB7XG4gICAgICB0aGlzLnNjcm9sbFN0cmF0ZWd5LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnMpLmZvckVhY2goaWR4ID0+IHtcbiAgICAgIGlmICh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbaWR4XSkge1xuICAgICAgICB0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbaWR4XS51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB1cGRhdGUgc3RvcmUgbG9jYWxzdG9yYWdlLCBjYWxsIG9mIHRoZSBJTG9jYWxTdG9yYWdlXG4gICAqL1xuICBnZXREYXRhVG9TdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0RGF0YVRvU3RvcmUoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyUXVpY2tGaWx0ZXIoYXJnOiBhbnkpIHtcbiAgICBjb25zdCBxdWlja0ZpbHRlciA9IChhcmcgYXMgT1RhYmxlUXVpY2tmaWx0ZXIpO1xuICAgIC8vIGZvcmNpbmcgcXVpY2tGaWx0ZXJDb21wb25lbnQgdG8gYmUgdW5kZWZpbmVkLCB0YWJsZSB1c2VzIG9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50ID0gcXVpY2tGaWx0ZXI7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQpKSB7XG4gICAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50LnNldFZhbHVlKHRoaXMuc3RhdGUucXVpY2tGaWx0ZXJWYWx1ZSwgZmFsc2UpO1xuICAgICAgdGhpcy5xdWlja0ZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQub25DaGFuZ2Uuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgIHRoaXMub25TZWFyY2guZW1pdCh2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJQYWdpbmF0aW9uKHZhbHVlOiBPVGFibGVQYWdpbmF0b3IpIHtcbiAgICB0aGlzLnBhZ2luYXRpb25Db250cm9scyA9IHRydWU7XG4gICAgdGhpcy5wYWdpbmF0b3IgPSB2YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyQ29udGV4dE1lbnUodmFsdWU6IE9Db250ZXh0TWVudUNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRoaXMudGFibGVDb250ZXh0TWVudSA9IHZhbHVlO1xuICAgIHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlQ29udGV4dE1lbnUub25TaG93LnN1YnNjcmliZSgocGFyYW1zOiBJT0NvbnRleHRNZW51Q29udGV4dCkgPT4ge1xuICAgICAgcGFyYW1zLmNsYXNzID0gJ28tdGFibGUtY29udGV4dC1tZW51ICcgKyB0aGlzLnJvd0hlaWdodDtcbiAgICAgIGlmIChwYXJhbXMuZGF0YSAmJiAhdGhpcy5pc1Jvd1NlbGVjdGVkKHBhcmFtcy5kYXRhLnJvd1ZhbHVlKSkge1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3cocGFyYW1zLmRhdGEucm93VmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVnaXN0ZXJEZWZhdWx0Q29sdW1uKGNvbHVtbjogc3RyaW5nKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4pKSkge1xuICAgICAgLy8gYSBkZWZhdWx0IGNvbHVtbiBkZWZpbml0aW9uIHRyeWluZyB0byByZXBsYWNlIGFuIGFscmVhZHkgZXhpc3RpbmcgZGVmaW5pdGlvblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2xEZWY6IE9Db2x1bW4gPSB0aGlzLmNyZWF0ZU9Db2x1bW4oY29sdW1uLCB0aGlzKTtcbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIGFsbCBjb2x1bW5zIGFuZCBwcm9wZXJ0aWVzIGluIHZhciBjb2x1bW5zQXJyYXlcbiAgICogQHBhcmFtIGNvbHVtblxuICAgKi9cbiAgcmVnaXN0ZXJDb2x1bW4oY29sdW1uOiBPVGFibGVDb2x1bW5Db21wb25lbnQgfCBPVGFibGVDb2x1bW5DYWxjdWxhdGVkQ29tcG9uZW50IHwgYW55KSB7XG4gICAgY29uc3QgY29sdW1uQXR0ciA9ICh0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJykgPyBjb2x1bW4gOiBjb2x1bW4uYXR0cjtcbiAgICBjb25zdCBjb2x1bW5QZXJtaXNzaW9uczogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRPQ29sdW1uUGVybWlzc2lvbnMoY29sdW1uQXR0cik7XG4gICAgaWYgKCFjb2x1bW5QZXJtaXNzaW9ucy52aXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRGVmYXVsdENvbHVtbihjb2x1bW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbkRlZiA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbkRlZikgJiYgVXRpbC5pc0RlZmluZWQoY29sdW1uRGVmLmRlZmluaXRpb24pKSB7XG4gICAgICAvLyBhIG8tdGFibGUtY29sdW1uIGRlZmluaXRpb24gdHJ5aW5nIHRvIHJlcGxhY2UgYW4gYWxyZWFkeSBleGlzdGluZyBvLXRhYmxlLWNvbHVtbiBkZWZpbml0aW9uXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29sRGVmOiBPQ29sdW1uID0gdGhpcy5jcmVhdGVPQ29sdW1uKGNvbHVtbi5hdHRyLCB0aGlzLCBjb2x1bW4pO1xuICAgIGxldCBjb2x1bW5XaWR0aCA9IHRoaXMuZ2V0Q29sdW1uV2lkdGhGcm9tU3RhdGUoY29sRGVmKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uV2lkdGgpKSB7XG4gICAgICBjb2xEZWYud2lkdGggPSBjb2x1bW5XaWR0aDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbiAmJiAoY29sdW1uLmFzeW5jTG9hZCB8fCBjb2x1bW4udHlwZSA9PT0gJ2FjdGlvbicpKSB7XG4gICAgICB0aGlzLmF2b2lkUXVlcnlDb2x1bW5zLnB1c2goY29sdW1uLmF0dHIpO1xuICAgICAgaWYgKGNvbHVtbi5hc3luY0xvYWQpIHtcbiAgICAgICAgdGhpcy5hc3luY0xvYWRDb2x1bW5zLnB1c2goY29sdW1uLmF0dHIpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWY6IE9Db2x1bW4pIHtcbiAgICBjb2xEZWYudmlzaWJsZSA9ICh0aGlzLl92aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihjb2xEZWYuYXR0cikgIT09IC0xKTtcbiAgICAvLyBGaW5kIGNvbHVtbiBkZWZpbml0aW9uIGJ5IG5hbWVcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RpbmcgPSB0aGlzLmdldE9Db2x1bW4oY29sRGVmLmF0dHIpO1xuICAgIGlmIChhbHJlYWR5RXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcmVwbGFjaW5nSW5kZXggPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuaW5kZXhPZihhbHJlYWR5RXhpc3RpbmcpO1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zW3JlcGxhY2luZ0luZGV4XSA9IGNvbERlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnB1c2goY29sRGVmKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDb2x1bW5zT3JkZXIoKTtcbiAgICB0aGlzLnJlZnJlc2hFZGl0aW9uTW9kZVdhcm4oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWZyZXNoRWRpdGlvbk1vZGVXYXJuKCkge1xuICAgIGlmICh0aGlzLmVkaXRpb25Nb2RlICE9PSBDb2Rlcy5FRElUSU9OX01PREVfTk9ORSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlZGl0YWJsZUNvbHVtbnMgPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiB7XG4gICAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29sLmVkaXRvcik7XG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoZWRpdGFibGVDb2x1bW5zLmxlbmd0aCA+IDAgJiYgIXRoaXMuaGFzSW5zZXJ0YWJsZVJvdygpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVXNpbmcgYSBjb2x1bW4gd2l0aCBhIGVkaXRvciBidXQgdGhlcmUgaXMgbm8gZWRpdGlvbi1tb2RlIGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcmVnaXN0ZXJDb2x1bW5BZ2dyZWdhdGUoY29sdW1uOiBPQ29sdW1uQWdncmVnYXRlKSB7XG4gICAgdGhpcy5zaG93VG90YWxzU3ViamVjdC5uZXh0KHRydWUpO1xuICAgIGNvbnN0IGFscmVhZHlFeGlzdGluZyA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgaWYgKGFscmVhZHlFeGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByZXBsYWNpbmdJbmRleCA9IHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5pbmRleE9mKGFscmVhZHlFeGlzdGluZyk7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnNbcmVwbGFjaW5nSW5kZXhdLmFnZ3JlZ2F0ZSA9IGNvbHVtbjtcbiAgICB9XG4gIH1cblxuICByZWdpc3RlclRhYmxlSGVhZGVycyh0YWJsZUhlYWRlcjogT1RhYmxlSGVhZGVyQ29tcG9uZW50KSB7XG4gICAgaWYgKHRoaXMudGFibGVIZWFkZXJzLmZpbmRJbmRleChoZWFkZXIgPT4gaGVhZGVyLmNvbHVtbi5hdHRyID09PSB0YWJsZUhlYWRlci5jb2x1bW4uYXR0cikgPT09IC0xKSB7XG4gICAgICB0aGlzLnRhYmxlSGVhZGVycy5wdXNoKHRhYmxlSGVhZGVyKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZVZpc2libGVDb2x1bW5zKGRlZmF1bHRDb25maWd1cmF0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5jb2x1bW5zRGlzcGxheSkge1xuICAgICAgLy8gZmlsdGVyaW5nIGNvbHVtbnMgdGhhdCBtaWdodCBiZSBpbiBzdGF0ZSBzdG9yYWdlIGJ1dCBub3QgaW4gdGhlIGFjdHVhbCB0YWJsZSBkZWZpbml0aW9uXG4gICAgICBsZXQgc3RhdGVDb2xzOiBPQ29sdW1uRGlzcGxheVtdID0gW107XG4gICAgICB0aGlzLnN0YXRlLmNvbHVtbnNEaXNwbGF5LmZvckVhY2goKG9Db2wsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVmlzaWJsZUNvbEluQ29sdW1ucyA9IHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuYXR0ciA9PT0gb0NvbC5hdHRyKSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChpc1Zpc2libGVDb2xJbkNvbHVtbnMpIHtcbiAgICAgICAgICBzdGF0ZUNvbHMucHVzaChvQ29sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBsb2FkIHRoZSBjb2x1bW4gJyArIG9Db2wuYXR0ciArICcgZnJvbSB0aGUgbG9jYWxzdG9yYWdlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGRlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN0YXRlQ29scyA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZUNvbHMgPSB0aGlzLmNoZWNrQ2hhbmdlc1Zpc2libGVDb2x1bW1uc0luSW5pdGlhbENvbmZpZ3VyYXRpb24oc3RhdGVDb2xzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnNvcnQoKGE6IE9Db2x1bW4sIGI6IE9Db2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhBID0gc3RhdGVDb2xzLmZpbmRJbmRleChjb2wgPT4gY29sLmF0dHIgPT09IGEuYXR0cik7XG4gICAgICAgIGNvbnN0IGluZGV4QiA9IHN0YXRlQ29scy5maW5kSW5kZXgoY29sID0+IGNvbC5hdHRyID09PSBiLmF0dHIpO1xuICAgICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnZpc2libGVDb2xBcnJheSA9IHN0YXRlQ29scy5maWx0ZXIoaXRlbSA9PiBpdGVtLnZpc2libGUpLm1hcChpdGVtID0+IGl0ZW0uYXR0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlzaWJsZUNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMuZGVmYXVsdFZpc2libGVDb2x1bW5zID8gdGhpcy5kZWZhdWx0VmlzaWJsZUNvbHVtbnMgOiB0aGlzLnZpc2libGVDb2x1bW5zLCB0cnVlKTtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5zb3J0KChhOiBPQ29sdW1uLCBiOiBPQ29sdW1uKSA9PiB0aGlzLnZpc2libGVDb2xBcnJheS5pbmRleE9mKGEuYXR0cikgLSB0aGlzLnZpc2libGVDb2xBcnJheS5pbmRleE9mKGIuYXR0cikpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQ2hhbmdlc1Zpc2libGVDb2x1bW1uc0luSW5pdGlhbENvbmZpZ3VyYXRpb24oc3RhdGVDb2xzOiBPQ29sdW1uRGlzcGxheVtdKTogT0NvbHVtbkRpc3BsYXlbXSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5ID1cbiAgICAgICAgdGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5jb2x1bW5zRGlzcGxheS5maWx0ZXIoeCA9PiB4LnZpc2libGUpLm1hcCh4ID0+IHguYXR0cik7XG5cbiAgICAgIGNvbnN0IHZpc2libGVDb2xBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLnZpc2libGVDb2x1bW5zLCB0cnVlKTtcblxuICAgICAgLy8gRmluZCB2YWx1ZXMgaW4gdmlzaWJsZS1jb2x1bW5zIHRoYXQgdGhleSBhcmVudCBpbiBvcmlnaW5hbC12aXNpYmxlLWNvbHVtbnMgaW4gbG9jYWxzdG9yYWdlXG4gICAgICAvLyBpbiB0aGlzIGNhc2UgeW91IGhhdmUgdG8gYWRkIHRoaXMgY29sdW1uIHRvIHRoaXMudmlzaWJsZUNvbEFycmF5XG4gICAgICBjb25zdCBjb2xUb0FkZEluVmlzaWJsZUNvbCA9IFV0aWwuZGlmZmVyZW5jZUFycmF5cyh2aXNpYmxlQ29sQXJyYXksIG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5KTtcbiAgICAgIGNvbFRvQWRkSW5WaXNpYmxlQ29sLmZvckVhY2goKGNvbEFkZCkgPT4ge1xuICAgICAgICBsZXQgaW5kZXhDb2wgPSBzdGF0ZUNvbHMuZmluZEluZGV4KGNvbCA9PiBjb2wuYXR0ciA9PT0gY29sQWRkKTtcbiAgICAgICAgaWYgKGluZGV4Q29sID4gLTEpIHtcbiAgICAgICAgICBzdGF0ZUNvbHNbaW5kZXhDb2xdLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlQ29scy5zb3J0KChhOiBPQ29sdW1uLCBiOiBPQ29sdW1uKSA9PiB2aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihhLmF0dHIpIC0gdmlzaWJsZUNvbEFycmF5LmluZGV4T2YoYi5hdHRyKSk7XG4gICAgICB9KTtcblxuXG4gICAgICAvLyBGaW5kIHZhbHVlcyBpbiBvcmlnaW5hbC12aXNpYmxlLWNvbHVtbnMgaW4gbG9jYWxzdG9yYWdlIHRoYXQgdGhleSBhcmVudCBpbiB0aGlzLnZpc2libGVDb2xBcnJheVxuICAgICAgLy8gaW4gdGhpcyBjYXNlIHlvdSBoYXZlIHRvIGRlbGV0ZSB0aGlzIGNvbHVtbiB0byB0aGlzLnZpc2libGVDb2xBcnJheVxuICAgICAgY29uc3QgY29sVG9EZWxldGVJblZpc2libGVDb2wgPSBVdGlsLmRpZmZlcmVuY2VBcnJheXMob3JpZ2luYWxWaXNpYmxlQ29sQXJyYXksIHZpc2libGVDb2xBcnJheSk7XG4gICAgICBpZiAoY29sVG9EZWxldGVJblZpc2libGVDb2wubGVuZ3RoID4gMCkge1xuICAgICAgICBzdGF0ZUNvbHMgPSBzdGF0ZUNvbHMuZmlsdGVyKGNvbCA9PiBjb2xUb0RlbGV0ZUluVmlzaWJsZUNvbC5pbmRleE9mKGNvbC5hdHRyKSA9PT0gLTEpO1xuICAgICAgfVxuXG4gICAgICAvL0lmIHRoZSBjb2x1bW5zIGluIG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5IGhhcyBjaGFuZ2VkIHRoZSBzb3J0aW5nXG4gICAgICBjb25zdCBjaGFuZ2VTb3J0VmlzaWJsZUNvbHVtbnMgPSBKU09OLnN0cmluZ2lmeSh2aXNpYmxlQ29sQXJyYXkpICE9PSBKU09OLnN0cmluZ2lmeShvcmlnaW5hbFZpc2libGVDb2xBcnJheSk7XG4gICAgICBpZiAoY2hhbmdlU29ydFZpc2libGVDb2x1bW5zICYmIHZpc2libGVDb2xBcnJheS5sZW5ndGggPT09IG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5Lmxlbmd0aCkge1xuICAgICAgICB2aXNpYmxlQ29sQXJyYXkuZm9yRWFjaCgoY29sLCB0b0luZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbUluZGV4VG9DaGFuZ2UgPSBzdGF0ZUNvbHMuZmluZEluZGV4KHN0YXRlQ29sID0+IHN0YXRlQ29sLmF0dHIgPT09IGNvbCk7XG4gICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHN0YXRlQ29scywgZnJvbUluZGV4VG9DaGFuZ2UsIHRvSW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhdGVDb2xzO1xuICB9XG5cbiAgcGFyc2VTb3J0Q29sdW1ucygpIHtcbiAgICBjb25zdCBzb3J0Q29sdW1uc1BhcmFtID0gdGhpcy5zdGF0ZS5zb3J0Q29sdW1ucyB8fCB0aGlzLnNvcnRDb2x1bW5zO1xuICAgIHRoaXMuc29ydENvbEFycmF5ID0gU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnMoc29ydENvbHVtbnNQYXJhbSk7XG5cbiAgICAvLyBjaGVja2luZyB0aGUgb3JpZ2luYWwgc29ydCBjb2x1bW5zIHdpdGggdGhlIHNvcnQgY29sdW1ucyBpbiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaW4gbG9jYWwgc3RvcmFnZVxuICAgIGlmICh0aGlzLnN0YXRlLnNvcnRDb2x1bW5zICYmIHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc29ydENvbHVtbnMpIHtcblxuICAgICAgY29uc3QgaW5pdGlhbENvbmZpZ1NvcnRDb2x1bW5zQXJyYXkgPSBTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyh0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnNvcnRDb2x1bW5zKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU29ydENvbHVtbnNBcnJheSA9IFNlcnZpY2VVdGlscy5wYXJzZVNvcnRDb2x1bW5zKHRoaXMuc29ydENvbHVtbnMpO1xuICAgICAgLy8gRmluZCB2YWx1ZXMgaW4gdmlzaWJsZS1jb2x1bW5zIHRoYXQgdGhleSBhcmVudCBpbiBvcmlnaW5hbC12aXNpYmxlLWNvbHVtbnMgaW4gbG9jYWxzdG9yYWdlXG4gICAgICAvLyBpbiB0aGlzIGNhc2UgeW91IGhhdmUgdG8gYWRkIHRoaXMgY29sdW1uIHRvIHRoaXMudmlzaWJsZUNvbEFycmF5XG4gICAgICBjb25zdCBjb2xUb0FkZEluVmlzaWJsZUNvbCA9IFV0aWwuZGlmZmVyZW5jZUFycmF5cyhvcmlnaW5hbFNvcnRDb2x1bW5zQXJyYXksIGluaXRpYWxDb25maWdTb3J0Q29sdW1uc0FycmF5KTtcbiAgICAgIGlmIChjb2xUb0FkZEluVmlzaWJsZUNvbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbFRvQWRkSW5WaXNpYmxlQ29sLmZvckVhY2goY29sQWRkID0+IHtcbiAgICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5wdXNoKGNvbEFkZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2xUb0RlbEluVmlzaWJsZUNvbCA9IFV0aWwuZGlmZmVyZW5jZUFycmF5cyhpbml0aWFsQ29uZmlnU29ydENvbHVtbnNBcnJheSwgb3JpZ2luYWxTb3J0Q29sdW1uc0FycmF5KTtcbiAgICAgIGlmIChjb2xUb0RlbEluVmlzaWJsZUNvbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbFRvRGVsSW5WaXNpYmxlQ29sLmZvckVhY2goKGNvbERlbCkgPT4ge1xuICAgICAgICAgIHRoaXMuc29ydENvbEFycmF5LmZvckVhY2goKGNvbCwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC5jb2x1bW5OYW1lID09PSBjb2xEZWwuY29sdW1uTmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVuc3VyaW5nIGNvbHVtbiBleGlzdGVuY2UgYW5kIGNoZWNraW5nIGl0cyBvcmRlcmFibGUgc3RhdGVcbiAgICBmb3IgKGxldCBpID0gdGhpcy5zb3J0Q29sQXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLnNvcnRDb2xBcnJheVtpXS5jb2x1bW5OYW1lO1xuICAgICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihjb2xOYW1lKTtcbiAgICAgIGlmICghVXRpbC5pc0RlZmluZWQob0NvbCkgfHwgIW9Db2wub3JkZXJhYmxlKSB7XG4gICAgICAgIHRoaXMuc29ydENvbEFycmF5LnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBlbnN1cmVDb2x1bW5zT3JkZXIoKSB7XG5cbiAgICBsZXQgY29sdW1uc09yZGVyID0gW107XG4gICAgaWYgKHRoaXMuc3RhdGUuY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgIGNvbHVtbnNPcmRlciA9IHRoaXMuc3RhdGUuY29sdW1uc0Rpc3BsYXkubWFwKGl0ZW0gPT4gaXRlbS5hdHRyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uc09yZGVyID0gdGhpcy5jb2xBcnJheS5maWx0ZXIoYXR0ciA9PiB0aGlzLnZpc2libGVDb2xBcnJheS5pbmRleE9mKGF0dHIpID09PSAtMSk7XG4gICAgICBjb2x1bW5zT3JkZXIucHVzaCguLi50aGlzLnZpc2libGVDb2xBcnJheSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnNvcnQoKGE6IE9Db2x1bW4sIGI6IE9Db2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW5zT3JkZXIuaW5kZXhPZihhLmF0dHIpID09PSAtMSkge1xuICAgICAgICAvLyBpZiBpdCBpcyBub3QgaW4gbG9jYWwgc3RvcmFnZSBiZWNhdXNlIGl0IGlzIG5ldywga2VlcCBvcmRlclxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zT3JkZXIuaW5kZXhPZihhLmF0dHIpIC0gY29sdW1uc09yZGVyLmluZGV4T2YoYi5hdHRyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gIH1cblxuICBpbml0aWFsaXplUGFyYW1zKCk6IHZvaWQge1xuICAgIC8vIElmIHZpc2libGUtY29sdW1ucyBpcyBub3QgcHJlc2VudCB0aGVuIHZpc2libGUtY29sdW1ucyBpcyBhbGwgY29sdW1uc1xuICAgIGlmICghdGhpcy52aXNpYmxlQ29sdW1ucykge1xuICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sQXJyYXkubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbEFycmF5LmZvckVhY2goKHg6IHN0cmluZykgPT4gdGhpcy5yZWdpc3RlckNvbHVtbih4KSk7XG4gICAgICB0aGlzLmVuc3VyZUNvbHVtbnNPcmRlcigpO1xuICAgIH1cbiAgICAvLyBJbml0aWFsaXplIHF1aWNrRmlsdGVyXG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXIgPSB0aGlzLnF1aWNrRmlsdGVyO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuY3VycmVudFBhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgcGFnaW5hdG9yXG4gICAgaWYgKCF0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRpb25Db250cm9scykge1xuICAgICAgdGhpcy5wYWdpbmF0b3IgPSBuZXcgT0Jhc2VUYWJsZVBhZ2luYXRvcigpO1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSB0aGlzLnF1ZXJ5Um93cztcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgICB0aGlzLnBhZ2luYXRvci5zaG93Rmlyc3RMYXN0QnV0dG9ucyA9IHRoaXMuc2hvd1BhZ2luYXRvckZpcnN0TGFzdEJ1dHRvbnM7XG4gICAgfVxuXG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSkpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGUgPSAhIXRoaXMuc3RhdGUuc2VsZWN0Q29sdW1uVmlzaWJsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2hlY2tpbmcgdGhlIG9yaWdpbmFsIHNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSB3aXRoIHNlbGVjdC1jb2x1bW4tdmlzaWJsZSBpbiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaW4gbG9jYWwgc3RvcmFnZVxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc2VsZWN0Q29sdW1uVmlzaWJsZSlcbiAgICAgICAgJiYgdGhpcy5zZWxlY3RBbGxDaGVja2JveFZpc2libGUgPT09IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc2VsZWN0Q29sdW1uVmlzaWJsZSkge1xuICAgICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gISF0aGlzLnN0YXRlLnNlbGVjdENvbHVtblZpc2libGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gdGhpcy5zZWxlY3RBbGxDaGVja2JveFZpc2libGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9Jbml0aWFsaXplIHNob3cgZmlsdGVyIGJ5IGNvbHVtbiBpY29uXG4gICAgdGhpcy5pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSB0aGlzLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZUNoZWNrYm94Q29sdW1uKCk7XG5cbiAgICBpZiAodGhpcy5zdG9yZVN0YXRlKSB7XG4gICAgICAvLyBpZiBxdWVyeS1yb3dzIGluIGluaXRpYWwgY29uZmlndXJhdGlvbiBpcyBlcXVhbHMgdG8gb3JpZ2luYWwgcXVlcnktcm93cyBpbnB1dFxuICAgICAgLy8gcXVlcnlfcm93cyB3aWxsIGJlIHRoZSB2YWx1ZSBpbiBsb2NhbCBzdG9yYWdlXG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5xdWVyeVJvd3MpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24ucXVlcnlSb3dzKVxuICAgICAgICAmJiB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnF1ZXJ5Um93cyA9PT0gdGhpcy5vcmlnaW5hbFF1ZXJ5Um93cykge1xuICAgICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUucXVlcnlSb3dzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB1cGRhdGVTdGF0ZUV4cGFuZGVkQ29sdW1uKCkge1xuICAgIGlmICghdGhpcy50YWJsZVJvd0V4cGFuZGFibGUgfHwgIXRoaXMudGFibGVSb3dFeHBhbmRhYmxlLmV4cGFuZGFibGVDb2x1bW5WaXNpYmxlKSB7IHJldHVybjsgfVxuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdID09PSBDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QgJiYgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1sxXSAhPT0gQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucyA9IFt0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdXS5jb25jYXQoQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSwgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5zcGxpY2UoMSkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1swXSAhPT0gQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyVGFiTGlzdGVuZXIoKSB7XG4gICAgLy8gV2hlbiB0YWJsZSBpcyBjb250YWluZWQgaW50byB0YWIgY29tcG9uZW50LCBpdCBpcyBuZWNlc3NhcnkgdG8gaW5pdCB0YWJsZSBjb21wb25lbnQgd2hlbiBhdHRhY2hlZCB0byBET00uXG4gICAgdGhpcy50YWJHcm91cENoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMudGFiR3JvdXBDb250YWluZXIuc2VsZWN0ZWRUYWJDaGFuZ2Uuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgIGxldCBpbnRlcnZhbDtcbiAgICAgIGNvbnN0IHRpbWVyQ2FsbGJhY2sgPSAodGFiOiBNYXRUYWIpID0+IHtcbiAgICAgICAgaWYgKHRhYiAmJiB0YWIuY29udGVudC5pc0F0dGFjaGVkKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgaWYgKHRhYiA9PT0gdGhpcy50YWJDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zaWRlVGFiQnVnV29ya2Fyb3VuZCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ1F1ZXJ5KSB7XG4gICAgICAgICAgICAgIHRoaXMucXVlcnlEYXRhKHRoaXMucGVuZGluZ1F1ZXJ5RmlsdGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsgdGltZXJDYWxsYmFjayhldnQudGFiKTsgfSwgMTAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNpZGVUYWJCdWdXb3JrYXJvdW5kKCkge1xuICAgIHRoaXMucmVmcmVzaFNvcnRIZWFkZXJzKCk7XG4gIH1cblxuICByZWdpc3RlclNvcnRMaXN0ZW5lcigpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0KSkge1xuICAgICAgdGhpcy5zb3J0U3Vic2NyaXB0aW9uID0gdGhpcy5zb3J0Lm9Tb3J0Q2hhbmdlLnN1YnNjcmliZSh0aGlzLm9uU29ydENoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuc29ydC5zZXRNdWx0aXBsZVNvcnQodGhpcy5tdWx0aXBsZVNvcnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNvcnRDb2x1bW5zICYmIHRoaXMuc3RhdGljRGF0YSkge1xuICAgICAgdGhpcy51cGRhdGVTb3J0aW5nU3ViamVjdCh0cnVlKTtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU29ydGluZ1N1YmplY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvKiB0aGUgbG9hZGluZ1NvcnRpbmdTdWJqZWN0IG5vdCByZWZyZXNoIGluIHRoZSB0ZW1wbGF0ZVxuICAgIGJlY2F1c2UgY2hhbmdlIGRldGVjdGlvbiBub3Qgd29ya2luZyB3aXRoIHZpcnR1YWwgc2Nyb2xsaW5nICovXG4gICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICBpZiAobmdab25lKSB7XG4gICAgICBuZ1pvbmUucnVuKCgpID0+IHRoaXMubG9hZGluZ1NvcnRpbmdTdWJqZWN0Lm5leHQodmFsdWUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRpbmdTb3J0aW5nU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmNkICYmICEodGhpcy5jZCBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uU29ydENoYW5nZShzb3J0QXJyYXk6IGFueVtdKSB7XG4gICAgdGhpcy5zb3J0Q29sQXJyYXkgPSBbXTtcbiAgICBzb3J0QXJyYXkuZm9yRWFjaCgoc29ydCkgPT4ge1xuICAgICAgaWYgKHNvcnQuZGlyZWN0aW9uICE9PSAnJykge1xuICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5wdXNoKHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiBzb3J0LmlkLFxuICAgICAgICAgIGFzY2VuZGVudDogc29ydC5kaXJlY3Rpb24gPT09IENvZGVzLkFTQ19TT1JUXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTb3J0aW5nU3ViamVjdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBzZXREYXRhc291cmNlKCkge1xuICAgIC8vRGVsZXRlZCBwcmV2aW91cyBpbnN0YW5jZSBhbmQgc3Vic2NyaWJlcnNcbiAgICBkZWxldGUgdGhpcy5kYXRhU291cmNlO1xuICAgIGlmICh0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlKSB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBkYXRhU291cmNlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UYWJsZURhdGFTb3VyY2VTZXJ2aWNlKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBkYXRhU291cmNlU2VydmljZS5nZXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnJlZ2lzdGVyRGF0YVNvdXJjZUxpc3RlbmVycygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyRGF0YVNvdXJjZUxpc3RlbmVycygpIHtcbiAgICB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlID0gdGhpcy5kYXRhU291cmNlLm9uUmVuZGVyZWREYXRhQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnN0b3BFZGl0aW9uKCk7XG4gICAgICB0aGlzLmNoZWNrU2VsZWN0ZWRJdGVtRGF0YSgpO1xuICAgICAgaWYgKCF0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlU29ydGluZ1N1YmplY3QoZmFsc2UpO1xuICAgICAgICAgIGlmICh0aGlzLmNkICYmICEodGhpcy5jZCBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFeHBhbmRlZFJvd0NvbnRhaW5lckNsYXNzKHJvd0luZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBPVGFibGVDb21wb25lbnQuRVhQQU5ERURfUk9XX0NPTlRBSU5FUl9DTEFTUyArIHJvd0luZGV4O1xuICB9XG5cbiAgcHVibGljIGdldEV4cGFuZGFibGVJdGVtcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZUl0ZW0uc2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdG8gZXhwYW5kIG9yIGNvbGxhcHNlIHRoZSBleHBhbmRhYmxlIHJvdy5cbiAgICogQHBhcmFtIGl0ZW1cbiAgICogQHBhcmFtIHJvd0luZGV4XG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgcHVibGljIHRvb2dsZVJvd0V4cGFuZGFibGUoaXRlbTogYW55LCByb3dJbmRleDogbnVtYmVyLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5leHBhbmRhYmxlSXRlbS50b2dnbGUoaXRlbSk7XG5cbiAgICBpZiAodGhpcy5wb3J0YWxIb3N0W3Jvd0luZGV4XSkge1xuICAgICAgdGhpcy5wb3J0YWxIb3N0W3Jvd0luZGV4XS5kZXRhY2goKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRTdGF0ZUV4cGFuZChpdGVtKSA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgIGNvbnN0IGV2ZW50VGFibGVSb3dFeHBhbmRhYmxlQ2hhbmdlID0gdGhpcy5lbWl0VGFibGVSb3dFeHBhbmRhYmxlQ2hhbmdlRXZlbnQoaXRlbSwgcm93SW5kZXgpO1xuICAgICAgdGhpcy50YWJsZVJvd0V4cGFuZGFibGUub25Db2xsYXBzZWQuZW1pdChldmVudFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9ydGFsSG9zdFtyb3dJbmRleF0gPSBuZXcgRG9tUG9ydGFsT3V0bGV0KFxuICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLicgKyB0aGlzLmdldEV4cGFuZGVkUm93Q29udGFpbmVyQ2xhc3Mocm93SW5kZXgpKSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5hcHBSZWYsXG4gICAgICAgIHRoaXMuaW5qZWN0b3JcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlUG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMudGFibGVSb3dFeHBhbmRhYmxlLnRlbXBsYXRlUmVmLCB0aGlzLl92aWV3Q29udGFpbmVyUmVmLCB7ICRpbXBsaWNpdDogaXRlbSB9KTtcbiAgICAgIHRoaXMucG9ydGFsSG9zdFtyb3dJbmRleF0uYXR0YWNoVGVtcGxhdGVQb3J0YWwodGVtcGxhdGVQb3J0YWwpO1xuICAgICAgY29uc3QgZXZlbnRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2UgPSB0aGlzLmVtaXRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2VFdmVudChpdGVtLCByb3dJbmRleCk7XG4gICAgICB0aGlzLnRhYmxlUm93RXhwYW5kYWJsZS5vbkV4cGFuZGVkLmVtaXQoZXZlbnRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZUV2ZW50KGRhdGEsIHJvd0luZGV4KSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgT1RhYmxlUm93RXhwYW5kZWRDaGFuZ2UoKTtcbiAgICBldmVudC5yb3dJbmRleCA9IHJvd0luZGV4O1xuICAgIGV2ZW50LmRhdGEgPSBkYXRhO1xuXG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGlzRXhwYW5kZWQoZGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZUl0ZW0uaXNTZWxlY3RlZChkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGF0ZUV4cGFuZChyb3cpIHtcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkKHJvdykgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCc7XG4gIH1cblxuICBwdWJsaWMgaXNDb2x1bW5FeHBhbmRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoVXRpbC5pc0RlZmluZWQodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuX29UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbikpID8gdGhpcy5fb1RhYmxlT3B0aW9ucy5leHBhbmRhYmxlQ29sdW1uLnZpc2libGUgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBoYXNFeHBhbmRlZFJvdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpO1xuICB9XG5cbiAgcHVibGljIGhhc0luc2VydGFibGVSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtVmlzaWJsZUNvbHVtbnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBtYW5hZ2VzIHRoZSBjYWxsIHRvIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBmaWx0ZXJcbiAgICogQHBhcmFtIG92cnJBcmdzXG4gICAqL1xuICBxdWVyeURhdGEoZmlsdGVyPzogYW55LCBvdnJyQXJncz86IE9RdWVyeURhdGFBcmdzKSB7XG4gICAgLy8gSWYgdGFiIGV4aXN0cyBhbmQgaXMgbm90IGFjdGl2ZSB0aGVuIHdhaXQgZm9yIHF1ZXJ5RGF0YVxuICAgIGlmICh0aGlzLmlzSW5zaWRlSW5hY3RpdmVUYWIoKSkge1xuICAgICAgdGhpcy5wZW5kaW5nUXVlcnkgPSB0cnVlO1xuICAgICAgdGhpcy5wZW5kaW5nUXVlcnlGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ1F1ZXJ5ID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nUXVlcnlGaWx0ZXIgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnF1ZXJ5Q2VsbFJlbmRlcmVycygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBzdXBlci5xdWVyeURhdGEoZmlsdGVyLCBvdnJyQXJncyk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNJbnNpZGVJbmFjdGl2ZVRhYigpOiBib29sZWFuIHtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKHRoaXMudGFiQ29udGFpbmVyICYmIHRoaXMudGFiR3JvdXBDb250YWluZXIpIHtcbiAgICAgIHJlc3VsdCA9ICEodGhpcy50YWJDb250YWluZXIuaXNBY3RpdmUgfHwgKHRoaXMudGFiR3JvdXBDb250YWluZXIuc2VsZWN0ZWRJbmRleCA9PT0gdGhpcy50YWJDb250YWluZXIucG9zaXRpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcjogYW55ID0ge30pOiBhbnkge1xuICAgIGxldCBmaWx0ZXIgPSBleGlzdGluZ0ZpbHRlcjtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcikubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBwYXJlbnRJdGVtRXhwciA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25Gcm9tT2JqZWN0KGZpbHRlcik7XG4gICAgICAgIGZpbHRlciA9IHt9O1xuICAgICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0gPSBwYXJlbnRJdGVtRXhwcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJlQ29sRmlsdGVyID0gdGhpcy5nZXRDb2x1bW5GaWx0ZXJzRXhwcmVzc2lvbigpO1xuICAgICAgLy8gQWRkIGNvbHVtbiBmaWx0ZXJzIGJhc2ljIGV4cHJlc3Npb24gdG8gY3VycmVudCBmaWx0ZXJcbiAgICAgIGlmIChiZUNvbEZpbHRlciAmJiAhVXRpbC5pc0RlZmluZWQoZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldKSkge1xuICAgICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0gPSBiZUNvbEZpbHRlcjtcbiAgICAgIH0gZWxzZSBpZiAoYmVDb2xGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldID1cbiAgICAgICAgICBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRDb21wbGV4RXhwcmVzc2lvbihmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0sIGJlQ29sRmlsdGVyLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuZ2V0Q29tcG9uZW50RmlsdGVyKGZpbHRlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UXVpY2tGaWx0ZXJFeHByZXNzaW9uKCk6IEV4cHJlc3Npb24ge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSAmJiB0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC5maWx0ZXJFeHByZXNzaW9uO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldENvbHVtbkZpbHRlcnNFeHByZXNzaW9uKCk6IEV4cHJlc3Npb24ge1xuICAgIC8vIEFwcGx5IGNvbHVtbiBmaWx0ZXJzXG4gICAgY29uc3QgY29sdW1uRmlsdGVyczogT0NvbHVtblZhbHVlRmlsdGVyW10gPSB0aGlzLmRhdGFTb3VyY2UuZ2V0Q29sdW1uVmFsdWVGaWx0ZXJzKCk7XG4gICAgY29uc3QgYmVDb2x1bW5GaWx0ZXJzOiBBcnJheTxFeHByZXNzaW9uPiA9IFtdO1xuICAgIGNvbHVtbkZpbHRlcnMuZm9yRWFjaChjb2xGaWx0ZXIgPT4ge1xuICAgICAgLy8gUHJlcGFyZSBiYXNpYyBleHByZXNzaW9uc1xuICAgICAgc3dpdGNoIChjb2xGaWx0ZXIub3BlcmF0b3IpIHtcbiAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLklOOlxuICAgICAgICAgIGlmIChVdGlsLmlzQXJyYXkoY29sRmlsdGVyLnZhbHVlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlc0luOiBBcnJheTxFeHByZXNzaW9uPiA9IGNvbEZpbHRlci52YWx1ZXMubWFwKHZhbHVlID0+IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25FcXVhbHMoY29sRmlsdGVyLmF0dHIsIHZhbHVlKSk7XG4gICAgICAgICAgICBsZXQgYmVJbjogRXhwcmVzc2lvbiA9IGJlc0luLnBvcCgpO1xuICAgICAgICAgICAgYmVzSW4uZm9yRWFjaChiZSA9PiB7XG4gICAgICAgICAgICAgIGJlSW4gPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRDb21wbGV4RXhwcmVzc2lvbihiZUluLCBiZSwgRmlsdGVyRXhwcmVzc2lvblV0aWxzLk9QX09SKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goYmVJbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuQkVUV0VFTjpcbiAgICAgICAgICBpZiAoVXRpbC5pc0FycmF5KGNvbEZpbHRlci52YWx1ZXMpICYmIGNvbEZpbHRlci52YWx1ZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBiZUZyb20gPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uTW9yZUVxdWFsKGNvbEZpbHRlci5hdHRyLCBjb2xGaWx0ZXIudmFsdWVzWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGJlVG8gPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uTGVzc0VxdWFsKGNvbEZpbHRlci5hdHRyLCBjb2xGaWx0ZXIudmFsdWVzWzFdKTtcbiAgICAgICAgICAgIGJlQ29sdW1uRmlsdGVycy5wdXNoKEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKGJlRnJvbSwgYmVUbywgRmlsdGVyRXhwcmVzc2lvblV0aWxzLk9QX0FORCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkVRVUFMOlxuICAgICAgICAgIGJlQ29sdW1uRmlsdGVycy5wdXNoKEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25MaWtlKGNvbEZpbHRlci5hdHRyLCBjb2xGaWx0ZXIudmFsdWVzKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMOlxuICAgICAgICAgIGJlQ29sdW1uRmlsdGVycy5wdXNoKEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25MZXNzRXF1YWwoY29sRmlsdGVyLmF0dHIsIGNvbEZpbHRlci52YWx1ZXMpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLk1PUkVfRVFVQUw6XG4gICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbk1vcmVFcXVhbChjb2xGaWx0ZXIuYXR0ciwgY29sRmlsdGVyLnZhbHVlcykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgfSk7XG4gICAgLy8gQnVpbGQgY29tcGxldGUgY29sdW1uIGZpbHRlcnMgYmFzaWMgZXhwcmVzc2lvblxuICAgIGxldCBiZUNvbEZpbHRlcjogRXhwcmVzc2lvbiA9IGJlQ29sdW1uRmlsdGVycy5wb3AoKTtcbiAgICBiZUNvbHVtbkZpbHRlcnMuZm9yRWFjaChiZSA9PiB7XG4gICAgICBiZUNvbEZpbHRlciA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKGJlQ29sRmlsdGVyLCBiZSwgRmlsdGVyRXhwcmVzc2lvblV0aWxzLk9QX0FORCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJlQ29sRmlsdGVyO1xuICB9XG5cbiAgdXBkYXRlUGFnaW5hdGlvbkluZm8ocXVlcnlSZXM6IGFueSkge1xuICAgIHN1cGVyLnVwZGF0ZVBhZ2luYXRpb25JbmZvKHF1ZXJ5UmVzKTtcbiAgfVxuXG4gIGluaXRWaWV3UG9ydChkYXRhOiBhbnlbXSkge1xuXG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0ICYmIGRhdGEpIHtcbiAgICAgIGNvbnN0IGhlYWRlckVsUmVmID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoaGVhZGVyU2VsZWN0b3IpO1xuICAgICAgY29uc3QgZm9vdGVyRWxSZWYgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcihmb290ZXJTZWxlY3Rvcik7XG4gICAgICBjb25zdCByb3dFbFJlZiA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHJvd1NlbGVjdG9yKTtcblxuICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gaGVhZGVyRWxSZWYgPyBoZWFkZXJFbFJlZi5vZmZzZXRIZWlnaHQgOiAwO1xuICAgICAgY29uc3QgZm9vdGVySGVpZ2h0ID0gZm9vdGVyRWxSZWYgPyBmb290ZXJFbFJlZi5vZmZzZXRIZWlnaHQgOiAwO1xuICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gcm93RWxSZWYgPyByb3dFbFJlZi5vZmZzZXRIZWlnaHQgOiBPVGFibGVDb21wb25lbnQuREVGQVVMVF9ST1dfSEVJR0hUO1xuXG4gICAgICAvLyBzZXQgY29uZmlnIHZpZXdwb3J0XG4gICAgICB0aGlzLnNjcm9sbFN0cmF0ZWd5LnNldENvbmZpZyhyb3dIZWlnaHQsIGhlYWRlckhlaWdodCwgZm9vdGVySGVpZ2h0KTtcbiAgICAgIGlmICh0aGlzLnByZXZpb3VzUmVuZGVyZXJEYXRhICE9PSB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kuZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXREYXRhKGRhdGE6IGFueSwgc3FsVHlwZXM6IGFueSkge1xuICAgIHRoaXMuZGFvVGFibGUuc3FsVHlwZXNDaGFuZ2UubmV4dChzcWxUeXBlcyk7XG4gICAgdGhpcy5kYW9UYWJsZS5zZXREYXRhQXJyYXkoZGF0YSk7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25QYWdpbmF0ZWREYXRhTG9hZGVkLCBkYXRhKTtcbiAgICB9XG4gICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vbkRhdGFMb2FkZWQsIHRoaXMuZGFvVGFibGUuZGF0YSk7XG4gIH1cblxuICBzaG93RGlhbG9nRXJyb3IoZXJyb3I6IHN0cmluZywgZXJyb3JPcHRpb25hbD86IHN0cmluZykge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChlcnJvcikgJiYgIVV0aWwuaXNPYmplY3QoZXJyb3IpKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYWxlcnQoJ0VSUk9SJywgZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYWxlcnQoJ0VSUk9SJywgZXJyb3JPcHRpb25hbCk7XG4gICAgfVxuICB9XG5cbiAgcHJvamVjdENvbnRlbnRDaGFuZ2VkKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTb3J0aW5nU3ViamVjdChmYWxzZSk7XG4gICAgfSwgNTAwKTtcbiAgICB0aGlzLmxvYWRpbmdTY3JvbGxTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG4gICAgdGhpcy5pbml0Vmlld1BvcnQodGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YSk7XG5cbiAgICBpZiAodGhpcy5wcmV2aW91c1JlbmRlcmVyRGF0YSAhPT0gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YSkge1xuICAgICAgdGhpcy5wcmV2aW91c1JlbmRlcmVyRGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGE7XG4gICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uQ29udGVudENoYW5nZSwgdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUuc2VsZWN0aW9uICYmIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2hlY2tTZWxlY3RlZEl0ZW1EYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXR0cmlidXRlc1ZhbHVlc1RvUXVlcnkoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3QgY29sdW1ucyA9IHN1cGVyLmdldEF0dHJpYnV0ZXNWYWx1ZXNUb1F1ZXJ5KCk7XG4gICAgaWYgKHRoaXMuYXZvaWRRdWVyeUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IGNvbHVtbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgY29sID0gY29sdW1uc1tpXTtcbiAgICAgICAgaWYgKHRoaXMuYXZvaWRRdWVyeUNvbHVtbnMuaW5kZXhPZihjb2wpICE9PSAtMSkge1xuICAgICAgICAgIGNvbHVtbnMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cbiAgZ2V0UXVlcnlBcmd1bWVudHMoZmlsdGVyOiBvYmplY3QsIG92cnJBcmdzPzogT1F1ZXJ5RGF0YUFyZ3MpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBxdWVyeUFyZ3VtZW50cyA9IHN1cGVyLmdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlciwgb3ZyckFyZ3MpO1xuICAgIE9iamVjdC5hc3NpZ24ocXVlcnlBcmd1bWVudHNbM10sIHRoaXMuZ2V0U3FsVHlwZXNGb3JGaWx0ZXIocXVlcnlBcmd1bWVudHNbMV0pKTtcbiAgICBPYmplY3QuYXNzaWduKHF1ZXJ5QXJndW1lbnRzWzNdLCBvdnJyQXJncyA/IG92cnJBcmdzLnNxbHR5cGVzIHx8IHt9IDoge30pO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBxdWVyeUFyZ3VtZW50c1s1XSA9IHRoaXMucGFnaW5hdG9yLmlzU2hvd2luZ0FsbFJvd3MocXVlcnlBcmd1bWVudHNbNV0pID8gdGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlciA6IHF1ZXJ5QXJndW1lbnRzWzVdO1xuICAgICAgcXVlcnlBcmd1bWVudHNbNl0gPSB0aGlzLnNvcnRDb2xBcnJheTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5QXJndW1lbnRzO1xuICB9XG5cbiAgZ2V0U3FsVHlwZXNGb3JGaWx0ZXIoZmlsdGVyKTogb2JqZWN0IHtcbiAgICBjb25zdCBhbGxTcWxUeXBlcyA9IHRoaXMuZ2V0U3FsVHlwZXMoKTtcbiAgICBjb25zdCBzcWxUeXBlcyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGFsbFNxbFR5cGVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoZmlsdGVyLmluZGV4T2Yoa2V5KSAhPT0gLTEgJiYgYWxsU3FsVHlwZXNba2V5XSAhPT0gU1FMVHlwZXMuT1RIRVIpIHtcbiAgICAgICAgc3FsVHlwZXNba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNxbFR5cGVzO1xuICB9XG5cbiAgb25FeHBvcnRCdXR0b25DbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vbkV4cG9ydEJ1dHRvbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZUNvbHVtbnNWaXNpYmlsaXR5Q2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25DaGFuZ2VDb2x1bW5zVmlzaWJpbGl0eUNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbk1hdFRhYmxlQ29udGVudENoYW5nZWQoKSB7XG4gICAgLy9cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBuYXZpZ2F0aW9uIHRvIG5ldyBpdGVtIGluc2VydGlvblxuICAgKi9cbiAgYWRkKCkge1xuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX0lOU0VSVCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VwZXIuaW5zZXJ0RGV0YWlsKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBzZWxlY3RlZCByb3dzXG4gICAqIEBwYXJhbSBbY2xlYXJTZWxlY3RlZEl0ZW1zXVxuICAgKi9cbiAgcmVtb3ZlKGNsZWFyU2VsZWN0ZWRJdGVtczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fREVMRVRFKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5nZXRTZWxlY3RlZEl0ZW1zKCk7XG4gICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oJ0NPTkZJUk0nLCAnTUVTU0FHRVMuQ09ORklSTV9ERUxFVEUnKS50aGVuKHJlcyA9PiB7XG4gICAgICBpZiAocmVzID09PSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFTZXJ2aWNlICYmICh0aGlzLmRlbGV0ZU1ldGhvZCBpbiB0aGlzLmRhdGFTZXJ2aWNlKSAmJiB0aGlzLmVudGl0eSAmJiAodGhpcy5rZXlzQXJyYXkubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gU2VydmljZVV0aWxzLmdldEFycmF5UHJvcGVydGllcyhzZWxlY3RlZEl0ZW1zLCB0aGlzLmtleXNBcnJheSk7XG4gICAgICAgICAgY29uc3Qgc3FsVHlwZXNBcmcgPSB0aGlzLmdldFNxbFR5cGVzT2ZLZXlzKCk7XG4gICAgICAgICAgdGhpcy5kYW9UYWJsZS5yZW1vdmVRdWVyeShmaWx0ZXJzLCBzcWxUeXBlc0FyZykuc3Vic2NyaWJlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuZXh0OiAodikgPT4ge1xuICAgICAgICAgICAgICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25Sb3dEZWxldGVkLCBzZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nRXJyb3IoZSwgJ01FU1NBR0VTLkVSUk9SX0RFTEVURScpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyaW5nIHRoYXQgdGhlIGRlbGV0ZWQgaXRlbXMgd2lsbCBub3QgbG9uZ2VyIGJlIHBhcnQgb2YgdGhlIHNlbGVjdGlvbk1vZGVsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVMb2NhbEl0ZW1zKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xlYXJTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hzIHRhYmxlIGNvbXBvbmVudFxuICAgKi9cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyBhbmQgc2VsZWN0IGFsbCBjaGVja2JveFxuICAgKi9cbiAgc2hvd0FuZFNlbGVjdEFsbENoZWNrYm94KCkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uTW9kZU11bHRpcGxlKCkpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdEFsbENoZWNrYm94KSB7XG4gICAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChjbGVhclNlbGVjdGVkSXRlbXM6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIC8vIEluaXRpYWxpemUgcGFnZSBpbmRleFxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG4gICAgICB0aGlzLnJlbG9hZERhdGEoY2xlYXJTZWxlY3RlZEl0ZW1zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVsb2FkcyBkYXRhXG4gICAqL1xuICByZWxvYWREYXRhKGNsZWFyU2VsZWN0ZWRJdGVtczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tFbmFibGVkQWN0aW9uUGVybWlzc2lvbihQZXJtaXNzaW9uc1V0aWxzLkFDVElPTl9SRUZSRVNIKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5yZWZyZXNoU2VsZWN0aW9uKCk7XG4gICAgaWYgKGNsZWFyU2VsZWN0ZWRJdGVtcykge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nUXVlcnkgPSB0cnVlO1xuICAgIGxldCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBxdWVyeUFyZ3MgPSB7XG4gICAgICAgIG9mZnNldDogdGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzLFxuICAgICAgICBsZW5ndGg6IHRoaXMucXVlcnlSb3dzXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLnN0b3BFZGl0aW9uKGZhbHNlKTtcbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBoYW5kbGVDbGljayhyb3c6IGFueSwgY29sdW1uOiBPQ29sdW1uLCByb3dJbmRleDogbnVtYmVyLCBjZWxsUmVmOiBFbGVtZW50UmVmLCBldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY2xpY2tUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNsaWNrUHJldmVudCkge1xuICAgICAgICBpZiAodGhpcy5vZW5hYmxlZCAmJiBjb2x1bW4uZWRpdG9yXG4gICAgICAgICAgJiYgKHRoaXMuZGV0YWlsTW9kZSAhPT0gQ29kZXMuREVUQUlMX01PREVfQ0xJQ0spXG4gICAgICAgICAgJiYgKHRoaXMuZWRpdGlvbk1vZGUgPT09IENvZGVzLkVESVRJT05fTU9ERV9DTElDSykpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2YXRlQ29sdW1uRWRpdGlvbihjb2x1bW4sIHJvdywgY2VsbFJlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kb0hhbmRsZUNsaWNrKHJvdywgY29sdW1uLmF0dHIsIHJvd0luZGV4LCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY2xpY2tQcmV2ZW50ID0gZmFsc2U7XG4gICAgfSwgdGhpcy5jbGlja0RlbGF5KTtcblxuICB9XG5cbiAgZG9IYW5kbGVDbGljayhyb3c6IGFueSwgY29sdW1uOiBzdHJpbmcsIHJvd0luZGV4OiBudW1iZXIsICRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5vZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoKHRoaXMuZGV0YWlsTW9kZSA9PT0gQ29kZXMuREVUQUlMX01PREVfQ0xJQ0spKSB7XG4gICAgICB0aGlzLm9uQ2xpY2suZW1pdCh7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXgsIG1vdXNlRXZlbnQ6ICRldmVudCwgY29sdW1uTmFtZTogY29sdW1uLCBjZWxsOiByb3dbY29sdW1uXSB9KTtcbiAgICAgIHRoaXMuc2F2ZURhdGFOYXZpZ2F0aW9uSW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3cocm93KTtcbiAgICAgIHRoaXMudmlld0RldGFpbChyb3cpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpICYmICgkZXZlbnQuY3RybEtleSB8fCAkZXZlbnQubWV0YUtleSkpIHtcbiAgICAgIC8vIFRPRE86IHRlc3QgJGV2ZW50Lm1ldGFLZXkgb24gTUFDXG4gICAgICB0aGlzLnNlbGVjdGVkUm93KHJvdyk7XG4gICAgICB0aGlzLm9uQ2xpY2suZW1pdCh7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXgsIG1vdXNlRXZlbnQ6ICRldmVudCwgY29sdW1uTmFtZTogY29sdW1uLCBjZWxsOiByb3dbY29sdW1uXSB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlTXVsdGlwbGUoKSAmJiAkZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVTZWxlY3Rpb24ocm93KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2VsZWN0aW9uTW9kZU5vbmUoKSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpO1xuICAgICAgaWYgKHRoaXMuaXNSb3dTZWxlY3RlZChyb3cpICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAxICYmIHRoaXMuZWRpdGlvbkVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkFuZEVkaXRpbmcoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3cocm93KTtcbiAgICAgIHRoaXMub25DbGljay5lbWl0KHsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCwgbW91c2VFdmVudDogJGV2ZW50LCBjb2x1bW5OYW1lOiBjb2x1bW4sIGNlbGw6IHJvd1tjb2x1bW5dIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU11bHRpcGxlU2VsZWN0aW9uKGl0ZW06IGFueSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuaW5kZXhPZih0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFswXSk7XG4gICAgICBjb25zdCBsYXN0ID0gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YS5pbmRleE9mKGl0ZW0pO1xuICAgICAgY29uc3QgaW5kZXhGcm9tID0gTWF0aC5taW4oZmlyc3QsIGxhc3QpO1xuICAgICAgY29uc3QgaW5kZXhUbyA9IE1hdGgubWF4KGZpcnN0LCBsYXN0KTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuc2xpY2UoaW5kZXhGcm9tLCBpbmRleFRvICsgMSkuZm9yRWFjaChlID0+IHRoaXMuc2VsZWN0ZWRSb3coZSkpO1xuICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vbkNsaWNrLCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCkge1xuICAgIHN1cGVyLnNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCk7XG4gICAgdGhpcy5zdG9yZVBhZ2luYXRpb25TdGF0ZSA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVEb3VibGVDbGljayhyb3c6IGFueSwgY29sdW1uOiBPQ29sdW1uLCByb3dJbmRleDogbnVtYmVyLCBjZWxsUmVmOiBFbGVtZW50UmVmLCAkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5jbGlja1RpbWVyKTtcbiAgICB0aGlzLmNsaWNrUHJldmVudCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5vZW5hYmxlZCAmJiBjb2x1bW4uZWRpdG9yXG4gICAgICAmJiAoIUNvZGVzLmlzRG91YmxlQ2xpY2tNb2RlKHRoaXMuZGV0YWlsTW9kZSkpXG4gICAgICAmJiAoQ29kZXMuaXNEb3VibGVDbGlja01vZGUodGhpcy5lZGl0aW9uTW9kZSkpKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlQ29sdW1uRWRpdGlvbihjb2x1bW4sIHJvdywgY2VsbFJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25Eb3VibGVDbGljay5lbWl0KHsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCwgbW91c2VFdmVudDogJGV2ZW50LCBjb2x1bW5OYW1lOiBjb2x1bW4uYXR0ciwgY2VsbDogcm93W2NvbHVtbi5hdHRyXSB9KTtcbiAgICAgIGlmICh0aGlzLm9lbmFibGVkICYmIENvZGVzLmlzRG91YmxlQ2xpY2tNb2RlKHRoaXMuZGV0YWlsTW9kZSkpIHtcbiAgICAgICAgdGhpcy5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgICAgICB0aGlzLnZpZXdEZXRhaWwocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IGVkaXRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuc29tZShpdGVtID0+IGl0ZW0uZWRpdGluZyk7XG4gIH1cblxuICBoYW5kbGVET01DbGljayhldmVudCkge1xuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWRpdGlvbkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGF5Q29udGFpbmVyID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstb3ZlcmxheS1jb250YWluZXInKVswXTtcbiAgICBpZiAob3ZlcmxheUNvbnRhaW5lciAmJiBvdmVybGF5Q29udGFpbmVyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZUNvbnRhaW5lciA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuby10YWJsZS1jb250YWluZXInKTtcbiAgICBjb25zdCB0YWJsZUNvbnRlbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm8tdGFibGUtY29udGFpbmVyIHRhYmxlLm1hdC10YWJsZScpO1xuICAgIGlmICh0YWJsZUNvbnRhaW5lciAmJiB0YWJsZUNvbnRlbnQgJiYgdGFibGVDb250YWluZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAhdGFibGVDb250ZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWN0aXZhdGVDb2x1bW5FZGl0aW9uKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnksIGNlbGxSZWY6IGFueSkge1xuICAgIGlmIChjZWxsUmVmICYmIGNvbHVtbi5lZGl0aW5nICYmIHRoaXMuZWRpdGluZ0NlbGwgPT09IGNlbGxSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uUGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0T0NvbHVtblBlcm1pc3Npb25zKGNvbHVtbi5hdHRyKTtcbiAgICBpZiAoY29sdW1uUGVybWlzc2lvbnMuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHtjb2x1bW4uYXR0cn0gZWRpdGlvbiBub3QgYWxsb3dlZCBkdWUgdG8gcGVybWlzc2lvbnNgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uQW5kRWRpdGluZygpO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3cocm93KTtcbiAgICB0aGlzLmVkaXRpbmdDZWxsID0gY2VsbFJlZjtcbiAgICBjb25zdCByb3dEYXRhID0ge307XG4gICAgdGhpcy5rZXlzQXJyYXkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICByb3dEYXRhW2tleV0gPSByb3dba2V5XTtcbiAgICB9KTtcbiAgICByb3dEYXRhW2NvbHVtbi5hdHRyXSA9IHJvd1tjb2x1bW4uYXR0cl07XG4gICAgdGhpcy5lZGl0aW5nUm93ID0gcm93O1xuICAgIGNvbHVtbi5lZGl0aW5nID0gdHJ1ZTtcbiAgICBjb2x1bW4uZWRpdG9yLnN0YXJ0RWRpdGlvbihyb3dEYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZUNlbGxEYXRhKGNvbHVtbjogT0NvbHVtbiwgZGF0YTogYW55LCBzYXZlQ2hhbmdlczogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX1VQREFURSkpIHtcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBPYnNlcnZhYmxlKGlubmVyT2JzZXJ2ZXIgPT4ge1xuICAgICAgICBpbm5lck9ic2VydmVyLmVycm9yKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGNvbHVtbi5lZGl0aW5nID0gZmFsc2U7XG4gICAgaWYgKHNhdmVDaGFuZ2VzICYmIHRoaXMuZWRpdGluZ1JvdyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZWRpdGluZ1JvdywgZGF0YSk7XG4gICAgfVxuICAgIHRoaXMuc3RvcEVkaXRpb24oKTtcbiAgICBpZiAoc2F2ZUNoYW5nZXMgJiYgY29sdW1uLmVkaXRvci51cGRhdGVSZWNvcmRPbkVkaXQpIHtcbiAgICAgIGNvbnN0IHRvVXBkYXRlID0ge307XG4gICAgICB0b1VwZGF0ZVtjb2x1bW4uYXR0cl0gPSBkYXRhW2NvbHVtbi5hdHRyXTtcbiAgICAgIGNvbnN0IGt2ID0gdGhpcy5leHRyYWN0S2V5c0Zyb21SZWNvcmQoZGF0YSk7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVSZWNvcmQoa3YsIHRvVXBkYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRLZXlzVmFsdWVzKCk6IGFueVtdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRBbGxWYWx1ZXMoKTtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKHJvd1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2hvd3NTZWxlY3RzKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vblNob3dzU2VsZWN0cygpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRpYWxpemVDaGVja2JveENvbHVtbigpIHtcbiAgICAvLyBJbml0aWFsaXppbmcgcm93IHNlbGVjdGlvbiBsaXN0ZW5lclxuICAgIGlmICghdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24gJiYgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZSgoc2VsZWN0aW9uRGF0YTogU2VsZWN0aW9uQ2hhbmdlPGFueT4pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlclNlbGVjdGlvbkV2ZW50cyAmJiBzZWxlY3Rpb25EYXRhKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblJvd1NlbGVjdGVkLCBzZWxlY3Rpb25EYXRhLmFkZGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEucmVtb3ZlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uUm93RGVzZWxlY3RlZCwgc2VsZWN0aW9uRGF0YS5yZW1vdmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkNvbHVtblN0YXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlU2VsZWN0aW9uQ29sdW1uU3RhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zICYmIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGVcbiAgICAgICYmIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnNbMF0gIT09IENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zICYmICF0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlXG4gICAgICAmJiB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdID09PSBDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMuc2hpZnQoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTdGF0ZUV4cGFuZGVkQ29sdW1uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtUm93U2VsZWN0ZWRJbkN1cnJlbnREYXRhKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZSA/IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZmlsdGVyKHggPT4gIXRoaXMuaXNEaXNhYmxlQ2hlY2tib3goeCkgJiYgdGhpcy5pc1Jvd1NlbGVjdGVkKHgpKS5sZW5ndGggOiAwO1xuICB9XG5cbiAgcHVibGljIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLmdldE51bVJvd1NlbGVjdGVkSW5DdXJyZW50RGF0YSgpO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UgPyB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID4gMCAmJiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcbiAgfVxuXG4gIHB1YmxpYyBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLmdldE51bVJvd1NlbGVjdGVkSW5DdXJyZW50RGF0YSgpO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UgPyB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID4gMCAmJiBudW1Sb3dzID4gMCAmJiBudW1TZWxlY3RlZCAhPT0gbnVtUm93cztcbiAgfVxuXG4gIHB1YmxpYyBtYXN0ZXJUb2dnbGUoZXZlbnQ6IE1hdENoZWNrYm94Q2hhbmdlKTogdm9pZCB7XG4gICAgZXZlbnQuY2hlY2tlZCA/IHRoaXMuc2VsZWN0QWxsKCkgOiB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZm9yRWFjaChyb3cgPT4gdGhpcy5zZXRTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3Rpb25DaGVja2JveFRvZ2dsZShldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UsIHJvdzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlU2luZ2xlKCkpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gICAgZXZlbnQuY2hlY2tlZCA/IHRoaXMuc2VsZWN0ZWRSb3cocm93KSA6IHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XG4gICAgdGhpcy5zdGF0ZS5zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RlZFJvdyhyb3c6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2V0U2VsZWN0ZWQocm93KTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZSkpIHtcbiAgICAgIHRoaXMuc3RhdGUuc2VsZWN0aW9uID0gW107XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGVkKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZUNoZWNrYm94KGl0ZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChpdGVtKSAmJiAhdGhpcy5pc1Jvd1NlbGVjdGVkKGl0ZW0pKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNob3dEZWxldGVCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlQnV0dG9uO1xuICB9XG5cbiAgZ2V0VHJhY2tCeUZ1bmN0aW9uKCk6IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICByZXR1cm4gKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4ge1xuXG4gICAgICBsZXQgaXRlbUlkOiBzdHJpbmcgPSAnJztcblxuICAgICAgaWYgKHRoaXMuaXNHcm91cChpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgaXRlbUlkICs9IGl0ZW0uY29sdW1uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5c0xlbmdodCA9IHNlbGYua2V5c0FycmF5Lmxlbmd0aDtcbiAgICAgICAgc2VsZi5rZXlzQXJyYXkuZm9yRWFjaCgoa2V5OiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3VmZml4ID0gaWR4IDwgKGtleXNMZW5naHQgLSAxKSA/ICc7JyA6ICcnO1xuICAgICAgICAgIGl0ZW1JZCArPSBpdGVtW2tleV0gKyBzdWZmaXg7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNBc3luY0FuZFZpc2libGVDb2xzID0gdGhpcy5hc3luY0xvYWRDb2x1bW5zLnNvbWUoYyA9PiB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluY2x1ZGVzKGMpKTtcbiAgICAgIGlmIChzZWxmLmFzeW5jTG9hZENvbHVtbnMubGVuZ3RoICYmIGhhc0FzeW5jQW5kVmlzaWJsZUNvbHMgJiYgIXNlbGYuZmluaXNoUXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgc2VsZi5xdWVyeVJvd0FzeW5jRGF0YShpbmRleCwgaXRlbSk7XG4gICAgICAgIGlmIChzZWxmLnBhZ2luYXRvciAmJiBpbmRleCA9PT0gKHNlbGYucGFnaW5hdG9yLnBhZ2VTaXplIC0gMSkpIHtcbiAgICAgICAgICBzZWxmLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbUlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1JZDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcXVlcnlSb3dBc3luY0RhdGEocm93SW5kZXg6IG51bWJlciwgcm93RGF0YTogYW55KSB7XG4gICAgY29uc3Qga3YgPSBTZXJ2aWNlVXRpbHMuZ2V0T2JqZWN0UHJvcGVydGllcyhyb3dEYXRhLCB0aGlzLmtleXNBcnJheSk7XG4gICAgLy8gUmVwZWF0aW5nIGNoZWNraW5nIG9mIHZpc2libGUgY29sdW1uXG4gICAgY29uc3QgYXYgPSB0aGlzLmFzeW5jTG9hZENvbHVtbnMuZmlsdGVyKGMgPT4gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5pbmRleE9mKGMpICE9PSAtMSk7XG4gICAgaWYgKGF2Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2tpcHBpbmcgcXVlcnkgaWYgdGhlcmUgYXJlIG5vdCB2aXNpYmxlIGFzeW5jcm9uIGNvbHVtbnNcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uUXVlcnlBcmdzID0gW2t2LCBhdiwgdGhpcy5lbnRpdHksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgY29uc3QgcXVlcnlNZXRob2ROYW1lID0gdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kO1xuICAgIGlmICh0aGlzLmRhdGFTZXJ2aWNlICYmIChxdWVyeU1ldGhvZE5hbWUgaW4gdGhpcy5kYXRhU2VydmljZSkgJiYgdGhpcy5lbnRpdHkpIHtcbiAgICAgIGlmICh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbcm93SW5kZXhdKSB7XG4gICAgICAgIHRoaXMuYXN5bmNMb2FkU3Vic2NyaXB0aW9uc1tyb3dJbmRleF0udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXN5bmNMb2FkU3Vic2NyaXB0aW9uc1tyb3dJbmRleF0gPSB0aGlzLmRhdGFTZXJ2aWNlW3F1ZXJ5TWV0aG9kTmFtZV1cbiAgICAgICAgLmFwcGx5KHRoaXMuZGF0YVNlcnZpY2UsIGNvbHVtblF1ZXJ5QXJncylcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzLmlzU3VjY2Vzc2Z1bCgpKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmIChVdGlsLmlzQXJyYXkocmVzLmRhdGEpICYmIHJlcy5kYXRhLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICBkYXRhID0gcmVzLmRhdGFbMF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFV0aWwuaXNPYmplY3QocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICAgIGRhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGFvVGFibGUuc2V0QXN5bmNocm9ub3VzQ29sdW1uKGRhdGEsIHJvd0RhdGEpO1xuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHBhZ2UgdGFibGUgZGF0YS5cbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0Q3VycmVudERhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0Q3VycmVudEFsbERhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHJlbmRlcmVkIHZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsUmVuZGVyZWRWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5nZXRBbGxSZW5kZXJlckRhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGFnZSB0YWJsZSByZW5kZXJlciBkYXRhLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0UmVuZGVyZWRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmdldEN1cnJlbnRSZW5kZXJlckRhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgc3FsIHR5cGVzIGZyb20gZGF0YSBzb3VyY2UgYW5kIHRhYmxlIGNvbHVtbnNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFNxbFR5cGVzKCkge1xuICAgIGNvbnN0IGFsbFNxbFR5cGVzID0gVXRpbC5pc0RlZmluZWQodGhpcy5kYXRhU291cmNlLnNxbFR5cGVzKSA/IHRoaXMuZGF0YVNvdXJjZS5zcWxUeXBlcyA6IHt9O1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKChjb2w6IE9Db2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2wuc3FsVHlwZSkge1xuICAgICAgICBhbGxTcWxUeXBlc1tjb2wuYXR0cl0gPSBjb2wuc3FsVHlwZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWxsU3FsVHlwZXM7XG4gIH1cblxuICBzZXRPVGFibGVDb2x1bW5zRmlsdGVyKHRhYmxlQ29sdW1uc0ZpbHRlcjogT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCA9IHRhYmxlQ29sdW1uc0ZpbHRlcjtcbiAgfVxuXG4gIGdldCBmaWx0ZXJDb2x1bW5zKCk6IE9GaWx0ZXJDb2x1bW5bXSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uZmlsdGVyQ29sdW1ucyA9PT0gdGhpcy5vcmlnaW5hbEZpbHRlckNvbHVtbnNcbiAgICAgICYmIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucykge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxGaWx0ZXJDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IG9yaWdpbmFsRmlsdGVyQ29sdW1ucygpOiBBcnJheTxPRmlsdGVyQ29sdW1uPiB7XG4gICAgbGV0IHNvcnRDb2x1bW5zRmlsdGVyID0gW107XG4gICAgaWYgKHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgc29ydENvbHVtbnNGaWx0ZXIgPSB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuY29sdW1uc0FycmF5O1xuICAgIH1cbiAgICByZXR1cm4gc29ydENvbHVtbnNGaWx0ZXI7XG4gIH1cblxuICBnZXQgb3JpZ2luYWxHcm91cGVkQ29sdW1uc0FycmF5KCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBVdGlsLnBhcnNlQXJyYXkodGhpcy5ncm91cGVkQ29sdW1ucywgdHJ1ZSk7XG4gIH1cblxuICBnZXRTdG9yZWRDb2x1bW5zRmlsdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdG9yZWRGaWx0ZXJzO1xuICB9XG5cbiAgZ2V0U3RvcmVkR3JvdXBlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc3RvcmVkQ29uZmlndXJhdGlvbnM7XG4gIH1cblxuICBvbkZpbHRlckJ5Q29sdW1uQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25GaWx0ZXJCeUNvbHVtbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvblN0b3JlRmlsdGVyQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25TdG9yZUZpbHRlckNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkxvYWRGaWx0ZXJDbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vbkxvYWRGaWx0ZXJDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGVhckZpbHRlckNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uQ2xlYXJGaWx0ZXJDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBmaWx0ZXJzKGNvbHVtbiBmaWx0ZXIsIHF1aWNrZmlsdGVyIGFuZCBmaWx0ZXIgYnVpbGRlcikgYW5kIHJlbG9hZCBkYXRhXG4gICAqIEBwYXJhbSBbdHJpZ2dlckRhdGFzb3VyY2VVcGRhdGVdXG4gICAqL1xuICBjbGVhckZpbHRlcnModHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuY2xlYXJDb2x1bW5GaWx0ZXJzKHRyaWdnZXJEYXRhc291cmNlVXBkYXRlKTtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51ICYmIHRoaXMub1RhYmxlTWVudS5jb2x1bW5GaWx0ZXJPcHRpb24pIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5jb2x1bW5GaWx0ZXJPcHRpb24uc2V0QWN0aXZlKHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlKTtcbiAgICB9XG4gICAgdGhpcy5vbkZpbHRlckJ5Q29sdW1uQ2hhbmdlLmVtaXQoKTtcbiAgICBpZiAodGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC5zZXRWYWx1ZSh2b2lkIDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlckJ1aWxkZXIpIHtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci5jbGVhckZpbHRlcigpO1xuICAgICAgdGhpcy5maWx0ZXJCdWlsZGVyLnRyaWdnZXJSZWxvYWQoKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsZWFyQ29sdW1uRmlsdGVyKGF0dHI6IHN0cmluZywgdHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLmNsZWFyQ29sdW1uRmlsdGVyKGF0dHIsIHRyaWdnZXJEYXRhc291cmNlVXBkYXRlKTtcbiAgICB0aGlzLm9uRmlsdGVyQnlDb2x1bW5DaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChmYWxzZSk7XG4gIH1cblxuICBmaWx0ZXJCeUNvbHVtbihjb2x1bW5WYWx1ZUZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLmFkZENvbHVtbkZpbHRlcihjb2x1bW5WYWx1ZUZpbHRlcik7XG4gICAgdGhpcy5vbkZpbHRlckJ5Q29sdW1uQ2hhbmdlLmVtaXQoKTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbHVtbkZpbHRlcnModHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlLCBjb2x1bW5zQXR0cj86IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLmNsZWFyQ29sdW1uRmlsdGVycyh0cmlnZ2VyRGF0YXNvdXJjZVVwZGF0ZSwgY29sdW1uc0F0dHIpO1xuICAgIHRoaXMub25GaWx0ZXJCeUNvbHVtbkNoYW5nZS5lbWl0KCk7XG4gICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgfVxuXG4gIGlzQ29sdW1uRmlsdGVyYWJsZShjb2x1bW46IE9Db2x1bW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSA/IHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudC5pc0NvbHVtbkZpbHRlcmFibGUoY29sdW1uLmF0dHIpIDogdGhpcy5pc1NlYXJjaGVhYmxlQ29sdW1uKGNvbHVtbik7XG4gIH1cblxuICBpc1NlYXJjaGVhYmxlQ29sdW1uKGNvbHVtbjogT0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaGVhYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4uYXR0cik7XG4gIH1cbiAgaXNDb2x1bW5GaWx0ZXJBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlckJ5QXR0cihjb2x1bW4uYXR0cikpO1xuICB9XG5cbiAgb3BlbkNvbHVtbkZpbHRlckRpYWxvZyhjb2x1bW46IE9Db2x1bW4sIGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihPVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcHJldmlvdXNGaWx0ZXI6IHRoaXMuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlckJ5QXR0cihjb2x1bW4uYXR0ciksXG4gICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICBhY3RpdmVTb3J0RGlyZWN0aW9uOiB0aGlzLmdldFNvcnRGaWx0ZXJDb2x1bW4oY29sdW1uKSxcbiAgICAgICAgdGFibGVEYXRhOiB0aGlzLmRhdGFTb3VyY2UuZ2V0Q3VycmVudERhdGEoKSxcbiAgICAgICAgcHJlbG9hZFZhbHVlczogdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50ID8gdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LnByZWxvYWRWYWx1ZXMgOiB0cnVlLFxuICAgICAgICBtb2RlOiB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgPyB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQubW9kZSA6ICdkZWZhdWx0JyxcbiAgICAgICAgc3RhcnRWaWV3OiB0aGlzLmdldFN0YXJ0Vmlld0ZpbHRlckNvbHVtbihjb2x1bW4pXG4gICAgICB9LFxuICAgICAgbWluV2lkdGg6ICczODBweCcsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ28tZGlhbG9nLWNsYXNzJywgJ28tdGFibGUtZGlhbG9nJ11cbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgc3dpdGNoIChyZXN1bHQpIHtcbiAgICAgICAgY2FzZSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkFDQ0VQVDpcbiAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZUZpbHRlciA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRDb2x1bW5WYWx1ZXNGaWx0ZXIoKTtcbiAgICAgICAgICB0aGlzLmZpbHRlckJ5Q29sdW1uKGNvbHVtblZhbHVlRmlsdGVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkNMRUFSOlxuICAgICAgICAgIGNvbnN0IGNvbCA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5jb2x1bW47XG4gICAgICAgICAgdGhpcy5jbGVhckNvbHVtbkZpbHRlcihjb2wuYXR0cik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uU29ydEZpbHRlclZhbHVlc0NoYW5nZS5zdWJzY3JpYmUoc29ydGVkRmlsdGVyYWJsZUNvbHVtbiA9PiB7XG4gICAgICAvLyBndWFyZGFyIGVuIGxvY2Fsc3RvcmFnZSBlbCBjYW1iaW9cbiAgICAgIHRoaXMuc3RvcmVGaWx0ZXJDb2x1bW5zKHNvcnRlZEZpbHRlcmFibGVDb2x1bW4pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RvcmVGaWx0ZXJDb2x1bW5zKHNvcnRDb2x1bW5GaWx0ZXI6IE9GaWx0ZXJDb2x1bW4pIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICAvLyBpZiBleGlzdHMgaW4gc3RhdGUgdGhlbiB1cGRhdGVkIHNvcnQgdmFsdWVcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuZmlsdGVyQ29sdW1ucy5maW5kKHggPT4geC5hdHRyID09PSBzb3J0Q29sdW1uRmlsdGVyLmF0dHIpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGZpbHRlckNvbHVtbikpIHtcbiAgICAgICAgZmlsdGVyQ29sdW1uLnNvcnQgPSBzb3J0Q29sdW1uRmlsdGVyLnNvcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlbHNlIGV4aXN0cyBpbiBzdGF0ZSB0aGVuIGFkZGVkIGZpbHRlciBjb2x1bW5cbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zLnB1c2goc29ydENvbHVtbkZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucyA9IHRoaXMuZmlsdGVyQ29sdW1ucztcbiAgfVxuXG4gIGdldFN0YXJ0Vmlld0ZpbHRlckNvbHVtbihjb2x1bW46IE9Db2x1bW4pOiBzdHJpbmcge1xuICAgIGxldCBzdGFydFZpZXc7XG4gICAgLy8gYXQgZmlyc3QsIGdldCBzdGF0ZSBpbiBsb2NhbHN0b3JhZ2VcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICB0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudDogT0ZpbHRlckNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5hdHRyID09PSBjb2x1bW4uYXR0cikge1xuICAgICAgICAgIHN0YXJ0VmlldyA9IGVsZW1lbnQuc3RhcnRWaWV3O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHN0YXJ0VmlldykgJiYgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICBzdGFydFZpZXcgPSB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuZ2V0U3RhcnRWaWV3VmFsdWVPZkZpbHRlckNvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXJ0VmlldztcbiAgfVxuXG4gIGdldFNvcnRGaWx0ZXJDb2x1bW4oY29sdW1uOiBPQ29sdW1uKTogc3RyaW5nIHtcbiAgICBsZXQgc29ydENvbHVtbjtcbiAgICAvLyBhdCBmaXJzdCwgZ2V0IHN0YXRlIGluIGxvY2Fsc3RvcmFnZVxuICAgIGlmICh0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlckNvbCA9IHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucy5maW5kKChlbGVtZW50OiBPRmlsdGVyQ29sdW1uKSA9PiBlbGVtZW50LmF0dHIgPT09IGNvbHVtbi5hdHRyKTtcbiAgICAgIGlmIChmaWx0ZXJDb2wpIHtcbiAgICAgICAgc29ydENvbHVtbiA9IGZpbHRlckNvbC5zb3J0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIG5vdCB2YWx1ZSBpbiBsb2NhbHN0b3JhZ2UsIGdldCBzb3J0IHZhbHVlIGluIG8tdGFibGUtY29sdW1uLWZpbHRlci1jb2x1bW4gY29tcG9uZW50XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChzb3J0Q29sdW1uKSAmJiB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQpIHtcbiAgICAgIHNvcnRDb2x1bW4gPSB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuZ2V0U29ydFZhbHVlT2ZGaWx0ZXJDb2x1bW4oY29sdW1uLmF0dHIpO1xuICAgIH1cblxuICAgIC8vIGlmIGVpdGhlciB2YWx1ZSBpbiBvLXRhYmxlLWNvbHVtbi1maWx0ZXItY29sdW1uIG9yIGxvY2Fsc3RvcmFnZSwgZ2V0IHNvcnQgdmFsdWUgaW4gc29ydENvbEFycmF5XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChzb3J0Q29sdW1uKSAmJiB0aGlzLnNvcnRDb2xBcnJheS5maW5kKHggPT4geC5jb2x1bW5OYW1lID09PSBjb2x1bW4uYXR0cikpIHtcbiAgICAgIHNvcnRDb2x1bW4gPSB0aGlzLmlzQ29sdW1uU29ydEFjdGl2ZShjb2x1bW4pID8gJ2FzYycgOiAnZGVzYyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRDb2x1bW47XG4gIH1cblxuICBnZXQgZGlzYWJsZVRhYmxlTWVudUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5wZXJtaXNzaW9ucyAmJiB0aGlzLnBlcm1pc3Npb25zLm1lbnUgJiYgdGhpcy5wZXJtaXNzaW9ucy5tZW51LmVuYWJsZWQgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBzaG93VGFibGVNZW51QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBlcm1pc3Npb25IaWRkZW4gPSAhISh0aGlzLnBlcm1pc3Npb25zICYmIHRoaXMucGVybWlzc2lvbnMubWVudSAmJiB0aGlzLnBlcm1pc3Npb25zLm1lbnUudmlzaWJsZSA9PT0gZmFsc2UpO1xuICAgIGlmIChwZXJtaXNzaW9uSGlkZGVuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHN0YXRpY09wdCA9IHRoaXMuc2VsZWN0QWxsQ2hlY2tib3ggfHwgdGhpcy5leHBvcnRCdXR0b24gfHwgdGhpcy5zaG93Q29uZmlndXJhdGlvbk9wdGlvbiB8fCB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5QnV0dG9uIHx8ICh0aGlzLnNob3dGaWx0ZXJPcHRpb24gJiYgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50ICE9PSB1bmRlZmluZWQpO1xuICAgIHJldHVybiBzdGF0aWNPcHQgfHwgdGhpcy50YWJsZU9wdGlvbnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHNldE9UYWJsZUluc2VydGFibGVSb3codGFibGVJbnNlcnRhYmxlUm93OiBPVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50KSB7XG4gICAgY29uc3QgaW5zZXJ0UGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRBY3Rpb25QZXJtaXNzaW9ucyhQZXJtaXNzaW9uc1V0aWxzLkFDVElPTl9JTlNFUlQpO1xuICAgIGlmIChpbnNlcnRQZXJtLnZpc2libGUpIHtcbiAgICAgIHRhYmxlSW5zZXJ0YWJsZVJvdy5lbmFibGVkID0gaW5zZXJ0UGVybS5lbmFibGVkO1xuICAgICAgdGhpcy5vVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50ID0gdGFibGVJbnNlcnRhYmxlUm93O1xuICAgICAgdGhpcy5zaG93Rmlyc3RJbnNlcnRhYmxlUm93ID0gdGhpcy5vVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmlzRmlyc3RSb3coKTtcbiAgICAgIHRoaXMuc2hvd0xhc3RJbnNlcnRhYmxlUm93ID0gIXRoaXMuc2hvd0ZpcnN0SW5zZXJ0YWJsZVJvdztcbiAgICAgIHRoaXMub1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pbml0aWFsaXplRWRpdG9ycygpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyU2VsZWN0aW9uQW5kRWRpdGluZyhjbGVhclNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAoY2xlYXJTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKG9Db2x1bW4gPT4gb0NvbHVtbi5lZGl0aW5nKVxuICAgICAgLmZvckVhY2gob0NvbHVtbiA9PiB7XG4gICAgICAgIG9Db2x1bW4uZWRpdGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tTZWxlY3RlZEl0ZW1EYXRhKCkge1xuICAgIHRoaXMudHJpZ2dlclNlbGVjdGlvbkV2ZW50cyA9IGZhbHNlO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLnNlbGVjdGlvbikgJiYgdGhpcy5zdGF0ZS5zZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zdGF0ZS5zZWxlY3Rpb24uZm9yRWFjaChzZWxlY3RlZEl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1LZXlzID0gT2JqZWN0LmtleXMoc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgLy8gZmluZGluZyBzZWxlY3RlZCBpdGVtIGRhdGEgaW4gdGhlIHRhYmxlIHJlbmRlcmVkIGRhdGFcbiAgICAgICAgY29uc3QgZm91bmRJdGVtID0gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YS5maW5kKGRhdGEgPT5cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1LZXlzLmV2ZXJ5KGtleSA9PiBkYXRhW2tleV0gPT09IHNlbGVjdGVkSXRlbVtrZXldKVxuICAgICAgICApO1xuICAgICAgICBpZiAoZm91bmRJdGVtICYmICF0aGlzLmlzUm93U2VsZWN0ZWQoZm91bmRJdGVtKSkge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoZm91bmRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlclNlbGVjdGlvbkV2ZW50cyA9IHRydWU7XG4gIH1cblxuICB1c2VEZXRhaWxCdXR0b24oY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbHVtbi50eXBlID09PSAnZWRpdEJ1dHRvbkluUm93JyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RldGFpbEJ1dHRvbkluUm93JztcbiAgfVxuXG4gIG9uRGV0YWlsQnV0dG9uQ2xpY2soY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgY2FzZSAnZWRpdEJ1dHRvbkluUm93JzpcbiAgICAgICAgdGhpcy5lZGl0RGV0YWlsKHJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGV0YWlsQnV0dG9uSW5Sb3cnOlxuICAgICAgICB0aGlzLnZpZXdEZXRhaWwocm93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGV0YWlsQnV0dG9uSWNvbihjb2x1bW46IE9Db2x1bW4pIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgY2FzZSAnZWRpdEJ1dHRvbkluUm93JzpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5lZGl0QnV0dG9uSW5Sb3dJY29uO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RldGFpbEJ1dHRvbkluUm93JzpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5kZXRhaWxCdXR0b25JblJvd0ljb247XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdXNlUGxhaW5SZW5kZXIoY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy51c2VEZXRhaWxCdXR0b24oY29sdW1uKSAmJiAhY29sdW1uLnJlbmRlcmVyICYmICghY29sdW1uLmVkaXRvciB8fCAoIWNvbHVtbi5lZGl0aW5nIHx8ICF0aGlzLmlzUm93U2VsZWN0ZWQocm93KSkpO1xuICB9XG5cbiAgdXNlQ2VsbFJlbmRlcmVyKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sdW1uLnJlbmRlcmVyICYmICghY29sdW1uLmVkaXRpbmcgfHwgY29sdW1uLmVkaXRpbmcgJiYgIXRoaXMuaXNSb3dTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIHVzZUNlbGxFZGl0b3IoY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE8gQWRkIGNvbHVtbi5lZGl0b3IgaW5zdGFuY2VvZiBPVGFibGVDZWxsRWRpdG9yQm9vbGVhbkNvbXBvbmVudCB0byBjb25kaXRpb25cbiAgICBpZiAoY29sdW1uLmVkaXRvciAmJiBjb2x1bW4uZWRpdG9yLmF1dG9Db21taXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbi5lZGl0b3IgJiYgY29sdW1uLmVkaXRpbmcgJiYgdGhpcy5pc1Jvd1NlbGVjdGVkKHJvdyk7XG4gIH1cblxuICBpc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9NVUxUSVBMRTtcbiAgfVxuXG4gIGlzU2VsZWN0aW9uTW9kZVNpbmdsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9TSU5HTEU7XG4gIH1cblxuICBpc1NlbGVjdGlvbk1vZGVOb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09IENvZGVzLlNFTEVDVElPTl9NT0RFX05PTkU7XG4gIH1cblxuICBvbkNoYW5nZVBhZ2UoZXZ0OiBQYWdlRXZlbnQpIHtcbiAgICB0aGlzLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZ0LnBhZ2VJbmRleDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBnb2luZ0JhY2sgPSBldnQucGFnZUluZGV4IDwgdGhpcy5jdXJyZW50UGFnZTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZ0LnBhZ2VJbmRleDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnaW5hdG9yLmlzU2hvd2luZ0FsbFJvd3MoZXZ0LnBhZ2VTaXplKSA/IHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIgOiBldnQucGFnZVNpemU7XG5cbiAgICBjb25zdCBvbGRRdWVyeVJvd3MgPSB0aGlzLnF1ZXJ5Um93cztcbiAgICBjb25zdCBjaGFuZ2luZ1BhZ2VTaXplID0gKG9sZFF1ZXJ5Um93cyAhPT0gcGFnZVNpemUpO1xuICAgIHRoaXMucXVlcnlSb3dzID0gcGFnZVNpemU7XG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSBwYWdlU2l6ZTtcblxuICAgIGxldCBuZXdTdGFydFJlY29yZDogbnVtYmVyO1xuICAgIGxldCBxdWVyeUxlbmd0aDogbnVtYmVyO1xuXG4gICAgaWYgKGdvaW5nQmFjayB8fCBjaGFuZ2luZ1BhZ2VTaXplKSB7XG4gICAgICBuZXdTdGFydFJlY29yZCA9ICh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MpO1xuICAgICAgcXVlcnlMZW5ndGggPSB0aGlzLnF1ZXJ5Um93cztcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U3RhcnRSZWNvcmQgPSBNYXRoLm1heCh0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0LCAodGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzKSk7XG4gICAgICBjb25zdCBuZXdFbmRSZWNvcmQgPSBNYXRoLm1pbihuZXdTdGFydFJlY29yZCArIHRoaXMucXVlcnlSb3dzLCB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyKTtcbiAgICAgIHF1ZXJ5TGVuZ3RoID0gTWF0aC5taW4odGhpcy5xdWVyeVJvd3MsIG5ld0VuZFJlY29yZCAtIG5ld1N0YXJ0UmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge1xuICAgICAgb2Zmc2V0OiBuZXdTdGFydFJlY29yZCxcbiAgICAgIGxlbmd0aDogcXVlcnlMZW5ndGhcbiAgICB9O1xuICAgIHRoaXMuZmluaXNoUXVlcnlTdWJzY3JpcHRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBnZXRPQ29sdW1uKGF0dHI6IHN0cmluZyk6IE9Db2x1bW4ge1xuICAgIHJldHVybiB0aGlzLl9vVGFibGVPcHRpb25zID8gdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IGF0dHIpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgaW5zZXJ0UmVjb3JkKHJlY29yZERhdGE6IGFueSwgc3FsVHlwZXM/OiBvYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX0lOU0VSVCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghVXRpbC5pc0RlZmluZWQoc3FsVHlwZXMpKSB7XG4gICAgICBjb25zdCBhbGxTcWxUeXBlcyA9IHRoaXMuZ2V0U3FsVHlwZXMoKTtcbiAgICAgIHNxbFR5cGVzID0ge307XG4gICAgICBPYmplY3Qua2V5cyhyZWNvcmREYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHNxbFR5cGVzW2tleV0gPSBhbGxTcWxUeXBlc1trZXldO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhb1RhYmxlLmluc2VydFF1ZXJ5KHJlY29yZERhdGEsIHNxbFR5cGVzKTtcbiAgfVxuXG4gIHVwZGF0ZVJlY29yZChmaWx0ZXI6IGFueSwgdXBkYXRlRGF0YTogYW55LCBzcWxUeXBlcz86IG9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fVVBEQVRFKSkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgICB9XG4gICAgY29uc3Qgc3FsVHlwZXNBcmcgPSBzcWxUeXBlcyB8fCB7fTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHNxbFR5cGVzKSkge1xuICAgICAgY29uc3QgYWxsU3FsVHlwZXMgPSB0aGlzLmdldFNxbFR5cGVzKCk7XG4gICAgICBPYmplY3Qua2V5cyhmaWx0ZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNBcmdba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZURhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNBcmdba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGFvVGFibGUudXBkYXRlUXVlcnkoZmlsdGVyLCB1cGRhdGVEYXRhLCBzcWxUeXBlc0FyZyk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXRzIGRhdGEgdGFibGVcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldERhdGFBcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYW9UYWJsZS5kYXRhO1xuICB9XG5cblxuICAvKipcbiAgICogU2V0cyBkYXRhIHRhYmxlIHdoZW4gaXMgc3RhdGljIChPTkxZIElOIFRISVMgQ0FTRSlcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHNldERhdGFBcnJheShkYXRhOiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuZGFvVGFibGUpIHtcbiAgICAgIC8vIHJlbW90ZSBwYWdpbmF0aW9uIGhhcyBubyBzZW5zZSB3aGVuIHVzaW5nIHN0YXRpYy1kYXRhXG4gICAgICB0aGlzLnBhZ2VhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLnN0YXRpY0RhdGEgPSBkYXRhO1xuICAgICAgdGhpcy5kYW9UYWJsZS51c2luZ1N0YXRpY0RhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5kYW9UYWJsZS5zZXREYXRhQXJyYXkodGhpcy5zdGF0aWNEYXRhKTtcbiAgICAgIHRoaXMub25EYXRhTG9hZGVkLmVtaXQodGhpcy5kYW9UYWJsZS5kYXRhKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVsZXRlTG9jYWxJdGVtcygpIHtcbiAgICBjb25zdCBkYXRhQXJyYXkgPSB0aGlzLmdldERhdGFBcnJheSgpO1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKTtcbiAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goKHNlbGVjdGVkSXRlbTogYW55KSA9PiB7XG4gICAgICBmb3IgKGxldCBqID0gZGF0YUFycmF5Lmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG4gICAgICAgIGlmIChVdGlsLmVxdWFscyhzZWxlY3RlZEl0ZW0sIGRhdGFBcnJheVtqXSkpIHtcbiAgICAgICAgICBkYXRhQXJyYXkuc3BsaWNlKGosIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIHRoaXMuc2V0RGF0YUFycmF5KGRhdGFBcnJheSk7XG4gIH1cblxuICBpc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLnNvcnRDb2xBcnJheS5maW5kKHNvcnRDID0+IHNvcnRDLmNvbHVtbk5hbWUgPT09IGNvbHVtbi5hdHRyKTtcbiAgICByZXR1cm4gZm91bmQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzQ29sdW1uRGVzY1NvcnRBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLnNvcnRDb2xBcnJheS5maW5kKHNvcnRDID0+IHNvcnRDLmNvbHVtbk5hbWUgPT09IGNvbHVtbi5hdHRyICYmICFzb3J0Qy5hc2NlbmRlbnQpO1xuICAgIHJldHVybiBmb3VuZCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaGFzVGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzRW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhVXRpbC5pc0RlZmluZWQodmFsdWUpIHx8ICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiYgIXZhbHVlKTtcbiAgfVxuXG4gIHNldEZpbHRlcnNDb25maWd1cmF0aW9uKHN0b3JhZ2U6IE9UYWJsZUNvbXBvbmVudFN0YXRlQ2xhc3MgPSB0aGlzLnN0YXRlKSB7XG4gICAgLypcbiAgICAgIENoZWNraW5nIHRoZSBvcmlnaW5hbCBmaWx0ZXJDYXNlU2Vuc2l0aXZlIHdpdGggdGhlIGZpbHRlckNhc2VTZW5zaXRpdmUgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGlmIGZpbHRlckNhc2VTZW5zaXRpdmUgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGlzIGVxdWFscyB0byBvcmlnaW5hbCBmaWx0ZXJDYXNlU2Vuc2l0aXZlIGlucHV0XG4gICAgICBmaWx0ZXJDYXNlU2Vuc2l0aXZlIHdpbGwgYmUgdGhlIHZhbHVlIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAqL1xuICAgIGlmIChzdG9yYWdlLmluaXRpYWxDb25maWd1cmF0aW9uLmZpbHRlckNhc2VTZW5zaXRpdmUgIT09IHRoaXMuZmlsdGVyQ2FzZVNlbnNpdGl2ZSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlID0gdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUgPSBzdG9yYWdlLmhhc093blByb3BlcnR5KCdmaWx0ZXItY2FzZS1zZW5zaXRpdmUnKSA/IHN0b3JhZ2VbJ2ZpbHRlci1jYXNlLXNlbnNpdGl2ZSddIDogdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH1cblxuICAgIGlmIChzdG9yYWdlLmluaXRpYWxDb25maWd1cmF0aW9uLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdCAhPT0gdGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQpIHtcbiAgICAgIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gdGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbmZGaWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQgPSBzdG9yYWdlLmhhc093blByb3BlcnR5KCdmaWx0ZXItY29sdW1uLWFjdGl2ZScpID8gc3RvcmFnZVsnZmlsdGVyLWNvbHVtbi1hY3RpdmUnXSA6IHRoaXMuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0O1xuICAgICAgdGhpcy5pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSBjb25mRmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0IHx8IHRoaXMuc3RhdGUuY29sdW1uVmFsdWVGaWx0ZXJzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHN0b3JhZ2UuY29sdW1uVmFsdWVGaWx0ZXJzKSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmluaXRpYWxpemVDb2x1bW5zRmlsdGVycyh0aGlzLnN0YXRlLmNvbHVtblZhbHVlRmlsdGVycyk7XG4gICAgICB0aGlzLm9uRmlsdGVyQnlDb2x1bW5DaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50LnNldFZhbHVlKHN0b3JhZ2VbJ2ZpbHRlciddKTtcbiAgICAgIChzdG9yYWdlWydvQ29sdW1ucyddIHx8IFtdKS5mb3JFYWNoKChvQ29sRGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4ob0NvbERhdGEuYXR0cik7XG4gICAgICAgIGlmIChvQ29sICYmIG9Db2xEYXRhLmhhc093blByb3BlcnR5KCdzZWFyY2hpbmcnKSkge1xuICAgICAgICAgIG9Db2wuc2VhcmNoaW5nID0gb0NvbERhdGEuc2VhcmNoaW5nO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJCdWlsZGVyICYmIFV0aWwuaXNEZWZpbmVkKHN0b3JhZ2UuZmlsdGVyQnVpbGRlclZhbHVlcykpIHtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci5zZXRGaWx0ZXJWYWx1ZXMoc3RvcmFnZS5maWx0ZXJCdWlsZGVyVmFsdWVzKTtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci50cmlnZ2VyUmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdG9yZUNvbmZpZ3VyYXRpb25DbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vblN0b3JlQ29uZmlndXJhdGlvbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkFwcGx5Q29uZmlndXJhdGlvbkNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uQXBwbHlDb25maWd1cmF0aW9uQ2xpY2tlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5RGVmYXVsdENvbmZpZ3VyYXRpb24oKSB7XG4gICAgdGhpcy5pbml0aWFsaXplUGFyYW1zKCk7XG4gICAgdGhpcy5wYXJzZVZpc2libGVDb2x1bW5zKHRydWUpO1xuICAgIHRoaXMucmVmcmVzaENvbHVtbnNXaWR0aEZyb21PcmlnaW5hbERlZmluaXRpb24oKTtcbiAgICB0aGlzLnJlaW5pdGlhbGl6YXRlUXVpY2tGaWx0ZXJDb2x1bW5zKCk7XG4gICAgdGhpcy5yZXNldFF1ZXJ5Um93cygpO1xuICAgIGNvbnN0IGluaXRpYWxDb25maWdTb3J0Q29sdW1uc0FycmF5ID0gU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnModGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5zb3J0Q29sdW1ucyk7XG4gICAgdGhpcy5yZWluaXRpYWxpemVTb3J0Q29sdW1ucyhpbml0aWFsQ29uZmlnU29ydENvbHVtbnNBcnJheSk7XG4gICAgdGhpcy5vblJlaW5pdGlhbGl6ZS5lbWl0KG51bGwpO1xuICAgIHRoaXMuY2xlYXJGaWx0ZXJzKGZhbHNlKTtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuICByZXNldFF1ZXJ5Um93cygpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5xdWVyeVJvd3MpKSB7XG4gICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24ucXVlcnlSb3dzO1xuICAgIH1cbiAgfVxuICBhcHBseUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbk5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0b3JlZENvbmZpZ3VyYXRpb24gPSB0aGlzLnN0YXRlLmdldFN0b3JlZENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbk5hbWUpO1xuICAgIGlmIChzdG9yZWRDb25maWd1cmF0aW9uKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gc3RvcmVkQ29uZmlndXJhdGlvblsnc3RvcmVkLXByb3BlcnRpZXMnXSB8fCBbXTtcblxuICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgICAgICAgIGNhc2UgJ3NvcnQtY29sdW1ucyc6XG4gICAgICAgICAgICB0aGlzLnJlaW5pdGlhbGl6ZVNvcnRDb2x1bW5zKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdvQ29sdW1ucy1kaXNwbGF5JzpcbiAgICAgICAgICAgIHRoaXMucGFyc2VWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbHVtbnNXaWR0aEZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3F1aWNrLWZpbHRlcic6XG4gICAgICAgICAgY2FzZSAnY29sdW1ucy1maWx0ZXInOlxuICAgICAgICAgIGNhc2UgJ2ZpbHRlci1idWlsZGVyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyc0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2dyb3VwZWQtY29sdW1ucyc6XG4gICAgICAgICAgICB0aGlzLnBhcnNlR3JvdXBlZENvbHVtbnMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3BhZ2UnOlxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMuc3RhdGUuY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUucXVlcnlSb3dzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGl0bGVBbGlnbkNsYXNzKG9Db2w6IE9Db2x1bW4pIHtcblxuICAgIGNvbnN0IGhhc1RpdGxlQWxpZ24gPSBVdGlsLmlzRGVmaW5lZChvQ29sLmRlZmluaXRpb24pICYmIFV0aWwuaXNEZWZpbmVkKG9Db2wuZGVmaW5pdGlvbi50aXRsZUFsaWduKTtcbiAgICBjb25zdCBhdXRvQWxpZ24gPSAodGhpcy5hdXRvQWxpZ25UaXRsZXMgJiYgIWhhc1RpdGxlQWxpZ24pIHx8IChoYXNUaXRsZUFsaWduICYmIG9Db2wuZGVmaW5pdGlvbi50aXRsZUFsaWduID09PSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fQVVUTyk7XG4gICAgaWYgKCFhdXRvQWxpZ24pIHtcbiAgICAgIHJldHVybiBvQ29sLmdldFRpdGxlQWxpZ25DbGFzcygpO1xuICAgIH1cblxuICAgIGxldCBhbGlnbiA9IHRoaXMuZ2V0Q2VsbEFsaWduQ2xhc3Mob0NvbCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGFsaWduKSAmJiBhbGlnbi5sZW5ndGggPiAwKSB7XG4gICAgICBhbGlnbiA9IGFsaWduLnN1YnN0cmluZygyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoIChvQ29sLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgYWxpZ24gPSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fQ0VOVEVSO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICBjYXNlICdyZWFsJzpcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XG4gICAgICAgICAgYWxpZ24gPSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fRU5EO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhbGlnbiA9IENvZGVzLkNPTFVNTl9USVRMRV9BTElHTl9TVEFSVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsaWduO1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VsbEFsaWduQ2xhc3MoY29sdW1uOiBPQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29sdW1uLmRlZmluaXRpb24pICYmIFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5kZWZpbml0aW9uLmNvbnRlbnRBbGlnbikgPyAnby0nICsgY29sdW1uLmRlZmluaXRpb24uY29udGVudEFsaWduIDogJyc7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXRHcm91cEhlYWRlckNlbGxBbGlnbkNsYXNzKGNvbHVtbjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzTmFtZUFycmF5ID0gW107XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uc3Vic3RyKCdncm91cEhlYWRlci0nLmxlbmd0aCkpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChvQ29sKSkge1xuICAgICAgY2xhc3NOYW1lQXJyYXkucHVzaCh0aGlzLmdldENlbGxBbGlnbkNsYXNzKG9Db2wpKTtcbiAgICAgIGNsYXNzTmFtZUFycmF5LnB1c2gob0NvbC5jbGFzc05hbWUgPyBvQ29sLmNsYXNzTmFtZSA6ICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTmFtZUFycmF5O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZERlZmF1bHRSb3dCdXR0b25zKCkge1xuICAgIC8vIGNoZWNrIHBlcm1pc3Npb25zXG4gICAgaWYgKHRoaXMuZWRpdEJ1dHRvbkluUm93KSB7XG4gICAgICB0aGlzLmFkZEJ1dHRvbkluUm93KCdlZGl0QnV0dG9uSW5Sb3cnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGV0YWlsQnV0dG9uSW5Sb3cpIHtcbiAgICAgIHRoaXMuYWRkQnV0dG9uSW5Sb3coJ2RldGFpbEJ1dHRvbkluUm93Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFkZEJ1dHRvbkluUm93KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbERlZjogT0NvbHVtbiA9IHRoaXMuY3JlYXRlT0NvbHVtbihuYW1lLCB0aGlzKTtcbiAgICBjb2xEZWYudHlwZSA9IG5hbWU7XG4gICAgY29sRGVmLnZpc2libGUgPSB0cnVlO1xuICAgIGNvbERlZi5zZWFyY2hhYmxlID0gZmFsc2U7XG4gICAgY29sRGVmLm9yZGVyYWJsZSA9IGZhbHNlO1xuICAgIGNvbERlZi5yZXNpemFibGUgPSBmYWxzZTtcbiAgICBjb2xEZWYuZ3JvdXBhYmxlID0gZmFsc2U7XG4gICAgY29sRGVmLnRpdGxlID0gdW5kZWZpbmVkO1xuICAgIGNvbERlZi53aWR0aCA9ICc0OHB4JztcbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMucHVzaChuYW1lKTtcbiAgfVxuXG4gIGdldCBoZWFkZXJIZWlnaHQoKSB7XG4gICAgbGV0IGhlaWdodCA9IDA7XG4gICAgaWYgKHRoaXMudGFibGVIZWFkZXJFbCAmJiB0aGlzLnRhYmxlSGVhZGVyRWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgaGVpZ2h0ICs9IHRoaXMudGFibGVIZWFkZXJFbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGVUb29sYmFyRWwgJiYgdGhpcy50YWJsZVRvb2xiYXJFbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBoZWlnaHQgKz0gdGhpcy50YWJsZVRvb2xiYXJFbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIGlzRGV0YWlsTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXRhaWxNb2RlICE9PSBDb2Rlcy5ERVRBSUxfTU9ERV9OT05FO1xuICB9XG5cbiAgY29weUFsbCgpIHtcbiAgICBVdGlsLmNvcHlUb0NsaXBib2FyZChKU09OLnN0cmluZ2lmeSh0aGlzLmdldFJlbmRlcmVkVmFsdWUoKSkpO1xuICB9XG5cbiAgY29weVNlbGVjdGlvbigpIHtcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5kYXRhU291cmNlLmdldFJlbmRlcmVkRGF0YSh0aGlzLmdldFNlbGVjdGVkSXRlbXMoKSk7XG4gICAgVXRpbC5jb3B5VG9DbGlwYm9hcmQoSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWRJdGVtcykpO1xuICB9XG5cblxuICAvKipcbiAgICogVHJpZ2dlcnMgbmF2aWdhdGlvbiB0byBpdGVtIGRldGFpbCwgcmVjZWl2aW5nIGl0ZW0gZGF0YVxuICAgKiBAcGFyYW0gaXRlbVxuICAgKiBAcmV0dXJucyBkZXRhaWxcbiAgICovXG4gIHZpZXdEZXRhaWwoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oJ2RldGFpbCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLnZpZXdEZXRhaWwoaXRlbSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBuYXZpZ2F0aW9uIHRvIGl0ZW0gZWRpdGlvbiwgcmVjZWl2aW5nIGl0ZW0gZGF0YVxuICAgKiBAcGFyYW0gaXRlbVxuICAgKiBAcmV0dXJucyBkZXRhaWxcbiAgICovXG4gIGVkaXREZXRhaWwoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oJ2VkaXQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5lZGl0RGV0YWlsKGl0ZW0pO1xuICB9XG5cbiAgZ2V0T0NvbHVtbkZyb21UaCh0aDogYW55KTogT0NvbHVtbiB7XG4gICAgbGV0IHJlc3VsdDogT0NvbHVtbjtcbiAgICBjb25zdCBjbGFzc0xpc3Q6IGFueVtdID0gQXJyYXkuZnJvbSgodGggYXMgRWxlbWVudCkuY2xhc3NMaXN0IHx8IFtdKTtcbiAgICBjb25zdCBjb2x1bW5DbGFzcyA9IGNsYXNzTGlzdC5maW5kKChjbGFzc05hbWU6IHN0cmluZykgPT4gKGNsYXNzTmFtZS5zdGFydHNXaXRoKCdtYXQtY29sdW1uLScpKSk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbkNsYXNzKSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5nZXRPQ29sdW1uKGNvbHVtbkNsYXNzLnN1YnN0cignbWF0LWNvbHVtbi0nLmxlbmd0aCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0T0NvbHVtbkZyb21Hcm91cEhlYWRlckNvbHVtbihhdHRyOiBzdHJpbmcpOiBPQ29sdW1uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPQ29sdW1uKGF0dHIuc3Vic3RyKCdncm91cEhlYWRlci0nLmxlbmd0aCkpO1xuICB9XG5cbiAgZ2V0VGhXaWR0aEZyb21PQ29sdW1uKG9Db2x1bW46IE9Db2x1bW4pOiBhbnkge1xuICAgIGxldCB3aWR0aENvbHVtbjogbnVtYmVyO1xuICAgIGNvbnN0IHRoQXJyYXkgPSB0aGlzLnRhYmxlSGVhZGVyRWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoQXJyYXkubGVuZ3RoICYmICFVdGlsLmlzRGVmaW5lZCh3aWR0aENvbHVtbik7IGkrKykge1xuICAgICAgY29uc3QgdGggPSB0aEFycmF5W2ldO1xuICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdGguY2xhc3NMaXN0O1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjbGFzc0xpc3QubGVuZ3RoICYmICFVdGlsLmlzRGVmaW5lZCh3aWR0aENvbHVtbik7IGorKykge1xuICAgICAgICBpZiAoY2xhc3NMaXN0W2pdID09PSAnbWF0LWNvbHVtbi0nICsgb0NvbHVtbi5hdHRyKSB7XG4gICAgICAgICAgd2lkdGhDb2x1bW4gPSB0aC5jbGllbnRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd2lkdGhDb2x1bW47XG4gIH1cblxuICBnZXRDb2x1bW5JbnNlcnRhYmxlKG5hbWUpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lICsgdGhpcy5nZXRTdWZmaXhDb2x1bW5JbnNlcnRhYmxlKCk7XG4gIH1cblxuICBpc1Jvd1NlbGVjdGVkKHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgcmV0dXJuICF0aGlzLmlzU2VsZWN0aW9uTW9kZU5vbmUoKSAmJiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5zb21lKChlbGVtZW50OiBhbnkpID0+IGtleXMuZXZlcnkoa2V5ID0+IHJvd1trZXldID09PSBlbGVtZW50W2tleV0pKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5XaWR0aEZyb21TdGF0ZShjb2xEZWY6IE9Db2x1bW4pOiBzdHJpbmcge1xuICAgIC8vMS4gQnkgZGVmYXVsdCwgc2V0IHdpZHRoIGRlZmluaXRpb25cbiAgICBsZXQgY29sdW1uV2lkdGggPSBjb2xEZWYuZGVmaW5pdGlvbiAmJiBjb2xEZWYuZGVmaW5pdGlvbi53aWR0aCA/IGNvbERlZi5kZWZpbml0aW9uLndpZHRoIDogdm9pZCAwO1xuICAgIGNvbnN0IHN0b3JlZERhdGEgPSB0aGlzLnN0YXRlLmdldENvbHVtbkRpc3BsYXkoY29sRGVmKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoc3RvcmVkRGF0YSkgJiYgVXRpbC5pc0RlZmluZWQoc3RvcmVkRGF0YS53aWR0aCkpIHtcbiAgICAgIC8vMi4gU2V0IHdpZHRoIGlmIHRoZSB3aWR0aCBpcyBzdG9yZWRcbiAgICAgIGNvbHVtbldpZHRoID0gc3RvcmVkRGF0YS53aWR0aDtcbiAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5zIHNhdmVkIGluIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb25cbiAgICAgIC8vIGluIHRoZSBsb2NhbCBzdG9yYWdlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFN0b3JlZERhdGEgPSB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLmdldENvbHVtbkRpc3BsYXkoY29sRGVmKTtcbiAgICAgICAgLy8gSWYgb3JpZ2luYWwgd2lkdGggY2hhbmdlZCB0aGVuIHRoZSB3aWR0aCBpcyByZXNldGVkIHdpdGggdGhpcyB2YWx1ZVxuICAgICAgICBpZiAoaW5pdGlhbFN0b3JlZERhdGEgJiYgaW5pdGlhbFN0b3JlZERhdGEud2lkdGggJiYgY29sRGVmLmRlZmluaXRpb24ub3JpZ2luYWxXaWR0aCkge1xuICAgICAgICAgIGlmIChpbml0aWFsU3RvcmVkRGF0YS53aWR0aCAhPT0gY29sRGVmLmRlZmluaXRpb24ub3JpZ2luYWxXaWR0aCkge1xuICAgICAgICAgICAgY29sdW1uV2lkdGggPSBjb2xEZWYuZGVmaW5pdGlvbi5vcmlnaW5hbFdpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sdW1uV2lkdGg7XG4gIH1cblxuICByZWZyZXNoQ29sdW1uc1dpZHRoRnJvbUxvY2FsU3RvcmFnZSgpIHtcbiAgICB0aGlzLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKHggPT4ge1xuICAgICAgeC53aWR0aCA9IHRoaXMuZ2V0Q29sdW1uV2lkdGhGcm9tU3RhdGUoeCk7XG4gICAgfSk7XG4gIH1cblxuICByZWZyZXNoQ29sdW1uc1dpZHRoRnJvbU9yaWdpbmFsRGVmaW5pdGlvbigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUpLmZvckVhY2goYyA9PiB7XG4gICAgICAgIGMud2lkdGggPSBjLkRPTVdpZHRoID0gdm9pZCAwO1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQoYy5kZWZpbml0aW9uKSAmJiBVdGlsLmlzRGVmaW5lZChjLmRlZmluaXRpb24ud2lkdGgpKSB7XG4gICAgICAgICAgYy53aWR0aCA9IGMuZGVmaW5pdGlvbi53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjLnNldFJlbmRlcldpZHRoKHRoaXMuaG9yaXpvbnRhbFNjcm9sbCwgdGhpcy5nZXRDbGllbnRXaWR0aENvbHVtbihjKSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPQ29sdW1uKGF0dHI/OiBzdHJpbmcsIHRhYmxlPzogT1RhYmxlQ29tcG9uZW50LCBjb2x1bW4/OiBPVGFibGVDb2x1bW5Db21wb25lbnQgJiBPVGFibGVDb2x1bW5DYWxjdWxhdGVkQ29tcG9uZW50KTogT0NvbHVtbiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgT0NvbHVtbigpO1xuICAgIGlmIChhdHRyKSB7XG4gICAgICBpbnN0YW5jZS5hdHRyID0gYXR0cjtcbiAgICB9XG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICBpbnN0YW5jZS5zZXREZWZhdWx0UHJvcGVydGllcyh7XG4gICAgICAgIG9yZGVyYWJsZTogdGhpcy5vcmRlcmFibGUsXG4gICAgICAgIHJlc2l6YWJsZTogdGhpcy5yZXNpemFibGUsXG4gICAgICAgIGdyb3VwYWJsZTogdGhpcy5ncm91cGFibGVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICBpbnN0YW5jZS5zZXRDb2x1bW5Qcm9wZXJ0aWVzKGNvbHVtbik7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9UYWJsZUJ1dHRvbnMoYXJnOiBPVGFibGVCdXR0b25zKSB7XG4gICAgdGhpcy5vVGFibGVCdXR0b25zID0gYXJnO1xuICAgIGlmICh0aGlzLm9UYWJsZUJ1dHRvbnMgJiYgdGhpcy50YWJsZUJ1dHRvbnMgJiYgdGhpcy50YWJsZUJ1dHRvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5vVGFibGVCdXR0b25zLnJlZ2lzdGVyQnV0dG9ucyh0aGlzLnRhYmxlQnV0dG9ucy50b0FycmF5KCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDbGllbnRXaWR0aENvbHVtbihjb2w6IE9Db2x1bW4pOiBudW1iZXIge1xuICAgIHJldHVybiBjb2wuRE9NV2lkdGggfHwgdGhpcy5nZXRUaFdpZHRoRnJvbU9Db2x1bW4oY29sKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNaW5XaWR0aENvbHVtbihjb2w6IE9Db2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBVdGlsLmV4dHJhY3RQaXhlbHNWYWx1ZShjb2wubWluV2lkdGgsIENvZGVzLkRFRkFVTFRfQ09MVU1OX01JTl9XSURUSCkgKyAncHgnO1xuICB9XG5cbiAgc2hvd0V4cGFuZGFibGVSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMudGFibGVSb3dFeHBhbmRhYmxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGVuYWJsZSB2aXJ0dWFsIHNjcm9sbFxuICAgKi9cbiAgZ2V0IGVuYWJsZWRWaXJ0dWFsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpcnR1YWxTY3JvbGwgJiYgIXRoaXMuc2hvd0V4cGFuZGFibGVSb3coKSAmJiB0aGlzLmdyb3VwZWRDb2x1bW5zQXJyYXkubGVuZ3RoID09PSAwO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgZ3JvdXBlZCBjb2x1bW5zXG4gICAqL1xuICBwYXJzZUdyb3VwZWRDb2x1bW5zKCkge1xuICAgIGxldCByZXN1bHQgPSB0aGlzLnN0YXRlLmdyb3VwZWRDb2x1bW5zIHx8IHRoaXMub3JpZ2luYWxHcm91cGVkQ29sdW1uc0FycmF5O1xuICAgIGlmICh0aGlzLnN0YXRlLmdyb3VwZWRDb2x1bW5zICYmIHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uZ3JvdXBlZENvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLmdyb3VwZWRDb2x1bW5zXG4gICAgICAgIC5maWx0ZXIoeCA9PiAhdGhpcy5vcmlnaW5hbEdyb3VwZWRDb2x1bW5zQXJyYXkuaW5jbHVkZXMoeCkpO1xuXG4gICAgICBpZiAoZGlmZmVyZW5jZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMub3JpZ2luYWxHcm91cGVkQ29sdW1uc0FycmF5O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldEdyb3VwQ29sdW1ucyhyZXN1bHQpO1xuICB9XG4gIHBhcnNlR3JvdXBlZENvbHVtblR5cGVzKCkge1xuICAgIHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzID0gdGhpcy5zdGF0ZS5ncm91cGVkQ29sdW1uVHlwZXM7XG4gIH1cblxuICAvKipcbiAgICogR3JvdXBzIGJ5IGNvbHVtblxuICAgKiBAcGFyYW0gY29sdW1uXG4gICAqL1xuICBncm91cEJ5Q29sdW1uKGNvbHVtbjogT0NvbHVtbiwgdHlwZT86IHN0cmluZykge1xuICAgIHRoaXMuY2hlY2tHcm91cEJ5Q29sdW1uKGNvbHVtbi5hdHRyLCB0cnVlKTtcbiAgICBpZiAodHlwZSkge1xuICAgICAgdGhpcy51cGRhdGVHcm91cGVkQ29sdW1uVHlwZXMoY29sdW1uLmF0dHIsIHRydWUsIHR5cGUpO1xuICAgIH1cbiAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlR3JvdXBlZENvbHVtbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmdyb3VwIGJ5IGNvbHVtblxuICAgKiBAcGFyYW0gY29sdW1uXG4gICAqL1xuICB1bkdyb3VwQnlDb2x1bW4oY29sdW1uOiBPQ29sdW1uKSB7XG4gICAgdGhpcy5jaGVja0dyb3VwQnlDb2x1bW4oY29sdW1uLmF0dHIsIGZhbHNlKTtcbiAgICB0aGlzLnVwZGF0ZUdyb3VwZWRDb2x1bW5UeXBlcyhjb2x1bW4uYXR0ciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS51cGRhdGVHcm91cGVkQ29sdW1ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuZ3JvdXAgYnkgYWxsIGNvbHVtbnNcbiAgICovXG4gIHVuR3JvdXBCeUFsbENvbHVtbnMoKSB7XG4gICAgdGhpcy5zZXRHcm91cENvbHVtbnMoW10pO1xuICAgIHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzID0gW107XG4gIH1cblxuICBzZXRHcm91cENvbHVtbnModmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5ncm91cGVkQ29sdW1uc0FycmF5ID0gdmFsdWU7XG4gICAgdGhpcy5kYXRhU291cmNlLnVwZGF0ZUdyb3VwZWRDb2x1bW5zKCk7XG4gIH1cbiAgc2V0R3JvdXBlZENvbHVtblR5cGVzKHZhbHVlOiBPR3JvdXBlZENvbHVtblR5cGVzW10pIHtcbiAgICB0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcyA9IHZhbHVlO1xuICB9XG4gIGNoZWNrR3JvdXBCeUNvbHVtbihmaWVsZDogc3RyaW5nLCBhZGQ6IGJvb2xlYW4pIHtcbiAgICBsZXQgZm91bmQgPSBudWxsO1xuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheSkge1xuICAgICAgaWYgKGNvbHVtbiA9PT0gZmllbGQpIHtcbiAgICAgICAgZm91bmQgPSB0aGlzLmdyb3VwZWRDb2x1bW5zQXJyYXkuaW5kZXhPZihjb2x1bW4sIDApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZm91bmQgIT0gbnVsbCAmJiBmb3VuZCA+PSAwKSB7XG4gICAgICBpZiAoIWFkZCkge1xuICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zQXJyYXkuc3BsaWNlKGZvdW5kLCAxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGFkZCkge1xuICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zQXJyYXkucHVzaChmaWVsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBpdGVtIGlzIGdyb3VwXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcGFyYW0gaXRlbVxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGdyb3VwXG4gICAqL1xuICBpc0dyb3VwKGluZGV4LCBpdGVtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBpdGVtIGlzIG5vdCBncm91cFxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICogQHBhcmFtIGl0ZW1cbiAgICogQHJldHVybnMgdHJ1ZSBpZiBub3QgZ3JvdXBcbiAgICovXG4gIGlzTm90R3JvdXAoaW5kZXgsIGl0ZW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIShpdGVtIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdyk7XG4gIH1cblxuICBnZXRMYXN0R3JvdXBzKCkge1xuICAgIC8vIEdldCBsYXN0IGdyb3Vwc1xuICAgIGNvbnN0IHNjb3JlcyA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGE7XG4gICAgY29uc3QgbWF4TGV2ZWwgPSBzY29yZXMucmVkdWNlKChhY2MsIGN1cnIpID0+IGN1cnIubGV2ZWwgPiBhY2MgPyBjdXJyLmxldmVsIDogYWNjLCAwKTtcbiAgICBjb25zdCBtYXhMZXZlbFJlbmRlcmVkRGF0YSA9IHNjb3Jlcy5yZWR1Y2UoKHIsIG8pID0+IG8ubGV2ZWwgPT09IG1heExldmVsID8gWy4uLnIsIG9dIDogciwgW10pO1xuICAgIHJldHVybiBtYXhMZXZlbFJlbmRlcmVkRGF0YS5sZW5ndGg7XG4gIH1cblxuICBncm91cEhlYWRlckNsaWNrKHJvdzogT1RhYmxlR3JvdXBlZFJvdykge1xuICAgIHRoaXMuZGF0YVNvdXJjZS50b2dnbGVHcm91cEJ5Q29sdW1uKHJvdyk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5zdGFuY2VPZk9UYWJsZUNlbGxSZW5kZXJlclNlcnZpY2VDb21wb25lbnQocmVuZGVyZXI6IE9CYXNlVGFibGVDZWxsUmVuZGVyZXIpIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQocmVuZGVyZXIpICYmIChyZW5kZXJlciBhcyBhbnkpLm9uRGF0YUxvYWRlZCAmJiAocmVuZGVyZXIgYXMgYW55KS5xdWVyeUFsbERhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjb2x1bW4gZGF0YSBieSBhdHRyXG4gICAqIEBwYXJhbSBhdHRyXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHJldHVybnMgY29sdW1uIGRhdGEgYnkgYXR0clxuICAgKi9cbiAgZ2V0Q29sdW1uRGF0YUJ5QXR0cihhdHRyLCByb3c6IGFueSk6IGFueSB7XG4gICAgbGV0IG9wZXJhdGlvbiA9IG51bGw7XG4gICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzLmxlbmd0aCAhPSAwICYmIHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzLmZpbmRJbmRleChjb2x1bW4gPT4gY29sdW1uLmF0dHIgPT0gYXR0cikgIT0gLTEpIHtcbiAgICAgIG9wZXJhdGlvbiA9IHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzW3RoaXMuZ3JvdXBlZENvbHVtblR5cGVzLmZpbmRJbmRleChjb2x1bW4gPT4gY29sdW1uLmF0dHIgPT0gYXR0cildLnR5cGU7XG4gICAgfVxuICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4oYXR0cik7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChvQ29sKSkge1xuICAgICAgcmV0dXJuIHJvd1thdHRyXTtcbiAgICB9XG4gICAgY29uc3QgdXNlUmVuZGVyZXIgPSBvQ29sLnJlbmRlcmVyICYmIG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGE7XG4gICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdXNlUmVuZGVyZXIgPyBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhKHJvd1tvQ29sLmF0dHJdLCByb3cpIDogcm93W29Db2wuYXR0cl07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudChyb3dbb0NvbC5hdHRyXSk7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXRDdXJyZW50TGFuZygpO1xuICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgICAgY2FzZSBcIllFQVJcIjogcmV0dXJuIGRhdGUueWVhcigpO1xuICAgICAgICBjYXNlIFwiTU9OVEhcIjogcmV0dXJuIG1vbWVudCgpLmxvY2FsZShsYW5ndWFnZSkubW9udGgoZGF0ZS5tb250aCgpKS5mb3JtYXQoXCJNTU1NXCIpO1xuICAgICAgICBjYXNlIFwiWUVBUl9NT05USFwiOiByZXR1cm4gbW9tZW50KCkubG9jYWxlKGxhbmd1YWdlKS5tb250aChkYXRlLm1vbnRoKCkpLnllYXIoZGF0ZS55ZWFyKCkpLmZvcm1hdChcIk1NTU0sIFlZWVlcIik7XG4gICAgICAgIGNhc2UgXCJZRUFSX01PTlRIX0RBWVwiOiByZXR1cm4gdXNlUmVuZGVyZXIgPyBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhKHJvd1tvQ29sLmF0dHJdLCByb3cpIDogcm93W29Db2wuYXR0cl07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHVwZGF0ZUdyb3VwZWRDb2x1bW5UeXBlcyhhdHRyOiBzdHJpbmcsIGFkZDogYm9vbGVhbiwgb3BlcmF0aW9uPzogc3RyaW5nKSB7XG4gICAgbGV0IGdyb3VwZWRDb2x1bW5zOiBPR3JvdXBlZENvbHVtblR5cGVzW10gPSBbXTtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcy5maW5kSW5kZXgoY29sdW1uID0+IGNvbHVtbi5hdHRyID09IGF0dHIpO1xuICAgIGlmIChpbmRleCAhPSAtMSkge1xuICAgICAgaWYgKCFhZGQpIHtcbiAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzLnB1c2goeyBcImF0dHJcIjogYXR0ciwgXCJ0eXBlXCI6IG9wZXJhdGlvbiB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5ncm91cGVkQ29sdW1uVHlwZXMgPSBncm91cGVkQ29sdW1ucztcbiAgfVxuXG4gIGdldENsYXNzTmFtZUdyb3VwSGVhZGVyKHJvdzogT1RhYmxlR3JvdXBlZFJvdyk6IHN0cmluZyB7XG4gICAgbGV0IGNsYXNzTmFtZSA9ICcnO1xuICAgIGlmIChyb3cubGV2ZWwgPD0gMTApIHtcbiAgICAgIGNsYXNzTmFtZSA9ICdvLXRhYmxlLWdyb3VwLXJvdyBvLXRhYmxlLWdyb3VwLXJvdy1sZXZlbC0nICsgcm93LmxldmVsO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wRWRpdGlvbihjbGVhclNlbGVjdGlvbj86IGJvb2xlYW4pIHtcbiAgICBjbGVhclNlbGVjdGlvbiA9IGNsZWFyU2VsZWN0aW9uID8gY2xlYXJTZWxlY3Rpb24gOiBmYWxzZTtcbiAgICB0aGlzLmVkaXRpbmdDZWxsID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGluZ1JvdyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uQW5kRWRpdGluZyhjbGVhclNlbGVjdGlvbik7XG4gIH1cblxuICBzdG9yZUZpbHRlckluU3RhdGUoYXJnOiBPRmlsdGVyRGVmaW5pdGlvbikge1xuICAgIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlLnN0b3JlRmlsdGVyKGFyZyk7XG4gIH1cblxuICByZWluaXRpYWxpemF0ZVF1aWNrRmlsdGVyQ29sdW1ucygpIHtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zZWFyY2hhYmxlICYmIGNvbHVtbi52aXNpYmxlKVxuICAgICAgLmZvckVhY2goY29sdW1uID0+IGNvbHVtbi5zZWFyY2hpbmcgPSB0cnVlKVxuICB9XG5cbiAgcmVpbml0aWFsaXplU29ydENvbHVtbnMoc29ydENvbHVtbnM/OiBTUUxPcmRlcltdKSB7XG4gICAgdGhpcy50YWJsZUhlYWRlcnMgPSBbXTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoc29ydENvbHVtbnMpKSB7XG4gICAgICB0aGlzLnNvcnRDb2xBcnJheSA9IHNvcnRDb2x1bW5zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcnNlU29ydENvbHVtbnMoKTtcbiAgICB9XG4gICAgdGhpcy5zb3J0LnNldFNvcnRDb2x1bW5zKHRoaXMuc29ydENvbEFycmF5KTtcbiAgICB0aGlzLnJlZnJlc2hTb3J0SGVhZGVycygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZnJlc2hTb3J0SGVhZGVycygpIHtcbiAgICB0aGlzLnRhYmxlSGVhZGVycy5maWx0ZXIoaGVhZGVyID0+IFV0aWwuaXNEZWZpbmVkKGhlYWRlci5tYXRTb3J0SGVhZGVyKSkuZm9yRWFjaChoZWFkZXIgPT4gaGVhZGVyLm1hdFNvcnRIZWFkZXIucmVmcmVzaCgpKTtcbiAgfVxuXG4gIGdldFF1aWNrRmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudCkgP1xuICAgICAgdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC52YWx1ZSA6XG4gICAgICAnJztcbiAgfVxuXG4gIHB1YmxpYyBxdWVyeUNlbGxSZW5kZXJlcnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBxdWlja0ZpbHRlclZhbHVlID0gdGhpcy5nZXRRdWlja0ZpbHRlclZhbHVlKCk7XG5cbiAgICBpZiAoKFV0aWwuaXNEZWZpbmVkKHF1aWNrRmlsdGVyVmFsdWUpICYmIHF1aWNrRmlsdGVyVmFsdWUubGVuZ3RoID4gMCkgfHwgdGhpcy5zb3J0Q29sQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcXVlcmllcyA9IHRoaXMub1RhYmxlT3B0aW9ucy5jb2x1bW5zXG4gICAgICAgIC5maWx0ZXIob0NvbCA9PiBvQ29sLnNlYXJjaGluZyAmJiB0aGlzLmlzSW5zdGFuY2VPZk9UYWJsZUNlbGxSZW5kZXJlclNlcnZpY2VDb21wb25lbnQob0NvbC5yZW5kZXJlcikpXG4gICAgICAgIC5tYXAob0NvbCA9PiAob0NvbC5yZW5kZXJlciBhcyBhbnkpLnF1ZXJ5QWxsRGF0YSgpKTtcblxuICAgICAgcmV0dXJuIHF1ZXJpZXMubGVuZ3RoID4gMCA/IGNvbWJpbmVMYXRlc3QocXVlcmllcykgOiBvZihudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKG51bGwpO1xuICB9XG5cbiAgdGFibGVRdWlja0ZpbHRlckNoYW5nZWQodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLnF1ZXJ5Q2VsbFJlbmRlcmVycygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UucXVpY2tGaWx0ZXIgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBvbk1hdFNvcnRDaGFuZ2VcbiAgcHVibGljIGZpbHRlckRhdGEodmFsdWU/OiBzdHJpbmcsIGxvYWRNb3JlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vXG4gIH1cblxuICBzZXRPVGFibGVDb2x1bW5zR3JvdXBpbmcodmFsdWU6IE9UYWJsZUNvbHVtbnNHcm91cGluZykge1xuICAgIHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50ID0gdmFsdWU7XG4gIH1cblxuICBnZXRDb2x1bW5Hcm91cGluZ0NvbXBvbmVudChjb2x1bW5BdHRyOiBzdHJpbmcpOiBPVGFibGVDb2x1bW5zR3JvdXBpbmdDb2x1bW5Db21wb25lbnQge1xuICAgIGxldCByZXN1bHQ6IE9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbHVtbkNvbXBvbmVudDtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQpKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudC5nZXRDb2x1bW5Hcm91cGluZyhjb2x1bW5BdHRyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHVzZUNvbHVtbkdyb3VwaW5nQWdncmVnYXRlKGNvbHVtbkF0dHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4oY29sdW1uQXR0cik7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChvQ29sKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzcWxUeXBlID0gdGhpcy5nZXRTcWxUeXBlcygpW2NvbHVtbkF0dHJdO1xuICAgIGNvbnN0IGhhc0RlZmF1bHRBZ2dyZWdhdGUgPSBTUUxUeXBlcy5pc051bWVyaWNTUUxUeXBlKHNxbFR5cGUpXG4gICAgICAmJiAoIVV0aWwuaXNEZWZpbmVkKG9Db2wucmVuZGVyZXIpIHx8IE9UYWJsZUNvbXBvbmVudC5BVkFJTEFCTEVfR1JPVVBJTkdfQ09MVU1OU19SRU5ERVJFUlMuaW5jbHVkZXMob0NvbC50eXBlKSk7XG5cbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIGhhc0RlZmF1bHRBZ2dyZWdhdGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudC51c2VDb2x1bW5BZ2dyZWdhdGUoY29sdW1uQXR0ciwgaGFzRGVmYXVsdEFnZ3JlZ2F0ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tWaWV3cG9ydFNpemUoKSB7XG4gICAgLy8gSXRzIGEgdGVtcG9yYXJpbHkgZml4ZWQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzEwMTE3XG4gICAgLy8gU29sdmUgdGhlIGlzc3VlIHdoZW4gc3dpdGNoaW5nIHRhYnMgd2hlbiB0aGUgdmlydHVhbCBzY3JvbGxpbmcgY29tcG9uZW50IGlzIHVzZWRcbiAgICAvLyBpbiBhIG1hdCAtIHRhYiBjb21wb25lbnQgYW5kIHZpcnR1YWwgc2Nyb2xsIHdvcmsgYWJub3JtYWxseVxuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCkge1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBTaG93IGV4cGFuZGFibGUgaWNvbiBvciBub3QgaWYgaGFzIGRhdGEgb3Igbm90XG4gIHNob3dFeHBhbmRhYmxlSWNvbihyb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoVXRpbC5pc0RlZmluZWQodGhpcy5zaG93RXhwYW5kYWJsZUljb25GdW5jdGlvbikgJiYgdGhpcy5zaG93RXhwYW5kYWJsZUljb25GdW5jdGlvbiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSA/IFV0aWwud3JhcEludG9PYnNlcnZhYmxlKHRoaXMuc2hvd0V4cGFuZGFibGVJY29uRnVuY3Rpb24ocm93LCByb3dJbmRleCkpIDogb2YodHJ1ZSk7XG4gIH1cblxuICBnZXRDb2x1bW5zTm90SW5jbHVkZWQoKTogc3RyaW5nW10ge1xuICAgIGxldCBjb2xzTm90SW5jbHVkZWQgPSBbXTtcbiAgICBjb2xzTm90SW5jbHVkZWQgPSB0aGlzLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIoYyA9PiB2b2lkIDAgIT09IGMucmVuZGVyZXIgJiYgKGMudHlwZSA9PT0gJ2ltYWdlJyB8fCBjLnR5cGUgPT09ICdhY3Rpb24nKSkubWFwKGMgPT4gYy5hdHRyKTtcbiAgICBjb2xzTm90SW5jbHVkZWQucHVzaChDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QpO1xuICAgIGNvbHNOb3RJbmNsdWRlZC5wdXNoKENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpO1xuICAgIHJldHVybiBjb2xzTm90SW5jbHVkZWQ7XG4gIH1cblxuICBnZXRDb2x1bW5OYW1lcyhjb2x1bW5zOiBzdHJpbmdbXSk6IHsgW2NvbHVtbklkOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICAgIGNvbnN0IHRhYmxlQ29sdW1uTmFtZXMgPSB7fTtcbiAgICBjb2x1bW5zLmZvckVhY2goYyA9PiB7XG4gICAgICBjb25zdCBvQ29sdW1uID0gdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbmQob2MgPT4gb2MuYXR0ciA9PT0gYyk7XG4gICAgICB0YWJsZUNvbHVtbk5hbWVzW2NdID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChvQ29sdW1uLnRpdGxlID8gb0NvbHVtbi50aXRsZSA6IG9Db2x1bW4uYXR0cik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhYmxlQ29sdW1uTmFtZXM7XG4gIH1cblxuICByZXNldENvbHVtbnNXaWR0aCgpIHtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChjLmRlZmluaXRpb24pKSB7XG4gICAgICAgIGMud2lkdGggPSBVdGlsLmlzRGVmaW5lZChjLmRlZmluaXRpb24ud2lkdGgpID8gYy5kZWZpbml0aW9uLndpZHRoIDogYy5kZWZpbml0aW9uLm9yaWdpbmFsV2lkdGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGMud2lkdGggPSBcImF1dG9cIjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbnNET01XaWR0aCgpO1xuICB9XG5cbiAgdXBkYXRlQ29sdW1uc0RPTVdpZHRoKCkge1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xuICAgICAgYy5ET01XaWR0aCA9IHRoaXMuZ2V0VGhXaWR0aEZyb21PQ29sdW1uKGMpO1xuICAgIH0pO1xuXG4gIH1cblxuICBwdWJsaWMgaXNEaXNhYmxlQ2hlY2tib3goaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgbGV0IGRpc2FibGUgPSBmYWxzZTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5kaXNhYmxlU2VsZWN0aW9uRnVuY3Rpb24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlU2VsZWN0aW9uRnVuY3Rpb24oaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBkaXNhYmxlO1xuXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvLXRhYmxlLWNvbnRhaW5lclwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IHN0cmV0Y2hcIiBbc3R5bGUuZGlzcGxheV09XCJpc1Zpc2libGUoKT8gJycgOiAnbm9uZSdcIlxuICBbY2xhc3MuYmxvY2stZXZlbnRzXT1cInNob3dMb2FkaW5nIHwgYXN5bmNcIj5cblxuICA8by1kYXRhLXRvb2xiYXIgI3RhYmxlVG9vbGJhciAqbmdJZj1cImhhc0NvbnRyb2xzKClcIiBbdGl0bGVdPVwidGl0bGVcIiBbc2hvdy10aXRsZV09XCJzaG93VGl0bGVcIiBjbGFzcz1cIm8tdGFibGUtdG9vbGJhclwiPlxuICAgIDxuZy1jb250YWluZXIgby1kYXRhLXRvb2xiYXItcHJvamVjdGlvbi1zdGFydD5cbiAgICAgIDxvLXRhYmxlLWJ1dHRvbnMgI3RhYmxlQnV0dG9ucyBbaW5zZXJ0LWJ1dHRvbl09XCJpbnNlcnRCdXR0b25cIiBbcmVmcmVzaC1idXR0b25dPVwicmVmcmVzaEJ1dHRvblwiIFtkZWxldGUtYnV0dG9uXT1cInNob3dEZWxldGVCdXR0b25cIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby10YWJsZS1idXR0b25cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L28tdGFibGUtYnV0dG9ucz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby10YWJsZS10b29sYmFyXVtwb3NpdGlvbj1zdGFydF1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1zdGFydF1cIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW28tdGFibGUtdG9vbGJhcl1bcG9zaXRpb249ZW5kXVwiIG5nUHJvamVjdEFzPVwiW28tZGF0YS10b29sYmFyLWN1c3RvbS1wcm9qZWN0aW9uLWVuZF1cIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW28tdGFibGUtdG9vbGJhcl1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1zdGFydF1cIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciBvLWRhdGEtdG9vbGJhci1wcm9qZWN0aW9uLWVuZD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWlja2ZpbHRlckNvbnRlbnRDaGlsZDsgZWxzZSBkZWZhdWx0UXVpY2tGaWx0ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby10YWJsZS1xdWlja2ZpbHRlclwiPjwvbmctY29udGVudD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0UXVpY2tGaWx0ZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWlja0ZpbHRlclwiPlxuICAgICAgICAgIDxvLXRhYmxlLXF1aWNrZmlsdGVyIChvbkNoYW5nZSk9XCJ0YWJsZVF1aWNrRmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgPC9vLXRhYmxlLXF1aWNrZmlsdGVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cInNob3dUYWJsZU1lbnVCdXR0b25cIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJvLXRhYmxlLW1lbnUtYnV0dG9uXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRhYmxlTWVudS5tYXRNZW51XCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOm1vcmVfdmVydFwiPjwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxvLXRhYmxlLW1lbnUgI3RhYmxlTWVudSBbc2VsZWN0LWFsbC1jaGVja2JveF09XCJzZWxlY3RBbGxDaGVja2JveFwiIFtleHBvcnQtYnV0dG9uXT1cImV4cG9ydEJ1dHRvblwiXG4gICAgICAgIFtjb2x1bW5zLXZpc2liaWxpdHktYnV0dG9uXT1cImNvbHVtbnNWaXNpYmlsaXR5QnV0dG9uXCIgW3Nob3ctY29uZmlndXJhdGlvbi1vcHRpb25dPVwic2hvd0NvbmZpZ3VyYXRpb25PcHRpb25cIlxuICAgICAgICBbc2hvdy1maWx0ZXItb3B0aW9uXT1cInNob3dGaWx0ZXJPcHRpb25cIiBbc2hvdy1yZXBvcnQtb24tZGVtYW5kLW9wdGlvbl09XCJzaG93UmVwb3J0T25EZW1hbmRPcHRpb25cIlxuICAgICAgICBbc2hvdy1jaGFydHMtb24tZGVtYW5kLW9wdGlvbl09XCJzaG93Q2hhcnRzT25EZW1hbmRPcHRpb25cIiBbc2hvdy1yZXNldC13aWR0aC1vcHRpb25dPVwic2hvd1Jlc2V0V2lkdGhPcHRpb25cIiBbc2hvdy1ncm91cC1ieS1vcHRpb25dPVwiZ3JvdXBhYmxlXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm8tdGFibGUtb3B0aW9uXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9vLXRhYmxlLW1lbnU+XG4gICAgICA8bmctdGVtcGxhdGUgI2V4cG9ydE9wdHNUZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby10YWJsZS1leHBvcnQtYnV0dG9uXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9vLWRhdGEtdG9vbGJhcj5cblxuICA8ZGl2ICN0YWJsZUJvZHkgY2xhc3M9XCJvLXRhYmxlLWJvZHkgby1zY3JvbGxcIiBbY2xhc3MuaG9yaXpvbnRhbC1zY3JvbGxdPVwiaG9yaXpvbnRhbFNjcm9sbFwiIFtjbGFzcy5zY3JvbGxlZF09XCJob3Jpem9udGFsU2Nyb2xsZWRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVuYWJsZWRWaXJ0dWFsU2Nyb2xsOyBlbHNlIHRhYmxlV2l0aFZpcnR1YWxTY3JvbGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXRhYmxlLW92ZXJmbG93IG8tc2Nyb2xsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVXaXRoVmlydHVhbFNjcm9sbD5cbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgI3ZpcnR1YWxTY3JvbGxWaWV3UG9ydCBmeEZsZXg+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8IS0tVEFCTEUgUEFHSU5BVE9SLS0+XG4gIDxtYXQtcGFnaW5hdG9yICpuZ0lmPVwicGFnaW5hdG9yXCIgI21hdHBhZ2luYXRvciBbbGVuZ3RoXT1cImRhdGFTb3VyY2U/LnJlc3VsdHNMZW5ndGhcIiBbcGFnZUluZGV4XT1cInBhZ2luYXRvci5wYWdlSW5kZXhcIiBbcGFnZVNpemVdPVwicXVlcnlSb3dzXCJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2luYXRvci5wYWdlU2l6ZU9wdGlvbnNcIiAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJwYWdpbmF0b3Iuc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcIj5cbiAgPC9tYXQtcGFnaW5hdG9yPlxuXG4gIDwhLS1MT0FESU5HLS0+XG4gIDxkaXYgI3NwaW5uZXJDb250YWluZXIgKm5nSWY9XCJzaG93TG9hZGluZyB8IGFzeW5jXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIFtuZ1N0eWxlXT1cInsndG9wLnB4JzogaGVhZGVySGVpZ2h0fVwiXG4gICAgY2xhc3M9XCJzcGlubmVyLWNvbnRhaW5lclwiIFtjbGFzcy5zcGlubmVyLWNvbnRhaW5lci1zY3JvbGxhYmxlXT1cImxvYWRpbmdTY3JvbGwgfCBhc3luY1wiPlxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIHN0cm9rZVdpZHRoPVwiM1wiIFtkaWFtZXRlcl09XCJkaWFtZXRlclNwaW5uZXJcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuICA8L2Rpdj5cblxuICA8IS0tIERpc2FibGUgYmxvY2tlciAtLT5cbiAgPGRpdiAqbmdJZj1cIiFlbmFibGVkXCIgY2xhc3M9XCJvLXRhYmxlLWRpc2FibGVkLWJsb2NrZXJcIj48L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RhYmxlPlxuXG4gIDx0YWJsZSBtYXQtdGFibGUgI3RhYmxlIFtjbGFzcy5hdXRvYWRqdXN0ZWRdPVwiYXV0b0FkanVzdFwiIFt0cmFja0J5XT1cImdldFRyYWNrQnlGdW5jdGlvbigpXCIgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIG9NYXRTb3J0XG4gICAgW29NYXRTb3J0Q29sdW1uc109XCJzb3J0Q29sQXJyYXlcIiBbbmdDbGFzc109XCJyb3dIZWlnaHRPYnNlcnZhYmxlIHwgYXN5bmNcIiAoY2RrT2JzZXJ2ZUNvbnRlbnQpPVwicHJvamVjdENvbnRlbnRDaGFuZ2VkKClcIlxuICAgIFtvVGFibGVFeHBhbmRlZEZvb3Rlcl09XCIhKGxvYWRpbmcgfCBhc3luYylcIiBbb1RhYmxlRXhwYW5kZWRGb290ZXJDb2xzcGFuXT1cInZpc2libGVDb2xBcnJheS5sZW5ndGhcIiBbbXVsdGlUZW1wbGF0ZURhdGFSb3dzXT1cInNob3dFeHBhbmRhYmxlUm93KClcIlxuICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJvbnRpbWl6ZS13ZWIgdGFibGVcIj5cblxuICAgIDwhLS1DaGVja2JveCBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm5hbWVcIiAqbmdJZj1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFibGVDb2x1bW5TZWxlY3RBbGxDb250ZW50Q2hpbGQ7IGVsc2UgY3VzdG9tSGVhZGVyU2VsZWN0QWxsVGVtcGxhdGVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgPG8tdGFibGUtaGVhZGVyLXNlbGVjdC1hbGwgW2NvbHVtbl09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtblwiPjwvby10YWJsZS1oZWFkZXItc2VsZWN0LWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggbmFtZT1cImlkW11cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUNoZWNrYm94KHJvdylcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3Rpb25DaGVja2JveFRvZ2dsZSgkZXZlbnQsIHJvdylcIiBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIj5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21IZWFkZXJTZWxlY3RBbGxUZW1wbGF0ZT5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3MucmVzaXphYmxlXT1cInJlc2l6YWJsZVwiIGNsYXNzPVwibWF0LWhlYWRlci1zZWxlY3QtYWxsLXdpdGgtdGl0bGUgby1jZW50ZXJcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi53aWR0aFwiIFtzdHlsZS5taW4td2lkdGhdPVwiZ2V0TWluV2lkdGhDb2x1bW4ob1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4pXCJcbiAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm1heFdpZHRoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxvLXRhYmxlLWhlYWRlci1zZWxlY3QtYWxsIFtjb2x1bW5dPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW5cIj48L28tdGFibGUtaGVhZGVyLXNlbGVjdC1hbGw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cIm8tY2VudGVyXCIgW3N0eWxlLndpZHRoXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImdldE1pbldpZHRoQ29sdW1uKG9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uKVwiIFtzdHlsZS5tYXgtd2lkdGhdPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubWF4V2lkdGhcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IG5hbWU9XCJpZFtdXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVDaGVja2JveChyb3cpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0aW9uQ2hlY2tib3hUb2dnbGUoJGV2ZW50LCByb3cpXCIgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCI+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG5cbiAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS1FeHBhbmRhYmxlIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwib1RhYmxlT3B0aW9ucy5leHBhbmRhYmxlQ29sdW1uLm5hbWVcIiAqbmdJZj1cImlzQ29sdW1uRXhwYW5kYWJsZSgpXCI+XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICB7eyBvVGFibGVPcHRpb25zLmV4cGFuZGFibGVDb2x1bW4udGl0bGUgfX1cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93O2xldCByb3dJbmRleCA9IGRhdGFJbmRleFwiPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJzaG93RXhwYW5kYWJsZUljb24ocm93LCByb3dJbmRleCkgfCBhc3luY1wiIChjbGljayk9XCJ0b29nbGVSb3dFeHBhbmRhYmxlKHJvdywgcm93SW5kZXgsICRldmVudClcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFeHBhbmRlZChyb3cpXCI+e3sgdGFibGVSb3dFeHBhbmRhYmxlLmljb25Db2xsYXBzZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFeHBhbmRlZChyb3cpXCI+e3sgdGFibGVSb3dFeHBhbmRhYmxlLmljb25FeHBhbmQgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEdlbmVyaWMgY29sdW1uIGRlZmluaXRpb24gLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIG9UYWJsZU9wdGlvbnMuY29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLm5hbWVcIj5cbiAgICAgIDwhLS1EZWZpbmUgaGVhZGVyLWNlbGwtLT5cblxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbmdDbGFzc109XCJnZXRUaXRsZUFsaWduQ2xhc3MoY29sdW1uKVwiIFtjbGFzcy5yZXNpemFibGVdPVwicmVzaXphYmxlXCIgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiZ2V0TWluV2lkdGhDb2x1bW4oY29sdW1uKVwiIFtzdHlsZS5tYXgtd2lkdGhdPVwiY29sdW1uLm1heFdpZHRoXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICA8by10YWJsZS1oZWFkZXIgW2NvbHVtbl09XCJjb2x1bW5cIj48L28tdGFibGUtaGVhZGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGg+XG5cblxuICAgICAgPCEtLURlZmluZSBtYXQtY2VsbC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJsZS5tdWx0aVRlbXBsYXRlRGF0YVJvd3M7IGVsc2UgY2VsbFRlbXBsYXRlTXVsdGlUZW1wbGF0ZURhdGFSb3dzXCI+XG4gICAgICAgIDx0ZCAjY2VsbCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7bGV0IHJvd0luZGV4ID0gaW5kZXggXCIgW25nQ2xhc3NdPVwiW2NvbHVtbi5jbGFzc05hbWUsIGdldENlbGxBbGlnbkNsYXNzKGNvbHVtbildXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2socm93LCBjb2x1bW4sIHJvd0luZGV4LCBjZWxsLCAkZXZlbnQpXCIgKGRibGNsaWNrKT1cImhhbmRsZURvdWJsZUNsaWNrKHJvdywgY29sdW1uLCByb3dJbmRleCwgY2VsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgW2NsYXNzLmVtcHR5LWNlbGxdPVwiaXNFbXB0eShyb3dbY29sdW1uLm5hbWVdKVwiIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIWNvbHVtbi5oYXNUb29sdGlwKClcIiBbbWF0VG9vbHRpcF09XCJjb2x1bW4uZ2V0VG9vbHRpcChyb3cpXCJcbiAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI3NTBcIiBtYXRUb29sdGlwQ2xhc3M9XCJvLXRhYmxlLWNlbGwtdG9vbHRpcFwiXG4gICAgICAgICAgW2NsYXNzLm8tbWF0LWNlbGwtbXVsdGlsaW5lXT1cIihjb2x1bW4uaXNNdWx0aWxpbmUgfCBhc3luYylcIiBbb0NvbnRleHRNZW51XT1cInRhYmxlQ29udGV4dE1lbnVcIlxuICAgICAgICAgIFtvQ29udGV4dE1lbnVEYXRhXT1cInsgY2VsbE5hbWU6Y29sdW1uLm5hbWUsIHJvd1ZhbHVlOnJvdywgcm93SW5kZXg6cm93SW5kZXh9XCIgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJnZXRNaW5XaWR0aENvbHVtbihjb2x1bW4pXCIgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIlxuICAgICAgICAgIFtjbGFzcy5vLXRhYmxlLWVkaXRpbmctY2VsbF09XCJpc1Jvd1NlbGVjdGVkKHJvdykgJiYgY29sdW1uLmVkaXRpbmdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFJlbmRlcmVyO2NvbnRleHQ6e2NvbHVtbjpjb2x1bW4scm93OnJvd31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNjZWxsVGVtcGxhdGVNdWx0aVRlbXBsYXRlRGF0YVJvd3M+XG4gICAgICAgIDx0ZCAjY2VsbCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7bGV0IHJvd0luZGV4ID0gZGF0YUluZGV4IFwiIFtuZ0NsYXNzXT1cIltjb2x1bW4uY2xhc3NOYW1lLCBnZXRDZWxsQWxpZ25DbGFzcyhjb2x1bW4pXVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKHJvdywgY29sdW1uLCByb3dJbmRleCwgY2VsbCwgJGV2ZW50KVwiIChkYmxjbGljayk9XCJoYW5kbGVEb3VibGVDbGljayhyb3csIGNvbHVtbiwgcm93SW5kZXgsIGNlbGwsICRldmVudClcIlxuICAgICAgICAgIFtjbGFzcy5lbXB0eS1jZWxsXT1cImlzRW1wdHkocm93W2NvbHVtbi5uYW1lXSlcIiBbbWF0VG9vbHRpcERpc2FibGVkXT1cIiFjb2x1bW4uaGFzVG9vbHRpcCgpXCIgW21hdFRvb2x0aXBdPVwiY29sdW1uLmdldFRvb2x0aXAocm93KVwiXG4gICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNzUwXCIgbWF0VG9vbHRpcENsYXNzPVwiby10YWJsZS1jZWxsLXRvb2x0aXBcIlxuICAgICAgICAgIFtjbGFzcy5vLW1hdC1jZWxsLW11bHRpbGluZV09XCIoY29sdW1uLmlzTXVsdGlsaW5lIHwgYXN5bmMpXCIgW29Db250ZXh0TWVudV09XCJ0YWJsZUNvbnRleHRNZW51XCJcbiAgICAgICAgICBbb0NvbnRleHRNZW51RGF0YV09XCJ7IGNlbGxOYW1lOmNvbHVtbi5uYW1lLCByb3dWYWx1ZTpyb3csIHJvd0luZGV4OnJvd0luZGV4fVwiIFtzdHlsZS53aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiZ2V0TWluV2lkdGhDb2x1bW4oY29sdW1uKVwiIFtzdHlsZS5tYXgtd2lkdGhdPVwiY29sdW1uLm1heFdpZHRoXCJcbiAgICAgICAgICBbY2xhc3Muby10YWJsZS1lZGl0aW5nLWNlbGxdPVwiaXNSb3dTZWxlY3RlZChyb3cpICYmIGNvbHVtbi5lZGl0aW5nXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxSZW5kZXJlcjtjb250ZXh0Ontjb2x1bW46Y29sdW1uLHJvdzpyb3d9XCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8IS0tRGVmaW5lIG1hdC1mb290ZXItY2VsbC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUb3RhbHMgfCBhc3luY1wiPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmIFtuZ0NsYXNzXT1cImNvbHVtbi5jbGFzc05hbWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiAqbmdJZj1cImNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS50aXRsZVwiPlxuICAgICAgICAgICAge3sgY29sdW1uLmFnZ3JlZ2F0ZS50aXRsZSB8IG9UcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbi5yZW5kZXJlclwiPlxuICAgICAgICAgICAge3sgZGF0YVNvdXJjZS5nZXRBZ2dyZWdhdGVEYXRhKGNvbHVtbikgfX1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJjb2x1bW4ucmVuZGVyZXIgJiYgY29sdW1uLmFnZ3JlZ2F0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5yZW5kZXJlci50ZW1wbGF0ZXJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2NlbGx2YWx1ZTogZGF0YVNvdXJjZS5nZXRBZ2dyZWdhdGVEYXRhKGNvbHVtbil9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgQ29sdW1uIC0gVGhlIGRldGFpbCByb3cgaXMgbWFkZSB1cCBvZiB0aGlzIG9uZSBjb2x1bW4gdGhhdCBzcGFucyBhY3Jvc3MgYWxsIGNvbHVtbnMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0V4cGFuZGVkUm93XCI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7bGV0IHJvd0luZGV4PSBkYXRhSW5kZXhcIiBbYXR0ci5jb2xzcGFuXT1cIm9UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMubGVuZ3RoXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJnZXRFeHBhbmRlZFJvd0NvbnRhaW5lckNsYXNzKHJvd0luZGV4KVwiIFtAZGV0YWlsRXhwYW5kXT1cImdldFN0YXRlRXhwYW5kKHJvdylcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLUZPT1RFUi1JTlNFUlRBQkxFLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dMYXN0SW5zZXJ0YWJsZVJvdyAmJiBvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubmFtZSArIGdldFN1ZmZpeENvbHVtbkluc2VydGFibGUoKVwiICpuZ0lmPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZVwiPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygb1RhYmxlT3B0aW9ucy5jb2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZSsgZ2V0U3VmZml4Q29sdW1uSW5zZXJ0YWJsZSgpXCI+XG5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZiBbbmdDbGFzc109XCJjb2x1bW4uY2xhc3NOYW1lXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5JbnNlcnRhYmxlKGNvbHVtbikgJiYgIW9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQudXNlQ2VsbEVkaXRvcihjb2x1bW4pXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJpbnNlcnRhYmxlLWZvcm0tZmllbGQgby10YWJsZS1jZWxsLWVkaXRvci10ZXh0IG8tdGFibGUtY2VsbC1lZGl0b3JcIiBbaGlkZVJlcXVpcmVkTWFya2VyXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmdldFBsYWNlaG9sZGVyKGNvbHVtbilcIiBbaWRdPVwiY29sdW1uLmF0dHJcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmdldENvbnRyb2woY29sdW1uKVwiIFtyZXF1aXJlZF09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmlzQ29sdW1uUmVxdWlyZWQoY29sdW1uKVwiPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmNvbHVtbkhhc0Vycm9yKGNvbHVtbiwgJ3JlcXVpcmVkJylcIj5cbiAgICAgICAgICAgICAgICB7eyAnRk9STV9WQUxJREFUSU9OLlJFUVVJUkVEJyB8IG9UcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5JbnNlcnRhYmxlKGNvbHVtbikgJiYgb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC51c2VDZWxsRWRpdG9yKGNvbHVtbilcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmNvbHVtbkVkaXRvcnNbY29sdW1uLmF0dHJdLnRlbXBsYXRlcmVmXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93dmFsdWU6IG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQucm93RGF0YSB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Rmlyc3RJbnNlcnRhYmxlUm93ICYmIG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJnZXRDb2x1bW5JbnNlcnRhYmxlKG9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm5hbWUpXCIgKm5nSWY9XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlXCI+XG4gICAgICAgIDx0ZCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBvVGFibGVPcHRpb25zLmNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImdldENvbHVtbkluc2VydGFibGUoY29sdW1uLm5hbWUpXCI+XG5cbiAgICAgICAgPHRkIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbmdDbGFzc109XCJjb2x1bW4uY2xhc3NOYW1lXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5JbnNlcnRhYmxlKGNvbHVtbikgJiYgIW9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQudXNlQ2VsbEVkaXRvcihjb2x1bW4pXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJpbnNlcnRhYmxlLWZvcm0tZmllbGRcIiBbaGlkZVJlcXVpcmVkTWFya2VyXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmdldFBsYWNlaG9sZGVyKGNvbHVtbilcIiBbaWRdPVwiY29sdW1uLmF0dHJcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmdldENvbnRyb2woY29sdW1uKVwiIFtyZXF1aXJlZF09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmlzQ29sdW1uUmVxdWlyZWQoY29sdW1uKVwiPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmNvbHVtbkhhc0Vycm9yKGNvbHVtbiwgJ3JlcXVpcmVkJylcIj5cbiAgICAgICAgICAgICAgICB7eyAnRk9STV9WQUxJREFUSU9OLlJFUVVJUkVEJyB8IG9UcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5JbnNlcnRhYmxlKGNvbHVtbikgJiYgb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC51c2VDZWxsRWRpdG9yKGNvbHVtbilcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmNvbHVtbkVkaXRvcnNbY29sdW1uLmF0dHJdLnRlbXBsYXRlcmVmXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93dmFsdWU6IG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQucm93RGF0YSB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRGVmaW5pdGlvbiBjb2x1bW4gZ3JvdXAgaGVhZGVyIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBncm91cGluZ0hlYWRlcnNSb3dzOyBsZXQgaSA9IGluZGV4XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW5cIj5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBncm91cFwiIGNsYXNzPVwiZ3JvdXBpbmctcm93XCIgW29Db250ZXh0TWVudV09XCJ0YWJsZUNvbnRleHRNZW51XCJcbiAgICAgICAgW29Db250ZXh0TWVudURhdGFdPVwieyBjZWxsTmFtZTpjb2x1bW4sIHJvd1ZhbHVlOmdyb3VwLCByb3dJbmRleDppfVwiIFtuZ0NsYXNzXT1cImdldEdyb3VwSGVhZGVyQ2VsbEFsaWduQ2xhc3MoY29sdW1uKVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaT09PTBcIiBjbGFzcz1cImdyb3VwaW5nLXRpdGxlLXdyYXBwZXJcIiBbbmdTdHlsZV09XCJ7J3BhZGRpbmctbGVmdCc6IDIwKihncm91cC5sZXZlbC0xKSsncHgnfVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj57eyBncm91cC5leHBhbmRlZCA/ICdleHBhbmRfbW9yZScgOiAnY2hldnJvbl9yaWdodCcgfX08L21hdC1pY29uPlxuICAgICAgICAgIHt7IGdyb3VwLnRpdGxlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBpbmctYWdncmVnYXRlXCIgKm5nSWY9XCJncm91cC5oYXNBY3RpdmVBZ2dyZWdhdGUodmlzaWJsZUNvbEFycmF5W2ldKVwiPlxuICAgICAgICAgIHt7IGdyb3VwLmdldENvbHVtbkFjdGl2ZUFnZ3JlZ2F0ZVRpdGxlKHZpc2libGVDb2xBcnJheVtpXSkgfCBvVHJhbnNsYXRlIH19IDpcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdldE9Db2x1bW5Gcm9tR3JvdXBIZWFkZXJDb2x1bW4oY29sdW1uKS5yZW5kZXJlclwiPlxuICAgICAgICAgICAge3sgZ3JvdXAuZ2V0Q29sdW1uQWdncmVnYXRlVmFsdWUodmlzaWJsZUNvbEFycmF5W2ldKX19XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldE9Db2x1bW5Gcm9tR3JvdXBIZWFkZXJDb2x1bW4oY29sdW1uKS5yZW5kZXJlclwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0T0NvbHVtbkZyb21Hcm91cEhlYWRlckNvbHVtbihjb2x1bW4pLnJlbmRlcmVyPy50ZW1wbGF0ZXJlZjsgY29udGV4dDp7IGNlbGx2YWx1ZTogIGdyb3VwLmdldENvbHVtbkFnZ3JlZ2F0ZVZhbHVlKHZpc2libGVDb2xBcnJheVtpXSkgfVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwb3NpdGlvblwiPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPiB7e3Jvd319IDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8dHIgI3RhYmxlSGVhZGVyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJvVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zOyBzdGlja3k6IGZpeGVkSGVhZGVyXCI+PC90cj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFibGUubXVsdGlUZW1wbGF0ZURhdGFSb3dzOyBlbHNlIHJvd1RlbXBsYXRlTXVsdGlUZW1wbGF0ZURhdGFSb3dzXCI+XG4gICAgICA8dHIgbWF0LXJvdyBvVGFibGVSb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IG9UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnM7IHdoZW46aXNOb3RHcm91cDsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxuICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCIgW25nQ2xhc3NdPVwicm93IHwgb1RhYmxlUm93Q2xhc3M6IHJvd0luZGV4OiByb3dDbGFzc1wiPlxuICAgICAgPC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3Jvd1RlbXBsYXRlTXVsdGlUZW1wbGF0ZURhdGFSb3dzPlxuICAgICAgPHRyIG1hdC1yb3cgb1RhYmxlUm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBvVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zOyB3aGVuOmlzTm90R3JvdXA7IGxldCByb3dJbmRleCA9IGRhdGFJbmRleFwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIiBbbmdDbGFzc109XCJyb3cgfCBvVGFibGVSb3dDbGFzczogcm93SW5kZXg6IHJvd0NsYXNzXCI+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIFJvdyBHcm91cCBoZWFkZXIgLS0+XG4gICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGdyb3VwaW5nSGVhZGVyc1Jvd3M7IHdoZW46aXNHcm91cFwiIChjbGljayk9XCJncm91cEhlYWRlckNsaWNrKHJvdylcIlxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3NOYW1lR3JvdXBIZWFkZXIocm93KVwiPlxuICAgIDwvdHI+XG5cbiAgICA8IS0tIEV4cGFuZGVkIGRldGFpbCByb3ctLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRXhwYW5kZWRSb3dcIj5cbiAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIiBjbGFzcz1cIm8tdGFibGUtcm93LWV4cGFuZGVkXCI+PC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93TGFzdEluc2VydGFibGVSb3dcIj5cbiAgICAgIDx0ciBtYXQtZm9vdGVyLXJvdyAqbWF0Rm9vdGVyUm93RGVmPVwib1RhYmxlT3B0aW9ucy5jb2x1bW5zSW5zZXJ0YWJsZXM7IHN0aWNreTogdHJ1ZVwiXG4gICAgICAgIChrZXl1cCk9XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmhhbmRsZUtleWJvYXJkRXZlbnQoJGV2ZW50KVwiIGNsYXNzPVwiby10YWJsZS1pbnNlcnRhYmxlXCI+PC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0ZpcnN0SW5zZXJ0YWJsZVJvd1wiPlxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJvVGFibGVPcHRpb25zLmNvbHVtbnNJbnNlcnRhYmxlczsgc3RpY2t5OiB0cnVlXCJcbiAgICAgICAgKGtleXVwKT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaGFuZGxlS2V5Ym9hcmRFdmVudCgkZXZlbnQpXCIgY2xhc3M9XCJvLXRhYmxlLWluc2VydGFibGVcIj4gPC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvdGFscyB8IGFzeW5jXCI+XG4gICAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cIm9UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnM7IHN0aWNreTogdHJ1ZVwiIGNsYXNzPVwiby10YWJsZS1hZ2dyZWdhdGVcIj5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdGFibGU+XG5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhY29udGV4dE1lbnVDb250ZW50Q2hpbGQgJiYgY29udGV4dE1lbnVcIj5cbiAgPG8tdGFibGUtY29udGV4dC1tZW51IFtpbnNlcnRdPVwiaW5zZXJ0QnV0dG9uXCIgW2VkaXRdPVwiZWRpdGlvbk1vZGUgIT09IEVESVRfTU9ERV9OT05FXCIgW3ZpZXctZGV0YWlsXT1cImRldGFpbE1vZGUgIT09IERFVEFJTF9NT0RFX05PTkVcIlxuICAgIFtyZWZyZXNoXT1cInJlZnJlc2hCdXR0b25cIiBbZGVsZXRlXT1cImRlbGV0ZUJ1dHRvblwiIFtmaWx0ZXJdPVwic2hvd0ZpbHRlck9wdGlvblwiIFtncm91cC1ieS1yb3ddPVwiZ3JvdXBhYmxlXCI+XG4gIDwvby10YWJsZS1jb250ZXh0LW1lbnU+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNjZWxsUmVuZGVyZXIgbGV0LXJvdz1cInJvd1wiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cblxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRydWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNvbHVtbi5yZW5kZXJlciAhPSBudWxsICYmICghY29sdW1uLmVkaXRpbmcgfHwgY29sdW1uLmVkaXRpbmcgJiYgIWlzUm93U2VsZWN0ZWQocm93KSlcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uLnJlbmRlcmVyPy50ZW1wbGF0ZXJlZjsgY29udGV4dDp7IGNlbGx2YWx1ZTogcm93W2NvbHVtbi5uYW1lXSwgcm93dmFsdWU6cm93IH1cIj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNSb3dTZWxlY3RlZChyb3cpICYmIGNvbHVtbi5lZGl0aW5nXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5lZGl0b3I/LnRlbXBsYXRlcmVmOyBjb250ZXh0OnsgY2VsbHZhbHVlOiByb3dbY29sdW1uLm5hbWVdLCByb3d2YWx1ZTpyb3cgfVwiPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNvbHVtbi50eXBlID09PSAnZWRpdEJ1dHRvbkluUm93JyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RldGFpbEJ1dHRvbkluUm93J1wiPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJvLWFjdGlvbi1jZWxsLXJlbmRlcmVyXCIgKGNsaWNrKT1cIm9uRGV0YWlsQnV0dG9uQ2xpY2soY29sdW1uLCByb3csICRldmVudClcIj5cbiAgICAgICAgICA8bWF0LWljb24+e3sgZ2V0RGV0YWlsQnV0dG9uSWNvbihjb2x1bW4pIH19PC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD57eyByb3dbY29sdW1uLm5hbWVdIH19PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
2673
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9vLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL28tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0YsT0FBTyxFQUdMLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBR04sUUFBUSxFQUNSLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsRUFFakIsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsYUFBYSxFQUFFLEVBQUUs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cUJBQXFCLE1BRXJCLHNCQUFzQixNQUV0QixhQUFhLE1BRWIsV0FBVyxNQW9CWCxpQkFBaUIsTUFpSVAsV0FBVztzQkFEcEIsU0FBUzt1QkFBQyxXQUFXO2dCQUd0QixhQUFhO3NCQURaLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFHOUMsY0FBYztzQkFEYixTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBaUIvQyxVQUFVO3NCQURULFNBQVM7dUJBQUMsV0FBVztnQkFJdEIsWUFBWTtzQkFEWCxlQUFlO3VCQUFDLHFCQUFxQjtnQkFNdEMsWUFBWTtzQkFEWCxlQUFlO3VCQUFDLHFCQUFxQjtnQkFJdEMsdUJBQXVCO3NCQUR0QixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFLckQsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQjtnQkFJL0IsZ0NBQWdDO3NCQUQvQixZQUFZO3VCQUFDLDhCQUE4QjtnQkFPNUMsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFO2dCQStCakMsdUJBQXVCO3NCQUR0QixZQUFZO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ2hhbmdlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIFZpZXdSZWYsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRNZW51IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0VGFiLCBNYXRUYWJHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRG9tUG9ydGFsT3V0bGV0LCBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQm9vbGVhbkNvbnZlcnRlciwgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHR5cGUgeyBJT0NvbnRleHRNZW51Q29udGV4dCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby1jb250ZXh0LW1lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlQnV0dG9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWJ1dHRvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVCdXR0b25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWJ1dHRvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlQ29sdW1uc0dyb3VwaW5nIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWNvbHVtbnMtZ3JvdXBpbmctaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1kYXRhc291cmNlLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZU1lbnUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtbWVudS5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlUGFnaW5hdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLXBhZ2luYXRvci5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVRdWlja2ZpbHRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1xdWlja2ZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NlcnZpY2UtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLCBPX0NPTVBPTkVOVF9TVEFURV9TRVJWSUNFLCBPbnRpbWl6ZVNlcnZpY2VQcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zbmFja2Jhci5zZXJ2aWNlJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudFN0YXRlQ2xhc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLXRhYmxlLWNvbXBvbmVudC1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLXRhYmxlLWNvbXBvbmVudC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9Db2x1bW5EaXNwbGF5LCBPRmlsdGVyRGVmaW5pdGlvbiwgT0dyb3VwZWRDb2x1bW5UeXBlcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi90eXBlcy9leHByZXNzaW9uLnR5cGUnO1xuaW1wb3J0IHsgT1Blcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvby1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IE9RdWVyeURhdGFBcmdzIH0gZnJvbSAnLi4vLi4vdHlwZXMvcXVlcnktZGF0YS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgUXVpY2tGaWx0ZXJGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL3F1aWNrLWZpbHRlci1mdW5jdGlvbi50eXBlJztcbmltcG9ydCB7IFNRTE9yZGVyIH0gZnJvbSAnLi4vLi4vdHlwZXMvc3FsLW9yZGVyLnR5cGUnO1xuaW1wb3J0IHsgT0NvbHVtbkFnZ3JlZ2F0ZSB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tY29sdW1uLWFnZ3JlZ2F0ZS50eXBlJztcbmltcG9ydCB7IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IsIE9Db2x1bW5WYWx1ZUZpbHRlciB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tY29sdW1uLXZhbHVlLWZpbHRlci50eXBlJztcbmltcG9ydCB7IFRhYmxlRmlsdGVyQnlDb2x1bW5EaWFsb2dSZXN1bHQgfSBmcm9tICcuLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4tZGF0YS50eXBlJztcbmltcG9ydCB7IE9UYWJsZUdsb2JhbENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tdGFibGUtZ2xvYmFsLWNvbmZpZy50eXBlJztcbmltcG9ydCB7IE9UYWJsZUluaXRpYWxpemF0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tdGFibGUtaW5pdGlhbGl6YXRpb24tb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IE9UYWJsZU1lbnVQZXJtaXNzaW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tdGFibGUtbWVudS1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IE9UYWJsZVBlcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUvby10YWJsZS1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IE9ic2VydmFibGVXcmFwcGVyIH0gZnJvbSAnLi4vLi4vdXRpbC9hc3luYyc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvblV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9maWx0ZXItZXhwcmVzc2lvbi51dGlscyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1V0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBTZXJ2aWNlVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL3NlcnZpY2UudXRpbHMnO1xuaW1wb3J0IHsgU1FMVHlwZXMgfSBmcm9tICcuLi8uLi91dGlsL3NxbHR5cGVzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0NvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vY29udGV4dG1lbnUvby1jb250ZXh0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9vLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQgfSBmcm9tICcuLi9vLXNlcnZpY2UtY29tcG9uZW50LmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUNvbHVtbkNhbGN1bGF0ZWRDb21wb25lbnQgfSBmcm9tICcuL2NvbHVtbi9jYWxjdWxhdGVkL28tdGFibGUtY29sdW1uLWNhbGN1bGF0ZWQuY29tcG9uZW50JztcbmltcG9ydCB7IE9CYXNlVGFibGVDZWxsUmVuZGVyZXIgfSBmcm9tICcuL2NvbHVtbi9jZWxsLXJlbmRlcmVyL28tYmFzZS10YWJsZS1jZWxsLXJlbmRlcmVyLmNsYXNzJztcbmltcG9ydCB7IE9Db2x1bW4gfSBmcm9tICcuL2NvbHVtbi9vLWNvbHVtbi5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL2NvbHVtbi9vLXRhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvY29udGV4dG1lbnUvby10YWJsZS1jb250ZXh0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IERlZmF1bHRPVGFibGVPcHRpb25zIH0gZnJvbSAnLi9leHRlbnNpb25zL2RlZmF1bHQtby10YWJsZS1vcHRpb25zLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUZpbHRlckJ5Q29sdW1uRGF0YURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9kaWFsb2cvZmlsdGVyLWJ5LWNvbHVtbi9vLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4tZGF0YS1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE9CYXNlVGFibGVQYWdpbmF0b3IgfSBmcm9tICcuL2V4dGVuc2lvbnMvZm9vdGVyL3BhZ2luYXRvci9vLWJhc2UtdGFibGUtcGFnaW5hdG9yLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtYnV0dG9uL28tdGFibGUtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVDb2x1bW5TZWxlY3RBbGxEaXJlY3RpdmUgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWNvbHVtbi1zZWxlY3QtYWxsL28tdGFibGUtY29sdW1uLXNlbGVjdC1hbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7IE9GaWx0ZXJDb2x1bW4gfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWNvbHVtbnMtZmlsdGVyL2NvbHVtbnMvby10YWJsZS1jb2x1bW5zLWZpbHRlci1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWNvbHVtbnMtZmlsdGVyL28tdGFibGUtY29sdW1ucy1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtY29sdW1ucy1ncm91cGluZy9jb2x1bW5zL28tdGFibGUtY29sdW1ucy1ncm91cGluZy1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtaGVhZGVyL28tdGFibGUtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb25zL2hlYWRlci90YWJsZS1pbnNlcnRhYmxlLXJvdy9vLXRhYmxlLWluc2VydGFibGUtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLW9wdGlvbi9vLXRhYmxlLW9wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlRGF0YVNvdXJjZVNlcnZpY2UgfSBmcm9tICcuL2V4dGVuc2lvbnMvby10YWJsZS1kYXRhc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RhYmxlVmlydHVhbFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnLi9leHRlbnNpb25zL28tdGFibGUtc3RyYXRlZ3kuc2VydmljZSc7XG5pbXBvcnQgeyBPVGFibGVEYW8gfSBmcm9tICcuL2V4dGVuc2lvbnMvby10YWJsZS5kYW8nO1xuaW1wb3J0IHsgT1RhYmxlR3JvdXBlZFJvdyB9IGZyb20gJy4vZXh0ZW5zaW9ucy9yb3cvby10YWJsZS1yb3ctZ3JvdXAuY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlUm93RXhwYW5kYWJsZUNvbXBvbmVudCwgT1RhYmxlUm93RXhwYW5kZWRDaGFuZ2UgfSBmcm9tICcuL2V4dGVuc2lvbnMvcm93L3RhYmxlLXJvdy1leHBhbmRhYmxlL28tdGFibGUtcm93LWV4cGFuZGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9NYXRTb3J0IH0gZnJvbSAnLi9leHRlbnNpb25zL3NvcnQvby1tYXQtc29ydCc7XG5pbXBvcnQgeyBPVGFibGVCYXNlIH0gZnJvbSAnLi9vLXRhYmxlLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT19UQUJMRV9HTE9CQUxfQ09ORklHIH0gZnJvbSAnLi91dGlscy9vLXRhYmxlLnRva2Vucyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX1RBQkxFID0gW1xuICAvLyB2aXNpYmxlLWNvbHVtbnMgW3N0cmluZ106IHZpc2libGUgY29sdW1ucywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICd2aXNpYmxlQ29sdW1uczogdmlzaWJsZS1jb2x1bW5zJyxcblxuICAvLyB2aXNpYmxlLWNvbHVtbnMtYnktZGVmYXVsdCBbc3RyaW5nXTogY29sdW1ucyB0aGF0IGFyZSB2aXNpYmxlIGJ5IGRlZmF1bHQsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnZGVmYXVsdFZpc2libGVDb2x1bW5zOiBkZWZhdWx0LXZpc2libGUtY29sdW1ucycsXG5cbiAgLy8gZWRpdGFibGUtY29sdW1ucyBbc3RyaW5nXTogY29sdW1ucyB0aGF0IGNhbiBiZSBlZGl0ZWQgZGlyZWN0bHkgb3ZlciB0aGUgdGFibGUsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAvLyAnZWRpdGFibGVDb2x1bW5zOiBlZGl0YWJsZS1jb2x1bW5zJyxcblxuICAvLyBzb3J0LWNvbHVtbnMgW3N0cmluZ106IGluaXRpYWwgc29ydGluZywgd2l0aCB0aGUgZm9ybWF0IGNvbHVtbjpbQVNDfERFU0NdLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3NvcnRDb2x1bW5zOiBzb3J0LWNvbHVtbnMnLFxuXG4gICdxdWlja0ZpbHRlckNhbGxiYWNrOiBxdWljay1maWx0ZXItZnVuY3Rpb24nLFxuXG4gIC8vIGRlbGV0ZS1idXR0b24gW25vfHllc106IHNob3cgZGVsZXRlIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnZGVsZXRlQnV0dG9uOiBkZWxldGUtYnV0dG9uJyxcblxuICAvLyByZWZyZXNoLWJ1dHRvbiBbbm98eWVzXTogc2hvdyByZWZyZXNoIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAncmVmcmVzaEJ1dHRvbjogcmVmcmVzaC1idXR0b24nLFxuXG4gIC8vIGNvbHVtbnMtdmlzaWJpbGl0eS1idXR0b24gW25vfHllc106IHNob3cgY29sdW1ucyB2aXNpYmlsaXR5IGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnY29sdW1uc1Zpc2liaWxpdHlCdXR0b246IGNvbHVtbnMtdmlzaWJpbGl0eS1idXR0b24nLFxuXG4gIC8vIC8vIGNvbHVtbnMtcmVzaXplLWJ1dHRvbiBbbm98eWVzXTogc2hvdyBjb2x1bW5zIHJlc2l6ZSBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgLy8gJ2NvbHVtbnNSZXNpemVCdXR0b246IGNvbHVtbnMtcmVzaXplLWJ1dHRvbicsXG5cbiAgLy8gLy8gY29sdW1ucy1ncm91cC1idXR0b24gW25vfHllc106IHNob3cgY29sdW1ucyBncm91cCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgLy8gJ2NvbHVtbnNHcm91cEJ1dHRvbjogY29sdW1ucy1ncm91cC1idXR0b24nLFxuXG4gIC8vIGV4cG9ydC1idXR0b24gW25vfHllc106IHNob3cgZXhwb3J0IGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnZXhwb3J0QnV0dG9uOiBleHBvcnQtYnV0dG9uJyxcblxuICAvLyBzaG93LWNvbmZpZ3VyYXRpb24tb3B0aW9uIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgY29uZmlndXJhdGlvbiBidXR0b24gaW4gaGVhZGVyLiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93Q29uZmlndXJhdGlvbk9wdGlvbjogc2hvdy1jb25maWd1cmF0aW9uLW9wdGlvbicsXG5cbiAgLy8gc2hvdy1idXR0b25zLXRleHQgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyB0ZXh0IG9mIGhlYWRlciBidXR0b25zLiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93QnV0dG9uc1RleHQ6IHNob3ctYnV0dG9ucy10ZXh0JyxcblxuICAvLyBzZWxlY3QtYWxsLWNoZWNrYm94IFt5ZXN8bm98dHJ1ZXxmYWxzZV06ICBzaG93IGluIHRoZSBtZW51IHRoZSBvcHRpb24gb2Ygc2VsZWN0aW9uIGNoZWNrIGJveGVzIC4gRGVmYXVsdDogbm8uXG4gICdzZWxlY3RBbGxDaGVja2JveDogc2VsZWN0LWFsbC1jaGVja2JveCcsXG5cbiAgLy8gcGFnaW5hdGlvbi1jb250cm9scyBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHBhZ2luYXRpb24gY29udHJvbHMuIERlZmF1bHQ6IHllcy5cbiAgJ3BhZ2luYXRpb25Db250cm9sczogcGFnaW5hdGlvbi1jb250cm9scycsXG5cbiAgLy8gZml4LWhlYWRlciBbeWVzfG5vfHRydWV8ZmFsc2VdOiBmaXhlZCBoZWFkZXIgYW5kIGZvb3RlciB3aGVuIHRoZSBjb250ZW50IGlzIGdyZWF0aGVyIHRoYW4gaXRzIG93biBoZWlnaHQuIERlZmF1bHQ6IHllcy5cbiAgJ2ZpeGVkSGVhZGVyOiBmaXhlZC1oZWFkZXInLFxuXG4gIC8vIHNob3ctdGl0bGUgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyB0aGUgdGFibGUgdGl0bGUuIERlZmF1bHQ6IG5vLlxuICAnc2hvd1RpdGxlOiBzaG93LXRpdGxlJyxcblxuICAvLyBlZGl0aW9uLW1vZGUgW25vbmUgfCBpbmxpbmUgfCBjbGljayB8IGRibGNsaWNrXTogZWRpdGlvbiBtb2RlLiBEZWZhdWx0IG5vbmVcbiAgJ2VkaXRpb25Nb2RlOiBlZGl0aW9uLW1vZGUnLFxuXG4gIC8vIHNlbGVjdGlvbi1tb2RlIFtub25lIHwgc2ltcGxlIHwgbXVsdGlwbGUgXTogc2VsZWN0aW9uIG1vZGUuIERlZmF1bHQgbXVsdGlwbGVcbiAgJ3NlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbi1tb2RlJyxcblxuICAnaG9yaXpvbnRhbFNjcm9sbDogaG9yaXpvbnRhbC1zY3JvbGwnLFxuXG4gICdzaG93UGFnaW5hdG9yRmlyc3RMYXN0QnV0dG9uczogc2hvdy1wYWdpbmF0b3ItZmlyc3QtbGFzdC1idXR0b25zJyxcblxuICAnYXV0b0FsaWduVGl0bGVzOiBhdXRvLWFsaWduLXRpdGxlcycsXG5cbiAgJ211bHRpcGxlU29ydDogbXVsdGlwbGUtc29ydCcsXG4gIC8vIHNlbGVjdC1hbGwtY2hlY2tib3gtdmlzaWJsZSBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHNlbGVjdGlvbiBjaGVjayBib3hlcy5EZWZhdWx0OiBuby5cbiAgJ3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZTogc2VsZWN0LWFsbC1jaGVja2JveC12aXNpYmxlJyxcblxuICAnb3JkZXJhYmxlJyxcblxuICAncmVzaXphYmxlJyxcblxuICAna2VlcFNlbGVjdGVkSXRlbXM6IGtlZXAtc2VsZWN0ZWQtaXRlbXMnLFxuXG4gIC8vIGV4cG9ydC1tb2RlIFsndmlzaWJsZSd8J2xvY2FsJ3wnYWxsJ106IHNldHMgdGhlIG1vZGUgdG8gZXhwb3J0IGRhdGEuIERlZmF1bHQ6ICd2aXNpYmxlJ1xuICAnZXhwb3J0TW9kZTogZXhwb3J0LW1vZGUnLFxuXG4gIC8vIGV4cG9ydFNlcnZpY2VUeXBlIFsgc3RyaW5nIF06IFRoZSBzZXJ2aWNlIHVzZWQgYnkgdGhlIHRhYmxlIGZvciBleHBvcnRpbmcgaXQncyBkYXRhLCBpdCBtdXN0IGltcGxlbWVudCAnSUV4cG9ydFNlcnZpY2UnIGludGVyZmFjZS4gRGVmYXVsdDogJ09udGltaXplRXhwb3J0U2VydmljZSdcbiAgJ2V4cG9ydFNlcnZpY2VUeXBlOiBleHBvcnQtc2VydmljZS10eXBlJyxcblxuICAvLyBhdXRvLWFkanVzdCBbdHJ1ZXxmYWxzZV06IEF1dG8gYWRqdXN0IGNvbHVtbiB3aWR0aCB0byBmaXQgaXRzIGNvbnRlbnQuIERlZmF1bHQ6IHRydWVcbiAgJ2F1dG9BZGp1c3Q6IGF1dG8tYWRqdXN0JyxcblxuICAvLyBzaG93LWZpbHRlci1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBmaWx0ZXIgbWVudSBvcHRpb24gaW4gdGhlIGhlYWRlciBtZW51LiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93RmlsdGVyT3B0aW9uOiBzaG93LWZpbHRlci1vcHRpb24nLFxuXG4gIC8vIHZpc2libGUtZXhwb3J0LWRpYWxvZy1idXR0b25zIFtzdHJpbmddOiB2aXNpYmxlIGJ1dHRvbnMgaW4gZXhwb3J0IGRpYWxvZywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdC9ubyBjb25maWd1cmVkOiBzaG93IGFsbC4gRW1wdHkgdmFsdWU6IGhpZGUgYWxsLlxuICAndmlzaWJsZUV4cG9ydERpYWxvZ0J1dHRvbnM6IHZpc2libGUtZXhwb3J0LWRpYWxvZy1idXR0b25zJyxcblxuICAvLyByb3ctY2xhc3MgW2Z1bmN0aW9uLCAocm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgfCBzdHJpbmdbXV06IGFkZHMgdGhlIGNsYXNzIG9yIGNsYXNzZXMgcmV0dXJuZWQgYnkgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHRvIHRoZSB0YWJsZSByb3dzLlxuICAncm93Q2xhc3M6IHJvdy1jbGFzcycsXG5cbiAgLy8gZmlsdGVyLWNvbHVtbi1hY3RpdmUtYnktZGVmYXVsdCBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IGljb24gZmlsdGVyIGJ5IGRlZmF1bHQgaW4gdGhlIHRhYmxlLiBEZWZhdWx0Onllc1xuICAnZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0OmZpbHRlci1jb2x1bW4tYWN0aXZlLWJ5LWRlZmF1bHQnLFxuXG4gIC8vIGdyb3VwZWQtY29sdW1ucyBbc3RyaW5nXTogZ3JvdXBlZCBjb2x1bW5zIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnZ3JvdXBlZENvbHVtbnM6IGdyb3VwZWQtY29sdW1ucycsXG5cbiAgLy8gZ3JvdXBhYmxlW2Jvb2xlYW5dOiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGNvbHVtbiBjYW4gYmUgZ3JvdXBhYmxlLiBCeSBkZWZhdWx0OiB0cnVlXG4gICdncm91cGFibGUnLFxuXG4gIC8vIGV4cGFuZC1ncm91cHMtc2FtZS1sZXZlbFtib29sZWFuXTogSW5kaWNhdGVzIGlmIGNsaWNrIGluIHJvdyBleHBhbmRzL2NvbGxhcHNlcyBhbGwgcm93cyBvbiBzYW1lIGxldmVsLiBCeSBkZWZhdWx0OiB0cnVlXG4gICdleHBhbmRHcm91cHNTYW1lTGV2ZWw6IGV4cGFuZC1ncm91cHMtc2FtZS1sZXZlbCcsXG5cbiAgLy8gY29sbGFwc2UtZ3JvdXBlZC1jb2x1bW5zIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IFdoZXRoZXIgY29sbGFwc2UgdGhlIGdyb3VwZWQgY29sdW1ucyBieSBkZWZhdWx0XG4gICdjb2xsYXBzZUdyb3VwZWRDb2x1bW5zOiBjb2xsYXBzZS1ncm91cGVkLWNvbHVtbnMnLFxuXG4gIC8vIHZpcnR1YWwtc2Nyb2xsIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IFdoZXRoZXIgZW5hYmxlZCBvciBub3QgdGhlIHZpcnR1YWwgc2Nyb2xsXG4gICd2aXJ0dWFsU2Nyb2xsOiB2aXJ0dWFsLXNjcm9sbCcsXG5cbiAgLy9jb250ZXh0LW1lbnUgW3llc3xub3x0cnVlfGZhbHNlXTogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIHRhYmxlIGNvbnRleHQgbWVudVxuICAnY29udGV4dE1lbnU6IGNvbnRleHQtbWVudScsXG5cbiAgLy8gc2hvdy1leHBhbmRhYmxlLWljb24tZnVuY3Rpb24gW2Z1bmN0aW9uXTogRXhwYW5kYWJsZSBmdW5jdGlvbiB0byBjaGVjayBpZiBleHBhbmRhYmxlIGhhcyBkYXRhIHRvIHNob3cgb3Igbm90IGljb25cbiAgJ3Nob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uOiBzaG93LWV4cGFuZGFibGUtaWNvbi1mdW5jdGlvbicsXG5cbiAgLy8gc2hvdy1yZXBvcnQtb24tZGVtYW5kLW9wdGlvbiBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHJlcG9ydCBvbiBkZW1hbmQgb3B0aW9uIGluIHRoZSB0YWJsZSBtZW51LiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93UmVwb3J0T25EZW1hbmRPcHRpb246IHNob3ctcmVwb3J0LW9uLWRlbWFuZC1vcHRpb24nLFxuXG4gIC8vIHNob3ctY2hhcnRzLW9uLWRlbWFuZC1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBjaGFydHMgb24gZGVtYW5kIG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dDaGFydHNPbkRlbWFuZE9wdGlvbjogc2hvdy1jaGFydHMtb24tZGVtYW5kLW9wdGlvbicsXG5cbiAgLy8gc2hvdy1yZXNldC13aWR0aC1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyByZXNldCB3aWR0aCBtZW51IG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dSZXNldFdpZHRoT3B0aW9uOiBzaG93LXJlc2V0LXdpZHRoLW9wdGlvbicsXG5cbiAgJ2Rpc2FibGVTZWxlY3Rpb25GdW5jdGlvbjogZGlzYWJsZS1zZWxlY3Rpb24tZnVuY3Rpb24nXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fVEFCTEUgPSBbXG4gICdvblJvd1NlbGVjdGVkJyxcbiAgJ29uUm93RGVzZWxlY3RlZCcsXG4gICdvblJvd0RlbGV0ZWQnXG5dO1xuXG5jb25zdCBzdGlja3lIZWFkZXJTZWxlY3RvciA9ICcubWF0LW1kYy1oZWFkZXItcm93IC5tYXQtbWRjLXRhYmxlLXN0aWNreSc7XG5jb25zdCBzdGlja3lGb290ZXJTZWxlY3RvciA9ICcubWF0LW1kYy1mb290ZXItcm93IC5tYXQtbWRjLXRhYmxlLXN0aWNreSc7XG5jb25zdCByb3dTZWxlY3RvciA9ICcubWF0LW1kYy1yb3cnO1xuY29uc3QgaGVhZGVyU2VsZWN0b3IgPSAnLm1hdC1tZGMtaGVhZGVyLXJvdyc7XG5jb25zdCBmb290ZXJTZWxlY3RvciA9ICcubWF0LW1kYy1oZWFkZXItcm93JztcblxudHlwZSBEaXNhYmxlU2VsZWN0aW9uRnVuY3Rpb24gPSAoaXRlbTogYW55KSA9PiBib29sZWFuO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIE9udGltaXplU2VydmljZVByb3ZpZGVyLFxuICAgIENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLFxuICAgIE9UYWJsZURhdGFTb3VyY2VTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogT19DT01QT05FTlRfU1RBVEVfU0VSVklDRSwgdXNlQ2xhc3M6IE9UYWJsZUNvbXBvbmVudFN0YXRlU2VydmljZSB9LFxuICAgIHsgcHJvdmlkZTogVklSVFVBTF9TQ1JPTExfU1RSQVRFR1ksIHVzZUNsYXNzOiBPVGFibGVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3kgfSxcbiAgICB7IHByb3ZpZGU6IE9UYWJsZUJhc2UsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE9UYWJsZUNvbXBvbmVudCkgfVxuICBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcgfSkpLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkJywgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJykpLFxuICAgIF0pXG4gIF0sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19UQUJMRSxcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fVEFCTEUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLXRhYmxlXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLm9udGltaXplLXRhYmxlXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLm8tdGFibGUtZml4ZWRdJzogJ2ZpeGVkSGVhZGVyJyxcbiAgICAnW2NsYXNzLm8tdGFibGUtZGlzYWJsZWRdJzogJyFlbmFibGVkJyxcbiAgICAnKGRvY3VtZW50OmNsaWNrKSc6ICdoYW5kbGVET01DbGljaygkZXZlbnQpJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQ8T1RhYmxlQ29tcG9uZW50U3RhdGVTZXJ2aWNlPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgcHVibGljIHN0YXRpYyBERUZBVUxUX0JBU0VfU0laRV9TUElOTkVSID0gMTAwO1xuICBwdWJsaWMgc3RhdGljIEZJUlNUX0xBU1RfQ0VMTF9QQURESU5HID0gMjQ7XG4gIHB1YmxpYyBzdGF0aWMgRVhQQU5ERURfUk9XX0NPTlRBSU5FUl9DTEFTUyA9ICdleHBhbmRlZC1yb3ctY29udGFpbmVyLSc7XG4gIHB1YmxpYyBzdGF0aWMgQVZBSUxBQkxFX0dST1VQSU5HX0NPTFVNTlNfUkVOREVSRVJTID0gWydjdXJyZW5jeScsICdpbnRlZ2VyJywgJ3JlYWwnXTtcblxuICBwdWJsaWMgREVUQUlMX01PREVfTk9ORSA9IENvZGVzLkRFVEFJTF9NT0RFX05PTkU7XG4gIHB1YmxpYyBFRElUX01PREVfTk9ORSA9IENvZGVzLkVESVRJT05fTU9ERV9OT05FO1xuXG4gIHByb3RlY3RlZCBzbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZTtcblxuICBwdWJsaWMgcGFnaW5hdG9yOiBPVGFibGVQYWdpbmF0b3I7XG5cbiAgQFZpZXdDaGlsZChPTWF0U29ydCkgc29ydDogT01hdFNvcnQ7XG5cbiAgcHVibGljIHZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIHB1YmxpYyBvVGFibGVHbG9iYWxDb25maWc6IE9UYWJsZUdsb2JhbENvbmZpZztcbiAgQFZpZXdDaGlsZCgndmlydHVhbFNjcm9sbFZpZXdQb3J0Jykgc2V0IGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCh2YWx1ZTogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgaWYgKHZhbHVlICE9IHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCA9IHZhbHVlO1xuICAgICAgdGhpcy51cGRhdGVIZWFkZXJBbmRGb290ZXJTdGlja3lQb3NpdGlvbnMoKTtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmlld3BvcnRTaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24gPSB0aGlzLmNoZWNrVmlld1BvcnRTdWJqZWN0LnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0RGF0YXNvdXJjZSgpO1xuICAgICAgdGhpcy5yZWdpc3RlclNvcnRMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG9ubHkgZm9yIGluc2lkZVRhYkJ1Z1dvcmthcm91bmRcbiAgcHJvdGVjdGVkIHRhYmxlSGVhZGVyczogQXJyYXk8T1RhYmxlSGVhZGVyQ29tcG9uZW50PiA9IFtdO1xuXG4gIEBWaWV3Q2hpbGQoJ3NwaW5uZXJDb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgc3Bpbm5lckNvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICBAQ29udGVudENoaWxkKE9UYWJsZVJvd0V4cGFuZGFibGVDb21wb25lbnQpXG4gIHRhYmxlUm93RXhwYW5kYWJsZTogT1RhYmxlUm93RXhwYW5kYWJsZUNvbXBvbmVudDtcblxuICBfZmlsdGVyQ29sdW1uczogQXJyYXk8T0ZpbHRlckNvbHVtbj47XG4gIHBvcnRhbEhvc3Q6IEFycmF5PERvbVBvcnRhbE91dGxldD4gPSBbXTtcbiAgb25EYXRhTG9hZGVkQ2VsbFJlbmRlcmVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IGRpYW1ldGVyU3Bpbm5lcigpIHtcbiAgICBjb25zdCBtaW5IZWlnaHQgPSBPVGFibGVDb21wb25lbnQuREVGQVVMVF9CQVNFX1NJWkVfU1BJTk5FUjtcbiAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICBpZiAodGhpcy5zcGlubmVyQ29udGFpbmVyICYmIHRoaXMuc3Bpbm5lckNvbnRhaW5lci5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBoZWlnaHQgPSB0aGlzLnNwaW5uZXJDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuICAgIGlmIChoZWlnaHQgPiAwICYmIGhlaWdodCA8PSAxMDApIHtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGhlaWdodCAtIChoZWlnaHQgKiAwLjEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pbkhlaWdodDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdGFibGVDb250ZXh0TWVudTogT0NvbnRleHRNZW51Q29tcG9uZW50O1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzZWxlY3RBbGxDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dDb25maWd1cmF0aW9uT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGNvbHVtbnNWaXNpYmlsaXR5QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dGaWx0ZXJPcHRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dDaGFydHNPbkRlbWFuZE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93QnV0dG9uc1RleHQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0OiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dSZXNldFdpZHRoT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBFeHBhbmRhYmxlIGlucHV0IGNhbGxiYWNrIGZ1bmN0aW9uXG4gIHNob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uOiAocm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBwcm90ZWN0ZWQgX29UYWJsZU9wdGlvbnM6IE9UYWJsZU9wdGlvbnM7XG5cbiAgZ2V0IG9UYWJsZU9wdGlvbnMoKTogT1RhYmxlT3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuX29UYWJsZU9wdGlvbnM7XG4gIH1cblxuICBzZXQgb1RhYmxlT3B0aW9ucyh2YWx1ZTogT1RhYmxlT3B0aW9ucykge1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCBxdWlja0ZpbHRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHZhbHVlID0gVXRpbC5wYXJzZUJvb2xlYW4oU3RyaW5nKHZhbHVlKSk7XG4gICAgdGhpcy5fcXVpY2tGaWx0ZXIgPSB2YWx1ZTtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmZpbHRlciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHF1aWNrRmlsdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9xdWlja0ZpbHRlcjtcbiAgfVxuXG4gIHNldCBmaWx0ZXJDYXNlU2Vuc2l0aXZlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZmlsdGVyQ2FzZVNlbnNpdGl2ZSA9IEJvb2xlYW5Db252ZXJ0ZXIodmFsdWUpO1xuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUgPSB0aGlzLl9maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXJDYXNlU2Vuc2l0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICB9XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGluc2VydEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICByZWZyZXNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGRlbGV0ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBmaXhlZEhlYWRlcjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93VGl0bGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZWRpdGlvbk1vZGU6IHN0cmluZyA9IENvZGVzLkVESVRJT05fTU9ERV9OT05FO1xuICBzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgPSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9NVUxUSVBMRTtcblxuICBwcm90ZWN0ZWQgX2hvcml6b250YWxTY3JvbGwgPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNldCBob3Jpem9udGFsU2Nyb2xsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faG9yaXpvbnRhbFNjcm9sbCA9IEJvb2xlYW5Db252ZXJ0ZXIodmFsdWUpO1xuICAgIHRoaXMucmVmcmVzaENvbHVtbnNXaWR0aEZyb21PcmlnaW5hbERlZmluaXRpb24oKTtcbiAgfVxuXG4gIGdldCBob3Jpem9udGFsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9ob3Jpem9udGFsU2Nyb2xsO1xuICB9XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dQYWdpbmF0b3JGaXJzdExhc3RCdXR0b25zOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGF1dG9BbGlnblRpdGxlczogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBtdWx0aXBsZVNvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgb3JkZXJhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHJlc2l6YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBhdXRvQWRqdXN0OiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGdyb3VwYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBleHBhbmRHcm91cHNTYW1lTGV2ZWw6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgY29sbGFwc2VHcm91cGVkQ29sdW1uczogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgdmlydHVhbFNjcm9sbDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBjb250ZXh0TWVudTogYm9vbGVhbiA9IHRydWU7XG4gIC8vIE1haW50YWluaW5nIHRoaXMgZ2V0dGVyIHRvIGFsbG93IGNvbXBvbmVudCBleHRlbnNpb25zIChhdm9pZGluZyBhIGJyZWFraW5nIGNoYW5nZSlcbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub2VuYWJsZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIF9zZWxlY3RBbGxDaGVja2JveFZpc2libGU6IGJvb2xlYW47XG4gIHNldCBzZWxlY3RBbGxDaGVja2JveFZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zZWxlY3RBbGxDaGVja2JveFZpc2libGUgPSBCb29sZWFuQ29udmVydGVyKHZhbHVlKTtcbiAgICBpZiAodGhpcy5zdGF0ZSkge1xuICAgICAgdGhpcy5fc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlID0gQm9vbGVhbkNvbnZlcnRlcih0aGlzLnN0YXRlLnNlbGVjdENvbHVtblZpc2libGUpO1xuICAgIH1cbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gdGhpcy5fc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNoZWNrYm94Q29sdW1uKCk7XG4gIH1cblxuICBnZXQgc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RBbGxDaGVja2JveFZpc2libGU7XG4gIH1cblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAga2VlcFNlbGVjdGVkSXRlbXM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHB1YmxpYyBleHBvcnRNb2RlOiBzdHJpbmcgPSBDb2Rlcy5FWFBPUlRfTU9ERV9WSVNJQkxFO1xuICBwdWJsaWMgZXhwb3J0U2VydmljZVR5cGU6IHN0cmluZztcbiAgcHVibGljIHZpc2libGVFeHBvcnREaWFsb2dCdXR0b25zOiBzdHJpbmc7XG4gIHB1YmxpYyBkYW9UYWJsZTogT1RhYmxlRGFvIHwgbnVsbDtcbiAgcHVibGljIGRhdGFTb3VyY2U6IE9UYWJsZURhdGFTb3VyY2UgfCBudWxsO1xuICBwdWJsaWMgdmlzaWJsZUNvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIHNlYXJjaGVhYmxlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGRlZmF1bHRWaXNpYmxlQ29sdW1uczogc3RyaW5nO1xuICBwdWJsaWMgZ3JvdXBlZENvbHVtbnM6IHN0cmluZztcblxuICBwdWJsaWMgc29ydENvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIGdyb3VwZWRDb2x1bW5UeXBlczogT0dyb3VwZWRDb2x1bW5UeXBlc1tdID0gW107XG4gIHB1YmxpYyByb3dDbGFzczogKHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLypwYXJzZWQgaW5wdXRzIHZhcmlhYmxlcyAqL1xuICBwcm90ZWN0ZWQgX3Zpc2libGVDb2xBcnJheTogc3RyaW5nW10gPSBbXTtcblxuICBnZXQgdmlzaWJsZUNvbEFycmF5KCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbEFycmF5O1xuICB9XG5cbiAgc2V0IHZpc2libGVDb2xBcnJheShhcmc6IGFueVtdKSB7XG4gICAgY29uc3QgcGVybWlzc2lvbnNCbG9ja2VkID0gdGhpcy5wZXJtaXNzaW9ucyA/IHRoaXMucGVybWlzc2lvbnMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlID09PSBmYWxzZSkubWFwKGNvbCA9PiBjb2wuYXR0cikgOiBbXTtcbiAgICBjb25zdCBwZXJtaXNzaW9uc0NoZWNrZWQgPSBhcmcuZmlsdGVyKHZhbHVlID0+IHBlcm1pc3Npb25zQmxvY2tlZC5pbmRleE9mKHZhbHVlKSA9PT0gLTEpO1xuICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheSA9IHBlcm1pc3Npb25zQ2hlY2tlZDtcbiAgICBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucykge1xuICAgICAgY29uc3QgY29udGFpbnNTZWxlY3Rpb25Db2wgPSB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluZGV4T2YoQ29kZXMuTkFNRV9DT0xVTU5fU0VMRUNUKSAhPT0gLTE7XG4gICAgICBjb25zdCBjb250YWluc0V4cGFuZGFibGVDb2wgPSB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluZGV4T2YoQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSkgIT09IC0xO1xuICAgICAgaWYgKGNvbnRhaW5zU2VsZWN0aW9uQ29sKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheS51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGFpbnNTZWxlY3Rpb25Db2wgJiYgY29udGFpbnNFeHBhbmRhYmxlQ29sKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheSA9IFt0aGlzLl92aXNpYmxlQ29sQXJyYXlbMF1dLmNvbmNhdChDb2Rlcy5OQU1FX0NPTFVNTl9FWFBBTkRBQkxFLCB0aGlzLl92aXNpYmxlQ29sQXJyYXkuc3BsaWNlKDEpKTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNvbnRhaW5zRXhwYW5kYWJsZUNvbCkge1xuICAgICAgICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheS51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zID0gdGhpcy5fdmlzaWJsZUNvbEFycmF5O1xuICAgICAgdGhpcy5ncm91cGluZ0hlYWRlcnNSb3dzID0gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5tYXAodmlzaWJsZUNvbCA9PiAnZ3JvdXBIZWFkZXItJyArIHZpc2libGVDb2wpO1xuICAgIH1cbiAgfVxuXG4gIHNvcnRDb2xBcnJheTogU1FMT3JkZXJbXSA9IFtdO1xuICAvKmVuZCBvZiBwYXJzZWQgaW5wdXRzIHZhcmlhYmxlcyAqL1xuXG4gIHByb3RlY3RlZCB0YWJHcm91cENvbnRhaW5lcjogTWF0VGFiR3JvdXA7XG4gIHByb3RlY3RlZCB0YWJDb250YWluZXI6IE1hdFRhYjtcbiAgdGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcm90ZWN0ZWQgcGVuZGluZ1F1ZXJ5OiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBwZW5kaW5nUXVlcnlGaWx0ZXIgPSB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIHNldFN0YXRpY0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGF2b2lkUXVlcnlDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBhc3luY0xvYWRDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBhc3luY0xvYWRTdWJzY3JpcHRpb25zOiBvYmplY3QgPSB7fTtcblxuICBwcm90ZWN0ZWQgcXVlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGNvbnRleHRNZW51U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCB2aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBjaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgZmluaXNoUXVlcnlTdWJzY3JpcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgb25Sb3dTZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvblJvd0Rlc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25Sb3dEZWxldGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uUmVpbml0aWFsaXplOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uQ29udGVudENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvbkZpbHRlckJ5Q29sdW1uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHVibGljIG9UYWJsZUZpbHRlckJ5Q29sdW1uRGF0YURpYWxvZ0NvbXBvbmVudDogT1RhYmxlRmlsdGVyQnlDb2x1bW5EYXRhRGlhbG9nQ29tcG9uZW50O1xuICBwdWJsaWMgb1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudDogT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudDtcblxuICBwcml2YXRlIHNob3dUb3RhbHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBzaG93VG90YWxzOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zaG93VG90YWxzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgcHJpdmF0ZSBsb2FkaW5nU29ydGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmdTb3J0aW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5sb2FkaW5nU29ydGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIHByaXZhdGUgbG9hZGluZ1Njcm9sbFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGxvYWRpbmdTY3JvbGw6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxvYWRpbmdTY3JvbGxTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHB1YmxpYyBzaG93TG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMubG9hZGluZy5waXBlKGRlYm91bmNlVGltZSgyMDApKSwgLy8gYXZvaWQgZGlzcGxheWluZyBsb2FkaW5nIHNwaW5uZXIgZm9yIGEgdmVyeSBzaG9ydCB0aW1lXG4gICAgdGhpcy5sb2FkaW5nU29ydGluZyxcbiAgICB0aGlzLmxvYWRpbmdTY3JvbGxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4gcHJldlswXSA9PT0gY3VyclswXSAmJiBwcmV2WzFdID09PSBjdXJyWzFdICYmIHByZXZbMl0gPT09IGN1cnJbMl0pLCAvLyBhdm9pZCBlbWl0dGluZyBzYW1lIHZhbHVlIG11bHRpcGxlIHRpbWVzXG4gICAgbWFwKChyZXM6IGJvb2xlYW5bXSkgPT4gcmVzLnNvbWUociA9PiByKSlcbiAgKTtcblxuICBwdWJsaWMgb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudDogT1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudDtcbiAgcHVibGljIHNob3dGaXJzdEluc2VydGFibGVSb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNob3dMYXN0SW5zZXJ0YWJsZVJvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZXhwYW5kYWJsZUl0ZW06IFNlbGVjdGlvbk1vZGVsPGFueT47XG5cbiAgcHJvdGVjdGVkIGNsaWNrVGltZXI7XG4gIHByb3RlY3RlZCBjbGlja0RlbGF5ID0gMjAwO1xuICBwcm90ZWN0ZWQgY2xpY2tQcmV2ZW50ID0gZmFsc2U7XG4gIHB1YmxpYyBlZGl0aW5nQ2VsbDogYW55O1xuICBwcm90ZWN0ZWQgZWRpdGluZ1JvdzogYW55O1xuXG4gIHNldCBjdXJyZW50UGFnZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX2N1cnJlbnRQYWdlID0gdmFsO1xuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdmFsO1xuICAgICAgaWYgKHRoaXMubWF0cGFnaW5hdG9yKSB7XG4gICAgICAgIHRoaXMubWF0cGFnaW5hdG9yLnBhZ2VJbmRleCA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY3VycmVudFBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2U7XG4gIH1cblxuICBwdWJsaWMgb1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQ6IE9UYWJsZVF1aWNrZmlsdGVyO1xuICBwcm90ZWN0ZWQgc29ydFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgb25SZW5kZXJlZERhdGFDaGFuZ2U6IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIHByZXZpb3VzUmVuZGVyZXJEYXRhO1xuXG4gIHF1aWNrRmlsdGVyQ2FsbGJhY2s6IFF1aWNrRmlsdGVyRnVuY3Rpb247XG4gIGRpc2FibGVTZWxlY3Rpb25GdW5jdGlvbjogRGlzYWJsZVNlbGVjdGlvbkZ1bmN0aW9uO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQm9keScpXG4gIHByb3RlY3RlZCB0YWJsZUJvZHlFbDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGFibGVIZWFkZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgdGFibGVIZWFkZXJFbDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGFibGVUb29sYmFyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHRhYmxlVG9vbGJhckVsOiBFbGVtZW50UmVmO1xuXG4gIGhvcml6b250YWxTY3JvbGxlZDogYm9vbGVhbjtcbiAgcHVibGljIG9uVXBkYXRlU2Nyb2xsZWRTdGF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyByb3dXaWR0aDtcblxuICBzdG9yZVBhZ2luYXRpb25TdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qIEluIHRoZSBjYXNlIHRoZSB0YWJsZSBoYXZlbnQgcGFnaW5hdGlvbkNvbnRyb2wgYW5kIHBhZ2VhYmxlLCB0aGUgdGFibGUgaGFzIHBhZ2luYXRpb24gdmlydHVhbCovXG4gIHBhZ2VTY3JvbGxWaXJ0dWFsID0gMTtcblxuICBwdWJsaWMgc3RhdGljIERFRkFVTFRfUk9XX0hFSUdIVCA9IDM2O1xuICBwcm90ZWN0ZWQgcGVybWlzc2lvbnM6IE9UYWJsZVBlcm1pc3Npb25zO1xuICBtYXRNZW51OiBNYXRNZW51O1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlTWVudScpXG4gIG9UYWJsZU1lbnU6IE9UYWJsZU1lbnU7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihPVGFibGVPcHRpb25Db21wb25lbnQpXG4gIHRhYmxlT3B0aW9uczogUXVlcnlMaXN0PE9UYWJsZU9wdGlvbkNvbXBvbmVudD47XG5cbiAgb1RhYmxlQnV0dG9uczogT1RhYmxlQnV0dG9ucztcblxuICBAQ29udGVudENoaWxkcmVuKE9UYWJsZUJ1dHRvbkNvbXBvbmVudClcbiAgdGFibGVCdXR0b25zOiBRdWVyeUxpc3Q8T1RhYmxlQnV0dG9uPjtcblxuICBAQ29udGVudENoaWxkKCdvLXRhYmxlLXF1aWNrZmlsdGVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcXVpY2tmaWx0ZXJDb250ZW50Q2hpbGQ6IE9UYWJsZVF1aWNrZmlsdGVyO1xuXG5cbiAgQFZpZXdDaGlsZCgnZXhwb3J0T3B0c1RlbXBsYXRlJylcbiAgZXhwb3J0T3B0c1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoT1RhYmxlQ29sdW1uU2VsZWN0QWxsRGlyZWN0aXZlKVxuICB0YWJsZUNvbHVtblNlbGVjdEFsbENvbnRlbnRDaGlsZDogT1RhYmxlQ29sdW1uU2VsZWN0QWxsRGlyZWN0aXZlO1xuXG5cblxuICBwdWJsaWMgZ3JvdXBlZENvbHVtbnNBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFtdKVxuICB1cGRhdGVTY3JvbGxlZFN0YXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhvcml6b250YWxTY3JvbGwpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBib2R5V2lkdGggPSB0aGlzLnRhYmxlQm9keUVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gdGhpcy50YWJsZUJvZHlFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICBjb25zdCBwcmV2aW91c1N0YXRlID0gdGhpcy5ob3Jpem9udGFsU2Nyb2xsZWQ7XG4gICAgICAgIHRoaXMuaG9yaXpvbnRhbFNjcm9sbGVkID0gc2Nyb2xsV2lkdGggPiBib2R5V2lkdGg7XG4gICAgICAgIGlmIChwcmV2aW91c1N0YXRlICE9PSB0aGlzLmhvcml6b250YWxTY3JvbGxlZCkge1xuICAgICAgICAgIHRoaXMub25VcGRhdGVTY3JvbGxlZFN0YXRlLmVtaXQodGhpcy5ob3Jpem9udGFsU2Nyb2xsZWQpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9pc0NvbHVtbkZpbHRlcnNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBnZXQgaXNDb2x1bW5GaWx0ZXJzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0NvbHVtbkZpbHRlcnNBY3RpdmU7XG4gIH1cblxuICBzZXQgaXNDb2x1bW5GaWx0ZXJzQWN0aXZlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzQ29sdW1uRmlsdGVyc0FjdGl2ZSA9IHZhbDtcbiAgfVxuXG4gIGdyb3VwaW5nSGVhZGVyc1Jvd3M6IHN0cmluZ1tdID0gW107XG5cbiAgcHVibGljIG9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudDogT1RhYmxlQ29sdW1uc0dyb3VwaW5nO1xuXG4gIEBDb250ZW50Q2hpbGQoT1RhYmxlQ29udGV4dE1lbnVDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGNvbnRleHRNZW51Q29udGVudENoaWxkOiBPVGFibGVDb250ZXh0TWVudUNvbXBvbmVudDtcblxuICBwcm90ZWN0ZWQgdHJpZ2dlclNlbGVjdGlvbkV2ZW50czogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE9Gb3JtQ29tcG9uZW50KSkgZm9ybTogT0Zvcm1Db21wb25lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSkgcHVibGljIHJlYWRvbmx5IHNjcm9sbFN0cmF0ZWd5OiBPVGFibGVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3lcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IsIGVsUmVmLCBmb3JtKTtcblxuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMgPSBuZXcgRGVmYXVsdE9UYWJsZU9wdGlvbnMoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhYkdyb3VwQ29udGFpbmVyID0gdGhpcy5pbmplY3Rvci5nZXQoTWF0VGFiR3JvdXApO1xuICAgICAgdGhpcy50YWJDb250YWluZXIgPSB0aGlzLmluamVjdG9yLmdldChNYXRUYWIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGR1ZSB0byBub3QgYWx3YXlzIGlzIGNvbnRhaW5lZCBvbiB0YWIuXG4gICAgfVxuXG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChTbmFja0JhclNlcnZpY2UpO1xuICAgIHRoaXMuZ2V0R2xvYmFsQ29uZmlnKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEdsb2JhbENvbmZpZygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vVGFibGVHbG9iYWxDb25maWcgPSB0aGlzLmluamVjdG9yLmdldChPX1RBQkxFX0dMT0JBTF9DT05GSUcpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlR2xvYmFsQ29uZmlnLmF1dG9BZGp1c3QpKSB7XG4gICAgICAgIHRoaXMuYXV0b0FkanVzdCA9IHRoaXMub1RhYmxlR2xvYmFsQ29uZmlnLmF1dG9BZGp1c3Q7XG4gICAgICB9O1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlR2xvYmFsQ29uZmlnLmF1dG9BbGlnblRpdGxlcykpIHtcbiAgICAgICAgdGhpcy5hdXRvQWxpZ25UaXRsZXMgPSB0aGlzLm9UYWJsZUdsb2JhbENvbmZpZy5hdXRvQWxpZ25UaXRsZXM7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSBpcyBvcHRpb25hbFxuICAgIH1cbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBPVGFibGVDb21wb25lbnRTdGF0ZUNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RhdGU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICBpZiAodGhpcy5vVGFibGVCdXR0b25zICYmIHRoaXMudGFibGVCdXR0b25zICYmIHRoaXMudGFibGVCdXR0b25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub1RhYmxlQnV0dG9ucy5yZWdpc3RlckJ1dHRvbnModGhpcy50YWJsZUJ1dHRvbnMudG9BcnJheSgpKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIuYWZ0ZXJWaWV3SW5pdCgpO1xuICAgIHRoaXMuaW5pdFRhYmxlQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMubWF0TWVudSA9IHRoaXMub1RhYmxlTWVudS5tYXRNZW51O1xuICAgICAgdGhpcy5vVGFibGVNZW51LnJlZ2lzdGVyT3B0aW9ucyh0aGlzLnRhYmxlT3B0aW9ucy50b0FycmF5KCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhYmxlUm93RXhwYW5kYWJsZSkge1xuICAgICAgdGhpcy5leHBhbmRhYmxlSXRlbSA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRoaXMudGFibGVSb3dFeHBhbmRhYmxlLm11bHRpcGxlLCBbXSk7XG4gICAgICB0aGlzLmNyZWF0ZUV4cGFuZGFibGVDb2x1bW4oKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgaWYgKHRoaXMudGFibGVDb2x1bW5TZWxlY3RBbGxDb250ZW50Q2hpbGQpIHtcbiAgICAgIC8vXG4gICAgICB0aGlzLnNldEN1c3RvbURlZmluaXRpb25JblNlbGVjdENvbHVtbih0aGlzLnRhYmxlQ29sdW1uU2VsZWN0QWxsQ29udGVudENoaWxkKVxuICAgIH1cbiAgfVxuXG4gIHNldEN1c3RvbURlZmluaXRpb25JblNlbGVjdENvbHVtbihkZWZpbml0aW9uOiBPVGFibGVDb2x1bW5TZWxlY3RBbGxEaXJlY3RpdmUpIHtcbiAgICBpZiAoZGVmaW5pdGlvbi50aXRsZSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udGl0bGUgPSBkZWZpbml0aW9uLnRpdGxlO1xuICAgIH1cbiAgICBpZiAoZGVmaW5pdGlvbi53aWR0aCkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ud2lkdGggPSBkZWZpbml0aW9uLndpZHRoO1xuICAgIH1cbiAgICBpZiAoZGVmaW5pdGlvbi5taW5XaWR0aCkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubWluV2lkdGggPSBkZWZpbml0aW9uLm1pbldpZHRoO1xuICAgIH1cbiAgICBpZiAoZGVmaW5pdGlvbi5tYXhXaWR0aCkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubWF4V2lkdGggPSBkZWZpbml0aW9uLm1heFdpZHRoO1xuICAgIH1cbiAgICBpZiAoZGVmaW5pdGlvbi5yZXNpemFibGUpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnJlc2l6YWJsZSA9IGRlZmluaXRpb24ucmVzaXphYmxlO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSk6IHZvaWQge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjaGFuZ2VzLmF1dG9BZGp1c3QpICYmIGNoYW5nZXMuYXV0b0FkanVzdC5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuYXV0b0FkanVzdC5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICB0aGlzLmF1dG9BZGp1c3QgPSBjaGFuZ2VzLmF1dG9BZGp1c3QuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUhlYWRlckFuZEZvb3RlclN0aWNreVBvc2l0aW9ucygpIHtcbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIGNvbnN0IHpvbmUgPSB0aGlzLmluamVjdG9yLmdldChOZ1pvbmUpO1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uID0gdGhpcy5zY3JvbGxTdHJhdGVneS5zdGlja3lDaGFuZ2UucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZml4ZWRIZWFkZXIgfHwgdGhpcy5oYXNJbnNlcnRhYmxlUm93KCkpXG4gICAgICApLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHN0aWNreUhlYWRlclNlbGVjdG9yKS5mb3JFYWNoKChlbDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGVsLnN0eWxlLnRvcCA9IC0geCArICdweCc7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc3RpY2t5Rm9vdGVyU2VsZWN0b3IpLmZvckVhY2goKGVsOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgZWwuc3R5bGUuYm90dG9tID0geCArICdweCc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUV4cGFuZGFibGVDb2x1bW4oKSB7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5leHBhbmRhYmxlQ29sdW1uID0gbmV3IE9Db2x1bW4oKTtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmV4cGFuZGFibGVDb2x1bW4udmlzaWJsZSA9IHRoaXMudGFibGVSb3dFeHBhbmRhYmxlICYmIHRoaXMudGFibGVSb3dFeHBhbmRhYmxlLmV4cGFuZGFibGVDb2x1bW5WaXNpYmxlO1xuICAgIHRoaXMudXBkYXRlU3RhdGVFeHBhbmRlZENvbHVtbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy9kZXRhY2ggYWxsIHBvcnRhIGhvc3QgY3JlYXRlZFxuICAgIGlmICh0aGlzLnBvcnRhbEhvc3QpIHtcbiAgICAgIHRoaXMucG9ydGFsSG9zdC5mb3JFYWNoKHggPT4geC5kZXRhY2goKSk7XG4gICAgfVxuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgZ2V0U3VmZml4Q29sdW1uSW5zZXJ0YWJsZSgpIHtcbiAgICByZXR1cm4gQ29kZXMuU1VGRklYX0NPTFVNTl9JTlNFUlRBQkxFO1xuICB9XG5cbiAgZ2V0QWN0aW9uc1Blcm1pc3Npb25zKCk6IE9QZXJtaXNzaW9uc1tdIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucyA/ICh0aGlzLnBlcm1pc3Npb25zLmFjdGlvbnMgfHwgW10pIDogW107XG4gIH1cblxuICBnZXRNZW51UGVybWlzc2lvbnMoKTogT1RhYmxlTWVudVBlcm1pc3Npb25zIHtcbiAgICBjb25zdCByZXN1bHQ6IE9UYWJsZU1lbnVQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMgPyB0aGlzLnBlcm1pc3Npb25zLm1lbnUgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdCA6IHtcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgaXRlbXM6IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldE9Db2x1bW5QZXJtaXNzaW9ucyhhdHRyOiBzdHJpbmcpOiBPUGVybWlzc2lvbnMge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLnBlcm1pc3Npb25zID8gKHRoaXMucGVybWlzc2lvbnMuY29sdW1ucyB8fCBbXSkgOiBbXTtcbiAgICByZXR1cm4gY29sdW1ucy5maW5kKGNvbXAgPT4gY29tcC5hdHRyID09PSBhdHRyKSB8fCB7IGF0dHI6IGF0dHIsIGVuYWJsZWQ6IHRydWUsIHZpc2libGU6IHRydWUgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBY3Rpb25QZXJtaXNzaW9ucyhhdHRyOiBzdHJpbmcpOiBPUGVybWlzc2lvbnMge1xuICAgIGNvbnN0IGFjdGlvbnNQZXJtID0gdGhpcy5wZXJtaXNzaW9ucyA/ICh0aGlzLnBlcm1pc3Npb25zLmFjdGlvbnMgfHwgW10pIDogW107XG4gICAgY29uc3QgcGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IGFjdGlvbnNQZXJtLmZpbmQocCA9PiBwLmF0dHIgPT09IGF0dHIpO1xuICAgIHJldHVybiBwZXJtaXNzaW9ucyB8fCB7XG4gICAgICBhdHRyOiBhdHRyLFxuICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oYXR0cjogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aW9uc1Blcm0gPSB0aGlzLnBlcm1pc3Npb25zID8gKHRoaXMucGVybWlzc2lvbnMuYWN0aW9ucyB8fCBbXSkgOiBbXTtcbiAgICBjb25zdCBwZXJtaXNzaW9uczogT1Blcm1pc3Npb25zID0gYWN0aW9uc1Blcm0uZmluZChwID0+IHAuYXR0ciA9PT0gYXR0cik7XG4gICAgY29uc3QgZW5hYmxlZFBlcm1pc2lvbiA9IFBlcm1pc3Npb25zVXRpbHMuY2hlY2tFbmFibGVkUGVybWlzc2lvbihwZXJtaXNzaW9ucyk7XG4gICAgaWYgKCFlbmFibGVkUGVybWlzaW9uKSB7XG4gICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUEVSTUlTU0lPTicpO1xuICAgIH1cbiAgICByZXR1cm4gZW5hYmxlZFBlcm1pc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2Qgd2hhdCBpbml0aWFsaXplIHZhcnMgYW5kIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGluaXRpYWxpemUoKTogYW55IHtcbiAgICBzdXBlci5pbml0aWFsaXplKCk7XG5cbiAgICB0aGlzLl9vVGFibGVPcHRpb25zID0gbmV3IERlZmF1bHRPVGFibGVPcHRpb25zKCk7XG4gICAgaWYgKHRoaXMudGFiR3JvdXBDb250YWluZXIgJiYgdGhpcy50YWJDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJUYWJMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgcGFyYW1zIG9mIHRoZSB0YWJsZVxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhcmFtcygpO1xuXG4gICAgdGhpcy5pbml0aWFsaXplRGFvKCk7XG5cbiAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0VGFibGVQZXJtaXNzaW9ucyh0aGlzLm9hdHRyLCB0aGlzLmFjdFJvdXRlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0aWFsaXplRGFvKCkge1xuICAgIC8vIENvbmZpZ3VyZSBkYW8gbWV0aG9kc1xuICAgIGNvbnN0IHF1ZXJ5TWV0aG9kTmFtZSA9IHRoaXMucGFnZWFibGUgPyB0aGlzLnBhZ2luYXRlZFF1ZXJ5TWV0aG9kIDogdGhpcy5xdWVyeU1ldGhvZDtcbiAgICBjb25zdCBtZXRob2RzID0ge1xuICAgICAgcXVlcnk6IHF1ZXJ5TWV0aG9kTmFtZSxcbiAgICAgIHVwZGF0ZTogdGhpcy51cGRhdGVNZXRob2QsXG4gICAgICBkZWxldGU6IHRoaXMuZGVsZXRlTWV0aG9kLFxuICAgICAgaW5zZXJ0OiB0aGlzLmluc2VydE1ldGhvZFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zdGF0aWNEYXRhKSB7XG4gICAgICB0aGlzLnF1ZXJ5T25CaW5kID0gZmFsc2U7XG4gICAgICB0aGlzLnF1ZXJ5T25Jbml0ID0gZmFsc2U7XG4gICAgICB0aGlzLmRhb1RhYmxlID0gbmV3IE9UYWJsZURhbyh1bmRlZmluZWQsIHRoaXMuZW50aXR5LCBtZXRob2RzKTtcbiAgICAgIHRoaXMuc2V0RGF0YUFycmF5KHRoaXMuc3RhdGljRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlndXJlU2VydmljZSgpO1xuICAgICAgdGhpcy5kYW9UYWJsZSA9IG5ldyBPVGFibGVEYW8odGhpcy5kYXRhU2VydmljZSwgdGhpcy5lbnRpdHksIG1ldGhvZHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyByZWluaXRpYWxpemUgdGFibGUgYWRkaW5nIG9wdGlvbnNcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHJlaW5pdGlhbGl6ZShvcHRpb25zOiBPVGFibGVJbml0aWFsaXphdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgY29uc3QgY2xvbmVkT3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ2VudGl0eScpKSB7XG4gICAgICAgIHRoaXMuZW50aXR5ID0gY2xvbmVkT3B0cy5lbnRpdHk7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnc2VydmljZScpKSB7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IGNsb25lZE9wdHMuc2VydmljZTtcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdjb2x1bW5zJykpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gY2xvbmVkT3B0cy5jb2x1bW5zO1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVDb2x1bW5zJykpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IGNsb25lZE9wdHMudmlzaWJsZUNvbHVtbnM7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZpc2libGVDb2x1bW5zJykpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0VmlzaWJsZUNvbHVtbnMgPSBjbG9uZWRPcHRzLmRlZmF1bHRWaXNpYmxlQ29sdW1ucztcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdrZXlzJykpIHtcbiAgICAgICAgdGhpcy5rZXlzID0gY2xvbmVkT3B0cy5rZXlzO1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ3NvcnRDb2x1bW5zJykpIHtcbiAgICAgICAgdGhpcy5zb3J0Q29sdW1ucyA9IGNsb25lZE9wdHMuc29ydENvbHVtbnM7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgncGFyZW50S2V5cycpKSB7XG4gICAgICAgIHRoaXMucGFyZW50S2V5cyA9IGNsb25lZE9wdHMucGFyZW50S2V5cztcbiAgICAgIH1cblxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ2ZpbHRlckNvbHVtbnMnKSkge1xuICAgICAgICBpZiAoIXRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgICAgIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCA9IG5ldyBPVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KHRoaXMuaW5qZWN0b3IsIHRoaXMpO1xuICAgICAgICAgIHRoaXMub1RhYmxlTWVudS5vblZpc2libGVGaWx0ZXJPcHRpb25DaGFuZ2UubmV4dCh0aGlzLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdCk7XG4gICAgICAgICAgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LmNvbHVtbnMgPSBjbG9uZWRPcHRzLmZpbHRlckNvbHVtbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LmNvbHVtbnMgPSB0aGlzLnNlYXJjaGVhYmxlQ29sdW1ucy5qb2luKFwiO1wiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIHRoaXMuc3RhdGUucmVzZXQodGhpcy5wYWdlYWJsZSk7XG4gICAgdGhpcy5pbml0VGFibGVBZnRlclZpZXdJbml0KCk7XG4gICAgdGhpcy5vblJlaW5pdGlhbGl6ZS5lbWl0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRUYWJsZUFmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5wYXJzZVZpc2libGVDb2x1bW5zKCk7XG4gICAgdGhpcy5wYXJzZVNlYXJjaGVhYmxlQ29sdW1ucygpO1xuICAgIHRoaXMuc2V0RGF0YXNvdXJjZSgpO1xuICAgIHRoaXMucGFyc2VHcm91cGVkQ29sdW1ucygpO1xuICAgIHRoaXMucGFyc2VHcm91cGVkQ29sdW1uVHlwZXMoKTtcbiAgICB0aGlzLnBhcnNlU29ydENvbHVtbnMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyU29ydExpc3RlbmVyKCk7XG4gICAgdGhpcy5zZXRGaWx0ZXJzQ29uZmlndXJhdGlvbigpO1xuICAgIHRoaXMuYWRkRGVmYXVsdFJvd0J1dHRvbnMoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQpKSB7XG4gICAgICB0aGlzLnNldEdyb3VwQ29sdW1ucyh0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudC5jb2x1bW5zQXJyYXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVyeU9uSW5pdCkge1xuICAgICAgdGhpcy5xdWVyeURhdGEoKTtcbiAgICB9XG4gIH1cbiAgcGFyc2VTZWFyY2hlYWJsZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5zZWFyY2hlYWJsZUNvbHVtbnMgPSB0aGlzLnZpc2libGVDb2xBcnJheS5maWx0ZXIoY29sID0+IHtcbiAgICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4oY29sKTtcbiAgICAgIHJldHVybiBvQ29sICYmIG9Db2wuc2VhcmNoYWJsZTtcbiAgICB9KVxuXG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgaWYgKHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNvcnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub25SZW5kZXJlZERhdGFDaGFuZ2UpIHtcbiAgICAgIHRoaXMub25SZW5kZXJlZERhdGFDaGFuZ2UudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNjcm9sbFN0cmF0ZWd5KSB7XG4gICAgICB0aGlzLnNjcm9sbFN0cmF0ZWd5LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnMpLmZvckVhY2goaWR4ID0+IHtcbiAgICAgIGlmICh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbaWR4XSkge1xuICAgICAgICB0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbaWR4XS51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB1cGRhdGUgc3RvcmUgbG9jYWxzdG9yYWdlLCBjYWxsIG9mIHRoZSBJTG9jYWxTdG9yYWdlXG4gICAqL1xuICBnZXREYXRhVG9TdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0RGF0YVRvU3RvcmUoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyUXVpY2tGaWx0ZXIoYXJnOiBhbnkpIHtcbiAgICBjb25zdCBxdWlja0ZpbHRlciA9IChhcmcgYXMgT1RhYmxlUXVpY2tmaWx0ZXIpO1xuICAgIC8vIGZvcmNpbmcgcXVpY2tGaWx0ZXJDb21wb25lbnQgdG8gYmUgdW5kZWZpbmVkLCB0YWJsZSB1c2VzIG9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50ID0gcXVpY2tGaWx0ZXI7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQpKSB7XG4gICAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50LnNldFZhbHVlKHRoaXMuc3RhdGUucXVpY2tGaWx0ZXJWYWx1ZSwgZmFsc2UpO1xuICAgICAgdGhpcy5xdWlja0ZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQub25DaGFuZ2Uuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgIHRoaXMub25TZWFyY2guZW1pdCh2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJQYWdpbmF0aW9uKHZhbHVlOiBPVGFibGVQYWdpbmF0b3IpIHtcbiAgICB0aGlzLnBhZ2luYXRpb25Db250cm9scyA9IHRydWU7XG4gICAgdGhpcy5wYWdpbmF0b3IgPSB2YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyQ29udGV4dE1lbnUodmFsdWU6IE9Db250ZXh0TWVudUNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRoaXMudGFibGVDb250ZXh0TWVudSA9IHZhbHVlO1xuICAgIHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlQ29udGV4dE1lbnUub25TaG93LnN1YnNjcmliZSgocGFyYW1zOiBJT0NvbnRleHRNZW51Q29udGV4dCkgPT4ge1xuICAgICAgcGFyYW1zLmNsYXNzID0gJ28tdGFibGUtY29udGV4dC1tZW51ICcgKyB0aGlzLnJvd0hlaWdodDtcbiAgICAgIGlmIChwYXJhbXMuZGF0YSAmJiAhdGhpcy5pc1Jvd1NlbGVjdGVkKHBhcmFtcy5kYXRhLnJvd1ZhbHVlKSkge1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3cocGFyYW1zLmRhdGEucm93VmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVnaXN0ZXJEZWZhdWx0Q29sdW1uKGNvbHVtbjogc3RyaW5nKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4pKSkge1xuICAgICAgLy8gYSBkZWZhdWx0IGNvbHVtbiBkZWZpbml0aW9uIHRyeWluZyB0byByZXBsYWNlIGFuIGFscmVhZHkgZXhpc3RpbmcgZGVmaW5pdGlvblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2xEZWY6IE9Db2x1bW4gPSB0aGlzLmNyZWF0ZU9Db2x1bW4oY29sdW1uLCB0aGlzKTtcbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIGFsbCBjb2x1bW5zIGFuZCBwcm9wZXJ0aWVzIGluIHZhciBjb2x1bW5zQXJyYXlcbiAgICogQHBhcmFtIGNvbHVtblxuICAgKi9cbiAgcmVnaXN0ZXJDb2x1bW4oY29sdW1uOiBPVGFibGVDb2x1bW5Db21wb25lbnQgfCBPVGFibGVDb2x1bW5DYWxjdWxhdGVkQ29tcG9uZW50IHwgYW55KSB7XG4gICAgY29uc3QgY29sdW1uQXR0ciA9ICh0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJykgPyBjb2x1bW4gOiBjb2x1bW4uYXR0cjtcbiAgICBjb25zdCBjb2x1bW5QZXJtaXNzaW9uczogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRPQ29sdW1uUGVybWlzc2lvbnMoY29sdW1uQXR0cik7XG4gICAgaWYgKCFjb2x1bW5QZXJtaXNzaW9ucy52aXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRGVmYXVsdENvbHVtbihjb2x1bW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbkRlZiA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbkRlZikgJiYgVXRpbC5pc0RlZmluZWQoY29sdW1uRGVmLmRlZmluaXRpb24pKSB7XG4gICAgICAvLyBhIG8tdGFibGUtY29sdW1uIGRlZmluaXRpb24gdHJ5aW5nIHRvIHJlcGxhY2UgYW4gYWxyZWFkeSBleGlzdGluZyBvLXRhYmxlLWNvbHVtbiBkZWZpbml0aW9uXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29sRGVmOiBPQ29sdW1uID0gdGhpcy5jcmVhdGVPQ29sdW1uKGNvbHVtbi5hdHRyLCB0aGlzLCBjb2x1bW4pO1xuICAgIGxldCBjb2x1bW5XaWR0aCA9IHRoaXMuZ2V0Q29sdW1uV2lkdGhGcm9tU3RhdGUoY29sRGVmKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uV2lkdGgpKSB7XG4gICAgICBjb2xEZWYud2lkdGggPSBjb2x1bW5XaWR0aDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbiAmJiAoY29sdW1uLmFzeW5jTG9hZCB8fCBjb2x1bW4udHlwZSA9PT0gJ2FjdGlvbicpKSB7XG4gICAgICB0aGlzLmF2b2lkUXVlcnlDb2x1bW5zLnB1c2goY29sdW1uLmF0dHIpO1xuICAgICAgaWYgKGNvbHVtbi5hc3luY0xvYWQpIHtcbiAgICAgICAgdGhpcy5hc3luY0xvYWRDb2x1bW5zLnB1c2goY29sdW1uLmF0dHIpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWY6IE9Db2x1bW4pIHtcbiAgICBjb2xEZWYudmlzaWJsZSA9ICh0aGlzLl92aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihjb2xEZWYuYXR0cikgIT09IC0xKTtcbiAgICAvLyBGaW5kIGNvbHVtbiBkZWZpbml0aW9uIGJ5IG5hbWVcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RpbmcgPSB0aGlzLmdldE9Db2x1bW4oY29sRGVmLmF0dHIpO1xuICAgIGlmIChhbHJlYWR5RXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcmVwbGFjaW5nSW5kZXggPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuaW5kZXhPZihhbHJlYWR5RXhpc3RpbmcpO1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zW3JlcGxhY2luZ0luZGV4XSA9IGNvbERlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnB1c2goY29sRGVmKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDb2x1bW5zT3JkZXIoKTtcbiAgICB0aGlzLnJlZnJlc2hFZGl0aW9uTW9kZVdhcm4oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWZyZXNoRWRpdGlvbk1vZGVXYXJuKCkge1xuICAgIGlmICh0aGlzLmVkaXRpb25Nb2RlICE9PSBDb2Rlcy5FRElUSU9OX01PREVfTk9ORSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlZGl0YWJsZUNvbHVtbnMgPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiB7XG4gICAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29sLmVkaXRvcik7XG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoZWRpdGFibGVDb2x1bW5zLmxlbmd0aCA+IDAgJiYgIXRoaXMuaGFzSW5zZXJ0YWJsZVJvdygpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVXNpbmcgYSBjb2x1bW4gd2l0aCBhIGVkaXRvciBidXQgdGhlcmUgaXMgbm8gZWRpdGlvbi1tb2RlIGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcmVnaXN0ZXJDb2x1bW5BZ2dyZWdhdGUoY29sdW1uOiBPQ29sdW1uQWdncmVnYXRlKSB7XG4gICAgdGhpcy5zaG93VG90YWxzU3ViamVjdC5uZXh0KHRydWUpO1xuICAgIGNvbnN0IGFscmVhZHlFeGlzdGluZyA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgaWYgKGFscmVhZHlFeGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByZXBsYWNpbmdJbmRleCA9IHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5pbmRleE9mKGFscmVhZHlFeGlzdGluZyk7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnNbcmVwbGFjaW5nSW5kZXhdLmFnZ3JlZ2F0ZSA9IGNvbHVtbjtcbiAgICB9XG4gIH1cblxuICByZWdpc3RlclRhYmxlSGVhZGVycyh0YWJsZUhlYWRlcjogT1RhYmxlSGVhZGVyQ29tcG9uZW50KSB7XG4gICAgaWYgKHRoaXMudGFibGVIZWFkZXJzLmZpbmRJbmRleChoZWFkZXIgPT4gaGVhZGVyLmNvbHVtbi5hdHRyID09PSB0YWJsZUhlYWRlci5jb2x1bW4uYXR0cikgPT09IC0xKSB7XG4gICAgICB0aGlzLnRhYmxlSGVhZGVycy5wdXNoKHRhYmxlSGVhZGVyKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZVZpc2libGVDb2x1bW5zKGRlZmF1bHRDb25maWd1cmF0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5jb2x1bW5zRGlzcGxheSkge1xuICAgICAgLy8gZmlsdGVyaW5nIGNvbHVtbnMgdGhhdCBtaWdodCBiZSBpbiBzdGF0ZSBzdG9yYWdlIGJ1dCBub3QgaW4gdGhlIGFjdHVhbCB0YWJsZSBkZWZpbml0aW9uXG4gICAgICBsZXQgc3RhdGVDb2xzOiBPQ29sdW1uRGlzcGxheVtdID0gW107XG4gICAgICB0aGlzLnN0YXRlLmNvbHVtbnNEaXNwbGF5LmZvckVhY2goKG9Db2wsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVmlzaWJsZUNvbEluQ29sdW1ucyA9IHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuYXR0ciA9PT0gb0NvbC5hdHRyKSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChpc1Zpc2libGVDb2xJbkNvbHVtbnMpIHtcbiAgICAgICAgICBzdGF0ZUNvbHMucHVzaChvQ29sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBsb2FkIHRoZSBjb2x1bW4gJyArIG9Db2wuYXR0ciArICcgZnJvbSB0aGUgbG9jYWxzdG9yYWdlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGRlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN0YXRlQ29scyA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZUNvbHMgPSB0aGlzLmNoZWNrQ2hhbmdlc1Zpc2libGVDb2x1bW1uc0luSW5pdGlhbENvbmZpZ3VyYXRpb24oc3RhdGVDb2xzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnNvcnQoKGE6IE9Db2x1bW4sIGI6IE9Db2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhBID0gc3RhdGVDb2xzLmZpbmRJbmRleChjb2wgPT4gY29sLmF0dHIgPT09IGEuYXR0cik7XG4gICAgICAgIGNvbnN0IGluZGV4QiA9IHN0YXRlQ29scy5maW5kSW5kZXgoY29sID0+IGNvbC5hdHRyID09PSBiLmF0dHIpO1xuICAgICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnZpc2libGVDb2xBcnJheSA9IHN0YXRlQ29scy5maWx0ZXIoaXRlbSA9PiBpdGVtLnZpc2libGUpLm1hcChpdGVtID0+IGl0ZW0uYXR0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlzaWJsZUNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMuZGVmYXVsdFZpc2libGVDb2x1bW5zID8gdGhpcy5kZWZhdWx0VmlzaWJsZUNvbHVtbnMgOiB0aGlzLnZpc2libGVDb2x1bW5zLCB0cnVlKTtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5zb3J0KChhOiBPQ29sdW1uLCBiOiBPQ29sdW1uKSA9PiB0aGlzLnZpc2libGVDb2xBcnJheS5pbmRleE9mKGEuYXR0cikgLSB0aGlzLnZpc2libGVDb2xBcnJheS5pbmRleE9mKGIuYXR0cikpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQ2hhbmdlc1Zpc2libGVDb2x1bW1uc0luSW5pdGlhbENvbmZpZ3VyYXRpb24oc3RhdGVDb2xzOiBPQ29sdW1uRGlzcGxheVtdKTogT0NvbHVtbkRpc3BsYXlbXSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5ID1cbiAgICAgICAgdGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5jb2x1bW5zRGlzcGxheS5maWx0ZXIoeCA9PiB4LnZpc2libGUpLm1hcCh4ID0+IHguYXR0cik7XG5cbiAgICAgIGNvbnN0IHZpc2libGVDb2xBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLnZpc2libGVDb2x1bW5zLCB0cnVlKTtcblxuICAgICAgLy8gRmluZCB2YWx1ZXMgaW4gdmlzaWJsZS1jb2x1bW5zIHRoYXQgdGhleSBhcmVudCBpbiBvcmlnaW5hbC12aXNpYmxlLWNvbHVtbnMgaW4gbG9jYWxzdG9yYWdlXG4gICAgICAvLyBpbiB0aGlzIGNhc2UgeW91IGhhdmUgdG8gYWRkIHRoaXMgY29sdW1uIHRvIHRoaXMudmlzaWJsZUNvbEFycmF5XG4gICAgICBjb25zdCBjb2xUb0FkZEluVmlzaWJsZUNvbCA9IFV0aWwuZGlmZmVyZW5jZUFycmF5cyh2aXNpYmxlQ29sQXJyYXksIG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5KTtcbiAgICAgIGNvbFRvQWRkSW5WaXNpYmxlQ29sLmZvckVhY2goKGNvbEFkZCkgPT4ge1xuICAgICAgICBsZXQgaW5kZXhDb2wgPSBzdGF0ZUNvbHMuZmluZEluZGV4KGNvbCA9PiBjb2wuYXR0ciA9PT0gY29sQWRkKTtcbiAgICAgICAgaWYgKGluZGV4Q29sID4gLTEpIHtcbiAgICAgICAgICBzdGF0ZUNvbHNbaW5kZXhDb2xdLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlQ29scy5zb3J0KChhOiBPQ29sdW1uLCBiOiBPQ29sdW1uKSA9PiB2aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihhLmF0dHIpIC0gdmlzaWJsZUNvbEFycmF5LmluZGV4T2YoYi5hdHRyKSk7XG4gICAgICB9KTtcblxuXG4gICAgICAvLyBGaW5kIHZhbHVlcyBpbiBvcmlnaW5hbC12aXNpYmxlLWNvbHVtbnMgaW4gbG9jYWxzdG9yYWdlIHRoYXQgdGhleSBhcmVudCBpbiB0aGlzLnZpc2libGVDb2xBcnJheVxuICAgICAgLy8gaW4gdGhpcyBjYXNlIHlvdSBoYXZlIHRvIGRlbGV0ZSB0aGlzIGNvbHVtbiB0byB0aGlzLnZpc2libGVDb2xBcnJheVxuICAgICAgY29uc3QgY29sVG9EZWxldGVJblZpc2libGVDb2wgPSBVdGlsLmRpZmZlcmVuY2VBcnJheXMob3JpZ2luYWxWaXNpYmxlQ29sQXJyYXksIHZpc2libGVDb2xBcnJheSk7XG4gICAgICBpZiAoY29sVG9EZWxldGVJblZpc2libGVDb2wubGVuZ3RoID4gMCkge1xuICAgICAgICBzdGF0ZUNvbHMgPSBzdGF0ZUNvbHMuZmlsdGVyKGNvbCA9PiBjb2xUb0RlbGV0ZUluVmlzaWJsZUNvbC5pbmRleE9mKGNvbC5hdHRyKSA9PT0gLTEpO1xuICAgICAgfVxuXG4gICAgICAvL0lmIHRoZSBjb2x1bW5zIGluIG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5IGhhcyBjaGFuZ2VkIHRoZSBzb3J0aW5nXG4gICAgICBjb25zdCBjaGFuZ2VTb3J0VmlzaWJsZUNvbHVtbnMgPSBKU09OLnN0cmluZ2lmeSh2aXNpYmxlQ29sQXJyYXkpICE9PSBKU09OLnN0cmluZ2lmeShvcmlnaW5hbFZpc2libGVDb2xBcnJheSk7XG4gICAgICBpZiAoY2hhbmdlU29ydFZpc2libGVDb2x1bW5zICYmIHZpc2libGVDb2xBcnJheS5sZW5ndGggPT09IG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5Lmxlbmd0aCkge1xuICAgICAgICB2aXNpYmxlQ29sQXJyYXkuZm9yRWFjaCgoY29sLCB0b0luZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbUluZGV4VG9DaGFuZ2UgPSBzdGF0ZUNvbHMuZmluZEluZGV4KHN0YXRlQ29sID0+IHN0YXRlQ29sLmF0dHIgPT09IGNvbCk7XG4gICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHN0YXRlQ29scywgZnJvbUluZGV4VG9DaGFuZ2UsIHRvSW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhdGVDb2xzO1xuICB9XG5cbiAgcGFyc2VTb3J0Q29sdW1ucygpIHtcbiAgICBjb25zdCBzb3J0Q29sdW1uc1BhcmFtID0gdGhpcy5zdGF0ZS5zb3J0Q29sdW1ucyB8fCB0aGlzLnNvcnRDb2x1bW5zO1xuICAgIHRoaXMuc29ydENvbEFycmF5ID0gU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnMoc29ydENvbHVtbnNQYXJhbSk7XG5cbiAgICAvLyBjaGVja2luZyB0aGUgb3JpZ2luYWwgc29ydCBjb2x1bW5zIHdpdGggdGhlIHNvcnQgY29sdW1ucyBpbiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaW4gbG9jYWwgc3RvcmFnZVxuICAgIGlmICh0aGlzLnN0YXRlLnNvcnRDb2x1bW5zICYmIHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc29ydENvbHVtbnMpIHtcblxuICAgICAgY29uc3QgaW5pdGlhbENvbmZpZ1NvcnRDb2x1bW5zQXJyYXkgPSBTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyh0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnNvcnRDb2x1bW5zKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU29ydENvbHVtbnNBcnJheSA9IFNlcnZpY2VVdGlscy5wYXJzZVNvcnRDb2x1bW5zKHRoaXMuc29ydENvbHVtbnMpO1xuICAgICAgLy8gRmluZCB2YWx1ZXMgaW4gdmlzaWJsZS1jb2x1bW5zIHRoYXQgdGhleSBhcmVudCBpbiBvcmlnaW5hbC12aXNpYmxlLWNvbHVtbnMgaW4gbG9jYWxzdG9yYWdlXG4gICAgICAvLyBpbiB0aGlzIGNhc2UgeW91IGhhdmUgdG8gYWRkIHRoaXMgY29sdW1uIHRvIHRoaXMudmlzaWJsZUNvbEFycmF5XG4gICAgICBjb25zdCBjb2xUb0FkZEluVmlzaWJsZUNvbCA9IFV0aWwuZGlmZmVyZW5jZUFycmF5cyhvcmlnaW5hbFNvcnRDb2x1bW5zQXJyYXksIGluaXRpYWxDb25maWdTb3J0Q29sdW1uc0FycmF5KTtcbiAgICAgIGlmIChjb2xUb0FkZEluVmlzaWJsZUNvbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbFRvQWRkSW5WaXNpYmxlQ29sLmZvckVhY2goY29sQWRkID0+IHtcbiAgICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5wdXNoKGNvbEFkZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2xUb0RlbEluVmlzaWJsZUNvbCA9IFV0aWwuZGlmZmVyZW5jZUFycmF5cyhpbml0aWFsQ29uZmlnU29ydENvbHVtbnNBcnJheSwgb3JpZ2luYWxTb3J0Q29sdW1uc0FycmF5KTtcbiAgICAgIGlmIChjb2xUb0RlbEluVmlzaWJsZUNvbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbFRvRGVsSW5WaXNpYmxlQ29sLmZvckVhY2goKGNvbERlbCkgPT4ge1xuICAgICAgICAgIHRoaXMuc29ydENvbEFycmF5LmZvckVhY2goKGNvbCwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC5jb2x1bW5OYW1lID09PSBjb2xEZWwuY29sdW1uTmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVuc3VyaW5nIGNvbHVtbiBleGlzdGVuY2UgYW5kIGNoZWNraW5nIGl0cyBvcmRlcmFibGUgc3RhdGVcbiAgICBmb3IgKGxldCBpID0gdGhpcy5zb3J0Q29sQXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLnNvcnRDb2xBcnJheVtpXS5jb2x1bW5OYW1lO1xuICAgICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihjb2xOYW1lKTtcbiAgICAgIGlmICghVXRpbC5pc0RlZmluZWQob0NvbCkgfHwgIW9Db2wub3JkZXJhYmxlKSB7XG4gICAgICAgIHRoaXMuc29ydENvbEFycmF5LnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBlbnN1cmVDb2x1bW5zT3JkZXIoKSB7XG5cbiAgICBsZXQgY29sdW1uc09yZGVyID0gW107XG4gICAgaWYgKHRoaXMuc3RhdGUuY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgIGNvbHVtbnNPcmRlciA9IHRoaXMuc3RhdGUuY29sdW1uc0Rpc3BsYXkubWFwKGl0ZW0gPT4gaXRlbS5hdHRyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uc09yZGVyID0gdGhpcy5jb2xBcnJheS5maWx0ZXIoYXR0ciA9PiB0aGlzLnZpc2libGVDb2xBcnJheS5pbmRleE9mKGF0dHIpID09PSAtMSk7XG4gICAgICBjb2x1bW5zT3JkZXIucHVzaCguLi50aGlzLnZpc2libGVDb2xBcnJheSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnNvcnQoKGE6IE9Db2x1bW4sIGI6IE9Db2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW5zT3JkZXIuaW5kZXhPZihhLmF0dHIpID09PSAtMSkge1xuICAgICAgICAvLyBpZiBpdCBpcyBub3QgaW4gbG9jYWwgc3RvcmFnZSBiZWNhdXNlIGl0IGlzIG5ldywga2VlcCBvcmRlclxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zT3JkZXIuaW5kZXhPZihhLmF0dHIpIC0gY29sdW1uc09yZGVyLmluZGV4T2YoYi5hdHRyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gIH1cblxuICBpbml0aWFsaXplUGFyYW1zKCk6IHZvaWQge1xuICAgIC8vIElmIHZpc2libGUtY29sdW1ucyBpcyBub3QgcHJlc2VudCB0aGVuIHZpc2libGUtY29sdW1ucyBpcyBhbGwgY29sdW1uc1xuICAgIGlmICghdGhpcy52aXNpYmxlQ29sdW1ucykge1xuICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sQXJyYXkubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbEFycmF5LmZvckVhY2goKHg6IHN0cmluZykgPT4gdGhpcy5yZWdpc3RlckNvbHVtbih4KSk7XG4gICAgICB0aGlzLmVuc3VyZUNvbHVtbnNPcmRlcigpO1xuICAgIH1cbiAgICAvLyBJbml0aWFsaXplIHF1aWNrRmlsdGVyXG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXIgPSB0aGlzLnF1aWNrRmlsdGVyO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuY3VycmVudFBhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgcGFnaW5hdG9yXG4gICAgaWYgKCF0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRpb25Db250cm9scykge1xuICAgICAgdGhpcy5wYWdpbmF0b3IgPSBuZXcgT0Jhc2VUYWJsZVBhZ2luYXRvcigpO1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSB0aGlzLnF1ZXJ5Um93cztcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgICB0aGlzLnBhZ2luYXRvci5zaG93Rmlyc3RMYXN0QnV0dG9ucyA9IHRoaXMuc2hvd1BhZ2luYXRvckZpcnN0TGFzdEJ1dHRvbnM7XG4gICAgfVxuXG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSkpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGUgPSAhIXRoaXMuc3RhdGUuc2VsZWN0Q29sdW1uVmlzaWJsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2hlY2tpbmcgdGhlIG9yaWdpbmFsIHNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSB3aXRoIHNlbGVjdC1jb2x1bW4tdmlzaWJsZSBpbiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaW4gbG9jYWwgc3RvcmFnZVxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc2VsZWN0Q29sdW1uVmlzaWJsZSlcbiAgICAgICAgJiYgdGhpcy5zZWxlY3RBbGxDaGVja2JveFZpc2libGUgPT09IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc2VsZWN0Q29sdW1uVmlzaWJsZSkge1xuICAgICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gISF0aGlzLnN0YXRlLnNlbGVjdENvbHVtblZpc2libGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gdGhpcy5zZWxlY3RBbGxDaGVja2JveFZpc2libGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9Jbml0aWFsaXplIHNob3cgZmlsdGVyIGJ5IGNvbHVtbiBpY29uXG4gICAgdGhpcy5pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSB0aGlzLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZUNoZWNrYm94Q29sdW1uKCk7XG5cbiAgICBpZiAodGhpcy5zdG9yZVN0YXRlKSB7XG4gICAgICAvLyBpZiBxdWVyeS1yb3dzIGluIGluaXRpYWwgY29uZmlndXJhdGlvbiBpcyBlcXVhbHMgdG8gb3JpZ2luYWwgcXVlcnktcm93cyBpbnB1dFxuICAgICAgLy8gcXVlcnlfcm93cyB3aWxsIGJlIHRoZSB2YWx1ZSBpbiBsb2NhbCBzdG9yYWdlXG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5xdWVyeVJvd3MpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24ucXVlcnlSb3dzKVxuICAgICAgICAmJiB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnF1ZXJ5Um93cyA9PT0gdGhpcy5vcmlnaW5hbFF1ZXJ5Um93cykge1xuICAgICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUucXVlcnlSb3dzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB1cGRhdGVTdGF0ZUV4cGFuZGVkQ29sdW1uKCkge1xuICAgIGlmICghdGhpcy50YWJsZVJvd0V4cGFuZGFibGUgfHwgIXRoaXMudGFibGVSb3dFeHBhbmRhYmxlLmV4cGFuZGFibGVDb2x1bW5WaXNpYmxlKSB7IHJldHVybjsgfVxuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdID09PSBDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QgJiYgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1sxXSAhPT0gQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucyA9IFt0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdXS5jb25jYXQoQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSwgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5zcGxpY2UoMSkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1swXSAhPT0gQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyVGFiTGlzdGVuZXIoKSB7XG4gICAgLy8gV2hlbiB0YWJsZSBpcyBjb250YWluZWQgaW50byB0YWIgY29tcG9uZW50LCBpdCBpcyBuZWNlc3NhcnkgdG8gaW5pdCB0YWJsZSBjb21wb25lbnQgd2hlbiBhdHRhY2hlZCB0byBET00uXG4gICAgdGhpcy50YWJHcm91cENoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMudGFiR3JvdXBDb250YWluZXIuc2VsZWN0ZWRUYWJDaGFuZ2Uuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgIGxldCBpbnRlcnZhbDtcbiAgICAgIGNvbnN0IHRpbWVyQ2FsbGJhY2sgPSAodGFiOiBNYXRUYWIpID0+IHtcbiAgICAgICAgaWYgKHRhYiAmJiB0YWIuY29udGVudC5pc0F0dGFjaGVkKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgaWYgKHRhYiA9PT0gdGhpcy50YWJDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zaWRlVGFiQnVnV29ya2Fyb3VuZCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ1F1ZXJ5KSB7XG4gICAgICAgICAgICAgIHRoaXMucXVlcnlEYXRhKHRoaXMucGVuZGluZ1F1ZXJ5RmlsdGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsgdGltZXJDYWxsYmFjayhldnQudGFiKTsgfSwgMTAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNpZGVUYWJCdWdXb3JrYXJvdW5kKCkge1xuICAgIHRoaXMucmVmcmVzaFNvcnRIZWFkZXJzKCk7XG4gIH1cblxuICByZWdpc3RlclNvcnRMaXN0ZW5lcigpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0KSkge1xuICAgICAgdGhpcy5zb3J0U3Vic2NyaXB0aW9uID0gdGhpcy5zb3J0Lm9Tb3J0Q2hhbmdlLnN1YnNjcmliZSh0aGlzLm9uU29ydENoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuc29ydC5zZXRNdWx0aXBsZVNvcnQodGhpcy5tdWx0aXBsZVNvcnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNvcnRDb2x1bW5zICYmIHRoaXMuc3RhdGljRGF0YSkge1xuICAgICAgdGhpcy51cGRhdGVTb3J0aW5nU3ViamVjdCh0cnVlKTtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU29ydGluZ1N1YmplY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvKiB0aGUgbG9hZGluZ1NvcnRpbmdTdWJqZWN0IG5vdCByZWZyZXNoIGluIHRoZSB0ZW1wbGF0ZVxuICAgIGJlY2F1c2UgY2hhbmdlIGRldGVjdGlvbiBub3Qgd29ya2luZyB3aXRoIHZpcnR1YWwgc2Nyb2xsaW5nICovXG4gICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICBpZiAobmdab25lKSB7XG4gICAgICBuZ1pvbmUucnVuKCgpID0+IHRoaXMubG9hZGluZ1NvcnRpbmdTdWJqZWN0Lm5leHQodmFsdWUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRpbmdTb3J0aW5nU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmNkICYmICEodGhpcy5jZCBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uU29ydENoYW5nZShzb3J0QXJyYXk6IGFueVtdKSB7XG4gICAgdGhpcy5zb3J0Q29sQXJyYXkgPSBbXTtcbiAgICBzb3J0QXJyYXkuZm9yRWFjaCgoc29ydCkgPT4ge1xuICAgICAgaWYgKHNvcnQuZGlyZWN0aW9uICE9PSAnJykge1xuICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5wdXNoKHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiBzb3J0LmlkLFxuICAgICAgICAgIGFzY2VuZGVudDogc29ydC5kaXJlY3Rpb24gPT09IENvZGVzLkFTQ19TT1JUXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTb3J0aW5nU3ViamVjdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBzZXREYXRhc291cmNlKCkge1xuICAgIC8vRGVsZXRlZCBwcmV2aW91cyBpbnN0YW5jZSBhbmQgc3Vic2NyaWJlcnNcbiAgICBkZWxldGUgdGhpcy5kYXRhU291cmNlO1xuICAgIGlmICh0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlKSB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBkYXRhU291cmNlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UYWJsZURhdGFTb3VyY2VTZXJ2aWNlKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBkYXRhU291cmNlU2VydmljZS5nZXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnJlZ2lzdGVyRGF0YVNvdXJjZUxpc3RlbmVycygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyRGF0YVNvdXJjZUxpc3RlbmVycygpIHtcbiAgICB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlID0gdGhpcy5kYXRhU291cmNlLm9uUmVuZGVyZWREYXRhQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnN0b3BFZGl0aW9uKCk7XG4gICAgICB0aGlzLmNoZWNrU2VsZWN0ZWRJdGVtRGF0YSgpO1xuICAgICAgaWYgKCF0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlU29ydGluZ1N1YmplY3QoZmFsc2UpO1xuICAgICAgICAgIGlmICh0aGlzLmNkICYmICEodGhpcy5jZCBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFeHBhbmRlZFJvd0NvbnRhaW5lckNsYXNzKHJvd0luZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBPVGFibGVDb21wb25lbnQuRVhQQU5ERURfUk9XX0NPTlRBSU5FUl9DTEFTUyArIHJvd0luZGV4O1xuICB9XG5cbiAgcHVibGljIGdldEV4cGFuZGFibGVJdGVtcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZUl0ZW0uc2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdG8gZXhwYW5kIG9yIGNvbGxhcHNlIHRoZSBleHBhbmRhYmxlIHJvdy5cbiAgICogQHBhcmFtIGl0ZW1cbiAgICogQHBhcmFtIHJvd0luZGV4XG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgcHVibGljIHRvb2dsZVJvd0V4cGFuZGFibGUoaXRlbTogYW55LCByb3dJbmRleDogbnVtYmVyLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5leHBhbmRhYmxlSXRlbS50b2dnbGUoaXRlbSk7XG5cbiAgICBpZiAodGhpcy5wb3J0YWxIb3N0W3Jvd0luZGV4XSkge1xuICAgICAgdGhpcy5wb3J0YWxIb3N0W3Jvd0luZGV4XS5kZXRhY2goKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRTdGF0ZUV4cGFuZChpdGVtKSA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgIGNvbnN0IGV2ZW50VGFibGVSb3dFeHBhbmRhYmxlQ2hhbmdlID0gdGhpcy5lbWl0VGFibGVSb3dFeHBhbmRhYmxlQ2hhbmdlRXZlbnQoaXRlbSwgcm93SW5kZXgpO1xuICAgICAgdGhpcy50YWJsZVJvd0V4cGFuZGFibGUub25Db2xsYXBzZWQuZW1pdChldmVudFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9ydGFsSG9zdFtyb3dJbmRleF0gPSBuZXcgRG9tUG9ydGFsT3V0bGV0KFxuICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLicgKyB0aGlzLmdldEV4cGFuZGVkUm93Q29udGFpbmVyQ2xhc3Mocm93SW5kZXgpKSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5hcHBSZWYsXG4gICAgICAgIHRoaXMuaW5qZWN0b3JcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlUG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMudGFibGVSb3dFeHBhbmRhYmxlLnRlbXBsYXRlUmVmLCB0aGlzLl92aWV3Q29udGFpbmVyUmVmLCB7ICRpbXBsaWNpdDogaXRlbSB9KTtcbiAgICAgIHRoaXMucG9ydGFsSG9zdFtyb3dJbmRleF0uYXR0YWNoVGVtcGxhdGVQb3J0YWwodGVtcGxhdGVQb3J0YWwpO1xuICAgICAgY29uc3QgZXZlbnRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2UgPSB0aGlzLmVtaXRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2VFdmVudChpdGVtLCByb3dJbmRleCk7XG4gICAgICB0aGlzLnRhYmxlUm93RXhwYW5kYWJsZS5vbkV4cGFuZGVkLmVtaXQoZXZlbnRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZUV2ZW50KGRhdGEsIHJvd0luZGV4KSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgT1RhYmxlUm93RXhwYW5kZWRDaGFuZ2UoKTtcbiAgICBldmVudC5yb3dJbmRleCA9IHJvd0luZGV4O1xuICAgIGV2ZW50LmRhdGEgPSBkYXRhO1xuXG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGlzRXhwYW5kZWQoZGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZUl0ZW0uaXNTZWxlY3RlZChkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGF0ZUV4cGFuZChyb3cpIHtcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkKHJvdykgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCc7XG4gIH1cblxuICBwdWJsaWMgaXNDb2x1bW5FeHBhbmRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoVXRpbC5pc0RlZmluZWQodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuX29UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbikpID8gdGhpcy5fb1RhYmxlT3B0aW9ucy5leHBhbmRhYmxlQ29sdW1uLnZpc2libGUgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBoYXNFeHBhbmRlZFJvdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpO1xuICB9XG5cbiAgcHVibGljIGhhc0luc2VydGFibGVSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtVmlzaWJsZUNvbHVtbnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBtYW5hZ2VzIHRoZSBjYWxsIHRvIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBmaWx0ZXJcbiAgICogQHBhcmFtIG92cnJBcmdzXG4gICAqL1xuICBxdWVyeURhdGEoZmlsdGVyPzogYW55LCBvdnJyQXJncz86IE9RdWVyeURhdGFBcmdzKSB7XG4gICAgLy8gSWYgdGFiIGV4aXN0cyBhbmQgaXMgbm90IGFjdGl2ZSB0aGVuIHdhaXQgZm9yIHF1ZXJ5RGF0YVxuICAgIGlmICh0aGlzLmlzSW5zaWRlSW5hY3RpdmVUYWIoKSkge1xuICAgICAgdGhpcy5wZW5kaW5nUXVlcnkgPSB0cnVlO1xuICAgICAgdGhpcy5wZW5kaW5nUXVlcnlGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ1F1ZXJ5ID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nUXVlcnlGaWx0ZXIgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnF1ZXJ5Q2VsbFJlbmRlcmVycygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBzdXBlci5xdWVyeURhdGEoZmlsdGVyLCBvdnJyQXJncyk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNJbnNpZGVJbmFjdGl2ZVRhYigpOiBib29sZWFuIHtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKHRoaXMudGFiQ29udGFpbmVyICYmIHRoaXMudGFiR3JvdXBDb250YWluZXIpIHtcbiAgICAgIHJlc3VsdCA9ICEodGhpcy50YWJDb250YWluZXIuaXNBY3RpdmUgfHwgKHRoaXMudGFiR3JvdXBDb250YWluZXIuc2VsZWN0ZWRJbmRleCA9PT0gdGhpcy50YWJDb250YWluZXIucG9zaXRpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcjogYW55ID0ge30pOiBhbnkge1xuICAgIGxldCBmaWx0ZXIgPSBleGlzdGluZ0ZpbHRlcjtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcikubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBwYXJlbnRJdGVtRXhwciA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25Gcm9tT2JqZWN0KGZpbHRlcik7XG4gICAgICAgIGZpbHRlciA9IHt9O1xuICAgICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0gPSBwYXJlbnRJdGVtRXhwcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJlQ29sRmlsdGVyID0gdGhpcy5nZXRDb2x1bW5GaWx0ZXJzRXhwcmVzc2lvbigpO1xuICAgICAgLy8gQWRkIGNvbHVtbiBmaWx0ZXJzIGJhc2ljIGV4cHJlc3Npb24gdG8gY3VycmVudCBmaWx0ZXJcbiAgICAgIGlmIChiZUNvbEZpbHRlciAmJiAhVXRpbC5pc0RlZmluZWQoZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldKSkge1xuICAgICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0gPSBiZUNvbEZpbHRlcjtcbiAgICAgIH0gZWxzZSBpZiAoYmVDb2xGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldID1cbiAgICAgICAgICBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRDb21wbGV4RXhwcmVzc2lvbihmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0sIGJlQ29sRmlsdGVyLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuZ2V0Q29tcG9uZW50RmlsdGVyKGZpbHRlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UXVpY2tGaWx0ZXJFeHByZXNzaW9uKCk6IEV4cHJlc3Npb24ge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSAmJiB0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC5maWx0ZXJFeHByZXNzaW9uO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q29sdW1uRmlsdGVyc0V4cHJlc3Npb24oKTogRXhwcmVzc2lvbiB7XG4gICAgLy8gQXBwbHkgY29sdW1uIGZpbHRlcnNcbiAgICBjb25zdCBjb2x1bW5GaWx0ZXJzOiBPQ29sdW1uVmFsdWVGaWx0ZXJbXSA9IHRoaXMuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlcnMoKTtcbiAgICBjb25zdCBiZUNvbHVtbkZpbHRlcnM6IEFycmF5PEV4cHJlc3Npb24+ID0gW107XG4gICAgY29sdW1uRmlsdGVycy5mb3JFYWNoKGNvbEZpbHRlciA9PiB7XG4gICAgICAvLyBQcmVwYXJlIGJhc2ljIGV4cHJlc3Npb25zXG4gICAgICBzd2l0Y2ggKGNvbEZpbHRlci5vcGVyYXRvcikge1xuICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU46XG4gICAgICAgICAgaWYgKFV0aWwuaXNBcnJheShjb2xGaWx0ZXIudmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgYmVzSW46IEFycmF5PEV4cHJlc3Npb24+ID0gY29sRmlsdGVyLnZhbHVlcy5tYXAodmFsdWUgPT4gRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbkVxdWFscyhjb2xGaWx0ZXIuYXR0ciwgdmFsdWUpKTtcbiAgICAgICAgICAgIGxldCBiZUluOiBFeHByZXNzaW9uID0gYmVzSW4ucG9wKCk7XG4gICAgICAgICAgICBiZXNJbi5mb3JFYWNoKGJlID0+IHtcbiAgICAgICAgICAgICAgYmVJbiA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKGJlSW4sIGJlLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfT1IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBiZUNvbHVtbkZpbHRlcnMucHVzaChiZUluKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5CRVRXRUVOOlxuICAgICAgICAgIGlmIChVdGlsLmlzQXJyYXkoY29sRmlsdGVyLnZhbHVlcykgJiYgY29sRmlsdGVyLnZhbHVlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlRnJvbSA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25Nb3JlRXF1YWwoY29sRmlsdGVyLmF0dHIsIGNvbEZpbHRlci52YWx1ZXNbMF0pO1xuICAgICAgICAgICAgY29uc3QgYmVUbyA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25MZXNzRXF1YWwoY29sRmlsdGVyLmF0dHIsIGNvbEZpbHRlci52YWx1ZXNbMV0pO1xuICAgICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkQ29tcGxleEV4cHJlc3Npb24oYmVGcm9tLCBiZVRvLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuRVFVQUw6XG4gICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbkxpa2UoY29sRmlsdGVyLmF0dHIsIGNvbEZpbHRlci52YWx1ZXMpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkxFU1NfRVFVQUw6XG4gICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbkxlc3NFcXVhbChjb2xGaWx0ZXIuYXR0ciwgY29sRmlsdGVyLnZhbHVlcykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTU9SRV9FUVVBTDpcbiAgICAgICAgICBiZUNvbHVtbkZpbHRlcnMucHVzaChGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uTW9yZUVxdWFsKGNvbEZpbHRlci5hdHRyLCBjb2xGaWx0ZXIudmFsdWVzKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICAvLyBCdWlsZCBjb21wbGV0ZSBjb2x1bW4gZmlsdGVycyBiYXNpYyBleHByZXNzaW9uXG4gICAgbGV0IGJlQ29sRmlsdGVyOiBFeHByZXNzaW9uID0gYmVDb2x1bW5GaWx0ZXJzLnBvcCgpO1xuICAgIGJlQ29sdW1uRmlsdGVycy5mb3JFYWNoKGJlID0+IHtcbiAgICAgIGJlQ29sRmlsdGVyID0gRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkQ29tcGxleEV4cHJlc3Npb24oYmVDb2xGaWx0ZXIsIGJlLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYmVDb2xGaWx0ZXI7XG4gIH1cblxuICB1cGRhdGVQYWdpbmF0aW9uSW5mbyhxdWVyeVJlczogYW55KSB7XG4gICAgc3VwZXIudXBkYXRlUGFnaW5hdGlvbkluZm8ocXVlcnlSZXMpO1xuICB9XG5cbiAgaW5pdFZpZXdQb3J0KGRhdGE6IGFueVtdKSB7XG5cbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQgJiYgZGF0YSkge1xuICAgICAgY29uc3QgaGVhZGVyRWxSZWYgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihoZWFkZXJTZWxlY3Rvcik7XG4gICAgICBjb25zdCBmb290ZXJFbFJlZiA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGZvb3RlclNlbGVjdG9yKTtcbiAgICAgIGNvbnN0IHJvd0VsUmVmID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3Iocm93U2VsZWN0b3IpO1xuXG4gICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSBoZWFkZXJFbFJlZiA/IGhlYWRlckVsUmVmLm9mZnNldEhlaWdodCA6IDA7XG4gICAgICBjb25zdCBmb290ZXJIZWlnaHQgPSBmb290ZXJFbFJlZiA/IGZvb3RlckVsUmVmLm9mZnNldEhlaWdodCA6IDA7XG4gICAgICBjb25zdCByb3dIZWlnaHQgPSByb3dFbFJlZiA/IHJvd0VsUmVmLm9mZnNldEhlaWdodCA6IE9UYWJsZUNvbXBvbmVudC5ERUZBVUxUX1JPV19IRUlHSFQ7XG5cbiAgICAgIC8vIHNldCBjb25maWcgdmlld3BvcnRcbiAgICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kuc2V0Q29uZmlnKHJvd0hlaWdodCwgaGVhZGVySGVpZ2h0LCBmb290ZXJIZWlnaHQpO1xuICAgICAgaWYgKHRoaXMucHJldmlvdXNSZW5kZXJlckRhdGEgIT09IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxTdHJhdGVneS5kYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldERhdGEoZGF0YTogYW55LCBzcWxUeXBlczogYW55KSB7XG4gICAgdGhpcy5kYW9UYWJsZS5zcWxUeXBlc0NoYW5nZS5uZXh0KHNxbFR5cGVzKTtcbiAgICB0aGlzLmRhb1RhYmxlLnNldERhdGFBcnJheShkYXRhKTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblBhZ2luYXRlZERhdGFMb2FkZWQsIGRhdGEpO1xuICAgIH1cbiAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uRGF0YUxvYWRlZCwgdGhpcy5kYW9UYWJsZS5kYXRhKTtcbiAgfVxuXG4gIHNob3dEaWFsb2dFcnJvcihlcnJvcjogc3RyaW5nLCBlcnJvck9wdGlvbmFsPzogc3RyaW5nKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGVycm9yKSAmJiAhVXRpbC5pc09iamVjdChlcnJvcikpIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hbGVydCgnRVJST1InLCBlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hbGVydCgnRVJST1InLCBlcnJvck9wdGlvbmFsKTtcbiAgICB9XG4gIH1cblxuICBwcm9qZWN0Q29udGVudENoYW5nZWQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNvcnRpbmdTdWJqZWN0KGZhbHNlKTtcbiAgICB9LCA1MDApO1xuICAgIHRoaXMubG9hZGluZ1Njcm9sbFN1YmplY3QubmV4dChmYWxzZSk7XG5cbiAgICB0aGlzLmluaXRWaWV3UG9ydCh0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhKTtcblxuICAgIGlmICh0aGlzLnByZXZpb3VzUmVuZGVyZXJEYXRhICE9PSB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhKSB7XG4gICAgICB0aGlzLnByZXZpb3VzUmVuZGVyZXJEYXRhID0gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YTtcbiAgICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25Db250ZW50Q2hhbmdlLCB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YS5sZW5ndGggPiAwICYmIHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jaGVja1NlbGVjdGVkSXRlbURhdGEoKTtcbiAgICB9XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeSgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBjb2x1bW5zID0gc3VwZXIuZ2V0QXR0cmlidXRlc1ZhbHVlc1RvUXVlcnkoKTtcbiAgICBpZiAodGhpcy5hdm9pZFF1ZXJ5Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gY29sdW1ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2x1bW5zW2ldO1xuICAgICAgICBpZiAodGhpcy5hdm9pZFF1ZXJ5Q29sdW1ucy5pbmRleE9mKGNvbCkgIT09IC0xKSB7XG4gICAgICAgICAgY29sdW1ucy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICBnZXRRdWVyeUFyZ3VtZW50cyhmaWx0ZXI6IG9iamVjdCwgb3ZyckFyZ3M/OiBPUXVlcnlEYXRhQXJncyk6IEFycmF5PGFueT4ge1xuICAgIGNvbnN0IHF1ZXJ5QXJndW1lbnRzID0gc3VwZXIuZ2V0UXVlcnlBcmd1bWVudHMoZmlsdGVyLCBvdnJyQXJncyk7XG4gICAgT2JqZWN0LmFzc2lnbihxdWVyeUFyZ3VtZW50c1szXSwgdGhpcy5nZXRTcWxUeXBlc0ZvckZpbHRlcihxdWVyeUFyZ3VtZW50c1sxXSkpO1xuICAgIE9iamVjdC5hc3NpZ24ocXVlcnlBcmd1bWVudHNbM10sIG92cnJBcmdzID8gb3ZyckFyZ3Muc3FsdHlwZXMgfHwge30gOiB7fSk7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHF1ZXJ5QXJndW1lbnRzWzVdID0gdGhpcy5wYWdpbmF0b3IuaXNTaG93aW5nQWxsUm93cyhxdWVyeUFyZ3VtZW50c1s1XSkgPyB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyIDogcXVlcnlBcmd1bWVudHNbNV07XG4gICAgICBxdWVyeUFyZ3VtZW50c1s2XSA9IHRoaXMuc29ydENvbEFycmF5O1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnlBcmd1bWVudHM7XG4gIH1cblxuICBnZXRTcWxUeXBlc0ZvckZpbHRlcihmaWx0ZXIpOiBvYmplY3Qge1xuICAgIGNvbnN0IGFsbFNxbFR5cGVzID0gdGhpcy5nZXRTcWxUeXBlcygpO1xuICAgIGNvbnN0IHNxbFR5cGVzID0ge307XG4gICAgT2JqZWN0LmtleXMoYWxsU3FsVHlwZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChmaWx0ZXIuaW5kZXhPZihrZXkpICE9PSAtMSAmJiBhbGxTcWxUeXBlc1trZXldICE9PSBTUUxUeXBlcy5PVEhFUikge1xuICAgICAgICBzcWxUeXBlc1trZXldID0gYWxsU3FsVHlwZXNba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc3FsVHlwZXM7XG4gIH1cblxuICBvbkV4cG9ydEJ1dHRvbkNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uRXhwb3J0QnV0dG9uQ2xpY2tlZCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlQ29sdW1uc1Zpc2liaWxpdHlDbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vbkNoYW5nZUNvbHVtbnNWaXNpYmlsaXR5Q2xpY2tlZCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uTWF0VGFibGVDb250ZW50Q2hhbmdlZCgpIHtcbiAgICAvL1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIG5hdmlnYXRpb24gdG8gbmV3IGl0ZW0gaW5zZXJ0aW9uXG4gICAqL1xuICBhZGQoKSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fSU5TRVJUKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5pbnNlcnREZXRhaWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHNlbGVjdGVkIHJvd3NcbiAgICogQHBhcmFtIFtjbGVhclNlbGVjdGVkSXRlbXNdXG4gICAqL1xuICByZW1vdmUoY2xlYXJTZWxlY3RlZEl0ZW1zOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tFbmFibGVkQWN0aW9uUGVybWlzc2lvbihQZXJtaXNzaW9uc1V0aWxzLkFDVElPTl9ERUxFVEUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKTtcbiAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybSgnQ09ORklSTScsICdNRVNTQUdFUy5DT05GSVJNX0RFTEVURScpLnRoZW4ocmVzID0+IHtcbiAgICAgIGlmIChyZXMgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVNlcnZpY2UgJiYgKHRoaXMuZGVsZXRlTWV0aG9kIGluIHRoaXMuZGF0YVNlcnZpY2UpICYmIHRoaXMuZW50aXR5ICYmICh0aGlzLmtleXNBcnJheS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBTZXJ2aWNlVXRpbHMuZ2V0QXJyYXlQcm9wZXJ0aWVzKHNlbGVjdGVkSXRlbXMsIHRoaXMua2V5c0FycmF5KTtcbiAgICAgICAgICBjb25zdCBzcWxUeXBlc0FyZyA9IHRoaXMuZ2V0U3FsVHlwZXNPZktleXMoKTtcbiAgICAgICAgICB0aGlzLmRhb1RhYmxlLnJlbW92ZVF1ZXJ5KGZpbHRlcnMsIHNxbFR5cGVzQXJnKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5leHQ6ICh2KSA9PiB7XG4gICAgICAgICAgICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblJvd0RlbGV0ZWQsIHNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dEaWFsb2dFcnJvcihlLCAnTUVTU0FHRVMuRVJST1JfREVMRVRFJyk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJpbmcgdGhhdCB0aGUgZGVsZXRlZCBpdGVtcyB3aWxsIG5vdCBsb25nZXIgYmUgcGFydCBvZiB0aGUgc2VsZWN0aW9uTW9kZWxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5jbG9zZURldGFpbHMoZmlsdGVycywgeyBleGl0V2l0aG91dENvbmZpcm1hdGlvbjogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVMb2NhbEl0ZW1zKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xlYXJTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hzIHRhYmxlIGNvbXBvbmVudFxuICAgKi9cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyBhbmQgc2VsZWN0IGFsbCBjaGVja2JveFxuICAgKi9cbiAgc2hvd0FuZFNlbGVjdEFsbENoZWNrYm94KCkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uTW9kZU11bHRpcGxlKCkpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdEFsbENoZWNrYm94KSB7XG4gICAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChjbGVhclNlbGVjdGVkSXRlbXM6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIC8vIEluaXRpYWxpemUgcGFnZSBpbmRleFxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG4gICAgICB0aGlzLnJlbG9hZERhdGEoY2xlYXJTZWxlY3RlZEl0ZW1zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVsb2FkcyBkYXRhXG4gICAqL1xuICByZWxvYWREYXRhKGNsZWFyU2VsZWN0ZWRJdGVtczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tFbmFibGVkQWN0aW9uUGVybWlzc2lvbihQZXJtaXNzaW9uc1V0aWxzLkFDVElPTl9SRUZSRVNIKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5yZWZyZXNoU2VsZWN0aW9uKCk7XG4gICAgaWYgKGNsZWFyU2VsZWN0ZWRJdGVtcykge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nUXVlcnkgPSB0cnVlO1xuICAgIGxldCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBxdWVyeUFyZ3MgPSB7XG4gICAgICAgIG9mZnNldDogdGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzLFxuICAgICAgICBsZW5ndGg6IHRoaXMucXVlcnlSb3dzXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLnN0b3BFZGl0aW9uKGZhbHNlKTtcbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBoYW5kbGVDbGljayhyb3c6IGFueSwgY29sdW1uOiBPQ29sdW1uLCByb3dJbmRleDogbnVtYmVyLCBjZWxsUmVmOiBFbGVtZW50UmVmLCBldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY2xpY2tUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNsaWNrUHJldmVudCkge1xuICAgICAgICBpZiAodGhpcy5vZW5hYmxlZCAmJiBjb2x1bW4uZWRpdG9yXG4gICAgICAgICAgJiYgKHRoaXMuZGV0YWlsTW9kZSAhPT0gQ29kZXMuREVUQUlMX01PREVfQ0xJQ0spXG4gICAgICAgICAgJiYgKHRoaXMuZWRpdGlvbk1vZGUgPT09IENvZGVzLkVESVRJT05fTU9ERV9DTElDSykpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2YXRlQ29sdW1uRWRpdGlvbihjb2x1bW4sIHJvdywgY2VsbFJlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kb0hhbmRsZUNsaWNrKHJvdywgY29sdW1uLmF0dHIsIHJvd0luZGV4LCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY2xpY2tQcmV2ZW50ID0gZmFsc2U7XG4gICAgfSwgdGhpcy5jbGlja0RlbGF5KTtcblxuICB9XG5cbiAgZG9IYW5kbGVDbGljayhyb3c6IGFueSwgY29sdW1uOiBzdHJpbmcsIHJvd0luZGV4OiBudW1iZXIsICRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5vZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoKHRoaXMuZGV0YWlsTW9kZSA9PT0gQ29kZXMuREVUQUlMX01PREVfQ0xJQ0spKSB7XG4gICAgICB0aGlzLm9uQ2xpY2suZW1pdCh7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXgsIG1vdXNlRXZlbnQ6ICRldmVudCwgY29sdW1uTmFtZTogY29sdW1uLCBjZWxsOiByb3dbY29sdW1uXSB9KTtcbiAgICAgIHRoaXMuc2F2ZURhdGFOYXZpZ2F0aW9uSW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3cocm93KTtcbiAgICAgIHRoaXMudmlld0RldGFpbChyb3cpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpICYmICgkZXZlbnQuY3RybEtleSB8fCAkZXZlbnQubWV0YUtleSkpIHtcbiAgICAgIC8vIFRPRE86IHRlc3QgJGV2ZW50Lm1ldGFLZXkgb24gTUFDXG4gICAgICB0aGlzLnNlbGVjdGVkUm93KHJvdyk7XG4gICAgICB0aGlzLm9uQ2xpY2suZW1pdCh7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXgsIG1vdXNlRXZlbnQ6ICRldmVudCwgY29sdW1uTmFtZTogY29sdW1uLCBjZWxsOiByb3dbY29sdW1uXSB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlTXVsdGlwbGUoKSAmJiAkZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVTZWxlY3Rpb24ocm93KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2VsZWN0aW9uTW9kZU5vbmUoKSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpO1xuICAgICAgaWYgKHRoaXMuaXNSb3dTZWxlY3RlZChyb3cpICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAxICYmIHRoaXMuZWRpdGlvbkVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkFuZEVkaXRpbmcoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3cocm93KTtcbiAgICAgIHRoaXMub25DbGljay5lbWl0KHsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCwgbW91c2VFdmVudDogJGV2ZW50LCBjb2x1bW5OYW1lOiBjb2x1bW4sIGNlbGw6IHJvd1tjb2x1bW5dIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU11bHRpcGxlU2VsZWN0aW9uKGl0ZW06IGFueSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuaW5kZXhPZih0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFswXSk7XG4gICAgICBjb25zdCBsYXN0ID0gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YS5pbmRleE9mKGl0ZW0pO1xuICAgICAgY29uc3QgaW5kZXhGcm9tID0gTWF0aC5taW4oZmlyc3QsIGxhc3QpO1xuICAgICAgY29uc3QgaW5kZXhUbyA9IE1hdGgubWF4KGZpcnN0LCBsYXN0KTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuc2xpY2UoaW5kZXhGcm9tLCBpbmRleFRvICsgMSkuZm9yRWFjaChlID0+IHRoaXMuc2VsZWN0ZWRSb3coZSkpO1xuICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vbkNsaWNrLCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCkge1xuICAgIHN1cGVyLnNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCk7XG4gICAgdGhpcy5zdG9yZVBhZ2luYXRpb25TdGF0ZSA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVEb3VibGVDbGljayhyb3c6IGFueSwgY29sdW1uOiBPQ29sdW1uLCByb3dJbmRleDogbnVtYmVyLCBjZWxsUmVmOiBFbGVtZW50UmVmLCAkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5jbGlja1RpbWVyKTtcbiAgICB0aGlzLmNsaWNrUHJldmVudCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5vZW5hYmxlZCAmJiBjb2x1bW4uZWRpdG9yXG4gICAgICAmJiAoIUNvZGVzLmlzRG91YmxlQ2xpY2tNb2RlKHRoaXMuZGV0YWlsTW9kZSkpXG4gICAgICAmJiAoQ29kZXMuaXNEb3VibGVDbGlja01vZGUodGhpcy5lZGl0aW9uTW9kZSkpKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlQ29sdW1uRWRpdGlvbihjb2x1bW4sIHJvdywgY2VsbFJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25Eb3VibGVDbGljay5lbWl0KHsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCwgbW91c2VFdmVudDogJGV2ZW50LCBjb2x1bW5OYW1lOiBjb2x1bW4uYXR0ciwgY2VsbDogcm93W2NvbHVtbi5hdHRyXSB9KTtcbiAgICAgIGlmICh0aGlzLm9lbmFibGVkICYmIENvZGVzLmlzRG91YmxlQ2xpY2tNb2RlKHRoaXMuZGV0YWlsTW9kZSkpIHtcbiAgICAgICAgdGhpcy5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgICAgICB0aGlzLnZpZXdEZXRhaWwocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IGVkaXRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuc29tZShpdGVtID0+IGl0ZW0uZWRpdGluZyk7XG4gIH1cblxuICBoYW5kbGVET01DbGljayhldmVudCkge1xuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWRpdGlvbkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGF5Q29udGFpbmVyID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstb3ZlcmxheS1jb250YWluZXInKVswXTtcbiAgICBpZiAob3ZlcmxheUNvbnRhaW5lciAmJiBvdmVybGF5Q29udGFpbmVyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZUNvbnRhaW5lciA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuby10YWJsZS1jb250YWluZXInKTtcbiAgICBjb25zdCB0YWJsZUNvbnRlbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm8tdGFibGUtY29udGFpbmVyIHRhYmxlLm1hdC10YWJsZScpO1xuICAgIGlmICh0YWJsZUNvbnRhaW5lciAmJiB0YWJsZUNvbnRlbnQgJiYgdGFibGVDb250YWluZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAhdGFibGVDb250ZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWN0aXZhdGVDb2x1bW5FZGl0aW9uKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnksIGNlbGxSZWY6IGFueSkge1xuICAgIGlmIChjZWxsUmVmICYmIGNvbHVtbi5lZGl0aW5nICYmIHRoaXMuZWRpdGluZ0NlbGwgPT09IGNlbGxSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uUGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0T0NvbHVtblBlcm1pc3Npb25zKGNvbHVtbi5hdHRyKTtcbiAgICBpZiAoY29sdW1uUGVybWlzc2lvbnMuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHtjb2x1bW4uYXR0cn0gZWRpdGlvbiBub3QgYWxsb3dlZCBkdWUgdG8gcGVybWlzc2lvbnNgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uQW5kRWRpdGluZygpO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3cocm93KTtcbiAgICB0aGlzLmVkaXRpbmdDZWxsID0gY2VsbFJlZjtcbiAgICBjb25zdCByb3dEYXRhID0ge307XG4gICAgdGhpcy5rZXlzQXJyYXkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICByb3dEYXRhW2tleV0gPSByb3dba2V5XTtcbiAgICB9KTtcbiAgICByb3dEYXRhW2NvbHVtbi5hdHRyXSA9IHJvd1tjb2x1bW4uYXR0cl07XG4gICAgdGhpcy5lZGl0aW5nUm93ID0gcm93O1xuICAgIGNvbHVtbi5lZGl0aW5nID0gdHJ1ZTtcbiAgICBjb2x1bW4uZWRpdG9yLnN0YXJ0RWRpdGlvbihyb3dEYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZUNlbGxEYXRhKGNvbHVtbjogT0NvbHVtbiwgZGF0YTogYW55LCBzYXZlQ2hhbmdlczogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX1VQREFURSkpIHtcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBPYnNlcnZhYmxlKGlubmVyT2JzZXJ2ZXIgPT4ge1xuICAgICAgICBpbm5lck9ic2VydmVyLmVycm9yKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGNvbHVtbi5lZGl0aW5nID0gZmFsc2U7XG4gICAgaWYgKHNhdmVDaGFuZ2VzICYmIHRoaXMuZWRpdGluZ1JvdyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZWRpdGluZ1JvdywgZGF0YSk7XG4gICAgfVxuICAgIHRoaXMuc3RvcEVkaXRpb24oKTtcbiAgICBpZiAoc2F2ZUNoYW5nZXMgJiYgY29sdW1uLmVkaXRvci51cGRhdGVSZWNvcmRPbkVkaXQpIHtcbiAgICAgIGNvbnN0IHRvVXBkYXRlID0ge307XG4gICAgICB0b1VwZGF0ZVtjb2x1bW4uYXR0cl0gPSBkYXRhW2NvbHVtbi5hdHRyXTtcbiAgICAgIGNvbnN0IGt2ID0gdGhpcy5leHRyYWN0S2V5c0Zyb21SZWNvcmQoZGF0YSk7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVSZWNvcmQoa3YsIHRvVXBkYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRLZXlzVmFsdWVzKCk6IGFueVtdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRBbGxWYWx1ZXMoKTtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKHJvd1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2hvd3NTZWxlY3RzKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vblNob3dzU2VsZWN0cygpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRpYWxpemVDaGVja2JveENvbHVtbigpIHtcbiAgICAvLyBJbml0aWFsaXppbmcgcm93IHNlbGVjdGlvbiBsaXN0ZW5lclxuICAgIGlmICghdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24gJiYgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZSgoc2VsZWN0aW9uRGF0YTogU2VsZWN0aW9uQ2hhbmdlPGFueT4pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlclNlbGVjdGlvbkV2ZW50cyAmJiBzZWxlY3Rpb25EYXRhKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblJvd1NlbGVjdGVkLCBzZWxlY3Rpb25EYXRhLmFkZGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEucmVtb3ZlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uUm93RGVzZWxlY3RlZCwgc2VsZWN0aW9uRGF0YS5yZW1vdmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkNvbHVtblN0YXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlU2VsZWN0aW9uQ29sdW1uU3RhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zICYmIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGVcbiAgICAgICYmIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnNbMF0gIT09IENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zICYmICF0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlXG4gICAgICAmJiB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdID09PSBDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMuc2hpZnQoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTdGF0ZUV4cGFuZGVkQ29sdW1uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtUm93U2VsZWN0ZWRJbkN1cnJlbnREYXRhKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZSA/IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZmlsdGVyKHggPT4gIXRoaXMuaXNEaXNhYmxlQ2hlY2tib3goeCkgJiYgdGhpcy5pc1Jvd1NlbGVjdGVkKHgpKS5sZW5ndGggOiAwO1xuICB9XG5cbiAgcHVibGljIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLmdldE51bVJvd1NlbGVjdGVkSW5DdXJyZW50RGF0YSgpO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UgPyB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID4gMCAmJiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcbiAgfVxuXG4gIHB1YmxpYyBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLmdldE51bVJvd1NlbGVjdGVkSW5DdXJyZW50RGF0YSgpO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UgPyB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID4gMCAmJiBudW1Sb3dzID4gMCAmJiBudW1TZWxlY3RlZCAhPT0gbnVtUm93cztcbiAgfVxuXG4gIHB1YmxpYyBtYXN0ZXJUb2dnbGUoZXZlbnQ6IE1hdENoZWNrYm94Q2hhbmdlKTogdm9pZCB7XG4gICAgZXZlbnQuY2hlY2tlZCA/IHRoaXMuc2VsZWN0QWxsKCkgOiB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZm9yRWFjaChyb3cgPT4gdGhpcy5zZXRTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3Rpb25DaGVja2JveFRvZ2dsZShldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UsIHJvdzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlU2luZ2xlKCkpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gICAgZXZlbnQuY2hlY2tlZCA/IHRoaXMuc2VsZWN0ZWRSb3cocm93KSA6IHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XG4gICAgdGhpcy5zdGF0ZS5zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RlZFJvdyhyb3c6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2V0U2VsZWN0ZWQocm93KTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZSkpIHtcbiAgICAgIHRoaXMuc3RhdGUuc2VsZWN0aW9uID0gW107XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGVkKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZUNoZWNrYm94KGl0ZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChpdGVtKSAmJiAhdGhpcy5pc1Jvd1NlbGVjdGVkKGl0ZW0pKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNob3dEZWxldGVCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlQnV0dG9uO1xuICB9XG5cbiAgZ2V0VHJhY2tCeUZ1bmN0aW9uKCk6IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICByZXR1cm4gKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4ge1xuXG4gICAgICBsZXQgaXRlbUlkOiBzdHJpbmcgPSAnJztcblxuICAgICAgaWYgKHRoaXMuaXNHcm91cChpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgaXRlbUlkICs9IGl0ZW0uY29sdW1uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5c0xlbmdodCA9IHNlbGYua2V5c0FycmF5Lmxlbmd0aDtcbiAgICAgICAgc2VsZi5rZXlzQXJyYXkuZm9yRWFjaCgoa2V5OiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3VmZml4ID0gaWR4IDwgKGtleXNMZW5naHQgLSAxKSA/ICc7JyA6ICcnO1xuICAgICAgICAgIGl0ZW1JZCArPSBpdGVtW2tleV0gKyBzdWZmaXg7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNBc3luY0FuZFZpc2libGVDb2xzID0gdGhpcy5hc3luY0xvYWRDb2x1bW5zLnNvbWUoYyA9PiB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluY2x1ZGVzKGMpKTtcbiAgICAgIGlmIChzZWxmLmFzeW5jTG9hZENvbHVtbnMubGVuZ3RoICYmIGhhc0FzeW5jQW5kVmlzaWJsZUNvbHMgJiYgIXNlbGYuZmluaXNoUXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgc2VsZi5xdWVyeVJvd0FzeW5jRGF0YShpbmRleCwgaXRlbSk7XG4gICAgICAgIGlmIChzZWxmLnBhZ2luYXRvciAmJiBpbmRleCA9PT0gKHNlbGYucGFnaW5hdG9yLnBhZ2VTaXplIC0gMSkpIHtcbiAgICAgICAgICBzZWxmLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbUlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1JZDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcXVlcnlSb3dBc3luY0RhdGEocm93SW5kZXg6IG51bWJlciwgcm93RGF0YTogYW55KSB7XG4gICAgY29uc3Qga3YgPSBTZXJ2aWNlVXRpbHMuZ2V0T2JqZWN0UHJvcGVydGllcyhyb3dEYXRhLCB0aGlzLmtleXNBcnJheSk7XG4gICAgLy8gUmVwZWF0aW5nIGNoZWNraW5nIG9mIHZpc2libGUgY29sdW1uXG4gICAgY29uc3QgYXYgPSB0aGlzLmFzeW5jTG9hZENvbHVtbnMuZmlsdGVyKGMgPT4gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5pbmRleE9mKGMpICE9PSAtMSk7XG4gICAgaWYgKGF2Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2tpcHBpbmcgcXVlcnkgaWYgdGhlcmUgYXJlIG5vdCB2aXNpYmxlIGFzeW5jcm9uIGNvbHVtbnNcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uUXVlcnlBcmdzID0gW2t2LCBhdiwgdGhpcy5lbnRpdHksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgY29uc3QgcXVlcnlNZXRob2ROYW1lID0gdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kO1xuICAgIGlmICh0aGlzLmRhdGFTZXJ2aWNlICYmIChxdWVyeU1ldGhvZE5hbWUgaW4gdGhpcy5kYXRhU2VydmljZSkgJiYgdGhpcy5lbnRpdHkpIHtcbiAgICAgIGlmICh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbcm93SW5kZXhdKSB7XG4gICAgICAgIHRoaXMuYXN5bmNMb2FkU3Vic2NyaXB0aW9uc1tyb3dJbmRleF0udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXN5bmNMb2FkU3Vic2NyaXB0aW9uc1tyb3dJbmRleF0gPSB0aGlzLmRhdGFTZXJ2aWNlW3F1ZXJ5TWV0aG9kTmFtZV1cbiAgICAgICAgLmFwcGx5KHRoaXMuZGF0YVNlcnZpY2UsIGNvbHVtblF1ZXJ5QXJncylcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzLmlzU3VjY2Vzc2Z1bCgpKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmIChVdGlsLmlzQXJyYXkocmVzLmRhdGEpICYmIHJlcy5kYXRhLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICBkYXRhID0gcmVzLmRhdGFbMF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFV0aWwuaXNPYmplY3QocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICAgIGRhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGFvVGFibGUuc2V0QXN5bmNocm9ub3VzQ29sdW1uKGRhdGEsIHJvd0RhdGEpO1xuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHBhZ2UgdGFibGUgZGF0YS5cbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0Q3VycmVudERhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0Q3VycmVudEFsbERhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHJlbmRlcmVkIHZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsUmVuZGVyZWRWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5nZXRBbGxSZW5kZXJlckRhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGFnZSB0YWJsZSByZW5kZXJlciBkYXRhLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0UmVuZGVyZWRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmdldEN1cnJlbnRSZW5kZXJlckRhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgc3FsIHR5cGVzIGZyb20gZGF0YSBzb3VyY2UgYW5kIHRhYmxlIGNvbHVtbnNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFNxbFR5cGVzKCkge1xuICAgIGNvbnN0IGFsbFNxbFR5cGVzID0gVXRpbC5pc0RlZmluZWQodGhpcy5kYXRhU291cmNlLnNxbFR5cGVzKSA/IHRoaXMuZGF0YVNvdXJjZS5zcWxUeXBlcyA6IHt9O1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKChjb2w6IE9Db2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2wuc3FsVHlwZSkge1xuICAgICAgICBhbGxTcWxUeXBlc1tjb2wuYXR0cl0gPSBjb2wuc3FsVHlwZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWxsU3FsVHlwZXM7XG4gIH1cblxuICBzZXRPVGFibGVDb2x1bW5zRmlsdGVyKHRhYmxlQ29sdW1uc0ZpbHRlcjogT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCA9IHRhYmxlQ29sdW1uc0ZpbHRlcjtcbiAgfVxuXG4gIGdldCBmaWx0ZXJDb2x1bW5zKCk6IE9GaWx0ZXJDb2x1bW5bXSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uZmlsdGVyQ29sdW1ucyA9PT0gdGhpcy5vcmlnaW5hbEZpbHRlckNvbHVtbnNcbiAgICAgICYmIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucykge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxGaWx0ZXJDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IG9yaWdpbmFsRmlsdGVyQ29sdW1ucygpOiBBcnJheTxPRmlsdGVyQ29sdW1uPiB7XG4gICAgbGV0IHNvcnRDb2x1bW5zRmlsdGVyID0gW107XG4gICAgaWYgKHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgc29ydENvbHVtbnNGaWx0ZXIgPSB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuY29sdW1uc0FycmF5O1xuICAgIH1cbiAgICByZXR1cm4gc29ydENvbHVtbnNGaWx0ZXI7XG4gIH1cblxuICBnZXQgb3JpZ2luYWxHcm91cGVkQ29sdW1uc0FycmF5KCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBVdGlsLnBhcnNlQXJyYXkodGhpcy5ncm91cGVkQ29sdW1ucywgdHJ1ZSk7XG4gIH1cblxuICBnZXRTdG9yZWRDb2x1bW5zRmlsdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdG9yZWRGaWx0ZXJzO1xuICB9XG5cbiAgZ2V0U3RvcmVkR3JvdXBlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc3RvcmVkQ29uZmlndXJhdGlvbnM7XG4gIH1cblxuICBvbkZpbHRlckJ5Q29sdW1uQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25GaWx0ZXJCeUNvbHVtbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvblN0b3JlRmlsdGVyQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25TdG9yZUZpbHRlckNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkxvYWRGaWx0ZXJDbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vbkxvYWRGaWx0ZXJDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGVhckZpbHRlckNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uQ2xlYXJGaWx0ZXJDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBmaWx0ZXJzKGNvbHVtbiBmaWx0ZXIsIHF1aWNrZmlsdGVyIGFuZCBmaWx0ZXIgYnVpbGRlcikgYW5kIHJlbG9hZCBkYXRhXG4gICAqIEBwYXJhbSBbdHJpZ2dlckRhdGFzb3VyY2VVcGRhdGVdXG4gICAqL1xuICBjbGVhckZpbHRlcnModHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuY2xlYXJDb2x1bW5GaWx0ZXJzKHRyaWdnZXJEYXRhc291cmNlVXBkYXRlKTtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51ICYmIHRoaXMub1RhYmxlTWVudS5jb2x1bW5GaWx0ZXJPcHRpb24pIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5jb2x1bW5GaWx0ZXJPcHRpb24uc2V0QWN0aXZlKHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlKTtcbiAgICB9XG4gICAgdGhpcy5vbkZpbHRlckJ5Q29sdW1uQ2hhbmdlLmVtaXQoKTtcbiAgICBpZiAodGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC5zZXRWYWx1ZSh2b2lkIDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlckJ1aWxkZXIpIHtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci5jbGVhckZpbHRlcigpO1xuICAgICAgdGhpcy5maWx0ZXJCdWlsZGVyLnRyaWdnZXJSZWxvYWQoKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsZWFyQ29sdW1uRmlsdGVyKGF0dHI6IHN0cmluZywgdHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLmNsZWFyQ29sdW1uRmlsdGVyKGF0dHIsIHRyaWdnZXJEYXRhc291cmNlVXBkYXRlKTtcbiAgICB0aGlzLm9uRmlsdGVyQnlDb2x1bW5DaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChmYWxzZSk7XG4gIH1cblxuICBmaWx0ZXJCeUNvbHVtbihjb2x1bW5WYWx1ZUZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLmFkZENvbHVtbkZpbHRlcihjb2x1bW5WYWx1ZUZpbHRlcik7XG4gICAgdGhpcy5vbkZpbHRlckJ5Q29sdW1uQ2hhbmdlLmVtaXQoKTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbHVtbkZpbHRlcnModHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlLCBjb2x1bW5zQXR0cj86IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLmNsZWFyQ29sdW1uRmlsdGVycyh0cmlnZ2VyRGF0YXNvdXJjZVVwZGF0ZSwgY29sdW1uc0F0dHIpO1xuICAgIHRoaXMub25GaWx0ZXJCeUNvbHVtbkNoYW5nZS5lbWl0KCk7XG4gICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgfVxuXG4gIGlzQ29sdW1uRmlsdGVyYWJsZShjb2x1bW46IE9Db2x1bW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSA/IHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudC5pc0NvbHVtbkZpbHRlcmFibGUoY29sdW1uLmF0dHIpIDogdGhpcy5pc1NlYXJjaGVhYmxlQ29sdW1uKGNvbHVtbik7XG4gIH1cblxuICBpc1NlYXJjaGVhYmxlQ29sdW1uKGNvbHVtbjogT0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaGVhYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4uYXR0cik7XG4gIH1cbiAgaXNDb2x1bW5GaWx0ZXJBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlckJ5QXR0cihjb2x1bW4uYXR0cikpO1xuICB9XG5cbiAgb3BlbkNvbHVtbkZpbHRlckRpYWxvZyhjb2x1bW46IE9Db2x1bW4sIGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihPVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcHJldmlvdXNGaWx0ZXI6IHRoaXMuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlckJ5QXR0cihjb2x1bW4uYXR0ciksXG4gICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICBhY3RpdmVTb3J0RGlyZWN0aW9uOiB0aGlzLmdldFNvcnRGaWx0ZXJDb2x1bW4oY29sdW1uKSxcbiAgICAgICAgdGFibGVEYXRhOiB0aGlzLmRhdGFTb3VyY2UuZ2V0Q3VycmVudERhdGEoKSxcbiAgICAgICAgcHJlbG9hZFZhbHVlczogdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50ID8gdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LnByZWxvYWRWYWx1ZXMgOiB0cnVlLFxuICAgICAgICBtb2RlOiB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgPyB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQubW9kZSA6ICdkZWZhdWx0JyxcbiAgICAgICAgc3RhcnRWaWV3OiB0aGlzLmdldFN0YXJ0Vmlld0ZpbHRlckNvbHVtbihjb2x1bW4pXG4gICAgICB9LFxuICAgICAgbWluV2lkdGg6ICczODBweCcsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ28tZGlhbG9nLWNsYXNzJywgJ28tdGFibGUtZGlhbG9nJ11cbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgc3dpdGNoIChyZXN1bHQpIHtcbiAgICAgICAgY2FzZSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkFDQ0VQVDpcbiAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZUZpbHRlciA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRDb2x1bW5WYWx1ZXNGaWx0ZXIoKTtcbiAgICAgICAgICB0aGlzLmZpbHRlckJ5Q29sdW1uKGNvbHVtblZhbHVlRmlsdGVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkNMRUFSOlxuICAgICAgICAgIGNvbnN0IGNvbCA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5jb2x1bW47XG4gICAgICAgICAgdGhpcy5jbGVhckNvbHVtbkZpbHRlcihjb2wuYXR0cik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uU29ydEZpbHRlclZhbHVlc0NoYW5nZS5zdWJzY3JpYmUoc29ydGVkRmlsdGVyYWJsZUNvbHVtbiA9PiB7XG4gICAgICAvLyBndWFyZGFyIGVuIGxvY2Fsc3RvcmFnZSBlbCBjYW1iaW9cbiAgICAgIHRoaXMuc3RvcmVGaWx0ZXJDb2x1bW5zKHNvcnRlZEZpbHRlcmFibGVDb2x1bW4pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RvcmVGaWx0ZXJDb2x1bW5zKHNvcnRDb2x1bW5GaWx0ZXI6IE9GaWx0ZXJDb2x1bW4pIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICAvLyBpZiBleGlzdHMgaW4gc3RhdGUgdGhlbiB1cGRhdGVkIHNvcnQgdmFsdWVcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuZmlsdGVyQ29sdW1ucy5maW5kKHggPT4geC5hdHRyID09PSBzb3J0Q29sdW1uRmlsdGVyLmF0dHIpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGZpbHRlckNvbHVtbikpIHtcbiAgICAgICAgZmlsdGVyQ29sdW1uLnNvcnQgPSBzb3J0Q29sdW1uRmlsdGVyLnNvcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlbHNlIGV4aXN0cyBpbiBzdGF0ZSB0aGVuIGFkZGVkIGZpbHRlciBjb2x1bW5cbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zLnB1c2goc29ydENvbHVtbkZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucyA9IHRoaXMuZmlsdGVyQ29sdW1ucztcbiAgfVxuXG4gIGdldFN0YXJ0Vmlld0ZpbHRlckNvbHVtbihjb2x1bW46IE9Db2x1bW4pOiBzdHJpbmcge1xuICAgIGxldCBzdGFydFZpZXc7XG4gICAgLy8gYXQgZmlyc3QsIGdldCBzdGF0ZSBpbiBsb2NhbHN0b3JhZ2VcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICB0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudDogT0ZpbHRlckNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5hdHRyID09PSBjb2x1bW4uYXR0cikge1xuICAgICAgICAgIHN0YXJ0VmlldyA9IGVsZW1lbnQuc3RhcnRWaWV3O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHN0YXJ0VmlldykgJiYgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICBzdGFydFZpZXcgPSB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuZ2V0U3RhcnRWaWV3VmFsdWVPZkZpbHRlckNvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXJ0VmlldztcbiAgfVxuXG4gIGdldFNvcnRGaWx0ZXJDb2x1bW4oY29sdW1uOiBPQ29sdW1uKTogc3RyaW5nIHtcbiAgICBsZXQgc29ydENvbHVtbjtcbiAgICAvLyBhdCBmaXJzdCwgZ2V0IHN0YXRlIGluIGxvY2Fsc3RvcmFnZVxuICAgIGlmICh0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlckNvbCA9IHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucy5maW5kKChlbGVtZW50OiBPRmlsdGVyQ29sdW1uKSA9PiBlbGVtZW50LmF0dHIgPT09IGNvbHVtbi5hdHRyKTtcbiAgICAgIGlmIChmaWx0ZXJDb2wpIHtcbiAgICAgICAgc29ydENvbHVtbiA9IGZpbHRlckNvbC5zb3J0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIG5vdCB2YWx1ZSBpbiBsb2NhbHN0b3JhZ2UsIGdldCBzb3J0IHZhbHVlIGluIG8tdGFibGUtY29sdW1uLWZpbHRlci1jb2x1bW4gY29tcG9uZW50XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChzb3J0Q29sdW1uKSAmJiB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQpIHtcbiAgICAgIHNvcnRDb2x1bW4gPSB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuZ2V0U29ydFZhbHVlT2ZGaWx0ZXJDb2x1bW4oY29sdW1uLmF0dHIpO1xuICAgIH1cblxuICAgIC8vIGlmIGVpdGhlciB2YWx1ZSBpbiBvLXRhYmxlLWNvbHVtbi1maWx0ZXItY29sdW1uIG9yIGxvY2Fsc3RvcmFnZSwgZ2V0IHNvcnQgdmFsdWUgaW4gc29ydENvbEFycmF5XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChzb3J0Q29sdW1uKSAmJiB0aGlzLnNvcnRDb2xBcnJheS5maW5kKHggPT4geC5jb2x1bW5OYW1lID09PSBjb2x1bW4uYXR0cikpIHtcbiAgICAgIHNvcnRDb2x1bW4gPSB0aGlzLmlzQ29sdW1uU29ydEFjdGl2ZShjb2x1bW4pID8gJ2FzYycgOiAnZGVzYyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRDb2x1bW47XG4gIH1cblxuICBnZXQgZGlzYWJsZVRhYmxlTWVudUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5wZXJtaXNzaW9ucyAmJiB0aGlzLnBlcm1pc3Npb25zLm1lbnUgJiYgdGhpcy5wZXJtaXNzaW9ucy5tZW51LmVuYWJsZWQgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBzaG93VGFibGVNZW51QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBlcm1pc3Npb25IaWRkZW4gPSAhISh0aGlzLnBlcm1pc3Npb25zICYmIHRoaXMucGVybWlzc2lvbnMubWVudSAmJiB0aGlzLnBlcm1pc3Npb25zLm1lbnUudmlzaWJsZSA9PT0gZmFsc2UpO1xuICAgIGlmIChwZXJtaXNzaW9uSGlkZGVuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHN0YXRpY09wdCA9IHRoaXMuc2VsZWN0QWxsQ2hlY2tib3ggfHwgdGhpcy5leHBvcnRCdXR0b24gfHwgdGhpcy5zaG93Q29uZmlndXJhdGlvbk9wdGlvbiB8fCB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5QnV0dG9uIHx8ICh0aGlzLnNob3dGaWx0ZXJPcHRpb24gJiYgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50ICE9PSB1bmRlZmluZWQpO1xuICAgIHJldHVybiBzdGF0aWNPcHQgfHwgdGhpcy50YWJsZU9wdGlvbnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHNldE9UYWJsZUluc2VydGFibGVSb3codGFibGVJbnNlcnRhYmxlUm93OiBPVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50KSB7XG4gICAgY29uc3QgaW5zZXJ0UGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRBY3Rpb25QZXJtaXNzaW9ucyhQZXJtaXNzaW9uc1V0aWxzLkFDVElPTl9JTlNFUlQpO1xuICAgIGlmIChpbnNlcnRQZXJtLnZpc2libGUpIHtcbiAgICAgIHRhYmxlSW5zZXJ0YWJsZVJvdy5lbmFibGVkID0gaW5zZXJ0UGVybS5lbmFibGVkO1xuICAgICAgdGhpcy5vVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50ID0gdGFibGVJbnNlcnRhYmxlUm93O1xuICAgICAgdGhpcy5zaG93Rmlyc3RJbnNlcnRhYmxlUm93ID0gdGhpcy5vVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmlzRmlyc3RSb3coKTtcbiAgICAgIHRoaXMuc2hvd0xhc3RJbnNlcnRhYmxlUm93ID0gIXRoaXMuc2hvd0ZpcnN0SW5zZXJ0YWJsZVJvdztcbiAgICAgIHRoaXMub1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pbml0aWFsaXplRWRpdG9ycygpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyU2VsZWN0aW9uQW5kRWRpdGluZyhjbGVhclNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAoY2xlYXJTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKG9Db2x1bW4gPT4gb0NvbHVtbi5lZGl0aW5nKVxuICAgICAgLmZvckVhY2gob0NvbHVtbiA9PiB7XG4gICAgICAgIG9Db2x1bW4uZWRpdGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tTZWxlY3RlZEl0ZW1EYXRhKCkge1xuICAgIHRoaXMudHJpZ2dlclNlbGVjdGlvbkV2ZW50cyA9IGZhbHNlO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLnNlbGVjdGlvbikgJiYgdGhpcy5zdGF0ZS5zZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zdGF0ZS5zZWxlY3Rpb24uZm9yRWFjaChzZWxlY3RlZEl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1LZXlzID0gT2JqZWN0LmtleXMoc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgLy8gZmluZGluZyBzZWxlY3RlZCBpdGVtIGRhdGEgaW4gdGhlIHRhYmxlIHJlbmRlcmVkIGRhdGFcbiAgICAgICAgY29uc3QgZm91bmRJdGVtID0gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YS5maW5kKGRhdGEgPT5cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1LZXlzLmV2ZXJ5KGtleSA9PiBkYXRhW2tleV0gPT09IHNlbGVjdGVkSXRlbVtrZXldKVxuICAgICAgICApO1xuICAgICAgICBpZiAoZm91bmRJdGVtICYmICF0aGlzLmlzUm93U2VsZWN0ZWQoZm91bmRJdGVtKSkge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoZm91bmRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlclNlbGVjdGlvbkV2ZW50cyA9IHRydWU7XG4gIH1cblxuICB1c2VEZXRhaWxCdXR0b24oY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbHVtbi50eXBlID09PSAnZWRpdEJ1dHRvbkluUm93JyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RldGFpbEJ1dHRvbkluUm93JztcbiAgfVxuXG4gIG9uRGV0YWlsQnV0dG9uQ2xpY2soY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgY2FzZSAnZWRpdEJ1dHRvbkluUm93JzpcbiAgICAgICAgdGhpcy5lZGl0RGV0YWlsKHJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGV0YWlsQnV0dG9uSW5Sb3cnOlxuICAgICAgICB0aGlzLnZpZXdEZXRhaWwocm93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGV0YWlsQnV0dG9uSWNvbihjb2x1bW46IE9Db2x1bW4pIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgY2FzZSAnZWRpdEJ1dHRvbkluUm93JzpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5lZGl0QnV0dG9uSW5Sb3dJY29uO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RldGFpbEJ1dHRvbkluUm93JzpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5kZXRhaWxCdXR0b25JblJvd0ljb247XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdXNlUGxhaW5SZW5kZXIoY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy51c2VEZXRhaWxCdXR0b24oY29sdW1uKSAmJiAhY29sdW1uLnJlbmRlcmVyICYmICghY29sdW1uLmVkaXRvciB8fCAoIWNvbHVtbi5lZGl0aW5nIHx8ICF0aGlzLmlzUm93U2VsZWN0ZWQocm93KSkpO1xuICB9XG5cbiAgdXNlQ2VsbFJlbmRlcmVyKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sdW1uLnJlbmRlcmVyICYmICghY29sdW1uLmVkaXRpbmcgfHwgY29sdW1uLmVkaXRpbmcgJiYgIXRoaXMuaXNSb3dTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIHVzZUNlbGxFZGl0b3IoY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE8gQWRkIGNvbHVtbi5lZGl0b3IgaW5zdGFuY2VvZiBPVGFibGVDZWxsRWRpdG9yQm9vbGVhbkNvbXBvbmVudCB0byBjb25kaXRpb25cbiAgICBpZiAoY29sdW1uLmVkaXRvciAmJiBjb2x1bW4uZWRpdG9yLmF1dG9Db21taXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbi5lZGl0b3IgJiYgY29sdW1uLmVkaXRpbmcgJiYgdGhpcy5pc1Jvd1NlbGVjdGVkKHJvdyk7XG4gIH1cblxuICBpc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9NVUxUSVBMRTtcbiAgfVxuXG4gIGlzU2VsZWN0aW9uTW9kZVNpbmdsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9TSU5HTEU7XG4gIH1cblxuICBpc1NlbGVjdGlvbk1vZGVOb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09IENvZGVzLlNFTEVDVElPTl9NT0RFX05PTkU7XG4gIH1cblxuICBvbkNoYW5nZVBhZ2UoZXZ0OiBQYWdlRXZlbnQpIHtcbiAgICB0aGlzLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZ0LnBhZ2VJbmRleDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBnb2luZ0JhY2sgPSBldnQucGFnZUluZGV4IDwgdGhpcy5jdXJyZW50UGFnZTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZ0LnBhZ2VJbmRleDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnaW5hdG9yLmlzU2hvd2luZ0FsbFJvd3MoZXZ0LnBhZ2VTaXplKSA/IHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIgOiBldnQucGFnZVNpemU7XG5cbiAgICBjb25zdCBvbGRRdWVyeVJvd3MgPSB0aGlzLnF1ZXJ5Um93cztcbiAgICBjb25zdCBjaGFuZ2luZ1BhZ2VTaXplID0gKG9sZFF1ZXJ5Um93cyAhPT0gcGFnZVNpemUpO1xuICAgIHRoaXMucXVlcnlSb3dzID0gcGFnZVNpemU7XG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSBwYWdlU2l6ZTtcblxuICAgIGxldCBuZXdTdGFydFJlY29yZDogbnVtYmVyO1xuICAgIGxldCBxdWVyeUxlbmd0aDogbnVtYmVyO1xuXG4gICAgaWYgKGdvaW5nQmFjayB8fCBjaGFuZ2luZ1BhZ2VTaXplKSB7XG4gICAgICBuZXdTdGFydFJlY29yZCA9ICh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MpO1xuICAgICAgcXVlcnlMZW5ndGggPSB0aGlzLnF1ZXJ5Um93cztcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U3RhcnRSZWNvcmQgPSBNYXRoLm1heCh0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0LCAodGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzKSk7XG4gICAgICBjb25zdCBuZXdFbmRSZWNvcmQgPSBNYXRoLm1pbihuZXdTdGFydFJlY29yZCArIHRoaXMucXVlcnlSb3dzLCB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyKTtcbiAgICAgIHF1ZXJ5TGVuZ3RoID0gTWF0aC5taW4odGhpcy5xdWVyeVJvd3MsIG5ld0VuZFJlY29yZCAtIG5ld1N0YXJ0UmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge1xuICAgICAgb2Zmc2V0OiBuZXdTdGFydFJlY29yZCxcbiAgICAgIGxlbmd0aDogcXVlcnlMZW5ndGhcbiAgICB9O1xuICAgIHRoaXMuZmluaXNoUXVlcnlTdWJzY3JpcHRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBnZXRPQ29sdW1uKGF0dHI6IHN0cmluZyk6IE9Db2x1bW4ge1xuICAgIHJldHVybiB0aGlzLl9vVGFibGVPcHRpb25zID8gdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IGF0dHIpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgaW5zZXJ0UmVjb3JkKHJlY29yZERhdGE6IGFueSwgc3FsVHlwZXM/OiBvYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX0lOU0VSVCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghVXRpbC5pc0RlZmluZWQoc3FsVHlwZXMpKSB7XG4gICAgICBjb25zdCBhbGxTcWxUeXBlcyA9IHRoaXMuZ2V0U3FsVHlwZXMoKTtcbiAgICAgIHNxbFR5cGVzID0ge307XG4gICAgICBPYmplY3Qua2V5cyhyZWNvcmREYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHNxbFR5cGVzW2tleV0gPSBhbGxTcWxUeXBlc1trZXldO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhb1RhYmxlLmluc2VydFF1ZXJ5KHJlY29yZERhdGEsIHNxbFR5cGVzKTtcbiAgfVxuXG4gIHVwZGF0ZVJlY29yZChmaWx0ZXI6IGFueSwgdXBkYXRlRGF0YTogYW55LCBzcWxUeXBlcz86IG9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fVVBEQVRFKSkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgICB9XG4gICAgY29uc3Qgc3FsVHlwZXNBcmcgPSBzcWxUeXBlcyB8fCB7fTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHNxbFR5cGVzKSkge1xuICAgICAgY29uc3QgYWxsU3FsVHlwZXMgPSB0aGlzLmdldFNxbFR5cGVzKCk7XG4gICAgICBPYmplY3Qua2V5cyhmaWx0ZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNBcmdba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZURhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNBcmdba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGFvVGFibGUudXBkYXRlUXVlcnkoZmlsdGVyLCB1cGRhdGVEYXRhLCBzcWxUeXBlc0FyZyk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXRzIGRhdGEgdGFibGVcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldERhdGFBcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYW9UYWJsZS5kYXRhO1xuICB9XG5cblxuICAvKipcbiAgICogU2V0cyBkYXRhIHRhYmxlIHdoZW4gaXMgc3RhdGljIChPTkxZIElOIFRISVMgQ0FTRSlcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHNldERhdGFBcnJheShkYXRhOiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuZGFvVGFibGUpIHtcbiAgICAgIC8vIHJlbW90ZSBwYWdpbmF0aW9uIGhhcyBubyBzZW5zZSB3aGVuIHVzaW5nIHN0YXRpYy1kYXRhXG4gICAgICB0aGlzLnBhZ2VhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLnN0YXRpY0RhdGEgPSBkYXRhO1xuICAgICAgdGhpcy5kYW9UYWJsZS51c2luZ1N0YXRpY0RhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5kYW9UYWJsZS5zZXREYXRhQXJyYXkodGhpcy5zdGF0aWNEYXRhKTtcbiAgICAgIHRoaXMub25EYXRhTG9hZGVkLmVtaXQodGhpcy5kYW9UYWJsZS5kYXRhKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVsZXRlTG9jYWxJdGVtcygpIHtcbiAgICBjb25zdCBkYXRhQXJyYXkgPSB0aGlzLmdldERhdGFBcnJheSgpO1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKTtcbiAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goKHNlbGVjdGVkSXRlbTogYW55KSA9PiB7XG4gICAgICBmb3IgKGxldCBqID0gZGF0YUFycmF5Lmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG4gICAgICAgIGlmIChVdGlsLmVxdWFscyhzZWxlY3RlZEl0ZW0sIGRhdGFBcnJheVtqXSkpIHtcbiAgICAgICAgICBkYXRhQXJyYXkuc3BsaWNlKGosIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIHRoaXMuc2V0RGF0YUFycmF5KGRhdGFBcnJheSk7XG4gIH1cblxuICBpc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLnNvcnRDb2xBcnJheS5maW5kKHNvcnRDID0+IHNvcnRDLmNvbHVtbk5hbWUgPT09IGNvbHVtbi5hdHRyKTtcbiAgICByZXR1cm4gZm91bmQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzQ29sdW1uRGVzY1NvcnRBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLnNvcnRDb2xBcnJheS5maW5kKHNvcnRDID0+IHNvcnRDLmNvbHVtbk5hbWUgPT09IGNvbHVtbi5hdHRyICYmICFzb3J0Qy5hc2NlbmRlbnQpO1xuICAgIHJldHVybiBmb3VuZCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaGFzVGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzRW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhVXRpbC5pc0RlZmluZWQodmFsdWUpIHx8ICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiYgIXZhbHVlKTtcbiAgfVxuXG4gIHNldEZpbHRlcnNDb25maWd1cmF0aW9uKHN0b3JhZ2U6IE9UYWJsZUNvbXBvbmVudFN0YXRlQ2xhc3MgPSB0aGlzLnN0YXRlKSB7XG4gICAgLypcbiAgICAgIENoZWNraW5nIHRoZSBvcmlnaW5hbCBmaWx0ZXJDYXNlU2Vuc2l0aXZlIHdpdGggdGhlIGZpbHRlckNhc2VTZW5zaXRpdmUgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGlmIGZpbHRlckNhc2VTZW5zaXRpdmUgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGlzIGVxdWFscyB0byBvcmlnaW5hbCBmaWx0ZXJDYXNlU2Vuc2l0aXZlIGlucHV0XG4gICAgICBmaWx0ZXJDYXNlU2Vuc2l0aXZlIHdpbGwgYmUgdGhlIHZhbHVlIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAqL1xuICAgIGlmIChzdG9yYWdlLmluaXRpYWxDb25maWd1cmF0aW9uLmZpbHRlckNhc2VTZW5zaXRpdmUgIT09IHRoaXMuZmlsdGVyQ2FzZVNlbnNpdGl2ZSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlID0gdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUgPSBzdG9yYWdlLmhhc093blByb3BlcnR5KCdmaWx0ZXItY2FzZS1zZW5zaXRpdmUnKSA/IHN0b3JhZ2VbJ2ZpbHRlci1jYXNlLXNlbnNpdGl2ZSddIDogdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH1cblxuICAgIGlmIChzdG9yYWdlLmluaXRpYWxDb25maWd1cmF0aW9uLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdCAhPT0gdGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQpIHtcbiAgICAgIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gdGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbmZGaWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQgPSBzdG9yYWdlLmhhc093blByb3BlcnR5KCdmaWx0ZXItY29sdW1uLWFjdGl2ZScpID8gc3RvcmFnZVsnZmlsdGVyLWNvbHVtbi1hY3RpdmUnXSA6IHRoaXMuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0O1xuICAgICAgdGhpcy5pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSBjb25mRmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0IHx8IHRoaXMuc3RhdGUuY29sdW1uVmFsdWVGaWx0ZXJzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHN0b3JhZ2UuY29sdW1uVmFsdWVGaWx0ZXJzKSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmluaXRpYWxpemVDb2x1bW5zRmlsdGVycyh0aGlzLnN0YXRlLmNvbHVtblZhbHVlRmlsdGVycyk7XG4gICAgICB0aGlzLm9uRmlsdGVyQnlDb2x1bW5DaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50LnNldFZhbHVlKHN0b3JhZ2VbJ2ZpbHRlciddKTtcbiAgICAgIChzdG9yYWdlWydvQ29sdW1ucyddIHx8IFtdKS5mb3JFYWNoKChvQ29sRGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4ob0NvbERhdGEuYXR0cik7XG4gICAgICAgIGlmIChvQ29sICYmIG9Db2xEYXRhLmhhc093blByb3BlcnR5KCdzZWFyY2hpbmcnKSkge1xuICAgICAgICAgIG9Db2wuc2VhcmNoaW5nID0gb0NvbERhdGEuc2VhcmNoaW5nO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJCdWlsZGVyICYmIFV0aWwuaXNEZWZpbmVkKHN0b3JhZ2UuZmlsdGVyQnVpbGRlclZhbHVlcykpIHtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci5zZXRGaWx0ZXJWYWx1ZXMoc3RvcmFnZS5maWx0ZXJCdWlsZGVyVmFsdWVzKTtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci50cmlnZ2VyUmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdG9yZUNvbmZpZ3VyYXRpb25DbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vblN0b3JlQ29uZmlndXJhdGlvbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkFwcGx5Q29uZmlndXJhdGlvbkNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uQXBwbHlDb25maWd1cmF0aW9uQ2xpY2tlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5RGVmYXVsdENvbmZpZ3VyYXRpb24oKSB7XG4gICAgdGhpcy5pbml0aWFsaXplUGFyYW1zKCk7XG4gICAgdGhpcy5wYXJzZVZpc2libGVDb2x1bW5zKHRydWUpO1xuICAgIHRoaXMucmVmcmVzaENvbHVtbnNXaWR0aEZyb21PcmlnaW5hbERlZmluaXRpb24oKTtcbiAgICB0aGlzLnJlaW5pdGlhbGl6YXRlUXVpY2tGaWx0ZXJDb2x1bW5zKCk7XG4gICAgdGhpcy5yZXNldFF1ZXJ5Um93cygpO1xuICAgIGNvbnN0IGluaXRpYWxDb25maWdTb3J0Q29sdW1uc0FycmF5ID0gU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnModGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5zb3J0Q29sdW1ucyk7XG4gICAgdGhpcy5yZWluaXRpYWxpemVTb3J0Q29sdW1ucyhpbml0aWFsQ29uZmlnU29ydENvbHVtbnNBcnJheSk7XG4gICAgdGhpcy5vblJlaW5pdGlhbGl6ZS5lbWl0KG51bGwpO1xuICAgIHRoaXMuY2xlYXJGaWx0ZXJzKGZhbHNlKTtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuICByZXNldFF1ZXJ5Um93cygpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5xdWVyeVJvd3MpKSB7XG4gICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24ucXVlcnlSb3dzO1xuICAgIH1cbiAgfVxuICBhcHBseUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbk5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0b3JlZENvbmZpZ3VyYXRpb24gPSB0aGlzLnN0YXRlLmdldFN0b3JlZENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbk5hbWUpO1xuICAgIGlmIChzdG9yZWRDb25maWd1cmF0aW9uKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gc3RvcmVkQ29uZmlndXJhdGlvblsnc3RvcmVkLXByb3BlcnRpZXMnXSB8fCBbXTtcblxuICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgICAgICAgIGNhc2UgJ3NvcnQtY29sdW1ucyc6XG4gICAgICAgICAgICB0aGlzLnJlaW5pdGlhbGl6ZVNvcnRDb2x1bW5zKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdvQ29sdW1ucy1kaXNwbGF5JzpcbiAgICAgICAgICAgIHRoaXMucGFyc2VWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbHVtbnNXaWR0aEZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3F1aWNrLWZpbHRlcic6XG4gICAgICAgICAgY2FzZSAnY29sdW1ucy1maWx0ZXInOlxuICAgICAgICAgIGNhc2UgJ2ZpbHRlci1idWlsZGVyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyc0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2dyb3VwZWQtY29sdW1ucyc6XG4gICAgICAgICAgICB0aGlzLnBhcnNlR3JvdXBlZENvbHVtbnMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3BhZ2UnOlxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMuc3RhdGUuY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUucXVlcnlSb3dzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGl0bGVBbGlnbkNsYXNzKG9Db2w6IE9Db2x1bW4pIHtcblxuICAgIGNvbnN0IGhhc1RpdGxlQWxpZ24gPSBVdGlsLmlzRGVmaW5lZChvQ29sLmRlZmluaXRpb24pICYmIFV0aWwuaXNEZWZpbmVkKG9Db2wuZGVmaW5pdGlvbi50aXRsZUFsaWduKTtcbiAgICBjb25zdCBhdXRvQWxpZ24gPSAodGhpcy5hdXRvQWxpZ25UaXRsZXMgJiYgIWhhc1RpdGxlQWxpZ24pIHx8IChoYXNUaXRsZUFsaWduICYmIG9Db2wuZGVmaW5pdGlvbi50aXRsZUFsaWduID09PSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fQVVUTyk7XG4gICAgaWYgKCFhdXRvQWxpZ24pIHtcbiAgICAgIHJldHVybiBvQ29sLmdldFRpdGxlQWxpZ25DbGFzcygpO1xuICAgIH1cblxuICAgIGxldCBhbGlnbiA9IHRoaXMuZ2V0Q2VsbEFsaWduQ2xhc3Mob0NvbCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGFsaWduKSAmJiBhbGlnbi5sZW5ndGggPiAwKSB7XG4gICAgICBhbGlnbiA9IGFsaWduLnN1YnN0cmluZygyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoIChvQ29sLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgYWxpZ24gPSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fQ0VOVEVSO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICBjYXNlICdyZWFsJzpcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XG4gICAgICAgICAgYWxpZ24gPSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fRU5EO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhbGlnbiA9IENvZGVzLkNPTFVNTl9USVRMRV9BTElHTl9TVEFSVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsaWduO1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VsbEFsaWduQ2xhc3MoY29sdW1uOiBPQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29sdW1uLmRlZmluaXRpb24pICYmIFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5kZWZpbml0aW9uLmNvbnRlbnRBbGlnbikgPyAnby0nICsgY29sdW1uLmRlZmluaXRpb24uY29udGVudEFsaWduIDogJyc7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXRHcm91cEhlYWRlckNlbGxBbGlnbkNsYXNzKGNvbHVtbjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzTmFtZUFycmF5ID0gW107XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uc3Vic3RyKCdncm91cEhlYWRlci0nLmxlbmd0aCkpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChvQ29sKSkge1xuICAgICAgY2xhc3NOYW1lQXJyYXkucHVzaCh0aGlzLmdldENlbGxBbGlnbkNsYXNzKG9Db2wpKTtcbiAgICAgIGNsYXNzTmFtZUFycmF5LnB1c2gob0NvbC5jbGFzc05hbWUgPyBvQ29sLmNsYXNzTmFtZSA6ICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTmFtZUFycmF5O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZERlZmF1bHRSb3dCdXR0b25zKCkge1xuICAgIC8vIGNoZWNrIHBlcm1pc3Npb25zXG4gICAgaWYgKHRoaXMuZWRpdEJ1dHRvbkluUm93KSB7XG4gICAgICB0aGlzLmFkZEJ1dHRvbkluUm93KCdlZGl0QnV0dG9uSW5Sb3cnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGV0YWlsQnV0dG9uSW5Sb3cpIHtcbiAgICAgIHRoaXMuYWRkQnV0dG9uSW5Sb3coJ2RldGFpbEJ1dHRvbkluUm93Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFkZEJ1dHRvbkluUm93KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbERlZjogT0NvbHVtbiA9IHRoaXMuY3JlYXRlT0NvbHVtbihuYW1lLCB0aGlzKTtcbiAgICBjb2xEZWYudHlwZSA9IG5hbWU7XG4gICAgY29sRGVmLnZpc2libGUgPSB0cnVlO1xuICAgIGNvbERlZi5zZWFyY2hhYmxlID0gZmFsc2U7XG4gICAgY29sRGVmLm9yZGVyYWJsZSA9IGZhbHNlO1xuICAgIGNvbERlZi5yZXNpemFibGUgPSBmYWxzZTtcbiAgICBjb2xEZWYuZ3JvdXBhYmxlID0gZmFsc2U7XG4gICAgY29sRGVmLnRpdGxlID0gdW5kZWZpbmVkO1xuICAgIGNvbERlZi53aWR0aCA9ICc0OHB4JztcbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMucHVzaChuYW1lKTtcbiAgfVxuXG4gIGdldCBoZWFkZXJIZWlnaHQoKSB7XG4gICAgbGV0IGhlaWdodCA9IDA7XG4gICAgaWYgKHRoaXMudGFibGVIZWFkZXJFbCAmJiB0aGlzLnRhYmxlSGVhZGVyRWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgaGVpZ2h0ICs9IHRoaXMudGFibGVIZWFkZXJFbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGVUb29sYmFyRWwgJiYgdGhpcy50YWJsZVRvb2xiYXJFbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBoZWlnaHQgKz0gdGhpcy50YWJsZVRvb2xiYXJFbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIGlzRGV0YWlsTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXRhaWxNb2RlICE9PSBDb2Rlcy5ERVRBSUxfTU9ERV9OT05FO1xuICB9XG5cbiAgY29weUFsbCgpIHtcbiAgICBVdGlsLmNvcHlUb0NsaXBib2FyZChKU09OLnN0cmluZ2lmeSh0aGlzLmdldFJlbmRlcmVkVmFsdWUoKSkpO1xuICB9XG5cbiAgY29weVNlbGVjdGlvbigpIHtcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5kYXRhU291cmNlLmdldFJlbmRlcmVkRGF0YSh0aGlzLmdldFNlbGVjdGVkSXRlbXMoKSk7XG4gICAgVXRpbC5jb3B5VG9DbGlwYm9hcmQoSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWRJdGVtcykpO1xuICB9XG5cblxuICAvKipcbiAgICogVHJpZ2dlcnMgbmF2aWdhdGlvbiB0byBpdGVtIGRldGFpbCwgcmVjZWl2aW5nIGl0ZW0gZGF0YVxuICAgKiBAcGFyYW0gaXRlbVxuICAgKiBAcmV0dXJucyBkZXRhaWxcbiAgICovXG4gIHZpZXdEZXRhaWwoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oJ2RldGFpbCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLnZpZXdEZXRhaWwoaXRlbSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBuYXZpZ2F0aW9uIHRvIGl0ZW0gZWRpdGlvbiwgcmVjZWl2aW5nIGl0ZW0gZGF0YVxuICAgKiBAcGFyYW0gaXRlbVxuICAgKiBAcmV0dXJucyBkZXRhaWxcbiAgICovXG4gIGVkaXREZXRhaWwoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oJ2VkaXQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5lZGl0RGV0YWlsKGl0ZW0pO1xuICB9XG5cbiAgZ2V0T0NvbHVtbkZyb21UaCh0aDogYW55KTogT0NvbHVtbiB7XG4gICAgbGV0IHJlc3VsdDogT0NvbHVtbjtcbiAgICBjb25zdCBjbGFzc0xpc3Q6IGFueVtdID0gQXJyYXkuZnJvbSgodGggYXMgRWxlbWVudCkuY2xhc3NMaXN0IHx8IFtdKTtcbiAgICBjb25zdCBjb2x1bW5DbGFzcyA9IGNsYXNzTGlzdC5maW5kKChjbGFzc05hbWU6IHN0cmluZykgPT4gKGNsYXNzTmFtZS5zdGFydHNXaXRoKCdtYXQtY29sdW1uLScpKSk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbkNsYXNzKSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5nZXRPQ29sdW1uKGNvbHVtbkNsYXNzLnN1YnN0cignbWF0LWNvbHVtbi0nLmxlbmd0aCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0T0NvbHVtbkZyb21Hcm91cEhlYWRlckNvbHVtbihhdHRyOiBzdHJpbmcpOiBPQ29sdW1uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPQ29sdW1uKGF0dHIuc3Vic3RyKCdncm91cEhlYWRlci0nLmxlbmd0aCkpO1xuICB9XG5cbiAgZ2V0VGhXaWR0aEZyb21PQ29sdW1uKG9Db2x1bW46IE9Db2x1bW4pOiBhbnkge1xuICAgIGxldCB3aWR0aENvbHVtbjogbnVtYmVyO1xuICAgIGNvbnN0IHRoQXJyYXkgPSB0aGlzLnRhYmxlSGVhZGVyRWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoQXJyYXkubGVuZ3RoICYmICFVdGlsLmlzRGVmaW5lZCh3aWR0aENvbHVtbik7IGkrKykge1xuICAgICAgY29uc3QgdGggPSB0aEFycmF5W2ldO1xuICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdGguY2xhc3NMaXN0O1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjbGFzc0xpc3QubGVuZ3RoICYmICFVdGlsLmlzRGVmaW5lZCh3aWR0aENvbHVtbik7IGorKykge1xuICAgICAgICBpZiAoY2xhc3NMaXN0W2pdID09PSAnbWF0LWNvbHVtbi0nICsgb0NvbHVtbi5hdHRyKSB7XG4gICAgICAgICAgd2lkdGhDb2x1bW4gPSB0aC5jbGllbnRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd2lkdGhDb2x1bW47XG4gIH1cblxuICBnZXRDb2x1bW5JbnNlcnRhYmxlKG5hbWUpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lICsgdGhpcy5nZXRTdWZmaXhDb2x1bW5JbnNlcnRhYmxlKCk7XG4gIH1cblxuICBpc1Jvd1NlbGVjdGVkKHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgcmV0dXJuICF0aGlzLmlzU2VsZWN0aW9uTW9kZU5vbmUoKSAmJiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5zb21lKChlbGVtZW50OiBhbnkpID0+IGtleXMuZXZlcnkoa2V5ID0+IHJvd1trZXldID09PSBlbGVtZW50W2tleV0pKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5XaWR0aEZyb21TdGF0ZShjb2xEZWY6IE9Db2x1bW4pOiBzdHJpbmcge1xuICAgIC8vMS4gQnkgZGVmYXVsdCwgc2V0IHdpZHRoIGRlZmluaXRpb25cbiAgICBsZXQgY29sdW1uV2lkdGggPSBjb2xEZWYuZGVmaW5pdGlvbiAmJiBjb2xEZWYuZGVmaW5pdGlvbi53aWR0aCA/IGNvbERlZi5kZWZpbml0aW9uLndpZHRoIDogdm9pZCAwO1xuICAgIGNvbnN0IHN0b3JlZERhdGEgPSB0aGlzLnN0YXRlLmdldENvbHVtbkRpc3BsYXkoY29sRGVmKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoc3RvcmVkRGF0YSkgJiYgVXRpbC5pc0RlZmluZWQoc3RvcmVkRGF0YS53aWR0aCkpIHtcbiAgICAgIC8vMi4gU2V0IHdpZHRoIGlmIHRoZSB3aWR0aCBpcyBzdG9yZWRcbiAgICAgIGNvbHVtbldpZHRoID0gc3RvcmVkRGF0YS53aWR0aDtcbiAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5zIHNhdmVkIGluIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb25cbiAgICAgIC8vIGluIHRoZSBsb2NhbCBzdG9yYWdlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFN0b3JlZERhdGEgPSB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLmdldENvbHVtbkRpc3BsYXkoY29sRGVmKTtcbiAgICAgICAgLy8gSWYgb3JpZ2luYWwgd2lkdGggY2hhbmdlZCB0aGVuIHRoZSB3aWR0aCBpcyByZXNldGVkIHdpdGggdGhpcyB2YWx1ZVxuICAgICAgICBpZiAoaW5pdGlhbFN0b3JlZERhdGEgJiYgaW5pdGlhbFN0b3JlZERhdGEud2lkdGggJiYgY29sRGVmLmRlZmluaXRpb24ub3JpZ2luYWxXaWR0aCkge1xuICAgICAgICAgIGlmIChpbml0aWFsU3RvcmVkRGF0YS53aWR0aCAhPT0gY29sRGVmLmRlZmluaXRpb24ub3JpZ2luYWxXaWR0aCkge1xuICAgICAgICAgICAgY29sdW1uV2lkdGggPSBjb2xEZWYuZGVmaW5pdGlvbi5vcmlnaW5hbFdpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sdW1uV2lkdGg7XG4gIH1cblxuICByZWZyZXNoQ29sdW1uc1dpZHRoRnJvbUxvY2FsU3RvcmFnZSgpIHtcbiAgICB0aGlzLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKHggPT4ge1xuICAgICAgeC53aWR0aCA9IHRoaXMuZ2V0Q29sdW1uV2lkdGhGcm9tU3RhdGUoeCk7XG4gICAgfSk7XG4gIH1cblxuICByZWZyZXNoQ29sdW1uc1dpZHRoRnJvbU9yaWdpbmFsRGVmaW5pdGlvbigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUpLmZvckVhY2goYyA9PiB7XG4gICAgICAgIGMud2lkdGggPSBjLkRPTVdpZHRoID0gdm9pZCAwO1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQoYy5kZWZpbml0aW9uKSAmJiBVdGlsLmlzRGVmaW5lZChjLmRlZmluaXRpb24ud2lkdGgpKSB7XG4gICAgICAgICAgYy53aWR0aCA9IGMuZGVmaW5pdGlvbi53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjLnNldFJlbmRlcldpZHRoKHRoaXMuaG9yaXpvbnRhbFNjcm9sbCwgdGhpcy5nZXRDbGllbnRXaWR0aENvbHVtbihjKSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPQ29sdW1uKGF0dHI/OiBzdHJpbmcsIHRhYmxlPzogT1RhYmxlQ29tcG9uZW50LCBjb2x1bW4/OiBPVGFibGVDb2x1bW5Db21wb25lbnQgJiBPVGFibGVDb2x1bW5DYWxjdWxhdGVkQ29tcG9uZW50KTogT0NvbHVtbiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgT0NvbHVtbigpO1xuICAgIGlmIChhdHRyKSB7XG4gICAgICBpbnN0YW5jZS5hdHRyID0gYXR0cjtcbiAgICB9XG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICBpbnN0YW5jZS5zZXREZWZhdWx0UHJvcGVydGllcyh7XG4gICAgICAgIG9yZGVyYWJsZTogdGhpcy5vcmRlcmFibGUsXG4gICAgICAgIHJlc2l6YWJsZTogdGhpcy5yZXNpemFibGUsXG4gICAgICAgIGdyb3VwYWJsZTogdGhpcy5ncm91cGFibGVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICBpbnN0YW5jZS5zZXRDb2x1bW5Qcm9wZXJ0aWVzKGNvbHVtbik7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9UYWJsZUJ1dHRvbnMoYXJnOiBPVGFibGVCdXR0b25zKSB7XG4gICAgdGhpcy5vVGFibGVCdXR0b25zID0gYXJnO1xuICAgIGlmICh0aGlzLm9UYWJsZUJ1dHRvbnMgJiYgdGhpcy50YWJsZUJ1dHRvbnMgJiYgdGhpcy50YWJsZUJ1dHRvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5vVGFibGVCdXR0b25zLnJlZ2lzdGVyQnV0dG9ucyh0aGlzLnRhYmxlQnV0dG9ucy50b0FycmF5KCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDbGllbnRXaWR0aENvbHVtbihjb2w6IE9Db2x1bW4pOiBudW1iZXIge1xuICAgIHJldHVybiBjb2wuRE9NV2lkdGggfHwgdGhpcy5nZXRUaFdpZHRoRnJvbU9Db2x1bW4oY29sKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNaW5XaWR0aENvbHVtbihjb2w6IE9Db2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBVdGlsLmV4dHJhY3RQaXhlbHNWYWx1ZShjb2wubWluV2lkdGgsIENvZGVzLkRFRkFVTFRfQ09MVU1OX01JTl9XSURUSCkgKyAncHgnO1xuICB9XG5cbiAgc2hvd0V4cGFuZGFibGVSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMudGFibGVSb3dFeHBhbmRhYmxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGVuYWJsZSB2aXJ0dWFsIHNjcm9sbFxuICAgKi9cbiAgZ2V0IGVuYWJsZWRWaXJ0dWFsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpcnR1YWxTY3JvbGwgJiYgIXRoaXMuc2hvd0V4cGFuZGFibGVSb3coKSAmJiB0aGlzLmdyb3VwZWRDb2x1bW5zQXJyYXkubGVuZ3RoID09PSAwO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgZ3JvdXBlZCBjb2x1bW5zXG4gICAqL1xuICBwYXJzZUdyb3VwZWRDb2x1bW5zKCkge1xuICAgIGxldCByZXN1bHQgPSB0aGlzLnN0YXRlLmdyb3VwZWRDb2x1bW5zIHx8IHRoaXMub3JpZ2luYWxHcm91cGVkQ29sdW1uc0FycmF5O1xuICAgIGlmICh0aGlzLnN0YXRlLmdyb3VwZWRDb2x1bW5zICYmIHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uZ3JvdXBlZENvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLmdyb3VwZWRDb2x1bW5zXG4gICAgICAgIC5maWx0ZXIoeCA9PiAhdGhpcy5vcmlnaW5hbEdyb3VwZWRDb2x1bW5zQXJyYXkuaW5jbHVkZXMoeCkpO1xuXG4gICAgICBpZiAoZGlmZmVyZW5jZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMub3JpZ2luYWxHcm91cGVkQ29sdW1uc0FycmF5O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldEdyb3VwQ29sdW1ucyhyZXN1bHQpO1xuICB9XG4gIHBhcnNlR3JvdXBlZENvbHVtblR5cGVzKCkge1xuICAgIHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzID0gdGhpcy5zdGF0ZS5ncm91cGVkQ29sdW1uVHlwZXM7XG4gIH1cblxuICAvKipcbiAgICogR3JvdXBzIGJ5IGNvbHVtblxuICAgKiBAcGFyYW0gY29sdW1uXG4gICAqL1xuICBncm91cEJ5Q29sdW1uKGNvbHVtbjogT0NvbHVtbiwgdHlwZT86IHN0cmluZykge1xuICAgIHRoaXMuY2hlY2tHcm91cEJ5Q29sdW1uKGNvbHVtbi5hdHRyLCB0cnVlKTtcbiAgICBpZiAodHlwZSkge1xuICAgICAgdGhpcy51cGRhdGVHcm91cGVkQ29sdW1uVHlwZXMoY29sdW1uLmF0dHIsIHRydWUsIHR5cGUpO1xuICAgIH1cbiAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlR3JvdXBlZENvbHVtbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmdyb3VwIGJ5IGNvbHVtblxuICAgKiBAcGFyYW0gY29sdW1uXG4gICAqL1xuICB1bkdyb3VwQnlDb2x1bW4oY29sdW1uOiBPQ29sdW1uKSB7XG4gICAgdGhpcy5jaGVja0dyb3VwQnlDb2x1bW4oY29sdW1uLmF0dHIsIGZhbHNlKTtcbiAgICB0aGlzLnVwZGF0ZUdyb3VwZWRDb2x1bW5UeXBlcyhjb2x1bW4uYXR0ciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS51cGRhdGVHcm91cGVkQ29sdW1ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuZ3JvdXAgYnkgYWxsIGNvbHVtbnNcbiAgICovXG4gIHVuR3JvdXBCeUFsbENvbHVtbnMoKSB7XG4gICAgdGhpcy5zZXRHcm91cENvbHVtbnMoW10pO1xuICAgIHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzID0gW107XG4gIH1cblxuICBzZXRHcm91cENvbHVtbnModmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5ncm91cGVkQ29sdW1uc0FycmF5ID0gdmFsdWU7XG4gICAgdGhpcy5kYXRhU291cmNlLnVwZGF0ZUdyb3VwZWRDb2x1bW5zKCk7XG4gIH1cbiAgc2V0R3JvdXBlZENvbHVtblR5cGVzKHZhbHVlOiBPR3JvdXBlZENvbHVtblR5cGVzW10pIHtcbiAgICB0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcyA9IHZhbHVlO1xuICB9XG4gIGNoZWNrR3JvdXBCeUNvbHVtbihmaWVsZDogc3RyaW5nLCBhZGQ6IGJvb2xlYW4pIHtcbiAgICBsZXQgZm91bmQgPSBudWxsO1xuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheSkge1xuICAgICAgaWYgKGNvbHVtbiA9PT0gZmllbGQpIHtcbiAgICAgICAgZm91bmQgPSB0aGlzLmdyb3VwZWRDb2x1bW5zQXJyYXkuaW5kZXhPZihjb2x1bW4sIDApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZm91bmQgIT0gbnVsbCAmJiBmb3VuZCA+PSAwKSB7XG4gICAgICBpZiAoIWFkZCkge1xuICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zQXJyYXkuc3BsaWNlKGZvdW5kLCAxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGFkZCkge1xuICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zQXJyYXkucHVzaChmaWVsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBpdGVtIGlzIGdyb3VwXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcGFyYW0gaXRlbVxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGdyb3VwXG4gICAqL1xuICBpc0dyb3VwKGluZGV4LCBpdGVtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBpdGVtIGlzIG5vdCBncm91cFxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICogQHBhcmFtIGl0ZW1cbiAgICogQHJldHVybnMgdHJ1ZSBpZiBub3QgZ3JvdXBcbiAgICovXG4gIGlzTm90R3JvdXAoaW5kZXgsIGl0ZW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIShpdGVtIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdyk7XG4gIH1cblxuICBnZXRMYXN0R3JvdXBzKCkge1xuICAgIC8vIEdldCBsYXN0IGdyb3Vwc1xuICAgIGNvbnN0IHNjb3JlcyA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGE7XG4gICAgY29uc3QgbWF4TGV2ZWwgPSBzY29yZXMucmVkdWNlKChhY2MsIGN1cnIpID0+IGN1cnIubGV2ZWwgPiBhY2MgPyBjdXJyLmxldmVsIDogYWNjLCAwKTtcbiAgICBjb25zdCBtYXhMZXZlbFJlbmRlcmVkRGF0YSA9IHNjb3Jlcy5yZWR1Y2UoKHIsIG8pID0+IG8ubGV2ZWwgPT09IG1heExldmVsID8gWy4uLnIsIG9dIDogciwgW10pO1xuICAgIHJldHVybiBtYXhMZXZlbFJlbmRlcmVkRGF0YS5sZW5ndGg7XG4gIH1cblxuICBncm91cEhlYWRlckNsaWNrKHJvdzogT1RhYmxlR3JvdXBlZFJvdykge1xuICAgIHRoaXMuZGF0YVNvdXJjZS50b2dnbGVHcm91cEJ5Q29sdW1uKHJvdyk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5zdGFuY2VPZk9UYWJsZUNlbGxSZW5kZXJlclNlcnZpY2VDb21wb25lbnQocmVuZGVyZXI6IE9CYXNlVGFibGVDZWxsUmVuZGVyZXIpIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQocmVuZGVyZXIpICYmIChyZW5kZXJlciBhcyBhbnkpLm9uRGF0YUxvYWRlZCAmJiAocmVuZGVyZXIgYXMgYW55KS5xdWVyeUFsbERhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjb2x1bW4gZGF0YSBieSBhdHRyXG4gICAqIEBwYXJhbSBhdHRyXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHJldHVybnMgY29sdW1uIGRhdGEgYnkgYXR0clxuICAgKi9cbiAgZ2V0Q29sdW1uRGF0YUJ5QXR0cihhdHRyLCByb3c6IGFueSk6IGFueSB7XG4gICAgbGV0IG9wZXJhdGlvbiA9IG51bGw7XG4gICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzLmxlbmd0aCAhPSAwICYmIHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzLmZpbmRJbmRleChjb2x1bW4gPT4gY29sdW1uLmF0dHIgPT0gYXR0cikgIT0gLTEpIHtcbiAgICAgIG9wZXJhdGlvbiA9IHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzW3RoaXMuZ3JvdXBlZENvbHVtblR5cGVzLmZpbmRJbmRleChjb2x1bW4gPT4gY29sdW1uLmF0dHIgPT0gYXR0cildLnR5cGU7XG4gICAgfVxuICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4oYXR0cik7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChvQ29sKSkge1xuICAgICAgcmV0dXJuIHJvd1thdHRyXTtcbiAgICB9XG4gICAgY29uc3QgdXNlUmVuZGVyZXIgPSBvQ29sLnJlbmRlcmVyICYmIG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGE7XG4gICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdXNlUmVuZGVyZXIgPyBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhKHJvd1tvQ29sLmF0dHJdLCByb3cpIDogcm93W29Db2wuYXR0cl07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudChyb3dbb0NvbC5hdHRyXSk7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXRDdXJyZW50TGFuZygpO1xuICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgICAgY2FzZSBcIllFQVJcIjogcmV0dXJuIGRhdGUueWVhcigpO1xuICAgICAgICBjYXNlIFwiTU9OVEhcIjogcmV0dXJuIG1vbWVudCgpLmxvY2FsZShsYW5ndWFnZSkubW9udGgoZGF0ZS5tb250aCgpKS5mb3JtYXQoXCJNTU1NXCIpO1xuICAgICAgICBjYXNlIFwiWUVBUl9NT05USFwiOiByZXR1cm4gbW9tZW50KCkubG9jYWxlKGxhbmd1YWdlKS5tb250aChkYXRlLm1vbnRoKCkpLnllYXIoZGF0ZS55ZWFyKCkpLmZvcm1hdChcIk1NTU0sIFlZWVlcIik7XG4gICAgICAgIGNhc2UgXCJZRUFSX01PTlRIX0RBWVwiOiByZXR1cm4gdXNlUmVuZGVyZXIgPyBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhKHJvd1tvQ29sLmF0dHJdLCByb3cpIDogcm93W29Db2wuYXR0cl07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHVwZGF0ZUdyb3VwZWRDb2x1bW5UeXBlcyhhdHRyOiBzdHJpbmcsIGFkZDogYm9vbGVhbiwgb3BlcmF0aW9uPzogc3RyaW5nKSB7XG4gICAgbGV0IGdyb3VwZWRDb2x1bW5zOiBPR3JvdXBlZENvbHVtblR5cGVzW10gPSBbXTtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcy5maW5kSW5kZXgoY29sdW1uID0+IGNvbHVtbi5hdHRyID09IGF0dHIpO1xuICAgIGlmIChpbmRleCAhPSAtMSkge1xuICAgICAgaWYgKCFhZGQpIHtcbiAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzLnB1c2goeyBcImF0dHJcIjogYXR0ciwgXCJ0eXBlXCI6IG9wZXJhdGlvbiB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5ncm91cGVkQ29sdW1uVHlwZXMgPSBncm91cGVkQ29sdW1ucztcbiAgfVxuXG4gIGdldENsYXNzTmFtZUdyb3VwSGVhZGVyKHJvdzogT1RhYmxlR3JvdXBlZFJvdyk6IHN0cmluZyB7XG4gICAgbGV0IGNsYXNzTmFtZSA9ICcnO1xuICAgIGlmIChyb3cubGV2ZWwgPD0gMTApIHtcbiAgICAgIGNsYXNzTmFtZSA9ICdvLXRhYmxlLWdyb3VwLXJvdyBvLXRhYmxlLWdyb3VwLXJvdy1sZXZlbC0nICsgcm93LmxldmVsO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wRWRpdGlvbihjbGVhclNlbGVjdGlvbj86IGJvb2xlYW4pIHtcbiAgICBjbGVhclNlbGVjdGlvbiA9IGNsZWFyU2VsZWN0aW9uID8gY2xlYXJTZWxlY3Rpb24gOiBmYWxzZTtcbiAgICB0aGlzLmVkaXRpbmdDZWxsID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGluZ1JvdyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uQW5kRWRpdGluZyhjbGVhclNlbGVjdGlvbik7XG4gIH1cblxuICBzdG9yZUZpbHRlckluU3RhdGUoYXJnOiBPRmlsdGVyRGVmaW5pdGlvbikge1xuICAgIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlLnN0b3JlRmlsdGVyKGFyZyk7XG4gIH1cblxuICByZWluaXRpYWxpemF0ZVF1aWNrRmlsdGVyQ29sdW1ucygpIHtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zZWFyY2hhYmxlICYmIGNvbHVtbi52aXNpYmxlKVxuICAgICAgLmZvckVhY2goY29sdW1uID0+IGNvbHVtbi5zZWFyY2hpbmcgPSB0cnVlKVxuICB9XG5cbiAgcmVpbml0aWFsaXplU29ydENvbHVtbnMoc29ydENvbHVtbnM/OiBTUUxPcmRlcltdKSB7XG4gICAgdGhpcy50YWJsZUhlYWRlcnMgPSBbXTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoc29ydENvbHVtbnMpKSB7XG4gICAgICB0aGlzLnNvcnRDb2xBcnJheSA9IHNvcnRDb2x1bW5zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcnNlU29ydENvbHVtbnMoKTtcbiAgICB9XG4gICAgdGhpcy5zb3J0LnNldFNvcnRDb2x1bW5zKHRoaXMuc29ydENvbEFycmF5KTtcbiAgICB0aGlzLnJlZnJlc2hTb3J0SGVhZGVycygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZnJlc2hTb3J0SGVhZGVycygpIHtcbiAgICB0aGlzLnRhYmxlSGVhZGVycy5maWx0ZXIoaGVhZGVyID0+IFV0aWwuaXNEZWZpbmVkKGhlYWRlci5tYXRTb3J0SGVhZGVyKSkuZm9yRWFjaChoZWFkZXIgPT4gaGVhZGVyLm1hdFNvcnRIZWFkZXIucmVmcmVzaCgpKTtcbiAgfVxuXG4gIGdldFF1aWNrRmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudCkgP1xuICAgICAgdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC52YWx1ZSA6XG4gICAgICAnJztcbiAgfVxuXG4gIHB1YmxpYyBxdWVyeUNlbGxSZW5kZXJlcnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBxdWlja0ZpbHRlclZhbHVlID0gdGhpcy5nZXRRdWlja0ZpbHRlclZhbHVlKCk7XG5cbiAgICBpZiAoKFV0aWwuaXNEZWZpbmVkKHF1aWNrRmlsdGVyVmFsdWUpICYmIHF1aWNrRmlsdGVyVmFsdWUubGVuZ3RoID4gMCkgfHwgdGhpcy5zb3J0Q29sQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcXVlcmllcyA9IHRoaXMub1RhYmxlT3B0aW9ucy5jb2x1bW5zXG4gICAgICAgIC5maWx0ZXIob0NvbCA9PiBvQ29sLnNlYXJjaGluZyAmJiB0aGlzLmlzSW5zdGFuY2VPZk9UYWJsZUNlbGxSZW5kZXJlclNlcnZpY2VDb21wb25lbnQob0NvbC5yZW5kZXJlcikpXG4gICAgICAgIC5tYXAob0NvbCA9PiAob0NvbC5yZW5kZXJlciBhcyBhbnkpLnF1ZXJ5QWxsRGF0YSgpKTtcblxuICAgICAgcmV0dXJuIHF1ZXJpZXMubGVuZ3RoID4gMCA/IGNvbWJpbmVMYXRlc3QocXVlcmllcykgOiBvZihudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKG51bGwpO1xuICB9XG5cbiAgdGFibGVRdWlja0ZpbHRlckNoYW5nZWQodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLnF1ZXJ5Q2VsbFJlbmRlcmVycygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UucXVpY2tGaWx0ZXIgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBvbk1hdFNvcnRDaGFuZ2VcbiAgcHVibGljIGZpbHRlckRhdGEodmFsdWU/OiBzdHJpbmcsIGxvYWRNb3JlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vXG4gIH1cblxuICBzZXRPVGFibGVDb2x1bW5zR3JvdXBpbmcodmFsdWU6IE9UYWJsZUNvbHVtbnNHcm91cGluZykge1xuICAgIHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50ID0gdmFsdWU7XG4gIH1cblxuICBnZXRDb2x1bW5Hcm91cGluZ0NvbXBvbmVudChjb2x1bW5BdHRyOiBzdHJpbmcpOiBPVGFibGVDb2x1bW5zR3JvdXBpbmdDb2x1bW5Db21wb25lbnQge1xuICAgIGxldCByZXN1bHQ6IE9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbHVtbkNvbXBvbmVudDtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQpKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudC5nZXRDb2x1bW5Hcm91cGluZyhjb2x1bW5BdHRyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHVzZUNvbHVtbkdyb3VwaW5nQWdncmVnYXRlKGNvbHVtbkF0dHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4oY29sdW1uQXR0cik7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChvQ29sKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzcWxUeXBlID0gdGhpcy5nZXRTcWxUeXBlcygpW2NvbHVtbkF0dHJdO1xuICAgIGNvbnN0IGhhc0RlZmF1bHRBZ2dyZWdhdGUgPSBTUUxUeXBlcy5pc051bWVyaWNTUUxUeXBlKHNxbFR5cGUpXG4gICAgICAmJiAoIVV0aWwuaXNEZWZpbmVkKG9Db2wucmVuZGVyZXIpIHx8IE9UYWJsZUNvbXBvbmVudC5BVkFJTEFCTEVfR1JPVVBJTkdfQ09MVU1OU19SRU5ERVJFUlMuaW5jbHVkZXMob0NvbC50eXBlKSk7XG5cbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIGhhc0RlZmF1bHRBZ2dyZWdhdGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudC51c2VDb2x1bW5BZ2dyZWdhdGUoY29sdW1uQXR0ciwgaGFzRGVmYXVsdEFnZ3JlZ2F0ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tWaWV3cG9ydFNpemUoKSB7XG4gICAgLy8gSXRzIGEgdGVtcG9yYXJpbHkgZml4ZWQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzEwMTE3XG4gICAgLy8gU29sdmUgdGhlIGlzc3VlIHdoZW4gc3dpdGNoaW5nIHRhYnMgd2hlbiB0aGUgdmlydHVhbCBzY3JvbGxpbmcgY29tcG9uZW50IGlzIHVzZWRcbiAgICAvLyBpbiBhIG1hdCAtIHRhYiBjb21wb25lbnQgYW5kIHZpcnR1YWwgc2Nyb2xsIHdvcmsgYWJub3JtYWxseVxuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCkge1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBTaG93IGV4cGFuZGFibGUgaWNvbiBvciBub3QgaWYgaGFzIGRhdGEgb3Igbm90XG4gIHNob3dFeHBhbmRhYmxlSWNvbihyb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoVXRpbC5pc0RlZmluZWQodGhpcy5zaG93RXhwYW5kYWJsZUljb25GdW5jdGlvbikgJiYgdGhpcy5zaG93RXhwYW5kYWJsZUljb25GdW5jdGlvbiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSA/IFV0aWwud3JhcEludG9PYnNlcnZhYmxlKHRoaXMuc2hvd0V4cGFuZGFibGVJY29uRnVuY3Rpb24ocm93LCByb3dJbmRleCkpIDogb2YodHJ1ZSk7XG4gIH1cblxuICBnZXRDb2x1bW5zTm90SW5jbHVkZWQoKTogc3RyaW5nW10ge1xuICAgIGxldCBjb2xzTm90SW5jbHVkZWQgPSBbXTtcbiAgICBjb2xzTm90SW5jbHVkZWQgPSB0aGlzLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIoYyA9PiB2b2lkIDAgIT09IGMucmVuZGVyZXIgJiYgKGMudHlwZSA9PT0gJ2ltYWdlJyB8fCBjLnR5cGUgPT09ICdhY3Rpb24nKSkubWFwKGMgPT4gYy5hdHRyKTtcbiAgICBjb2xzTm90SW5jbHVkZWQucHVzaChDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QpO1xuICAgIGNvbHNOb3RJbmNsdWRlZC5wdXNoKENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpO1xuICAgIHJldHVybiBjb2xzTm90SW5jbHVkZWQ7XG4gIH1cblxuICBnZXRDb2x1bW5OYW1lcyhjb2x1bW5zOiBzdHJpbmdbXSk6IHsgW2NvbHVtbklkOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICAgIGNvbnN0IHRhYmxlQ29sdW1uTmFtZXMgPSB7fTtcbiAgICBjb2x1bW5zLmZvckVhY2goYyA9PiB7XG4gICAgICBjb25zdCBvQ29sdW1uID0gdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbmQob2MgPT4gb2MuYXR0ciA9PT0gYyk7XG4gICAgICB0YWJsZUNvbHVtbk5hbWVzW2NdID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChvQ29sdW1uLnRpdGxlID8gb0NvbHVtbi50aXRsZSA6IG9Db2x1bW4uYXR0cik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhYmxlQ29sdW1uTmFtZXM7XG4gIH1cblxuICByZXNldENvbHVtbnNXaWR0aCgpIHtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChjLmRlZmluaXRpb24pKSB7XG4gICAgICAgIGMud2lkdGggPSBVdGlsLmlzRGVmaW5lZChjLmRlZmluaXRpb24ud2lkdGgpID8gYy5kZWZpbml0aW9uLndpZHRoIDogYy5kZWZpbml0aW9uLm9yaWdpbmFsV2lkdGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGMud2lkdGggPSBcImF1dG9cIjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbnNET01XaWR0aCgpO1xuICB9XG5cbiAgdXBkYXRlQ29sdW1uc0RPTVdpZHRoKCkge1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xuICAgICAgYy5ET01XaWR0aCA9IHRoaXMuZ2V0VGhXaWR0aEZyb21PQ29sdW1uKGMpO1xuICAgIH0pO1xuXG4gIH1cblxuICBwdWJsaWMgaXNEaXNhYmxlQ2hlY2tib3goaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgbGV0IGRpc2FibGUgPSBmYWxzZTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5kaXNhYmxlU2VsZWN0aW9uRnVuY3Rpb24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlU2VsZWN0aW9uRnVuY3Rpb24oaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBkaXNhYmxlO1xuXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvLXRhYmxlLWNvbnRhaW5lclwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IHN0cmV0Y2hcIiBbc3R5bGUuZGlzcGxheV09XCJpc1Zpc2libGUoKT8gJycgOiAnbm9uZSdcIlxuICBbY2xhc3MuYmxvY2stZXZlbnRzXT1cInNob3dMb2FkaW5nIHwgYXN5bmNcIj5cblxuICA8by1kYXRhLXRvb2xiYXIgI3RhYmxlVG9vbGJhciAqbmdJZj1cImhhc0NvbnRyb2xzKClcIiBbdGl0bGVdPVwidGl0bGVcIiBbc2hvdy10aXRsZV09XCJzaG93VGl0bGVcIiBjbGFzcz1cIm8tdGFibGUtdG9vbGJhclwiPlxuICAgIDxuZy1jb250YWluZXIgby1kYXRhLXRvb2xiYXItcHJvamVjdGlvbi1zdGFydD5cbiAgICAgIDxvLXRhYmxlLWJ1dHRvbnMgI3RhYmxlQnV0dG9ucyBbaW5zZXJ0LWJ1dHRvbl09XCJpbnNlcnRCdXR0b25cIiBbcmVmcmVzaC1idXR0b25dPVwicmVmcmVzaEJ1dHRvblwiIFtkZWxldGUtYnV0dG9uXT1cInNob3dEZWxldGVCdXR0b25cIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby10YWJsZS1idXR0b25cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L28tdGFibGUtYnV0dG9ucz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby10YWJsZS10b29sYmFyXVtwb3NpdGlvbj1zdGFydF1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1zdGFydF1cIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW28tdGFibGUtdG9vbGJhcl1bcG9zaXRpb249ZW5kXVwiIG5nUHJvamVjdEFzPVwiW28tZGF0YS10b29sYmFyLWN1c3RvbS1wcm9qZWN0aW9uLWVuZF1cIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW28tdGFibGUtdG9vbGJhcl1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1zdGFydF1cIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciBvLWRhdGEtdG9vbGJhci1wcm9qZWN0aW9uLWVuZD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWlja2ZpbHRlckNvbnRlbnRDaGlsZDsgZWxzZSBkZWZhdWx0UXVpY2tGaWx0ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby10YWJsZS1xdWlja2ZpbHRlclwiPjwvbmctY29udGVudD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0UXVpY2tGaWx0ZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWlja0ZpbHRlclwiPlxuICAgICAgICAgIDxvLXRhYmxlLXF1aWNrZmlsdGVyIChvbkNoYW5nZSk9XCJ0YWJsZVF1aWNrRmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgPC9vLXRhYmxlLXF1aWNrZmlsdGVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cInNob3dUYWJsZU1lbnVCdXR0b25cIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJvLXRhYmxlLW1lbnUtYnV0dG9uXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRhYmxlTWVudS5tYXRNZW51XCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOm1vcmVfdmVydFwiPjwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxvLXRhYmxlLW1lbnUgI3RhYmxlTWVudSBbc2VsZWN0LWFsbC1jaGVja2JveF09XCJzZWxlY3RBbGxDaGVja2JveFwiIFtleHBvcnQtYnV0dG9uXT1cImV4cG9ydEJ1dHRvblwiXG4gICAgICAgIFtjb2x1bW5zLXZpc2liaWxpdHktYnV0dG9uXT1cImNvbHVtbnNWaXNpYmlsaXR5QnV0dG9uXCIgW3Nob3ctY29uZmlndXJhdGlvbi1vcHRpb25dPVwic2hvd0NvbmZpZ3VyYXRpb25PcHRpb25cIlxuICAgICAgICBbc2hvdy1maWx0ZXItb3B0aW9uXT1cInNob3dGaWx0ZXJPcHRpb25cIiBbc2hvdy1yZXBvcnQtb24tZGVtYW5kLW9wdGlvbl09XCJzaG93UmVwb3J0T25EZW1hbmRPcHRpb25cIlxuICAgICAgICBbc2hvdy1jaGFydHMtb24tZGVtYW5kLW9wdGlvbl09XCJzaG93Q2hhcnRzT25EZW1hbmRPcHRpb25cIiBbc2hvdy1yZXNldC13aWR0aC1vcHRpb25dPVwic2hvd1Jlc2V0V2lkdGhPcHRpb25cIiBbc2hvdy1ncm91cC1ieS1vcHRpb25dPVwiZ3JvdXBhYmxlXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm8tdGFibGUtb3B0aW9uXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9vLXRhYmxlLW1lbnU+XG4gICAgICA8bmctdGVtcGxhdGUgI2V4cG9ydE9wdHNUZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby10YWJsZS1leHBvcnQtYnV0dG9uXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9vLWRhdGEtdG9vbGJhcj5cblxuICA8ZGl2ICN0YWJsZUJvZHkgY2xhc3M9XCJvLXRhYmxlLWJvZHkgby1zY3JvbGxcIiBbY2xhc3MuaG9yaXpvbnRhbC1zY3JvbGxdPVwiaG9yaXpvbnRhbFNjcm9sbFwiIFtjbGFzcy5zY3JvbGxlZF09XCJob3Jpem9udGFsU2Nyb2xsZWRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVuYWJsZWRWaXJ0dWFsU2Nyb2xsOyBlbHNlIHRhYmxlV2l0aFZpcnR1YWxTY3JvbGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXRhYmxlLW92ZXJmbG93IG8tc2Nyb2xsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVXaXRoVmlydHVhbFNjcm9sbD5cbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgI3ZpcnR1YWxTY3JvbGxWaWV3UG9ydCBmeEZsZXg+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8IS0tVEFCTEUgUEFHSU5BVE9SLS0+XG4gIDxtYXQtcGFnaW5hdG9yICpuZ0lmPVwicGFnaW5hdG9yXCIgI21hdHBhZ2luYXRvciBbbGVuZ3RoXT1cImRhdGFTb3VyY2U/LnJlc3VsdHNMZW5ndGhcIiBbcGFnZUluZGV4XT1cInBhZ2luYXRvci5wYWdlSW5kZXhcIiBbcGFnZVNpemVdPVwicXVlcnlSb3dzXCJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2luYXRvci5wYWdlU2l6ZU9wdGlvbnNcIiAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJwYWdpbmF0b3Iuc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcIj5cbiAgPC9tYXQtcGFnaW5hdG9yPlxuXG4gIDwhLS1MT0FESU5HLS0+XG4gIDxkaXYgI3NwaW5uZXJDb250YWluZXIgKm5nSWY9XCJzaG93TG9hZGluZyB8IGFzeW5jXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIFtuZ1N0eWxlXT1cInsndG9wLnB4JzogaGVhZGVySGVpZ2h0fVwiXG4gICAgY2xhc3M9XCJzcGlubmVyLWNvbnRhaW5lclwiIFtjbGFzcy5zcGlubmVyLWNvbnRhaW5lci1zY3JvbGxhYmxlXT1cImxvYWRpbmdTY3JvbGwgfCBhc3luY1wiPlxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIHN0cm9rZVdpZHRoPVwiM1wiIFtkaWFtZXRlcl09XCJkaWFtZXRlclNwaW5uZXJcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuICA8L2Rpdj5cblxuICA8IS0tIERpc2FibGUgYmxvY2tlciAtLT5cbiAgPGRpdiAqbmdJZj1cIiFlbmFibGVkXCIgY2xhc3M9XCJvLXRhYmxlLWRpc2FibGVkLWJsb2NrZXJcIj48L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RhYmxlPlxuXG4gIDx0YWJsZSBtYXQtdGFibGUgI3RhYmxlIFtjbGFzcy5hdXRvYWRqdXN0ZWRdPVwiYXV0b0FkanVzdFwiIFt0cmFja0J5XT1cImdldFRyYWNrQnlGdW5jdGlvbigpXCIgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIG9NYXRTb3J0XG4gICAgW29NYXRTb3J0Q29sdW1uc109XCJzb3J0Q29sQXJyYXlcIiBbbmdDbGFzc109XCJyb3dIZWlnaHRPYnNlcnZhYmxlIHwgYXN5bmNcIiAoY2RrT2JzZXJ2ZUNvbnRlbnQpPVwicHJvamVjdENvbnRlbnRDaGFuZ2VkKClcIlxuICAgIFtvVGFibGVFeHBhbmRlZEZvb3Rlcl09XCIhKGxvYWRpbmcgfCBhc3luYylcIiBbb1RhYmxlRXhwYW5kZWRGb290ZXJDb2xzcGFuXT1cInZpc2libGVDb2xBcnJheS5sZW5ndGhcIiBbbXVsdGlUZW1wbGF0ZURhdGFSb3dzXT1cInNob3dFeHBhbmRhYmxlUm93KClcIlxuICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJvbnRpbWl6ZS13ZWIgdGFibGVcIj5cblxuICAgIDwhLS1DaGVja2JveCBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm5hbWVcIiAqbmdJZj1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFibGVDb2x1bW5TZWxlY3RBbGxDb250ZW50Q2hpbGQ7IGVsc2UgY3VzdG9tSGVhZGVyU2VsZWN0QWxsVGVtcGxhdGVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgPG8tdGFibGUtaGVhZGVyLXNlbGVjdC1hbGwgW2NvbHVtbl09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtblwiPjwvby10YWJsZS1oZWFkZXItc2VsZWN0LWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggbmFtZT1cImlkW11cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUNoZWNrYm94KHJvdylcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3Rpb25DaGVja2JveFRvZ2dsZSgkZXZlbnQsIHJvdylcIiBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIj5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21IZWFkZXJTZWxlY3RBbGxUZW1wbGF0ZT5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3MucmVzaXphYmxlXT1cInJlc2l6YWJsZVwiIGNsYXNzPVwibWF0LWhlYWRlci1zZWxlY3QtYWxsLXdpdGgtdGl0bGUgby1jZW50ZXJcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi53aWR0aFwiIFtzdHlsZS5taW4td2lkdGhdPVwiZ2V0TWluV2lkdGhDb2x1bW4ob1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4pXCJcbiAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm1heFdpZHRoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxvLXRhYmxlLWhlYWRlci1zZWxlY3QtYWxsIFtjb2x1bW5dPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW5cIj48L28tdGFibGUtaGVhZGVyLXNlbGVjdC1hbGw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cIm8tY2VudGVyXCIgW3N0eWxlLndpZHRoXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImdldE1pbldpZHRoQ29sdW1uKG9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uKVwiIFtzdHlsZS5tYXgtd2lkdGhdPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubWF4V2lkdGhcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IG5hbWU9XCJpZFtdXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVDaGVja2JveChyb3cpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0aW9uQ2hlY2tib3hUb2dnbGUoJGV2ZW50LCByb3cpXCIgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCI+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG5cbiAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS1FeHBhbmRhYmxlIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwib1RhYmxlT3B0aW9ucy5leHBhbmRhYmxlQ29sdW1uLm5hbWVcIiAqbmdJZj1cImlzQ29sdW1uRXhwYW5kYWJsZSgpXCI+XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICB7eyBvVGFibGVPcHRpb25zLmV4cGFuZGFibGVDb2x1bW4udGl0bGUgfX1cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93O2xldCByb3dJbmRleCA9IGRhdGFJbmRleFwiPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJzaG93RXhwYW5kYWJsZUljb24ocm93LCByb3dJbmRleCkgfCBhc3luY1wiIChjbGljayk9XCJ0b29nbGVSb3dFeHBhbmRhYmxlKHJvdywgcm93SW5kZXgsICRldmVudClcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFeHBhbmRlZChyb3cpXCI+e3sgdGFibGVSb3dFeHBhbmRhYmxlLmljb25Db2xsYXBzZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFeHBhbmRlZChyb3cpXCI+e3sgdGFibGVSb3dFeHBhbmRhYmxlLmljb25FeHBhbmQgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEdlbmVyaWMgY29sdW1uIGRlZmluaXRpb24gLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIG9UYWJsZU9wdGlvbnMuY29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLm5hbWVcIj5cbiAgICAgIDwhLS1EZWZpbmUgaGVhZGVyLWNlbGwtLT5cblxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbmdDbGFzc109XCJnZXRUaXRsZUFsaWduQ2xhc3MoY29sdW1uKVwiIFtjbGFzcy5yZXNpemFibGVdPVwicmVzaXphYmxlXCIgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiZ2V0TWluV2lkdGhDb2x1bW4oY29sdW1uKVwiIFtzdHlsZS5tYXgtd2lkdGhdPVwiY29sdW1uLm1heFdpZHRoXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICA8by10YWJsZS1oZWFkZXIgW2NvbHVtbl09XCJjb2x1bW5cIj48L28tdGFibGUtaGVhZGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGg+XG5cblxuICAgICAgPCEtLURlZmluZSBtYXQtY2VsbC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJsZS5tdWx0aVRlbXBsYXRlRGF0YVJvd3M7IGVsc2UgY2VsbFRlbXBsYXRlTXVsdGlUZW1wbGF0ZURhdGFSb3dzXCI+XG4gICAgICAgIDx0ZCAjY2VsbCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7bGV0IHJvd0luZGV4ID0gaW5kZXggXCIgW25nQ2xhc3NdPVwiW2NvbHVtbi5jbGFzc05hbWUsIGdldENlbGxBbGlnbkNsYXNzKGNvbHVtbildXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2socm93LCBjb2x1bW4sIHJvd0luZGV4LCBjZWxsLCAkZXZlbnQpXCIgKGRibGNsaWNrKT1cImhhbmRsZURvdWJsZUNsaWNrKHJvdywgY29sdW1uLCByb3dJbmRleCwgY2VsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgW2NsYXNzLmVtcHR5LWNlbGxdPVwiaXNFbXB0eShyb3dbY29sdW1uLm5hbWVdKVwiIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIWNvbHVtbi5oYXNUb29sdGlwKClcIiBbbWF0VG9vbHRpcF09XCJjb2x1bW4uZ2V0VG9vbHRpcChyb3cpXCJcbiAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI3NTBcIiBtYXRUb29sdGlwQ2xhc3M9XCJvLXRhYmxlLWNlbGwtdG9vbHRpcFwiXG4gICAgICAgICAgW2NsYXNzLm8tbWF0LWNlbGwtbXVsdGlsaW5lXT1cIihjb2x1bW4uaXNNdWx0aWxpbmUgfCBhc3luYylcIiBbb0NvbnRleHRNZW51XT1cInRhYmxlQ29udGV4dE1lbnVcIlxuICAgICAgICAgIFtvQ29udGV4dE1lbnVEYXRhXT1cInsgY2VsbE5hbWU6Y29sdW1uLm5hbWUsIHJvd1ZhbHVlOnJvdywgcm93SW5kZXg6cm93SW5kZXh9XCIgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJnZXRNaW5XaWR0aENvbHVtbihjb2x1bW4pXCIgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIlxuICAgICAgICAgIFtjbGFzcy5vLXRhYmxlLWVkaXRpbmctY2VsbF09XCJpc1Jvd1NlbGVjdGVkKHJvdykgJiYgY29sdW1uLmVkaXRpbmdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFJlbmRlcmVyO2NvbnRleHQ6e2NvbHVtbjpjb2x1bW4scm93OnJvd31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNjZWxsVGVtcGxhdGVNdWx0aVRlbXBsYXRlRGF0YVJvd3M+XG4gICAgICAgIDx0ZCAjY2VsbCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7bGV0IHJvd0luZGV4ID0gZGF0YUluZGV4IFwiIFtuZ0NsYXNzXT1cIltjb2x1bW4uY2xhc3NOYW1lLCBnZXRDZWxsQWxpZ25DbGFzcyhjb2x1bW4pXVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKHJvdywgY29sdW1uLCByb3dJbmRleCwgY2VsbCwgJGV2ZW50KVwiIChkYmxjbGljayk9XCJoYW5kbGVEb3VibGVDbGljayhyb3csIGNvbHVtbiwgcm93SW5kZXgsIGNlbGwsICRldmVudClcIlxuICAgICAgICAgIFtjbGFzcy5lbXB0eS1jZWxsXT1cImlzRW1wdHkocm93W2NvbHVtbi5uYW1lXSlcIiBbbWF0VG9vbHRpcERpc2FibGVkXT1cIiFjb2x1bW4uaGFzVG9vbHRpcCgpXCIgW21hdFRvb2x0aXBdPVwiY29sdW1uLmdldFRvb2x0aXAocm93KVwiXG4gICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNzUwXCIgbWF0VG9vbHRpcENsYXNzPVwiby10YWJsZS1jZWxsLXRvb2x0aXBcIlxuICAgICAgICAgIFtjbGFzcy5vLW1hdC1jZWxsLW11bHRpbGluZV09XCIoY29sdW1uLmlzTXVsdGlsaW5lIHwgYXN5bmMpXCIgW29Db250ZXh0TWVudV09XCJ0YWJsZUNvbnRleHRNZW51XCJcbiAgICAgICAgICBbb0NvbnRleHRNZW51RGF0YV09XCJ7IGNlbGxOYW1lOmNvbHVtbi5uYW1lLCByb3dWYWx1ZTpyb3csIHJvd0luZGV4OnJvd0luZGV4fVwiIFtzdHlsZS53aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiZ2V0TWluV2lkdGhDb2x1bW4oY29sdW1uKVwiIFtzdHlsZS5tYXgtd2lkdGhdPVwiY29sdW1uLm1heFdpZHRoXCJcbiAgICAgICAgICBbY2xhc3Muby10YWJsZS1lZGl0aW5nLWNlbGxdPVwiaXNSb3dTZWxlY3RlZChyb3cpICYmIGNvbHVtbi5lZGl0aW5nXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxSZW5kZXJlcjtjb250ZXh0Ontjb2x1bW46Y29sdW1uLHJvdzpyb3d9XCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8IS0tRGVmaW5lIG1hdC1mb290ZXItY2VsbC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUb3RhbHMgfCBhc3luY1wiPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmIFtuZ0NsYXNzXT1cImNvbHVtbi5jbGFzc05hbWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiAqbmdJZj1cImNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS50aXRsZVwiPlxuICAgICAgICAgICAge3sgY29sdW1uLmFnZ3JlZ2F0ZS50aXRsZSB8IG9UcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbi5yZW5kZXJlclwiPlxuICAgICAgICAgICAge3sgZGF0YVNvdXJjZS5nZXRBZ2dyZWdhdGVEYXRhKGNvbHVtbikgfX1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJjb2x1bW4ucmVuZGVyZXIgJiYgY29sdW1uLmFnZ3JlZ2F0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5yZW5kZXJlci50ZW1wbGF0ZXJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2NlbGx2YWx1ZTogZGF0YVNvdXJjZS5nZXRBZ2dyZWdhdGVEYXRhKGNvbHVtbil9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgQ29sdW1uIC0gVGhlIGRldGFpbCByb3cgaXMgbWFkZSB1cCBvZiB0aGlzIG9uZSBjb2x1bW4gdGhhdCBzcGFucyBhY3Jvc3MgYWxsIGNvbHVtbnMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0V4cGFuZGVkUm93XCI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7bGV0IHJvd0luZGV4PSBkYXRhSW5kZXhcIiBbYXR0ci5jb2xzcGFuXT1cIm9UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMubGVuZ3RoXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJnZXRFeHBhbmRlZFJvd0NvbnRhaW5lckNsYXNzKHJvd0luZGV4KVwiIFtAZGV0YWlsRXhwYW5kXT1cImdldFN0YXRlRXhwYW5kKHJvdylcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLUZPT1RFUi1JTlNFUlRBQkxFLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dMYXN0SW5zZXJ0YWJsZVJvdyAmJiBvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubmFtZSArIGdldFN1ZmZpeENvbHVtbkluc2VydGFibGUoKVwiICpuZ0lmPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZVwiPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygb1RhYmxlT3B0aW9ucy5jb2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZSsgZ2V0U3VmZml4Q29sdW1uSW5zZXJ0YWJsZSgpXCI+XG5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZiBbbmdDbGFzc109XCJjb2x1bW4uY2xhc3NOYW1lXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5JbnNlcnRhYmxlKGNvbHVtbikgJiYgIW9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQudXNlQ2VsbEVkaXRvcihjb2x1bW4pXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJpbnNlcnRhYmxlLWZvcm0tZmllbGQgby10YWJsZS1jZWxsLWVkaXRvci10ZXh0IG8tdGFibGUtY2VsbC1lZGl0b3JcIiBbaGlkZVJlcXVpcmVkTWFya2VyXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmdldFBsYWNlaG9sZGVyKGNvbHVtbilcIiBbaWRdPVwiY29sdW1uLmF0dHJcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmdldENvbnRyb2woY29sdW1uKVwiIFtyZXF1aXJlZF09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmlzQ29sdW1uUmVxdWlyZWQoY29sdW1uKVwiPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmNvbHVtbkhhc0Vycm9yKGNvbHVtbiwgJ3JlcXVpcmVkJylcIj5cbiAgICAgICAgICAgICAgICB7eyAnRk9STV9WQUxJREFUSU9OLlJFUVVJUkVEJyB8IG9UcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5JbnNlcnRhYmxlKGNvbHVtbikgJiYgb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC51c2VDZWxsRWRpdG9yKGNvbHVtbilcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmNvbHVtbkVkaXRvcnNbY29sdW1uLmF0dHJdLnRlbXBsYXRlcmVmXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93dmFsdWU6IG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQucm93RGF0YSB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Rmlyc3RJbnNlcnRhYmxlUm93ICYmIG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJnZXRDb2x1bW5JbnNlcnRhYmxlKG9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm5hbWUpXCIgKm5nSWY9XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlXCI+XG4gICAgICAgIDx0ZCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBvVGFibGVPcHRpb25zLmNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImdldENvbHVtbkluc2VydGFibGUoY29sdW1uLm5hbWUpXCI+XG5cbiAgICAgICAgPHRkIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbmdDbGFzc109XCJjb2x1bW4uY2xhc3NOYW1lXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5JbnNlcnRhYmxlKGNvbHVtbikgJiYgIW9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQudXNlQ2VsbEVkaXRvcihjb2x1bW4pXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJpbnNlcnRhYmxlLWZvcm0tZmllbGRcIiBbaGlkZVJlcXVpcmVkTWFya2VyXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmdldFBsYWNlaG9sZGVyKGNvbHVtbilcIiBbaWRdPVwiY29sdW1uLmF0dHJcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmdldENvbnRyb2woY29sdW1uKVwiIFtyZXF1aXJlZF09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmlzQ29sdW1uUmVxdWlyZWQoY29sdW1uKVwiPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmNvbHVtbkhhc0Vycm9yKGNvbHVtbiwgJ3JlcXVpcmVkJylcIj5cbiAgICAgICAgICAgICAgICB7eyAnRk9STV9WQUxJREFUSU9OLlJFUVVJUkVEJyB8IG9UcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5JbnNlcnRhYmxlKGNvbHVtbikgJiYgb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC51c2VDZWxsRWRpdG9yKGNvbHVtbilcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmNvbHVtbkVkaXRvcnNbY29sdW1uLmF0dHJdLnRlbXBsYXRlcmVmXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93dmFsdWU6IG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQucm93RGF0YSB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRGVmaW5pdGlvbiBjb2x1bW4gZ3JvdXAgaGVhZGVyIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBncm91cGluZ0hlYWRlcnNSb3dzOyBsZXQgaSA9IGluZGV4XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW5cIj5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBncm91cFwiIGNsYXNzPVwiZ3JvdXBpbmctcm93XCIgW29Db250ZXh0TWVudV09XCJ0YWJsZUNvbnRleHRNZW51XCJcbiAgICAgICAgW29Db250ZXh0TWVudURhdGFdPVwieyBjZWxsTmFtZTpjb2x1bW4sIHJvd1ZhbHVlOmdyb3VwLCByb3dJbmRleDppfVwiIFtuZ0NsYXNzXT1cImdldEdyb3VwSGVhZGVyQ2VsbEFsaWduQ2xhc3MoY29sdW1uKVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaT09PTBcIiBjbGFzcz1cImdyb3VwaW5nLXRpdGxlLXdyYXBwZXJcIiBbbmdTdHlsZV09XCJ7J3BhZGRpbmctbGVmdCc6IDIwKihncm91cC5sZXZlbC0xKSsncHgnfVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj57eyBncm91cC5leHBhbmRlZCA/ICdleHBhbmRfbW9yZScgOiAnY2hldnJvbl9yaWdodCcgfX08L21hdC1pY29uPlxuICAgICAgICAgIHt7IGdyb3VwLnRpdGxlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBpbmctYWdncmVnYXRlXCIgKm5nSWY9XCJncm91cC5oYXNBY3RpdmVBZ2dyZWdhdGUodmlzaWJsZUNvbEFycmF5W2ldKVwiPlxuICAgICAgICAgIHt7IGdyb3VwLmdldENvbHVtbkFjdGl2ZUFnZ3JlZ2F0ZVRpdGxlKHZpc2libGVDb2xBcnJheVtpXSkgfCBvVHJhbnNsYXRlIH19IDpcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdldE9Db2x1bW5Gcm9tR3JvdXBIZWFkZXJDb2x1bW4oY29sdW1uKS5yZW5kZXJlclwiPlxuICAgICAgICAgICAge3sgZ3JvdXAuZ2V0Q29sdW1uQWdncmVnYXRlVmFsdWUodmlzaWJsZUNvbEFycmF5W2ldKX19XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldE9Db2x1bW5Gcm9tR3JvdXBIZWFkZXJDb2x1bW4oY29sdW1uKS5yZW5kZXJlclwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0T0NvbHVtbkZyb21Hcm91cEhlYWRlckNvbHVtbihjb2x1bW4pLnJlbmRlcmVyPy50ZW1wbGF0ZXJlZjsgY29udGV4dDp7IGNlbGx2YWx1ZTogIGdyb3VwLmdldENvbHVtbkFnZ3JlZ2F0ZVZhbHVlKHZpc2libGVDb2xBcnJheVtpXSkgfVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwb3NpdGlvblwiPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPiB7e3Jvd319IDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8dHIgI3RhYmxlSGVhZGVyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJvVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zOyBzdGlja3k6IGZpeGVkSGVhZGVyXCI+PC90cj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFibGUubXVsdGlUZW1wbGF0ZURhdGFSb3dzOyBlbHNlIHJvd1RlbXBsYXRlTXVsdGlUZW1wbGF0ZURhdGFSb3dzXCI+XG4gICAgICA8dHIgbWF0LXJvdyBvVGFibGVSb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IG9UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnM7IHdoZW46aXNOb3RHcm91cDsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxuICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCIgW25nQ2xhc3NdPVwicm93IHwgb1RhYmxlUm93Q2xhc3M6IHJvd0luZGV4OiByb3dDbGFzc1wiPlxuICAgICAgPC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3Jvd1RlbXBsYXRlTXVsdGlUZW1wbGF0ZURhdGFSb3dzPlxuICAgICAgPHRyIG1hdC1yb3cgb1RhYmxlUm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBvVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zOyB3aGVuOmlzTm90R3JvdXA7IGxldCByb3dJbmRleCA9IGRhdGFJbmRleFwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIiBbbmdDbGFzc109XCJyb3cgfCBvVGFibGVSb3dDbGFzczogcm93SW5kZXg6IHJvd0NsYXNzXCI+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIFJvdyBHcm91cCBoZWFkZXIgLS0+XG4gICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGdyb3VwaW5nSGVhZGVyc1Jvd3M7IHdoZW46aXNHcm91cFwiIChjbGljayk9XCJncm91cEhlYWRlckNsaWNrKHJvdylcIlxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3NOYW1lR3JvdXBIZWFkZXIocm93KVwiPlxuICAgIDwvdHI+XG5cbiAgICA8IS0tIEV4cGFuZGVkIGRldGFpbCByb3ctLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRXhwYW5kZWRSb3dcIj5cbiAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIiBjbGFzcz1cIm8tdGFibGUtcm93LWV4cGFuZGVkXCI+PC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93TGFzdEluc2VydGFibGVSb3dcIj5cbiAgICAgIDx0ciBtYXQtZm9vdGVyLXJvdyAqbWF0Rm9vdGVyUm93RGVmPVwib1RhYmxlT3B0aW9ucy5jb2x1bW5zSW5zZXJ0YWJsZXM7IHN0aWNreTogdHJ1ZVwiXG4gICAgICAgIChrZXl1cCk9XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmhhbmRsZUtleWJvYXJkRXZlbnQoJGV2ZW50KVwiIGNsYXNzPVwiby10YWJsZS1pbnNlcnRhYmxlXCI+PC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0ZpcnN0SW5zZXJ0YWJsZVJvd1wiPlxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJvVGFibGVPcHRpb25zLmNvbHVtbnNJbnNlcnRhYmxlczsgc3RpY2t5OiB0cnVlXCJcbiAgICAgICAgKGtleXVwKT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaGFuZGxlS2V5Ym9hcmRFdmVudCgkZXZlbnQpXCIgY2xhc3M9XCJvLXRhYmxlLWluc2VydGFibGVcIj4gPC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvdGFscyB8IGFzeW5jXCI+XG4gICAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cIm9UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnM7IHN0aWNreTogdHJ1ZVwiIGNsYXNzPVwiby10YWJsZS1hZ2dyZWdhdGVcIj5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdGFibGU+XG5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhY29udGV4dE1lbnVDb250ZW50Q2hpbGQgJiYgY29udGV4dE1lbnVcIj5cbiAgPG8tdGFibGUtY29udGV4dC1tZW51IFtpbnNlcnRdPVwiaW5zZXJ0QnV0dG9uXCIgW2VkaXRdPVwiZWRpdGlvbk1vZGUgIT09IEVESVRfTU9ERV9OT05FXCIgW3ZpZXctZGV0YWlsXT1cImRldGFpbE1vZGUgIT09IERFVEFJTF9NT0RFX05PTkVcIlxuICAgIFtyZWZyZXNoXT1cInJlZnJlc2hCdXR0b25cIiBbZGVsZXRlXT1cImRlbGV0ZUJ1dHRvblwiIFtmaWx0ZXJdPVwic2hvd0ZpbHRlck9wdGlvblwiIFtncm91cC1ieS1yb3ddPVwiZ3JvdXBhYmxlXCI+XG4gIDwvby10YWJsZS1jb250ZXh0LW1lbnU+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNjZWxsUmVuZGVyZXIgbGV0LXJvdz1cInJvd1wiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cblxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRydWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNvbHVtbi5yZW5kZXJlciAhPSBudWxsICYmICghY29sdW1uLmVkaXRpbmcgfHwgY29sdW1uLmVkaXRpbmcgJiYgIWlzUm93U2VsZWN0ZWQocm93KSlcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uLnJlbmRlcmVyPy50ZW1wbGF0ZXJlZjsgY29udGV4dDp7IGNlbGx2YWx1ZTogcm93W2NvbHVtbi5uYW1lXSwgcm93dmFsdWU6cm93IH1cIj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNSb3dTZWxlY3RlZChyb3cpICYmIGNvbHVtbi5lZGl0aW5nXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5lZGl0b3I/LnRlbXBsYXRlcmVmOyBjb250ZXh0OnsgY2VsbHZhbHVlOiByb3dbY29sdW1uLm5hbWVdLCByb3d2YWx1ZTpyb3cgfVwiPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNvbHVtbi50eXBlID09PSAnZWRpdEJ1dHRvbkluUm93JyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RldGFpbEJ1dHRvbkluUm93J1wiPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJvLWFjdGlvbi1jZWxsLXJlbmRlcmVyXCIgKGNsaWNrKT1cIm9uRGV0YWlsQnV0dG9uQ2xpY2soY29sdW1uLCByb3csICRldmVudClcIj5cbiAgICAgICAgICA8bWF0LWljb24+e3sgZ2V0RGV0YWlsQnV0dG9uSWNvbihjb2x1bW4pIH19PC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD57eyByb3dbY29sdW1uLm5hbWVdIH19PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|