igniteui-angular 13.0.4 → 13.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/combo/combo.common.mjs +2 -2
- package/esm2020/lib/core/utils.mjs +13 -2
- package/esm2020/lib/data-operations/data-clone-strategy.mjs +7 -0
- package/esm2020/lib/data-operations/data-util.mjs +7 -6
- package/esm2020/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +33 -1
- package/esm2020/lib/grids/api.service.mjs +2 -2
- package/esm2020/lib/grids/common/crud.service.mjs +4 -3
- package/esm2020/lib/grids/common/grid.interface.mjs +1 -1
- package/esm2020/lib/grids/common/pipes.mjs +2 -2
- package/esm2020/lib/grids/grid-base.directive.mjs +27 -2
- package/esm2020/lib/grids/grid-public-row.mjs +16 -5
- package/esm2020/lib/grids/row.directive.mjs +2 -3
- package/esm2020/lib/grids/summaries/grid-summary.service.mjs +3 -2
- package/esm2020/lib/grids/tree-grid/tree-grid-selection.service.mjs +28 -27
- package/esm2020/lib/grids/tree-grid/tree-grid.grouping.pipe.mjs +8 -4
- package/esm2020/lib/grids/tree-grid/tree-grid.pipes.mjs +3 -3
- package/esm2020/lib/services/excel/excel-files.mjs +3 -3
- package/esm2020/lib/services/excel/worksheet-data.mjs +7 -3
- package/esm2020/lib/services/overlay/overlay.mjs +2 -1
- package/esm2020/lib/services/transaction/base-transaction.mjs +17 -4
- package/esm2020/lib/services/transaction/igx-hierarchical-transaction.mjs +3 -4
- package/esm2020/lib/services/transaction/igx-transaction.mjs +3 -3
- package/esm2020/lib/services/transaction/transaction-factory.service.mjs +1 -2
- package/esm2020/lib/services/transaction/transaction.mjs +1 -1
- package/esm2020/public_api.mjs +2 -1
- package/fesm2015/igniteui-angular.mjs +164 -56
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +164 -56
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/lib/core/utils.d.ts +7 -0
- package/lib/data-operations/data-clone-strategy.d.ts +6 -0
- package/lib/data-operations/data-util.d.ts +3 -2
- package/lib/directives/scroll-inertia/scroll_inertia.directive.d.ts +6 -0
- package/lib/grids/common/grid.interface.d.ts +3 -1
- package/lib/grids/grid-base.directive.d.ts +13 -1
- package/lib/grids/grid-public-row.d.ts +8 -0
- package/lib/grids/tree-grid/tree-grid-selection.service.d.ts +2 -1
- package/lib/services/excel/worksheet-data.d.ts +2 -0
- package/lib/services/transaction/base-transaction.d.ts +7 -0
- package/lib/services/transaction/transaction.d.ts +5 -0
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
|
@@ -232,11 +232,11 @@ export class IgxTreeGridTransactionPipe {
|
|
|
232
232
|
const childDataKey = this.grid.childDataKey;
|
|
233
233
|
if (foreignKey) {
|
|
234
234
|
const flatDataClone = cloneArray(collection);
|
|
235
|
-
return DataUtil.mergeTransactions(flatDataClone, aggregatedChanges, this.grid.primaryKey);
|
|
235
|
+
return DataUtil.mergeTransactions(flatDataClone, aggregatedChanges, this.grid.primaryKey, this.grid.dataCloneStrategy);
|
|
236
236
|
}
|
|
237
237
|
else if (childDataKey) {
|
|
238
238
|
const hierarchicalDataClone = cloneHierarchicalArray(collection, childDataKey);
|
|
239
|
-
return DataUtil.mergeHierarchicalTransactions(hierarchicalDataClone, aggregatedChanges, childDataKey, this.grid.primaryKey);
|
|
239
|
+
return DataUtil.mergeHierarchicalTransactions(hierarchicalDataClone, aggregatedChanges, childDataKey, this.grid.primaryKey, this.grid.dataCloneStrategy);
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
242
|
}
|
|
@@ -306,4 +306,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
|
|
|
306
306
|
type: Inject,
|
|
307
307
|
args: [IGX_GRID_BASE]
|
|
308
308
|
}] }]; } });
|
|
309
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLnBpcGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQucGlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFM0QsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUluRDs7R0FFRztBQUVILE1BQU0sT0FBTyw0QkFBNEI7SUFFckMsWUFBMkMsSUFBYztRQUFkLFNBQUksR0FBSixJQUFJLENBQVU7SUFBSSxDQUFDO0lBRXZELFNBQVMsQ0FBQyxVQUFpQixFQUFFLFVBQWtCLEVBQUUsVUFBa0IsRUFBRSxZQUFvQixFQUFFLENBQVM7UUFDdkcsSUFBSSxtQkFBbUIsR0FBc0IsRUFBRSxDQUFDO1FBQ2hELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDM0QsTUFBTSxRQUFRLEdBQVUsRUFBRSxDQUFDO1FBRTNCLElBQUksVUFBVSxJQUFJLFVBQVUsRUFBRTtZQUMxQixtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDcEg7YUFB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OlsiaW1wb3J0IHsgSW5qZWN0LCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCBjbG9uZUhpZXJhcmNoaWNhbEFycmF5IH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSVRyZWVHcmlkUmVjb3JkIH0gZnJvbSAnLi90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmlkUGFnaW5nTW9kZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneEFkZFJvdyB9IGZyb20gJy4uL2NvbW1vbi9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVNvcnRpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL3NvcnRpbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgSUdyaWRTb3J0aW5nU3RyYXRlZ3kgfSBmcm9tICcuLi9jb21tb24vc3RyYXRlZ3knO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQFBpcGUoeyBuYW1lOiAndHJlZUdyaWRIaWVyYXJjaGl6aW5nJyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkSGllcmFyY2hpemluZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHJpdmF0ZSBncmlkOiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IGFueVtdLCBwcmltYXJ5S2V5OiBzdHJpbmcsIGZvcmVpZ25LZXk6IHN0cmluZywgY2hpbGREYXRhS2V5OiBzdHJpbmcsIF86IG51bWJlcik6IElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgbGV0IGhpZXJhcmNoaWNhbFJlY29yZHM6IElUcmVlR3JpZFJlY29yZFtdID0gW107XG4gICAgICAgIGNvbnN0IHRyZWVHcmlkUmVjb3Jkc01hcCA9IG5ldyBNYXA8YW55LCBJVHJlZUdyaWRSZWNvcmQ+KCk7XG4gICAgICAgIGNvbnN0IGZsYXREYXRhOiBhbnlbXSA9IFtdO1xuXG4gICAgICAgIGlmIChwcmltYXJ5S2V5ICYmIGZvcmVpZ25LZXkpIHtcbiAgICAgICAgICAgIGhpZXJhcmNoaWNhbFJlY29yZHMgPSB0aGlzLmhpZXJhcmNoaXplRmxhdERhdGEoY29sbGVjdGlvbiwgcHJpbWFyeUtleSwgZm9yZWlnbktleSwgdHJlZUdyaWRSZWNvcmRzTWFwLCBmbGF0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hpbGREYXRhS2V5KSB7XG4gICAgICAgICAgICBoaWVyYXJjaGljYWxSZWNvcmRzID0gdGhpcy5oaWVyYXJjaGl6ZVJlY3Vyc2l2ZShjb2xsZWN0aW9uLCBwcmltYXJ5S2V5LCBjaGlsZERhdGFLZXksIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBmbGF0RGF0YSwgMCwgdHJlZUdyaWRSZWNvcmRzTWFwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5mbGF0RGF0YSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCA/XG4gICAgICAgICAgICBmbGF0RGF0YS5maWx0ZXIocmVjID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0U3RhdGUodGhpcy5nZXRSb3dJRChwcmltYXJ5S2V5LCByZWMpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXN0YXRlIHx8IHN0YXRlLnR5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5BREQ7XG4gICAgICAgICAgICB9KSA6IGZsYXREYXRhO1xuICAgICAgICB0aGlzLmdyaWQucmVjb3JkcyA9IHRyZWVHcmlkUmVjb3Jkc01hcDtcbiAgICAgICAgdGhpcy5ncmlkLnJvb3RSZWNvcmRzID0gaGllcmFyY2hpY2FsUmVjb3JkcztcbiAgICAgICAgcmV0dXJuIGhpZXJhcmNoaWNhbFJlY29yZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3dJRChwcmltYXJ5S2V5OiBhbnksIHJvd0RhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4gcHJpbWFyeUtleSA/IHJvd0RhdGFbcHJpbWFyeUtleV0gOiByb3dEYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGllcmFyY2hpemVGbGF0RGF0YShjb2xsZWN0aW9uOiBhbnlbXSwgcHJpbWFyeUtleTogc3RyaW5nLCBmb3JlaWduS2V5OiBzdHJpbmcsXG4gICAgICAgIG1hcDogTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPiwgZmxhdERhdGE6IGFueVtdKTpcbiAgICAgICAgSVRyZWVHcmlkUmVjb3JkW10ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IElUcmVlR3JpZFJlY29yZFtdID0gW107XG4gICAgICAgIGNvbnN0IG1pc3NpbmdQYXJlbnRSZWNvcmRzOiBJVHJlZUdyaWRSZWNvcmRbXSA9IFtdO1xuICAgICAgICBjb2xsZWN0aW9uLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZDogSVRyZWVHcmlkUmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGtleTogdGhpcy5nZXRSb3dJRChwcmltYXJ5S2V5LCByb3cpLFxuICAgICAgICAgICAgICAgIGRhdGE6IHJvdyxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBtYXAuZ2V0KHJvd1tmb3JlaWduS2V5XSk7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChyZWNvcmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaXNzaW5nUGFyZW50UmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1hcC5zZXQocm93W3ByaW1hcnlLZXldLCByZWNvcmQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBtaXNzaW5nUGFyZW50UmVjb3Jkcy5mb3JFYWNoKHJlY29yZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBtYXAuZ2V0KHJlY29yZC5kYXRhW2ZvcmVpZ25LZXldKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICByZWNvcmQucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2V0SW5kZW50YXRpb25MZXZlbHMocmVzdWx0LCAwLCBmbGF0RGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEluZGVudGF0aW9uTGV2ZWxzKGNvbGxlY3Rpb246IElUcmVlR3JpZFJlY29yZFtdLCBpbmRlbnRhdGlvbkxldmVsOiBudW1iZXIsIGZsYXREYXRhOiBhbnlbXSkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICByZWNvcmQubGV2ZWwgPSBpbmRlbnRhdGlvbkxldmVsO1xuICAgICAgICAgICAgcmVjb3JkLmV4cGFuZGVkID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUocmVjb3JkKTtcbiAgICAgICAgICAgIGZsYXREYXRhLnB1c2gocmVjb3JkLmRhdGEpO1xuXG4gICAgICAgICAgICBpZiAocmVjb3JkLmNoaWxkcmVuICYmIHJlY29yZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbmRlbnRhdGlvbkxldmVscyhyZWNvcmQuY2hpbGRyZW4sIGluZGVudGF0aW9uTGV2ZWwgKyAxLCBmbGF0RGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZXJhcmNoaXplUmVjdXJzaXZlKGNvbGxlY3Rpb246IGFueVtdLCBwcmltYXJ5S2V5OiBzdHJpbmcsIGNoaWxkRGF0YUtleTogc3RyaW5nLFxuICAgICAgICBwYXJlbnQ6IElUcmVlR3JpZFJlY29yZCwgZmxhdERhdGE6IGFueVtdLCBpbmRlbnRhdGlvbkxldmVsOiBudW1iZXIsIG1hcDogTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPik6IElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJVHJlZUdyaWRSZWNvcmRbXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmQ6IElUcmVlR3JpZFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHRoaXMuZ2V0Um93SUQocHJpbWFyeUtleSwgaXRlbSksXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGluZGVudGF0aW9uTGV2ZWxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWNvcmQuZXhwYW5kZWQgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShyZWNvcmQpO1xuICAgICAgICAgICAgZmxhdERhdGEucHVzaChpdGVtKTtcbiAgICAgICAgICAgIG1hcC5zZXQocmVjb3JkLmtleSwgcmVjb3JkKTtcbiAgICAgICAgICAgIHJlY29yZC5jaGlsZHJlbiA9IGl0ZW1bY2hpbGREYXRhS2V5XSA/XG4gICAgICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGl6ZVJlY3Vyc2l2ZShpdGVtW2NoaWxkRGF0YUtleV0sIHByaW1hcnlLZXksIGNoaWxkRGF0YUtleSwgcmVjb3JkLCBmbGF0RGF0YSwgaW5kZW50YXRpb25MZXZlbCArIDEsIG1hcCkgOlxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlY29yZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkRmxhdHRlbmluZycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZEZsYXR0ZW5pbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElHWF9HUklEX0JBU0UpIHByaXZhdGUgZ3JpZDogR3JpZFR5cGUpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBJVHJlZUdyaWRSZWNvcmRbXSxcbiAgICAgICAgZXhwYW5kZWRMZXZlbHM6IG51bWJlciwgZXhwYW5kZWRTdGF0ZXM6IE1hcDxhbnksIGJvb2xlYW4+LCBfOiBudW1iZXIpOiBhbnlbXSB7XG5cbiAgICAgICAgY29uc3QgZGF0YTogSVRyZWVHcmlkUmVjb3JkW10gPSBbXTtcblxuICAgICAgICB0aGlzLmdyaWQucHJvY2Vzc2VkUm9vdFJlY29yZHMgPSBjb2xsZWN0aW9uO1xuICAgICAgICB0aGlzLmdyaWQucHJvY2Vzc2VkUmVjb3JkcyA9IG5ldyBNYXA8YW55LCBJVHJlZUdyaWRSZWNvcmQ+KCk7XG5cbiAgICAgICAgdGhpcy5nZXRGbGF0RGF0YVJlY3Vyc2l2ZShjb2xsZWN0aW9uLCBkYXRhLCBleHBhbmRlZExldmVscywgZXhwYW5kZWRTdGF0ZXMsIHRydWUpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC5wcm9jZXNzZWRFeHBhbmRlZEZsYXREYXRhID0gZGF0YS5tYXAociA9PiByLmRhdGEpO1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmxhdERhdGFSZWN1cnNpdmUoY29sbGVjdGlvbjogSVRyZWVHcmlkUmVjb3JkW10sIGRhdGE6IElUcmVlR3JpZFJlY29yZFtdLFxuICAgICAgICBleHBhbmRlZExldmVsczogbnVtYmVyLCBleHBhbmRlZFN0YXRlczogTWFwPGFueSwgYm9vbGVhbj4sIHBhcmVudEV4cGFuZGVkOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghY29sbGVjdGlvbiB8fCAhY29sbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaGllcmFyY2hpY2FsUmVjb3JkIG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRFeHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIGRhdGEucHVzaChoaWVyYXJjaGljYWxSZWNvcmQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBoaWVyYXJjaGljYWxSZWNvcmQuZXhwYW5kZWQgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShoaWVyYXJjaGljYWxSZWNvcmQpO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5vblByb2Nlc3NlZFJlY29yZEV4cGFuc2lvbih0aGlzLmdyaWQsIGhpZXJhcmNoaWNhbFJlY29yZCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5wcm9jZXNzZWRSZWNvcmRzLnNldChoaWVyYXJjaGljYWxSZWNvcmQua2V5LCBoaWVyYXJjaGljYWxSZWNvcmQpO1xuXG4gICAgICAgICAgICB0aGlzLmdldEZsYXREYXRhUmVjdXJzaXZlKGhpZXJhcmNoaWNhbFJlY29yZC5jaGlsZHJlbiwgZGF0YSwgZXhwYW5kZWRMZXZlbHMsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWRTdGF0ZXMsIHBhcmVudEV4cGFuZGVkICYmIGhpZXJhcmNoaWNhbFJlY29yZC5leHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU5vblByb2Nlc3NlZFJlY29yZEV4cGFuc2lvbihncmlkOiBHcmlkVHlwZSwgcmVjb3JkOiBJVHJlZUdyaWRSZWNvcmQpIHtcbiAgICAgICAgY29uc3QgcmVjID0gZ3JpZC5yZWNvcmRzLmdldChyZWNvcmQua2V5KTtcbiAgICAgICAgcmVjLmV4cGFuZGVkID0gcmVjb3JkLmV4cGFuZGVkO1xuICAgIH1cbn1cblxuLyoqIEBoaWRkZW4gKi9cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkU29ydGluZycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFNvcnRpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElHWF9HUklEX0JBU0UpIHByaXZhdGUgZ3JpZDogR3JpZFR5cGUpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShcbiAgICAgICAgaGllcmFyY2hpY2FsRGF0YTogSVRyZWVHcmlkUmVjb3JkW10sXG4gICAgICAgIGV4cHJlc3Npb25zOiBJU29ydGluZ0V4cHJlc3Npb25bXSxcbiAgICAgICAgc29ydGluZzogSUdyaWRTb3J0aW5nU3RyYXRlZ3ksXG4gICAgICAgIF86IG51bWJlcixcbiAgICAgICAgcGlubmVkPzogYm9vbGVhbik6IElUcmVlR3JpZFJlY29yZFtdIHtcblxuICAgICAgICBsZXQgcmVzdWx0OiBJVHJlZUdyaWRSZWNvcmRbXTtcbiAgICAgICAgaWYgKCFleHByZXNzaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhpZXJhcmNoaWNhbERhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBEYXRhVXRpbC50cmVlR3JpZFNvcnQoaGllcmFyY2hpY2FsRGF0YSwgZXhwcmVzc2lvbnMsIHNvcnRpbmcsIG51bGwsIHRoaXMuZ3JpZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJlZFNvcnRlZERhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5mbGF0dGVuVHJlZUdyaWRSZWNvcmRzKHJlc3VsdCwgZmlsdGVyZWRTb3J0ZWREYXRhKTtcbiAgICAgICAgdGhpcy5ncmlkLnNldEZpbHRlcmVkU29ydGVkRGF0YShmaWx0ZXJlZFNvcnRlZERhdGEsIHBpbm5lZCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZsYXR0ZW5UcmVlR3JpZFJlY29yZHMocmVjb3JkczogSVRyZWVHcmlkUmVjb3JkW10sIGZsYXREYXRhOiBhbnlbXSkge1xuICAgICAgICBpZiAocmVjb3JkcyAmJiByZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgICAgIGZsYXREYXRhLnB1c2gocmVjb3JkLmRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdHRlblRyZWVHcmlkUmVjb3JkcyhyZWNvcmQuY2hpbGRyZW4sIGZsYXREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIEBoaWRkZW4gKi9cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkUGFnaW5nJyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkUGFnaW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJR1hfR1JJRF9CQVNFKSBwcml2YXRlIGdyaWQ6IEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogSVRyZWVHcmlkUmVjb3JkW10sIHBhZ2UgPSAwLCBwZXJQYWdlID0gMTUsIF86IG51bWJlcik6IElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQucGFnaW5hdG9yIHx8IHRoaXMuZ3JpZC5wYWdpbmdNb2RlICE9PSBHcmlkUGFnaW5nTW9kZS5Mb2NhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmdyaWQuX3RvdGFsUmVjb3JkcyA+PSAwID8gdGhpcy5ncmlkLl90b3RhbFJlY29yZHMgOiBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguY2VpbChsZW4gLyBwZXJQYWdlKTtcblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgICAgIGluZGV4OiAodG90YWxQYWdlcyA+IDAgJiYgcGFnZSA+PSB0b3RhbFBhZ2VzKSA/IHRvdGFsUGFnZXMgLSAxIDogcGFnZSxcbiAgICAgICAgICAgIHJlY29yZHNQZXJQYWdlOiBwZXJQYWdlXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBJVHJlZUdyaWRSZWNvcmRbXSA9IERhdGFVdGlsLnBhZ2UoY2xvbmVBcnJheShjb2xsZWN0aW9uKSwgc3RhdGUsIGxlbik7XG4gICAgICAgIHRoaXMuZ3JpZC5wYWdpbmdTdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLmdyaWQucGFnaW5hdG9yLnBhZ2UgPSBzdGF0ZS5pbmRleDtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8qKiBAaGlkZGVuICovXG5AUGlwZSh7IG5hbWU6ICd0cmVlR3JpZFRyYW5zYWN0aW9uJyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkVHJhbnNhY3Rpb25QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHJpdmF0ZSBncmlkOiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IGFueVtdLCBfOiBudW1iZXIpOiBhbnlbXSB7XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlZENoYW5nZXMgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpO1xuICAgICAgICAgICAgaWYgKGFnZ3JlZ2F0ZWRDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgICAgICAgICAgICAgaWYgKCFwcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLmdyaWQuZm9yZWlnbktleTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZERhdGFLZXkgPSB0aGlzLmdyaWQuY2hpbGREYXRhS2V5O1xuXG4gICAgICAgICAgICAgICAgaWYgKGZvcmVpZ25LZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxhdERhdGFDbG9uZSA9IGNsb25lQXJyYXkoY29sbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRhVXRpbC5tZXJnZVRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYXREYXRhQ2xvbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkQ2hhbmdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5wcmltYXJ5S2V5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkRGF0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxEYXRhQ2xvbmUgPSBjbG9uZUhpZXJhcmNoaWNhbEFycmF5KGNvbGxlY3Rpb24sIGNoaWxkRGF0YUtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRhVXRpbC5tZXJnZUhpZXJhcmNoaWNhbFRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbERhdGFDbG9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRDaGFuZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREYXRhS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnByaW1hcnlLZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBwaXBlIG1hcHMgdGhlIG9yaWdpbmFsIHJlY29yZCB0byBJVHJlZUdyaWRSZWNvcmQgZm9ybWF0IHVzZWQgaW4gVHJlZUdyaWQuXG4gKi9cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkTm9ybWFsaXplUmVjb3JkJyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkTm9ybWFsaXplUmVjb3Jkc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHJpdmF0ZSBncmlkOiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKF86IGFueVtdLCBfXzogbnVtYmVyKTogYW55W10ge1xuICAgICAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgICAgIC8vIHVzaW5nIGZsYXR0ZW5lZCBkYXRhIGJlY2F1c2Ugb3JpZ2luIGRhdGEgbWF5IGJlIGhpZXJhcmNoaWNhbC5cbiAgICAgICAgY29uc3QgZmxhdERhdGEgPSB0aGlzLmdyaWQuZmxhdERhdGE7XG4gICAgICAgIGNvbnN0IHJlcyA9IGZsYXREYXRhLm1hcChyZWMgPT5cbiAgICAgICAgKHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJlY1twcmltYXJ5S2V5XSA6IHJlYyxcbiAgICAgICAgICAgIGRhdGE6IHJlYyxcbiAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkQWRkUm93JyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkQWRkUm93UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJR1hfR1JJRF9CQVNFKSBwcml2YXRlIGdyaWQ6IEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogYW55LCBpc1Bpbm5lZCA9IGZhbHNlLCBfcGlwZVRyaWdnZXI6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5yb3dFZGl0YWJsZSB8fCAhdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdyB8fCB0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93LmdldENsYXNzTmFtZSgpICE9PSBJZ3hBZGRSb3cubmFtZSB8fFxuICAgICAgICAgICAgIXRoaXMuZ3JpZC5ncmlkQVBJLmNydWRTZXJ2aWNlLmFkZFJvd1BhcmVudCB8fCBpc1Bpbm5lZCAhPT0gdGhpcy5ncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50LmlzUGlubmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb3B5ID0gY29sbGVjdGlvbi5zbGljZSgwKTtcbiAgICAgICAgY29uc3QgcmVjID0gKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3cgYXMgSWd4QWRkUm93KS5yZWNvcmRSZWY7XG4gICAgICAgIGNvcHkuc3BsaWNlKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3cuaW5kZXgsIDAsIHJlYyk7XG4gICAgICAgIHRoaXMuZ3JpZC5yZWNvcmRzLnNldChyZWMua2V5LCByZWMpO1xuICAgICAgICByZXR1cm4gY29weTtcbiAgICB9XG59XG4iXX0=
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLnBpcGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQucGlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFM0QsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUluRDs7R0FFRztBQUVILE1BQU0sT0FBTyw0QkFBNEI7SUFFckMsWUFBMkMsSUFBYztRQUFkLFNBQUksR0FBSixJQUFJLENBQVU7SUFBSSxDQUFDO0lBRXZELFNBQVMsQ0FBQyxVQUFpQixFQUFFLFVBQWtCLEVBQUUsVUFBa0IsRUFBRSxZQUFvQixFQUFFLENBQVM7UUFDdkcsSUFBSSxtQkFBbUIsR0FBc0IsRUFBRSxDQUFDO1FBQ2hELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDM0QsTUFBTSxRQUFRLEdBQVUsRUFBRSxDQUFDO1FBRTNCLElBQUksVUFBVSxJQUFJLFVBQVUsRUFBRTtZQUMxQixtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDcEg7YUFB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QUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTs7MEJBR2YsTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCBjbG9uZUhpZXJhcmNoaWNhbEFycmF5IH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSVRyZWVHcmlkUmVjb3JkIH0gZnJvbSAnLi90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmlkUGFnaW5nTW9kZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneEFkZFJvdyB9IGZyb20gJy4uL2NvbW1vbi9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVNvcnRpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL3NvcnRpbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgSUdyaWRTb3J0aW5nU3RyYXRlZ3kgfSBmcm9tICcuLi9jb21tb24vc3RyYXRlZ3knO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQFBpcGUoeyBuYW1lOiAndHJlZUdyaWRIaWVyYXJjaGl6aW5nJyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkSGllcmFyY2hpemluZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHJpdmF0ZSBncmlkOiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IGFueVtdLCBwcmltYXJ5S2V5OiBzdHJpbmcsIGZvcmVpZ25LZXk6IHN0cmluZywgY2hpbGREYXRhS2V5OiBzdHJpbmcsIF86IG51bWJlcik6IElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgbGV0IGhpZXJhcmNoaWNhbFJlY29yZHM6IElUcmVlR3JpZFJlY29yZFtdID0gW107XG4gICAgICAgIGNvbnN0IHRyZWVHcmlkUmVjb3Jkc01hcCA9IG5ldyBNYXA8YW55LCBJVHJlZUdyaWRSZWNvcmQ+KCk7XG4gICAgICAgIGNvbnN0IGZsYXREYXRhOiBhbnlbXSA9IFtdO1xuXG4gICAgICAgIGlmIChwcmltYXJ5S2V5ICYmIGZvcmVpZ25LZXkpIHtcbiAgICAgICAgICAgIGhpZXJhcmNoaWNhbFJlY29yZHMgPSB0aGlzLmhpZXJhcmNoaXplRmxhdERhdGEoY29sbGVjdGlvbiwgcHJpbWFyeUtleSwgZm9yZWlnbktleSwgdHJlZUdyaWRSZWNvcmRzTWFwLCBmbGF0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hpbGREYXRhS2V5KSB7XG4gICAgICAgICAgICBoaWVyYXJjaGljYWxSZWNvcmRzID0gdGhpcy5oaWVyYXJjaGl6ZVJlY3Vyc2l2ZShjb2xsZWN0aW9uLCBwcmltYXJ5S2V5LCBjaGlsZERhdGFLZXksIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBmbGF0RGF0YSwgMCwgdHJlZUdyaWRSZWNvcmRzTWFwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5mbGF0RGF0YSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCA/XG4gICAgICAgICAgICBmbGF0RGF0YS5maWx0ZXIocmVjID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0U3RhdGUodGhpcy5nZXRSb3dJRChwcmltYXJ5S2V5LCByZWMpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXN0YXRlIHx8IHN0YXRlLnR5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5BREQ7XG4gICAgICAgICAgICB9KSA6IGZsYXREYXRhO1xuICAgICAgICB0aGlzLmdyaWQucmVjb3JkcyA9IHRyZWVHcmlkUmVjb3Jkc01hcDtcbiAgICAgICAgdGhpcy5ncmlkLnJvb3RSZWNvcmRzID0gaGllcmFyY2hpY2FsUmVjb3JkcztcbiAgICAgICAgcmV0dXJuIGhpZXJhcmNoaWNhbFJlY29yZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3dJRChwcmltYXJ5S2V5OiBhbnksIHJvd0RhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4gcHJpbWFyeUtleSA/IHJvd0RhdGFbcHJpbWFyeUtleV0gOiByb3dEYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGllcmFyY2hpemVGbGF0RGF0YShjb2xsZWN0aW9uOiBhbnlbXSwgcHJpbWFyeUtleTogc3RyaW5nLCBmb3JlaWduS2V5OiBzdHJpbmcsXG4gICAgICAgIG1hcDogTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPiwgZmxhdERhdGE6IGFueVtdKTpcbiAgICAgICAgSVRyZWVHcmlkUmVjb3JkW10ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IElUcmVlR3JpZFJlY29yZFtdID0gW107XG4gICAgICAgIGNvbnN0IG1pc3NpbmdQYXJlbnRSZWNvcmRzOiBJVHJlZUdyaWRSZWNvcmRbXSA9IFtdO1xuICAgICAgICBjb2xsZWN0aW9uLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZDogSVRyZWVHcmlkUmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGtleTogdGhpcy5nZXRSb3dJRChwcmltYXJ5S2V5LCByb3cpLFxuICAgICAgICAgICAgICAgIGRhdGE6IHJvdyxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBtYXAuZ2V0KHJvd1tmb3JlaWduS2V5XSk7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChyZWNvcmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaXNzaW5nUGFyZW50UmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1hcC5zZXQocm93W3ByaW1hcnlLZXldLCByZWNvcmQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBtaXNzaW5nUGFyZW50UmVjb3Jkcy5mb3JFYWNoKHJlY29yZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBtYXAuZ2V0KHJlY29yZC5kYXRhW2ZvcmVpZ25LZXldKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICByZWNvcmQucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2V0SW5kZW50YXRpb25MZXZlbHMocmVzdWx0LCAwLCBmbGF0RGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEluZGVudGF0aW9uTGV2ZWxzKGNvbGxlY3Rpb246IElUcmVlR3JpZFJlY29yZFtdLCBpbmRlbnRhdGlvbkxldmVsOiBudW1iZXIsIGZsYXREYXRhOiBhbnlbXSkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICByZWNvcmQubGV2ZWwgPSBpbmRlbnRhdGlvbkxldmVsO1xuICAgICAgICAgICAgcmVjb3JkLmV4cGFuZGVkID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUocmVjb3JkKTtcbiAgICAgICAgICAgIGZsYXREYXRhLnB1c2gocmVjb3JkLmRhdGEpO1xuXG4gICAgICAgICAgICBpZiAocmVjb3JkLmNoaWxkcmVuICYmIHJlY29yZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbmRlbnRhdGlvbkxldmVscyhyZWNvcmQuY2hpbGRyZW4sIGluZGVudGF0aW9uTGV2ZWwgKyAxLCBmbGF0RGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZXJhcmNoaXplUmVjdXJzaXZlKGNvbGxlY3Rpb246IGFueVtdLCBwcmltYXJ5S2V5OiBzdHJpbmcsIGNoaWxkRGF0YUtleTogc3RyaW5nLFxuICAgICAgICBwYXJlbnQ6IElUcmVlR3JpZFJlY29yZCwgZmxhdERhdGE6IGFueVtdLCBpbmRlbnRhdGlvbkxldmVsOiBudW1iZXIsIG1hcDogTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPik6IElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJVHJlZUdyaWRSZWNvcmRbXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmQ6IElUcmVlR3JpZFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHRoaXMuZ2V0Um93SUQocHJpbWFyeUtleSwgaXRlbSksXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGluZGVudGF0aW9uTGV2ZWxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWNvcmQuZXhwYW5kZWQgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShyZWNvcmQpO1xuICAgICAgICAgICAgZmxhdERhdGEucHVzaChpdGVtKTtcbiAgICAgICAgICAgIG1hcC5zZXQocmVjb3JkLmtleSwgcmVjb3JkKTtcbiAgICAgICAgICAgIHJlY29yZC5jaGlsZHJlbiA9IGl0ZW1bY2hpbGREYXRhS2V5XSA/XG4gICAgICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGl6ZVJlY3Vyc2l2ZShpdGVtW2NoaWxkRGF0YUtleV0sIHByaW1hcnlLZXksIGNoaWxkRGF0YUtleSwgcmVjb3JkLCBmbGF0RGF0YSwgaW5kZW50YXRpb25MZXZlbCArIDEsIG1hcCkgOlxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlY29yZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkRmxhdHRlbmluZycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZEZsYXR0ZW5pbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElHWF9HUklEX0JBU0UpIHByaXZhdGUgZ3JpZDogR3JpZFR5cGUpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBJVHJlZUdyaWRSZWNvcmRbXSxcbiAgICAgICAgZXhwYW5kZWRMZXZlbHM6IG51bWJlciwgZXhwYW5kZWRTdGF0ZXM6IE1hcDxhbnksIGJvb2xlYW4+LCBfOiBudW1iZXIpOiBhbnlbXSB7XG5cbiAgICAgICAgY29uc3QgZGF0YTogSVRyZWVHcmlkUmVjb3JkW10gPSBbXTtcblxuICAgICAgICB0aGlzLmdyaWQucHJvY2Vzc2VkUm9vdFJlY29yZHMgPSBjb2xsZWN0aW9uO1xuICAgICAgICB0aGlzLmdyaWQucHJvY2Vzc2VkUmVjb3JkcyA9IG5ldyBNYXA8YW55LCBJVHJlZUdyaWRSZWNvcmQ+KCk7XG5cbiAgICAgICAgdGhpcy5nZXRGbGF0RGF0YVJlY3Vyc2l2ZShjb2xsZWN0aW9uLCBkYXRhLCBleHBhbmRlZExldmVscywgZXhwYW5kZWRTdGF0ZXMsIHRydWUpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC5wcm9jZXNzZWRFeHBhbmRlZEZsYXREYXRhID0gZGF0YS5tYXAociA9PiByLmRhdGEpO1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmxhdERhdGFSZWN1cnNpdmUoY29sbGVjdGlvbjogSVRyZWVHcmlkUmVjb3JkW10sIGRhdGE6IElUcmVlR3JpZFJlY29yZFtdLFxuICAgICAgICBleHBhbmRlZExldmVsczogbnVtYmVyLCBleHBhbmRlZFN0YXRlczogTWFwPGFueSwgYm9vbGVhbj4sIHBhcmVudEV4cGFuZGVkOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghY29sbGVjdGlvbiB8fCAhY29sbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaGllcmFyY2hpY2FsUmVjb3JkIG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRFeHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIGRhdGEucHVzaChoaWVyYXJjaGljYWxSZWNvcmQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBoaWVyYXJjaGljYWxSZWNvcmQuZXhwYW5kZWQgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShoaWVyYXJjaGljYWxSZWNvcmQpO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5vblByb2Nlc3NlZFJlY29yZEV4cGFuc2lvbih0aGlzLmdyaWQsIGhpZXJhcmNoaWNhbFJlY29yZCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5wcm9jZXNzZWRSZWNvcmRzLnNldChoaWVyYXJjaGljYWxSZWNvcmQua2V5LCBoaWVyYXJjaGljYWxSZWNvcmQpO1xuXG4gICAgICAgICAgICB0aGlzLmdldEZsYXREYXRhUmVjdXJzaXZlKGhpZXJhcmNoaWNhbFJlY29yZC5jaGlsZHJlbiwgZGF0YSwgZXhwYW5kZWRMZXZlbHMsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWRTdGF0ZXMsIHBhcmVudEV4cGFuZGVkICYmIGhpZXJhcmNoaWNhbFJlY29yZC5leHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU5vblByb2Nlc3NlZFJlY29yZEV4cGFuc2lvbihncmlkOiBHcmlkVHlwZSwgcmVjb3JkOiBJVHJlZUdyaWRSZWNvcmQpIHtcbiAgICAgICAgY29uc3QgcmVjID0gZ3JpZC5yZWNvcmRzLmdldChyZWNvcmQua2V5KTtcbiAgICAgICAgcmVjLmV4cGFuZGVkID0gcmVjb3JkLmV4cGFuZGVkO1xuICAgIH1cbn1cblxuLyoqIEBoaWRkZW4gKi9cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkU29ydGluZycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFNvcnRpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElHWF9HUklEX0JBU0UpIHByaXZhdGUgZ3JpZDogR3JpZFR5cGUpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShcbiAgICAgICAgaGllcmFyY2hpY2FsRGF0YTogSVRyZWVHcmlkUmVjb3JkW10sXG4gICAgICAgIGV4cHJlc3Npb25zOiBJU29ydGluZ0V4cHJlc3Npb25bXSxcbiAgICAgICAgc29ydGluZzogSUdyaWRTb3J0aW5nU3RyYXRlZ3ksXG4gICAgICAgIF86IG51bWJlcixcbiAgICAgICAgcGlubmVkPzogYm9vbGVhbik6IElUcmVlR3JpZFJlY29yZFtdIHtcblxuICAgICAgICBsZXQgcmVzdWx0OiBJVHJlZUdyaWRSZWNvcmRbXTtcbiAgICAgICAgaWYgKCFleHByZXNzaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhpZXJhcmNoaWNhbERhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBEYXRhVXRpbC50cmVlR3JpZFNvcnQoaGllcmFyY2hpY2FsRGF0YSwgZXhwcmVzc2lvbnMsIHNvcnRpbmcsIG51bGwsIHRoaXMuZ3JpZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJlZFNvcnRlZERhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5mbGF0dGVuVHJlZUdyaWRSZWNvcmRzKHJlc3VsdCwgZmlsdGVyZWRTb3J0ZWREYXRhKTtcbiAgICAgICAgdGhpcy5ncmlkLnNldEZpbHRlcmVkU29ydGVkRGF0YShmaWx0ZXJlZFNvcnRlZERhdGEsIHBpbm5lZCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZsYXR0ZW5UcmVlR3JpZFJlY29yZHMocmVjb3JkczogSVRyZWVHcmlkUmVjb3JkW10sIGZsYXREYXRhOiBhbnlbXSkge1xuICAgICAgICBpZiAocmVjb3JkcyAmJiByZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgICAgIGZsYXREYXRhLnB1c2gocmVjb3JkLmRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdHRlblRyZWVHcmlkUmVjb3JkcyhyZWNvcmQuY2hpbGRyZW4sIGZsYXREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIEBoaWRkZW4gKi9cbkBQaXBlKHsgbmFtZTogJ3RyZWVHcmlkUGFnaW5nJyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkUGFnaW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJR1hfR1JJRF9CQVNFKSBwcml2YXRlIGdyaWQ6IEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogSVRyZWVHcmlkUmVjb3JkW10sIHBhZ2UgPSAwLCBwZXJQYWdlID0gMTUsIF86IG51bWJlcik6IElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQucGFnaW5hdG9yIHx8IHRoaXMuZ3JpZC5wYWdpbmdNb2RlICE9PSBHcmlkUGFnaW5nTW9kZS5Mb2NhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmdyaWQuX3RvdGFsUmVjb3JkcyA+PSAwID8gdGhpcy5ncmlkLl90b3RhbFJlY29yZHMgOiBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguY2VpbChsZW4gLyBwZXJQYWdlKTtcblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgICAgIGluZGV4OiAodG90YWxQYWdlcyA+IDAgJiYgcGFnZSA+PSB0b3RhbFBhZ2VzKSA/IHRvdGFsUGFnZXMgLSAxIDogcGFnZSxcbiAgICAgICAgICAgIHJlY29yZHNQZXJQYWdlOiBwZXJQYWdlXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBJVHJlZUdyaWRSZWNvcmRbXSA9IERhdGFVdGlsLnBhZ2UoY2xvbmVBcnJheShjb2xsZWN0aW9uKSwgc3RhdGUsIGxlbik7XG4gICAgICAgIHRoaXMuZ3JpZC5wYWdpbmdTdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLmdyaWQucGFnaW5hdG9yLnBhZ2UgPSBzdGF0ZS5pbmRleDtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8qKiBAaGlkZGVuICovXG5AUGlwZSh7IG5hbWU6ICd0cmVlR3JpZFRyYW5zYWN0aW9uJyB9KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkVHJhbnNhY3Rpb25QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHJpdmF0ZSBncmlkOiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IGFueVtdLCBfOiBudW1iZXIpOiBhbnlbXSB7XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlZENoYW5nZXMgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpO1xuICAgICAgICAgICAgaWYgKGFnZ3JlZ2F0ZWRDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgICAgICAgICAgICAgaWYgKCFwcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLmdyaWQuZm9yZWlnbktleTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZERhdGFLZXkgPSB0aGlzLmdyaWQuY2hpbGREYXRhS2V5O1xuXG4gICAgICAgICAgICAgICAgaWYgKGZvcmVpZ25LZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxhdERhdGFDbG9uZSA9IGNsb25lQXJyYXkoY29sbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRhVXRpbC5tZXJnZVRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYXREYXRhQ2xvbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkQ2hhbmdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5wcmltYXJ5S2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmRhdGFDbG9uZVN0cmF0ZWd5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkRGF0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxEYXRhQ2xvbmUgPSBjbG9uZUhpZXJhcmNoaWNhbEFycmF5KGNvbGxlY3Rpb24sIGNoaWxkRGF0YUtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRhVXRpbC5tZXJnZUhpZXJhcmNoaWNhbFRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbERhdGFDbG9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRDaGFuZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREYXRhS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnByaW1hcnlLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZGF0YUNsb25lU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGlzIHBpcGUgbWFwcyB0aGUgb3JpZ2luYWwgcmVjb3JkIHRvIElUcmVlR3JpZFJlY29yZCBmb3JtYXQgdXNlZCBpbiBUcmVlR3JpZC5cbiAqL1xuQFBpcGUoeyBuYW1lOiAndHJlZUdyaWROb3JtYWxpemVSZWNvcmQnIH0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWROb3JtYWxpemVSZWNvcmRzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJR1hfR1JJRF9CQVNFKSBwcml2YXRlIGdyaWQ6IEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXzogYW55W10sIF9fOiBudW1iZXIpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLmdyaWQucHJpbWFyeUtleTtcbiAgICAgICAgLy8gdXNpbmcgZmxhdHRlbmVkIGRhdGEgYmVjYXVzZSBvcmlnaW4gZGF0YSBtYXkgYmUgaGllcmFyY2hpY2FsLlxuICAgICAgICBjb25zdCBmbGF0RGF0YSA9IHRoaXMuZ3JpZC5mbGF0RGF0YTtcbiAgICAgICAgY29uc3QgcmVzID0gZmxhdERhdGEubWFwKHJlYyA9PlxuICAgICAgICAoe1xuICAgICAgICAgICAgcm93SUQ6IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gcmVjW3ByaW1hcnlLZXldIDogcmVjLFxuICAgICAgICAgICAgZGF0YTogcmVjLFxuICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAndHJlZUdyaWRBZGRSb3cnIH0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWRBZGRSb3dQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElHWF9HUklEX0JBU0UpIHByaXZhdGUgZ3JpZDogR3JpZFR5cGUpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBhbnksIGlzUGlubmVkID0gZmFsc2UsIF9waXBlVHJpZ2dlcjogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnJvd0VkaXRhYmxlIHx8ICF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93IHx8IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3cuZ2V0Q2xhc3NOYW1lKCkgIT09IElneEFkZFJvdy5uYW1lIHx8XG4gICAgICAgICAgICAhdGhpcy5ncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50IHx8IGlzUGlubmVkICE9PSB0aGlzLmdyaWQuZ3JpZEFQSS5jcnVkU2VydmljZS5hZGRSb3dQYXJlbnQuaXNQaW5uZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvcHkgPSBjb2xsZWN0aW9uLnNsaWNlKDApO1xuICAgICAgICBjb25zdCByZWMgPSAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdyBhcyBJZ3hBZGRSb3cpLnJlY29yZFJlZjtcbiAgICAgICAgY29weS5zcGxpY2UodGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdy5pbmRleCwgMCwgcmVjKTtcbiAgICAgICAgdGhpcy5ncmlkLnJlY29yZHMuc2V0KHJlYy5rZXksIHJlYyk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -79,7 +79,7 @@ export class WorksheetFile {
|
|
|
79
79
|
else {
|
|
80
80
|
const owner = worksheetData.owner;
|
|
81
81
|
const isHierarchicalGrid = worksheetData.data[0].type === ExportRecordType.HierarchicalGridRecord;
|
|
82
|
-
const hasMultiColumnHeader =
|
|
82
|
+
const hasMultiColumnHeader = worksheetData.hasMultiColumnHeader;
|
|
83
83
|
const hasUserSetIndex = owner.columns.some(col => col.exportIndex !== undefined);
|
|
84
84
|
const height = worksheetData.options.rowHeight;
|
|
85
85
|
const rowStyle = isHierarchicalGrid ? ' s="3"' : '';
|
|
@@ -209,7 +209,7 @@ export class WorksheetFile {
|
|
|
209
209
|
const record = worksheetData.data[i];
|
|
210
210
|
if (record.type === ExportRecordType.HeaderRecord) {
|
|
211
211
|
const recordOwner = worksheetData.owners.get(record.owner);
|
|
212
|
-
const hasMultiColumnHeaders = recordOwner.columns.some(c => c.headerType === HeaderType.MultiColumnHeader);
|
|
212
|
+
const hasMultiColumnHeaders = recordOwner.columns.some(c => !c.skip && c.headerType === HeaderType.MultiColumnHeader);
|
|
213
213
|
if (hasMultiColumnHeaders) {
|
|
214
214
|
this.hGridPrintMultiColHeaders(worksheetData, rowDataArr, record, recordOwner);
|
|
215
215
|
}
|
|
@@ -389,4 +389,4 @@ export class WorksheetRelsFile {
|
|
|
389
389
|
folder.file('sheet1.xml.rels', ExcelStrings.getWorksheetRels());
|
|
390
390
|
}
|
|
391
391
|
}
|
|
392
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZXhjZWwvZXhjZWwtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSS9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUE4QixNQUFNLHdDQUF3QyxDQUFDO0FBRWxIOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFDZCxZQUFZLENBQUMsTUFBYTtRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxPQUFPO0lBQ1QsWUFBWSxDQUFDLE1BQWEsRUFBRSxhQUE0QjtRQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ1YsWUFBWSxDQUFDLE1BQWE7UUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLFlBQVksQ0FBQyxNQUFhLEVBQUUsYUFBNEI7UUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQztRQUN6RCxNQUFNLENBQUMsSUFBSSxDQUFDLG1C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QkFBaUI7SUFDbkIsWUFBWSxDQUFDLE1BQWE7UUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElFeGNlbEZpbGUgfSBmcm9tICcuL2V4Y2VsLWludGVyZmFjZXMnO1xuaW1wb3J0IHsgRXhjZWxTdHJpbmdzIH0gZnJvbSAnLi9leGNlbC1zdHJpbmdzJztcbmltcG9ydCB7IFdvcmtzaGVldERhdGEgfSBmcm9tICcuL3dvcmtzaGVldC1kYXRhJztcblxuaW1wb3J0ICogYXMgSlNaaXAgZnJvbSAnanN6aXAnO1xuaW1wb3J0IHsgeWllbGRpbmdMb29wIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBIZWFkZXJUeXBlLCBFeHBvcnRSZWNvcmRUeXBlLCBJRXhwb3J0UmVjb3JkLCBJQ29sdW1uTGlzdCB9IGZyb20gJy4uL2V4cG9ydGVyLWNvbW1vbi9iYXNlLWV4cG9ydC1zZXJ2aWNlJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb290UmVsc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogSlNaaXApIHtcbiAgICAgICAgZm9sZGVyLmZpbGUoJy5yZWxzJywgRXhjZWxTdHJpbmdzLmdldFJlbHMoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwcEZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgZm9sZGVyLmZpbGUoJ2FwcC54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0QXBwKHdvcmtzaGVldERhdGEub3B0aW9ucy53b3Jrc2hlZXROYW1lKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIENvcmVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwKSB7XG4gICAgICAgIGZvbGRlci5maWxlKCdjb3JlLnhtbCcsIEV4Y2VsU3RyaW5ncy5nZXRDb3JlKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrYm9va1JlbHNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwLCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc1NoYXJlZFN0cmluZ3MgPSB3b3Jrc2hlZXREYXRhLmlzRW1wdHkgPT09IGZhbHNlO1xuICAgICAgICBmb2xkZXIuZmlsZSgnd29ya2Jvb2sueG1sLnJlbHMnLCBFeGNlbFN0cmluZ3MuZ2V0V29ya2Jvb2tSZWxzKGhhc1NoYXJlZFN0cmluZ3MpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgVGhlbWVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwKSB7XG4gICAgICAgIGZvbGRlci5maWxlKCd0aGVtZTEueG1sJywgRXhjZWxTdHJpbmdzLmdldFRoZW1lKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc2hlZXRGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgTUlOX1dJRFRIID0gOC40MztcbiAgICBwcml2YXRlIG1heE91dGxpbmVMZXZlbCA9IDA7XG4gICAgcHJpdmF0ZSBkaW1lbnNpb24gPSAnJztcbiAgICBwcml2YXRlIGZyZWV6ZVBhbmUgPSAnJztcbiAgICBwcml2YXRlIHJvd0hlaWdodCA9ICcnO1xuXG4gICAgcHJpdmF0ZSBtZXJnZUNlbGxTdHIgPSAnJztcbiAgICBwcml2YXRlIG1lcmdlQ2VsbHNDb3VudGVyID0gMDtcbiAgICBwcml2YXRlIHJvd0luZGV4ID0gMDtcblxuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoKSB7fVxuXG4gICAgcHVibGljIGFzeW5jIHdyaXRlRWxlbWVudEFzeW5jKGZvbGRlcjogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlRGF0YUFzeW5jKHdvcmtzaGVldERhdGEsIChjb2xzLCByb3dzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVGFibGUgPSAhd29ya3NoZWV0RGF0YS5pc0VtcHR5ICYmIHdvcmtzaGVldERhdGEub3B0aW9ucy5leHBvcnRBc1RhYmxlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzSGllcmFyY2hpY2FsR3JpZCA9IHdvcmtzaGVldERhdGEuZGF0YVswXT8udHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkO1xuXG4gICAgICAgICAgICAgICAgZm9sZGVyLmZpbGUoJ3NoZWV0MS54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0U2hlZXRYTUwoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uLCB0aGlzLmZyZWV6ZVBhbmUsIGNvbHMsIHJvd3MsIGhhc1RhYmxlLCB0aGlzLm1heE91dGxpbmVMZXZlbCwgaXNIaWVyYXJjaGljYWxHcmlkKSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZURhdGFBc3luYyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCBkb25lOiAoY29sczogc3RyaW5nLCBzaGVldERhdGE6IHN0cmluZykgPT4gdm9pZCkge1xuICAgICAgICBsZXQgc2hlZXREYXRhID0gJyc7XG4gICAgICAgIGxldCBjb2xzID0gJyc7XG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB3b3Jrc2hlZXREYXRhLmRhdGFEaWN0aW9uYXJ5O1xuICAgICAgICB0aGlzLnJvd0luZGV4ID0gMDtcblxuICAgICAgICBpZiAod29ya3NoZWV0RGF0YS5pc0VtcHR5KSB7XG4gICAgICAgICAgICBzaGVldERhdGEgKz0gJzxzaGVldERhdGEvPic7XG4gICAgICAgICAgICB0aGlzLmRpbWVuc2lvbiA9ICdBMSc7XG4gICAgICAgICAgICBkb25lKCcnLCBzaGVldERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3duZXIgPSB3b3Jrc2hlZXREYXRhLm93bmVyO1xuICAgICAgICAgICAgY29uc3QgaXNIaWVyYXJjaGljYWxHcmlkID0gd29ya3NoZWV0RGF0YS5kYXRhWzBdLnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuSGllcmFyY2hpY2FsR3JpZFJlY29yZDtcbiAgICAgICAgICAgIGNvbnN0IGhhc011bHRpQ29sdW1uSGVhZGVyID0gb3duZXIuY29sdW1ucy5zb21lKGNvbCA9PiAhY29sLnNraXAgJiYgY29sLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIpO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlclNldEluZGV4ID0gb3duZXIuY29sdW1ucy5zb21lKGNvbCA9PiBjb2wuZXhwb3J0SW5kZXggIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9ICB3b3Jrc2hlZXREYXRhLm9wdGlvbnMucm93SGVpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgcm93U3R5bGUgPSBpc0hpZXJhcmNoaWNhbEdyaWQgPyAnIHM9XCIzXCInIDogJyc7XG4gICAgICAgICAgICB0aGlzLnJvd0hlaWdodCA9IGhlaWdodCA/IGAgaHQ9XCIke2hlaWdodH1cIiBjdXN0b21IZWlnaHQ9XCIxXCJgIDogJyc7XG5cbiAgICAgICAgICAgIHNoZWV0RGF0YSArPSBgPHNoZWV0RGF0YT5gO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBvd25lci5tYXhMZXZlbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dJbmRleCsrO1xuICAgICAgICAgICAgICAgIHNoZWV0RGF0YSArPSBgPHJvdyByPVwiJHt0aGlzLnJvd0luZGV4fVwiJHt0aGlzLnJvd0hlaWdodH0+YDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnNGb3JMZXZlbCA9IGhhc011bHRpQ29sdW1uSGVhZGVyID9cbiAgICAgICAgICAgICAgICAgICAgb3duZXIuY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IChjLmxldmVsIDwgaSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciB8fCBjLmxldmVsID09PSBpKSAmJiBjLmNvbHVtblNwYW4gPiAwICYmICFjLnNraXApXG4gICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KSA6XG4gICAgICAgICAgICAgICAgICAgIGhhc1VzZXJTZXRJbmRleCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBvd25lci5jb2x1bW5zLmZpbHRlcihjID0+ICFjLnNraXApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyLmNvbHVtbnMuZmlsdGVyKGMgPT4gIWMuc2tpcClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3RhcnRWYWx1ZSA9IDA7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRDb2wgb2YgaGVhZGVyc0ZvckxldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmxldmVsID09PSBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sdW1uQ29vcmRpbmF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oc3RhcnRWYWx1ZSkgKyB0aGlzLnJvd0luZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSBkaWN0aW9uYXJ5LnNhdmVWYWx1ZShjdXJyZW50Q29sLmhlYWRlciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGVldERhdGEgKz0gYDxjIHI9XCIke2NvbHVtbkNvb3JkaW5hdGV9XCIke3Jvd1N0eWxlfSB0PVwic1wiPjx2PiR7Y29sdW1uVmFsdWV9PC92PjwvYz5gO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPT0gb3duZXIubWF4TGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2VsbHNDb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxTdHIgKz0gYCA8bWVyZ2VDZWxsIHJlZj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX06YDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oc3RhcnRWYWx1ZSkgKyAob3duZXIubWF4TGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMTsgayA8IGN1cnJlbnRDb2wuY29sdW1uU3BhbjsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUgKyBrKSArIHRoaXMucm93SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVldERhdGEgKz0gYDxjIHI9XCIke2NvbHVtbkNvb3JkaW5hdGV9XCIke3Jvd1N0eWxlfSAvPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2VsbFN0ciArPSBgJHtjb2x1bW5Db29yZGluYXRlfVwiIC8+YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0VmFsdWUgKz0gY3VycmVudENvbC5jb2x1bW5TcGFuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNoZWV0RGF0YSArPSBgPC9yb3c+YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbXVsdGlDb2x1bW5IZWFkZXJMZXZlbCA9IHdvcmtzaGVldERhdGEub3B0aW9ucy5pZ25vcmVNdWx0aUNvbHVtbkhlYWRlcnMgPyAwIDogb3duZXIubWF4TGV2ZWw7XG4gICAgICAgICAgICBjb25zdCBmcmVlemVIZWFkZXJzID0gd29ya3NoZWV0RGF0YS5vcHRpb25zLmZyZWV6ZUhlYWRlcnMgPyAyICsgbXVsdGlDb2x1bW5IZWFkZXJMZXZlbCA6IDE7XG5cbiAgICAgICAgICAgIGlmICghaXNIaWVyYXJjaGljYWxHcmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaW1lbnNpb24gPVxuICAgICAgICAgICAgICAgICAgICAnQTE6JyArIEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbih3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50IC0gMSkgKyAod29ya3NoZWV0RGF0YS5yb3dDb3VudCArIG93bmVyLm1heExldmVsKTtcblxuICAgICAgICAgICAgICAgIGNvbHMgKz0gJzxjb2xzPic7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWhhc011bHRpQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgd29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IGRpY3Rpb25hcnkuY29sdW1uV2lkdGhzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB3aWR0aCBwcm92aWRlZCBpbiB0aGUgb3B0aW9ucyBpZiBpdCBleGlzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB3aWR0aEluVHdpcHMgPSB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuY29sdW1uV2lkdGggIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuY29sdW1uV2lkdGggOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoKCh3aWR0aCAvIDk2KSAqIDE0LjQpLCBXb3Jrc2hlZXRGaWxlLk1JTl9XSURUSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh3aWR0aEluVHdpcHMgPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoSW5Ud2lwcyA9IFdvcmtzaGVldEZpbGUuTUlOX1dJRFRIO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xzICs9IGA8Y29sIG1pbj1cIiR7KGogKyAxKX1cIiBtYXg9XCIkeyhqICsgMSl9XCIgd2lkdGg9XCIke3dpZHRoSW5Ud2lwc31cIiBjdXN0b21XaWR0aD1cIjFcIi8+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHMgKz0gYDxjb2wgbWluPVwiMVwiIG1heD1cIiR7d29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudH1cIiB3aWR0aD1cIjE1XCIgY3VzdG9tV2lkdGg9XCIxXCIvPmA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29scyArPSAnPC9jb2xzPic7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IHdvcmtzaGVldERhdGEuaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW47XG4gICAgICAgICAgICAgICAgY29uc3QgZnJvemVuQ29sdW1uQ291bnQgPSBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiArIDE7XG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0Q2VsbCA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihmcm96ZW5Db2x1bW5Db3VudCkgKyBmcmVlemVIZWFkZXJzO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleE9mTGFzdFBpbm5lZENvbHVtbiAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgIXdvcmtzaGVldERhdGEub3B0aW9ucy5pZ25vcmVQaW5uaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICF3b3Jrc2hlZXREYXRhLm9wdGlvbnMuaWdub3JlQ29sdW1uc09yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlZXplUGFuZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBgPHBhbmUgeFNwbGl0PVwiJHtmcm96ZW5Db2x1bW5Db3VudH1cIiB5U3BsaXQ9XCIke2ZyZWV6ZUhlYWRlcnMgLSAxfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGVmdENlbGw9XCIke2ZpcnN0Q2VsbH1cIiBhY3RpdmVQYW5lPVwidG9wUmlnaHRcIiBzdGF0ZT1cImZyb3plblwiLz5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod29ya3NoZWV0RGF0YS5vcHRpb25zLmZyZWV6ZUhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RDZWxsID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKDApICsgZnJlZXplSGVhZGVycztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmVlemVQYW5lID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGA8cGFuZSB4U3BsaXQ9XCIwXCIgeVNwbGl0PVwiJHtmcmVlemVIZWFkZXJzIC0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExlZnRDZWxsPVwiJHtmaXJzdENlbGx9XCIgYWN0aXZlUGFuZT1cInRvcFJpZ2h0XCIgc3RhdGU9XCJmcm96ZW5cIi8+YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gd29ya3NoZWV0RGF0YS5vcHRpb25zLmNvbHVtbldpZHRoID8gd29ya3NoZWV0RGF0YS5vcHRpb25zLmNvbHVtbldpZHRoIDogMjA7XG4gICAgICAgICAgICAgICAgY29scyArPSBgPGNvbHM+PGNvbCBtaW49XCIxXCIgbWF4PVwiJHt3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50fVwiIHdpZHRoPVwiJHtjb2x1bW5XaWR0aH1cIiBjdXN0b21XaWR0aD1cIjFcIi8+PC9jb2xzPmA7XG4gICAgICAgICAgICAgICAgaWYgKHdvcmtzaGVldERhdGEub3B0aW9ucy5mcmVlemVIZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2VsbCA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbigwKSArIGZyZWV6ZUhlYWRlcnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlZXplUGFuZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBgPHBhbmUgeFNwbGl0PVwiMFwiIHlTcGxpdD1cIiR7ZnJlZXplSGVhZGVycyAtIDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0Q2VsbD1cIiR7Zmlyc3RDZWxsfVwiIGFjdGl2ZVBhbmU9XCJ0b3BSaWdodFwiIHN0YXRlPVwiZnJvemVuXCIvPmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhUmVjb3Jkc0FzeW5jKHdvcmtzaGVldERhdGEsIChyb3dzKSA9PiB7XG4gICAgICAgICAgICAgICAgc2hlZXREYXRhICs9IHJvd3M7XG4gICAgICAgICAgICAgICAgc2hlZXREYXRhICs9ICc8L3NoZWV0RGF0YT4nO1xuXG4gICAgICAgICAgICAgICAgaWYgKGhhc011bHRpQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNoZWV0RGF0YSArPSBgPG1lcmdlQ2VsbHMgY291bnQ9XCIke3RoaXMubWVyZ2VDZWxsc0NvdW50ZXJ9XCI+JHt0aGlzLm1lcmdlQ2VsbFN0cn08L21lcmdlQ2VsbHM+YDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKGNvbHMsIHNoZWV0RGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0RhdGFSZWNvcmRzQXN5bmMod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgZG9uZTogKHJvd3M6IHN0cmluZykgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCByb3dEYXRhQXJyID0gW107XG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICB3b3Jrc2hlZXREYXRhLm9wdGlvbnMucm93SGVpZ2h0O1xuICAgICAgICB0aGlzLnJvd0hlaWdodCA9IGhlaWdodCA/ICcgaHQ9XCInICsgaGVpZ2h0ICsgJ1wiIGN1c3RvbUhlaWdodD1cIjFcIicgOiAnJztcblxuICAgICAgICBjb25zdCBpc0hpZXJhcmNoaWNhbEdyaWQgPVxuICAgICAgICAgICAgd29ya3NoZWV0RGF0YS5kYXRhLnNvbWUociA9PiByLnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuSGVhZGVyUmVjb3JkIHx8IHIudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkKTtcbiAgICAgICAgY29uc3QgaGFzVXNlclNldEluZGV4ID0gd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zLnNvbWUoYyA9PiBjLmV4cG9ydEluZGV4ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgIGxldCByZWNvcmRIZWFkZXJzID0gW107XG5cbiAgICAgICAgeWllbGRpbmdMb29wKHdvcmtzaGVldERhdGEucm93Q291bnQgLSAxLCAxMDAwLFxuICAgICAgICAgICAgKGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzSGllcmFyY2hpY2FsR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVXNlclNldEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRIZWFkZXJzID0gd29ya3NoZWV0RGF0YS5yb290S2V5cztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZEhlYWRlcnMgPSB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy5oZWFkZXJUeXBlICE9PSBIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyICYmICFjLnNraXApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleC1iLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXgtYi5waW5uZWRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGMgPT4gYy5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNvcmQgPSB3b3Jrc2hlZXREYXRhLmRhdGFbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhlYWRlclJlY29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkT3duZXIgPSB3b3Jrc2hlZXREYXRhLm93bmVycy5nZXQocmVjb3JkLm93bmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc011bHRpQ29sdW1uSGVhZGVycyA9IHJlY29yZE93bmVyLmNvbHVtbnMuc29tZShjID0+IGMuaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNNdWx0aUNvbHVtbkhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhHcmlkUHJpbnRNdWx0aUNvbEhlYWRlcnMod29ya3NoZWV0RGF0YSwgcm93RGF0YUFyciwgcmVjb3JkLCByZWNvcmRPd25lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZWNvcmRIZWFkZXJzID0gT2JqZWN0LmtleXMod29ya3NoZWV0RGF0YS5kYXRhW2ldLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJvd0RhdGFBcnIucHVzaCh0aGlzLnByb2Nlc3NSb3cod29ya3NoZWV0RGF0YSwgaSwgcmVjb3JkSGVhZGVycywgaXNIaWVyYXJjaGljYWxHcmlkKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUocm93RGF0YUFyci5qb2luKCcnKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaEdyaWRQcmludE11bHRpQ29sSGVhZGVycyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCByb3dEYXRhQXJyOiBhbnlbXSwgcmVjb3JkOiBJRXhwb3J0UmVjb3JkLFxuICAgICAgICBvd25lcjogSUNvbHVtbkxpc3QpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvd25lci5tYXhMZXZlbDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRMZXZlbCA9IHJlY29yZC5sZXZlbDtcbiAgICAgICAgICAgIGNvbnN0IG91dGxpbmVMZXZlbCA9IHJlY29yZExldmVsID4gMCA/IGAgb3V0bGluZUxldmVsPVwiJHtyZWNvcmRMZXZlbH1cImAgOiAnJztcbiAgICAgICAgICAgIHRoaXMubWF4T3V0bGluZUxldmVsID0gdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPCByZWNvcmRMZXZlbCA/IHJlY29yZExldmVsIDogdGhpcy5tYXhPdXRsaW5lTGV2ZWw7XG4gICAgICAgICAgICBjb25zdCBzSGlkZGVuID0gcmVjb3JkLmhpZGRlbiA/IGAgaGlkZGVuPVwiMVwiYCA6ICcnO1xuXG4gICAgICAgICAgICB0aGlzLnJvd0luZGV4Kys7XG4gICAgICAgICAgICBsZXQgcm93ID0gYDxyb3cgcj1cIiR7dGhpcy5yb3dJbmRleH1cIiR7dGhpcy5yb3dIZWlnaHR9JHtvdXRsaW5lTGV2ZWx9JHtzSGlkZGVufT5gO1xuXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzRm9yTGV2ZWwgPSBvd25lci5jb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IChjLmxldmVsIDwgaiAmJlxuICAgICAgICAgICAgICAgICAgICBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgfHwgYy5sZXZlbCA9PT0gaikgJiYgYy5jb2x1bW5TcGFuID4gMCAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KTtcblxuICAgICAgICAgICAgbGV0IHN0YXJ0VmFsdWUgPSAwICsgcmVjb3JkLmxldmVsO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRDb2wgb2YgaGVhZGVyc0ZvckxldmVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2wubGV2ZWwgPT09IGopIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbkNvb3JkaW5hdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUpICsgdGhpcy5yb3dJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnkuc2F2ZVZhbHVlKGN1cnJlbnRDb2wuaGVhZGVyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcm93ICs9IGA8YyByPVwiJHtjb2x1bW5Db29yZGluYXRlfVwiIHM9XCIzXCIgdD1cInNcIj48dj4ke2NvbHVtblZhbHVlfTwvdj48L2M+YDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaiAhPT0gb3duZXIubWF4TGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsc0NvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAgPG1lcmdlQ2VsbCByZWY9XCIke2NvbHVtbkNvb3JkaW5hdGV9OmA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihzdGFydFZhbHVlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnJvd0luZGV4ICsgb3duZXIubWF4TGV2ZWwgLSBjdXJyZW50Q29sLmxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBjdXJyZW50Q29sLmNvbHVtblNwYW47IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUgKyBrKSArIHRoaXMucm93SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyArPSBgPGMgcj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX1cIiBzPVwiM1wiIC8+YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAke2NvbHVtbkNvb3JkaW5hdGV9XCIgLz5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZSArPSBjdXJyZW50Q29sLmNvbHVtblNwYW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cgKz0gYDwvcm93PmA7XG4gICAgICAgICAgICByb3dEYXRhQXJyLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1Jvdyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCBpOiBudW1iZXIsIGhlYWRlcnNGb3JMZXZlbDogYW55W10sIGlzSGllcmFyY2hpY2FsR3JpZDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCByZWNvcmQgPSB3b3Jrc2hlZXREYXRhLmRhdGFbaV07XG5cbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IG5ldyBBcnJheSh3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50ICsgMik7XG5cbiAgICAgICAgY29uc3Qgcm93TGV2ZWwgPSByZWNvcmQubGV2ZWw7XG4gICAgICAgIGNvbnN0IG91dGxpbmVMZXZlbCA9IHJvd0xldmVsID4gMCA/IGAgb3V0bGluZUxldmVsPVwiJHtyb3dMZXZlbH1cImAgOiAnJztcbiAgICAgICAgdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPSB0aGlzLm1heE91dGxpbmVMZXZlbCA8IHJvd0xldmVsID8gcm93TGV2ZWwgOiB0aGlzLm1heE91dGxpbmVMZXZlbDtcblxuICAgICAgICBjb25zdCBzSGlkZGVuID0gcmVjb3JkLmhpZGRlbiA/IGAgaGlkZGVuPVwiMVwiYCA6ICcnO1xuXG4gICAgICAgIHRoaXMucm93SW5kZXgrKztcbiAgICAgICAgcm93RGF0YVswXSA9XG4gICAgICAgICAgICBgPHJvdyByPVwiJHt0aGlzLnJvd0luZGV4fVwiJHt0aGlzLnJvd0hlaWdodH0ke291dGxpbmVMZXZlbH0ke3NIaWRkZW59PmA7XG5cbiAgICAgICAgY29uc3Qga2V5cyA9IHdvcmtzaGVldERhdGEuaXNTcGVjaWFsRGF0YSA/IFtyZWNvcmQuZGF0YV0gOiBoZWFkZXJzRm9yTGV2ZWw7XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBqICsgKGlzSGllcmFyY2hpY2FsR3JpZCA/IHJvd0xldmVsIDogMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRhID0gdGhpcy5nZXRDZWxsRGF0YSh3b3Jrc2hlZXREYXRhLCBpLCBjb2wsIGtleXNbal0pO1xuXG4gICAgICAgICAgICByb3dEYXRhW2ogKyAxXSA9IGNlbGxEYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgcm93RGF0YVtrZXlzLmxlbmd0aCArIDFdID0gJzwvcm93Pic7XG5cbiAgICAgICAgcmV0dXJuIHJvd0RhdGEuam9pbignJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDZWxsRGF0YSh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCByb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sdW1uKSArICh0aGlzLnJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgZnVsbFJvdyA9IHdvcmtzaGVldERhdGEuZGF0YVtyb3ddO1xuICAgICAgICBjb25zdCBpc0hlYWRlclJlY29yZCA9IGZ1bGxSb3cudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQ7XG5cbiAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gd29ya3NoZWV0RGF0YS5pc1NwZWNpYWxEYXRhID9cbiAgICAgICAgICAgIGZ1bGxSb3cuZGF0YSA6XG4gICAgICAgICAgICBmdWxsUm93LmRhdGFba2V5XTtcblxuICAgICAgICBpZiAoY2VsbFZhbHVlID09PSB1bmRlZmluZWQgfHwgY2VsbFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxjIHI9XCIke2NvbHVtbk5hbWV9XCIgcz1cIjFcIi8+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNhdmVkVmFsdWUgPSBkaWN0aW9uYXJ5LnNhdmVWYWx1ZShjZWxsVmFsdWUsIGlzSGVhZGVyUmVjb3JkKTtcbiAgICAgICAgICAgIGNvbnN0IGlzU2F2ZWRBc1N0cmluZyA9IHNhdmVkVmFsdWUgIT09IC0xO1xuXG4gICAgICAgICAgICBjb25zdCBpc1NhdmVkQXNEYXRlID0gIWlzU2F2ZWRBc1N0cmluZyAmJiBjZWxsVmFsdWUgaW5zdGFuY2VvZiBEYXRlO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBpc1NhdmVkQXNTdHJpbmcgPyBzYXZlZFZhbHVlIDogY2VsbFZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoaXNTYXZlZEFzRGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVab25lT2Zmc2V0ID0gdmFsdWUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzb1N0cmluZyA9IChuZXcgRGF0ZSh2YWx1ZSAtIHRpbWVab25lT2Zmc2V0KSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGlzb1N0cmluZy5zdWJzdHJpbmcoMCwgaXNvU3RyaW5nLmluZGV4T2YoJy4nKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBpc1NhdmVkQXNTdHJpbmcgPyBgIHQ9XCJzXCJgIDogaXNTYXZlZEFzRGF0ZSA/IGAgdD1cImRcImAgOiAnJztcblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gaXNIZWFkZXJSZWNvcmQgPyBgIHM9XCIzXCJgIDogaXNTYXZlZEFzU3RyaW5nID8gJycgOiBpc1NhdmVkQXNEYXRlID8gYCBzPVwiMlwiYCA6IGAgcz1cIjFcImA7XG5cbiAgICAgICAgICAgIHJldHVybiBgPGMgcj1cIiR7Y29sdW1uTmFtZX1cIiR7dHlwZX0ke2Zvcm1hdH0+PHY+JHt2YWx1ZX08L3Y+PC9jPmA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgU3R5bGVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwKSB7XG4gICAgICAgIGZvbGRlci5maWxlKCdzdHlsZXMueG1sJywgRXhjZWxTdHJpbmdzLmdldFN0eWxlcygpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya2Jvb2tGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwLCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGZvbGRlci5maWxlKCd3b3JrYm9vay54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0V29ya2Jvb2sod29ya3NoZWV0RGF0YS5vcHRpb25zLndvcmtzaGVldE5hbWUpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgQ29udGVudFR5cGVzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBKU1ppcCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBmb2xkZXIuZmlsZSgnW0NvbnRlbnRfVHlwZXNdLnhtbCcsIEV4Y2VsU3RyaW5ncy5nZXRDb250ZW50VHlwZXNYTUwoIXdvcmtzaGVldERhdGEuaXNFbXB0eSwgd29ya3NoZWV0RGF0YS5vcHRpb25zLmV4cG9ydEFzVGFibGUpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgU2hhcmVkU3RyaW5nc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgY29uc3QgZGljdCA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIGNvbnN0IHNvcnRlZFZhbHVlcyA9IGRpY3QuZ2V0S2V5cygpO1xuICAgICAgICBjb25zdCBzaGFyZWRTdHJpbmdzID0gbmV3IEFycmF5PHN0cmluZz4oc29ydGVkVmFsdWVzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzb3J0ZWRWYWx1ZXMpIHtcbiAgICAgICAgICAgIHNoYXJlZFN0cmluZ3NbZGljdC5nZXRTYW5pdGl6ZWRWYWx1ZSh2YWx1ZSldID0gJzxzaT48dD4nICsgdmFsdWUgKyAnPC90Pjwvc2k+JztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvbGRlci5maWxlKCdzaGFyZWRTdHJpbmdzLnhtbCcsIEV4Y2VsU3RyaW5ncy5nZXRTaGFyZWRTdHJpbmdYTUwoXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnN0cmluZ3NDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZFZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRTdHJpbmdzLmpvaW4oJycpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWJsZXNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwLCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkNvdW50ID0gd29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudDtcbiAgICAgICAgY29uc3QgbGFzdENvbHVtbiA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2x1bW5Db3VudCAtIDEpICsgd29ya3NoZWV0RGF0YS5yb3dDb3VudDtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uID0gJ0ExOicgKyBsYXN0Q29sdW1uO1xuICAgICAgICBjb25zdCBoYXNVc2VyU2V0SW5kZXggPSB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnMuc29tZShjID0+IGMuZXhwb3J0SW5kZXggIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGhhc1VzZXJTZXRJbmRleFxuICAgICAgICAgICAgPyB3b3Jrc2hlZXREYXRhLnJvb3RLZXlzXG4gICAgICAgICAgICA6IHdvcmtzaGVldERhdGEub3duZXIuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAhYy5za2lwKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KVxuICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjLmhlYWRlcik7XG5cbiAgICAgICAgbGV0IHNvcnRTdHJpbmcgPSAnJztcblxuICAgICAgICBsZXQgdGFibGVDb2x1bW5zID0gJzx0YWJsZUNvbHVtbnMgY291bnQ9XCInICsgY29sdW1uQ291bnQgKyAnXCI+JztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICB2YWx1ZXNbaV07XG4gICAgICAgICAgICB0YWJsZUNvbHVtbnMgKz0gJzx0YWJsZUNvbHVtbiBpZD1cIicgKyAoaSArIDEpICsgJ1wiIG5hbWU9XCInICsgdmFsdWUgKyAnXCIvPic7XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZUNvbHVtbnMgKz0gJzwvdGFibGVDb2x1bW5zPic7XG5cbiAgICAgICAgaWYgKHdvcmtzaGVldERhdGEuc29ydCkge1xuICAgICAgICAgICAgY29uc3Qgc29ydGluZ0V4cHJlc3Npb24gPSB3b3Jrc2hlZXREYXRhLnNvcnQ7XG4gICAgICAgICAgICBjb25zdCBzYyA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbih2YWx1ZXMuaW5kZXhPZihzb3J0aW5nRXhwcmVzc2lvbi5maWVsZE5hbWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGRpciA9IHNvcnRpbmdFeHByZXNzaW9uLmRpciAtIDE7XG4gICAgICAgICAgICBzb3J0U3RyaW5nID0gYDxzb3J0U3RhdGUgcmVmPVwiQTI6JHtsYXN0Q29sdW1ufVwiPjxzb3J0Q29uZGl0aW9uIGRlc2NlbmRpbmc9XCIke2Rpcn1cIiByZWY9XCIke3NjfTE6JHtzY30xNVwiLz48L3NvcnRTdGF0ZT5gO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9sZGVyLmZpbGUoJ3RhYmxlMS54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0VGFibGVzWE1MKGRpbWVuc2lvbiwgdGFibGVDb2x1bW5zLCBzb3J0U3RyaW5nKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtzaGVldFJlbHNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwKSB7XG4gICAgICAgIGZvbGRlci5maWxlKCdzaGVldDEueG1sLnJlbHMnLCBFeGNlbFN0cmluZ3MuZ2V0V29ya3NoZWV0UmVscygpKTtcbiAgICB9XG59XG4iXX0=
|
|
392
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZXhjZWwvZXhjZWwtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSS9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUE4QixNQUFNLHdDQUF3QyxDQUFDO0FBRWxIOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFDZCxZQUFZLENBQUMsTUFBYTtRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxPQUFPO0lBQ1QsWUFBWSxDQUFDLE1BQWEsRUFBRSxhQUE0QjtRQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ1YsWUFBWSxDQUFDLE1BQWE7UUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLFlBQVksQ0FBQyxNQUFhLEVBQUUsYUFBNEI7UUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQztRQUN6RCxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDWCxZQUFZLENBQUMsTUFBYTtRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQTFCO1FBRVksb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFDcEIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVmLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUN0QixhQUFRLEdBQUcsQ0FBQyxDQUFDO0lBMlR6QixDQUFDO0lBelRVLFlBQVksS0FBSSxDQUFDO0lBRWpCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFhLEVBQUUsYUFBNEI7UUFDdEUsT0FBTyxJQUFJLE9BQU8sQ0FBTyxPQUFPLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNoRCxNQUFNLFFBQVEsR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7Z0JBQy9FLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssZ0JBQWdCLENBQUMsc0JBQXNCLENBQUM7Z0JBRW5HLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxXQUFXLENBQzlDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDdEcsT0FBTyxFQUFFLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGdCQUFnQixDQUFDLGFBQTRCLEVBQUUsSUFBK0M7UUFDbEcsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUM7UUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFFbEIsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLFNBQVMsSUFBSSxjQUFjLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN2QjthQUFNO1lBQ0gsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQztZQUNsQyxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDO1lBQ2xHLE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxDQUFDLG9CQUFvQixDQUFDO1lBQ2hFLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUVqRixNQUFNLE1BQU0sR0FBSSxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUNoRCxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRWxFLFNBQVMsSUFBSSxhQUFhLENBQUM7WUFFM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsU0FBUyxJQUFJLFdBQVcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUM7Z0JBRTNELE1BQU0sZUFBZSxHQUFHLG9CQUFvQixDQUFDLENBQUM7b0JBQzFDLEtBQUssQ0FBQyxPQUFPO3lCQUNSLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDO3dCQUNyQixDQUFDLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzt5QkFDbEcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO3lCQUMzQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNwRCxlQUFlLENBQUMsQ0FBQzt3QkFDYixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3BDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOzZCQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7NkJBQzNDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUUzRCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBRW5CLEtBQUssTUFBTSxVQUFVLElBQUksZUFBZSxFQUFFO29CQUN0QyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO3dCQUN4QixJQUFJLGdCQUFnQixDQUFDO3dCQUNyQixnQkFBZ0IsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7d0JBQzNFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDbEUsU0FBUyxJQUFJLFNBQVMsZ0JBQWdCLElBQUksUUFBUSxhQUFhLFdBQVcsVUFBVSxDQUFDO3dCQUVyRixJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsUUFBUSxFQUFFOzRCQUN0QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzs0QkFDekIsSUFBSSxDQUFDLFlBQVksSUFBSSxvQkFBb0IsZ0JBQWdCLEdBQUcsQ0FBQzs0QkFFN0QsSUFBSSxVQUFVLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxZQUFZLEVBQUU7Z0NBQ25ELGdCQUFnQixHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDOzZCQUNyRjtpQ0FBTTtnQ0FDSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQ0FDNUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQ0FDL0UsU0FBUyxJQUFJLFNBQVMsZ0JBQWdCLElBQUksUUFBUSxLQUFLLENBQUM7aUNBQzNEOzZCQUNKOzRCQUVELElBQUksQ0FBQyxZQUFZLElBQUksR0FBRyxnQkFBZ0IsTUFBTSxDQUFDO3lCQUNsRDtxQkFDSjtvQkFFRCxVQUFVLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQztpQkFDdkM7Z0JBRUQsU0FBUyxJQUFJLFFBQVEsQ0FBQzthQUN6QjtZQUVELE1BQU0sc0JBQXNCLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ25HLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUzRixJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxTQUFTO29CQUNWLEtBQUssR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFbkgsSUFBSSxJQUFJLFFBQVEsQ0FBQztnQkFFakIsSUFBSSxDQUFDLG9CQUFvQixFQUFFO29CQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDaEQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDekMscURBQXFEO3dCQUNyRCxJQUFJLFlBQVksR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQzs0QkFDNUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQzs0QkFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDakYsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFOzRCQUNyQixZQUFZLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQzt5QkFDMUM7d0JBRUQsSUFBSSxJQUFJLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksWUFBWSxxQkFBcUIsQ0FBQztxQkFDOUY7aUJBQ0o7cUJBQU07b0JBQ0gsSUFBSSxJQUFJLHFCQUFxQixhQUFhLENBQUMsV0FBVyxnQ0FBZ0MsQ0FBQztpQkFDMUY7Z0JBRUQsSUFBSSxJQUFJLFNBQVMsQ0FBQztnQkFFbEIsTUFBTSx1QkFBdUIsR0FBRyxhQUFhLENBQUMsdUJBQXVCLENBQUM7Z0JBQ3RFLE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsYUFBYSxDQUFDO2dCQUMvRSxJQUFJLHVCQUF1QixLQUFLLENBQUMsQ0FBQztvQkFDOUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWE7b0JBQ3BDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtvQkFDM0MsSUFBSSxDQUFDLFVBQVU7d0JBQ1gsaUJBQWlCLGlCQUFpQixhQUFhLGFBQWEsR0FBRyxDQUFDO3dDQUNoRCxTQUFTLDBDQUEwQyxDQUFDO2lCQUMzRTtxQkFBTSxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO29CQUM1QyxTQUFTLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUM7b0JBQzNELElBQUksQ0FBQyxVQUFVO3dCQUNYLDRCQUE0QixhQUFhLEdBQUcsQ0FBQzt3Q0FDN0IsU0FBUywwQ0FBMEMsQ0FBQztpQkFDM0U7YUFDSjtpQkFBTTtnQkFDSCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDL0YsSUFBSSxJQUFJLDJCQUEyQixhQUFhLENBQUMsV0FBVyxZQUFZLFdBQVcsNEJBQTRCLENBQUM7Z0JBQ2hILElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7b0JBQ3JDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDO29CQUNqRSxJQUFJLENBQUMsVUFBVTt3QkFDWCw0QkFBNEIsYUFBYSxHQUFHLENBQUM7d0NBQzdCLFNBQVMsMENBQTBDLENBQUM7aUJBQzNFO2FBQ0o7WUFFRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2pELFNBQVMsSUFBSSxJQUFJLENBQUM7Z0JBQ2xCLFNBQVMsSUFBSSxjQUFjLENBQUM7Z0JBRTVCLElBQUksb0JBQW9CLEVBQUU7b0JBQ3RCLFNBQVMsSUFBSSxzQkFBc0IsSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksQ0FBQyxZQUFZLGVBQWUsQ0FBQztpQkFDbEc7Z0JBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QixDQUFDLGFBQTRCLEVBQUUsSUFBNEI7UUFDdEYsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sTUFBTSxHQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFdkUsTUFBTSxrQkFBa0IsR0FDcEIsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDakksTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUUzRixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFFdkIsWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFDekMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNGLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDckIsSUFBSSxlQUFlLEVBQUU7b0JBQ2pCLGFBQWEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDO2lCQUMxQztxQkFBTTtvQkFDSCxhQUFhLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPO3lCQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7eUJBQ3JFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQzt5QkFDekMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO3lCQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzFCO2FBQ0o7aUJBQU07Z0JBQ0gsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFckMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFlBQVksRUFBRTtvQkFDL0MsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMzRCxNQUFNLHFCQUFxQixHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBRXRILElBQUkscUJBQXFCLEVBQUU7d0JBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztxQkFDbEY7aUJBQ0o7Z0JBRUQsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMzRDtZQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDMUYsQ0FBQyxFQUNELEdBQUcsRUFBRTtZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8seUJBQXlCLENBQUMsYUFBNEIsRUFBRSxVQUFpQixFQUFFLE1BQXFCLEVBQ3BHLEtBQWtCO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDakMsTUFBTSxZQUFZLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQy9GLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRW5ELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLEdBQUcsR0FBRyxXQUFXLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLEdBQUcsT0FBTyxHQUFHLENBQUM7WUFFakYsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU87aUJBQ2hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDO2dCQUNyQixDQUFDLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztpQkFDbEcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO2lCQUMzQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVuRCxJQUFJLFVBQVUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUVsQyxLQUFLLE1BQU0sVUFBVSxJQUFJLGVBQWUsRUFBRTtnQkFDdEMsSUFBSSxVQUFVLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtvQkFDeEIsSUFBSSxnQkFBZ0IsQ0FBQztvQkFDckIsZ0JBQWdCO3dCQUNaLFlBQVksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFFNUQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDcEYsR0FBRyxJQUFJLFNBQVMsZ0JBQWdCLG9CQUFvQixXQUFXLFVBQVUsQ0FBQztvQkFFMUUsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLFFBQVEsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxZQUFZLElBQUksb0JBQW9CLGdCQUFnQixHQUFHLENBQUM7d0JBRTdELElBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsWUFBWSxFQUFFOzRCQUNuRCxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztnQ0FDdEQsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUMzRDs2QkFBTTs0QkFDSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQ0FDNUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQ0FDL0UsR0FBRyxJQUFJLFNBQVMsZ0JBQWdCLFlBQVksQ0FBQzs2QkFDaEQ7eUJBQ0o7d0JBRUQsSUFBSSxDQUFDLFlBQVksSUFBSSxHQUFHLGdCQUFnQixNQUFNLENBQUM7cUJBQ2xEO2lCQUNKO2dCQUVELFVBQVUsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDO2FBQ3ZDO1lBQ0QsR0FBRyxJQUFJLFFBQVEsQ0FBQztZQUNoQixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hCO0lBQ0wsQ0FBQztJQUVPLFVBQVUsQ0FBQyxhQUE0QixFQUFFLENBQVMsRUFBRSxlQUFzQixFQUFFLGtCQUEyQjtRQUMzRyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFekQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUM5QixNQUFNLFlBQVksR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN2RSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFekYsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFbkQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDTixXQUFXLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLEdBQUcsT0FBTyxHQUFHLENBQUM7UUFFM0UsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUUzRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVwRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWxFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQzdCO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBRXBDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU8sV0FBVyxDQUFDLGFBQTRCLEVBQUUsR0FBVyxFQUFFLE1BQWMsRUFBRSxHQUFXO1FBQ3RGLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUM7UUFDaEQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RSxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsWUFBWSxDQUFDO1FBRXRFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLElBQUksU0FBUyxLQUFLLFNBQVMsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO1lBQy9DLE9BQU8sU0FBUyxVQUFVLFdBQVcsQ0FBQztTQUN6QzthQUFNO1lBQ0gsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDbkUsTUFBTSxlQUFlLEdBQUcsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRTFDLE1BQU0sYUFBYSxHQUFHLENBQUMsZUFBZSxJQUFJLFNBQVMsWUFBWSxJQUFJLENBQUM7WUFFcEUsSUFBSSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUVyRCxJQUFJLGFBQWEsRUFBRTtnQkFDZixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxLQUFLLENBQUM7Z0JBQ3pELE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25FLEtBQUssR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDMUQ7WUFFRCxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUV4RSxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFFdEcsT0FBTyxTQUFTLFVBQVUsSUFBSSxJQUFJLEdBQUcsTUFBTSxPQUFPLEtBQUssVUFBVSxDQUFDO1NBQ3JFO0lBQ0wsQ0FBQzs7QUFsVWMsdUJBQVMsR0FBRyxJQUFJLENBQUM7QUFxVXBDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDWCxZQUFZLENBQUMsTUFBYTtRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ2QsWUFBWSxDQUFDLE1BQWEsRUFBRSxhQUE0QjtRQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFDbEIsWUFBWSxDQUFDLE1BQWEsRUFBRSxhQUE0QjtRQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3JJLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixZQUFZLENBQUMsTUFBYSxFQUFFLGFBQTRCO1FBQzNELE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUM7UUFDMUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLE1BQU0sYUFBYSxHQUFHLElBQUksS0FBSyxDQUFTLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3RCxLQUFLLE1BQU0sS0FBSyxJQUFJLFlBQVksRUFBRTtZQUM5QixhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssR0FBRyxXQUFXLENBQUM7U0FDbEY7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxrQkFBa0IsQ0FDaEQsSUFBSSxDQUFDLFlBQVksRUFDakIsWUFBWSxDQUFDLE1BQU0sRUFDbkIsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUMxQixDQUFDO0lBQ2xCLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFDWixZQUFZLENBQUMsTUFBYSxFQUFFLGFBQTRCO1FBQzNELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDOUMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUN6RixNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsVUFBVSxDQUFDO1FBQ3JDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUM7UUFDM0YsTUFBTSxNQUFNLEdBQUcsZUFBZTtZQUMxQixDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVE7WUFDeEIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTztpQkFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUNwQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7aUJBQzNDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztpQkFDN0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTVCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVwQixJQUFJLFlBQVksR0FBRyx1QkFBdUIsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ2hFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxLQUFLLEdBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLFlBQVksSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUM5RTtRQUVELFlBQVksSUFBSSxpQkFBaUIsQ0FBQztRQUVsQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUU7WUFDcEIsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQzdDLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDdEMsVUFBVSxHQUFHLHNCQUFzQixVQUFVLGdDQUFnQyxHQUFHLFVBQVUsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLENBQUM7U0FDMUg7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsWUFBWSxDQUFDLE1BQWE7UUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElFeGNlbEZpbGUgfSBmcm9tICcuL2V4Y2VsLWludGVyZmFjZXMnO1xuaW1wb3J0IHsgRXhjZWxTdHJpbmdzIH0gZnJvbSAnLi9leGNlbC1zdHJpbmdzJztcbmltcG9ydCB7IFdvcmtzaGVldERhdGEgfSBmcm9tICcuL3dvcmtzaGVldC1kYXRhJztcblxuaW1wb3J0ICogYXMgSlNaaXAgZnJvbSAnanN6aXAnO1xuaW1wb3J0IHsgeWllbGRpbmdMb29wIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBIZWFkZXJUeXBlLCBFeHBvcnRSZWNvcmRUeXBlLCBJRXhwb3J0UmVjb3JkLCBJQ29sdW1uTGlzdCB9IGZyb20gJy4uL2V4cG9ydGVyLWNvbW1vbi9iYXNlLWV4cG9ydC1zZXJ2aWNlJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb290UmVsc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogSlNaaXApIHtcbiAgICAgICAgZm9sZGVyLmZpbGUoJy5yZWxzJywgRXhjZWxTdHJpbmdzLmdldFJlbHMoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwcEZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgZm9sZGVyLmZpbGUoJ2FwcC54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0QXBwKHdvcmtzaGVldERhdGEub3B0aW9ucy53b3Jrc2hlZXROYW1lKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIENvcmVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwKSB7XG4gICAgICAgIGZvbGRlci5maWxlKCdjb3JlLnhtbCcsIEV4Y2VsU3RyaW5ncy5nZXRDb3JlKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrYm9va1JlbHNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwLCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc1NoYXJlZFN0cmluZ3MgPSB3b3Jrc2hlZXREYXRhLmlzRW1wdHkgPT09IGZhbHNlO1xuICAgICAgICBmb2xkZXIuZmlsZSgnd29ya2Jvb2sueG1sLnJlbHMnLCBFeGNlbFN0cmluZ3MuZ2V0V29ya2Jvb2tSZWxzKGhhc1NoYXJlZFN0cmluZ3MpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgVGhlbWVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwKSB7XG4gICAgICAgIGZvbGRlci5maWxlKCd0aGVtZTEueG1sJywgRXhjZWxTdHJpbmdzLmdldFRoZW1lKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc2hlZXRGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgTUlOX1dJRFRIID0gOC40MztcbiAgICBwcml2YXRlIG1heE91dGxpbmVMZXZlbCA9IDA7XG4gICAgcHJpdmF0ZSBkaW1lbnNpb24gPSAnJztcbiAgICBwcml2YXRlIGZyZWV6ZVBhbmUgPSAnJztcbiAgICBwcml2YXRlIHJvd0hlaWdodCA9ICcnO1xuXG4gICAgcHJpdmF0ZSBtZXJnZUNlbGxTdHIgPSAnJztcbiAgICBwcml2YXRlIG1lcmdlQ2VsbHNDb3VudGVyID0gMDtcbiAgICBwcml2YXRlIHJvd0luZGV4ID0gMDtcblxuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoKSB7fVxuXG4gICAgcHVibGljIGFzeW5jIHdyaXRlRWxlbWVudEFzeW5jKGZvbGRlcjogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlRGF0YUFzeW5jKHdvcmtzaGVldERhdGEsIChjb2xzLCByb3dzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVGFibGUgPSAhd29ya3NoZWV0RGF0YS5pc0VtcHR5ICYmIHdvcmtzaGVldERhdGEub3B0aW9ucy5leHBvcnRBc1RhYmxlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzSGllcmFyY2hpY2FsR3JpZCA9IHdvcmtzaGVldERhdGEuZGF0YVswXT8udHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkO1xuXG4gICAgICAgICAgICAgICAgZm9sZGVyLmZpbGUoJ3NoZWV0MS54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0U2hlZXRYTUwoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uLCB0aGlzLmZyZWV6ZVBhbmUsIGNvbHMsIHJvd3MsIGhhc1RhYmxlLCB0aGlzLm1heE91dGxpbmVMZXZlbCwgaXNIaWVyYXJjaGljYWxHcmlkKSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZURhdGFBc3luYyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCBkb25lOiAoY29sczogc3RyaW5nLCBzaGVldERhdGE6IHN0cmluZykgPT4gdm9pZCkge1xuICAgICAgICBsZXQgc2hlZXREYXRhID0gJyc7XG4gICAgICAgIGxldCBjb2xzID0gJyc7XG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB3b3Jrc2hlZXREYXRhLmRhdGFEaWN0aW9uYXJ5O1xuICAgICAgICB0aGlzLnJvd0luZGV4ID0gMDtcblxuICAgICAgICBpZiAod29ya3NoZWV0RGF0YS5pc0VtcHR5KSB7XG4gICAgICAgICAgICBzaGVldERhdGEgKz0gJzxzaGVldERhdGEvPic7XG4gICAgICAgICAgICB0aGlzLmRpbWVuc2lvbiA9ICdBMSc7XG4gICAgICAgICAgICBkb25lKCcnLCBzaGVldERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3duZXIgPSB3b3Jrc2hlZXREYXRhLm93bmVyO1xuICAgICAgICAgICAgY29uc3QgaXNIaWVyYXJjaGljYWxHcmlkID0gd29ya3NoZWV0RGF0YS5kYXRhWzBdLnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuSGllcmFyY2hpY2FsR3JpZFJlY29yZDtcbiAgICAgICAgICAgIGNvbnN0IGhhc011bHRpQ29sdW1uSGVhZGVyID0gd29ya3NoZWV0RGF0YS5oYXNNdWx0aUNvbHVtbkhlYWRlcjtcbiAgICAgICAgICAgIGNvbnN0IGhhc1VzZXJTZXRJbmRleCA9IG93bmVyLmNvbHVtbnMuc29tZShjb2wgPT4gY29sLmV4cG9ydEluZGV4ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSAgd29ya3NoZWV0RGF0YS5vcHRpb25zLnJvd0hlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHJvd1N0eWxlID0gaXNIaWVyYXJjaGljYWxHcmlkID8gJyBzPVwiM1wiJyA6ICcnO1xuICAgICAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSBoZWlnaHQgPyBgIGh0PVwiJHtoZWlnaHR9XCIgY3VzdG9tSGVpZ2h0PVwiMVwiYCA6ICcnO1xuXG4gICAgICAgICAgICBzaGVldERhdGEgKz0gYDxzaGVldERhdGE+YDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gb3duZXIubWF4TGV2ZWw7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMucm93SW5kZXgrKztcbiAgICAgICAgICAgICAgICBzaGVldERhdGEgKz0gYDxyb3cgcj1cIiR7dGhpcy5yb3dJbmRleH1cIiR7dGhpcy5yb3dIZWlnaHR9PmA7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzRm9yTGV2ZWwgPSBoYXNNdWx0aUNvbHVtbkhlYWRlciA/XG4gICAgICAgICAgICAgICAgICAgIG93bmVyLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAoYy5sZXZlbCA8IGkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgfHwgYy5sZXZlbCA9PT0gaSkgJiYgYy5jb2x1bW5TcGFuID4gMCAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCkgOlxuICAgICAgICAgICAgICAgICAgICBoYXNVc2VyU2V0SW5kZXggP1xuICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIuY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5za2lwKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBvd25lci5jb2x1bW5zLmZpbHRlcihjID0+ICFjLnNraXApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5waW5uZWRJbmRleCAtIGIucGlubmVkSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0VmFsdWUgPSAwO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjdXJyZW50Q29sIG9mIGhlYWRlcnNGb3JMZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbC5sZXZlbCA9PT0gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbkNvb3JkaW5hdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUpICsgdGhpcy5yb3dJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gZGljdGlvbmFyeS5zYXZlVmFsdWUoY3VycmVudENvbC5oZWFkZXIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hlZXREYXRhICs9IGA8YyByPVwiJHtjb2x1bW5Db29yZGluYXRlfVwiJHtyb3dTdHlsZX0gdD1cInNcIj48dj4ke2NvbHVtblZhbHVlfTwvdj48L2M+YDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IG93bmVyLm1heExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxzQ291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAgPG1lcmdlQ2VsbCByZWY9XCIke2NvbHVtbkNvb3JkaW5hdGV9OmA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbC5oZWFkZXJUeXBlID09PSBIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUpICsgKG93bmVyLm1heExldmVsICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBjdXJyZW50Q29sLmNvbHVtblNwYW47IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihzdGFydFZhbHVlICsgaykgKyB0aGlzLnJvd0luZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlZXREYXRhICs9IGA8YyByPVwiJHtjb2x1bW5Db29yZGluYXRlfVwiJHtyb3dTdHlsZX0gLz5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxTdHIgKz0gYCR7Y29sdW1uQ29vcmRpbmF0ZX1cIiAvPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzdGFydFZhbHVlICs9IGN1cnJlbnRDb2wuY29sdW1uU3BhbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzaGVldERhdGEgKz0gYDwvcm93PmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG11bHRpQ29sdW1uSGVhZGVyTGV2ZWwgPSB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzID8gMCA6IG93bmVyLm1heExldmVsO1xuICAgICAgICAgICAgY29uc3QgZnJlZXplSGVhZGVycyA9IHdvcmtzaGVldERhdGEub3B0aW9ucy5mcmVlemVIZWFkZXJzID8gMiArIG11bHRpQ29sdW1uSGVhZGVyTGV2ZWwgOiAxO1xuXG4gICAgICAgICAgICBpZiAoIWlzSGllcmFyY2hpY2FsR3JpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uID1cbiAgICAgICAgICAgICAgICAgICAgJ0ExOicgKyBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4od29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCAtIDEpICsgKHdvcmtzaGVldERhdGEucm93Q291bnQgKyBvd25lci5tYXhMZXZlbCk7XG5cbiAgICAgICAgICAgICAgICBjb2xzICs9ICc8Y29scz4nO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNNdWx0aUNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQ7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBkaWN0aW9uYXJ5LmNvbHVtbldpZHRoc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgd2lkdGggcHJvdmlkZWQgaW4gdGhlIG9wdGlvbnMgaWYgaXQgZXhpc3RzXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgd2lkdGhJblR3aXBzID0gd29ya3NoZWV0RGF0YS5vcHRpb25zLmNvbHVtbldpZHRoICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NoZWV0RGF0YS5vcHRpb25zLmNvbHVtbldpZHRoIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KCgod2lkdGggLyA5NikgKiAxNC40KSwgV29ya3NoZWV0RmlsZS5NSU5fV0lEVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEod2lkdGhJblR3aXBzID4gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aEluVHdpcHMgPSBXb3Jrc2hlZXRGaWxlLk1JTl9XSURUSDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29scyArPSBgPGNvbCBtaW49XCIkeyhqICsgMSl9XCIgbWF4PVwiJHsoaiArIDEpfVwiIHdpZHRoPVwiJHt3aWR0aEluVHdpcHN9XCIgY3VzdG9tV2lkdGg9XCIxXCIvPmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2xzICs9IGA8Y29sIG1pbj1cIjFcIiBtYXg9XCIke3dvcmtzaGVldERhdGEuY29sdW1uQ291bnR9XCIgd2lkdGg9XCIxNVwiIGN1c3RvbVdpZHRoPVwiMVwiLz5gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbHMgKz0gJzwvY29scz4nO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gPSB3b3Jrc2hlZXREYXRhLmluZGV4T2ZMYXN0UGlubmVkQ29sdW1uO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyb3plbkNvbHVtbkNvdW50ID0gaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gKyAxO1xuICAgICAgICAgICAgICAgIGxldCBmaXJzdENlbGwgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oZnJvemVuQ29sdW1uQ291bnQpICsgZnJlZXplSGVhZGVycztcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICF3b3Jrc2hlZXREYXRhLm9wdGlvbnMuaWdub3JlUGlubmluZyAmJlxuICAgICAgICAgICAgICAgICAgICAhd29ya3NoZWV0RGF0YS5vcHRpb25zLmlnbm9yZUNvbHVtbnNPcmRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZWV6ZVBhbmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYDxwYW5lIHhTcGxpdD1cIiR7ZnJvemVuQ29sdW1uQ291bnR9XCIgeVNwbGl0PVwiJHtmcmVlemVIZWFkZXJzIC0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExlZnRDZWxsPVwiJHtmaXJzdENlbGx9XCIgYWN0aXZlUGFuZT1cInRvcFJpZ2h0XCIgc3RhdGU9XCJmcm96ZW5cIi8+YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmtzaGVldERhdGEub3B0aW9ucy5mcmVlemVIZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0Q2VsbCA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbigwKSArIGZyZWV6ZUhlYWRlcnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlZXplUGFuZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBgPHBhbmUgeFNwbGl0PVwiMFwiIHlTcGxpdD1cIiR7ZnJlZXplSGVhZGVycyAtIDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0Q2VsbD1cIiR7Zmlyc3RDZWxsfVwiIGFjdGl2ZVBhbmU9XCJ0b3BSaWdodFwiIHN0YXRlPVwiZnJvemVuXCIvPmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCA/IHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCA6IDIwO1xuICAgICAgICAgICAgICAgIGNvbHMgKz0gYDxjb2xzPjxjb2wgbWluPVwiMVwiIG1heD1cIiR7d29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudH1cIiB3aWR0aD1cIiR7Y29sdW1uV2lkdGh9XCIgY3VzdG9tV2lkdGg9XCIxXCIvPjwvY29scz5gO1xuICAgICAgICAgICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZnJlZXplSGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENlbGwgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oMCkgKyBmcmVlemVIZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZWV6ZVBhbmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYDxwYW5lIHhTcGxpdD1cIjBcIiB5U3BsaXQ9XCIke2ZyZWV6ZUhlYWRlcnMgLSAxfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGVmdENlbGw9XCIke2ZpcnN0Q2VsbH1cIiBhY3RpdmVQYW5lPVwidG9wUmlnaHRcIiBzdGF0ZT1cImZyb3plblwiLz5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YVJlY29yZHNBc3luYyh3b3Jrc2hlZXREYXRhLCAocm93cykgPT4ge1xuICAgICAgICAgICAgICAgIHNoZWV0RGF0YSArPSByb3dzO1xuICAgICAgICAgICAgICAgIHNoZWV0RGF0YSArPSAnPC9zaGVldERhdGE+JztcblxuICAgICAgICAgICAgICAgIGlmIChoYXNNdWx0aUNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBzaGVldERhdGEgKz0gYDxtZXJnZUNlbGxzIGNvdW50PVwiJHt0aGlzLm1lcmdlQ2VsbHNDb3VudGVyfVwiPiR7dGhpcy5tZXJnZUNlbGxTdHJ9PC9tZXJnZUNlbGxzPmA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZShjb2xzLCBzaGVldERhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NEYXRhUmVjb3Jkc0FzeW5jKHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEsIGRvbmU6IChyb3dzOiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgICAgICAgY29uc3Qgcm93RGF0YUFyciA9IFtdO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSAgd29ya3NoZWV0RGF0YS5vcHRpb25zLnJvd0hlaWdodDtcbiAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSBoZWlnaHQgPyAnIGh0PVwiJyArIGhlaWdodCArICdcIiBjdXN0b21IZWlnaHQ9XCIxXCInIDogJyc7XG5cbiAgICAgICAgY29uc3QgaXNIaWVyYXJjaGljYWxHcmlkID1cbiAgICAgICAgICAgIHdvcmtzaGVldERhdGEuZGF0YS5zb21lKHIgPT4gci50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhlYWRlclJlY29yZCB8fCByLnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuSGllcmFyY2hpY2FsR3JpZFJlY29yZCk7XG4gICAgICAgIGNvbnN0IGhhc1VzZXJTZXRJbmRleCA9IHdvcmtzaGVldERhdGEub3duZXIuY29sdW1ucy5zb21lKGMgPT4gYy5leHBvcnRJbmRleCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICBsZXQgcmVjb3JkSGVhZGVycyA9IFtdO1xuXG4gICAgICAgIHlpZWxkaW5nTG9vcCh3b3Jrc2hlZXREYXRhLnJvd0NvdW50IC0gMSwgMTAwMCxcbiAgICAgICAgICAgIChpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0hpZXJhcmNoaWNhbEdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VzZXJTZXRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkSGVhZGVycyA9IHdvcmtzaGVldERhdGEucm9vdEtleXM7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRIZWFkZXJzID0gd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXgtYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4LWIucGlubmVkSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChjID0+IGMuZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gd29ya3NoZWV0RGF0YS5kYXRhW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZE93bmVyID0gd29ya3NoZWV0RGF0YS5vd25lcnMuZ2V0KHJlY29yZC5vd25lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNNdWx0aUNvbHVtbkhlYWRlcnMgPSByZWNvcmRPd25lci5jb2x1bW5zLnNvbWUoYyA9PiAhYy5za2lwICYmIGMuaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNNdWx0aUNvbHVtbkhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhHcmlkUHJpbnRNdWx0aUNvbEhlYWRlcnMod29ya3NoZWV0RGF0YSwgcm93RGF0YUFyciwgcmVjb3JkLCByZWNvcmRPd25lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZWNvcmRIZWFkZXJzID0gT2JqZWN0LmtleXMod29ya3NoZWV0RGF0YS5kYXRhW2ldLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJvd0RhdGFBcnIucHVzaCh0aGlzLnByb2Nlc3NSb3cod29ya3NoZWV0RGF0YSwgaSwgcmVjb3JkSGVhZGVycywgaXNIaWVyYXJjaGljYWxHcmlkKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUocm93RGF0YUFyci5qb2luKCcnKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaEdyaWRQcmludE11bHRpQ29sSGVhZGVycyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCByb3dEYXRhQXJyOiBhbnlbXSwgcmVjb3JkOiBJRXhwb3J0UmVjb3JkLFxuICAgICAgICBvd25lcjogSUNvbHVtbkxpc3QpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvd25lci5tYXhMZXZlbDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRMZXZlbCA9IHJlY29yZC5sZXZlbDtcbiAgICAgICAgICAgIGNvbnN0IG91dGxpbmVMZXZlbCA9IHJlY29yZExldmVsID4gMCA/IGAgb3V0bGluZUxldmVsPVwiJHtyZWNvcmRMZXZlbH1cImAgOiAnJztcbiAgICAgICAgICAgIHRoaXMubWF4T3V0bGluZUxldmVsID0gdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPCByZWNvcmRMZXZlbCA/IHJlY29yZExldmVsIDogdGhpcy5tYXhPdXRsaW5lTGV2ZWw7XG4gICAgICAgICAgICBjb25zdCBzSGlkZGVuID0gcmVjb3JkLmhpZGRlbiA/IGAgaGlkZGVuPVwiMVwiYCA6ICcnO1xuXG4gICAgICAgICAgICB0aGlzLnJvd0luZGV4Kys7XG4gICAgICAgICAgICBsZXQgcm93ID0gYDxyb3cgcj1cIiR7dGhpcy5yb3dJbmRleH1cIiR7dGhpcy5yb3dIZWlnaHR9JHtvdXRsaW5lTGV2ZWx9JHtzSGlkZGVufT5gO1xuXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzRm9yTGV2ZWwgPSBvd25lci5jb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IChjLmxldmVsIDwgaiAmJlxuICAgICAgICAgICAgICAgICAgICBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgfHwgYy5sZXZlbCA9PT0gaikgJiYgYy5jb2x1bW5TcGFuID4gMCAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KTtcblxuICAgICAgICAgICAgbGV0IHN0YXJ0VmFsdWUgPSAwICsgcmVjb3JkLmxldmVsO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRDb2wgb2YgaGVhZGVyc0ZvckxldmVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2wubGV2ZWwgPT09IGopIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbkNvb3JkaW5hdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUpICsgdGhpcy5yb3dJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnkuc2F2ZVZhbHVlKGN1cnJlbnRDb2wuaGVhZGVyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcm93ICs9IGA8YyByPVwiJHtjb2x1bW5Db29yZGluYXRlfVwiIHM9XCIzXCIgdD1cInNcIj48dj4ke2NvbHVtblZhbHVlfTwvdj48L2M+YDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaiAhPT0gb3duZXIubWF4TGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsc0NvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAgPG1lcmdlQ2VsbCByZWY9XCIke2NvbHVtbkNvb3JkaW5hdGV9OmA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihzdGFydFZhbHVlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnJvd0luZGV4ICsgb3duZXIubWF4TGV2ZWwgLSBjdXJyZW50Q29sLmxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBjdXJyZW50Q29sLmNvbHVtblNwYW47IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUgKyBrKSArIHRoaXMucm93SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyArPSBgPGMgcj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX1cIiBzPVwiM1wiIC8+YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAke2NvbHVtbkNvb3JkaW5hdGV9XCIgLz5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZSArPSBjdXJyZW50Q29sLmNvbHVtblNwYW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cgKz0gYDwvcm93PmA7XG4gICAgICAgICAgICByb3dEYXRhQXJyLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1Jvdyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCBpOiBudW1iZXIsIGhlYWRlcnNGb3JMZXZlbDogYW55W10sIGlzSGllcmFyY2hpY2FsR3JpZDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCByZWNvcmQgPSB3b3Jrc2hlZXREYXRhLmRhdGFbaV07XG5cbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IG5ldyBBcnJheSh3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50ICsgMik7XG5cbiAgICAgICAgY29uc3Qgcm93TGV2ZWwgPSByZWNvcmQubGV2ZWw7XG4gICAgICAgIGNvbnN0IG91dGxpbmVMZXZlbCA9IHJvd0xldmVsID4gMCA/IGAgb3V0bGluZUxldmVsPVwiJHtyb3dMZXZlbH1cImAgOiAnJztcbiAgICAgICAgdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPSB0aGlzLm1heE91dGxpbmVMZXZlbCA8IHJvd0xldmVsID8gcm93TGV2ZWwgOiB0aGlzLm1heE91dGxpbmVMZXZlbDtcblxuICAgICAgICBjb25zdCBzSGlkZGVuID0gcmVjb3JkLmhpZGRlbiA/IGAgaGlkZGVuPVwiMVwiYCA6ICcnO1xuXG4gICAgICAgIHRoaXMucm93SW5kZXgrKztcbiAgICAgICAgcm93RGF0YVswXSA9XG4gICAgICAgICAgICBgPHJvdyByPVwiJHt0aGlzLnJvd0luZGV4fVwiJHt0aGlzLnJvd0hlaWdodH0ke291dGxpbmVMZXZlbH0ke3NIaWRkZW59PmA7XG5cbiAgICAgICAgY29uc3Qga2V5cyA9IHdvcmtzaGVldERhdGEuaXNTcGVjaWFsRGF0YSA/IFtyZWNvcmQuZGF0YV0gOiBoZWFkZXJzRm9yTGV2ZWw7XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBqICsgKGlzSGllcmFyY2hpY2FsR3JpZCA/IHJvd0xldmVsIDogMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRhID0gdGhpcy5nZXRDZWxsRGF0YSh3b3Jrc2hlZXREYXRhLCBpLCBjb2wsIGtleXNbal0pO1xuXG4gICAgICAgICAgICByb3dEYXRhW2ogKyAxXSA9IGNlbGxEYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgcm93RGF0YVtrZXlzLmxlbmd0aCArIDFdID0gJzwvcm93Pic7XG5cbiAgICAgICAgcmV0dXJuIHJvd0RhdGEuam9pbignJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDZWxsRGF0YSh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCByb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sdW1uKSArICh0aGlzLnJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgZnVsbFJvdyA9IHdvcmtzaGVldERhdGEuZGF0YVtyb3ddO1xuICAgICAgICBjb25zdCBpc0hlYWRlclJlY29yZCA9IGZ1bGxSb3cudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQ7XG5cbiAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gd29ya3NoZWV0RGF0YS5pc1NwZWNpYWxEYXRhID9cbiAgICAgICAgICAgIGZ1bGxSb3cuZGF0YSA6XG4gICAgICAgICAgICBmdWxsUm93LmRhdGFba2V5XTtcblxuICAgICAgICBpZiAoY2VsbFZhbHVlID09PSB1bmRlZmluZWQgfHwgY2VsbFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxjIHI9XCIke2NvbHVtbk5hbWV9XCIgcz1cIjFcIi8+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNhdmVkVmFsdWUgPSBkaWN0aW9uYXJ5LnNhdmVWYWx1ZShjZWxsVmFsdWUsIGlzSGVhZGVyUmVjb3JkKTtcbiAgICAgICAgICAgIGNvbnN0IGlzU2F2ZWRBc1N0cmluZyA9IHNhdmVkVmFsdWUgIT09IC0xO1xuXG4gICAgICAgICAgICBjb25zdCBpc1NhdmVkQXNEYXRlID0gIWlzU2F2ZWRBc1N0cmluZyAmJiBjZWxsVmFsdWUgaW5zdGFuY2VvZiBEYXRlO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBpc1NhdmVkQXNTdHJpbmcgPyBzYXZlZFZhbHVlIDogY2VsbFZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoaXNTYXZlZEFzRGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVab25lT2Zmc2V0ID0gdmFsdWUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzb1N0cmluZyA9IChuZXcgRGF0ZSh2YWx1ZSAtIHRpbWVab25lT2Zmc2V0KSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGlzb1N0cmluZy5zdWJzdHJpbmcoMCwgaXNvU3RyaW5nLmluZGV4T2YoJy4nKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBpc1NhdmVkQXNTdHJpbmcgPyBgIHQ9XCJzXCJgIDogaXNTYXZlZEFzRGF0ZSA/IGAgdD1cImRcImAgOiAnJztcblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gaXNIZWFkZXJSZWNvcmQgPyBgIHM9XCIzXCJgIDogaXNTYXZlZEFzU3RyaW5nID8gJycgOiBpc1NhdmVkQXNEYXRlID8gYCBzPVwiMlwiYCA6IGAgcz1cIjFcImA7XG5cbiAgICAgICAgICAgIHJldHVybiBgPGMgcj1cIiR7Y29sdW1uTmFtZX1cIiR7dHlwZX0ke2Zvcm1hdH0+PHY+JHt2YWx1ZX08L3Y+PC9jPmA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgU3R5bGVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwKSB7XG4gICAgICAgIGZvbGRlci5maWxlKCdzdHlsZXMueG1sJywgRXhjZWxTdHJpbmdzLmdldFN0eWxlcygpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya2Jvb2tGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwLCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGZvbGRlci5maWxlKCd3b3JrYm9vay54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0V29ya2Jvb2sod29ya3NoZWV0RGF0YS5vcHRpb25zLndvcmtzaGVldE5hbWUpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgQ29udGVudFR5cGVzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBKU1ppcCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBmb2xkZXIuZmlsZSgnW0NvbnRlbnRfVHlwZXNdLnhtbCcsIEV4Y2VsU3RyaW5ncy5nZXRDb250ZW50VHlwZXNYTUwoIXdvcmtzaGVldERhdGEuaXNFbXB0eSwgd29ya3NoZWV0RGF0YS5vcHRpb25zLmV4cG9ydEFzVGFibGUpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgU2hhcmVkU3RyaW5nc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgY29uc3QgZGljdCA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIGNvbnN0IHNvcnRlZFZhbHVlcyA9IGRpY3QuZ2V0S2V5cygpO1xuICAgICAgICBjb25zdCBzaGFyZWRTdHJpbmdzID0gbmV3IEFycmF5PHN0cmluZz4oc29ydGVkVmFsdWVzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzb3J0ZWRWYWx1ZXMpIHtcbiAgICAgICAgICAgIHNoYXJlZFN0cmluZ3NbZGljdC5nZXRTYW5pdGl6ZWRWYWx1ZSh2YWx1ZSldID0gJzxzaT48dD4nICsgdmFsdWUgKyAnPC90Pjwvc2k+JztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvbGRlci5maWxlKCdzaGFyZWRTdHJpbmdzLnhtbCcsIEV4Y2VsU3RyaW5ncy5nZXRTaGFyZWRTdHJpbmdYTUwoXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnN0cmluZ3NDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZFZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRTdHJpbmdzLmpvaW4oJycpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWJsZXNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwLCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkNvdW50ID0gd29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudDtcbiAgICAgICAgY29uc3QgbGFzdENvbHVtbiA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2x1bW5Db3VudCAtIDEpICsgd29ya3NoZWV0RGF0YS5yb3dDb3VudDtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uID0gJ0ExOicgKyBsYXN0Q29sdW1uO1xuICAgICAgICBjb25zdCBoYXNVc2VyU2V0SW5kZXggPSB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnMuc29tZShjID0+IGMuZXhwb3J0SW5kZXggIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGhhc1VzZXJTZXRJbmRleFxuICAgICAgICAgICAgPyB3b3Jrc2hlZXREYXRhLnJvb3RLZXlzXG4gICAgICAgICAgICA6IHdvcmtzaGVldERhdGEub3duZXIuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAhYy5za2lwKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KVxuICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjLmhlYWRlcik7XG5cbiAgICAgICAgbGV0IHNvcnRTdHJpbmcgPSAnJztcblxuICAgICAgICBsZXQgdGFibGVDb2x1bW5zID0gJzx0YWJsZUNvbHVtbnMgY291bnQ9XCInICsgY29sdW1uQ291bnQgKyAnXCI+JztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICB2YWx1ZXNbaV07XG4gICAgICAgICAgICB0YWJsZUNvbHVtbnMgKz0gJzx0YWJsZUNvbHVtbiBpZD1cIicgKyAoaSArIDEpICsgJ1wiIG5hbWU9XCInICsgdmFsdWUgKyAnXCIvPic7XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZUNvbHVtbnMgKz0gJzwvdGFibGVDb2x1bW5zPic7XG5cbiAgICAgICAgaWYgKHdvcmtzaGVldERhdGEuc29ydCkge1xuICAgICAgICAgICAgY29uc3Qgc29ydGluZ0V4cHJlc3Npb24gPSB3b3Jrc2hlZXREYXRhLnNvcnQ7XG4gICAgICAgICAgICBjb25zdCBzYyA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbih2YWx1ZXMuaW5kZXhPZihzb3J0aW5nRXhwcmVzc2lvbi5maWVsZE5hbWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGRpciA9IHNvcnRpbmdFeHByZXNzaW9uLmRpciAtIDE7XG4gICAgICAgICAgICBzb3J0U3RyaW5nID0gYDxzb3J0U3RhdGUgcmVmPVwiQTI6JHtsYXN0Q29sdW1ufVwiPjxzb3J0Q29uZGl0aW9uIGRlc2NlbmRpbmc9XCIke2Rpcn1cIiByZWY9XCIke3NjfTE6JHtzY30xNVwiLz48L3NvcnRTdGF0ZT5gO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9sZGVyLmZpbGUoJ3RhYmxlMS54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0VGFibGVzWE1MKGRpbWVuc2lvbiwgdGFibGVDb2x1bW5zLCBzb3J0U3RyaW5nKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtzaGVldFJlbHNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwKSB7XG4gICAgICAgIGZvbGRlci5maWxlKCdzaGVldDEueG1sLnJlbHMnLCBFeGNlbFN0cmluZ3MuZ2V0V29ya3NoZWV0UmVscygpKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -30,13 +30,17 @@ export class WorksheetData {
|
|
|
30
30
|
get dataDictionary() {
|
|
31
31
|
return this._dataDictionary;
|
|
32
32
|
}
|
|
33
|
+
get hasMultiColumnHeader() {
|
|
34
|
+
return this._hasMultiColumnHeader;
|
|
35
|
+
}
|
|
33
36
|
initializeData() {
|
|
34
37
|
if (!this._data || this._data.length === 0) {
|
|
35
38
|
return;
|
|
36
39
|
}
|
|
37
|
-
|
|
40
|
+
this._hasMultiColumnHeader = Array.from(this.owners.values())
|
|
41
|
+
.some(o => o.columns.some(col => !col.skip && col.headerType === HeaderType.MultiColumnHeader));
|
|
38
42
|
const hasHierarchicalGridRecord = this._data[0].type === ExportRecordType.HierarchicalGridRecord;
|
|
39
|
-
if (hasHierarchicalGridRecord || (
|
|
43
|
+
if (hasHierarchicalGridRecord || (this._hasMultiColumnHeader && !this.options.ignoreMultiColumnHeaders)) {
|
|
40
44
|
this.options.exportAsTable = false;
|
|
41
45
|
}
|
|
42
46
|
this._isSpecialData = ExportUtilities.isSpecialData(this._data[0].data);
|
|
@@ -44,4 +48,4 @@ export class WorksheetData {
|
|
|
44
48
|
this._dataDictionary = new WorksheetDataDictionary(this.columnCount, this.options.columnWidth, this.columnWidths);
|
|
45
49
|
}
|
|
46
50
|
}
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NoZWV0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZXhjZWwvd29ya3NoZWV0LWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBOEIsTUFBTSx3Q0FBd0MsQ0FBQztBQUNsSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFdEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFdEUsY0FBYztBQUNkLE1BQU0sT0FBTyxhQUFhO0lBTXRCLFlBQW9CLEtBQXNCLEVBQ3ZCLE9BQWdDLEVBQ2hDLElBQVMsRUFDVCxXQUFtQixFQUNuQixRQUFrQixFQUNsQix1QkFBK0IsRUFDL0IsWUFBc0IsRUFDdEIsS0FBa0IsRUFDbEIsTUFBNkI7UUFSNUIsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFDdkIsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDaEMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNULGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFRO1FBQy9CLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBQ3RCLFVBQUssR0FBTCxLQUFLLENBQWE7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDeEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxvQkFBb0I7UUFDM0IsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDdEMsQ0FBQztJQUVPLGNBQWM7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBR3BHLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsc0JBQXNCLENBQUM7UUFFakcsSUFBSSx5QkFBeUIsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsRUFBRTtZQUNyRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7U0FDdEM7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksdUJBQXVCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEgsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGVhZGVyVHlwZSwgRXhwb3J0UmVjb3JkVHlwZSwgSUNvbHVtbkxpc3QsIElFeHBvcnRSZWNvcmQgfSBmcm9tICcuLi9leHBvcnRlci1jb21tb24vYmFzZS1leHBvcnQtc2VydmljZSc7XG5pbXBvcnQgeyBFeHBvcnRVdGlsaXRpZXMgfSBmcm9tICcuLi9leHBvcnRlci1jb21tb24vZXhwb3J0LXV0aWxpdGllcyc7XG5pbXBvcnQgeyBJZ3hFeGNlbEV4cG9ydGVyT3B0aW9ucyB9IGZyb20gJy4vZXhjZWwtZXhwb3J0ZXItb3B0aW9ucyc7XG5pbXBvcnQgeyBXb3Jrc2hlZXREYXRhRGljdGlvbmFyeSB9IGZyb20gJy4vd29ya3NoZWV0LWRhdGEtZGljdGlvbmFyeSc7XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgY2xhc3MgV29ya3NoZWV0RGF0YSB7XG4gICAgcHJpdmF0ZSBfcm93Q291bnQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9kYXRhRGljdGlvbmFyeTogV29ya3NoZWV0RGF0YURpY3Rpb25hcnk7XG4gICAgcHJpdmF0ZSBfaXNTcGVjaWFsRGF0YTogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9oYXNNdWx0aUNvbHVtbkhlYWRlcjogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RhdGE6IElFeHBvcnRSZWNvcmRbXSxcbiAgICAgICAgICAgICAgICBwdWJsaWMgb3B0aW9uczogSWd4RXhjZWxFeHBvcnRlck9wdGlvbnMsXG4gICAgICAgICAgICAgICAgcHVibGljIHNvcnQ6IGFueSxcbiAgICAgICAgICAgICAgICBwdWJsaWMgY29sdW1uQ291bnQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICBwdWJsaWMgcm9vdEtleXM6IHN0cmluZ1tdLFxuICAgICAgICAgICAgICAgIHB1YmxpYyBpbmRleE9mTGFzdFBpbm5lZENvbHVtbjogbnVtYmVyLFxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb2x1bW5XaWR0aHM6IG51bWJlcltdLFxuICAgICAgICAgICAgICAgIHB1YmxpYyBvd25lcjogSUNvbHVtbkxpc3QsXG4gICAgICAgICAgICAgICAgcHVibGljIG93bmVyczogTWFwPGFueSwgSUNvbHVtbkxpc3Q+KSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVEYXRhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhKCk6IElFeHBvcnRSZWNvcmRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93Q291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0NvdW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnJvd0NvdW50IHx8ICF0aGlzLmNvbHVtbkNvdW50IHx8IHRoaXMub3duZXIuY29sdW1ucy5ldmVyeShjID0+IGMuc2tpcCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1NwZWNpYWxEYXRhKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNTcGVjaWFsRGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFEaWN0aW9uYXJ5KCk6IFdvcmtzaGVldERhdGFEaWN0aW9uYXJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFEaWN0aW9uYXJ5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzTXVsdGlDb2x1bW5IZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNNdWx0aUNvbHVtbkhlYWRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVEYXRhKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2RhdGEgfHwgdGhpcy5fZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2hhc011bHRpQ29sdW1uSGVhZGVyID0gQXJyYXkuZnJvbSh0aGlzLm93bmVycy52YWx1ZXMoKSlcbiAgICAgICAgICAgIC5zb21lKG8gPT4gby5jb2x1bW5zLnNvbWUoY29sID0+ICFjb2wuc2tpcCAmJiBjb2wuaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlcikpO1xuXG5cbiAgICAgICAgY29uc3QgaGFzSGllcmFyY2hpY2FsR3JpZFJlY29yZCA9IHRoaXMuX2RhdGFbMF0udHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkO1xuXG4gICAgICAgIGlmIChoYXNIaWVyYXJjaGljYWxHcmlkUmVjb3JkIHx8ICh0aGlzLl9oYXNNdWx0aUNvbHVtbkhlYWRlciAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZU11bHRpQ29sdW1uSGVhZGVycykpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5leHBvcnRBc1RhYmxlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pc1NwZWNpYWxEYXRhID0gRXhwb3J0VXRpbGl0aWVzLmlzU3BlY2lhbERhdGEodGhpcy5fZGF0YVswXS5kYXRhKTtcbiAgICAgICAgdGhpcy5fcm93Q291bnQgPSB0aGlzLl9kYXRhLmxlbmd0aCArIDE7XG4gICAgICAgIHRoaXMuX2RhdGFEaWN0aW9uYXJ5ID0gbmV3IFdvcmtzaGVldERhdGFEaWN0aW9uYXJ5KHRoaXMuY29sdW1uQ291bnQsIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCwgdGhpcy5jb2x1bW5XaWR0aHMpO1xuICAgIH1cbn1cbiJdfQ==
|