@sumaris-net/ngx-components 2.7.6-rc2 → 2.7.6
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/esm2022/src/app/core/form/list/list.form.mjs +4 -4
- package/esm2022/src/app/core/table/actions-column.component.mjs +7 -7
- package/esm2022/src/app/core/table/async-table.class.mjs +8 -8
- package/esm2022/src/app/core/table/table.class.mjs +9 -9
- package/esm2022/src/app/shared/form/field.component.mjs +2 -2
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +2 -2
- package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +2 -2
- package/fesm2022/sumaris-net.ngx-components.mjs +27 -27
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/assets/manifest.json +1 -1
|
@@ -685,7 +685,7 @@ export class AppTable {
|
|
|
685
685
|
}
|
|
686
686
|
cancel(event, opts) {
|
|
687
687
|
// Check confirmation
|
|
688
|
-
if ((!opts || opts.interactive !== false) && this.dirty && (this.confirmBeforeCancel || this.onBeforeCancelRows.
|
|
688
|
+
if ((!opts || opts.interactive !== false) && this.dirty && (this.confirmBeforeCancel || this.onBeforeCancelRows.observed)) {
|
|
689
689
|
event?.stopPropagation();
|
|
690
690
|
this.canCancelRows().then((confirm) => {
|
|
691
691
|
// If confirmed, loop
|
|
@@ -742,7 +742,7 @@ export class AppTable {
|
|
|
742
742
|
}
|
|
743
743
|
else {
|
|
744
744
|
const rows = this._dataSource.getRows();
|
|
745
|
-
|
|
745
|
+
this.selection.setSelection(...rows);
|
|
746
746
|
}
|
|
747
747
|
}
|
|
748
748
|
async deleteSelection(event, opts) {
|
|
@@ -1091,7 +1091,7 @@ export class AppTable {
|
|
|
1091
1091
|
}
|
|
1092
1092
|
async canDeleteRows(rows, opts) {
|
|
1093
1093
|
// Check using emitter
|
|
1094
|
-
if (this.onBeforeDeleteRows.
|
|
1094
|
+
if (this.onBeforeDeleteRows.observed) {
|
|
1095
1095
|
try {
|
|
1096
1096
|
const canDelete = await emitPromiseEvent(this.onBeforeDeleteRows, 'canDelete', {
|
|
1097
1097
|
detail: { rows },
|
|
@@ -1118,7 +1118,7 @@ export class AppTable {
|
|
|
1118
1118
|
if (isEmptyArray(rows))
|
|
1119
1119
|
return true; // No dirty: OK
|
|
1120
1120
|
// Check using emitter
|
|
1121
|
-
if (this.onBeforeCancelRows.
|
|
1121
|
+
if (this.onBeforeCancelRows.observed) {
|
|
1122
1122
|
try {
|
|
1123
1123
|
const isCancel = await emitPromiseEvent(this.onBeforeCancelRows, 'canCancel', {
|
|
1124
1124
|
detail: { rows },
|
|
@@ -1161,7 +1161,7 @@ export class AppTable {
|
|
|
1161
1161
|
// Default behavior
|
|
1162
1162
|
let confirmed = true;
|
|
1163
1163
|
if (save) {
|
|
1164
|
-
if (this.onBeforeSave.
|
|
1164
|
+
if (this.onBeforeSave.observed) {
|
|
1165
1165
|
// Ask confirmation
|
|
1166
1166
|
try {
|
|
1167
1167
|
const res = await emitPromiseEvent(this.onBeforeSave, 'beforeSave', {
|
|
@@ -1202,7 +1202,7 @@ export class AppTable {
|
|
|
1202
1202
|
if (this.debug && this.dirty) {
|
|
1203
1203
|
console.warn('[table] Opening row details, but table has unsaved changes!');
|
|
1204
1204
|
}
|
|
1205
|
-
if (this.onOpenRow.
|
|
1205
|
+
if (this.onOpenRow.observed) {
|
|
1206
1206
|
this.onOpenRow.emit(row);
|
|
1207
1207
|
return true;
|
|
1208
1208
|
}
|
|
@@ -1220,7 +1220,7 @@ export class AppTable {
|
|
|
1220
1220
|
async openNewRowDetail(event) {
|
|
1221
1221
|
if (!this.allowRowDetail)
|
|
1222
1222
|
return false;
|
|
1223
|
-
if (this.onNewRow.
|
|
1223
|
+
if (this.onNewRow.observed) {
|
|
1224
1224
|
this.onNewRow.emit(event);
|
|
1225
1225
|
return true;
|
|
1226
1226
|
}
|
|
@@ -1565,7 +1565,7 @@ export class AppTable {
|
|
|
1565
1565
|
throw new Error('Row cannot be canceling, but only deleting');
|
|
1566
1566
|
const confirmed = !opts || opts.interactive !== false;
|
|
1567
1567
|
// Ask user confirmation, if cancel
|
|
1568
|
-
if (!confirmed && row.dirty && (this.confirmBeforeCancel || this.onBeforeCancelRows.
|
|
1568
|
+
if (!confirmed && row.dirty && (this.confirmBeforeCancel || this.onBeforeCancelRows.observed)) {
|
|
1569
1569
|
event.stopPropagation();
|
|
1570
1570
|
this.canCancelRows([row], opts).then((confirm) => {
|
|
1571
1571
|
// If confirmed, loop
|
|
@@ -1775,4 +1775,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
1775
1775
|
type: ViewChild,
|
|
1776
1776
|
args: [MatSort, { static: false }]
|
|
1777
1777
|
}] } });
|
|
1778
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvdGFibGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5SCxPQUFPLEVBQUUsT0FBTyxFQUE4QixNQUFNLHdCQUF3QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RixPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBVyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBYywyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JB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RyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBQ3RDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRS9DLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0YsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDOUYsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDOUYsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQWtEO1FBQ3hELElBQUksSUFBSSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxL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Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBVU8sVUFBVTtzQkFBdEIsS0FBSztnQkFRTyxNQUFNO3NCQUFsQixLQUFLO2dCQWdCSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBMkNNLFFBQVE7c0JBQXBCLEtBQUs7Z0JBMEpPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBWWtDLEtBQUs7c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDTSxjQUFjO3NCQUF6RCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0gsSUFBSTtzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRTb3J0LCBNYXRTb3J0YWJsZSwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgbWVyZ2VNYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRhYmxlRWxlbWVudCB9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQgeyBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4vZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZS5jbGFzcyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlscywgSUVudGl0eSB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydENvbnRyb2xsZXIsIE1vZGFsQ29udHJvbGxlciwgTmF2Q29udHJvbGxlciwgVG9hc3RDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDb2x1bW5JdGVtLCBUYWJsZVNlbGVjdENvbHVtbnNDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXNlbGVjdC1jb2x1bW5zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBFcnJvckNvZGVzIH0gZnJvbSAnLi4vc2VydmljZXMvZXJyb3JzJztcbmltcG9ydCB7IEFwcEZvcm1VdGlscywgSUFwcEZvcm0sIE9uUmVhZHkgfSBmcm9tICcuLi9mb3JtL2Zvcm0udXRpbHMnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcixcbiAgTWF0QXV0b2NvbXBsZXRlRmllbGRBZGRPcHRpb25zLFxuICBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZyxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcbmltcG9ydCB7IENvbXBsZXRhYmxlRXZlbnQsIGNyZWF0ZVByb21pc2VFdmVudEVtaXR0ZXIsIGVtaXRQcm9taXNlRXZlbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvZXZlbnRzJztcbmltcG9ydCB7IGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUsIGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90TmlsLCB0b0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IHdhaXRGb3IsIHdhaXRGb3JGYWxzZSwgV2FpdEZvck9wdGlvbnMsIHdhaXRGb3JUcnVlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7IFNob3dUb2FzdE9wdGlvbnMsIFRvYXN0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHsgQWxlcnRzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FsZXJ0cyc7XG5pbXBvcnQgeyBDZGtDb2x1bW5EZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvdGFibGUnO1xuaW1wb3J0IHsgTG9hZFJlc3VsdCB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBGb3JtRXJyb3JUcmFuc2xhdG9yLCBGb3JtRXJyb3JUcmFuc2xhdG9yT3B0aW9ucywgSUZvcm1Db250cm9sUGF0aFRyYW5zbGF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQvdmFsaWRhdG9yL2Zvcm0tZXJyb3ItYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQge1xuICBDZWxsVmFsdWVDaGFuZ2VMaXN0ZW5lcixcbiAgREVGQVVMVF9QQUdFX1NJWkUsXG4gIERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMsXG4gIERFRkFVTFRfUkVRVUlSRURfQ09MVU1OUyxcbiAgUkVTRVJWRURfRU5EX0NPTFVNTlMsXG4gIFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMsXG4gIFNhdmVBY3Rpb25UeXBlLFxuICBTRVRUSU5HU19ESVNQTEFZX0NPTFVNTlMsXG4gIFNFVFRJTkdTX1BBR0VfU0laRSxcbiAgU0VUVElOR1NfU09SVEVEX0NPTFVNTixcbn0gZnJvbSAnLi90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBBcHBUYWJsZVV0aWxzIH0gZnJvbSAnLi90YWJsZS51dGlscyc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFwcFRhYmxlPFQgZXh0ZW5kcyBJRW50aXR5PFQsIElEPiwgRiA9IGFueSwgSUQgPSBudW1iZXI+XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIElBcHBGb3JtLCBJRm9ybUNvbnRyb2xQYXRoVHJhbnNsYXRvclxue1xuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBfY2VsbFZhbHVlQ2hhbmdlc0RlZnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBDZWxsVmFsdWVDaGFuZ2VMaXN0ZW5lcjtcbiAgfSA9IHt9O1xuXG4gIHByb3RlY3RlZCBfZW5hYmxlZCA9IHRydWU7XG4gIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyOiBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXI7XG4gIHByb3RlY3RlZCBhbGxvd1Jvd0RldGFpbCA9IHRydWU7XG4gIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcbiAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCBsb2NhdGlvbjogTG9jYXRpb247XG4gIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2U7XG4gIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIGFsZXJ0Q3RybDogQWxlcnRDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCBwcmV2aW91c2x5RWRpdGVkUm93SWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGZvcm1FcnJvckFkYXB0ZXI6IEZvcm1FcnJvclRyYW5zbGF0b3I7XG4gIHByb3RlY3RlZCByZWFkb25seSBkZXN0cm95U3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZXhjbHVkZXNDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXTtcbiAgdG90YWxSb3dDb3VudDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHZpc2libGVSb3dDb3VudDogbnVtYmVyO1xuICBlcnJvclRyYW5zbGF0b3JPcHRpb25zOiBGb3JtRXJyb3JUcmFuc2xhdG9yT3B0aW9ucztcblxuICByZWFkb25seSByZWFkeVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBzYXZpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHRvdWNoZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGRpcnR5U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBlcnJvclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcblxuICBnZXQgZXJyb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvclN1YmplY3QudmFsdWU7XG4gIH1cblxuICBzZXQgZXJyb3IoZXJyb3I6IHN0cmluZykge1xuICAgIHRoaXMuc2V0RXJyb3IoZXJyb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBnZXQgZXJyb3IkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFRhYmxlRWxlbWVudDxUPj4odHJ1ZSwgW10pO1xuICBwZXJtYW5lbnRTZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPFQ+ID0gbnVsbDtcbiAgcGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCA9IGZhbHNlO1xuICBlZGl0ZWRSb3c6IFRhYmxlRWxlbWVudDxUPiA9IHVuZGVmaW5lZDtcbiAgYXV0b2NvbXBsZXRlRmllbGRzOiB7IFtrZXk6IHN0cmluZ106IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnIH07XG4gIHJlYWRvbmx5IG1vYmlsZTogYm9vbGVhbjtcblxuICAvLyBUYWJsZSBvcHRpb25zXG4gIEBJbnB1dCgpIHNldHRpbmdzSWQ6IHN0cmluZztcbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGkxOG5Db2x1bW5QcmVmaXggPSAnQ09NTU9OLic7XG4gIEBJbnB1dCgpIGkxOG5Db2x1bW5TdWZmaXg6IHN0cmluZztcbiAgQElucHV0KCkgYXV0b0xvYWQgPSB0cnVlO1xuICBASW5wdXQoKSByZWFkT25seTogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5saW5lRWRpdGlvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgZm9jdXNGaXJzdENvbHVtbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maXJtQmVmb3JlRGVsZXRlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpcm1CZWZvcmVDYW5jZWwgPSBmYWxzZTtcbiAgQElucHV0KCkgdW5kb2FibGVEZWxldGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzYXZlQmVmb3JlRGVsZXRlOiBib29sZWFuO1xuICBASW5wdXQoKSBrZWVwRWRpdGVkUm93T25TYXZlOiBib29sZWFuO1xuICBASW5wdXQoKSBzYXZlQmVmb3JlU29ydDogYm9vbGVhbjtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZUZpbHRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgcHJvcGFnYXRlUm93RXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgcGVybWFuZW50U2VsZWN0aW9uQWxsb3dlZCA9IGZhbHNlOyAvLyBBbGxvdyBrZWVwIHNlbGVjdGVkIHJvd3Mgb3ZlciBwYWdlIGNoYW5nZSBvciBzb3J0IGNoYW5nZVxuXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0Qnk6IHN0cmluZztcbiAgQElucHV0KCkgZGVmYXVsdFNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb247XG4gIEBJbnB1dCgpIGRlZmF1bHRQYWdlU2l6ZSA9IERFRkFVTFRfUEFHRV9TSVpFO1xuICBASW5wdXQoKSBkZWZhdWx0UGFnZVNpemVPcHRpb25zID0gREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUztcblxuICAvLyBGb2N1cyBtYW5hZ2VyXG4gIEBJbnB1dCgpIGZvY3VzQ29sdW1uOiBzdHJpbmc7XG5cbiAgZ2V0IGZpcnN0VXNlckNvbHVtbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbnNbUkVTRVJWRURfU1RBUlRfQ09MVU1OUy5sZW5ndGhdO1xuICB9XG5cbiAgZ2V0IGxhc3RVc2VyQ29sdW1uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uc1t0aGlzLmRpc3BsYXllZENvbHVtbnMubGVuZ3RoIC0gUkVTRVJWRURfRU5EX0NPTFVNTlMubGVuZ3RoIC0gMV07XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+KSB7XG4gICAgdGhpcy5zZXREYXRhc291cmNlKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBkYXRhU291cmNlKCk6IEVudGl0aWVzVGFibGVEYXRhU291cmNlPFQsIEYsIElEPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2U7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZmlsdGVyKHZhbHVlOiBGKSB7XG4gICAgdGhpcy5zZXRGaWx0ZXIodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGZpbHRlcigpOiBGIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyO1xuICB9XG5cbiAgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmcgfHwgdGhpcy50b3RhbFJvd0NvdW50ID09PSAwO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkRW50aXRpZXMoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24/LnNlbGVjdGVkIHx8IEFwcFRhYmxlVXRpbHMuZ2V0RW50aXRpZXModGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICB9XG5cbiAgQE91dHB1dCgpIG9uUmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25PcGVuUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvbk5ld1JvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25TdGFydEVkaXRpbmdSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRWxlbWVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uQ29uZmlybUVkaXRDcmVhdGVSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRWxlbWVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uQ2FuY2VsT3JEZWxldGVSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRWxlbWVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uQmVmb3JlRGVsZXRlUm93cyA9IGNyZWF0ZVByb21pc2VFdmVudEVtaXR0ZXI8Ym9vbGVhbiwgeyByb3dzOiBUYWJsZUVsZW1lbnQ8VD5bXSB9PigpO1xuICBAT3V0cHV0KCkgb25CZWZvcmVDYW5jZWxSb3dzID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjxib29sZWFuLCB7IHJvd3M6IFRhYmxlRWxlbWVudDxUPltdIH0+KCk7XG4gIEBPdXRwdXQoKSBvbkJlZm9yZVNhdmUgPSBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPHsgY29uZmlybWVkOiBib29sZWFuOyBzYXZlOiBib29sZWFuIH0sIHsgYWN0aW9uOiBTYXZlQWN0aW9uVHlwZTsgdmFsaWQ6IGJvb2xlYW4gfT4oKTtcbiAgQE91dHB1dCgpIG9uQWZ0ZXJEZWxldGVkUm93cyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+W10+KCk7XG4gIEBPdXRwdXQoKSBvblNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uRGlydHkgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvbkVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpcnR5U3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuZWRpdGluZyA/IHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8udmFsaWQgOiB0cnVlO1xuICB9XG5cbiAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGVkUm93ICYmIHRoaXMuZWRpdGVkUm93LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/LmludmFsaWQgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy5wZW5kaW5nIDogZmFsc2U7XG4gIH1cblxuICBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b3VjaGVkU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCB1bnRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZGlzYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBlbmFibGUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gIH1cblxuICAvLyBGSVhNRTogbmVlZCB0byBoaWRkZW4gYnV0dG9ucyAoaW4gSFRNTCksIGV0Yy4gd2hlbiBkaXNhYmxlZFxuICBASW5wdXQoKSBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUgIT09ICF0aGlzLl9lbmFibGVkKSB7XG4gICAgICBpZiAodmFsdWUpIHRoaXMuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICBlbHNlIHRoaXMuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLl9lbmFibGVkO1xuICB9XG5cbiAgbWFya0FzRGlydHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuZGlydHlTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLmRpcnR5U3ViamVjdC52YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kaXJ0eVN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5kaXJ0eVN1YmplY3QuY2xvc2VkICYmIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5kaXJ0eVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgbGV0IG5lZWRFbWl0RXZlbnQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy50b3VjaGVkU3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy50b3VjaGVkU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgIG5lZWRFbWl0RXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXJ0eSB8fCAodGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuaWQgIT09IHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkKSkge1xuICAgICAgLy8gQ2FuY2VsIHRoZSBjdXJyZW50IGVkaXRpbmcgcm93IG9ubHkgaWYgZWRpdGluZyBhbmQgaWYgaXQgd2FzIG5vdCBwcmV2aW91c2x5IHNhdmVkXG4gICAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcpIHtcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBjdXJyZW50IGVkaXRpbmcgcm93IG9ubHkgaWYgZWRpdGluZyBhbmQgaWYgaXQgd2FzIG5vdCBwcmV2aW91c2x5IHNhdmVkXG4gICAgICAgIGlmICh0aGlzLmVkaXRlZFJvdy5pZCA9PT0gLTEpIHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGVsZXRlKC0xKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY2FuY2VsKHRoaXMuZWRpdGVkUm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hcmsgcm93IGFzIHByaXN0aW5lXG4gICAgICAgIHRoaXMuY2hlY2tJZlJvd1ByaXN0aW5lKHRoaXMuZWRpdGVkUm93LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmVkaXRlZFJvdyA9IG51bGw7XG4gICAgICBuZWVkRW1pdEV2ZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5wcmV2aW91c2x5RWRpdGVkUm93SWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKG5lZWRFbWl0RXZlbnQgJiYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgcHJlZmVyIHRvIHVzZSBtYXJrQWxsQXNUb3VjaGVkKClcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIG1hcmtBc1RvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBjb25zb2xlLndhcm4oJ1RPRE86IFJlcGxhY2UgdGhpcyBjYWxsIGJ5IG1hcmtBbGxBc1RvdWNoZWQoKSAtIGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiBuZ3gtY29tcG9uZW50cyA+PSAwLjE2LjAnKTtcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBbGxBc1RvdWNoZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLnRvdWNoZWRTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLnRvdWNoZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1NhdmluZyhvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc2F2aW5nU3ViamVjdC5jbG9zZWQgJiYgdGhpcy5zYXZpbmdTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmZvY3VzQ29sdW1uID0gdW5kZWZpbmVkOyAvLyB1bnNlbGVjdCBmb2N1cyBjb2x1bW5cbiAgICAgIHRoaXMuc2F2aW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNTYXZlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc2F2aW5nU3ViamVjdC5jbG9zZWQgJiYgdGhpcy5zYXZpbmdTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5zYXZpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNMb2FkaW5nKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBvcHRzKTtcbiAgfVxuXG4gIG1hcmtBc0xvYWRlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIG9wdHMpO1xuICB9XG5cbiAgbWFya0FzUmVhZHkob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLnJlYWR5U3ViamVjdC5jbG9zZWQgJiYgdGhpcy5yZWFkeVN1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMucmVhZHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cbiAgICAgIC8vIElmIHN1YmNsYXNzZXMgaW1wbGVtZW50cyBPblJlYWR5XG4gICAgICBpZiAodHlwZW9mIHRoaXNbJ25nT25SZWFkeSddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICh0aGlzIGFzIGFueSBhcyBPblJlYWR5KS5uZ09uUmVhZHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZW5hYmxlU29ydCgpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGRpc2FibGVTb3J0KCkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IHRydWU7XG4gIH1cblxuICBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZGVmYXVsdFBhZ2VTaXplID0gdmFsdWU7XG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5wYWdpbmF0b3IgJiYgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpIHx8IHRoaXMuZGVmYXVsdFBhZ2VTaXplIHx8IERFRkFVTFRfUEFHRV9TSVpFO1xuICB9XG5cbiAgZ2V0IHBhZ2VPZmZzZXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKSB8fCAwO1xuICB9XG5cbiAgZ2V0IHNvcnRBY3RpdmUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0ICYmIHRoaXMuc29ydC5hY3RpdmU7XG4gIH1cblxuICBnZXQgc29ydERpcmVjdGlvbigpOiAnYXNjJyB8ICdkZXNjJyB7XG4gICAgcmV0dXJuICh0aGlzLnNvcnQgJiYgdGhpcy5zb3J0LmRpcmVjdGlvbiAmJiAodGhpcy5zb3J0LmRpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJ2Rlc2MnIDogJ2FzYycpKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF9wYWdpbmF0b3I6IE1hdFBhZ2luYXRvciB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpIHNldCBwYWdpbmF0b3IodmFsdWU6IE1hdFBhZ2luYXRvcikge1xuICAgIHRoaXMuX3BhZ2luYXRvciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRvcigpOiBNYXRQYWdpbmF0b3Ige1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0b3IgfHwgdGhpcy5jaGlsZFBhZ2luYXRvcjtcbiAgfVxuXG4gIGdldCBkZXN0cm95ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVzdHJveVN1YmplY3Q/LmNsb3NlZCAhPT0gZmFsc2U7XG4gIH1cblxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFibGU6IE1hdFRhYmxlPFQ+O1xuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IGZhbHNlIH0pIGNoaWxkUGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gIEBWaWV3Q2hpbGQoTWF0U29ydCwgeyBzdGF0aWM6IGZhbHNlIH0pIHNvcnQ6IE1hdFNvcnQ7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgY29sdW1uczogc3RyaW5nW10sXG4gICAgcHJvdGVjdGVkIF9kYXRhU291cmNlPzogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+LFxuICAgIHByaXZhdGUgX2ZpbHRlcj86IEZcbiAgKSB7XG4gICAgdGhpcy5yb3V0ZSA9IGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgdGhpcy5yb3V0ZXIgPSBpbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIgPSBpbmplY3Rvci5nZXQoTmF2Q29udHJvbGxlcik7XG4gICAgdGhpcy5sb2NhdGlvbiA9IGluamVjdG9yLmdldChMb2NhdGlvbik7XG4gICAgdGhpcy5zZXR0aW5ncyA9IGluamVjdG9yLmdldChMb2NhbFNldHRpbmdzU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgdGhpcy5tb2RhbEN0cmwgPSBpbmplY3Rvci5nZXQoTW9kYWxDb250cm9sbGVyKTtcbiAgICB0aGlzLmFsZXJ0Q3RybCA9IGluamVjdG9yLmdldChBbGVydENvbnRyb2xsZXIpO1xuICAgIHRoaXMudG9hc3RDb250cm9sbGVyID0gaW5qZWN0b3IuZ2V0KFRvYXN0Q29udHJvbGxlcik7XG4gICAgdGhpcy5mb3JtRXJyb3JBZGFwdGVyID0gaW5qZWN0b3IuZ2V0KEZvcm1FcnJvclRyYW5zbGF0b3IpO1xuICAgIHRoaXMubW9iaWxlID0gdGhpcy5zZXR0aW5ncy5tb2JpbGU7XG5cbiAgICAvLyBBdXRvY29tcGxldGUgZmllbGRzXG4gICAgdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyID0gbmV3IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcih7XG4gICAgICBnZXRVc2VyQXR0cmlidXRlczogKGEsIGIpID0+IHRoaXMuc2V0dGluZ3MuZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhhLCBiKSxcbiAgICB9KTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkcyA9IHRoaXMuX2F1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlci5maWVsZHM7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5faW5pdGlhbGl6ZWQpIHJldHVybjsgLy8gSW5pdCBvbmx5IG9uY2VcbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICB0aGlzLnJlYWRPbmx5ID0gdG9Cb29sZWFuKHRoaXMucmVhZE9ubHksIHRoaXMuZGF0YVNvdXJjZT8uY29uZmlnLnJlYWRPbmx5IHx8IGZhbHNlKTsgLy8gcmVhZC93cml0ZSBieSBkZWZhdWx0XG4gICAgdGhpcy5pbmxpbmVFZGl0aW9uID0gIXRoaXMucmVhZE9ubHkgJiYgdG9Cb29sZWFuKHRoaXMuaW5saW5lRWRpdGlvbiwgZmFsc2UpOyAvLyBmb3JjZSB0byBmYWxzZSB3aGVuIHJlYWRvbmx5XG4gICAgdGhpcy5zYXZlQmVmb3JlRGVsZXRlID0gdG9Cb29sZWFuKHRoaXMuc2F2ZUJlZm9yZURlbGV0ZSwgIXRoaXMucmVhZE9ubHkpOyAvLyBmb3JjZSB0byBmYWxzZSB3aGVuIHJlYWRvbmx5XG4gICAgdGhpcy5zYXZlQmVmb3JlU29ydCA9IHRvQm9vbGVhbih0aGlzLnNhdmVCZWZvcmVTb3J0LCAhdGhpcy5yZWFkT25seSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVGaWx0ZXIgPSB0b0Jvb2xlYW4odGhpcy5zYXZlQmVmb3JlRmlsdGVyLCAhdGhpcy5yZWFkT25seSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUgPSB0b0Jvb2xlYW4odGhpcy5rZWVwRWRpdGVkUm93T25TYXZlLCB0aGlzLmlubGluZUVkaXRpb24pO1xuICAgIHRoaXMuZXJyb3JUcmFuc2xhdG9yT3B0aW9ucyA9IHRoaXMuZXJyb3JUcmFuc2xhdG9yT3B0aW9ucyB8fCB7IHNlcGFyYXRvcjogJywgJywgY29udHJvbFBhdGhUcmFuc2xhdG9yOiB0aGlzIH07IC8vIENhbiBiZSBvdmVycmlkZSBpbiBzdWJjbGFzc2VzIGNvbnN0cnVjdG9yc1xuXG4gICAgLy8gQ2hlY2sgYXNrIHVzZXIgY29uZmlybWF0aW9uIGlzIHBvc3NpYmxlXG4gICAgaWYgKHRoaXMuY29uZmlybUJlZm9yZURlbGV0ZSAmJiAhdGhpcy5hbGVydEN0cmwpIHRocm93IEVycm9yKFwiTWlzc2luZyAnYWxlcnRDdHJsJyBvciAnaW5qZWN0b3InIGluIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yLlwiKTtcblxuICAgIC8vIERlZmluZWQgdW5pcXVlIGlkIGZvciBzZXR0aW5ncyBmb3IgdGhlIHBhZ2VcbiAgICB0aGlzLnNldHRpbmdzSWQgPSB0aGlzLnNldHRpbmdzSWQgfHwgdGhpcy5nZW5lcmF0ZVRhYmxlSWQoKTtcblxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZ2V0RGlzcGxheUNvbHVtbnMoKTtcblxuICAgIC8vIExvYWQgdGhlIHNvcnRlZCBjb2x1bW5zLCBmcm9tIHNldHRpbmdzXG4gICAge1xuICAgICAgY29uc3Qgc29ydGVkQ29sdW1uID0gdGhpcy5nZXRTb3J0ZWRDb2x1bW4oKTtcbiAgICAgIHRoaXMuZGVmYXVsdFNvcnRCeSA9IHNvcnRlZENvbHVtbi5pZDtcbiAgICAgIHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24gPSBzb3J0ZWRDb2x1bW4uc3RhcnQ7XG4gICAgfVxuXG4gICAgdGhpcy5kZWZhdWx0UGFnZVNpemUgPSB0aGlzLmdldFBhZ2VTaXplKCk7XG5cbiAgICAvLyBQcm9wYWdhdGUgZXJyb3IgdG8gZXZlbnQgZW1pdHRlclxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5lcnJvclN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5vbkVycm9yLmVtaXQodmFsdWUpKSk7XG5cbiAgICAvLyBQcm9wYWdhdGUgZGlydHkgdG8gZXZlbnQgZW1pdHRlclxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5kaXJ0eVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5vbkRpcnR5LmVtaXQodmFsdWUpKSk7XG5cbiAgICAvLyBQcm9wYWdhdGUgcm93IGRpcnR5IHN0YXRlIHRvIHRhYmxlXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMub25TdGFydEVkaXRpbmdSb3dcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChyb3cpID0+IHJvdz8udmFsaWRhdG9yICYmIHRydWUpLFxuICAgICAgICAgIG1lcmdlTWFwKChyb3cpID0+XG4gICAgICAgICAgICByb3cudmFsaWRhdG9yLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICBmaWx0ZXIoKHJvdykgPT4gcm93LmRpcnR5KSxcbiAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAgICAgLy90YXAoKCkgPT4gY29uc29sZS5kZWJ1ZyhcIlByb3BhZ2F0ZSByb3cncyBkaXJ0eSB0byB0YWJsZS4uLlwiKSlcblxuICAgICAgICAgICAgICAvLyBTdG9wIGlmIG5leHQgYW5vdGhlciByb3csIG9yIGRlc3Ryb3lpbmdcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMub25TdGFydEVkaXRpbmdSb3cpLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm1hcmtBc0RpcnR5KCkpXG4gICAgKTtcblxuICAgIC8vIENhbGwgZGF0YXNvdXJjZSByZWZyZXNoLCBvbiBlYWNoIHJlZnJlc2ggZXZlbnRzXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMub25SZWZyZXNoXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aDxhbnksIGFueT4oKHRoaXMuYXV0b0xvYWQgPyB7fSA6ICdza2lwJykgYXMgYW55KSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlydHlTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgIGlmIChldmVudCA9PT0gJ3NraXAnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9kYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFNraXBwaW5nIGRhdGEgbG9hZDogbm8gZGF0YVNvdXJjZSBkZWZpbmVkJyk7XG4gICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQ2FsbGluZyBkYXRhU291cmNlLndhdGNoQWxsKCkuLi4nKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlLndhdGNoQWxsKHRoaXMucGFnZU9mZnNldCwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zb3J0QWN0aXZlLCB0aGlzLnNvcnREaXJlY3Rpb24sIHRoaXMuX2ZpbHRlcik7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5zZXRFcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7IC8vIENvbnRpbnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHRoaXMudXBkYXRlVmlldyhyZXMgYXMgTG9hZFJlc3VsdDxUPiB8IHVuZGVmaW5lZCkpXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBkYXRhU291cmNlIGxvYWRpbmcgZXZlbnRzXG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHRoaXMubGlzdGVuRGF0YXNvdXJjZUxvYWRpbmcodGhpcy5fZGF0YVNvdXJjZSk7XG5cbiAgICAvLyBQZXJtYW5lbnQgc2VsZWN0aW9uIGJlaGF2aW9yXG4gICAgaWYgKHRoaXMucGVybWFuZW50U2VsZWN0aW9uQWxsb3dlZCkgdGhpcy5pbml0UGVybWFuZW50U2VsZWN0aW9uKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gRGV0ZWN0IHdoZW4gcGFyZW50IG5nT25Jbml0KCkgbm90IGNhbGxcbiAgICBpZiAodGhpcy5kZWJ1ZyAmJiAhdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKVxuICAgICAgY29uc29sZS53YXJuKGBbdGFibGVdIE1pc3NpbmcgJ2Rpc3BsYXllZENvbHVtbnMnLiBEaWQgeW91IGNhbGwgcGFyZW50IG5nT25Jbml0KCkgaW4gY29tcG9uZW50ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSA/YCk7XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgc29ydCBhbmQgcGFnaW5hdG9yIGV2ZW50c1xuICAgIC8vIG5vaW5zcGVjdGlvbiBKU0lnbm9yZWRQcm9taXNlRnJvbUNhbGxcbiAgICB0aGlzLmxpc3RlblNvcnRBbmRQYWdpbmF0aW9uRXZlbnRzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIC8vIFVuc3Vic2NyaWJlIGNvbHVtbiB2YWx1ZSBjaGFuZ2VzXG4gICAgT2JqZWN0LmtleXModGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnMpLmZvckVhY2goKGNvbCkgPT4gdGhpcy5zdG9wQ2VsbFZhbHVlQ2hhbmdlcyhjb2wsIHRydWUpKTtcbiAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmcyA9IHt9O1xuXG4gICAgdGhpcy5yZWFkeVN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zYXZpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lcnJvclN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRpcnR5U3ViamVjdC51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vblJlZnJlc2gudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uT3BlblJvdy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25OZXdSb3cudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNvbmZpcm1FZGl0Q3JlYXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25CZWZvcmVTYXZlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkFmdGVyRGVsZXRlZFJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU29ydC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25EaXJ0eS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25FcnJvci51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhcbiAgICByZXM6IExvYWRSZXN1bHQ8VD4gfCB1bmRlZmluZWQsXG4gICAgb3B0cz86IHtcbiAgICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gICAgfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXJlcykgcmV0dXJuOyAvLyBTa2lwIChlLmcgZXJyb3IpXG4gICAgaWYgKHJlcyAmJiByZXMuZGF0YSkge1xuICAgICAgdGhpcy52aXNpYmxlUm93Q291bnQgPSByZXMuZGF0YS5sZW5ndGg7XG4gICAgICB0aGlzLnRvdGFsUm93Q291bnQgPSBpc05vdE5pbChyZXMudG90YWwpXG4gICAgICAgID8gcmVzLnRvdGFsXG4gICAgICAgIDogKCh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiAodGhpcy5wYWdpbmF0b3IucGFnZVNpemUgfHwgREVGQVVMVF9QQUdFX1NJWkUpKSB8fCAwKSArIHRoaXMudmlzaWJsZVJvd0NvdW50O1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gJHtyZXMuZGF0YS5sZW5ndGh9IHJvd3MgbG9hZGVkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gTk8gcm93cyBsb2FkZWQnKTtcbiAgICAgIHRoaXMudG90YWxSb3dDb3VudCA9IDA7XG4gICAgICB0aGlzLnZpc2libGVSb3dDb3VudCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrQXNVbnRvdWNoZWQoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNldERhdGFzb3VyY2UoZGF0YXNvdXJjZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+KSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHRocm93IG5ldyBFcnJvcignW3RhYmxlXSBkYXRhU291cmNlIGFscmVhZHkgc2V0ICEnKTtcbiAgICBpZiAoZGF0YXNvdXJjZSAmJiB0aGlzLl9kYXRhU291cmNlICE9PSBkYXRhc291cmNlKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YXNvdXJjZTtcbiAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgdGhpcy5saXN0ZW5EYXRhc291cmNlTG9hZGluZyhkYXRhc291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXNldERhdGFTb3VyY2UoKSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbik7XG4gICAgfVxuICAgIC8vdGhpcy5fZGF0YVNvdXJjZT8uY2xvc2UoKTtcbiAgICB0aGlzLl9kYXRhU291cmNlID0gbnVsbDtcbiAgfVxuXG4gIGFkZENvbHVtbkRlZihjb2x1bW46IENka0NvbHVtbkRlZikge1xuICAgIHRoaXMudGFibGUuYWRkQ29sdW1uRGVmKGNvbHVtbik7XG4gIH1cblxuICByZW1vdmVDb2x1bW5EZWYoY29sdW1uOiBDZGtDb2x1bW5EZWYpIHtcbiAgICB0aGlzLnRhYmxlLnJlbW92ZUNvbHVtbkRlZihjb2x1bW4pO1xuICB9XG5cbiAgc2V0RmlsdGVyKGZpbHRlcjogRiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZD86IGJvb2xlYW4gfSkge1xuICAgIG9wdHMgPSBvcHRzIHx8IHsgZW1pdEV2ZW50OiB0cnVlIH07XG5cbiAgICAvLyBQcmV2ZW50IHBlcm1hbmVudCBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50c1xuICAgIHRoaXMucGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCA9IHRvQm9vbGVhbihvcHRzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQsIHRoaXMucGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCk7XG5cbiAgICBpZiAodGhpcy5zYXZlQmVmb3JlRmlsdGVyKSB7XG4gICAgICAvLyBpZiBhIGRpcnR5IHRhYmxlIGlzIHRvIGJlIHNhdmVkIGJlZm9yZSBmaWx0ZXJcbiAgICAgIGlmICh0aGlzLmRpcnR5KSB7XG4gICAgICAgIC8vIFNhdmVcbiAgICAgICAgdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdmaWx0ZXInKS50aGVuKChzYXZlZCkgPT4ge1xuICAgICAgICAgIC8vIEFwcGx5IGZpbHRlciBvbmx5IGlmIHVzZXIgZGlkbid0IGNhbmNlbCB0aGUgc2F2ZSBvciB0aGUgc2F2ZSBpcyBva1xuICAgICAgICAgIGlmIChzYXZlZCkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXIsIG9wdHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhcHBseSBmaWx0ZXIgb24gbm9uLWRpcnR5IHRhYmxlXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXBwbHkgZmlsdGVyIGRpcmVjdGx5XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKGZpbHRlciwgb3B0cyk7XG4gICAgfVxuICB9XG5cbiAgY29uZmlybUFuZEFkZChldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoZXZlbnQsIHJvdykpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cbiAgICAvLyBBZGQgcm93XG4gICAgcmV0dXJuIHRoaXMuYWRkUm93KGV2ZW50KTtcbiAgfVxuXG4gIGNvbmZpcm1BbmRCYWNrd2FyZChldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pOiBib29sZWFuIHtcbiAgICAvLyBEZWxldGluZyBlZGl0ZWQgcm93LCBpZiBlbXB0eSBhbmQgbm90IGRpcnR5XG4gICAgY29uc3QgcHJldmlvdXNSb3cgPSB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAocHJldmlvdXNSb3cgJiYgcHJldmlvdXNSb3cuaWQgPT09IC0xICYmIHByZXZpb3VzUm93LnZhbGlkYXRvcj8uaW52YWxpZCAmJiAhcHJldmlvdXNSb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgdGhpcy5kZWxldGVOZXdSb3coZXZlbnQsIHByZXZpb3VzUm93KTtcblxuICAgICAgLy8gV2FpdCBkZWxldGlvbiBpcyBkb25lLCB0aGVuIGVkaXQgcHJldmlvdXMgcm93IChieSBpZCwgYmVjYXVzZSBvZiByZWxvYWRpbmcpXG4gICAgICB0aGlzLndhaXRJZGxlKCkudGhlbigoKSA9PiB0aGlzLmVkaXRSb3dCeUlkKGV2ZW50LCByb3cuaWQsIHsgZm9jdXNDb2x1bW46IHRoaXMubGFzdFVzZXJDb2x1bW4gfSkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRWRpdCBwcmV2aW91cyByb3dcbiAgICB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywgeyBmb2N1c0NvbHVtbjogdGhpcy5sYXN0VXNlckNvbHVtbiB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbmZpcm1BbmRGb3J3YXJkKGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdGlvbikgcmV0dXJuIGZhbHNlO1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoZXZlbnQsIHJvdykpIHtcbiAgICAgIC8vIElmIHBlbmRpbmc6IFdhaXQgZW5kIG9mIHZhbGlkYXRpb24sIHRoZW4gbG9vcFxuICAgICAgaWYgKHJvdy52YWxpZGF0b3I/LnBlbmRpbmcpIHtcbiAgICAgICAgcmV0dXJuIEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHJvdy52YWxpZGF0b3IpLnRoZW4oKCkgPT4gdGhpcy5jb25maXJtQW5kRm9yd2FyZChldmVudCwgcm93KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gRWRpdCBuZXh0IHJvd1xuICAgIHRoaXMuZWRpdFJvd0J5SWQoZXZlbnQsIHJvdy5pZCArIDEsIHsgZm9jdXNDb2x1bW46IHRoaXMuZmlyc3RVc2VyQ29sdW1uIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm0gdGhlIGNyZWF0aW9uIG9mIHRoZSBnaXZlbiByb3csIG9yIGlmIG5vdCBzcGVjaWZpZWQgdGhlIGN1cnJlbnRseSBlZGl0ZWQgcm93XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93XG4gICAqL1xuICBjb25maXJtRWRpdENyZWF0ZShldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pOiBib29sZWFuIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXJvdy5lZGl0aW5nKSByZXR1cm4gdHJ1ZTsgLy8gbm8gcm93IHRvIGNvbmZpcm1cblxuICAgIC8vIFN0b3AgZXZlbnRcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBDb25maXJtYXRpb24gZWRpdGlvbiBvciBjcmVhdGlvblxuICAgIC8vIFRPRE86IGFkZCBhd2FpdCA/XG4gICAgY29uc3QgY29uZmlybWVkID0gcm93LmNvbmZpcm1FZGl0Q3JlYXRlKCk7XG5cbiAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICAvLyBJZiBlZGl0IGZpbmlzaGVkLCBmb3JnZXQgZWRpdGVkIHJvd1xuICAgICAgaWYgKHJvdyA9PT0gdGhpcy5lZGl0ZWRSb3cpIHtcbiAgICAgICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIE1hcmsgdGFibGUgYXMgZGlydHkgKGlmIHJvdyBpcyBkaXJ0eSlcbiAgICAgIGlmIChyb3cuZGlydHkpIHtcbiAgICAgICAgdGhpcy5tYXJrQXNEaXJ0eSh7IGVtaXRFdmVudDogZmFsc2UgLyogYmVjYXVzZSBvZiByZXNldEVycm9yKCkgKi8gfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIGVycm9yXG4gICAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgICAgLy8gRW1pdCB0aGUgY29uZmlybSBldmVudFxuICAgICAgdGhpcy5vbkNvbmZpcm1FZGl0Q3JlYXRlUm93Lm5leHQocm93KTtcblxuICAgICAgcmV0dXJuIHRydWU7IC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKHJvdy52YWxpZGF0b3IpIHtcbiAgICAgIC8vIElmIHBlbmRpbmc6IFdhaXQgZW5kIG9mIHZhbGlkYXRpb24sIHRoZW4gbG9vcFxuICAgICAgLy8gVE9ETzogcmVtb3ZlIHdoZW4gdXNpbmcgYXN5bmMgaXNWYWxpZCgpIGZ1bmN0aW9uXG4gICAgICBpZiAocm93LnZhbGlkYXRvci5wZW5kaW5nKSB7XG4gICAgICAgIEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHJvdy52YWxpZGF0b3IpLnRoZW4oKCkgPT4gdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gTk9UIGNvbmZpcm1lZCA9IHJvdyBoYXMgZXJyb3JcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBDYW5ub3QgY29uZmlybSByb3csIGJlY2F1c2UgaW52YWxpZCcpO1xuICAgICAgICBBcHBGb3JtVXRpbHMubG9nRm9ybUVycm9ycyhyb3cudmFsaWRhdG9yLCAnW3RhYmxlXSAnKTtcbiAgICAgIH1cblxuICAgICAgLy8gZml4OiBtYXJrIGFsbCBjb250cm9scyBhcyB0b3VjaGVkIHRvIHNob3cgZXJyb3JzXG4gICAgICByb3cudmFsaWRhdG9yLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgICAgLy8gQ29tcHV0ZSByb3cgZXJyb3IsIGFuZCBwcm9wYWdhdGUgdG8gdGFibGUncyBlcnJvclxuICAgICAgaWYgKHRoaXMucHJvcGFnYXRlUm93RXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmdldFJvd0Vycm9yKHJvdyk7XG4gICAgICAgIHRoaXMuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vdCBjb25maXJtZWRcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjYW5jZWxPckRlbGV0ZShldmVudDogRXZlbnQsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW47IGtlZXBFZGl0aW5nPzogYm9vbGVhbiB9KSB7XG4gICAgLy8gRGVsZXRlIG5ldyByb3dcbiAgICBpZiAocm93LmlkID09PSAtMSkge1xuICAgICAgdGhpcy5kZWxldGVOZXdSb3coZXZlbnQsIHJvdyk7XG4gICAgfVxuICAgIC8vIERlbGV0ZSBleGlzdGluZyAoYnV0IG5vdCBlZGl0aW5nKSByb3dcbiAgICBlbHNlIGlmICghcm93LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZGVsZXRlRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgb3B0cyk7XG4gICAgfVxuICAgIC8vIENhbmNlbCBleGlzdGluZyAoYW5kIGVkaXRpbmcpIHJvd1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1JvdyhldmVudCwgcm93LCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRSb3coZXZlbnQ/OiBFdmVudCwgaW5zZXJ0QXQ/OiBudW1iZXIsIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nOyBlZGl0aW5nPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQXNraW5nIGZvciBuZXcgcm93Li4uJyk7XG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBVc2UgbW9kYWwgaWYgaW5saW5lIGVkaXRpb24gaXMgZGlzYWJsZWRcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdGlvbikge1xuICAgICAgdGhpcy5vcGVuTmV3Um93RGV0YWlsKGV2ZW50KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gZmluaXNoIGVkaXRlZCByb3cgZmlyc3RcbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFkZCBuZXcgcm93XG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5hZGRSb3dUb1RhYmxlKGluc2VydEF0LCBvcHRzKTtcbiAgICByZXR1cm4gISFyb3c7XG4gIH1cblxuICBhc3luYyBzYXZlKG9wdHM/OiB7IGtlZXBFZGl0aW5nPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGtlZXBFZGl0aW5nOiB0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsXG4gICAgICAuLi5vcHRzLFxuICAgIH07XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5UQUJMRV9SRUFEX09OTFksIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9SRUFEX09OTFknIH07XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICAvLyBLZWVwIGVkaXRlZCByb3cgaWQgKHNob3VsZCBiZSBkb25lIEJFRk9SRSBjb25maXJtRWRpdENyZWF0ZSgpIClcbiAgICB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCA9IG9wdHMua2VlcEVkaXRpbmdcbiAgICAgID8gKHRoaXMuZWRpdGVkUm93Py5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cuaWQgOiB1bmRlZmluZWQpIHx8IHRoaXMuc2luZ2xlU2VsZWN0ZWRSb3c/LmlkXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcmV2aW91c2x5RWRpdGVkUm93SWQgPSB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZDtcbiAgICBjb25zdCBwcmV2aW91c2x5RWRpdGVkRGF0YSA9IG9wdHMua2VlcEVkaXRpbmdcbiAgICAgID8gKGlzTm90TmlsKHByZXZpb3VzbHlFZGl0ZWRSb3dJZCkgJiYgdGhpcy5lZGl0ZWRSb3c/LmN1cnJlbnREYXRhKSB8fCB0aGlzLnNpbmdsZVNlbGVjdGVkUm93Py5jdXJyZW50RGF0YVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoKSkge1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLlRBQkxFX0lOVkFMSURfUk9XX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuVEFCTEVfSU5WQUxJRF9ST1dfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gTWFyayBhcyBzYXZpbmdcbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENhbGxpbmcgc2VydmljZSBzYXZlKClcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIENhbGxpbmcgZGF0YVNvdXJjZS5zYXZlKCkuLi4nKTtcbiAgICAgIGNvbnN0IGlzT0sgPSBhd2FpdCB0aGlzLl9kYXRhU291cmNlLnNhdmUoKTtcblxuICAgICAgaWYgKGlzT0spIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgcmV0dXJuIGlzT0s7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcblxuICAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyByb3dcbiAgICAgIGlmIChpc05vdE5pbChwcmV2aW91c2x5RWRpdGVkUm93SWQpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2VsZWN0Um93QnlJZE9yRGF0YShwcmV2aW91c2x5RWRpdGVkUm93SWQsIHByZXZpb3VzbHlFZGl0ZWREYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjYW5jZWwoZXZlbnQ/OiBFdmVudCwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pIHtcbiAgICAvLyBDaGVjayBjb25maXJtYXRpb25cbiAgICBpZiAoKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSAmJiB0aGlzLmRpcnR5ICYmICh0aGlzLmNvbmZpcm1CZWZvcmVDYW5jZWwgfHwgdGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZXJzLmxlbmd0aCA+IDApKSB7XG4gICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmNhbkNhbmNlbFJvd3MoKS50aGVuKChjb25maXJtKSA9PiB7XG4gICAgICAgIC8vIElmIGNvbmZpcm1lZCwgbG9vcFxuICAgICAgICBpZiAoY29uZmlybSkgdGhpcy5jYW5jZWwobnVsbCwgeyBpbnRlcmFjdGl2ZTogZmFsc2UgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KCk7XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVSb3coXG4gICAgZXZlbnQ/OiBFdmVudCxcbiAgICByb3c/OiBUYWJsZUVsZW1lbnQ8VD4sXG4gICAgb3B0cz86IHtcbiAgICAgIHNraXBQcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gICAgfVxuICApIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICByb3cgPSByb3cgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1JvdyA9IGF3YWl0IHRoaXMuYWRkUm93VG9UYWJsZShyb3cuaWQgKyAxKTtcbiAgICBpZiAoIW5ld1JvdykgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIG5ldyByb3cgdG8gdGFibGUnKTtcbiAgICBjb25zdCBqc29uID0geyAuLi5yb3cuY3VycmVudERhdGEsIGlkOiBudWxsIH07XG5cbiAgICAvLyBSZXNldCBzb21lIHByb3BlcnRpZXMgKGUuZy4gcmFua09yZGVyLCBldGMpXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5za2lwUHJvcGVydGllcykge1xuICAgICAgY29uc3QgbmV3RGF0YSA9IG5ld1Jvdy5jdXJyZW50RGF0YTtcbiAgICAgIG9wdHMuc2tpcFByb3BlcnRpZXMuZm9yRWFjaCgoa2V5KSA9PiAoanNvbltrZXldID0gbmV3RGF0YVtrZXldKSk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Jvdy52YWxpZGF0b3IpIHtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IucGF0Y2hWYWx1ZShqc29uKTtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IubWFya0FzRGlydHkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5ld1Jvdy5jdXJyZW50RGF0YT8uZnJvbU9iamVjdCkge1xuICAgICAgICBuZXdSb3cuY3VycmVudERhdGEuZnJvbU9iamVjdChqc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1Jvdy5jdXJyZW50RGF0YSA9IGpzb247XG4gICAgICB9XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0XG4gICAgdGhpcy5jbGlja1Jvdyh1bmRlZmluZWQsIG5ld1Jvdyk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdpc0FsbFNlbGVjdGVkLiBsZW5ndGhzJywgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoLCB0aGlzLnRvdGFsUm93Q291bnQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy52aXNpYmxlUm93Q291bnQ7XG4gIH1cblxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xuICBhc3luYyBtYXN0ZXJUb2dnbGUoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93cyA9IHRoaXMuX2RhdGFTb3VyY2UuZ2V0Um93cygpO1xuICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3cpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVTZWxlY3Rpb24oZXZlbnQ6IEV2ZW50LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSBhd2FpdCB0aGlzLmRlbGV0ZVJvd3MoZXZlbnQsIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLCBvcHRzKTtcbiAgICBpZiAoZGVsZXRlQ291bnQgPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4gZGVsZXRlQ291bnQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSByb3dcbiAgICogQHBhcmFtIG9wdHMgVXNlIGludGVyYWN0aXZlPWZhbHNlIHRvIGF2b2lkIHVzZXIgaW50ZXJhY3Rpb24gKGUuZy4gdXNlciBjb25maXJtYXRpb24pXG4gICAqICBBbmQgdG8gZm9yY2UgZGVsZXRpb24gZXZlbiBpZiB0YWJsZSBpcyBidXN5XG4gICAqL1xuICBhc3luYyBkZWxldGVSb3coZXZlbnQ6IEV2ZW50IHwgbnVsbCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KTtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IGF3YWl0IHRoaXMuZGVsZXRlUm93cyhldmVudCwgW3Jvd10sIG9wdHMpO1xuXG4gICAgLy8gVW5zZWxlY3QgdGhlIGRlbGV0ZWQgcm93XG4gICAgaWYgKGRlbGV0ZUNvdW50ICYmIGlzU2VsZWN0ZWQpIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XG5cbiAgICByZXR1cm4gZGVsZXRlQ291bnQgPT09IDE7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSByb3dzXG4gICAqIEBwYXJhbSBvcHRzIFVzZSBpbnRlcmFjdGl2ZT1mYWxzZSB0byBhdm9pZCB1c2VyIGludGVyYWN0aW9uIChlLmcuIHVzZXIgY29uZmlybWF0aW9uKVxuICAgKiAgICBBbmQgdG8gZm9yY2UgZGVsZXRpb24gZXZlbiBpZiB0YWJsZSBpcyBidXN5XG4gICAqL1xuICBhc3luYyBkZWxldGVSb3dzKGV2ZW50OiBFdmVudCB8IG51bGwsIHJvd3M6IFRhYmxlRWxlbWVudDxUPltdLCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5UQUJMRV9SRUFEX09OTFksIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9SRUFEX09OTFknIH07XG4gICAgfVxuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIDA7IC8vIFNLaXBcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIGlmICghdGhpcy5fZW5hYmxlZCB8fCBpc0VtcHR5QXJyYXkocm93cykpIHJldHVybiAwOyAvLyBTa2lwIGlzIGRpc2FibGVkLCBvciBubyByb3dzIHRvIGRlbGV0ZVxuXG4gICAgaWYgKHRoaXMubG9hZGluZyAmJiAoIW9wdHMgfHwgb3B0cy5pbnRlcmFjdGl2ZSAhPT0gZmFsc2UpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1thcHAtdGFibGVdIFNraXAgZGVsZXRlUm93cygpIGJlY2F1c2UgdGFibGUgaXMgYnVzeSAobG9hZGluZykuIFVzZSBvcHRzLmludGVyYWN0aXZlID0gZmFsc2UgdG8gZm9yY2UgZGVsZXRpb24nKTtcbiAgICAgIHJldHVybiAwOyAvLyBTa2lwIGlmIGxvYWRpbmdcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdG8ga2VlcCBuZXdseSBjcmVhdGVkIHJvd1xuICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uaWQgPT09IC0xICYmIHRoaXMuZWRpdGVkUm93LmVkaXRpbmcgJiYgIXJvd3MuaW5jbHVkZXModGhpcy5lZGl0ZWRSb3cpKSB7XG4gICAgICBjb25zdCBjb25maXJtZWQgPSB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKCk7XG4gICAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuIDA7IC8vIENhbm5vdCBkZWxldGUgKGUuZy4gZWRpdGVkIHJvdyBpcyBpbnZhbGlkKVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGNhbiBkZWxldGVcbiAgICBjb25zdCBjYW5EZWxldGUgPSBhd2FpdCB0aGlzLmNhbkRlbGV0ZVJvd3Mocm93cywgb3B0cyk7XG4gICAgaWYgKCFjYW5EZWxldGUpIHJldHVybiAwOyAvLyBDYW5ub3QgZGVsZXRlXG5cbiAgICAvLyBSZXZlcnNlIHJvdyBvcmRlciAob24gYSBjb3B5KVxuICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kLCBuZWVkIGJlY2F1c2Ugcm93LmRlbGV0ZSgpIGhhcyBhc3luYyBleGVjdXRpb25cbiAgICAvLyBhbmQgaW5kZXggY2FjaGUgaXMgdXBkYXRlZCB3aXRoIGEgZGVsYXlcbiAgICBsZXQgdGVtcFJvd3MgPSByb3dzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4gKGEuaWQgPiBiLmlkID8gLTEgOiAxKSk7XG5cbiAgICBjb25zdCBkZWxldGVkUm93czogVGFibGVFbGVtZW50PFQ+W10gPSBbXTtcblxuICAgIC8vIElmIGRhdGEgbmVlZCB0byBiZSBzYXZlZCBmaXJzdFxuICAgIGlmICh0aGlzLnNhdmVCZWZvcmVEZWxldGUpIHtcbiAgICAgIC8vIEV4Y2x1ZGUgaW52YWxpZCByb3dzIChiZWNhdXNlIG9mIHNhdmUoKSB3aWxsIGZhaWwsIHdoZW4gZXhpc3RzIHNvbWUgaW52YWxpZCByb3dzKVxuICAgICAgdGVtcFJvd3MgPSB0ZW1wUm93cy5maWx0ZXIoKHJvdykgPT4ge1xuICAgICAgICAvLyBEZWxldGUgdGhlIHJvdyA6XG4gICAgICAgIC8vIC0gaWYgbmV3bHkgY3JlYXRlZCByb3cgKGlkID0gLTEpLFxuICAgICAgICAvLyAtIG9yIGlmIGludmFsaWQgYW5kIG5vdCBlZGl0aW5nICg9IG5vdCBjYW5jZWxsYWJsZSlcbiAgICAgICAgaWYgKHJvdy5pZCA9PT0gLTEgfHwgKCFyb3cuZWRpdGluZyAmJiByb3cuaW52YWxpZCkgLypkbyBub3QgdXNlICF2YWxpZCBiZWNhdXNlIGlmIHJvdyBpcyBkaXNhYmxlZCwgaXQgd2lsbCBiZSBhbHdheXMgIXZhbGlkICovKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gRGVsZXRlIHJvdyAjJHtyb3cuaWR9YCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3Qocm93KTtcbiAgICAgICAgICByb3cuZGVsZXRlKCk7XG4gICAgICAgICAgdGhpcy52aXNpYmxlUm93Q291bnQtLTtcbiAgICAgICAgICB0aGlzLnRvdGFsUm93Q291bnQtLTtcbiAgICAgICAgICBkZWxldGVkUm93cy5wdXNoKHJvdyk7XG4gICAgICAgICAgaWYgKHRoaXMuZWRpdGVkUm93ID09PSByb3cpIHRoaXMuZWRpdGVkUm93ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRXhjbHVkZSBmcm9tIHRoZSBsaXN0IHRvIGRlbGV0ZSB1c2luZyB0aGUgc2VydmljZVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbmNlbCB0aGUgcm93IChhbmQgbWFyayBhcyBwcmlzdGluZSksIHdoZW4gbm90IHZhbGlkIGJ1dCBpbiBlZGl0aW9uXG4gICAgICAgIGVsc2UgaWYgKHJvdy5lZGl0aW5nICYmICFyb3cudmFsaWQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChyb3cpO1xuICAgICAgICAgIHJvdy5jYW5jZWwoKTtcbiAgICAgICAgICAvLyBNYXJrIHJvdyBhcyBwcmlzdGluZSAoaWYgcG9zc2libGUpXG4gICAgICAgICAgdGhpcy5jaGVja0lmUm93UHJpc3RpbmUocm93LCB7IGVtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlIC8qYXZvaWQgcHJvcGFnYXRpb24gdG8gdGFibGUqLyB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcm93LiB0aGUgcm93IHdpbGwgYmUgZGVsZXRlZCBhZnRlciB0aGUgc2F2ZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgICAgLy8gQXBwbHkgc2F2ZSwgb25seSBpZiB0aGVyZSBpcyBzdGlsbCBzb21lIHJvd3MgdG8gZGVsZXRlXG4gICAgICAvLyBXQVJOOiBJZiBubyBtb3JlIHJvd3MgKGUuZy4gYmVjYXVzZSBhbGwgaGFzIGJlZW4gY2FuY2VsbGVkKSB0aGVuIGNvbnRpbnVlIGFueXdheSB0byBjbGVhciBlZGl0ZWRSb3cgYW5kIHNlbGVjdGlvbiAoaXNzdWUgSU1BR0lORS02NjkpXG4gICAgICBpZiAoZGVsZXRlZFJvd3MubGVuZ3RoIHx8IHRlbXBSb3dzLmxlbmd0aCkge1xuICAgICAgICAvLyBTYXZlIGRhdGEgKGUuZy4gd2hlbiB1c2luZyBtZW1vcnkgc2VydmljZSlcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ2RlbGV0ZScpO1xuICAgICAgICBpZiAoIXNhdmVkKSB7XG4gICAgICAgICAgLy8gU3RvcCBpZiBzYXZlIGNhbmNlbGxlZCBvciBzYXZlIGZhaWxlZFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBBcHBseSBkZWxldGlvbiBvbiBkYXRhc291cmNlXG4gICAgICAvLyBJZiBubyBtb3JlIHJvd3MgdG8gZGVsZXRlLCBjb250aW51ZSBhbnl3YXkgdG8gY2xlYXIgZWRpdGVkUm93IGFuZCBzZWxlY3Rpb24gKGlzc3VlIElNQUdJTkUtNjY5KVxuICAgICAgaWYgKHRlbXBSb3dzLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBEZWxldGUgJHt0ZW1wUm93cy5sZW5ndGh9IHJvd3MuLi5gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5kZWxldGVBbGwodGVtcFJvd3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBETyBub3QgdXBkYXRlIG1hbnVhbGx5LCBiZWNhdXNlIHdhdGNoQUxsKCkuc3Vic2NyaWJlKCkgd2lsbCB1cGRhdGUgdGhpcyBjb3VudFxuICAgICAgLy90aGlzLnRvdGFsUm93Q291bnQgLT0gZGVsZXRlQ291bnQ7XG4gICAgICAvL3RoaXMudmlzaWJsZVJvd0NvdW50IC09IGRlbGV0ZUNvdW50O1xuXG4gICAgICAvLyBEZXNlbGVjdCBkZWxldGVkIHJvd3NcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KC4uLnJvd3MpO1xuXG4gICAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubWFya0FzRGlydHkoeyBlbWl0RXZlbnQ6IGZhbHNlIC8qbWFya0ZvckNoZWNrKCkgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIqLyB9KTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgIHRoaXMub25BZnRlckRlbGV0ZWRSb3dzLm5leHQocm93cyk7XG5cbiAgICAgIHJldHVybiByb3dzLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2V0RXJyb3IoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWxlY3RSb3dCeUlkKGlkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgIGF3YWl0IHRoaXMud2FpdElkbGUoKTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93KGlkKTtcbiAgICBpZiAoIXJvdykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNsaWNrUm93KG51bGwsIHJvdyk7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIHNlbGVjdCByb3cgYnkgZGF0YS4gV2lsbCB1c2UgZXF1YWxzKCkgdG8gZmluZCBzYW1lIHJvdydzIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIGFzeW5jIHNlbGVjdFJvd0J5RGF0YShkYXRhOiBUKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy53YWl0SWRsZSgpO1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVNvdXJjZS5nZXRSb3dzKCkuZmluZCgocm93KSA9PiB0aGlzLmVxdWFscyhyb3cuY3VycmVudERhdGEsIGRhdGEpKTtcbiAgICBpZiAoIXJvdykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNsaWNrUm93KG51bGwsIHJvdyk7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RSb3coZXZlbnQ6IEV2ZW50LCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2VsZWN0aW9uLnRvZ2dsZShyb3cpO1xuICB9XG5cbiAgY2xpY2tSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIC8vIFdhaXQgd2hpbGUgbG9hZGluZywgYW5kIGxvb3BcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFdhaXRpbmcgYmVmb3JlIGFwcGx5IGNsaWNrUm93KCkgKGRhdGFzb3VyY2UgaXMgYnVzeSkuLi4nKTtcbiAgICAgIHRoaXMud2FpdElkbGUoeyB0aW1lb3V0OiAyMDAwIH0pLnRoZW4oKCkgPT4gdGhpcy5jbGlja1JvdyhldmVudCwgcm93KSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJbdGFibGVdIERldGVjdCBjbGljayBvbiByb3dcIik7XG5cbiAgICAvLyBDYW5jZWxsZWQgYnkgZXZlbnRcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIGNsaWNrUm93IGV2ZW50IGlzIGRlZmF1bHRQcmV2ZW50ZWQnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBbHJlYWR5IGluIGVkaXRpb25cbiAgICBpZiAocm93LmlkID09PSAtMSB8fCByb3cuZWRpdGluZykge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gUm93IGFscmVhZHkgZWRpdGluZy4gU2tpcCBjbGlja1JvdyBldmVudCcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gT3BlbiB0aGUgZGV0YWlsIHBhZ2UgKGlmIG5vdCBpbmxpbmUgZWRpdGluZylcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdGlvbikge1xuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgICAgdGhpcy5vcGVuUm93KHJvdy5jdXJyZW50RGF0YS5pZCwgcm93KVxuICAgICAgICAudGhlbigoKSA9PiB0aGlzLm1hcmtBc0xvYWRlZCgpKVxuICAgICAgICAuY2F0Y2goKCkgPT4gdGhpcy5tYXJrQXNMb2FkZWQoKSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFN0YXJ0IGVkaXRpbmcgcm93XG4gICAgcmV0dXJuIHRoaXMuZWRpdFJvdyhldmVudCwgcm93LCB7IGZvY3VzQ29sdW1uOiB1bmRlZmluZWQgLypmb3JjZSB0byB1c2UgdGhlIGNsaWNrIHRhcmdldCovIH0pO1xuICB9XG5cbiAgbW92ZVJvdyhpZDogbnVtYmVyLCBkaXJlY3Rpb246IG51bWJlcikge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5tb3ZlKGlkLCBkaXJlY3Rpb24pO1xuICB9XG5cbiAgcmVhZHkob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHdhaXRGb3JUcnVlKHRoaXMucmVhZHlTdWJqZWN0LCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QsIC4uLm9wdHMgfSk7XG4gIH1cblxuICB3YWl0SWRsZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICByZXR1cm4gd2FpdEZvckZhbHNlKHRoaXMubG9hZGluZ1N1YmplY3QsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCwgLi4ub3B0cyB9KTtcbiAgfVxuXG4gIGFzeW5jIG9wZW5TZWxlY3RDb2x1bW5zTW9kYWwoXz86IEV2ZW50KTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBDb3B5IGN1cnJlbnQgY29sdW1ucyAoZGVlcCBjb3B5KVxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEN1cnJlbnRDb2x1bW5zKCk7XG5cbiAgICBjb25zdCBoYXNUb3BNb2RhbCA9ICEhKGF3YWl0IHRoaXMubW9kYWxDdHJsLmdldFRvcCgpKTtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IFRhYmxlU2VsZWN0Q29sdW1uc0NvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7IGNvbHVtbnMgfSxcbiAgICAgIGNzc0NsYXNzOiBoYXNUb3BNb2RhbCAmJiAnc3RhY2stbW9kYWwnLFxuICAgIH0pO1xuXG4gICAgLy8gT3BlbiB0aGUgbW9kYWxcbiAgICBhd2FpdCBtb2RhbC5wcmVzZW50KCk7XG5cbiAgICAvLyBPbiBkaXNtaXNzXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBtb2RhbC5vbkRpZERpc21pc3MoKTtcbiAgICBpZiAoIWRhdGEpIHJldHVybjsgLy8gQ0FOQ0VMTEVEXG5cbiAgICAvLyBBcHBseSBjb2x1bW5zXG4gICAgY29uc3QgdXNlckNvbHVtbnMgPSAoZGF0YSB8fCBbXSkuZmlsdGVyKChjKSA9PiBjLmNhbkhpZGUgPT09IGZhbHNlIHx8IGMudmlzaWJsZSkubWFwKChjKSA9PiBjLm5hbWUpIHx8IFtdO1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuY29uY2F0KHVzZXJDb2x1bW5zKS5jb25jYXQoUkVTRVJWRURfRU5EX0NPTFVNTlMpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICAvLyBVcGRhdGUgdXNlciBzZXR0aW5nc1xuICAgIGF3YWl0IHRoaXMuc2F2ZVBhZ2VTZXR0aW5ncyh1c2VyQ29sdW1ucywgU0VUVElOR1NfRElTUExBWV9DT0xVTU5TKTtcbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIHJldHVybiByb3cuaWQ7XG4gIH1cblxuICBkb1JlZnJlc2goZXZlbnQ/OiBDb21wbGV0YWJsZUV2ZW50KSB7XG4gICAgdGhpcy5vblJlZnJlc2guZW1pdChldmVudCk7XG5cbiAgICAvLyBXaGVuIHRhcmdldCB3YWl0IGZvciBhIGNvbXBsZXRlIChlLmcuIElvblJlZnJlc2hlcilcbiAgICBpZiAoZXZlbnQ/LnRhcmdldCAmJiBldmVudC50YXJnZXQuY29tcGxldGUpIHtcbiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgICAgIGV2ZW50LnRhcmdldC5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudENvbHVtbnMoKTogQ29sdW1uSXRlbVtdIHtcbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLnNsaWNlKFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMubGVuZ3RoKS5maWx0ZXIoKG5hbWUpID0+IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKG5hbWUpID09PSAtMSk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uc1xuICAgICAgLmNvbmNhdChoaWRkZW5Db2x1bW5zKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gIVJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuaW5jbHVkZXMobmFtZSkgJiYgIVJFU0VSVkVEX0VORF9DT0xVTU5TLmluY2x1ZGVzKG5hbWUpICYmICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhuYW1lKSlcbiAgICAgIC5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxhYmVsOiB0aGlzLmdldEkxOG5Db2x1bW5OYW1lKG5hbWUpLFxuICAgICAgICB2aXNpYmxlOiB0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5kZXhPZihuYW1lKSAhPT0gLTEsXG4gICAgICAgIGNhbkhpZGU6IHRoaXMuZ2V0UmVxdWlyZWRDb2x1bW5zKCkuaW5kZXhPZihuYW1lKSA9PT0gLTEsXG4gICAgICB9KSk7XG4gIH1cblxuICBlc2NhcGVFZGl0aW5nUm93KGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPikge1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhcm93LmVkaXRpbmcpIHJldHVybjtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbYXBwLXRhYmxlXSBDYW5jZWwgdGhlIHJvdyAoa2V5ZG93bi5lc2NhcGUpJyk7XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIC8vIEF2b2lkIHRvIGNhbmNlbCB0aGUgZWRpdG9yXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgbmV3IHJvdyAobm8gaWQpXG4gICAgaWYgKHJvdy5pZCA9PT0gLTEpIHtcbiAgICAgIGlmIChyb3cudmFsaWRhdG9yKSB7XG4gICAgICAgIC8vIElmIHBlbmRpbmc6IFdhaXQgZW5kIG9mIHZhbGlkYXRpb24sIHRoZW4gbG9vcFxuICAgICAgICBpZiAocm93LnZhbGlkYXRvci5wZW5kaW5nKSB7XG4gICAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvcikudGhlbigoKSA9PiB0aGlzLmVzY2FwZUVkaXRpbmdSb3coZXZlbnQsIHJvdykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJvdyBpcyBpbnZhbGlkOiBkZWxldGUgdGhlIHJvd1xuICAgICAgICBpZiAocm93LnZhbGlkYXRvci5pbnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVOZXdSb3coZXZlbnQsIHJvdyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSByb3cgZXhpc3RzIChoYXMgYW4gaWQpXG4gICAgZWxzZSB7XG4gICAgICAvLyBuZWVkIHRvIGNhbGwgY2FuY2VsIGZ1bmN0aW9uIChpZiBjb25maXJtYXRpb24gd2lsbCBiZSBjYWxsIGJlZm9yZSBiZWZvcmUpXG4gICAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsKSB7XG4gICAgICAgIHRoaXMuY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgeyBrZWVwRWRpdGluZzogZmFsc2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCB0cnkgdG8gY29uZmlybSB0aGUgcm93XG4gICAgdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUNvbnRyb2xQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gQ2FuIGJlIG92ZXJyaWRlIGJ5IHN1YmNsYXNzZXMsIHRvIHJlc29sdmUgYWxsIGZpZWxkIG5hbWVcblxuICAgIC8vIFVzZSBjb2x1bW5zIGtleSwgaGFzIGRlZmF1bHQgbmFtZVxuICAgIGNvbnN0IGkxOG5Db2x1bW5LZXkgPSB0aGlzLmdldEkxOG5Db2x1bW5OYW1lKHBhdGgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZT8uaW5zdGFudChpMThuQ29sdW1uS2V5KSB8fCBpMThuQ29sdW1uS2V5O1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAtLSAqL1xuXG4gIHByb3RlY3RlZCBlZGl0Um93KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nIH0pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQgfHwgIXRoaXMuaW5saW5lRWRpdGlvbikgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmVkaXRlZFJvdyA9PT0gcm93KSByZXR1cm4gdHJ1ZTsgLy8gQWxyZWFkeSB0aGUgZWRpdGVkIHJvd1xuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgY29uZmlybWVkID0gdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpO1xuICAgIGlmICghY29uZmlybWVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoIXJvdy5lZGl0aW5nICYmICF0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHRoaXMuZm9jdXNDb2x1bW4gPSAob3B0cyAmJiBvcHRzLmZvY3VzQ29sdW1uKSB8fCB0aGlzLmZvY3VzQ29sdW1uO1xuICAgICAgdGhpcy5fZGF0YVNvdXJjZS5zdGFydEVkaXQocm93KTtcbiAgICB9XG4gICAgdGhpcy5lZGl0ZWRSb3cgPSByb3c7XG4gICAgdGhpcy5vblN0YXJ0RWRpdGluZ1Jvdy5lbWl0KHJvdyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIHNlbGVjdCByb3csIGJ5IHJvdy5pZCwgb3IgYnkgZGF0YS4gV0lsbCB1c2UgRW50aXR5VXRpbHMuZXF1YWxzKClcbiAgICpcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzZWxlY3RSb3dCeUlkT3JEYXRhKGlkOiBudW1iZXIsIGRhdGE/OiBUKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgLy8gU2VsZWN0IGJ5IHJvdyBpZCAoaWYgTk9UIGEgbmV3IHJvdylcbiAgICAgIGlmIChpc05vdE5pbChpZCkgfHwgaWQgIT09IC0xKSB7XG4gICAgICAgIGRvbmUgPSBhd2FpdCB0aGlzLnNlbGVjdFJvd0J5SWQoaWQpO1xuICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnNvbGUud2FybignW2FwcC10YWJsZV0gU2F2ZTogQ2Fubm90IHJlc2VsZWN0IHJvdyBieSByb3cuaWQ6ICcsIGlkKTtcbiAgICAgIH1cblxuICAgICAgLy8gVHJ5IGJ5IGRhdGFcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRvbmUgPSBhd2FpdCB0aGlzLnNlbGVjdFJvd0J5RGF0YShkYXRhKTtcbiAgICAgICAgaWYgKGRvbmUpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1thcHAtdGFibGVdIFNhdmU6IENhbm5vdCByZXNlbGVjdCByb3cgYnkgZGF0YTogJywgZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIExvZywgYnV0IGNvbnRpbnVlXG4gICAgICBjb25zb2xlLmVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiB0aGUgc2VsZWN0ZWQgcm93IGlmIHVuaXF1ZSBpbiBzZWxlY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgc2luZ2xlU2VsZWN0ZWRSb3coKTogVGFibGVFbGVtZW50PFQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQ/Lmxlbmd0aCA9PT0gMSA/IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkWzBdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNhbkRlbGV0ZVJvd3Mocm93czogVGFibGVFbGVtZW50PFQ+W10sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gQ2hlY2sgdXNpbmcgZW1pdHRlclxuICAgIGlmICh0aGlzLm9uQmVmb3JlRGVsZXRlUm93cy5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2FuRGVsZXRlID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlRGVsZXRlUm93cywgJ2NhbkRlbGV0ZScsIHtcbiAgICAgICAgICBkZXRhaWw6IHsgcm93cyB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYW5EZWxldGUpIHJldHVybiBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyID09PSAnQ0FOQ0VMTEVEJykgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbFxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBjaGVja2luZyBpZiBjYW4gZGVsZXRlIHJvd3MnLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uXG4gICAgaWYgKHRoaXMuY29uZmlybUJlZm9yZURlbGV0ZSAmJiAoIW9wdHMgfHwgb3B0cy5pbnRlcmFjdGl2ZSAhPT0gZmFsc2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hc2tEZWxldGVDb25maXJtYXRpb24obnVsbCwgcm93cyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNhbkNhbmNlbFJvd3Mocm93cz86IFRhYmxlRWxlbWVudDxUPltdLCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIEdldCBkaXJ0eSByb3dzXG4gICAgcm93cyA9IHJvd3MgfHwgdGhpcy5kYXRhU291cmNlLmdldFJvd3MoKS5maWx0ZXIoKHJvdykgPT4gcm93LnZhbGlkYXRvcj8uZGlydHkpO1xuXG4gICAgaWYgKGlzRW1wdHlBcnJheShyb3dzKSkgcmV0dXJuIHRydWU7IC8vIE5vIGRpcnR5OiBPS1xuXG4gICAgLy8gQ2hlY2sgdXNpbmcgZW1pdHRlclxuICAgIGlmICh0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXNDYW5jZWwgPSBhd2FpdCBlbWl0UHJvbWlzZUV2ZW50KHRoaXMub25CZWZvcmVDYW5jZWxSb3dzLCAnY2FuQ2FuY2VsJywge1xuICAgICAgICAgIGRldGFpbDogeyByb3dzIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWlzQ2FuY2VsKSByZXR1cm4gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciA9PT0gJ0NBTkNFTExFRCcpIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWxcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgY2FuIGNhbmNlbCByb3dzJywgZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvblxuICAgIGlmICh0aGlzLmNvbmZpcm1CZWZvcmVDYW5jZWwgJiYgKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXNrQ2FuY2VsQ29uZmlybWF0aW9uKG51bGwsIHJvd3MpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlQmVmb3JlQWN0aW9uKHNhdmVBY3Rpb246IFNhdmVBY3Rpb25UeXBlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmRpcnR5KSB7XG4gICAgICAvLyBDb250aW51ZSB3aXRob3V0IHNhdmVcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxldCBzYXZlOiBib29sZWFuO1xuICAgIHN3aXRjaCAoc2F2ZUFjdGlvbikge1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZURlbGV0ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmaWx0ZXInOlxuICAgICAgICBzYXZlID0gdGhpcy5zYXZlQmVmb3JlRmlsdGVyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NvcnQnOlxuICAgICAgICBzYXZlID0gdGhpcy5zYXZlQmVmb3JlU29ydDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzYXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IGJlaGF2aW9yXG4gICAgbGV0IGNvbmZpcm1lZCA9IHRydWU7XG5cbiAgICBpZiAoc2F2ZSkge1xuICAgICAgaWYgKHRoaXMub25CZWZvcmVTYXZlLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEFzayBjb25maXJtYXRpb25cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBlbWl0UHJvbWlzZUV2ZW50KHRoaXMub25CZWZvcmVTYXZlLCAnYmVmb3JlU2F2ZScsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBhY3Rpb246IHNhdmVBY3Rpb24sIHZhbGlkOiB0aGlzLnZhbGlkIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uZmlybWVkID0gcmVzLmNvbmZpcm1lZDtcbiAgICAgICAgICBzYXZlID0gcmVzLnNhdmU7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnIgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgY2FuIGRlbGV0ZSByb3dzJywgZXJyKTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICBpZiAoc2F2ZSkge1xuICAgICAgICAvLyBVc2VyIGNvbmZpcm1lZCBzYXZlXG4gICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKCk7XG4gICAgICAgIHRoaXMubWFya0FzRGlydHkoKTsgLy8gUmVzdG9yZSBkaXJ0eSBmbGFnXG4gICAgICAgIHJldHVybiBzYXZlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlOyAvLyBObyBzYXZlIGJ1dCBjb250aW51ZSBhY3Rpb25cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsIHRoZSBhY3Rpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGEgcm93IGRldGFpbCB2aWV3LiBCeSBkZWZhdWx0LCB3aWxsIHRvIG9wZW4gcm93IGRldGFpbCBwYWdlLlxuICAgKiBDYW4gYmUgb3ZlcnJpZGUgYnkgc3ViY2xhc3NlcywgQlVUIHByZWZlciB0byBzdWJzY3JpYmUgb24gb25PcGVuUm93XG4gICAqXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvcGVuUm93KGlkOiBJRCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5hbGxvd1Jvd0RldGFpbCkge1xuICAgICAgaWYgKHRoaXMuZGVidWcgJiYgdGhpcy5kaXJ0eSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gT3BlbmluZyByb3cgZGV0YWlscywgYnV0IHRhYmxlIGhhcyB1bnNhdmVkIGNoYW5nZXMhJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9uT3BlblJvdy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMub25PcGVuUm93LmVtaXQocm93KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vIElEIGRlZmluZWQ6IHVuYWJsZSB0byBvcGVuIGRldGFpbHNcbiAgICAgIGlmIChpc05pbChpZCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIE9wZW5pbmcgcm93IGRldGFpbHMsIGJ1dCBkYXRhIGhhcyBubyBpZCEnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlRm9yd2FyZChgJHt0aGlzLnJvdXRlci51cmx9LyR7aWQudG9TdHJpbmcoKX1gLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7fSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb3Blbk5ld1Jvd0RldGFpbChldmVudD86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5hbGxvd1Jvd0RldGFpbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHRoaXMub25OZXdSb3cub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub25OZXdSb3cuZW1pdChldmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlRm9yd2FyZChgJHt0aGlzLnJvdXRlci51cmx9L25ld2ApO1xuICB9XG5cbiAgLy8gY2FuIGJlIG92ZXJyaWRkZW4gdG8gYWRkIG1vcmUgcmVxdWlyZWQgY29sdW1uc1xuICBwcm90ZWN0ZWQgZ2V0UmVxdWlyZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiBERUZBVUxUX1JFUVVJUkVEX0NPTFVNTlM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VXNlckNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VTZXR0aW5ncyhTRVRUSU5HU19ESVNQTEFZX0NPTFVNTlMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNvcnRlZENvbHVtbigpOiBNYXRTb3J0YWJsZSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGFnZVNldHRpbmdzKFNFVFRJTkdTX1NPUlRFRF9DT0xVTU4pO1xuICAgIGNvbnN0IHBhcnRzID0gZGF0YSAmJiBkYXRhLnNwbGl0KCc6Jyk7XG4gICAgaWYgKHBhcnRzICYmIHBhcnRzLmxlbmd0aCA9PT0gMiAmJiB0aGlzLmNvbHVtbnMuaW5jbHVkZXMocGFydHNbMF0pKSB7XG4gICAgICByZXR1cm4geyBpZDogcGFydHNbMF0sIHN0YXJ0OiBwYXJ0c1sxXSA9PT0gJ2Rlc2MnID8gJ2Rlc2MnIDogJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVmYXVsdFNvcnRCeSkge1xuICAgICAgcmV0dXJuIHsgaWQ6IHRoaXMuZGVmYXVsdFNvcnRCeSwgc3RhcnQ6IHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24gfHwgJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2UgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaWQ6ICdpZCcsIHN0YXJ0OiAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZSB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2VTaXplKCk6IG51bWJlciB7XG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLmdldFBhZ2VTZXR0aW5nczxudW1iZXI+KFNFVFRJTkdTX1BBR0VfU0laRSk7XG4gICAgcmV0dXJuIHBhZ2VTaXplIHx8IHRoaXMuZGVmYXVsdFBhZ2VTaXplO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgdXNlckNvbHVtbnMgPSB0aGlzLmdldFVzZXJDb2x1bW5zKCk7XG5cbiAgICAvLyBObyB1c2VyIG92ZXJyaWRlXG4gICAgaWYgKCF1c2VyQ29sdW1ucykge1xuICAgICAgLy8gUmV0dXJuIGRlZmF1bHQsIHdpdGhvdXQgY29sdW1ucyB0byBoaWRlXG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uKSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGZpeGVkIHN0YXJ0IGNvbHVtbnNcbiAgICBjb25zdCBmaXhlZFN0YXJ0Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGMpID0+IFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuaW5jbHVkZXMoYykpO1xuXG4gICAgLy8gUmVtb3ZlIGVuZCBjb2x1bW5zXG4gICAgY29uc3QgZml4ZWRFbmRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoYykgPT4gUkVTRVJWRURfRU5EX0NPTFVNTlMuaW5jbHVkZXMoYykpO1xuXG4gICAgLy8gUmVtb3ZlIGZpeGVkIGNvbHVtbnMgZnJvbSB1c2VyIGNvbHVtbnNcbiAgICB1c2VyQ29sdW1ucyA9IHVzZXJDb2x1bW5zLmZpbHRlcigoYykgPT4gIWZpeGVkU3RhcnRDb2x1bW5zLmluY2x1ZGVzKGMpICYmICFmaXhlZEVuZENvbHVtbnMuaW5jbHVkZXMoYykgJiYgdGhpcy5jb2x1bW5zLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIEFkZCByZXF1aXJlZCBjb2x1bW5zIGlmIG1pc3NpbmdcbiAgICB1c2VyQ29sdW1ucy5wdXNoKFxuICAgICAgLi4udGhpcy5nZXRSZXF1aXJlZENvbHVtbnMoKS5maWx0ZXIoKGMpID0+ICFmaXhlZFN0YXJ0Q29sdW1ucy5pbmNsdWRlcyhjKSAmJiAhZml4ZWRFbmRDb2x1bW5zLmluY2x1ZGVzKGMpICYmICF1c2VyQ29sdW1ucy5pbmNsdWRlcyhjKSlcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGZpeGVkU3RhcnRDb2x1bW5zXG4gICAgICAgIC5jb25jYXQodXNlckNvbHVtbnMpXG4gICAgICAgIC5jb25jYXQoZml4ZWRFbmRDb2x1bW5zKVxuICAgICAgICAvLyBSZW1vdmUgY29sdW1ucyB0byBoaWRlXG4gICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbXB1dGUgZGlzcGxheSBjb2x1bW5zXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVDb2x1bW5zKCkge1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZ2V0RGlzcGxheUNvbHVtbnMoKTtcbiAgICBpZiAoIXRoaXMubG9hZGluZykgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlclN1YnNjcmlwdGlvbihzdWI6IFN1YnNjcmlwdGlvbikge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3ViKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YjogU3Vic2NyaXB0aW9uKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZShzdWIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyQXV0b2NvbXBsZXRlRmllbGQ8RSA9IGFueSwgRUYgPSBhbnk+KFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBNYXRBdXRvY29tcGxldGVGaWVsZEFkZE9wdGlvbnM8RSwgRUY+XG4gICk6IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnPEUsIEVGPiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlci5hZGQoZmllbGROYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJMThuQ29sdW1uTmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKHRoaXMuaTE4bkNvbHVtblByZWZpeCB8fCAnJykgKyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKGNvbHVtbk5hbWUpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVUYWJsZUlkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxvY2F0aW9uXG4gICAgICAgIC5wYXRoKHRydWUpXG4gICAgICAgIC5yZXBsYWNlKC9bP10uKiQvZywgJycpXG4gICAgICAgIC5yZXBsYWNlKC9cXC9bXFxkXSsvZywgJ19pZCcpICtcbiAgICAgICdfJyArXG4gICAgICAvLyBHZXQgYSBjb21wb25lbnQgdW5pcXVlIG5hbWUgLSBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAxMTQ2ODIvaG93LXRvLWFjY2Vzcy1jb21wb25lbnRzLXVuaXF1ZS1lbmNhcHN1bGF0aW9uLWlkLWluLWFuZ3VsYXItOVxuICAgICAgKHRoaXMuY29uc3RydWN0b3JbJ8m1Y21wJ10/LmlkIHx8IHRoaXMuY29uc3RydWN0b3IubmFtZSlcbiAgICApO1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoXCJbdGFibGVdIGlkID0gXCIgKyBpZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYWRkUm93VG9UYWJsZShcbiAgICBpbnNlcnRBdD86IG51bWJlcixcbiAgICBvcHRzPzogeyBmb2N1c0NvbHVtbj86IHN0cmluZzsgZWRpdGluZz86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfVxuICApOiBQcm9taXNlPFRhYmxlRWxlbWVudDxUPiB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIFRyeSB0byBmaW5pc2ggZWRpdGVkIHJvdyBmaXJzdFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gQ2Fubm90IGFkZCBuZXcgcm93LCBiZWNhdXNlIHRoZSBwcmV2aW91cyBlZGl0ZWQgcm93IGNhbm5vdCBiZSBjb25maXJtZWQnKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZWRpdGluZyA9IHRoaXMuaW5saW5lRWRpdGlvbiAmJiAoIW9wdHMgfHwgb3B0cy5lZGl0aW5nICE9PSBmYWxzZSk7IC8vIHRydWUgYnkgZGVmYXVsdCwgaWYgaW5saW5lRWRpdGlvblxuXG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5jcmVhdGVOZXcoaW5zZXJ0QXQsIHsgZWRpdGluZyB9KTtcbiAgICBpZiAoIXJvdykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGlmIChyb3cuZWRpdGluZykge1xuICAgICAgLy8gVXBkYXRlIGZvY3VzZWQgY29sdW1uXG4gICAgICB0aGlzLmZvY3VzRmlyc3RDb2x1bW4gPSB0cnVlO1xuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IG9wdHM/LmZvY3VzQ29sdW1uIHx8IHRoaXMuZmlyc3RVc2VyQ29sdW1uO1xuXG4gICAgICAvLyBFbWl0IHN0YXJ0IGVkaXRpbmcgZXZlbnRcbiAgICAgIHRoaXMuZWRpdGVkUm93ID0gcm93O1xuICAgICAgdGhpcy5vblN0YXJ0RWRpdGluZ1Jvdy5lbWl0KHJvdyk7XG4gICAgfVxuXG4gICAgdGhpcy50b3RhbFJvd0NvdW50Kys7XG4gICAgdGhpcy52aXNpYmxlUm93Q291bnQrKztcblxuICAgIHRoaXMubWFya0FzRGlydHkoeyBlbWl0RXZlbnQ6IGZhbHNlIC8qbWFya0ZvckNoZWNrKCkgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIqLyB9KTtcblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlckNlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCBmb3JtUGF0aD86IHN0cmluZywgZW1pdEluaXRpYWxWYWx1ZT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGZvcm1QYXRoID0gZm9ybVBhdGggfHwgbmFtZTtcbiAgICBlbWl0SW5pdGlhbFZhbHVlID0gZW1pdEluaXRpYWxWYWx1ZSB8fCBmYWxzZTtcbiAgICBsZXQgZGVmID0gdGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnNbbmFtZV07XG4gICAgaWYgKGRlZiAmJiAoZGVmLmZvcm1QYXRoICE9PSBmb3JtUGF0aCB8fCBkZWYuZW1pdEluaXRpYWxWYWx1ZSAhPT0gZW1pdEluaXRpYWxWYWx1ZSkpIHtcbiAgICAgIHRocm93IEVycm9yKFwiQWxyZWFkeSByZWdpc3RlciBhIGNlbGwgdmFsdWUgY2hhbmdlIGZvciB0aGlzIG5hbWUsIHdpdGggZGlmZmVyZW50ICdmb3JtUGF0aCcgb3IgJ2VtaXRJbml0aWFsVmFsdWUnLiBQbGVhc2UgdXNlIHNhbWUgYXJndW1lbnRzLlwiKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgZXhpc3RzOiByZWdpc3RlciBuZXcgZGVmaW5pdGlvblxuICAgIGlmICghZGVmKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBOZXcgbGlzdGVuZXIgeyR7bmFtZX19IGZvciB2YWx1ZSBjaGFuZ2VzIG9uIHBhdGggJHtmb3JtUGF0aH1gKTtcbiAgICAgIGRlZiA9IHtcbiAgICAgICAgc3ViamVjdDogbmV3IFN1YmplY3Q8YW55PigpLFxuICAgICAgICBzdWJzY3JpcHRpb246IG51bGwsXG4gICAgICAgIGZvcm1QYXRoLFxuICAgICAgICBlbWl0SW5pdGlhbFZhbHVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdID0gZGVmO1xuXG4gICAgICAvLyBTdGFydCB0aGUgbGlzdGVuZXIsIHdoZW4gZWRpdGluZyBzdGFydHNcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5vblN0YXJ0RWRpdGluZ1Jvdy5zdWJzY3JpYmUoKHJvdykgPT4gdGhpcy5zdGFydENlbGxWYWx1ZUNoYW5nZXMobmFtZSwgcm93KSkpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWYuc3ViamVjdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTaG93Q29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZywgc2hvdzogYm9vbGVhbiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW5OYW1lKSAhPT0gc2hvdykge1xuICAgICAgaWYgKCFzaG93KSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZXNDb2x1bW5zLnB1c2goY29sdW1uTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZXhjbHVkZXNDb2x1bW5zLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBjb2x1bW5OYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHRoaXMuZXhjbHVkZXNDb2x1bW5zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlY29tcHV0ZSBkaXNwbGF5IGNvbHVtbnNcbiAgICAgIGlmICh0aGlzLmRpc3BsYXllZENvbHVtbnMgJiYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNob3dDb2x1bW4oY29sdW1uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW5OYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydHNXaXRoVXBwZXJDYXNlKGlucHV0OiBzdHJpbmcsIHNlYXJjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlucHV0ICYmIGlucHV0LnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChzZWFyY2gpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICAvLyBTaG91bGQgYmUgb3ZlcnJpZGUgYnkgc3ViY2xhc3NlcywgZGVwZW5kaW5nIG9uIENoYW5nZURldGVjdGlvblN0cmF0ZWd5XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYXNrRGVsZXRlQ29uZmlybWF0aW9uKGV2ZW50PzogRXZlbnQsIHJvd3M/OiBUYWJsZUVsZW1lbnQ8VD5bXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLnVuZG9hYmxlRGVsZXRpb24pIHtcbiAgICAgIC8vIFNwZWNpYWwgbWVzc2FnZSwgZm9yIHVuZG9hYmxlIGRlbGV0aW9uXG4gICAgICByZXR1cm4gQWxlcnRzLmFza0NvbmZpcm1hdGlvbihyb3dzPy5sZW5ndGggPT09IDEgPyAnQ09ORklSTS5ERUxFVEVfUk9XJyA6ICdDT05GSVJNLkRFTEVURV9ST1dTJywgdGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCBldmVudCk7XG4gICAgfVxuICAgIC8vIEltbWVkaWF0ZSBkZWxldGlvbiBhY3Rpb25cbiAgICByZXR1cm4gQWxlcnRzLmFza0FjdGlvbkNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIHRydWUsIGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhc2tDYW5jZWxDb25maXJtYXRpb24oZXZlbnQ/OiBFdmVudCwgcm93cz86IFRhYmxlRWxlbWVudDxUPltdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIEFsZXJ0cy5hc2tDb25maXJtYXRpb24ocm93cz8ubGVuZ3RoID09PSAxID8gJ0NPTkZJUk0uQ0FOQ0VMX1JPVycgOiAnQ09ORklSTS5DQU5DRUxfUk9XUycsIHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFza1Jlc3RvcmVDb25maXJtYXRpb24oZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBBbGVydHMuYXNrQWN0aW9uQ29uZmlybWF0aW9uKHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSwgZmFsc2UsIGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzaG93VG9hc3Qob3B0czogU2hvd1RvYXN0T3B0aW9ucykge1xuICAgIGlmICghdGhpcy50b2FzdENvbnRyb2xsZXIpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgdG9hc3RDb250cm9sbGVyIGluIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yXCIpO1xuICAgIHJldHVybiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0RXJyb3Iob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5zZXRFcnJvcih1bmRlZmluZWQsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJvd0Vycm9yKHJvdz86IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zKTogc3RyaW5nIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXRoaXMuZm9ybUVycm9yQWRhcHRlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0aGlzLmZvcm1FcnJvckFkYXB0ZXIudHJhbnNsYXRlRm9ybUVycm9ycyhyb3cudmFsaWRhdG9yLCB7XG4gICAgICAuLi50aGlzLmVycm9yVHJhbnNsYXRvck9wdGlvbnMsXG4gICAgICAuLi5vcHRzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEVycm9yKHZhbHVlOiBzdHJpbmcsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmVycm9yU3ViamVjdC52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIGRhdGEgZXF1YWxpdHkgKGRlZmF1bHQgYnkgaWQsIHVzaW5nIEVudGl0eVV0aWxzLmVxdWFscygpKVxuICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiB0byBhZGQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtIGQxXG4gICAqIEBwYXJhbSBkMlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZXF1YWxzKGQxOiBULCBkMjogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBFbnRpdHlVdGlscy5lcXVhbHMoZDEsIGQyLCAnaWQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrUm93QXNEaXJ0eShyb3c/OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEVWZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcm93ID0gcm93IHx8IHRoaXMuZWRpdGVkUm93O1xuICAgIGlmIChyb3cpIHJvdy52YWxpZGF0b3I/Lm1hcmtBc0RpcnR5KG9wdHMpO1xuICAgIHRoaXMubWFya0FzRGlydHkob3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UGFnZVNldHRpbmdzPFQgPSBhbnk+KHByb3BlcnR5TmFtZT86IHN0cmluZyk6IFQge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncyh0aGlzLnNldHRpbmdzSWQsIHByb3BlcnR5TmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZVBhZ2VTZXR0aW5ncyh2YWx1ZTogYW55LCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnNhdmVQYWdlU2V0dGluZyh0aGlzLnNldHRpbmdzSWQsIHZhbHVlLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHBlcm1hbmVudCBzZWxlY3Rpb24gbW9kZWxcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRQZXJtYW5lbnRTZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMucGVybWFuZW50U2VsZWN0aW9uKSB0aHJvdyBuZXcgRXJyb3IoJ2luaXRQZXJtYW5lbnRTZWxlY3Rpb24oKSBhbHJlYWR5IGNhbGxlZCEnKTtcblxuICAgIHRoaXMucGVybWFuZW50U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFQ+KHRydWUsIFtdKTtcblxuICAgIC8vIExpc3RlbiBzb3J0IGNoYW5nZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uU29ydC5zdWJzY3JpYmUoKCkgPT4gKHRoaXMucGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCA9IHRydWUpKSAvLyBwcmV2ZW50IHNlbGVjdGlvbiBjaGFuZ2Ugb24gc29ydFxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gZGF0YXNvdXJjZSB1cGRhdGVcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5kYXRhU291cmNlLnJvd3NTdWJqZWN0XG4gICAgICAgIC8vIHJlc3RvcmUgdGhlICdhZGRpbmcnIHNlbGVjdGlvbiAoZm9yIGV4YW1wbGUgYWZ0ZXIgYSBwYWdlIG9yIHNvcnQgY2hhbmdlKVxuICAgICAgICAuc3Vic2NyaWJlKChyb3dzKSA9PiB7XG4gICAgICAgICAgdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkID0gdHJ1ZTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGVybWFuZW50U2VsZWN0aW9uSWRzID0gKHRoaXMucGVybWFuZW50U2VsZWN0aW9uLnNlbGVjdGVkIHx8IFtdKS5tYXAoRW50aXR5VXRpbHMuZ2V0SWQpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uKC4uLnJvd3MuZmlsdGVyKChyb3cpID0+IHBlcm1hbmVudFNlbGVjdGlvbklkcy5pbmNsdWRlcyhBcHBUYWJsZVV0aWxzLmdldEVudGl0eUlkKHJvdykpKSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBzZWxlY3Rpb24gY2hhbmdlXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNoYW5nZWQucGlwZShmaWx0ZXIoKCkgPT4gIXRoaXMucGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCkpLnN1YnNjcmliZSgoc2VsZWN0aW9uQ2hhbmdlKSA9PiB7XG4gICAgICAgIC8vIGFkZCB0byBzZWxlY3Rpb25cbiAgICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZS5hZGRlZC5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oXG4gICAgICAgICAgICAuLi4odGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2VsZWN0ZWQgfHwgW10pXG4gICAgICAgICAgICAgIC8vIEFkZCBuZXcgZWxlbWVudHNcbiAgICAgICAgICAgICAgLmNvbmNhdCguLi5BcHBUYWJsZVV0aWxzLmdldEVudGl0aWVzKHNlbGVjdGlvbkNoYW5nZS5hZGRlZCkuZmlsdGVyKEVudGl0eVV0aWxzLmhhc0lkKSlcbiAgICAgICAgICAgICAgLy8gQXZvaWQgZHVwbGljYXRlZCBlbnRpdGllcyAoTWFudGlzICM1NTM1MSlcbiAgICAgICAgICAgICAgLmZpbHRlcihFbnRpdHlVdGlscy5hcnJheURpc3RpbmN0RmlsdGVyRm4pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgZnJvbSBzZWxlY3Rpb25cbiAgICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZS5yZW1vdmVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHJlbW92ZWRJZHMgPSBBcHBUYWJsZVV0aWxzLmdldEVudGl0eUlkcyhzZWxlY3Rpb25DaGFuZ2UucmVtb3ZlZCk7XG4gICAgICAgICAgdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFxuICAgICAgICAgICAgLi4uKHRoaXMucGVybWFuZW50U2VsZWN0aW9uLnNlbGVjdGVkIHx8IFtdKS5maWx0ZXIoKGVudGl0eSkgPT4gRW50aXR5VXRpbHMuaGFzSWQoZW50aXR5KSAmJiAhcmVtb3ZlZElkcy5pbmNsdWRlcyhlbnRpdHkuaWQpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0ZW5Tb3J0QW5kUGFnaW5hdGlvbkV2ZW50cygpIHtcbiAgICBpZiAoIXRoaXMudGFibGUpIHtcbiAgICAgIC8vIERFQlVHIG9ubHkgLS0gYWxlcnQgdXNlciB0aGF0IHRhYmxlIG5vdCBmb3VuZCBpbiB0ZW1wbGF0ZVxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgIXRoaXMudGFibGUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW3RhYmxlXSBNaXNzaW5nIDxtYXQtdGFibGU+IGluIHRoZSBIVE1MIHRlbXBsYXRlIChhZnRlciB3YWl0aW5nIDUwMG1zKSEgQ29tcG9uZW50OiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKSxcbiAgICAgICAgICA1MDBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWFrZSBzdXJlIHRvIHdhaXQgdGhlIHRhYmxlXG4gICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+ICEhdGhpcy50YWJsZSwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0LCBzdG9wRXJyb3I6IGZhbHNlIC8qYXZvaWQgZXJyb3Igd2hlbiBkZXN0b3J5aW5nIHRoZSB0YWJsZSovIH0pO1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICBtZXJnZShcbiAgICAgICAgLy8gTGlzdGVuIHNvcnQgZXZlbnRzXG4gICAgICAgICh0aGlzLnNvcnQgJiZcbiAgICAgICAgICB0aGlzLnNvcnQuc29ydENoYW5nZS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLnNvcnQuZGlzYWJsZWQpLFxuICAgICAgICAgICAgbWVyZ2VNYXAoYXN5bmMgKCkgPT4gdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdzb3J0JykpLFxuICAgICAgICAgICAgZmlsdGVyKChyZXMpID0+IHJlcyA9PT0gdHJ1ZSksXG4gICAgICAgICAgICAvLyBTYXZlIHNvcnQgaW4gc2V0dGluZ3NcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gW3RoaXMuc29ydC5hY3RpdmUsIHRoaXMuc29ydC5kaXJlY3Rpb24gfHwgJ2FzYyddLmpvaW4oJzonKTtcbiAgICAgICAgICAgICAgdGhpcy5zYXZlUGFnZVNldHRpbmdzKHZhbHVlLCBTRVRUSU5HU19TT1JURURfQ09MVU1OKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSkgfHxcbiAgICAgICAgICBFTVBUWSxcblxuICAgICAgICAvLyBMaXN0ZW4gcGFnaW5hdG9yIGV2ZW50c1xuICAgICAgICAodGhpcy5wYWdpbmF0b3IgJiZcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoXykgPT4gdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdzb3J0JykpLFxuICAgICAgICAgICAgZmlsdGVyKChzYXZlZCkgPT4gc2F2ZWQgPT09IHRydWUpLFxuICAgICAgICAgICAgLy8gU2F2ZSBwYWdlIHNpemUgaW4gc2V0dGluZ3NcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNhdmVQYWdlU2V0dGluZ3ModGhpcy5wYWdpbmF0b3IucGFnZVNpemUsIFNFVFRJTkdTX1BBR0VfU0laRSkpXG4gICAgICAgICAgKSkgfHxcbiAgICAgICAgICBFTVBUWVxuICAgICAgKVxuICAgICAgICAvLyBSZWZyZXNoIG9uIGFueSBzb3J0IG9yIHBhZ2luYXRvciBldmVudHNcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICB0aGlzLm9uU29ydC5lbWl0KHZhbHVlKTtcbiAgICAgICAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gSWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgc29ydCBvcmRlciwgcmVzZXQgYmFjayB0byB0aGUgZmlyc3QgcGFnZS5cbiAgICBpZiAodGhpcy5zb3J0ICYmIHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuc29ydC5zb3J0Q2hhbmdlLnBpcGUoZmlsdGVyKCgpID0+ICF0aGlzLnNvcnQuZGlzYWJsZWQpKS5zdWJzY3JpYmUoKCkgPT4gKHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDApKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlZGl0Um93QnlJZChldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIGlkOiBudW1iZXIsIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nIH0pIHtcbiAgICBpZiAoaWQgPCAwKSByZXR1cm47XG4gICAgaWYgKGlkID49IHRoaXMudmlzaWJsZVJvd0NvdW50KSB7XG4gICAgICB0aGlzLmFkZFJvdyhldmVudCwgdW5kZWZpbmVkLCB7IC4uLm9wdHMsIGVkaXRpbmc6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJvdyA9IGF3YWl0IHRoaXMuZGF0YVNvdXJjZS5nZXRSb3coaWQpO1xuICAgICAgdGhpcy5lZGl0Um93KGV2ZW50LCByb3csIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9hZGluZyh2YWx1ZTogYm9vbGVhbiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmxvYWRpbmdTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHZhbHVlKTtcblxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlTmV3Um93KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICAvLyBNYWtlIHN1cmUgcm93IHdpbGwgYmUgY2FuY2VsbGVkLCBhbmQgTk9UIGRlbGV0ZWRcbiAgICBpZiAocm93LmlkICE9PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdSb3cgbXVzdCBoYXZlIGlkID0gLTEnKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIHRoaXMuZWRpdGVkUm93ID0gdW5kZWZpbmVkOyAvLyB1bnNlbGVjdCByb3dcbiAgICB0aGlzLl9kYXRhU291cmNlLmNhbmNlbE9yRGVsZXRlKHJvdyk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICB0aGlzLm9uQ2FuY2VsT3JEZWxldGVSb3cubmV4dChyb3cpO1xuICAgIHRoaXMudG90YWxSb3dDb3VudC0tO1xuICAgIHRoaXMudmlzaWJsZVJvd0NvdW50LS07XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUV4aXN0aW5nUm93KGV2ZW50OiBFdmVudCB8IG51bGwsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSkge1xuICAgIC8vIE1ha2Ugc3VyZSByb3cgd2lsbCBiZSBjYW5jZWxsZWQsIGFuZCBOT1QgZGVsZXRlZFxuICAgIGlmIChyb3cuaWQgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ1JvdyBtdXN0IGhhdmUgYW4gaWQnKTtcblxuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIDA7IC8vIFNLaXBcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuZGVsZXRlUm93KG51bGwsIHJvdywgb3B0cyk7XG4gIH1cblxuICBwcml2YXRlIGNhbmNlbEV4aXN0aW5nUm93KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsga2VlcEVkaXRpbmc/OiBib29sZWFuIH0pIHtcbiAgICAvLyBNYWtlIHN1cmUgcm93IHdpbGwgYmUgY2FuY2VsbGVkLCBhbmQgTk9UIGRlbGV0ZWRcbiAgICBpZiAocm93LmlkID09PSAtMSB8fCAhcm93LmVkaXRpbmcpIHRocm93IG5ldyBFcnJvcignUm93IGNhbm5vdCBiZSBjYW5jZWxpbmcsIGJ1dCBvbmx5IGRlbGV0aW5nJyk7XG5cbiAgICBjb25zdCBjb25maXJtZWQgPSAhb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZTtcblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvbiwgaWYgY2FuY2VsXG4gICAgaWYgKCFjb25maXJtZWQgJiYgcm93LmRpcnR5ICYmICh0aGlzLmNvbmZpcm1CZWZvcmVDYW5jZWwgfHwgdGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZXJzLmxlbmd0aCA+IDApKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY2FuQ2FuY2VsUm93cyhbcm93XSwgb3B0cykudGhlbigoY29uZmlybSkgPT4ge1xuICAgICAgICAvLyBJZiBjb25maXJtZWQsIGxvb3BcbiAgICAgICAgaWYgKGNvbmZpcm0pIHRoaXMuY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgeyBpbnRlcmFjdGl2ZTogZmFsc2UgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBrZWVwRWRpdGluZyA9IHJvdy5lZGl0aW5nICYmICghb3B0cyB8fCBvcHRzLmtlZXBFZGl0aW5nICE9PSBmYWxzZSk7XG4gICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7IC8vIHVuc2VsZWN0IHJvd1xuICAgIHRoaXMuX2RhdGFTb3VyY2UuY2FuY2VsT3JEZWxldGUocm93KTtcbiAgICB0aGlzLm9uQ2FuY2VsT3JEZWxldGVSb3cubmV4dChyb3cpO1xuXG4gICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmVcbiAgICB0aGlzLmNoZWNrSWZSb3dQcmlzdGluZShyb3cpO1xuXG4gICAgLy8gUmVzdG9yZSBlZGl0aW5nIHN0YXRlXG4gICAgaWYgKGtlZXBFZGl0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRSb3codW5kZWZpbmVkLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJZlJvd1ByaXN0aW5lKHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBvbmx5U2VsZj86IGJvb2xlYW4gfSkge1xuICAgIC8vIE1hcmsgcm93IGFzIHByaXN0aW5lXG4gICAgY29uc3QgbWFya1Jvd0FzUHJpc3RpbmUgPSB0aGlzLmRhdGFTb3VyY2U/LmNvbmZpZy5yZXN0b3JlT3JpZ2luYWxEYXRhT25DYW5jZWwgPT09IHRydWU7XG4gICAgaWYgKG1hcmtSb3dBc1ByaXN0aW5lKSB7XG4gICAgICByb3cudmFsaWRhdG9yPy5tYXJrQXNQcmlzdGluZSgpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0YWJsZSBpcyBub3cgcHJpc3RpbmVcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLm9ubHlTZWxmICE9PSB0cnVlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJZlByaXN0aW5lKG9wdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJZlByaXN0aW5lKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5kaXJ0eSkgcmV0dXJuOyAvLyBBbHJlYWR5IHByaXN0aW5lXG5cbiAgICBjb25zdCByb3dzID0gdGhpcy5fZGF0YVNvdXJjZS5nZXRSb3dzKCk7XG4gICAgY29uc3QgcHJpc3RpbmUgPSAocm93cyB8fCBbXSkuZmluZEluZGV4KChyb3cpID0+IHJvdy5kaXJ0eSkgPT09IC0xO1xuICAgIGlmIChwcmlzdGluZSkgdGhpcy5tYXJrQXNQcmlzdGluZShvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXIoZmlsdGVyOiBGLCBvcHRzOiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIEFwcGx5aW5nIGZpbHRlcicsIGZpbHRlcik7XG4gICAgdGhpcy5fZmlsdGVyID0gZmlsdGVyO1xuICAgIGlmIChvcHRzICYmIG9wdHMuZW1pdEV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5wYWdpbmF0b3IgJiYgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID4gMCkge1xuICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdGhpcy5vblJlZnJlc2guZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRGF0YXNvdXJjZUxvYWRpbmcoZGF0YVNvdXJjZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+KSB7XG4gICAgaWYgKCFkYXRhU291cmNlKSB0aHJvdyBuZXcgRXJyb3IoJ1t0YWJsZV0gZGF0YVNvdXJjZSBub3Qgc2V0ICEnKTtcblxuICAgIC8vIENsZWFuaW5nIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBvbiBkYXRhc291cmNlXG4gICAgaWYgKGlzTm90TmlsKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKSkge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gTWFueSBjYWxsIHRvIGxpc3RlbkRhdGFzb3VyY2UoKTogQ2xlYW5pbmcgcHJldmlvdXMgc3Vic2NyaXB0aW9ucy4uLicpO1xuICAgICAgdGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMudW5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgLy8gUHJvcGFnZSBsb2FkaW5nIHRvIHRhYmxlXG4gICAgdGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24gPSB0aGlzLl9kYXRhU291cmNlLmxvYWRpbmdTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcblxuICAgICAgICAvLyBJZiBjaGFuZ2VkIHRvIFRydWU6IHByb3BhZ2F0ZSBhcyBzb29uIGFzIHBvc3NpYmxlXG4gICAgICAgIHRhcCgobG9hZGluZykgPT4gbG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcodHJ1ZSkpLFxuXG4gICAgICAgIC8vIElmIGNoYW5nZWQgdG8gRmFsc2U6IHdhaXQgMjUwbXMgYmVmb3JlIHByb3BhZ2F0ZSAodG8gbWFrZSBzdXJlIHRoZSBzcGlubmVyIGhhcyBiZWVuIGRpc3BsYXllZClcbiAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgIHRhcCgobG9hZGluZykgPT4gIWxvYWRpbmcgJiYgdGhpcy5zZXRMb2FkaW5nKGZhbHNlKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRDZWxsVmFsdWVDaGFuZ2VzKG5hbWU6IHN0cmluZywgcm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICBjb25zdCBkZWYgPSB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXTtcbiAgICBpZiAoIWRlZikge1xuICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIExpc3RlbmVyIHdpdGggbmFtZSB7JyArIG5hbWUgKyAnfSBub3QgcmVnaXN0ZXJlZCEgUGxlYXNlIGNhbGwgcmVnaXN0ZXJDZWxsVmFsdWVDaGFuZ2VzKCkgYmVmb3JlOycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBTdG9wIHByZXZpb3VzIHN1YnNjcmlwdGlvblxuICAgIGlmIChkZWYuc3Vic2NyaXB0aW9uKSB7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gU3RhcnQgdmFsdWVzIGNoYW5nZXMgb24gcm93IHBhdGggeyR7ZGVmLmZvcm1QYXRofX1gKTtcbiAgICB9XG5cbiAgICAvLyBMaXN0ZW4gdmFsdWUgY2hhbmdlcywgYW5kIHJlZGlyZWN0IHRvIGV2ZW50IGVtaXR0ZXJcbiAgICBjb25zdCBjb250cm9sID0gcm93LnZhbGlkYXRvciAmJiBBcHBGb3JtVXRpbHMuZ2V0Q29udHJvbEZyb21QYXRoKHJvdy52YWxpZGF0b3IsIGRlZi5mb3JtUGF0aCk7XG4gICAgaWYgKCFjb250cm9sKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFt0YWJsZV0gQ291bGQgbm90IGxpc3RlbiBjZWxsIGNoYW5nZXM6IG5vIHZhbGlkYXRvciBvciBpbnZhbGlkIGZvcm0gcGF0aCB7JHtkZWYuZm9ybVBhdGh9fWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uID0gY29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gZG9uJ3QgZW1pdCBpZiBjb250cm9sIGlzIGRpc2FibGVkXG4gICAgICAgICAgZmlsdGVyKCgpID0+IGNvbnRyb2wuZW5hYmxlZClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gZGVmLnN1YmplY3QubmV4dCh2YWx1ZSkpO1xuXG4gICAgICAvLyBFbWl0IHRoZSBhY3R1YWwgdmFsdWVcbiAgICAgIGlmIChkZWYuZW1pdEluaXRpYWxWYWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgZGVmLnN1YmplY3QubmV4dChjb250cm9sLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0b3BDZWxsVmFsdWVDaGFuZ2VzKG5hbWU6IHN0cmluZywgZGVzdHJveT86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBkZWYgPSB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXTtcbiAgICBpZiAoIWRlZikgcmV0dXJuO1xuICAgIGlmIChkZWYuc3Vic2NyaXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBTdG9wIHZhbHVlIGNoYW5nZXMgb24gcm93IHBhdGggeycgKyBkZWYuZm9ybVBhdGggKyAnfScpO1xuICAgICAgZGVmLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgZGVmLnN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfVxuICAgIGlmIChkZXN0cm95ICYmIGRlZi5zdWJqZWN0KSB7XG4gICAgICBkZWYuc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgZGVmLnN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
1778
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvdGFibGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5SCxPQUFPLEVBQUUsT0FBTyxFQUE4QixNQUFNLHdCQUF3QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RixPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBVyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBYywyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JB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RyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBQ3RDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRS9DLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0YsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDOUYsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDOUYsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQWtEO1FBQ3hELElBQUksSUFBSSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxL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UztzQkFBbEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkEyQ00sUUFBUTtzQkFBcEIsS0FBSztnQkEwSk8sU0FBUztzQkFBckIsS0FBSztnQkFZa0MsS0FBSztzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNNLGNBQWM7c0JBQXpELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDSCxJQUFJO3NCQUExQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNvcnQsIE1hdFNvcnRhYmxlLCBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgRU1QVFksIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0LCBtZXJnZU1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSAnQGUtaXMvbmd4LW1hdGVyaWFsLXRhYmxlJztcbmltcG9ydCB7IEVudGl0aWVzVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi9lbnRpdGllcy10YWJsZS1kYXRhc291cmNlLmNsYXNzJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEVudGl0eVV0aWxzLCBJRW50aXR5IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyLCBUb2FzdENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENvbHVtbkl0ZW0sIFRhYmxlU2VsZWN0Q29sdW1uc0NvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtc2VsZWN0LWNvbHVtbnMuY29tcG9uZW50JztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEVycm9yQ29kZXMgfSBmcm9tICcuLi9zZXJ2aWNlcy9lcnJvcnMnO1xuaW1wb3J0IHsgQXBwRm9ybVV0aWxzLCBJQXBwRm9ybSwgT25SZWFkeSB9IGZyb20gJy4uL2Zvcm0vZm9ybS51dGlscyc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLFxuICBNYXRBdXRvY29tcGxldGVGaWVsZEFkZE9wdGlvbnMsXG4gIE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5jb25maWcnO1xuaW1wb3J0IHsgQ29tcGxldGFibGVFdmVudCwgY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlciwgZW1pdFByb21pc2VFdmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9ldmVudHMnO1xuaW1wb3J0IHsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZSwgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3ROaWwsIHRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgd2FpdEZvciwgd2FpdEZvckZhbHNlLCBXYWl0Rm9yT3B0aW9ucywgd2FpdEZvclRydWUgfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgU2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQgeyBBbGVydHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWxlcnRzJztcbmltcG9ydCB7IENka0NvbHVtbkRlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90YWJsZSc7XG5pbXBvcnQgeyBMb2FkUmVzdWx0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEZvcm1FcnJvclRyYW5zbGF0b3IsIEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zLCBJRm9ybUNvbnRyb2xQYXRoVHJhbnNsYXRvciB9IGZyb20gJy4uLy4uL3NoYXJlZC92YWxpZGF0b3IvZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIENlbGxWYWx1ZUNoYW5nZUxpc3RlbmVyLFxuICBERUZBVUxUX1BBR0VfU0laRSxcbiAgREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyxcbiAgREVGQVVMVF9SRVFVSVJFRF9DT0xVTU5TLFxuICBSRVNFUlZFRF9FTkRfQ09MVU1OUyxcbiAgUkVTRVJWRURfU1RBUlRfQ09MVU1OUyxcbiAgU2F2ZUFjdGlvblR5cGUsXG4gIFNFVFRJTkdTX0RJU1BMQVlfQ09MVU1OUyxcbiAgU0VUVElOR1NfUEFHRV9TSVpFLFxuICBTRVRUSU5HU19TT1JURURfQ09MVU1OLFxufSBmcm9tICcuL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IEFwcFRhYmxlVXRpbHMgfSBmcm9tICcuL3RhYmxlLnV0aWxzJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRUYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwVGFibGU8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBGID0gYW55LCBJRCA9IG51bWJlcj5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgSUFwcEZvcm0sIElGb3JtQ29udHJvbFBhdGhUcmFuc2xhdG9yXG57XG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIF9jZWxsVmFsdWVDaGFuZ2VzRGVmczoge1xuICAgIFtrZXk6IHN0cmluZ106IENlbGxWYWx1ZUNoYW5nZUxpc3RlbmVyO1xuICB9ID0ge307XG5cbiAgcHJvdGVjdGVkIF9lbmFibGVkID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVDb25maWdIb2xkZXI6IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcjtcbiAgcHJvdGVjdGVkIGFsbG93Um93RGV0YWlsID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xuICBwcm90ZWN0ZWQgbmF2Q29udHJvbGxlcjogTmF2Q29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIGxvY2F0aW9uOiBMb2NhdGlvbjtcbiAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZTtcbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZTtcbiAgcHJvdGVjdGVkIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgYWxlcnRDdHJsOiBBbGVydENvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIHByZXZpb3VzbHlFZGl0ZWRSb3dJZDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZm9ybUVycm9yQWRhcHRlcjogRm9ybUVycm9yVHJhbnNsYXRvcjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3lTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBleGNsdWRlc0NvbHVtbnM6IHN0cmluZ1tdID0gW107XG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdO1xuICB0b3RhbFJvd0NvdW50OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgdmlzaWJsZVJvd0NvdW50OiBudW1iZXI7XG4gIGVycm9yVHJhbnNsYXRvck9wdGlvbnM6IEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zO1xuXG4gIHJlYWRvbmx5IHJlYWR5U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IHNhdmluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdG91Y2hlZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZGlydHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGVycm9yU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuXG4gIGdldCBlcnJvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHNldCBlcnJvcihlcnJvcjogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRFcnJvcihlcnJvcik7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGdldCBlcnJvciQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8VGFibGVFbGVtZW50PFQ+Pih0cnVlLCBbXSk7XG4gIHBlcm1hbmVudFNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8VD4gPSBudWxsO1xuICBwZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkID0gZmFsc2U7XG4gIGVkaXRlZFJvdzogVGFibGVFbGVtZW50PFQ+ID0gdW5kZWZpbmVkO1xuICBhdXRvY29tcGxldGVGaWVsZHM6IHsgW2tleTogc3RyaW5nXTogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWcgfTtcbiAgcmVhZG9ubHkgbW9iaWxlOiBib29sZWFuO1xuXG4gIC8vIFRhYmxlIG9wdGlvbnNcbiAgQElucHV0KCkgc2V0dGluZ3NJZDogc3RyaW5nO1xuICBASW5wdXQoKSBkZWJ1ZzogYm9vbGVhbjtcbiAgQElucHV0KCkgaTE4bkNvbHVtblByZWZpeCA9ICdDT01NT04uJztcbiAgQElucHV0KCkgaTE4bkNvbHVtblN1ZmZpeDogc3RyaW5nO1xuICBASW5wdXQoKSBhdXRvTG9hZCA9IHRydWU7XG4gIEBJbnB1dCgpIHJlYWRPbmx5OiBib29sZWFuO1xuICBASW5wdXQoKSBpbmxpbmVFZGl0aW9uOiBib29sZWFuO1xuICBASW5wdXQoKSBmb2N1c0ZpcnN0Q29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpcm1CZWZvcmVEZWxldGUgPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlybUJlZm9yZUNhbmNlbCA9IGZhbHNlO1xuICBASW5wdXQoKSB1bmRvYWJsZURlbGV0aW9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNhdmVCZWZvcmVEZWxldGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGtlZXBFZGl0ZWRSb3dPblNhdmU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNhdmVCZWZvcmVTb3J0OiBib29sZWFuO1xuICBASW5wdXQoKSBzYXZlQmVmb3JlRmlsdGVyOiBib29sZWFuO1xuICBASW5wdXQoKSBwcm9wYWdhdGVSb3dFcnJvciA9IGZhbHNlO1xuICBASW5wdXQoKSBwZXJtYW5lbnRTZWxlY3Rpb25BbGxvd2VkID0gZmFsc2U7IC8vIEFsbG93IGtlZXAgc2VsZWN0ZWQgcm93cyBvdmVyIHBhZ2UgY2hhbmdlIG9yIHNvcnQgY2hhbmdlXG5cbiAgQElucHV0KCkgZGVmYXVsdFNvcnRCeTogc3RyaW5nO1xuICBASW5wdXQoKSBkZWZhdWx0U29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbjtcbiAgQElucHV0KCkgZGVmYXVsdFBhZ2VTaXplID0gREVGQVVMVF9QQUdFX1NJWkU7XG4gIEBJbnB1dCgpIGRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TO1xuXG4gIC8vIEZvY3VzIG1hbmFnZXJcbiAgQElucHV0KCkgZm9jdXNDb2x1bW46IHN0cmluZztcblxuICBnZXQgZmlyc3RVc2VyQ29sdW1uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uc1tSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmxlbmd0aF07XG4gIH1cblxuICBnZXQgbGFzdFVzZXJDb2x1bW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW3RoaXMuZGlzcGxheWVkQ29sdW1ucy5sZW5ndGggLSBSRVNFUlZFRF9FTkRfQ09MVU1OUy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkYXRhU291cmNlKHZhbHVlOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4pIHtcbiAgICB0aGlzLnNldERhdGFzb3VyY2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRhdGFTb3VyY2UoKTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXIodmFsdWU6IEYpIHtcbiAgICB0aGlzLnNldEZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICBnZXQgZmlsdGVyKCk6IEYge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XG4gIH1cblxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZyB8fCB0aGlzLnRvdGFsUm93Q291bnQgPT09IDA7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRFbnRpdGllcygpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbj8uc2VsZWN0ZWQgfHwgQXBwVGFibGVVdGlscy5nZXRFbnRpdGllcyh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICBAT3V0cHV0KCkgb25SZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbk9wZW5Sb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRWxlbWVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uTmV3Um93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblN0YXJ0RWRpdGluZ1JvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Db25maXJtRWRpdENyZWF0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWxPckRlbGV0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25CZWZvcmVEZWxldGVSb3dzID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjxib29sZWFuLCB7IHJvd3M6IFRhYmxlRWxlbWVudDxUPltdIH0+KCk7XG4gIEBPdXRwdXQoKSBvbkJlZm9yZUNhbmNlbFJvd3MgPSBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPGJvb2xlYW4sIHsgcm93czogVGFibGVFbGVtZW50PFQ+W10gfT4oKTtcbiAgQE91dHB1dCgpIG9uQmVmb3JlU2F2ZSA9IGNyZWF0ZVByb21pc2VFdmVudEVtaXR0ZXI8eyBjb25maXJtZWQ6IGJvb2xlYW47IHNhdmU6IGJvb2xlYW4gfSwgeyBhY3Rpb246IFNhdmVBY3Rpb25UeXBlOyB2YWxpZDogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgb25BZnRlckRlbGV0ZWRSb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD5bXT4oKTtcbiAgQE91dHB1dCgpIG9uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25EaXJ0eSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy52YWxpZCA6IHRydWU7XG4gIH1cblxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuZWRpdGluZyA/IHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8uaW52YWxpZCA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGVkUm93ICYmIHRoaXMuZWRpdGVkUm93LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/LnBlbmRpbmcgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHVudG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudG91Y2hlZFN1YmplY3QudmFsdWU7XG4gIH1cblxuICBkaXNhYmxlKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuc29ydCkgdGhpcy5zb3J0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGVuYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgfVxuXG4gIC8vIEZJWE1FOiBuZWVkIHRvIGhpZGRlbiBidXR0b25zIChpbiBIVE1MKSwgZXRjLiB3aGVuIGRpc2FibGVkXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSAhPT0gIXRoaXMuX2VuYWJsZWQpIHtcbiAgICAgIGlmICh2YWx1ZSkgdGhpcy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIGVsc2UgdGhpcy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX2VuYWJsZWQ7XG4gIH1cblxuICBtYXJrQXNEaXJ0eShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5kaXJ0eVN1YmplY3QuY2xvc2VkICYmIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmRpcnR5U3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmRpcnR5U3ViamVjdC5jbG9zZWQgJiYgdGhpcy5kaXJ0eVN1YmplY3QudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmRpcnR5U3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNVbnRvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBsZXQgbmVlZEVtaXRFdmVudCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLnRvdWNoZWRTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgbmVlZEVtaXRFdmVudCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpcnR5IHx8ICh0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5pZCAhPT0gdGhpcy5wcmV2aW91c2x5RWRpdGVkUm93SWQpKSB7XG4gICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgZWRpdGluZyByb3cgb25seSBpZiBlZGl0aW5nIGFuZCBpZiBpdCB3YXMgbm90IHByZXZpb3VzbHkgc2F2ZWRcbiAgICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uZWRpdGluZykge1xuICAgICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgZWRpdGluZyByb3cgb25seSBpZiBlZGl0aW5nIGFuZCBpZiBpdCB3YXMgbm90IHByZXZpb3VzbHkgc2F2ZWRcbiAgICAgICAgaWYgKHRoaXMuZWRpdGVkUm93LmlkID09PSAtMSkge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kZWxldGUoLTEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jYW5jZWwodGhpcy5lZGl0ZWRSb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmVcbiAgICAgICAgdGhpcy5jaGVja0lmUm93UHJpc3RpbmUodGhpcy5lZGl0ZWRSb3csIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGVkUm93ID0gbnVsbDtcbiAgICAgIG5lZWRFbWl0RXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAobmVlZEVtaXRFdmVudCAmJiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBwcmVmZXIgdG8gdXNlIG1hcmtBbGxBc1RvdWNoZWQoKVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgbWFya0FzVG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGNvbnNvbGUud2FybignVE9ETzogUmVwbGFjZSB0aGlzIGNhbGwgYnkgbWFya0FsbEFzVG91Y2hlZCgpIC0gYmVjYXVzZSBvZiBjaGFuZ2VzIGluIG5neC1jb21wb25lbnRzID49IDAuMTYuMCcpO1xuICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uZWRpdGluZykge1xuICAgICAgdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya0FsbEFzVG91Y2hlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMudG91Y2hlZFN1YmplY3QuY2xvc2VkICYmIHRoaXMudG91Y2hlZFN1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMudG91Y2hlZFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRlZFJvdz8uZWRpdGluZykge1xuICAgICAgdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgbWFya0FzU2F2aW5nKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zYXZpbmdTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnNhdmluZ1N1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZm9jdXNDb2x1bW4gPSB1bmRlZmluZWQ7IC8vIHVuc2VsZWN0IGZvY3VzIGNvbHVtblxuICAgICAgdGhpcy5zYXZpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1NhdmVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zYXZpbmdTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnNhdmluZ1N1YmplY3QudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnNhdmluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIG9wdHMpO1xuICB9XG5cbiAgbWFya0FzTG9hZGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgb3B0cyk7XG4gIH1cblxuICBtYXJrQXNSZWFkeShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMucmVhZHlTdWJqZWN0LmNsb3NlZCAmJiB0aGlzLnJlYWR5U3ViamVjdC52YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5yZWFkeVN1YmplY3QubmV4dCh0cnVlKTtcblxuICAgICAgLy8gSWYgc3ViY2xhc3NlcyBpbXBsZW1lbnRzIE9uUmVhZHlcbiAgICAgIGlmICh0eXBlb2YgdGhpc1snbmdPblJlYWR5J10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgKHRoaXMgYXMgYW55IGFzIE9uUmVhZHkpLm5nT25SZWFkeSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IGxvYWRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMubG9hZGluZ1N1YmplY3QudmFsdWU7XG4gIH1cblxuICBlbmFibGVTb3J0KCkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IGZhbHNlO1xuICB9XG5cbiAgZGlzYWJsZVNvcnQoKSB7XG4gICAgaWYgKHRoaXMuc29ydCkgdGhpcy5zb3J0LmRpc2FibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHNldCBwYWdlU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5kZWZhdWx0UGFnZVNpemUgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhZ2VTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSkgfHwgdGhpcy5kZWZhdWx0UGFnZVNpemUgfHwgREVGQVVMVF9QQUdFX1NJWkU7XG4gIH1cblxuICBnZXQgcGFnZU9mZnNldCgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5wYWdpbmF0b3IgJiYgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ICogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpIHx8IDA7XG4gIH1cblxuICBnZXQgc29ydEFjdGl2ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvcnQgJiYgdGhpcy5zb3J0LmFjdGl2ZTtcbiAgfVxuXG4gIGdldCBzb3J0RGlyZWN0aW9uKCk6ICdhc2MnIHwgJ2Rlc2MnIHtcbiAgICByZXR1cm4gKHRoaXMuc29ydCAmJiB0aGlzLnNvcnQuZGlyZWN0aW9uICYmICh0aGlzLnNvcnQuZGlyZWN0aW9uID09PSAnZGVzYycgPyAnZGVzYycgOiAnYXNjJykpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnaW5hdG9yKCk6IE1hdFBhZ2luYXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRvciB8fCB0aGlzLmNoaWxkUGFnaW5hdG9yO1xuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95U3ViamVjdD8uY2xvc2VkICE9PSBmYWxzZTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZTogTWF0VGFibGU8VD47XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hpbGRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogZmFsc2UgfSkgc29ydDogTWF0U29ydDtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBjb2x1bW5zOiBzdHJpbmdbXSxcbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U/OiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4sXG4gICAgcHJpdmF0ZSBfZmlsdGVyPzogRlxuICApIHtcbiAgICB0aGlzLnJvdXRlID0gaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICB0aGlzLnJvdXRlciA9IGluamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIHRoaXMubmF2Q29udHJvbGxlciA9IGluamVjdG9yLmdldChOYXZDb250cm9sbGVyKTtcbiAgICB0aGlzLmxvY2F0aW9uID0gaW5qZWN0b3IuZ2V0KExvY2F0aW9uKTtcbiAgICB0aGlzLnNldHRpbmdzID0gaW5qZWN0b3IuZ2V0KExvY2FsU2V0dGluZ3NTZXJ2aWNlKTtcbiAgICB0aGlzLnRyYW5zbGF0ZSA9IGluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLm1vZGFsQ3RybCA9IGluamVjdG9yLmdldChNb2RhbENvbnRyb2xsZXIpO1xuICAgIHRoaXMuYWxlcnRDdHJsID0gaW5qZWN0b3IuZ2V0KEFsZXJ0Q29udHJvbGxlcik7XG4gICAgdGhpcy50b2FzdENvbnRyb2xsZXIgPSBpbmplY3Rvci5nZXQoVG9hc3RDb250cm9sbGVyKTtcbiAgICB0aGlzLmZvcm1FcnJvckFkYXB0ZXIgPSBpbmplY3Rvci5nZXQoRm9ybUVycm9yVHJhbnNsYXRvcik7XG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcblxuICAgIC8vIEF1dG9jb21wbGV0ZSBmaWVsZHNcbiAgICB0aGlzLl9hdXRvY29tcGxldGVDb25maWdIb2xkZXIgPSBuZXcgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyKHtcbiAgICAgIGdldFVzZXJBdHRyaWJ1dGVzOiAoYSwgYikgPT4gdGhpcy5zZXR0aW5ncy5nZXRGaWVsZERpc3BsYXlBdHRyaWJ1dGVzKGEsIGIpLFxuICAgIH0pO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzID0gdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLmZpZWxkcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgcmV0dXJuOyAvLyBJbml0IG9ubHkgb25jZVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIHRoaXMucmVhZE9ubHkgPSB0b0Jvb2xlYW4odGhpcy5yZWFkT25seSwgdGhpcy5kYXRhU291cmNlPy5jb25maWcucmVhZE9ubHkgfHwgZmFsc2UpOyAvLyByZWFkL3dyaXRlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSAhdGhpcy5yZWFkT25seSAmJiB0b0Jvb2xlYW4odGhpcy5pbmxpbmVFZGl0aW9uLCBmYWxzZSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVEZWxldGUgPSB0b0Jvb2xlYW4odGhpcy5zYXZlQmVmb3JlRGVsZXRlLCAhdGhpcy5yZWFkT25seSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVTb3J0ID0gdG9Cb29sZWFuKHRoaXMuc2F2ZUJlZm9yZVNvcnQsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMuc2F2ZUJlZm9yZUZpbHRlciA9IHRvQm9vbGVhbih0aGlzLnNhdmVCZWZvcmVGaWx0ZXIsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSA9IHRvQm9vbGVhbih0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsIHRoaXMuaW5saW5lRWRpdGlvbik7XG4gICAgdGhpcy5lcnJvclRyYW5zbGF0b3JPcHRpb25zID0gdGhpcy5lcnJvclRyYW5zbGF0b3JPcHRpb25zIHx8IHsgc2VwYXJhdG9yOiAnLCAnLCBjb250cm9sUGF0aFRyYW5zbGF0b3I6IHRoaXMgfTsgLy8gQ2FuIGJlIG92ZXJyaWRlIGluIHN1YmNsYXNzZXMgY29uc3RydWN0b3JzXG5cbiAgICAvLyBDaGVjayBhc2sgdXNlciBjb25maXJtYXRpb24gaXMgcG9zc2libGVcbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlRGVsZXRlICYmICF0aGlzLmFsZXJ0Q3RybCkgdGhyb3cgRXJyb3IoXCJNaXNzaW5nICdhbGVydEN0cmwnIG9yICdpbmplY3RvcicgaW4gY29tcG9uZW50J3MgY29uc3RydWN0b3IuXCIpO1xuXG4gICAgLy8gRGVmaW5lZCB1bmlxdWUgaWQgZm9yIHNldHRpbmdzIGZvciB0aGUgcGFnZVxuICAgIHRoaXMuc2V0dGluZ3NJZCA9IHRoaXMuc2V0dGluZ3NJZCB8fCB0aGlzLmdlbmVyYXRlVGFibGVJZCgpO1xuXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5nZXREaXNwbGF5Q29sdW1ucygpO1xuXG4gICAgLy8gTG9hZCB0aGUgc29ydGVkIGNvbHVtbnMsIGZyb20gc2V0dGluZ3NcbiAgICB7XG4gICAgICBjb25zdCBzb3J0ZWRDb2x1bW4gPSB0aGlzLmdldFNvcnRlZENvbHVtbigpO1xuICAgICAgdGhpcy5kZWZhdWx0U29ydEJ5ID0gc29ydGVkQ29sdW1uLmlkO1xuICAgICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9IHNvcnRlZENvbHVtbi5zdGFydDtcbiAgICB9XG5cbiAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZSA9IHRoaXMuZ2V0UGFnZVNpemUoKTtcblxuICAgIC8vIFByb3BhZ2F0ZSBlcnJvciB0byBldmVudCBlbWl0dGVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLmVycm9yU3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRXJyb3IuZW1pdCh2YWx1ZSkpKTtcblxuICAgIC8vIFByb3BhZ2F0ZSBkaXJ0eSB0byBldmVudCBlbWl0dGVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLmRpcnR5U3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRGlydHkuZW1pdCh2YWx1ZSkpKTtcblxuICAgIC8vIFByb3BhZ2F0ZSByb3cgZGlydHkgc3RhdGUgdG8gdGFibGVcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5vblN0YXJ0RWRpdGluZ1Jvd1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHJvdykgPT4gcm93Py52YWxpZGF0b3IgJiYgdHJ1ZSksXG4gICAgICAgICAgbWVyZ2VNYXAoKHJvdykgPT5cbiAgICAgICAgICAgIHJvdy52YWxpZGF0b3IudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgIGZpbHRlcigocm93KSA9PiByb3cuZGlydHkpLFxuICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgICAgICAvL3RhcCgoKSA9PiBjb25zb2xlLmRlYnVnKFwiUHJvcGFnYXRlIHJvdydzIGRpcnR5IHRvIHRhYmxlLi4uXCIpKVxuXG4gICAgICAgICAgICAgIC8vIFN0b3AgaWYgbmV4dCBhbm90aGVyIHJvdywgb3IgZGVzdHJveWluZ1xuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5vblN0YXJ0RWRpdGluZ1JvdyksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubWFya0FzRGlydHkoKSlcbiAgICApO1xuXG4gICAgLy8gQ2FsbCBkYXRhc291cmNlIHJlZnJlc2gsIG9uIGVhY2ggcmVmcmVzaCBldmVudHNcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5vblJlZnJlc2hcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoPGFueSwgYW55PigodGhpcy5hdXRvTG9hZCA/IHt9IDogJ3NraXAnKSBhcyBhbnkpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSAnc2tpcCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gU2tpcHBpbmcgZGF0YSBsb2FkOiBubyBkYXRhU291cmNlIGRlZmluZWQnKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBDYWxsaW5nIGRhdGFTb3VyY2Uud2F0Y2hBbGwoKS4uLicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2Uud2F0Y2hBbGwodGhpcy5wYWdlT2Zmc2V0LCB0aGlzLnBhZ2VTaXplLCB0aGlzLnNvcnRBY3RpdmUsIHRoaXMuc29ydERpcmVjdGlvbiwgdGhpcy5fZmlsdGVyKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB0aGlzLnNldEVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTsgLy8gQ29udGludWVcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4gdGhpcy51cGRhdGVWaWV3KHJlcyBhcyBMb2FkUmVzdWx0PFQ+IHwgdW5kZWZpbmVkKSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGRhdGFTb3VyY2UgbG9hZGluZyBldmVudHNcbiAgICBpZiAodGhpcy5fZGF0YVNvdXJjZSkgdGhpcy5saXN0ZW5EYXRhc291cmNlTG9hZGluZyh0aGlzLl9kYXRhU291cmNlKTtcblxuICAgIC8vIFBlcm1hbmVudCBzZWxlY3Rpb24gYmVoYXZpb3JcbiAgICBpZiAodGhpcy5wZXJtYW5lbnRTZWxlY3Rpb25BbGxvd2VkKSB0aGlzLmluaXRQZXJtYW5lbnRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBEZXRlY3Qgd2hlbiBwYXJlbnQgbmdPbkluaXQoKSBub3QgY2FsbFxuICAgIGlmICh0aGlzLmRlYnVnICYmICF0aGlzLmRpc3BsYXllZENvbHVtbnMpXG4gICAgICBjb25zb2xlLndhcm4oYFt0YWJsZV0gTWlzc2luZyAnZGlzcGxheWVkQ29sdW1ucycuIERpZCB5b3UgY2FsbCBwYXJlbnQgbmdPbkluaXQoKSBpbiBjb21wb25lbnQgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9ID9gKTtcblxuICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBzb3J0IGFuZCBwYWdpbmF0b3IgZXZlbnRzXG4gICAgLy8gbm9pbnNwZWN0aW9uIEpTSWdub3JlZFByb21pc2VGcm9tQ2FsbFxuICAgIHRoaXMubGlzdGVuU29ydEFuZFBhZ2luYXRpb25FdmVudHMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgLy8gVW5zdWJzY3JpYmUgY29sdW1uIHZhbHVlIGNoYW5nZXNcbiAgICBPYmplY3Qua2V5cyh0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmcykuZm9yRWFjaCgoY29sKSA9PiB0aGlzLnN0b3BDZWxsVmFsdWVDaGFuZ2VzKGNvbCwgdHJ1ZSkpO1xuICAgIHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzID0ge307XG5cbiAgICB0aGlzLnJlYWR5U3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMubG9hZGluZ1N1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnNhdmluZ1N1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmVycm9yU3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZGlydHlTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLm9uUmVmcmVzaC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25PcGVuUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbk5ld1Jvdy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25TdGFydEVkaXRpbmdSb3cudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQ29uZmlybUVkaXRDcmVhdGVSb3cudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQ2FuY2VsT3JEZWxldGVSb3cudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQmVmb3JlRGVsZXRlUm93cy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25CZWZvcmVDYW5jZWxSb3dzLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkJlZm9yZVNhdmUudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQWZ0ZXJEZWxldGVkUm93cy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25Tb3J0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkRpcnR5LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkVycm9yLnVuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmRlc3Ryb3lTdWJqZWN0Lm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3lTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVWaWV3KFxuICAgIHJlczogTG9hZFJlc3VsdDxUPiB8IHVuZGVmaW5lZCxcbiAgICBvcHRzPzoge1xuICAgICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICB9XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghcmVzKSByZXR1cm47IC8vIFNraXAgKGUuZyBlcnJvcilcbiAgICBpZiAocmVzICYmIHJlcy5kYXRhKSB7XG4gICAgICB0aGlzLnZpc2libGVSb3dDb3VudCA9IHJlcy5kYXRhLmxlbmd0aDtcbiAgICAgIHRoaXMudG90YWxSb3dDb3VudCA9IGlzTm90TmlsKHJlcy50b3RhbClcbiAgICAgICAgPyByZXMudG90YWxcbiAgICAgICAgOiAoKHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqICh0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRSkpIHx8IDApICsgdGhpcy52aXNpYmxlUm93Q291bnQ7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSAke3Jlcy5kYXRhLmxlbmd0aH0gcm93cyBsb2FkZWRgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBOTyByb3dzIGxvYWRlZCcpO1xuICAgICAgdGhpcy50b3RhbFJvd0NvdW50ID0gMDtcbiAgICAgIHRoaXMudmlzaWJsZVJvd0NvdW50ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm1hcmtBc1VudG91Y2hlZCh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMubWFya0FzTG9hZGVkKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2V0RGF0YXNvdXJjZShkYXRhc291cmNlOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4pIHtcbiAgICBpZiAodGhpcy5fZGF0YVNvdXJjZSkgdGhyb3cgbmV3IEVycm9yKCdbdGFibGVdIGRhdGFTb3VyY2UgYWxyZWFkeSBzZXQgIScpO1xuICAgIGlmIChkYXRhc291cmNlICYmIHRoaXMuX2RhdGFTb3VyY2UgIT09IGRhdGFzb3VyY2UpIHtcbiAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBkYXRhc291cmNlO1xuICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB0aGlzLmxpc3RlbkRhdGFzb3VyY2VMb2FkaW5nKGRhdGFzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RGF0YVNvdXJjZSgpIHtcbiAgICBpZiAodGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgLy90aGlzLl9kYXRhU291cmNlPy5jbG9zZSgpO1xuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBudWxsO1xuICB9XG5cbiAgYWRkQ29sdW1uRGVmKGNvbHVtbjogQ2RrQ29sdW1uRGVmKSB7XG4gICAgdGhpcy50YWJsZS5hZGRDb2x1bW5EZWYoY29sdW1uKTtcbiAgfVxuXG4gIHJlbW92ZUNvbHVtbkRlZihjb2x1bW46IENka0NvbHVtbkRlZikge1xuICAgIHRoaXMudGFibGUucmVtb3ZlQ29sdW1uRGVmKGNvbHVtbik7XG4gIH1cblxuICBzZXRGaWx0ZXIoZmlsdGVyOiBGLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkPzogYm9vbGVhbiB9KSB7XG4gICAgb3B0cyA9IG9wdHMgfHwgeyBlbWl0RXZlbnQ6IHRydWUgfTtcblxuICAgIC8vIFByZXZlbnQgcGVybWFuZW50IHNlbGVjdGlvbiBjaGFuZ2UgZXZlbnRzXG4gICAgdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkID0gdG9Cb29sZWFuKG9wdHMucGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCwgdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkKTtcblxuICAgIGlmICh0aGlzLnNhdmVCZWZvcmVGaWx0ZXIpIHtcbiAgICAgIC8vIGlmIGEgZGlydHkgdGFibGUgaXMgdG8gYmUgc2F2ZWQgYmVmb3JlIGZpbHRlclxuICAgICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgICAgLy8gU2F2ZVxuICAgICAgICB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ2ZpbHRlcicpLnRoZW4oKHNhdmVkKSA9PiB7XG4gICAgICAgICAgLy8gQXBwbHkgZmlsdGVyIG9ubHkgaWYgdXNlciBkaWRuJ3QgY2FuY2VsIHRoZSBzYXZlIG9yIHRoZSBzYXZlIGlzIG9rXG4gICAgICAgICAgaWYgKHNhdmVkKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKGZpbHRlciwgb3B0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFwcGx5IGZpbHRlciBvbiBub24tZGlydHkgdGFibGVcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXIsIG9wdHMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhcHBseSBmaWx0ZXIgZGlyZWN0bHlcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBjb25maXJtQW5kQWRkKGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuICAgIC8vIEFkZCByb3dcbiAgICByZXR1cm4gdGhpcy5hZGRSb3coZXZlbnQpO1xuICB9XG5cbiAgY29uZmlybUFuZEJhY2t3YXJkKGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIC8vIERlbGV0aW5nIGVkaXRlZCByb3csIGlmIGVtcHR5IGFuZCBub3QgZGlydHlcbiAgICBjb25zdCBwcmV2aW91c1JvdyA9IHRoaXMuZWRpdGVkUm93O1xuICAgIGlmIChwcmV2aW91c1JvdyAmJiBwcmV2aW91c1Jvdy5pZCA9PT0gLTEgJiYgcHJldmlvdXNSb3cudmFsaWRhdG9yPy5pbnZhbGlkICYmICFwcmV2aW91c1Jvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICB0aGlzLmRlbGV0ZU5ld1JvdyhldmVudCwgcHJldmlvdXNSb3cpO1xuXG4gICAgICAvLyBXYWl0IGRlbGV0aW9uIGlzIGRvbmUsIHRoZW4gZWRpdCBwcmV2aW91cyByb3cgKGJ5IGlkLCBiZWNhdXNlIG9mIHJlbG9hZGluZylcbiAgICAgIHRoaXMud2FpdElkbGUoKS50aGVuKCgpID0+IHRoaXMuZWRpdFJvd0J5SWQoZXZlbnQsIHJvdy5pZCwgeyBmb2N1c0NvbHVtbjogdGhpcy5sYXN0VXNlckNvbHVtbiB9KSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBFZGl0IHByZXZpb3VzIHJvd1xuICAgIHRoaXMuZWRpdFJvdyhldmVudCwgcm93LCB7IGZvY3VzQ29sdW1uOiB0aGlzLmxhc3RVc2VyQ29sdW1uIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uZmlybUFuZEZvcndhcmQoZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+KTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5pbmxpbmVFZGl0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgcm93ID0gcm93IHx8IHRoaXMuZWRpdGVkUm93O1xuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICBpZiAocm93LnZhbGlkYXRvcj8ucGVuZGluZykge1xuICAgICAgICByZXR1cm4gQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvcikudGhlbigoKSA9PiB0aGlzLmNvbmZpcm1BbmRGb3J3YXJkKGV2ZW50LCByb3cpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBFZGl0IG5leHQgcm93XG4gICAgdGhpcy5lZGl0Um93QnlJZChldmVudCwgcm93LmlkICsgMSwgeyBmb2N1c0NvbHVtbjogdGhpcy5maXJzdFVzZXJDb2x1bW4gfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybSB0aGUgY3JlYXRpb24gb2YgdGhlIGdpdmVuIHJvdywgb3IgaWYgbm90IHNwZWNpZmllZCB0aGUgY3VycmVudGx5IGVkaXRlZCByb3dcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSByb3dcbiAgICovXG4gIGNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhcm93LmVkaXRpbmcpIHJldHVybiB0cnVlOyAvLyBubyByb3cgdG8gY29uZmlybVxuXG4gICAgLy8gU3RvcCBldmVudFxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIENvbmZpcm1hdGlvbiBlZGl0aW9uIG9yIGNyZWF0aW9uXG4gICAgLy8gVE9ETzogYWRkIGF3YWl0ID9cbiAgICBjb25zdCBjb25maXJtZWQgPSByb3cuY29uZmlybUVkaXRDcmVhdGUoKTtcblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIC8vIElmIGVkaXQgZmluaXNoZWQsIGZvcmdldCBlZGl0ZWQgcm93XG4gICAgICBpZiAocm93ID09PSB0aGlzLmVkaXRlZFJvdykge1xuICAgICAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gTWFyayB0YWJsZSBhcyBkaXJ0eSAoaWYgcm93IGlzIGRpcnR5KVxuICAgICAgaWYgKHJvdy5kaXJ0eSkge1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKiBiZWNhdXNlIG9mIHJlc2V0RXJyb3IoKSAqLyB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgZXJyb3JcbiAgICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgICAvLyBFbWl0IHRoZSBjb25maXJtIGV2ZW50XG4gICAgICB0aGlzLm9uQ29uZmlybUVkaXRDcmVhdGVSb3cubmV4dChyb3cpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICBpZiAocm93LnZhbGlkYXRvcikge1xuICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICAvLyBUT0RPOiByZW1vdmUgd2hlbiB1c2luZyBhc3luYyBpc1ZhbGlkKCkgZnVuY3Rpb25cbiAgICAgIGlmIChyb3cudmFsaWRhdG9yLnBlbmRpbmcpIHtcbiAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvcikudGhlbigoKSA9PiB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBOT1QgY29uZmlybWVkID0gcm93IGhhcyBlcnJvclxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIENhbm5vdCBjb25maXJtIHJvdywgYmVjYXVzZSBpbnZhbGlkJyk7XG4gICAgICAgIEFwcEZvcm1VdGlscy5sb2dGb3JtRXJyb3JzKHJvdy52YWxpZGF0b3IsICdbdGFibGVdICcpO1xuICAgICAgfVxuXG4gICAgICAvLyBmaXg6IG1hcmsgYWxsIGNvbnRyb2xzIGFzIHRvdWNoZWQgdG8gc2hvdyBlcnJvcnNcbiAgICAgIHJvdy52YWxpZGF0b3IubWFya0FsbEFzVG91Y2hlZCgpO1xuXG4gICAgICAvLyBDb21wdXRlIHJvdyBlcnJvciwgYW5kIHByb3BhZ2F0ZSB0byB0YWJsZSdzIGVycm9yXG4gICAgICBpZiAodGhpcy5wcm9wYWdhdGVSb3dFcnJvcikge1xuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZ2V0Um93RXJyb3Iocm93KTtcbiAgICAgICAgdGhpcy5zZXRFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm90IGNvbmZpcm1lZFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNhbmNlbE9yRGVsZXRlKGV2ZW50OiBFdmVudCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsga2VlcEVkaXRpbmc/OiBib29sZWFuIH0pIHtcbiAgICAvLyBEZWxldGUgbmV3IHJvd1xuICAgIGlmIChyb3cuaWQgPT09IC0xKSB7XG4gICAgICB0aGlzLmRlbGV0ZU5ld1JvdyhldmVudCwgcm93KTtcbiAgICB9XG4gICAgLy8gRGVsZXRlIGV4aXN0aW5nIChidXQgbm90IGVkaXRpbmcpIHJvd1xuICAgIGVsc2UgaWYgKCFyb3cuZWRpdGluZykge1xuICAgICAgdGhpcy5kZWxldGVFeGlzdGluZ1JvdyhldmVudCwgcm93LCBvcHRzKTtcbiAgICB9XG4gICAgLy8gQ2FuY2VsIGV4aXN0aW5nIChhbmQgZWRpdGluZykgcm93XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmNhbmNlbEV4aXN0aW5nUm93KGV2ZW50LCByb3csIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFkZFJvdyhldmVudD86IEV2ZW50LCBpbnNlcnRBdD86IG51bWJlciwgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmc7IGVkaXRpbmc/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBBc2tpbmcgZm9yIG5ldyByb3cuLi4nKTtcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFVzZSBtb2RhbCBpZiBpbmxpbmUgZWRpdGlvbiBpcyBkaXNhYmxlZFxuICAgIGlmICghdGhpcy5pbmxpbmVFZGl0aW9uKSB7XG4gICAgICB0aGlzLm9wZW5OZXdSb3dEZXRhaWwoZXZlbnQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBmaW5pc2ggZWRpdGVkIHJvdyBmaXJzdFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWRkIG5ldyByb3dcbiAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLmFkZFJvd1RvVGFibGUoaW5zZXJ0QXQsIG9wdHMpO1xuICAgIHJldHVybiAhIXJvdztcbiAgfVxuXG4gIGFzeW5jIHNhdmUob3B0cz86IHsga2VlcEVkaXRpbmc/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBvcHRzID0ge1xuICAgICAga2VlcEVkaXRpbmc6IHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSxcbiAgICAgIC4uLm9wdHMsXG4gICAgfTtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLlRBQkxFX1JFQURfT05MWSwgbWVzc2FnZTogJ0VSUk9SLlRBQkxFX1JFQURfT05MWScgfTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIC8vIEtlZXAgZWRpdGVkIHJvdyBpZCAoc2hvdWxkIGJlIGRvbmUgQkVGT1JFIGNvbmZpcm1FZGl0Q3JlYXRlKCkgKVxuICAgIHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkID0gb3B0cy5rZWVwRWRpdGluZ1xuICAgICAgPyAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy5pZCA6IHVuZGVmaW5lZCkgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdz8uaWRcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByZXZpb3VzbHlFZGl0ZWRSb3dJZCA9IHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkO1xuICAgIGNvbnN0IHByZXZpb3VzbHlFZGl0ZWREYXRhID0gb3B0cy5rZWVwRWRpdGluZ1xuICAgICAgPyAoaXNOb3ROaWwocHJldmlvdXNseUVkaXRlZFJvd0lkKSAmJiB0aGlzLmVkaXRlZFJvdz8uY3VycmVudERhdGEpIHx8IHRoaXMuc2luZ2xlU2VsZWN0ZWRSb3c/LmN1cnJlbnREYXRhXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuVEFCTEVfSU5WQUxJRF9ST1dfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9JTlZBTElEX1JPV19FUlJPUicgfTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGFzIHNhdmluZ1xuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ2FsbGluZyBzZXJ2aWNlIHNhdmUoKVxuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQ2FsbGluZyBkYXRhU291cmNlLnNhdmUoKS4uLicpO1xuICAgICAgY29uc3QgaXNPSyA9IGF3YWl0IHRoaXMuX2RhdGFTb3VyY2Uuc2F2ZSgpO1xuXG4gICAgICBpZiAoaXNPSykgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuXG4gICAgICByZXR1cm4gaXNPSztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2V0RXJyb3IoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5tYXJrQXNTYXZlZCgpO1xuXG4gICAgICAvLyBSZXN0b3JlIHByZXZpb3VzIHJvd1xuICAgICAgaWYgKGlzTm90TmlsKHByZXZpb3VzbHlFZGl0ZWRSb3dJZCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZWxlY3RSb3dCeUlkT3JEYXRhKHByZXZpb3VzbHlFZGl0ZWRSb3dJZCwgcHJldmlvdXNseUVkaXRlZERhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhbmNlbChldmVudD86IEV2ZW50LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSkge1xuICAgIC8vIENoZWNrIGNvbmZpcm1hdGlvblxuICAgIGlmICgoIW9wdHMgfHwgb3B0cy5pbnRlcmFjdGl2ZSAhPT0gZmFsc2UpICYmIHRoaXMuZGlydHkgJiYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCB8fCB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy5vYnNlcnZlZCkpIHtcbiAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY2FuQ2FuY2VsUm93cygpLnRoZW4oKGNvbmZpcm0pID0+IHtcbiAgICAgICAgLy8gSWYgY29uZmlybWVkLCBsb29wXG4gICAgICAgIGlmIChjb25maXJtKSB0aGlzLmNhbmNlbChudWxsLCB7IGludGVyYWN0aXZlOiBmYWxzZSB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25SZWZyZXNoLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIGR1cGxpY2F0ZVJvdyhcbiAgICBldmVudD86IEV2ZW50LFxuICAgIHJvdz86IFRhYmxlRWxlbWVudDxUPixcbiAgICBvcHRzPzoge1xuICAgICAgc2tpcFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcbiAgICB9XG4gICkge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHJvdyA9IHJvdyB8fCB0aGlzLnNpbmdsZVNlbGVjdGVkUm93O1xuICAgIGlmICghcm93IHx8ICF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3Um93ID0gYXdhaXQgdGhpcy5hZGRSb3dUb1RhYmxlKHJvdy5pZCArIDEpO1xuICAgIGlmICghbmV3Um93KSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhZGQgbmV3IHJvdyB0byB0YWJsZScpO1xuICAgIGNvbnN0IGpzb24gPSB7IC4uLnJvdy5jdXJyZW50RGF0YSwgaWQ6IG51bGwgfTtcblxuICAgIC8vIFJlc2V0IHNvbWUgcHJvcGVydGllcyAoZS5nLiByYW5rT3JkZXIsIGV0YylcbiAgICBpZiAob3B0cyAmJiBvcHRzLnNraXBQcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCBuZXdEYXRhID0gbmV3Um93LmN1cnJlbnREYXRhO1xuICAgICAgb3B0cy5za2lwUHJvcGVydGllcy5mb3JFYWNoKChrZXkpID0+IChqc29uW2tleV0gPSBuZXdEYXRhW2tleV0pKTtcbiAgICB9XG5cbiAgICBpZiAobmV3Um93LnZhbGlkYXRvcikge1xuICAgICAgbmV3Um93LnZhbGlkYXRvci5wYXRjaFZhbHVlKGpzb24pO1xuICAgICAgbmV3Um93LnZhbGlkYXRvci5tYXJrQXNEaXJ0eSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV3Um93LmN1cnJlbnREYXRhPy5mcm9tT2JqZWN0KSB7XG4gICAgICAgIG5ld1Jvdy5jdXJyZW50RGF0YS5mcm9tT2JqZWN0KGpzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Um93LmN1cnJlbnREYXRhID0ganNvbjtcbiAgICAgIH1cbiAgICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgICB9XG5cbiAgICAvLyBzZWxlY3RcbiAgICB0aGlzLmNsaWNrUm93KHVuZGVmaW5lZCwgbmV3Um93KTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgZWxlbWVudHMgbWF0Y2hlcyB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MuICovXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ2lzQWxsU2VsZWN0ZWQuIGxlbmd0aHMnLCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGgsIHRoaXMudG90YWxSb3dDb3VudCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID09PSB0aGlzLnZpc2libGVSb3dDb3VudDtcbiAgfVxuXG4gIC8qKiBTZWxlY3RzIGFsbCByb3dzIGlmIHRoZXkgYXJlIG5vdCBhbGwgc2VsZWN0ZWQ7IG90aGVyd2lzZSBjbGVhciBzZWxlY3Rpb24uICovXG4gIGFzeW5jIG1hc3RlclRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb3dzID0gdGhpcy5fZGF0YVNvdXJjZS5nZXRSb3dzKCk7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oLi4ucm93cyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2VsZWN0aW9uKGV2ZW50OiBFdmVudCwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gYXdhaXQgdGhpcy5kZWxldGVSb3dzKGV2ZW50LCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCwgb3B0cyk7XG4gICAgaWYgKGRlbGV0ZUNvdW50ID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlbGV0ZUNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBvcHRzIFVzZSBpbnRlcmFjdGl2ZT1mYWxzZSB0byBhdm9pZCB1c2VyIGludGVyYWN0aW9uIChlLmcuIHVzZXIgY29uZmlybWF0aW9uKVxuICAgKiAgQW5kIHRvIGZvcmNlIGRlbGV0aW9uIGV2ZW4gaWYgdGFibGUgaXMgYnVzeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUm93KGV2ZW50OiBFdmVudCB8IG51bGwsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdyk7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSBhd2FpdCB0aGlzLmRlbGV0ZVJvd3MoZXZlbnQsIFtyb3ddLCBvcHRzKTtcblxuICAgIC8vIFVuc2VsZWN0IHRoZSBkZWxldGVkIHJvd1xuICAgIGlmIChkZWxldGVDb3VudCAmJiBpc1NlbGVjdGVkKSB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChyb3cpO1xuXG4gICAgcmV0dXJuIGRlbGV0ZUNvdW50ID09PSAxO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93c1xuICAgKiBAcGFyYW0gb3B0cyBVc2UgaW50ZXJhY3RpdmU9ZmFsc2UgdG8gYXZvaWQgdXNlciBpbnRlcmFjdGlvbiAoZS5nLiB1c2VyIGNvbmZpcm1hdGlvbilcbiAgICogICAgQW5kIHRvIGZvcmNlIGRlbGV0aW9uIGV2ZW4gaWYgdGFibGUgaXMgYnVzeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUm93cyhldmVudDogRXZlbnQgfCBudWxsLCByb3dzOiBUYWJsZUVsZW1lbnQ8VD5bXSwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuVEFCTEVfUkVBRF9PTkxZLCBtZXNzYWdlOiAnRVJST1IuVEFCTEVfUkVBRF9PTkxZJyB9O1xuICAgIH1cbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybiAwOyAvLyBTS2lwXG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQgfHwgaXNFbXB0eUFycmF5KHJvd3MpKSByZXR1cm4gMDsgLy8gU2tpcCBpcyBkaXNhYmxlZCwgb3Igbm8gcm93cyB0byBkZWxldGVcblxuICAgIGlmICh0aGlzLmxvYWRpbmcgJiYgKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTa2lwIGRlbGV0ZVJvd3MoKSBiZWNhdXNlIHRhYmxlIGlzIGJ1c3kgKGxvYWRpbmcpLiBVc2Ugb3B0cy5pbnRlcmFjdGl2ZSA9IGZhbHNlIHRvIGZvcmNlIGRlbGV0aW9uJyk7XG4gICAgICByZXR1cm4gMDsgLy8gU2tpcCBpZiBsb2FkaW5nXG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRvIGtlZXAgbmV3bHkgY3JlYXRlZCByb3dcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmlkID09PSAtMSAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nICYmICFyb3dzLmluY2x1ZGVzKHRoaXMuZWRpdGVkUm93KSkge1xuICAgICAgY29uc3QgY29uZmlybWVkID0gdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpO1xuICAgICAgaWYgKCFjb25maXJtZWQpIHJldHVybiAwOyAvLyBDYW5ub3QgZGVsZXRlIChlLmcuIGVkaXRlZCByb3cgaXMgaW52YWxpZClcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjYW4gZGVsZXRlXG4gICAgY29uc3QgY2FuRGVsZXRlID0gYXdhaXQgdGhpcy5jYW5EZWxldGVSb3dzKHJvd3MsIG9wdHMpO1xuICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gMDsgLy8gQ2Fubm90IGRlbGV0ZVxuXG4gICAgLy8gUmV2ZXJzZSByb3cgb3JkZXIgKG9uIGEgY29weSlcbiAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCwgbmVlZCBiZWNhdXNlIHJvdy5kZWxldGUoKSBoYXMgYXN5bmMgZXhlY3V0aW9uXG4gICAgLy8gYW5kIGluZGV4IGNhY2hlIGlzIHVwZGF0ZWQgd2l0aCBhIGRlbGF5XG4gICAgbGV0IHRlbXBSb3dzID0gcm93cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IChhLmlkID4gYi5pZCA/IC0xIDogMSkpO1xuXG4gICAgY29uc3QgZGVsZXRlZFJvd3M6IFRhYmxlRWxlbWVudDxUPltdID0gW107XG5cbiAgICAvLyBJZiBkYXRhIG5lZWQgdG8gYmUgc2F2ZWQgZmlyc3RcbiAgICBpZiAodGhpcy5zYXZlQmVmb3JlRGVsZXRlKSB7XG4gICAgICAvLyBFeGNsdWRlIGludmFsaWQgcm93cyAoYmVjYXVzZSBvZiBzYXZlKCkgd2lsbCBmYWlsLCB3aGVuIGV4aXN0cyBzb21lIGludmFsaWQgcm93cylcbiAgICAgIHRlbXBSb3dzID0gdGVtcFJvd3MuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgLy8gRGVsZXRlIHRoZSByb3cgOlxuICAgICAgICAvLyAtIGlmIG5ld2x5IGNyZWF0ZWQgcm93IChpZCA9IC0xKSxcbiAgICAgICAgLy8gLSBvciBpZiBpbnZhbGlkIGFuZCBub3QgZWRpdGluZyAoPSBub3QgY2FuY2VsbGFibGUpXG4gICAgICAgIGlmIChyb3cuaWQgPT09IC0xIHx8ICghcm93LmVkaXRpbmcgJiYgcm93LmludmFsaWQpIC8qZG8gbm90IHVzZSAhdmFsaWQgYmVjYXVzZSBpZiByb3cgaXMgZGlzYWJsZWQsIGl0IHdpbGwgYmUgYWx3YXlzICF2YWxpZCAqLykge1xuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIERlbGV0ZSByb3cgIyR7cm93LmlkfWApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XG4gICAgICAgICAgcm93LmRlbGV0ZSgpO1xuICAgICAgICAgIHRoaXMudmlzaWJsZVJvd0NvdW50LS07XG4gICAgICAgICAgdGhpcy50b3RhbFJvd0NvdW50LS07XG4gICAgICAgICAgZGVsZXRlZFJvd3MucHVzaChyb3cpO1xuICAgICAgICAgIGlmICh0aGlzLmVkaXRlZFJvdyA9PT0gcm93KSB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEV4Y2x1ZGUgZnJvbSB0aGUgbGlzdCB0byBkZWxldGUgdXNpbmcgdGhlIHNlcnZpY2VcbiAgICAgICAgfVxuICAgICAgICAvLyBDYW5jZWwgdGhlIHJvdyAoYW5kIG1hcmsgYXMgcHJpc3RpbmUpLCB3aGVuIG5vdCB2YWxpZCBidXQgaW4gZWRpdGlvblxuICAgICAgICBlbHNlIGlmIChyb3cuZWRpdGluZyAmJiAhcm93LnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3Qocm93KTtcbiAgICAgICAgICByb3cuY2FuY2VsKCk7XG4gICAgICAgICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmUgKGlmIHBvc3NpYmxlKVxuICAgICAgICAgIHRoaXMuY2hlY2tJZlJvd1ByaXN0aW5lKHJvdywgeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSAvKmF2b2lkIHByb3BhZ2F0aW9uIHRvIHRhYmxlKi8gfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgdGhlIHJvdy4gdGhlIHJvdyB3aWxsIGJlIGRlbGV0ZWQgYWZ0ZXIgdGhlIHNhdmVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEFwcGx5IHNhdmUsIG9ubHkgaWYgdGhlcmUgaXMgc3RpbGwgc29tZSByb3dzIHRvIGRlbGV0ZVxuICAgICAgLy8gV0FSTjogSWYgbm8gbW9yZSByb3dzIChlLmcuIGJlY2F1c2UgYWxsIGhhcyBiZWVuIGNhbmNlbGxlZCkgdGhlbiBjb250aW51ZSBhbnl3YXkgdG8gY2xlYXIgZWRpdGVkUm93IGFuZCBzZWxlY3Rpb24gKGlzc3VlIElNQUdJTkUtNjY5KVxuICAgICAgaWYgKGRlbGV0ZWRSb3dzLmxlbmd0aCB8fCB0ZW1wUm93cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gU2F2ZSBkYXRhIChlLmcuIHdoZW4gdXNpbmcgbWVtb3J5IHNlcnZpY2UpXG4gICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdkZWxldGUnKTtcbiAgICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAgIC8vIFN0b3AgaWYgc2F2ZSBjYW5jZWxsZWQgb3Igc2F2ZSBmYWlsZWRcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gQXBwbHkgZGVsZXRpb24gb24gZGF0YXNvdXJjZVxuICAgICAgLy8gSWYgbm8gbW9yZSByb3dzIHRvIGRlbGV0ZSwgY29udGludWUgYW55d2F5IHRvIGNsZWFyIGVkaXRlZFJvdyBhbmQgc2VsZWN0aW9uIChpc3N1ZSBJTUFHSU5FLTY2OSlcbiAgICAgIGlmICh0ZW1wUm93cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gRGVsZXRlICR7dGVtcFJvd3MubGVuZ3RofSByb3dzLi4uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UuZGVsZXRlQWxsKHRlbXBSb3dzKTtcbiAgICAgIH1cblxuICAgICAgLy8gRE8gbm90IHVwZGF0ZSBtYW51YWxseSwgYmVjYXVzZSB3YXRjaEFMbCgpLnN1YnNjcmliZSgpIHdpbGwgdXBkYXRlIHRoaXMgY291bnRcbiAgICAgIC8vdGhpcy50b3RhbFJvd0NvdW50IC09IGRlbGV0ZUNvdW50O1xuICAgICAgLy90aGlzLnZpc2libGVSb3dDb3VudCAtPSBkZWxldGVDb3VudDtcblxuICAgICAgLy8gRGVzZWxlY3QgZGVsZXRlZCByb3dzXG4gICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdCguLi5yb3dzKTtcblxuICAgICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKm1hcmtGb3JDaGVjaygpIGlzIGNhbGxlZCBqdXN0IGFmdGVyKi8gfSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICB0aGlzLm9uQWZ0ZXJEZWxldGVkUm93cy5uZXh0KHJvd3MpO1xuXG4gICAgICByZXR1cm4gcm93cy5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VsZWN0Um93QnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhU291cmNlLmdldFJvdyhpZCk7XG4gICAgaWYgKCFyb3cpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jbGlja1JvdyhudWxsLCByb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBzZWxlY3Qgcm93IGJ5IGRhdGEuIFdpbGwgdXNlIGVxdWFscygpIHRvIGZpbmQgc2FtZSByb3cncyBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBhc3luYyBzZWxlY3RSb3dCeURhdGEoZGF0YTogVCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMud2FpdElkbGUoKTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpLmZpbmQoKHJvdykgPT4gdGhpcy5lcXVhbHMocm93LmN1cnJlbnREYXRhLCBkYXRhKSk7XG4gICAgaWYgKCFyb3cpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jbGlja1JvdyhudWxsLCByb3cpO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0Um93KGV2ZW50OiBFdmVudCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNlbGVjdGlvbi50b2dnbGUocm93KTtcbiAgfVxuXG4gIGNsaWNrUm93KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICAvLyBXYWl0IHdoaWxlIGxvYWRpbmcsIGFuZCBsb29wXG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBXYWl0aW5nIGJlZm9yZSBhcHBseSBjbGlja1JvdygpIChkYXRhc291cmNlIGlzIGJ1c3kpLi4uJyk7XG4gICAgICB0aGlzLndhaXRJZGxlKHsgdGltZW91dDogMjAwMCB9KS50aGVuKCgpID0+IHRoaXMuY2xpY2tSb3coZXZlbnQsIHJvdykpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiW3RhYmxlXSBEZXRlY3QgY2xpY2sgb24gcm93XCIpO1xuXG4gICAgLy8gQ2FuY2VsbGVkIGJ5IGV2ZW50XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBjbGlja1JvdyBldmVudCBpcyBkZWZhdWx0UHJldmVudGVkJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWxyZWFkeSBpbiBlZGl0aW9uXG4gICAgaWYgKHJvdy5pZCA9PT0gLTEgfHwgcm93LmVkaXRpbmcpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFJvdyBhbHJlYWR5IGVkaXRpbmcuIFNraXAgY2xpY2tSb3cgZXZlbnQnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIE9wZW4gdGhlIGRldGFpbCBwYWdlIChpZiBub3QgaW5saW5lIGVkaXRpbmcpXG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXRpb24pIHtcbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG5cbiAgICAgIHRoaXMub3BlblJvdyhyb3cuY3VycmVudERhdGEuaWQsIHJvdylcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5tYXJrQXNMb2FkZWQoKSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHRoaXMubWFya0FzTG9hZGVkKCkpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTdGFydCBlZGl0aW5nIHJvd1xuICAgIHJldHVybiB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywgeyBmb2N1c0NvbHVtbjogdW5kZWZpbmVkIC8qZm9yY2UgdG8gdXNlIHRoZSBjbGljayB0YXJnZXQqLyB9KTtcbiAgfVxuXG4gIG1vdmVSb3coaWQ6IG51bWJlciwgZGlyZWN0aW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UubW92ZShpZCwgZGlyZWN0aW9uKTtcbiAgfVxuXG4gIHJlYWR5KG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB3YWl0Rm9yVHJ1ZSh0aGlzLnJlYWR5U3ViamVjdCwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0LCAuLi5vcHRzIH0pO1xuICB9XG5cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgcmV0dXJuIHdhaXRGb3JGYWxzZSh0aGlzLmxvYWRpbmdTdWJqZWN0LCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QsIC4uLm9wdHMgfSk7XG4gIH1cblxuICBhc3luYyBvcGVuU2VsZWN0Q29sdW1uc01vZGFsKF8/OiBFdmVudCk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gQ29weSBjdXJyZW50IGNvbHVtbnMgKGRlZXAgY29weSlcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDdXJyZW50Q29sdW1ucygpO1xuXG4gICAgY29uc3QgaGFzVG9wTW9kYWwgPSAhIShhd2FpdCB0aGlzLm1vZGFsQ3RybC5nZXRUb3AoKSk7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBUYWJsZVNlbGVjdENvbHVtbnNDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczogeyBjb2x1bW5zIH0sXG4gICAgICBjc3NDbGFzczogaGFzVG9wTW9kYWwgJiYgJ3N0YWNrLW1vZGFsJyxcbiAgICB9KTtcblxuICAgIC8vIE9wZW4gdGhlIG1vZGFsXG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuXG4gICAgLy8gT24gZGlzbWlzc1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgbW9kYWwub25EaWREaXNtaXNzKCk7XG4gICAgaWYgKCFkYXRhKSByZXR1cm47IC8vIENBTkNFTExFRFxuXG4gICAgLy8gQXBwbHkgY29sdW1uc1xuICAgIGNvbnN0IHVzZXJDb2x1bW5zID0gKGRhdGEgfHwgW10pLmZpbHRlcigoYykgPT4gYy5jYW5IaWRlID09PSBmYWxzZSB8fCBjLnZpc2libGUpLm1hcCgoYykgPT4gYy5uYW1lKSB8fCBbXTtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmNvbmNhdCh1c2VyQ29sdW1ucykuY29uY2F0KFJFU0VSVkVEX0VORF9DT0xVTU5TKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gVXBkYXRlIHVzZXIgc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNhdmVQYWdlU2V0dGluZ3ModXNlckNvbHVtbnMsIFNFVFRJTkdTX0RJU1BMQVlfQ09MVU1OUyk7XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICByZXR1cm4gcm93LmlkO1xuICB9XG5cbiAgZG9SZWZyZXNoKGV2ZW50PzogQ29tcGxldGFibGVFdmVudCkge1xuICAgIHRoaXMub25SZWZyZXNoLmVtaXQoZXZlbnQpO1xuXG4gICAgLy8gV2hlbiB0YXJnZXQgd2FpdCBmb3IgYSBjb21wbGV0ZSAoZS5nLiBJb25SZWZyZXNoZXIpXG4gICAgaWYgKGV2ZW50Py50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmNvbXBsZXRlKSB7XG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0SWRsZSgpO1xuICAgICAgICBldmVudC50YXJnZXQuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldEN1cnJlbnRDb2x1bW5zKCk6IENvbHVtbkl0ZW1bXSB7XG4gICAgY29uc3QgaGlkZGVuQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5zbGljZShSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmxlbmd0aCkuZmlsdGVyKChuYW1lKSA9PiB0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5kZXhPZihuYW1lKSA9PT0gLTEpO1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbnNcbiAgICAgIC5jb25jYXQoaGlkZGVuQ29sdW1ucylcbiAgICAgIC5maWx0ZXIoKG5hbWUpID0+ICFSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmluY2x1ZGVzKG5hbWUpICYmICFSRVNFUlZFRF9FTkRfQ09MVU1OUy5pbmNsdWRlcyhuYW1lKSAmJiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMobmFtZSkpXG4gICAgICAubWFwKChuYW1lKSA9PiAoe1xuICAgICAgICBuYW1lLFxuICAgICAgICBsYWJlbDogdGhpcy5nZXRJMThuQ29sdW1uTmFtZShuYW1lKSxcbiAgICAgICAgdmlzaWJsZTogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YobmFtZSkgIT09IC0xLFxuICAgICAgICBjYW5IaWRlOiB0aGlzLmdldFJlcXVpcmVkQ29sdW1ucygpLmluZGV4T2YobmFtZSkgPT09IC0xLFxuICAgICAgfSkpO1xuICB9XG5cbiAgZXNjYXBlRWRpdGluZ1JvdyhldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXJvdy5lZGl0aW5nKSByZXR1cm47XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZygnW2FwcC10YWJsZV0gQ2FuY2VsIHRoZSByb3cgKGtleWRvd24uZXNjYXBlKScpO1xuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICAvLyBBdm9pZCB0byBjYW5jZWwgdGhlIGVkaXRvclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8vIElmIG5ldyByb3cgKG5vIGlkKVxuICAgIGlmIChyb3cuaWQgPT09IC0xKSB7XG4gICAgICBpZiAocm93LnZhbGlkYXRvcikge1xuICAgICAgICAvLyBJZiBwZW5kaW5nOiBXYWl0IGVuZCBvZiB2YWxpZGF0aW9uLCB0aGVuIGxvb3BcbiAgICAgICAgaWYgKHJvdy52YWxpZGF0b3IucGVuZGluZykge1xuICAgICAgICAgIEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHJvdy52YWxpZGF0b3IpLnRoZW4oKCkgPT4gdGhpcy5lc2NhcGVFZGl0aW5nUm93KGV2ZW50LCByb3cpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSb3cgaXMgaW52YWxpZDogZGVsZXRlIHRoZSByb3dcbiAgICAgICAgaWYgKHJvdy52YWxpZGF0b3IuaW52YWxpZCkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlTmV3Um93KGV2ZW50LCByb3cpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgcm93IGV4aXN0cyAoaGFzIGFuIGlkKVxuICAgIGVsc2Uge1xuICAgICAgLy8gbmVlZCB0byBjYWxsIGNhbmNlbCBmdW5jdGlvbiAoaWYgY29uZmlybWF0aW9uIHdpbGwgYmUgY2FsbCBiZWZvcmUgYmVmb3JlKVxuICAgICAgaWYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCkge1xuICAgICAgICB0aGlzLmNhbmNlbEV4aXN0aW5nUm93KGV2ZW50LCByb3csIHsga2VlcEVkaXRpbmc6IGZhbHNlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCwgdHJ5IHRvIGNvbmZpcm0gdGhlIHJvd1xuICAgIHRoaXMuY29uZmlybUVkaXRDcmVhdGUoZXZlbnQsIHJvdyk7XG4gIH1cblxuICB0cmFuc2xhdGVDb250cm9sUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIENhbiBiZSBvdmVycmlkZSBieSBzdWJjbGFzc2VzLCB0byByZXNvbHZlIGFsbCBmaWVsZCBuYW1lXG5cbiAgICAvLyBVc2UgY29sdW1ucyBrZXksIGhhcyBkZWZhdWx0IG5hbWVcbiAgICBjb25zdCBpMThuQ29sdW1uS2V5ID0gdGhpcy5nZXRJMThuQ29sdW1uTmFtZShwYXRoKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGU/Lmluc3RhbnQoaTE4bkNvbHVtbktleSkgfHwgaTE4bkNvbHVtbktleTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2QgLS0gKi9cblxuICBwcm90ZWN0ZWQgZWRpdFJvdyhldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBmb2N1c0NvbHVtbj86IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9lbmFibGVkIHx8ICF0aGlzLmlubGluZUVkaXRpb24pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3cgPT09IHJvdykgcmV0dXJuIHRydWU7IC8vIEFscmVhZHkgdGhlIGVkaXRlZCByb3dcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGNvbmZpcm1lZCA9IHRoaXMuY29uZmlybUVkaXRDcmVhdGUoKTtcbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKCFyb3cuZWRpdGluZyAmJiAhdGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmZvY3VzQ29sdW1uID0gKG9wdHMgJiYgb3B0cy5mb2N1c0NvbHVtbikgfHwgdGhpcy5mb2N1c0NvbHVtbjtcbiAgICAgIHRoaXMuX2RhdGFTb3VyY2Uuc3RhcnRFZGl0KHJvdyk7XG4gICAgfVxuICAgIHRoaXMuZWRpdGVkUm93ID0gcm93O1xuICAgIHRoaXMub25TdGFydEVkaXRpbmdSb3cuZW1pdChyb3cpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBzZWxlY3Qgcm93LCBieSByb3cuaWQsIG9yIGJ5IGRhdGEuIFdJbGwgdXNlIEVudGl0eVV0aWxzLmVxdWFscygpXG4gICAqXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc2VsZWN0Um93QnlJZE9yRGF0YShpZDogbnVtYmVyLCBkYXRhPzogVCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNlbGVjdCBieSByb3cgaWQgKGlmIE5PVCBhIG5ldyByb3cpXG4gICAgICBpZiAoaXNOb3ROaWwoaWQpIHx8IGlkICE9PSAtMSkge1xuICAgICAgICBkb25lID0gYXdhaXQgdGhpcy5zZWxlY3RSb3dCeUlkKGlkKTtcbiAgICAgICAgaWYgKGRvbmUpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1thcHAtdGFibGVdIFNhdmU6IENhbm5vdCByZXNlbGVjdCByb3cgYnkgcm93LmlkOiAnLCBpZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRyeSBieSBkYXRhXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkb25lID0gYXdhaXQgdGhpcy5zZWxlY3RSb3dCeURhdGEoZGF0YSk7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTYXZlOiBDYW5ub3QgcmVzZWxlY3Qgcm93IGJ5IGRhdGE6ICcsIGRhdGEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBMb2csIGJ1dCBjb250aW51ZVxuICAgICAgY29uc29sZS5lcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIHNlbGVjdGVkIHJvdyBpZiB1bmlxdWUgaW4gc2VsZWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHNpbmdsZVNlbGVjdGVkUm93KCk6IFRhYmxlRWxlbWVudDxUPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkPy5sZW5ndGggPT09IDEgPyB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFswXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYW5EZWxldGVSb3dzKHJvd3M6IFRhYmxlRWxlbWVudDxUPltdLCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBpZiAodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3Mub2JzZXJ2ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhbkRlbGV0ZSA9IGF3YWl0IGVtaXRQcm9taXNlRXZlbnQodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MsICdjYW5EZWxldGUnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7IHJvd3MgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciA9PT0gJ0NBTkNFTExFRCcpIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWxcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgY2FuIGRlbGV0ZSByb3dzJywgZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvblxuICAgIGlmICh0aGlzLmNvbmZpcm1CZWZvcmVEZWxldGUgJiYgKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXNrRGVsZXRlQ29uZmlybWF0aW9uKG51bGwsIHJvd3MpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYW5DYW5jZWxSb3dzKHJvd3M/OiBUYWJsZUVsZW1lbnQ8VD5bXSwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBHZXQgZGlydHkgcm93c1xuICAgIHJvd3MgPSByb3dzIHx8IHRoaXMuZGF0YVNvdXJjZS5nZXRSb3dzKCkuZmlsdGVyKChyb3cpID0+IHJvdy52YWxpZGF0b3I/LmRpcnR5KTtcblxuICAgIGlmIChpc0VtcHR5QXJyYXkocm93cykpIHJldHVybiB0cnVlOyAvLyBObyBkaXJ0eTogT0tcblxuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBpZiAodGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlzQ2FuY2VsID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cywgJ2NhbkNhbmNlbCcsIHtcbiAgICAgICAgICBkZXRhaWw6IHsgcm93cyB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFpc0NhbmNlbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBjYW5jZWwgcm93cycsIGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBc2sgdXNlciBjb25maXJtYXRpb25cbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsICYmICghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFza0NhbmNlbENvbmZpcm1hdGlvbihudWxsLCByb3dzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZUJlZm9yZUFjdGlvbihzYXZlQWN0aW9uOiBTYXZlQWN0aW9uVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgLy8gQ29udGludWUgd2l0aG91dCBzYXZlXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgc2F2ZTogYm9vbGVhbjtcbiAgICBzd2l0Y2ggKHNhdmVBY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHNhdmUgPSB0aGlzLnNhdmVCZWZvcmVEZWxldGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZUZpbHRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzb3J0JzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZVNvcnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2F2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvclxuICAgIGxldCBjb25maXJtZWQgPSB0cnVlO1xuXG4gICAgaWYgKHNhdmUpIHtcbiAgICAgIGlmICh0aGlzLm9uQmVmb3JlU2F2ZS5vYnNlcnZlZCkge1xuICAgICAgICAvLyBBc2sgY29uZmlybWF0aW9uXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlU2F2ZSwgJ2JlZm9yZVNhdmUnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgYWN0aW9uOiBzYXZlQWN0aW9uLCB2YWxpZDogdGhpcy52YWxpZCB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbmZpcm1lZCA9IHJlcy5jb25maXJtZWQ7XG4gICAgICAgICAgc2F2ZSA9IHJlcy5zYXZlO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyID09PSAnQ0FOQ0VMTEVEJykgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBkZWxldGUgcm93cycsIGVycik7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgaWYgKHNhdmUpIHtcbiAgICAgICAgLy8gVXNlciBjb25maXJtZWQgc2F2ZVxuICAgICAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZSgpO1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7IC8vIFJlc3RvcmUgZGlydHkgZmxhZ1xuICAgICAgICByZXR1cm4gc2F2ZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gTm8gc2F2ZSBidXQgY29udGludWUgYWN0aW9uXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbCB0aGUgYWN0aW9uXG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIHJvdyBkZXRhaWwgdmlldy4gQnkgZGVmYXVsdCwgd2lsbCB0byBvcGVuIHJvdyBkZXRhaWwgcGFnZS5cbiAgICogQ2FuIGJlIG92ZXJyaWRlIGJ5IHN1YmNsYXNzZXMsIEJVVCBwcmVmZXIgdG8gc3Vic2NyaWJlIG9uIG9uT3BlblJvd1xuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb3BlblJvdyhpZDogSUQsIHJvdzogVGFibGVFbGVtZW50PFQ+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuYWxsb3dSb3dEZXRhaWwpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnICYmIHRoaXMuZGlydHkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIE9wZW5pbmcgcm93IGRldGFpbHMsIGJ1dCB0YWJsZSBoYXMgdW5zYXZlZCBjaGFuZ2VzIScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vbk9wZW5Sb3cub2JzZXJ2ZWQpIHtcbiAgICAgICAgdGhpcy5vbk9wZW5Sb3cuZW1pdChyb3cpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gTm8gSUQgZGVmaW5lZDogdW5hYmxlIHRvIG9wZW4gZGV0YWlsc1xuICAgICAgaWYgKGlzTmlsKGlkKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gT3BlbmluZyByb3cgZGV0YWlscywgYnV0IGRhdGEgaGFzIG5vIGlkIScpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKGAke3RoaXMucm91dGVyLnVybH0vJHtpZC50b1N0cmluZygpfWAsIHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IHt9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvcGVuTmV3Um93RGV0YWlsKGV2ZW50PzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmFsbG93Um93RGV0YWlsKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5vbk5ld1Jvdy5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5vbk5ld1Jvdy5lbWl0KGV2ZW50KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKGAke3RoaXMucm91dGVyLnVybH0vbmV3YCk7XG4gIH1cblxuICAvLyBjYW4gYmUgb3ZlcnJpZGRlbiB0byBhZGQgbW9yZSByZXF1aXJlZCBjb2x1bW5zXG4gIHByb3RlY3RlZCBnZXRSZXF1aXJlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIERFRkFVTFRfUkVRVUlSRURfQ09MVU1OUztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRVc2VyQ29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFnZVNldHRpbmdzKFNFVFRJTkdTX0RJU1BMQVlfQ09MVU1OUyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U29ydGVkQ29sdW1uKCk6IE1hdFNvcnRhYmxlIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYWdlU2V0dGluZ3MoU0VUVElOR1NfU09SVEVEX0NPTFVNTik7XG4gICAgY29uc3QgcGFydHMgPSBkYXRhICYmIGRhdGEuc3BsaXQoJzonKTtcbiAgICBpZiAocGFydHMgJiYgcGFydHMubGVuZ3RoID09PSAyICYmIHRoaXMuY29sdW1ucy5pbmNsdWRlcyhwYXJ0c1swXSkpIHtcbiAgICAgIHJldHVybiB7IGlkOiBwYXJ0c1swXSwgc3RhcnQ6IHBhcnRzWzFdID09PSAnZGVzYycgPyAnZGVzYycgOiAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWZhdWx0U29ydEJ5KSB7XG4gICAgICByZXR1cm4geyBpZDogdGhpcy5kZWZhdWx0U29ydEJ5LCBzdGFydDogdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiB8fCAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZSB9O1xuICAgIH1cbiAgICByZXR1cm4geyBpZDogJ2lkJywgc3RhcnQ6ICdhc2MnLCBkaXNhYmxlQ2xlYXI6IGZhbHNlIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuZ2V0UGFnZVNldHRpbmdzPG51bWJlcj4oU0VUVElOR1NfUEFHRV9TSVpFKTtcbiAgICByZXR1cm4gcGFnZVNpemUgfHwgdGhpcy5kZWZhdWx0UGFnZVNpemU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheUNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIGxldCB1c2VyQ29sdW1ucyA9IHRoaXMuZ2V0VXNlckNvbHVtbnMoKTtcblxuICAgIC8vIE5vIHVzZXIgb3ZlcnJpZGVcbiAgICBpZiAoIXVzZXJDb2x1bW5zKSB7XG4gICAgICAvLyBSZXR1cm4gZGVmYXVsdCwgd2l0aG91dCBjb2x1bW5zIHRvIGhpZGVcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+ICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgZml4ZWQgc3RhcnQgY29sdW1uc1xuICAgIGNvbnN0IGZpeGVkU3RhcnRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoYykgPT4gUkVTRVJWRURfU1RBUlRfQ09MVU1OUy5pbmNsdWRlcyhjKSk7XG5cbiAgICAvLyBSZW1vdmUgZW5kIGNvbHVtbnNcbiAgICBjb25zdCBmaXhlZEVuZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjKSA9PiBSRVNFUlZFRF9FTkRfQ09MVU1OUy5pbmNsdWRlcyhjKSk7XG5cbiAgICAvLyBSZW1vdmUgZml4ZWQgY29sdW1ucyBmcm9tIHVzZXIgY29sdW1uc1xuICAgIHVzZXJDb2x1bW5zID0gdXNlckNvbHVtbnMuZmlsdGVyKChjKSA9PiAhZml4ZWRTdGFydENvbHVtbnMuaW5jbHVkZXMoYykgJiYgIWZpeGVkRW5kQ29sdW1ucy5pbmNsdWRlcyhjKSAmJiB0aGlzLmNvbHVtbnMuaW5jbHVkZXMoYykpO1xuXG4gICAgLy8gQWRkIHJlcXVpcmVkIGNvbHVtbnMgaWYgbWlzc2luZ1xuICAgIHVzZXJDb2x1bW5zLnB1c2goXG4gICAgICAuLi50aGlzLmdldFJlcXVpcmVkQ29sdW1ucygpLmZpbHRlcigoYykgPT4gIWZpeGVkU3RhcnRDb2x1bW5zLmluY2x1ZGVzKGMpICYmICFmaXhlZEVuZENvbHVtbnMuaW5jbHVkZXMoYykgJiYgIXVzZXJDb2x1bW5zLmluY2x1ZGVzKGMpKVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgZml4ZWRTdGFydENvbHVtbnNcbiAgICAgICAgLmNvbmNhdCh1c2VyQ29sdW1ucylcbiAgICAgICAgLmNvbmNhdChmaXhlZEVuZENvbHVtbnMpXG4gICAgICAgIC8vIFJlbW92ZSBjb2x1bW5zIHRvIGhpZGVcbiAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29tcHV0ZSBkaXNwbGF5IGNvbHVtbnNcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5nZXREaXNwbGF5Q29sdW1ucygpO1xuICAgIGlmICghdGhpcy5sb2FkaW5nKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YjogU3Vic2NyaXB0aW9uKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVucmVnaXN0ZXJTdWJzY3JpcHRpb24oc3ViOiBTdWJzY3JpcHRpb24pIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHN1Yik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJBdXRvY29tcGxldGVGaWVsZDxFID0gYW55LCBFRiA9IGFueT4oXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IE1hdEF1dG9jb21wbGV0ZUZpZWxkQWRkT3B0aW9uczxFLCBFRj5cbiAgKTogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc8RSwgRUY+IHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLmFkZChmaWVsZE5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEkxOG5Db2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiAodGhpcy5pMThuQ29sdW1uUHJlZml4IHx8ICcnKSArIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUoY29sdW1uTmFtZSkudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZW5lcmF0ZVRhYmxlSWQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubG9jYXRpb25cbiAgICAgICAgLnBhdGgodHJ1ZSlcbiAgICAgICAgLnJlcGxhY2UoL1s/XS4qJC9nLCAnJylcbiAgICAgICAgLnJlcGxhY2UoL1xcL1tcXGRdKy9nLCAnX2lkJykgK1xuICAgICAgJ18nICtcbiAgICAgIC8vIEdldCBhIGNvbXBvbmVudCB1bmlxdWUgbmFtZSAtIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82MDExNDY4Mi9ob3ctdG8tYWNjZXNzLWNvbXBvbmVudHMtdW5pcXVlLWVuY2Fwc3VsYXRpb24taWQtaW4tYW5ndWxhci05XG4gICAgICAodGhpcy5jb25zdHJ1Y3RvclsnybVjbXAnXT8uaWQgfHwgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKVxuICAgICk7XG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhcIlt0YWJsZV0gaWQgPSBcIiArIGlkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRSb3dUb1RhYmxlKFxuICAgIGluc2VydEF0PzogbnVtYmVyLFxuICAgIG9wdHM/OiB7IGZvY3VzQ29sdW1uPzogc3RyaW5nOyBlZGl0aW5nPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9XG4gICk6IFByb21pc2U8VGFibGVFbGVtZW50PFQ+IHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gVHJ5IHRvIGZpbmlzaCBlZGl0ZWQgcm93IGZpcnN0XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBDYW5ub3QgYWRkIG5ldyByb3csIGJlY2F1c2UgdGhlIHByZXZpb3VzIGVkaXRlZCByb3cgY2Fubm90IGJlIGNvbmZpcm1lZCcpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlZGl0aW5nID0gdGhpcy5pbmxpbmVFZGl0aW9uICYmICghb3B0cyB8fCBvcHRzLmVkaXRpbmcgIT09IGZhbHNlKTsgLy8gdHJ1ZSBieSBkZWZhdWx0LCBpZiBpbmxpbmVFZGl0aW9uXG5cbiAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLl9kYXRhU291cmNlLmNyZWF0ZU5ldyhpbnNlcnRBdCwgeyBlZGl0aW5nIH0pO1xuICAgIGlmICghcm93KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAvLyBVcGRhdGUgZm9jdXNlZCBjb2x1bW5cbiAgICAgIHRoaXMuZm9jdXNGaXJzdENvbHVtbiA9IHRydWU7XG4gICAgICB0aGlzLmZvY3VzQ29sdW1uID0gb3B0cz8uZm9jdXNDb2x1bW4gfHwgdGhpcy5maXJzdFVzZXJDb2x1bW47XG5cbiAgICAgIC8vIEVtaXQgc3RhcnQgZWRpdGluZyBldmVudFxuICAgICAgdGhpcy5lZGl0ZWRSb3cgPSByb3c7XG4gICAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LmVtaXQocm93KTtcbiAgICB9XG5cbiAgICB0aGlzLnRvdGFsUm93Q291bnQrKztcbiAgICB0aGlzLnZpc2libGVSb3dDb3VudCsrO1xuXG4gICAgdGhpcy5tYXJrQXNEaXJ0eSh7IGVtaXRFdmVudDogZmFsc2UgLyptYXJrRm9yQ2hlY2soKSBpcyBjYWxsZWQganVzdCBhZnRlciovIH0pO1xuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyQ2VsbFZhbHVlQ2hhbmdlcyhuYW1lOiBzdHJpbmcsIGZvcm1QYXRoPzogc3RyaW5nLCBlbWl0SW5pdGlhbFZhbHVlPzogYm9vbGVhbik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgZm9ybVBhdGggPSBmb3JtUGF0aCB8fCBuYW1lO1xuICAgIGVtaXRJbml0aWFsVmFsdWUgPSBlbWl0SW5pdGlhbFZhbHVlIHx8IGZhbHNlO1xuICAgIGxldCBkZWYgPSB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXTtcbiAgICBpZiAoZGVmICYmIChkZWYuZm9ybVBhdGggIT09IGZvcm1QYXRoIHx8IGRlZi5lbWl0SW5pdGlhbFZhbHVlICE9PSBlbWl0SW5pdGlhbFZhbHVlKSkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJBbHJlYWR5IHJlZ2lzdGVyIGEgY2VsbCB2YWx1ZSBjaGFuZ2UgZm9yIHRoaXMgbmFtZSwgd2l0aCBkaWZmZXJlbnQgJ2Zvcm1QYXRoJyBvciAnZW1pdEluaXRpYWxWYWx1ZScuIFBsZWFzZSB1c2Ugc2FtZSBhcmd1bWVudHMuXCIpO1xuICAgIH1cblxuICAgIC8vIE5vdCBleGlzdHM6IHJlZ2lzdGVyIG5ldyBkZWZpbml0aW9uXG4gICAgaWYgKCFkZWYpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIE5ldyBsaXN0ZW5lciB7JHtuYW1lfX0gZm9yIHZhbHVlIGNoYW5nZXMgb24gcGF0aCAke2Zvcm1QYXRofWApO1xuICAgICAgZGVmID0ge1xuICAgICAgICBzdWJqZWN0OiBuZXcgU3ViamVjdDxhbnk+KCksXG4gICAgICAgIHN1YnNjcmlwdGlvbjogbnVsbCxcbiAgICAgICAgZm9ybVBhdGgsXG4gICAgICAgIGVtaXRJbml0aWFsVmFsdWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnNbbmFtZV0gPSBkZWY7XG5cbiAgICAgIC8vIFN0YXJ0IHRoZSBsaXN0ZW5lciwgd2hlbiBlZGl0aW5nIHN0YXJ0c1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnN1YnNjcmliZSgocm93KSA9PiB0aGlzLnN0YXJ0Q2VsbFZhbHVlQ2hhbmdlcyhuYW1lLCByb3cpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZi5zdWJqZWN0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFNob3dDb2x1bW4oY29sdW1uTmFtZTogc3RyaW5nLCBzaG93OiBib29sZWFuLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbk5hbWUpICE9PSBzaG93KSB7XG4gICAgICBpZiAoIXNob3cpIHtcbiAgICAgICAgdGhpcy5leGNsdWRlc0NvbHVtbnMucHVzaChjb2x1bW5OYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5leGNsdWRlc0NvbHVtbnMuZmluZEluZGV4KCh2YWx1ZSkgPT4gdmFsdWUgPT09IGNvbHVtbk5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkgdGhpcy5leGNsdWRlc0NvbHVtbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVjb21wdXRlIGRpc3BsYXkgY29sdW1uc1xuICAgICAgaWYgKHRoaXMuZGlzcGxheWVkQ29sdW1ucyAmJiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2hvd0NvbHVtbihjb2x1bW5OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbk5hbWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0c1dpdGhVcHBlckNhc2UoaW5wdXQ6IHN0cmluZywgc2VhcmNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaW5wdXQgJiYgaW5wdXQudG9VcHBlckNhc2UoKS5zdGFydHNXaXRoKHNlYXJjaCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIC8vIFNob3VsZCBiZSBvdmVycmlkZSBieSBzdWJjbGFzc2VzLCBkZXBlbmRpbmcgb24gQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhc2tEZWxldGVDb25maXJtYXRpb24oZXZlbnQ/OiBFdmVudCwgcm93cz86IFRhYmxlRWxlbWVudDxUPltdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMudW5kb2FibGVEZWxldGlvbikge1xuICAgICAgLy8gU3BlY2lhbCBtZXNzYWdlLCBmb3IgdW5kb2FibGUgZGVsZXRpb25cbiAgICAgIHJldHVybiBBbGVydHMuYXNrQ29uZmlybWF0aW9uKHJvd3M/Lmxlbmd0aCA9PT0gMSA/ICdDT05GSVJNLkRFTEVURV9ST1cnIDogJ0NPTkZJUk0uREVMRVRFX1JPV1MnLCB0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGV2ZW50KTtcbiAgICB9XG4gICAgLy8gSW1tZWRpYXRlIGRlbGV0aW9uIGFjdGlvblxuICAgIHJldHVybiBBbGVydHMuYXNrQWN0aW9uQ29uZmlybWF0aW9uKHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSwgdHJ1ZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFza0NhbmNlbENvbmZpcm1hdGlvbihldmVudD86IEV2ZW50LCByb3dzPzogVGFibGVFbGVtZW50PFQ+W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gQWxlcnRzLmFza0NvbmZpcm1hdGlvbihyb3dzPy5sZW5ndGggPT09IDEgPyAnQ09ORklSTS5DQU5DRUxfUk9XJyA6ICdDT05GSVJNLkNBTkNFTF9ST1dTJywgdGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYXNrUmVzdG9yZUNvbmZpcm1hdGlvbihldmVudD86IEV2ZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIEFsZXJ0cy5hc2tBY3Rpb25Db25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCBmYWxzZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLnRvYXN0Q29udHJvbGxlcikgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB0b2FzdENvbnRyb2xsZXIgaW4gY29tcG9uZW50J3MgY29uc3RydWN0b3JcIik7XG4gICAgcmV0dXJuIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRFcnJvcihvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLnNldEVycm9yKHVuZGVmaW5lZCwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Um93RXJyb3Iocm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogRm9ybUVycm9yVHJhbnNsYXRvck9wdGlvbnMpOiBzdHJpbmcge1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhdGhpcy5mb3JtRXJyb3JBZGFwdGVyKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHRoaXMuZm9ybUVycm9yQWRhcHRlci50cmFuc2xhdGVGb3JtRXJyb3JzKHJvdy52YWxpZGF0b3IsIHtcbiAgICAgIC4uLnRoaXMuZXJyb3JUcmFuc2xhdG9yT3B0aW9ucyxcbiAgICAgIC4uLm9wdHMsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RXJyb3IodmFsdWU6IHN0cmluZywgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuZXJyb3JTdWJqZWN0LnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgZGF0YSBlcXVhbGl0eSAoZGVmYXVsdCBieSBpZCwgdXNpbmcgRW50aXR5VXRpbHMuZXF1YWxzKCkpXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIHRvIGFkZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gY29tcGFyZVxuICAgKlxuICAgKiBAcGFyYW0gZDFcbiAgICogQHBhcmFtIGQyXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBlcXVhbHMoZDE6IFQsIGQyOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEVudGl0eVV0aWxzLmVxdWFscyhkMSwgZDIsICdpZCcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtSb3dBc0RpcnR5KHJvdz86IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RVZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKHJvdykgcm93LnZhbGlkYXRvcj8ubWFya0FzRGlydHkob3B0cyk7XG4gICAgdGhpcy5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYWdlU2V0dGluZ3M8VCA9IGFueT4ocHJvcGVydHlOYW1lPzogc3RyaW5nKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuZ2V0UGFnZVNldHRpbmdzKHRoaXMuc2V0dGluZ3NJZCwgcHJvcGVydHlOYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlUGFnZVNldHRpbmdzKHZhbHVlOiBhbnksIHByb3BlcnR5TmFtZT86IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3Muc2F2ZVBhZ2VTZXR0aW5nKHRoaXMuc2V0dGluZ3NJZCwgdmFsdWUsIHByb3BlcnR5TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgcGVybWFuZW50IHNlbGVjdGlvbiBtb2RlbFxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5pdFBlcm1hbmVudFNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24pIHRocm93IG5ldyBFcnJvcignaW5pdFBlcm1hbmVudFNlbGVjdGlvbigpIGFscmVhZHkgY2FsbGVkIScpO1xuXG4gICAgdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8VD4odHJ1ZSwgW10pO1xuXG4gICAgLy8gTGlzdGVuIHNvcnQgY2hhbmdlXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMub25Tb3J0LnN1YnNjcmliZSgoKSA9PiAodGhpcy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkID0gdHJ1ZSkpIC8vIHByZXZlbnQgc2VsZWN0aW9uIGNoYW5nZSBvbiBzb3J0XG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBkYXRhc291cmNlIHVwZGF0ZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uucm93c1N1YmplY3RcbiAgICAgICAgLy8gcmVzdG9yZSB0aGUgJ2FkZGluZycgc2VsZWN0aW9uIChmb3IgZXhhbXBsZSBhZnRlciBhIHBhZ2Ugb3Igc29ydCBjaGFuZ2UpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJvd3MpID0+IHtcbiAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwZXJtYW5lbnRTZWxlY3Rpb25JZHMgPSAodGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2VsZWN0ZWQgfHwgW10pLm1hcChFbnRpdHlVdGlscy5nZXRJZCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oLi4ucm93cy5maWx0ZXIoKHJvdykgPT4gcGVybWFuZW50U2VsZWN0aW9uSWRzLmluY2x1ZGVzKEFwcFRhYmxlVXRpbHMuZ2V0RW50aXR5SWQocm93KSkpKTtcbiAgICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVybWFuZW50U2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5zZWxlY3Rpb24uY2hhbmdlZC5waXBlKGZpbHRlcigoKSA9PiAhdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkKSkuc3Vic2NyaWJlKChzZWxlY3Rpb25DaGFuZ2UpID0+IHtcbiAgICAgICAgLy8gYWRkIHRvIHNlbGVjdGlvblxuICAgICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlLmFkZGVkLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucGVybWFuZW50U2VsZWN0aW9uLnNldFNlbGVjdGlvbihcbiAgICAgICAgICAgIC4uLih0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZWxlY3RlZCB8fCBbXSlcbiAgICAgICAgICAgICAgLy8gQWRkIG5ldyBlbGVtZW50c1xuICAgICAgICAgICAgICAuY29uY2F0KC4uLkFwcFRhYmxlVXRpbHMuZ2V0RW50aXRpZXMoc2VsZWN0aW9uQ2hhbmdlLmFkZGVkKS5maWx0ZXIoRW50aXR5VXRpbHMuaGFzSWQpKVxuICAgICAgICAgICAgICAvLyBBdm9pZCBkdXBsaWNhdGVkIGVudGl0aWVzIChNYW50aXMgIzU1MzUxKVxuICAgICAgICAgICAgICAuZmlsdGVyKEVudGl0eVV0aWxzLmFycmF5RGlzdGluY3RGaWx0ZXJGbilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIHNlbGVjdGlvblxuICAgICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlLnJlbW92ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgcmVtb3ZlZElkcyA9IEFwcFRhYmxlVXRpbHMuZ2V0RW50aXR5SWRzKHNlbGVjdGlvbkNoYW5nZS5yZW1vdmVkKTtcbiAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oXG4gICAgICAgICAgICAuLi4odGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2VsZWN0ZWQgfHwgW10pLmZpbHRlcigoZW50aXR5KSA9PiBFbnRpdHlVdGlscy5oYXNJZChlbnRpdHkpICYmICFyZW1vdmVkSWRzLmluY2x1ZGVzKGVudGl0eS5pZCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2QgLS0gKi9cblxuICBwcml2YXRlIGFzeW5jIGxpc3RlblNvcnRBbmRQYWdpbmF0aW9uRXZlbnRzKCkge1xuICAgIGlmICghdGhpcy50YWJsZSkge1xuICAgICAgLy8gREVCVUcgb25seSAtLSBhbGVydCB1c2VyIHRoYXQgdGFibGUgbm90IGZvdW5kIGluIHRlbXBsYXRlXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAhdGhpcy50YWJsZSAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbdGFibGVdIE1pc3NpbmcgPG1hdC10YWJsZT4gaW4gdGhlIEhUTUwgdGVtcGxhdGUgKGFmdGVyIHdhaXRpbmcgNTAwbXMpISBDb21wb25lbnQ6ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApLFxuICAgICAgICAgIDUwMFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIHN1cmUgdG8gd2FpdCB0aGUgdGFibGVcbiAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4gISF0aGlzLnRhYmxlLCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QsIHN0b3BFcnJvcjogZmFsc2UgLyphdm9pZCBlcnJvciB3aGVuIGRlc3RvcnlpbmcgdGhlIHRhYmxlKi8gfSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIG1lcmdlKFxuICAgICAgICAvLyBMaXN0ZW4gc29ydCBldmVudHNcbiAgICAgICAgKHRoaXMuc29ydCAmJlxuICAgICAgICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuc29ydC5kaXNhYmxlZCksXG4gICAgICAgICAgICBtZXJnZU1hcChhc3luYyAoKSA9PiB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ3NvcnQnKSksXG4gICAgICAgICAgICBmaWx0ZXIoKHJlcykgPT4gcmVzID09PSB0cnVlKSxcbiAgICAgICAgICAgIC8vIFNhdmUgc29ydCBpbiBzZXR0aW5nc1xuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBbdGhpcy5zb3J0LmFjdGl2ZSwgdGhpcy5zb3J0LmRpcmVjdGlvbiB8fCAnYXNjJ10uam9pbignOicpO1xuICAgICAgICAgICAgICB0aGlzLnNhdmVQYWdlU2V0dGluZ3ModmFsdWUsIFNFVFRJTkdTX1NPUlRFRF9DT0xVTU4pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApKSB8fFxuICAgICAgICAgIEVNUFRZLFxuXG4gICAgICAgIC8vIExpc3RlbiBwYWdpbmF0b3IgZXZlbnRzXG4gICAgICAgICh0aGlzLnBhZ2luYXRvciAmJlxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2UucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKChfKSA9PiB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ3NvcnQnKSksXG4gICAgICAgICAgICBmaWx0ZXIoKHNhdmVkKSA9PiBzYXZlZCA9PT0gdHJ1ZSksXG4gICAgICAgICAgICAvLyBTYXZlIHBhZ2Ugc2l6ZSBpbiBzZXR0aW5nc1xuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2F2ZVBhZ2VTZXR0aW5ncyh0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSwgU0VUVElOR1NfUEFHRV9TSVpFKSlcbiAgICAgICAgICApKSB8fFxuICAgICAgICAgIEVNUFRZXG4gICAgICApXG4gICAgICAgIC8vIFJlZnJlc2ggb24gYW55IHNvcnQgb3IgcGFnaW5hdG9yIGV2ZW50c1xuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMub25Tb3J0LmVtaXQodmFsdWUpO1xuICAgICAgICAgIHRoaXMub25SZWZyZXNoLmVtaXQodmFsdWUpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBJZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBzb3J0IG9yZGVyLCByZXNldCBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlLlxuICAgIGlmICh0aGlzLnNvcnQgJiYgdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5zb3J0LnNvcnRDaGFuZ2UucGlwZShmaWx0ZXIoKCkgPT4gIXRoaXMuc29ydC5kaXNhYmxlZCkpLnN1YnNjcmliZSgoKSA9PiAodGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMCkpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVkaXRSb3dCeUlkKGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgaWQ6IG51bWJlciwgb3B0cz86IHsgZm9jdXNDb2x1bW4/OiBzdHJpbmcgfSkge1xuICAgIGlmIChpZCA8IDApIHJldHVybjtcbiAgICBpZiAoaWQgPj0gdGhpcy52aXNpYmxlUm93Q291bnQpIHtcbiAgICAgIHRoaXMuYWRkUm93KGV2ZW50LCB1bmRlZmluZWQsIHsgLi4ub3B0cywgZWRpdGluZzogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5kYXRhU291cmNlLmdldFJvdyhpZCk7XG4gICAgICB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywgb3B0cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2FkaW5nKHZhbHVlOiBib29sZWFuLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMubG9hZGluZ1N1YmplY3QuY2xvc2VkICYmIHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodmFsdWUpO1xuXG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVOZXdSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIC8vIE1ha2Ugc3VyZSByb3cgd2lsbCBiZSBjYW5jZWxsZWQsIGFuZCBOT1QgZGVsZXRlZFxuICAgIGlmIChyb3cuaWQgIT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ1JvdyBtdXN0IGhhdmUgaWQgPSAtMScpO1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7IC8vIHVuc2VsZWN0IHJvd1xuICAgIHRoaXMuX2RhdGFTb3VyY2UuY2FuY2VsT3JEZWxldGUocm93KTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIHRoaXMub25DYW5jZWxPckRlbGV0ZVJvdy5uZXh0KHJvdyk7XG4gICAgdGhpcy50b3RhbFJvd0NvdW50LS07XG4gICAgdGhpcy52aXNpYmxlUm93Q291bnQtLTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlRXhpc3RpbmdSb3coZXZlbnQ6IEV2ZW50IHwgbnVsbCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9KSB7XG4gICAgLy8gTWFrZSBzdXJlIHJvdyB3aWxsIGJlIGNhbmNlbGxlZCwgYW5kIE5PVCBkZWxldGVkXG4gICAgaWYgKHJvdy5pZCA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignUm93IG11c3QgaGF2ZSBhbiBpZCcpO1xuXG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gMDsgLy8gU0tpcFxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy5kZWxldGVSb3cobnVsbCwgcm93LCBvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuOyBrZWVwRWRpdGluZz86IGJvb2xlYW4gfSkge1xuICAgIC8vIE1ha2Ugc3VyZSByb3cgd2lsbCBiZSBjYW5jZWxsZWQsIGFuZCBOT1QgZGVsZXRlZFxuICAgIGlmIChyb3cuaWQgPT09IC0xIHx8ICFyb3cuZWRpdGluZykgdGhyb3cgbmV3IEVycm9yKCdSb3cgY2Fubm90IGJlIGNhbmNlbGluZywgYnV0IG9ubHkgZGVsZXRpbmcnKTtcblxuICAgIGNvbnN0IGNvbmZpcm1lZCA9ICFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlO1xuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uLCBpZiBjYW5jZWxcbiAgICBpZiAoIWNvbmZpcm1lZCAmJiByb3cuZGlydHkgJiYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCB8fCB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy5vYnNlcnZlZCkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5jYW5DYW5jZWxSb3dzKFtyb3ddLCBvcHRzKS50aGVuKChjb25maXJtKSA9PiB7XG4gICAgICAgIC8vIElmIGNvbmZpcm1lZCwgbG9vcFxuICAgICAgICBpZiAoY29uZmlybSkgdGhpcy5jYW5jZWxFeGlzdGluZ1JvdyhldmVudCwgcm93LCB7IGludGVyYWN0aXZlOiBmYWxzZSB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGtlZXBFZGl0aW5nID0gcm93LmVkaXRpbmcgJiYgKCFvcHRzIHx8IG9wdHMua2VlcEVkaXRpbmcgIT09IGZhbHNlKTtcbiAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDsgLy8gdW5zZWxlY3Qgcm93XG4gICAgdGhpcy5fZGF0YVNvdXJjZS5jYW5jZWxPckRlbGV0ZShyb3cpO1xuICAgIHRoaXMub25DYW5jZWxPckRlbGV0ZVJvdy5uZXh0KHJvdyk7XG5cbiAgICAvLyBNYXJrIHJvdyBhcyBwcmlzdGluZVxuICAgIHRoaXMuY2hlY2tJZlJvd1ByaXN0aW5lKHJvdyk7XG5cbiAgICAvLyBSZXN0b3JlIGVkaXRpbmcgc3RhdGVcbiAgICBpZiAoa2VlcEVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZWRpdFJvdyh1bmRlZmluZWQsIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0lmUm93UHJpc3RpbmUocm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IG9ubHlTZWxmPzogYm9vbGVhbiB9KSB7XG4gICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmVcbiAgICBjb25zdCBtYXJrUm93QXNQcmlzdGluZSA9IHRoaXMuZGF0YVNvdXJjZT8uY29uZmlnLnJlc3RvcmVPcmlnaW5hbERhdGFPbkNhbmNlbCA9PT0gdHJ1ZTtcbiAgICBpZiAobWFya1Jvd0FzUHJpc3RpbmUpIHtcbiAgICAgIHJvdy52YWxpZGF0b3I/Lm1hcmtBc1ByaXN0aW5lKCk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRhYmxlIGlzIG5vdyBwcmlzdGluZVxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMub25seVNlbGYgIT09IHRydWUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0lmUHJpc3RpbmUob3B0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0lmUHJpc3RpbmUob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmRpcnR5KSByZXR1cm47IC8vIEFscmVhZHkgcHJpc3RpbmVcblxuICAgIGNvbnN0IHJvd3MgPSB0aGlzLl9kYXRhU291cmNlLmdldFJvd3MoKTtcbiAgICBjb25zdCBwcmlzdGluZSA9IChyb3dzIHx8IFtdKS5maW5kSW5kZXgoKHJvdykgPT4gcm93LmRpcnR5KSA9PT0gLTE7XG4gICAgaWYgKHByaXN0aW5lKSB0aGlzLm1hcmtBc1ByaXN0aW5lKG9wdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUZpbHRlcihmaWx0ZXI6IEYsIG9wdHM6IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQXBwbHlpbmcgZmlsdGVyJywgZmlsdGVyKTtcbiAgICB0aGlzLl9maWx0ZXIgPSBmaWx0ZXI7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5lbWl0RXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPiAwKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5EYXRhc291cmNlTG9hZGluZyhkYXRhU291cmNlOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4pIHtcbiAgICBpZiAoIWRhdGFTb3VyY2UpIHRocm93IG5ldyBFcnJvcignW3RhYmxlXSBkYXRhU291cmNlIG5vdCBzZXQgIScpO1xuXG4gICAgLy8gQ2xlYW5pbmcgcHJldmlvdXMgc3Vic2NyaXB0aW9uIG9uIGRhdGFzb3VyY2VcbiAgICBpZiAoaXNOb3ROaWwodGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBNYW55IGNhbGwgdG8gbGlzdGVuRGF0YXNvdXJjZSgpOiBDbGVhbmluZyBwcmV2aW91cyBzdWJzY3JpcHRpb25zLi4uJyk7XG4gICAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy51bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBQcm9wYWdlIGxvYWRpbmcgdG8gdGFibGVcbiAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbiA9IHRoaXMuX2RhdGFTb3VyY2UubG9hZGluZ1N1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuXG4gICAgICAgIC8vIElmIGNoYW5nZWQgdG8gVHJ1ZTogcHJvcGFnYXRlIGFzIHNvb24gYXMgcG9zc2libGVcbiAgICAgICAgdGFwKChsb2FkaW5nKSA9PiBsb2FkaW5nICYmIHRoaXMuc2V0TG9hZGluZyh0cnVlKSksXG5cbiAgICAgICAgLy8gSWYgY2hhbmdlZCB0byBGYWxzZTogd2FpdCAyNTBtcyBiZWZvcmUgcHJvcGFnYXRlICh0byBtYWtlIHN1cmUgdGhlIHNwaW5uZXIgaGFzIGJlZW4gZGlzcGxheWVkKVxuICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgICAgdGFwKChsb2FkaW5nKSA9PiAhbG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcoZmFsc2UpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydENlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmICghZGVmKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gTGlzdGVuZXIgd2l0aCBuYW1lIHsnICsgbmFtZSArICd9IG5vdCByZWdpc3RlcmVkISBQbGVhc2UgY2FsbCByZWdpc3RlckNlbGxWYWx1ZUNoYW5nZXMoKSBiZWZvcmU7Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFN0b3AgcHJldmlvdXMgc3Vic2NyaXB0aW9uXG4gICAgaWYgKGRlZi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBTdGFydCB2YWx1ZXMgY2hhbmdlcyBvbiByb3cgcGF0aCB7JHtkZWYuZm9ybVBhdGh9fWApO1xuICAgIH1cblxuICAgIC8vIExpc3RlbiB2YWx1ZSBjaGFuZ2VzLCBhbmQgcmVkaXJlY3QgdG8gZXZlbnQgZW1pdHRlclxuICAgIGNvbnN0IGNvbnRyb2wgPSByb3cudmFsaWRhdG9yICYmIEFwcEZvcm1VdGlscy5nZXRDb250cm9sRnJvbVBhdGgocm93LnZhbGlkYXRvciwgZGVmLmZvcm1QYXRoKTtcbiAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW3RhYmxlXSBDb3VsZCBub3QgbGlzdGVuIGNlbGwgY2hhbmdlczogbm8gdmFsaWRhdG9yIG9yIGludmFsaWQgZm9ybSBwYXRoIHske2RlZi5mb3JtUGF0aH19YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBjb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBkb24ndCBlbWl0IGlmIGNvbnRyb2wgaXMgZGlzYWJsZWRcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gY29udHJvbC5lbmFibGVkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiBkZWYuc3ViamVjdC5uZXh0KHZhbHVlKSk7XG5cbiAgICAgIC8vIEVtaXQgdGhlIGFjdHVhbCB2YWx1ZVxuICAgICAgaWYgKGRlZi5lbWl0SW5pdGlhbFZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgICBkZWYuc3ViamVjdC5uZXh0KGNvbnRyb2wudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RvcENlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCBkZXN0cm95PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmICghZGVmKSByZXR1cm47XG4gICAgaWYgKGRlZi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFN0b3AgdmFsdWUgY2hhbmdlcyBvbiByb3cgcGF0aCB7JyArIGRlZi5mb3JtUGF0aCArICd9Jyk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRlc3Ryb3kgJiYgZGVmLnN1YmplY3QpIHtcbiAgICAgIGRlZi5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICBkZWYuc3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
|