igniteui-angular 12.2.6 → 12.2.7

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.
Files changed (32) hide show
  1. package/bundles/igniteui-angular.umd.js +87 -20
  2. package/bundles/igniteui-angular.umd.js.map +1 -1
  3. package/esm2015/lib/core/utils.js +14 -2
  4. package/esm2015/lib/data-operations/data-clone-strategy.js +7 -0
  5. package/esm2015/lib/data-operations/data-util.js +7 -6
  6. package/esm2015/lib/grids/api.service.js +2 -2
  7. package/esm2015/lib/grids/common/crud.service.js +4 -3
  8. package/esm2015/lib/grids/common/grid.interface.js +1 -1
  9. package/esm2015/lib/grids/common/pipes.js +2 -2
  10. package/esm2015/lib/grids/grid-base.directive.js +25 -1
  11. package/esm2015/lib/grids/grid-public-row.js +3 -4
  12. package/esm2015/lib/grids/row.directive.js +2 -3
  13. package/esm2015/lib/grids/summaries/grid-summary.service.js +2 -2
  14. package/esm2015/lib/grids/tree-grid/tree-grid.pipes.js +3 -3
  15. package/esm2015/lib/services/transaction/base-transaction.js +17 -4
  16. package/esm2015/lib/services/transaction/igx-hierarchical-transaction.js +3 -4
  17. package/esm2015/lib/services/transaction/igx-transaction.js +3 -3
  18. package/esm2015/lib/services/transaction/transaction-factory.service.js +1 -2
  19. package/esm2015/lib/services/transaction/transaction.js +1 -1
  20. package/esm2015/public_api.js +2 -1
  21. package/fesm2015/igniteui-angular.js +74 -21
  22. package/fesm2015/igniteui-angular.js.map +1 -1
  23. package/igniteui-angular.metadata.json +1 -1
  24. package/lib/core/utils.d.ts +8 -0
  25. package/lib/data-operations/data-clone-strategy.d.ts +6 -0
  26. package/lib/data-operations/data-util.d.ts +3 -2
  27. package/lib/grids/common/grid.interface.d.ts +2 -0
  28. package/lib/grids/grid-base.directive.d.ts +12 -0
  29. package/lib/services/transaction/base-transaction.d.ts +7 -0
  30. package/lib/services/transaction/transaction.d.ts +5 -0
  31. package/package.json +1 -1
  32. package/public_api.d.ts +1 -0
@@ -25,7 +25,7 @@ export class GridBaseAPIService {
25
25
  }
26
26
  if (!data) {
27
27
  if (grid.transactions.enabled) {
28
- data = DataUtil.mergeTransactions(cloneArray(grid.data), grid.transactions.getAggregatedChanges(true), grid.primaryKey);
28
+ data = DataUtil.mergeTransactions(cloneArray(grid.data), grid.transactions.getAggregatedChanges(true), grid.primaryKey, grid.dataCloneStrategy);
29
29
  const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === TransactionType.DELETE).map(t => t.id);
30
30
  deletedRows.forEach(rowID => {
31
31
  const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;
@@ -444,4 +444,4 @@ GridBaseAPIService.ctorParameters = () => [
444
444
  { type: IgxGridCRUDService },
445
445
  { type: IgxColumnMovingService }
446
446
  ];
447
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVFLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUt2RyxPQUFPLEVBQWUsZUFBZSxFQUFTLE1BQU0scUNBQXFDLENBQUM7QUFDMUYsT0FBTyxFQUFXLGtCQUFrQixFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFJaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBTTNCLFlBQ1csV0FBK0IsRUFDL0IsR0FBMkI7UUFEM0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQXdCO1FBSjVCLGVBQVUsR0FBa0MsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFJaEQsQ0FBQztJQUVwQyxrQkFBa0IsQ0FBQyxJQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBZSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFD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LFdBQVcsR0FBZ0I7Z0JBQzdCLEVBQUUsRUFBRSxLQUFLO2dCQUNULElBQUksRUFBRSxlQUFlLENBQUMsTUFBTTtnQkFDNUIsUUFBUSxFQUFFLFdBQVc7YUFDeEIsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztTQUN2RDthQUFNO1lBQ0gsWUFBWSxDQUFDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ25EO0lBQ0wsQ0FBQztJQUdTLG1CQUFtQixDQUFDLEtBQVUsRUFBRSxLQUFVLEVBQUUsS0FBYTtRQUMvRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFUyx3QkFBd0IsQ0FBQyxTQUFpQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwRSxDQUFDOzs7WUF4ZUosVUFBVTs7O1lBVE8sa0JBQWtCO1lBSTNCLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNsb25lQXJyYXksIHJldmVyc2VNYXBwZXIsIG1lcmdlT2JqZWN0cyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRGF0YVV0aWwsIEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSVNvcnRpbmdFeHByZXNzaW9uLCBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL3NvcnRpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4R3JpZENlbGxDb21wb25lbnQgfSBmcm9tICcuL2NlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9ncmlkLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFJvd0RpcmVjdGl2ZSB9IGZyb20gJy4vcm93LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblR5cGUsIFN0YXRlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgSWd4Q2VsbCwgSWd4R3JpZENSVURTZXJ2aWNlLCBJZ3hFZGl0Um93IH0gZnJvbSAnLi9jb21tb24vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gJy4vY29tbW9uL2NvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyaWRFZGl0RXZlbnRBcmdzLCBJUm93VG9nZ2xlRXZlbnRBcmdzIH0gZnJvbSAnLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IElneENvbHVtbk1vdmluZ1NlcnZpY2UgfSBmcm9tICcuL21vdmluZy9tb3Zpbmcuc2VydmljZSc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR3JpZEJhc2VBUElTZXJ2aWNlPFQgZXh0ZW5kcyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiB7XG5cblxuICAgIHB1YmxpYyBncmlkOiBUO1xuICAgIHByb3RlY3RlZCBkZXN0cm95TWFwOiBNYXA8c3RyaW5nLCBTdWJqZWN0PGJvb2xlYW4+PiA9IG5ldyBNYXA8c3RyaW5nLCBTdWJqZWN0PGJvb2xlYW4+PigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjcnVkU2VydmljZTogSWd4R3JpZENSVURTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY21zOiBJZ3hDb2x1bW5Nb3ZpbmdTZXJ2aWNlKSB7IH1cblxuICAgIHB1YmxpYyBnZXRfY29sdW1uX2J5X25hbWUobmFtZTogc3RyaW5nKTogQ29sdW1uVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuY29sdW1uTGlzdC5maW5kKChjb2w6IENvbHVtblR5cGUpID0+IGNvbC5maWVsZCA9PT0gbmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9zdW1tYXJ5X2RhdGEoKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGxldCBkYXRhID0gZ3JpZC5maWx0ZXJlZERhdGE7XG4gICAgICAgIGlmIChkYXRhICYmIGdyaWQuaGFzUGlubmVkUmVjb3Jkcykge1xuICAgICAgICAgICAgZGF0YSA9IGdyaWQuX2ZpbHRlcmVkVW5waW5uZWREYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgaWYgKGdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gRGF0YVV0aWwubWVyZ2VUcmFuc2FjdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgIGNsb25lQXJyYXkoZ3JpZC5kYXRhKSxcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZENoYW5nZXModHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIGdyaWQucHJpbWFyeUtleVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsZXRlZFJvd3MgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRUcmFuc2FjdGlvbkxvZygpLmZpbHRlcih0ID0+IHQudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkRFTEVURSkubWFwKHQgPT4gdC5pZCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlZFJvd3MuZm9yRWFjaChyb3dJRCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBEYXRhID0gZ3JpZC5wcmltYXJ5S2V5ID8gZGF0YS5tYXAocmVjID0+IHJlY1tncmlkLnByaW1hcnlLZXldKSA6IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGVtcERhdGEuaW5kZXhPZihyb3dJRCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ3JpZC5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Um93RGF0YShyb3dJRDogYW55KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldF9hbGxfZGF0YSh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0X3Jvd19pbmRleF9pbl9kYXRhKHJvd0lELCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIGRhdGFbaW5kZXhdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfcm93X2luZGV4X2luX2RhdGEocm93SUQ6IGFueSwgZGF0YUNvbGxlY3Rpb24/OiBhbnlbXSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQgYXMgSWd4R3JpZEJhc2VEaXJlY3RpdmU7XG4gICAgICAgIGlmICghZ3JpZCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhQ29sbGVjdGlvbiA/PyB0aGlzLmdldF9hbGxfZGF0YShncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKTtcbiAgICAgICAgcmV0dXJuIGdyaWQucHJpbWFyeUtleSA/IGRhdGEuZmluZEluZGV4KHJlY29yZCA9PiByZWNvcmQucmVjb3JkUmVmID8gcmVjb3JkLnJlY29yZFJlZltncmlkLnByaW1hcnlLZXldID09PSByb3dJRFxuICAgICAgICAgICAgOiByZWNvcmRbZ3JpZC5wcmltYXJ5S2V5XSA9PT0gcm93SUQpIDogZGF0YS5pbmRleE9mKHJvd0lEKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19ieV9rZXkocm93U2VsZWN0b3I6IGFueSk6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgICAgIGlmIChwcmltYXJ5S2V5ICE9PSB1bmRlZmluZWQgJiYgcHJpbWFyeUtleSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhUm93TGlzdC5maW5kKChyb3cpID0+IHJvdy5yb3dEYXRhW3ByaW1hcnlLZXldID09PSByb3dTZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmRhdGFSb3dMaXN0LmZpbmQoKHJvdykgPT4gcm93LnJvd0RhdGEgPT09IHJvd1NlbGVjdG9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfcm93X2J5X2luZGV4KHJvd0luZGV4OiBudW1iZXIpOiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0xpc3QuZmluZCgocm93KSA9PiByb3cuaW5kZXggPT09IHJvd0luZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSByb3dJRCBvZiB0aGUgcmVjb3JkIGF0IHRoZSBzcGVjaWZpZWQgZGF0YSB2aWV3IGluZGV4XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXhcbiAgICAgKiBAcGFyYW0gZGF0YUNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0X3JlY19pZF9ieV9pbmRleChpbmRleDogbnVtYmVyLCBkYXRhQ29sbGVjdGlvbj86IGFueVtdKTogYW55IHtcbiAgICAgICAgZGF0YUNvbGxlY3Rpb24gPSBkYXRhQ29sbGVjdGlvbiB8fCB0aGlzLmdyaWQuZGF0YTtcbiAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBkYXRhQ29sbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYyA9IGRhdGFDb2xsZWN0aW9uW2luZGV4XTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJlY1t0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByZWM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9jZWxsX2J5X2tleShyb3dTZWxlY3RvcjogYW55LCBmaWVsZDogc3RyaW5nKTogSWd4R3JpZENlbGxDb21wb25lbnQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldF9yb3dfYnlfa2V5KHJvd1NlbGVjdG9yKTtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuY2VsbHMpIHtcbiAgICAgICAgICAgIHJldHVybiByb3cuY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC5jb2x1bW4uZmllbGQgPT09IGZpZWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfY2VsbF9ieV9pbmRleChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JRDogbnVtYmVyIHwgc3RyaW5nKTogSWd4R3JpZENlbGxDb21wb25lbnQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldF9yb3dfYnlfaW5kZXgocm93SW5kZXgpO1xuICAgICAgICBjb25zdCBoYXNDZWxscyA9IHJvdyAmJiByb3cuY2VsbHM7XG4gICAgICAgIGlmIChoYXNDZWxscyAmJiB0eXBlb2YgY29sdW1uSUQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93LmNlbGxzLmZpbmQoKGNlbGwpID0+IGNlbGwuY29sdW1uLmluZGV4ID09PSBjb2x1bW5JRCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0NlbGxzICYmIHR5cGVvZiBjb2x1bW5JRCA9PT0gJ3N0cmluZycpe1xuICAgICAgICAgICAgcmV0dXJuIHJvdy5jZWxscy5maW5kKChjZWxsKSA9PiBjZWxsLmNvbHVtbi5maWVsZCA9PT0gY29sdW1uSUQpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X2NlbGxfYnlfdmlzaWJsZV9pbmRleChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogSWd4R3JpZENlbGxDb21wb25lbnQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldF9yb3dfYnlfaW5kZXgocm93SW5kZXgpO1xuICAgICAgICBpZiAocm93ICYmIHJvdy5jZWxscykge1xuICAgICAgICAgICAgcmV0dXJuIHJvdy5jZWxscy5maW5kKChjZWxsKSA9PiBjZWxsLnZpc2libGVDb2x1bW5JbmRleCA9PT0gY29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZV9jZWxsKGNlbGw6IElneENlbGwpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcmdzID0gY2VsbC5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC5zdW1tYXJ5U2VydmljZS5jbGVhclN1bW1hcnlDYWNoZShhcmdzKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0Um93RGF0YShjZWxsLmlkLnJvd0lEKTtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhKHRoaXMuZ3JpZCwgY2VsbC5pZC5yb3dJRCwgZGF0YSwgY2VsbC5yb3dEYXRhLCByZXZlcnNlTWFwcGVyKGNlbGwuY29sdW1uLmZpZWxkLCBhcmdzLm5ld1ZhbHVlKSk7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucHJpbWFyeUtleSA9PT0gY2VsbC5jb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKGNlbGwuaWQucm93SUQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3coY2VsbC5pZC5yb3dJRCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93QnlJZChhcmdzLm5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc3VtbWFyeVNlcnZpY2UucmVtb3ZlU3VtbWFyaWVzKGNlbGwuaWQucm93SUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnJvd0VkaXRhYmxlIHx8ICF0aGlzLmNydWRTZXJ2aWNlLnJvdyB8fFxuICAgICAgICAgICAgdGhpcy5jcnVkU2VydmljZS5yb3cuaWQgIT09IGNlbGwuaWQucm93SUQgfHwgIXRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnN1bW1hcnlTZXJ2aWNlLmNsZWFyU3VtbWFyeUNhY2hlKGFyZ3MpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBDUlVEIHJlZmFjdG9yIHRvIG5vdCBlbWl0IGVkaXRpbmcgZXZ0cy5cbiAgICBwdWJsaWMgdXBkYXRlX3Jvdyhyb3c6IElneEVkaXRSb3csIHZhbHVlOiBhbnksIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBncmlkLnNlbGVjdGlvblNlcnZpY2UuaXNSb3dTZWxlY3RlZChyb3cuaWQpO1xuICAgICAgICBjb25zdCByb3dJbkVkaXRNb2RlID0gdGhpcy5jcnVkU2VydmljZS5yb3c7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldF9hbGxfZGF0YShncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldF9yb3dfaW5kZXhfaW5fZGF0YShyb3cuaWQsIGRhdGEpO1xuICAgICAgICBjb25zdCBoYXNTdW1tYXJpemVkID0gZ3JpZC5oYXNTdW1tYXJpemVkQ29sdW1ucztcbiAgICAgICAgdGhpcy5jcnVkU2VydmljZS51cGRhdGVSb3dFZGl0RGF0YShyb3csIHZhbHVlKTtcblxuICAgICAgICBjb25zdCBhcmdzID0gcm93LmNyZWF0ZUVkaXRFdmVudEFyZ3ModHJ1ZSwgZXZlbnQpO1xuXG4gICAgICAgIC8vIElmIG5vIHZhbGlkIHJvdyBpcyBmb3VuZFxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3dJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNDaGFuZ2VzID0gZ3JpZC50cmFuc2FjdGlvbnMuZ2V0U3RhdGUoYXJncy5yb3dJRCwgdHJ1ZSk7XG4gICAgICAgICAgICBncmlkLnRyYW5zYWN0aW9ucy5lbmRQZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIGlmICghaGFzQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhcmdzLm5ld1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNTdW1tYXJpemVkKSB7XG4gICAgICAgICAgICBncmlkLnN1bW1hcnlTZXJ2aWNlLnJlbW92ZVN1bW1hcmllcyhhcmdzLnJvd0lEKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YShncmlkLCByb3cuaWQsIGRhdGFbaW5kZXhdLCBhcmdzLm9sZFZhbHVlLCBhcmdzLm5ld1ZhbHVlKTtcbiAgICAgICAgY29uc3QgbmV3SWQgPSBncmlkLnByaW1hcnlLZXkgPyBhcmdzLm5ld1ZhbHVlW2dyaWQucHJpbWFyeUtleV0gOiBhcmdzLm5ld1ZhbHVlO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdFJvdyhyb3cuaWQpO1xuICAgICAgICAgICAgZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJvd0J5SWQobmV3SWQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBzZWxlY3Rpb24gaXMgaGFuZGxlZCBwcmlvciB0byB1cGRhdGluZyB0aGUgcm93LmlkXG4gICAgICAgIHJvdy5pZCA9IG5ld0lkO1xuICAgICAgICBpZiAoaGFzU3VtbWFyaXplZCkge1xuICAgICAgICAgICAgZ3JpZC5zdW1tYXJ5U2VydmljZS5yZW1vdmVTdW1tYXJpZXMobmV3SWQpO1xuICAgICAgICB9XG4gICAgICAgIGdyaWQucGlwZVRyaWdnZXIrKztcblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgc29ydChleHByZXNzaW9uOiBJU29ydGluZ0V4cHJlc3Npb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb24uZGlyID09PSBTb3J0aW5nRGlyZWN0aW9uLk5vbmUpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlX2dyb3VwaW5nX2V4cHJlc3Npb24oZXhwcmVzc2lvbi5maWVsZE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IGNsb25lQXJyYXkodGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgIHRoaXMucHJlcGFyZV9zb3J0aW5nX2V4cHJlc3Npb24oW3NvcnRpbmdTdGF0ZV0sIGV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zID0gc29ydGluZ1N0YXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0X211bHRpcGxlKGV4cHJlc3Npb25zOiBJU29ydGluZ0V4cHJlc3Npb25bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzb3J0aW5nU3RhdGUgPSBjbG9uZUFycmF5KHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZWFjaCBvZiBleHByZXNzaW9ucykge1xuICAgICAgICAgICAgaWYgKGVhY2guZGlyID09PSBTb3J0aW5nRGlyZWN0aW9uLk5vbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZV9ncm91cGluZ19leHByZXNzaW9uKGVhY2guZmllbGROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJlcGFyZV9zb3J0aW5nX2V4cHJlc3Npb24oW3NvcnRpbmdTdGF0ZV0sIGVhY2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHNvcnRpbmdTdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJfc29ydChmaWVsZE5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzb3J0aW5nU3RhdGUgPSB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zO1xuICAgICAgICBjb25zdCBpbmRleCA9IHNvcnRpbmdTdGF0ZS5maW5kSW5kZXgoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lID09PSBmaWVsZE5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgc29ydGluZ1N0YXRlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zID0gc29ydGluZ1N0YXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyX2dyb3VwYnkoX25hbWU/OiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+KSB7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3VsZF9hcHBseV9udW1iZXJfc3R5bGUoY29sdW1uOiBDb2x1bW5UeXBlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5OdW1iZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9kYXRhKCk6IGFueVtdIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgY29uc3QgZGF0YSA9IGdyaWQuZGF0YSA/IGdyaWQuZGF0YSA6IFtdO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X2FsbF9kYXRhKGluY2x1ZGVUcmFuc2FjdGlvbnMgPSBmYWxzZSk6IGFueVtdIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgbGV0IGRhdGEgPSBncmlkICYmIGdyaWQuZGF0YSA/IGdyaWQuZGF0YSA6IFtdO1xuICAgICAgICBkYXRhID0gaW5jbHVkZVRyYW5zYWN0aW9ucyA/IGdyaWQuZGF0YVdpdGhBZGRlZEluVHJhbnNhY3Rpb25Sb3dzIDogZGF0YTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9maWx0ZXJlZF9kYXRhKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5maWx0ZXJlZERhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFJvd1RvRGF0YShyb3dEYXRhOiBhbnksIHBhcmVudElEPykge1xuICAgICAgICAvLyBBZGQgcm93IGdvZXMgdG8gdHJhbnNhY3Rpb25zIGFuZCBpZiByb3dFZGl0YWJsZSBpcyBwcm9wZXJseSBpbXBsZW1lbnRlZCwgYWRkZWQgcm93cyB3aWxsIGdvIHRvIHBlbmRpbmcgdHJhbnNhY3Rpb25zXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcm93IGluIGVkaXQgLSA+IGNvbW1pdCBhbmQgY2xvc2VcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcblxuICAgICAgICBpZiAoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IGdyaWQucHJpbWFyeUtleSA/IHJvd0RhdGFbZ3JpZC5wcmltYXJ5S2V5XSA6IHJvd0RhdGE7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gPSB7IGlkOiB0cmFuc2FjdGlvbklkLCB0eXBlOiBUcmFuc2FjdGlvblR5cGUuQURELCBuZXdWYWx1ZTogcm93RGF0YSB9O1xuICAgICAgICAgICAgZ3JpZC50cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyaWQuZGF0YS5wdXNoKHJvd0RhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZVJvd0Zyb21EYXRhKHJvd0lEOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgLy8gIGlmIHRoZXJlIGlzIGEgcm93IChpbmRleCAhPT0gMCkgZGVsZXRlIGl0XG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBhIHJvdyBpbiBBREQgb3IgVVBEQVRFIHN0YXRlIGNoYW5nZSBpdCdzIHN0YXRlIHRvIERFTEVURVxuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiA9IHsgaWQ6IHJvd0lELCB0eXBlOiBUcmFuc2FjdGlvblR5cGUuREVMRVRFLCBuZXdWYWx1ZTogbnVsbCB9O1xuICAgICAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbiwgZ3JpZC5kYXRhW2luZGV4XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyaWQuZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGU6IFN0YXRlID0gZ3JpZC50cmFuc2FjdGlvbnMuZ2V0U3RhdGUocm93SUQpO1xuICAgICAgICAgICAgZ3JpZC50cmFuc2FjdGlvbnMuYWRkKHsgaWQ6IHJvd0lELCB0eXBlOiBUcmFuc2FjdGlvblR5cGUuREVMRVRFLCBuZXdWYWx1ZTogbnVsbCB9LCBzdGF0ZSAmJiBzdGF0ZS5yZWNvcmRSZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZVJvd0J5SWQocm93SWQ6IGFueSk6IGFueSB7XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyO1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRfYWxsX2RhdGEoKTtcbiAgICAgICAgaWYgKGdyaWQucHJpbWFyeUtleSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcbiAgICAgICAgICAgIGluZGV4ID0gZGF0YS5tYXAoKHJlY29yZCkgPT4gcmVjb3JkW2dyaWQucHJpbWFyeUtleV0pLmluZGV4T2Yocm93SWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXggPSBkYXRhLmluZGV4T2Yocm93SWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXRlOiBTdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvd0lkKTtcbiAgICAgICAgY29uc3QgaGFzUm93SW5Ob25EZWxldGVkU3RhdGUgPSBzdGF0ZSAmJiBzdGF0ZS50eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuREVMRVRFO1xuXG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBhIHJvdyAoaW5kZXggIT09IC0xKSBhbmQgdGhlIHdlIGhhdmUgY2VsbCBpbiBlZGl0IG1vZGUgb24gc2FtZSByb3cgZXhpdCBlZGl0IG1vZGVcbiAgICAgICAgLy8gIGlmIHRoZXJlIGlzIG5vIHJvdyAoaW5kZXggPT09IC0xKSwgYnV0IHRoZXJlIGlzIGEgcm93IGluIEFERCBvciBVUERBVEUgc3RhdGUgZG8gYXMgYWJvdmVcbiAgICAgICAgLy8gIE90aGVyd2lzZSBqdXN0IGV4aXQgLSB0aGVyZSBpcyBub3RoaW5nIHRvIGRlbGV0ZVxuICAgICAgICBpZiAoaW5kZXggIT09IC0xIHx8IGhhc1Jvd0luTm9uRGVsZXRlZFN0YXRlKSB7XG4gICAgICAgICAgICAvLyBBbHdheXMgZXhpdCBlZGl0IHdoZW4gcm93IGlzIGRlbGV0ZWRcbiAgICAgICAgICAgIHRoaXMuY3J1ZFNlcnZpY2UuZW5kRWRpdCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICAvLyAvLyAgVE9ETzogc2hvdWxkIHdlIGVtaXQgdGhpcyB3aGVuIGNhc2NhZGVPbkRlbGV0ZSBpcyB0cnVlIGZvciBlYWNoIHJvdz8hPyFcbiAgICAgICAgZ3JpZC5yb3dEZWxldGVkTm90aWZpZXIubmV4dCh7IGRhdGE6IGRhdGFbaW5kZXhdIH0pO1xuXG4gICAgICAgIHRoaXMuZGVsZXRlUm93RnJvbURhdGEocm93SWQsIGluZGV4KTtcblxuICAgICAgICBpZiAoZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmlzUm93U2VsZWN0ZWQocm93SWQpKSB7XG4gICAgICAgICAgICBncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3cocm93SWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGdyaWQucGlwZVRyaWdnZXIrKztcbiAgICAgICAgZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgICAgIC8vIERhdGEgbmVlZHMgdG8gYmUgcmVjYWxjdWxhdGVkIGlmIHRyYW5zYWN0aW9ucyBhcmUgaW4gcGxhY2VcbiAgICAgICAgLy8gSWYgbm8gdHJhbnNhY3Rpb25zLCBgZGF0YWAgd2lsbCBiZSBhIHJlZmVyZW5jZSB0byB0aGUgZ3JpZCBnZXR0ZXIsIG90aGVyd2lzZSBpdCB3aWxsIGJlIHN0YWxlXG4gICAgICAgIGNvbnN0IGRhdGFBZnRlckRlbGV0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgPyBncmlkLmRhdGFXaXRoQWRkZWRJblRyYW5zYWN0aW9uUm93cyA6IGRhdGE7XG4gICAgICAgIGdyaWQucmVmcmVzaFNlYXJjaCgpO1xuICAgICAgICBpZiAoZGF0YUFmdGVyRGVsZXRlLmxlbmd0aCAlIGdyaWQucGVyUGFnZSA9PT0gMCAmJiBkYXRhQWZ0ZXJEZWxldGUubGVuZ3RoIC8gZ3JpZC5wZXJQYWdlIC0gMSA8IGdyaWQucGFnZSAmJiBncmlkLnBhZ2UgIT09IDApIHtcbiAgICAgICAgICAgIGdyaWQucGFnZS0tO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19pZChyb3dEYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJvd0RhdGFbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcm93RGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcm93X2RlbGV0ZWRfdHJhbnNhY3Rpb24ocm93SUQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBpZiAoIWdyaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvd0lEKTtcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkRFTEVURTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUocmVjb3JkOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgY29uc3Qgc3RhdGVzID0gZ3JpZC5leHBhbnNpb25TdGF0ZXM7XG4gICAgICAgIGNvbnN0IHJvd0lEID0gZ3JpZC5wcmltYXJ5S2V5ID8gcmVjb3JkW2dyaWQucHJpbWFyeUtleV0gOiByZWNvcmQ7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gc3RhdGVzLmdldChyb3dJRCk7XG5cbiAgICAgICAgaWYgKGV4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBhbmRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBncmlkLmdldERlZmF1bHRFeHBhbmRTdGF0ZShyZWNvcmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJvd0lEOiBhbnksIGV4cGFuZGVkOiBib29sZWFuLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkU3RhdGVzID0gZ3JpZC5leHBhbnNpb25TdGF0ZXM7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFsbG93X2V4cGFuc2lvbl9zdGF0ZV9jaGFuZ2Uocm93SUQsIGV4cGFuZGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJnczogSVJvd1RvZ2dsZUV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0lELFxuICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICBncmlkLnJvd1RvZ2dsZS5lbWl0KGFyZ3MpO1xuXG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV4cGFuZGVkU3RhdGVzLnNldChyb3dJRCwgZXhwYW5kZWQpO1xuICAgICAgICBncmlkLmV4cGFuc2lvblN0YXRlcyA9IGV4cGFuZGVkU3RhdGVzO1xuICAgICAgICB0aGlzLmNydWRTZXJ2aWNlLmVuZEVkaXQoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfcmVjX2J5X2lkKHJvd0lEKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHRoaXMuZ2V0Um93RGF0YShyb3dJRCkgOiByb3dJRDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgcmVjb3JkIGluIHRoZSBkYXRhIHZpZXcgYnkgcGsgb3IgLTEgaWYgbm90IGZvdW5kIG9yIHByaW1hcnlLZXkgaXMgbm90IHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwa1xuICAgICAqIEBwYXJhbSBkYXRhQ29sbGVjdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRfcmVjX2luZGV4X2J5X2lkKHBrOiBzdHJpbmcgfCBudW1iZXIsIGRhdGFDb2xsZWN0aW9uPzogYW55W10pOiBudW1iZXIge1xuICAgICAgICBkYXRhQ29sbGVjdGlvbiA9IGRhdGFDb2xsZWN0aW9uIHx8IHRoaXMuZ3JpZC5kYXRhO1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyBkYXRhQ29sbGVjdGlvbi5maW5kSW5kZXgocmVjID0+IHJlY1t0aGlzLmdyaWQucHJpbWFyeUtleV0gPT09IHBrKSA6IC0xO1xuICAgIH1cblxuICAgIHB1YmxpYyBhbGxvd19leHBhbnNpb25fc3RhdGVfY2hhbmdlKHJvd0lELCBleHBhbmRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICE9PSBleHBhbmRlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJlcGFyZV9zb3J0aW5nX2V4cHJlc3Npb24oc3RhdGVDb2xsZWN0aW9uczogQXJyYXk8QXJyYXk8YW55Pj4sIGV4cHJlc3Npb246IElTb3J0aW5nRXhwcmVzc2lvbikge1xuICAgICAgICBpZiAoZXhwcmVzc2lvbi5kaXIgPT09IFNvcnRpbmdEaXJlY3Rpb24uTm9uZSkge1xuICAgICAgICAgICAgc3RhdGVDb2xsZWN0aW9ucy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5zcGxpY2Uoc3RhdGUuZmluZEluZGV4KChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZXhwcmVzc2lvbi5maWVsZE5hbWUpLCAxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzdGF0ZXMgaW4gZWFjaCBjb2xsZWN0aW9uIHdpdGggc2FtZSBmaWVsZHMgcG9pbnQgdG8gdGhlIHNhbWUgb2JqZWN0IHJlZmVyZW5jZS5cbiAgICAgICAgICogSWYgdGhlIGRpZmZlcmVudCBzdGF0ZSBjb2xsZWN0aW9ucyBwcm92aWRlZCBoYXZlIGRpZmZlcmVudCBzaXplcyB3ZSBuZWVkIHRvIGdldCB0aGUgbGFyZ2VzdCBvbmUuXG4gICAgICAgICAqIFRoYXQgd2F5IHdlIGNhbiBnZXQgdGhlIHN0YXRlIHJlZmVyZW5jZSBmcm9tIHRoZSBsYXJnZXN0IG9uZSB0aGF0IGhhcyB0aGUgc2FtZSBmaWVsZE5hbWUgYXMgdGhlIGV4cHJlc3Npb24gdG8gcHJlcGFyZS5cbiAgICAgICAgICovXG4gICAgICAgIGxldCBtYXhDb2xsZWN0aW9uID0gc3RhdGVDb2xsZWN0aW9uc1swXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzdGF0ZUNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobWF4Q29sbGVjdGlvbi5sZW5ndGggPCBzdGF0ZUNvbGxlY3Rpb25zW2ldLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG1heENvbGxlY3Rpb24gPSBzdGF0ZUNvbGxlY3Rpb25zW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heEV4cHIgPSBtYXhDb2xsZWN0aW9uLmZpbmQoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lID09PSBleHByZXNzaW9uLmZpZWxkTmFtZSk7XG5cbiAgICAgICAgc3RhdGVDb2xsZWN0aW9ucy5mb3JFYWNoKGNvbGxlY3Rpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgbXlFeHByID0gY29sbGVjdGlvbi5maW5kKChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZXhwcmVzc2lvbi5maWVsZE5hbWUpO1xuICAgICAgICAgICAgaWYgKCFteUV4cHIgJiYgIW1heEV4cHIpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHByZXNzaW9uIHdpdGggdGhpcyBmaWVsZE5hbWUgaXMgbWlzc2luZyBmcm9tIHRoZSBjdXJyZW50IGFuZCB0aGUgbWF4IGNvbGxlY3Rpb24uXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKGV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghbXlFeHByICYmIG1heEV4cHIpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHByZXNzaW9uIHdpdGggdGhpcyBmaWVsZE5hbWUgaXMgbWlzc2luZyBmcm9tIHRoZSBjdXJyZW50IGFuZCBidXQgdGhlIG1heCBjb2xsZWN0aW9uIGhhcy5cbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnB1c2gobWF4RXhwcik7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihtYXhFeHByLCBleHByZXNzaW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGN1cnJlbnQgY29sbGVjdGlvbiBoYXMgdGhlIGV4cHJlc3Npb24gc28ganVzdCB1cGRhdGUgaXQuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihteUV4cHIsIGV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlX2dyb3VwaW5nX2V4cHJlc3Npb24oX2ZpZWxkTmFtZSkge1xuICAgIH1cblxuICAgIHB1YmxpYyBmaWx0ZXJEYXRhQnlFeHByZXNzaW9ucyhleHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiBhbnlbXSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5nZXRfYWxsX2RhdGEoKTtcblxuICAgICAgICBpZiAoZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB7IGV4cHJlc3Npb25zVHJlZSwgc3RyYXRlZ3k6IHRoaXMuZ3JpZC5maWx0ZXJTdHJhdGVneSB9O1xuICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLmZpbHRlcihjbG9uZUFycmF5KGRhdGEpLCBzdGF0ZSwgdGhpcy5ncmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgcmVsYXRlZCByb3cgb2YgcHJvdmlkZWQgZ3JpZCdzIGRhdGEgc291cmNlIHdpdGggcHJvdmlkZWQgbmV3IHJvdyB2YWx1ZVxuICAgICAqXG4gICAgICogQHBhcmFtIGdyaWQgR3JpZCB0byB1cGRhdGUgZGF0YSBmb3JcbiAgICAgKiBAcGFyYW0gcm93SUQgSUQgb2YgdGhlIHJvdyB0byB1cGRhdGVcbiAgICAgKiBAcGFyYW0gcm93VmFsdWVJbkRhdGFTb3VyY2UgSW5pdGlhbCB2YWx1ZSBvZiB0aGUgcm93IGFzIGl0IGlzIGluIGRhdGEgc291cmNlXG4gICAgICogQHBhcmFtIHJvd0N1cnJlbnRWYWx1ZSBDdXJyZW50IHZhbHVlIG9mIHRoZSByb3cgYXMgaXQgaXMgd2l0aCBhcHBsaWVkIHByZXZpb3VzIHRyYW5zYWN0aW9uc1xuICAgICAqIEBwYXJhbSByb3dOZXdWYWx1ZSBOZXcgdmFsdWUgb2YgdGhlIHJvd1xuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVEYXRhKGdyaWQsIHJvd0lELCByb3dWYWx1ZUluRGF0YVNvdXJjZTogYW55LCByb3dDdXJyZW50VmFsdWU6IGFueSwgcm93TmV3VmFsdWU6IHsgW3g6IHN0cmluZ106IGFueSB9KSB7XG4gICAgICAgIGlmIChncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHJvd0lELFxuICAgICAgICAgICAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5VUERBVEUsXG4gICAgICAgICAgICAgICAgbmV3VmFsdWU6IHJvd05ld1ZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ3JpZC50cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLCByb3dDdXJyZW50VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVyZ2VPYmplY3RzKHJvd1ZhbHVlSW5EYXRhU291cmNlLCByb3dOZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHByb3RlY3RlZCB1cGRhdGVfcm93X2luX2FycmF5KHZhbHVlOiBhbnksIHJvd0lEOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgZ3JpZC5kYXRhW2luZGV4XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRTb3J0U3RyYXRlZ3lQZXJDb2x1bW4oZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0X2NvbHVtbl9ieV9uYW1lKGZpZWxkTmFtZSkgP1xuICAgICAgICAgICAgdGhpcy5nZXRfY29sdW1uX2J5X25hbWUoZmllbGROYW1lKS5zb3J0U3RyYXRlZ3kgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG59XG4iXX0=
447
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVFLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUt2RyxPQUFPLEVBQWUsZUFBZSxFQUFTLE1BQU0scUNBQXFDLENBQUM7QUFDMUYsT0FBTyxFQUFXLGtCQUFrQixFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFJaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBTTNCLFlBQ1csV0FBK0IsRUFDL0IsR0FBMkI7UUFEM0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQXdCO1FBSjVCLGVBQVUsR0FBa0MsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFJaEQsQ0FBQztJQUVwQyxrQkFBa0IsQ0FBQyxJQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBZSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFD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QyxPQUFPLEVBQUU7WUFDM0IsTUFBTSxXQUFXLEdBQWdCO2dCQUM3QixFQUFFLEVBQUUsS0FBSztnQkFDVCxJQUFJLEVBQUUsZUFBZSxDQUFDLE1BQU07Z0JBQzVCLFFBQVEsRUFBRSxXQUFXO2FBQ3hCLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDdkQ7YUFBTTtZQUNILFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNuRDtJQUNMLENBQUM7SUFHUyxtQkFBbUIsQ0FBQyxLQUFVLEVBQUUsS0FBVSxFQUFFLEtBQWE7UUFDL0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRVMsd0JBQXdCLENBQUMsU0FBaUI7UUFDaEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDcEUsQ0FBQzs7O1lBemVKLFVBQVU7OztZQVRPLGtCQUFrQjtZQUkzQixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCByZXZlcnNlTWFwcGVyLCBtZXJnZU9iamVjdHMgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IERhdGFVdGlsLCBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiwgU29ydGluZ0RpcmVjdGlvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEdyaWRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hSb3dEaXJlY3RpdmUgfSBmcm9tICcuL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlLCBTdGF0ZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IElneENlbGwsIElneEdyaWRDUlVEU2VydmljZSwgSWd4RWRpdFJvdyB9IGZyb20gJy4vY29tbW9uL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tICcuL2NvbW1vbi9jb2x1bW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcmlkRWRpdEV2ZW50QXJncywgSVJvd1RvZ2dsZUV2ZW50QXJncyB9IGZyb20gJy4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Nb3ZpbmdTZXJ2aWNlIH0gZnJvbSAnLi9tb3ZpbmcvbW92aW5nLnNlcnZpY2UnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdyaWRCYXNlQVBJU2VydmljZTxUIGV4dGVuZHMgSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4ge1xuXG5cbiAgICBwdWJsaWMgZ3JpZDogVDtcbiAgICBwcm90ZWN0ZWQgZGVzdHJveU1hcDogTWFwPHN0cmluZywgU3ViamVjdDxib29sZWFuPj4gPSBuZXcgTWFwPHN0cmluZywgU3ViamVjdDxib29sZWFuPj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY3J1ZFNlcnZpY2U6IElneEdyaWRDUlVEU2VydmljZSxcbiAgICAgICAgcHVibGljIGNtczogSWd4Q29sdW1uTW92aW5nU2VydmljZSkgeyB9XG5cbiAgICBwdWJsaWMgZ2V0X2NvbHVtbl9ieV9uYW1lKG5hbWU6IHN0cmluZyk6IENvbHVtblR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmNvbHVtbkxpc3QuZmluZCgoY29sOiBDb2x1bW5UeXBlKSA9PiBjb2wuZmllbGQgPT09IG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfc3VtbWFyeV9kYXRhKCkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBsZXQgZGF0YSA9IGdyaWQuZmlsdGVyZWREYXRhO1xuICAgICAgICBpZiAoZGF0YSAmJiBncmlkLmhhc1Bpbm5lZFJlY29yZHMpIHtcbiAgICAgICAgICAgIGRhdGEgPSBncmlkLl9maWx0ZXJlZFVucGlubmVkRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIGlmIChncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLm1lcmdlVHJhbnNhY3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICBjbG9uZUFycmF5KGdyaWQuZGF0YSksXG4gICAgICAgICAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpLFxuICAgICAgICAgICAgICAgICAgICBncmlkLnByaW1hcnlLZXksXG4gICAgICAgICAgICAgICAgICAgIGdyaWQuZGF0YUNsb25lU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZWRSb3dzID0gZ3JpZC50cmFuc2FjdGlvbnMuZ2V0VHJhbnNhY3Rpb25Mb2coKS5maWx0ZXIodCA9PiB0LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5ERUxFVEUpLm1hcCh0ID0+IHQuaWQpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZWRSb3dzLmZvckVhY2gocm93SUQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRGF0YSA9IGdyaWQucHJpbWFyeUtleSA/IGRhdGEubWFwKHJlYyA9PiByZWNbZ3JpZC5wcmltYXJ5S2V5XSkgOiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRlbXBEYXRhLmluZGV4T2Yocm93SUQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdyaWQuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldFJvd0RhdGEocm93SUQ6IGFueSkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRfYWxsX2RhdGEodGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldF9yb3dfaW5kZXhfaW5fZGF0YShyb3dJRCwgZGF0YSk7XG4gICAgICAgIHJldHVybiBkYXRhW2luZGV4XTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19pbmRleF9pbl9kYXRhKHJvd0lEOiBhbnksIGRhdGFDb2xsZWN0aW9uPzogYW55W10pOiBudW1iZXIge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkIGFzIElneEdyaWRCYXNlRGlyZWN0aXZlO1xuICAgICAgICBpZiAoIWdyaWQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhID0gZGF0YUNvbGxlY3Rpb24gPz8gdGhpcy5nZXRfYWxsX2RhdGEoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCk7XG4gICAgICAgIHJldHVybiBncmlkLnByaW1hcnlLZXkgPyBkYXRhLmZpbmRJbmRleChyZWNvcmQgPT4gcmVjb3JkLnJlY29yZFJlZiA/IHJlY29yZC5yZWNvcmRSZWZbZ3JpZC5wcmltYXJ5S2V5XSA9PT0gcm93SURcbiAgICAgICAgICAgIDogcmVjb3JkW2dyaWQucHJpbWFyeUtleV0gPT09IHJvd0lEKSA6IGRhdGEuaW5kZXhPZihyb3dJRCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9yb3dfYnlfa2V5KHJvd1NlbGVjdG9yOiBhbnkpOiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4ge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5O1xuICAgICAgICBpZiAocHJpbWFyeUtleSAhPT0gdW5kZWZpbmVkICYmIHByaW1hcnlLZXkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVJvd0xpc3QuZmluZCgocm93KSA9PiByb3cucm93RGF0YVtwcmltYXJ5S2V5XSA9PT0gcm93U2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhUm93TGlzdC5maW5kKChyb3cpID0+IHJvdy5yb3dEYXRhID09PSByb3dTZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19ieV9pbmRleChyb3dJbmRleDogbnVtYmVyKTogSWd4Um93RGlyZWN0aXZlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dMaXN0LmZpbmQoKHJvdykgPT4gcm93LmluZGV4ID09PSByb3dJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcm93SUQgb2YgdGhlIHJlY29yZCBhdCB0aGUgc3BlY2lmaWVkIGRhdGEgdmlldyBpbmRleFxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHBhcmFtIGRhdGFDb2xsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIGdldF9yZWNfaWRfYnlfaW5kZXgoaW5kZXg6IG51bWJlciwgZGF0YUNvbGxlY3Rpb24/OiBhbnlbXSk6IGFueSB7XG4gICAgICAgIGRhdGFDb2xsZWN0aW9uID0gZGF0YUNvbGxlY3Rpb24gfHwgdGhpcy5ncmlkLmRhdGE7XG4gICAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgZGF0YUNvbGxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCByZWMgPSBkYXRhQ29sbGVjdGlvbltpbmRleF07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcmVjO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfY2VsbF9ieV9rZXkocm93U2VsZWN0b3I6IGFueSwgZmllbGQ6IHN0cmluZyk6IElneEdyaWRDZWxsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRfcm93X2J5X2tleShyb3dTZWxlY3Rvcik7XG4gICAgICAgIGlmIChyb3cgJiYgcm93LmNlbGxzKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93LmNlbGxzLmZpbmQoKGNlbGwpID0+IGNlbGwuY29sdW1uLmZpZWxkID09PSBmaWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X2NlbGxfYnlfaW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sdW1uSUQ6IG51bWJlciB8IHN0cmluZyk6IElneEdyaWRDZWxsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRfcm93X2J5X2luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgaGFzQ2VsbHMgPSByb3cgJiYgcm93LmNlbGxzO1xuICAgICAgICBpZiAoaGFzQ2VsbHMgJiYgdHlwZW9mIGNvbHVtbklEID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHJvdy5jZWxscy5maW5kKChjZWxsKSA9PiBjZWxsLmNvbHVtbi5pbmRleCA9PT0gY29sdW1uSUQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNDZWxscyAmJiB0eXBlb2YgY29sdW1uSUQgPT09ICdzdHJpbmcnKXtcbiAgICAgICAgICAgIHJldHVybiByb3cuY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC5jb2x1bW4uZmllbGQgPT09IGNvbHVtbklEKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIGdldF9jZWxsX2J5X3Zpc2libGVfaW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik6IElneEdyaWRDZWxsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRfcm93X2J5X2luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuY2VsbHMpIHtcbiAgICAgICAgICAgIHJldHVybiByb3cuY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC52aXNpYmxlQ29sdW1uSW5kZXggPT09IGNvbHVtbkluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVfY2VsbChjZWxsOiBJZ3hDZWxsKTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJncyA9IGNlbGwuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlKTtcblxuICAgICAgICB0aGlzLmdyaWQuc3VtbWFyeVNlcnZpY2UuY2xlYXJTdW1tYXJ5Q2FjaGUoYXJncyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFJvd0RhdGEoY2VsbC5pZC5yb3dJRCk7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSh0aGlzLmdyaWQsIGNlbGwuaWQucm93SUQsIGRhdGEsIGNlbGwucm93RGF0YSwgcmV2ZXJzZU1hcHBlcihjZWxsLmNvbHVtbi5maWVsZCwgYXJncy5uZXdWYWx1ZSkpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IGNlbGwuY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuaXNSb3dTZWxlY3RlZChjZWxsLmlkLnJvd0lEKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KGNlbGwuaWQucm93SUQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJvd0J5SWQoYXJncy5uZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnN1bW1hcnlTZXJ2aWNlLnJlbW92ZVN1bW1hcmllcyhjZWxsLmlkLnJvd0lEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5yb3dFZGl0YWJsZSB8fCAhdGhpcy5jcnVkU2VydmljZS5yb3cgfHxcbiAgICAgICAgICAgIHRoaXMuY3J1ZFNlcnZpY2Uucm93LmlkICE9PSBjZWxsLmlkLnJvd0lEIHx8ICF0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zdW1tYXJ5U2VydmljZS5jbGVhclN1bW1hcnlDYWNoZShhcmdzKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5waXBlVHJpZ2dlcisrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ1JVRCByZWZhY3RvciB0byBub3QgZW1pdCBlZGl0aW5nIGV2dHMuXG4gICAgcHVibGljIHVwZGF0ZV9yb3cocm93OiBJZ3hFZGl0Um93LCB2YWx1ZTogYW55LCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmlzUm93U2VsZWN0ZWQocm93LmlkKTtcbiAgICAgICAgY29uc3Qgcm93SW5FZGl0TW9kZSA9IHRoaXMuY3J1ZFNlcnZpY2Uucm93O1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRfYWxsX2RhdGEoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRfcm93X2luZGV4X2luX2RhdGEocm93LmlkLCBkYXRhKTtcbiAgICAgICAgY29uc3QgaGFzU3VtbWFyaXplZCA9IGdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnM7XG4gICAgICAgIHRoaXMuY3J1ZFNlcnZpY2UudXBkYXRlUm93RWRpdERhdGEocm93LCB2YWx1ZSk7XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcblxuICAgICAgICAvLyBJZiBubyB2YWxpZCByb3cgaXMgZm91bmRcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgY29uc3QgaGFzQ2hhbmdlcyA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKGFyZ3Mucm93SUQsIHRydWUpO1xuICAgICAgICAgICAgZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIWhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYXJncy5uZXdWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzU3VtbWFyaXplZCkge1xuICAgICAgICAgICAgZ3JpZC5zdW1tYXJ5U2VydmljZS5yZW1vdmVTdW1tYXJpZXMoYXJncy5yb3dJRCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoZ3JpZCwgcm93LmlkLCBkYXRhW2luZGV4XSwgYXJncy5vbGRWYWx1ZSwgYXJncy5uZXdWYWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld0lkID0gZ3JpZC5wcmltYXJ5S2V5ID8gYXJncy5uZXdWYWx1ZVtncmlkLnByaW1hcnlLZXldIDogYXJncy5uZXdWYWx1ZTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICBncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3cocm93LmlkKTtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dCeUlkKG5ld0lkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtYWtlIHN1cmUgc2VsZWN0aW9uIGlzIGhhbmRsZWQgcHJpb3IgdG8gdXBkYXRpbmcgdGhlIHJvdy5pZFxuICAgICAgICByb3cuaWQgPSBuZXdJZDtcbiAgICAgICAgaWYgKGhhc1N1bW1hcml6ZWQpIHtcbiAgICAgICAgICAgIGdyaWQuc3VtbWFyeVNlcnZpY2UucmVtb3ZlU3VtbWFyaWVzKG5ld0lkKTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLnBpcGVUcmlnZ2VyKys7XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIHNvcnQoZXhwcmVzc2lvbjogSVNvcnRpbmdFeHByZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChleHByZXNzaW9uLmRpciA9PT0gU29ydGluZ0RpcmVjdGlvbi5Ob25lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZV9ncm91cGluZ19leHByZXNzaW9uKGV4cHJlc3Npb24uZmllbGROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3J0aW5nU3RhdGUgPSBjbG9uZUFycmF5KHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMpO1xuICAgICAgICB0aGlzLnByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKFtzb3J0aW5nU3RhdGVdLCBleHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHNvcnRpbmdTdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc29ydF9tdWx0aXBsZShleHByZXNzaW9uczogSVNvcnRpbmdFeHByZXNzaW9uW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGVhY2ggb2YgZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgICAgIGlmIChlYWNoLmRpciA9PT0gU29ydGluZ0RpcmVjdGlvbi5Ob25lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVfZ3JvdXBpbmdfZXhwcmVzc2lvbihlYWNoLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKFtzb3J0aW5nU3RhdGVdLCBlYWNoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgPSBzb3J0aW5nU3RhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyX3NvcnQoZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSBzb3J0aW5nU3RhdGUuZmluZEluZGV4KChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZmllbGROYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHNvcnRpbmdTdGF0ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHNvcnRpbmdTdGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcl9ncm91cGJ5KF9uYW1lPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPikge1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG91bGRfYXBwbHlfbnVtYmVyX3N0eWxlKGNvbHVtbjogQ29sdW1uVHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfZGF0YSgpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBncmlkLmRhdGEgPyBncmlkLmRhdGEgOiBbXTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9hbGxfZGF0YShpbmNsdWRlVHJhbnNhY3Rpb25zID0gZmFsc2UpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGxldCBkYXRhID0gZ3JpZCAmJiBncmlkLmRhdGEgPyBncmlkLmRhdGEgOiBbXTtcbiAgICAgICAgZGF0YSA9IGluY2x1ZGVUcmFuc2FjdGlvbnMgPyBncmlkLmRhdGFXaXRoQWRkZWRJblRyYW5zYWN0aW9uUm93cyA6IGRhdGE7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfZmlsdGVyZWRfZGF0YSgpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZmlsdGVyZWREYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRSb3dUb0RhdGEocm93RGF0YTogYW55LCBwYXJlbnRJRD8pIHtcbiAgICAgICAgLy8gQWRkIHJvdyBnb2VzIHRvIHRyYW5zYWN0aW9ucyBhbmQgaWYgcm93RWRpdGFibGUgaXMgcHJvcGVybHkgaW1wbGVtZW50ZWQsIGFkZGVkIHJvd3Mgd2lsbCBnbyB0byBwZW5kaW5nIHRyYW5zYWN0aW9uc1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJvdyBpbiBlZGl0IC0gPiBjb21taXQgYW5kIGNsb3NlXG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG5cbiAgICAgICAgaWYgKGdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSBncmlkLnByaW1hcnlLZXkgPyByb3dEYXRhW2dyaWQucHJpbWFyeUtleV0gOiByb3dEYXRhO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0geyBpZDogdHJhbnNhY3Rpb25JZCwgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkFERCwgbmV3VmFsdWU6IHJvd0RhdGEgfTtcbiAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBncmlkLmRhdGEucHVzaChyb3dEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVSb3dGcm9tRGF0YShyb3dJRDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBhIHJvdyAoaW5kZXggIT09IDApIGRlbGV0ZSBpdFxuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgYSByb3cgaW4gQUREIG9yIFVQREFURSBzdGF0ZSBjaGFuZ2UgaXQncyBzdGF0ZSB0byBERUxFVEVcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgaWYgKGdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gPSB7IGlkOiByb3dJRCwgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkRFTEVURSwgbmV3VmFsdWU6IG51bGwgfTtcbiAgICAgICAgICAgICAgICBncmlkLnRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24sIGdyaWQuZGF0YVtpbmRleF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncmlkLmRhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlOiBTdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvd0lEKTtcbiAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh7IGlkOiByb3dJRCwgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkRFTEVURSwgbmV3VmFsdWU6IG51bGwgfSwgc3RhdGUgJiYgc3RhdGUucmVjb3JkUmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVSb3dCeUlkKHJvd0lkOiBhbnkpOiBhbnkge1xuICAgICAgICBsZXQgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0X2FsbF9kYXRhKCk7XG4gICAgICAgIGlmIChncmlkLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XG4gICAgICAgICAgICBpbmRleCA9IGRhdGEubWFwKChyZWNvcmQpID0+IHJlY29yZFtncmlkLnByaW1hcnlLZXldKS5pbmRleE9mKHJvd0lkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4ID0gZGF0YS5pbmRleE9mKHJvd0lkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0ZTogU3RhdGUgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRTdGF0ZShyb3dJZCk7XG4gICAgICAgIGNvbnN0IGhhc1Jvd0luTm9uRGVsZXRlZFN0YXRlID0gc3RhdGUgJiYgc3RhdGUudHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLkRFTEVURTtcblxuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgYSByb3cgKGluZGV4ICE9PSAtMSkgYW5kIHRoZSB3ZSBoYXZlIGNlbGwgaW4gZWRpdCBtb2RlIG9uIHNhbWUgcm93IGV4aXQgZWRpdCBtb2RlXG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBubyByb3cgKGluZGV4ID09PSAtMSksIGJ1dCB0aGVyZSBpcyBhIHJvdyBpbiBBREQgb3IgVVBEQVRFIHN0YXRlIGRvIGFzIGFib3ZlXG4gICAgICAgIC8vICBPdGhlcndpc2UganVzdCBleGl0IC0gdGhlcmUgaXMgbm90aGluZyB0byBkZWxldGVcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSB8fCBoYXNSb3dJbk5vbkRlbGV0ZWRTdGF0ZSkge1xuICAgICAgICAgICAgLy8gQWx3YXlzIGV4aXQgZWRpdCB3aGVuIHJvdyBpcyBkZWxldGVkXG4gICAgICAgICAgICB0aGlzLmNydWRTZXJ2aWNlLmVuZEVkaXQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWNvcmQgPSBkYXRhW2luZGV4XTtcbiAgICAgICAgLy8gLy8gIFRPRE86IHNob3VsZCB3ZSBlbWl0IHRoaXMgd2hlbiBjYXNjYWRlT25EZWxldGUgaXMgdHJ1ZSBmb3IgZWFjaCByb3c/IT8hXG4gICAgICAgIGdyaWQucm93RGVsZXRlZE5vdGlmaWVyLm5leHQoeyBkYXRhOiBkYXRhW2luZGV4XSB9KTtcblxuICAgICAgICB0aGlzLmRlbGV0ZVJvd0Zyb21EYXRhKHJvd0lkLCBpbmRleCk7XG5cbiAgICAgICAgaWYgKGdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKHJvd0lkKSkge1xuICAgICAgICAgICAgZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KHJvd0lkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIGdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgICAgICAvLyBEYXRhIG5lZWRzIHRvIGJlIHJlY2FsY3VsYXRlZCBpZiB0cmFuc2FjdGlvbnMgYXJlIGluIHBsYWNlXG4gICAgICAgIC8vIElmIG5vIHRyYW5zYWN0aW9ucywgYGRhdGFgIHdpbGwgYmUgYSByZWZlcmVuY2UgdG8gdGhlIGdyaWQgZ2V0dGVyLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBzdGFsZVxuICAgICAgICBjb25zdCBkYXRhQWZ0ZXJEZWxldGUgPSBncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID8gZ3JpZC5kYXRhV2l0aEFkZGVkSW5UcmFuc2FjdGlvblJvd3MgOiBkYXRhO1xuICAgICAgICBncmlkLnJlZnJlc2hTZWFyY2goKTtcbiAgICAgICAgaWYgKGRhdGFBZnRlckRlbGV0ZS5sZW5ndGggJSBncmlkLnBlclBhZ2UgPT09IDAgJiYgZGF0YUFmdGVyRGVsZXRlLmxlbmd0aCAvIGdyaWQucGVyUGFnZSAtIDEgPCBncmlkLnBhZ2UgJiYgZ3JpZC5wYWdlICE9PSAwKSB7XG4gICAgICAgICAgICBncmlkLnBhZ2UtLTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9yb3dfaWQocm93RGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByb3dEYXRhW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHJvd0RhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIHJvd19kZWxldGVkX3RyYW5zYWN0aW9uKHJvd0lEOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgaWYgKCFncmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdGUgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRTdGF0ZShyb3dJRCk7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5ERUxFVEU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJlY29yZDogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IHN0YXRlcyA9IGdyaWQuZXhwYW5zaW9uU3RhdGVzO1xuICAgICAgICBjb25zdCByb3dJRCA9IGdyaWQucHJpbWFyeUtleSA/IHJlY29yZFtncmlkLnByaW1hcnlLZXldIDogcmVjb3JkO1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IHN0YXRlcy5nZXQocm93SUQpO1xuXG4gICAgICAgIGlmIChleHBhbmRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwYW5kZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ3JpZC5nZXREZWZhdWx0RXhwYW5kU3RhdGUocmVjb3JkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShyb3dJRDogYW55LCBleHBhbmRlZDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBjb25zdCBleHBhbmRlZFN0YXRlcyA9IGdyaWQuZXhwYW5zaW9uU3RhdGVzO1xuXG4gICAgICAgIGlmICghdGhpcy5hbGxvd19leHBhbnNpb25fc3RhdGVfY2hhbmdlKHJvd0lELCBleHBhbmRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElSb3dUb2dnbGVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRCxcbiAgICAgICAgICAgIGV4cGFuZGVkLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgZ3JpZC5yb3dUb2dnbGUuZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBleHBhbmRlZFN0YXRlcy5zZXQocm93SUQsIGV4cGFuZGVkKTtcbiAgICAgICAgZ3JpZC5leHBhbnNpb25TdGF0ZXMgPSBleHBhbmRlZFN0YXRlcztcbiAgICAgICAgdGhpcy5jcnVkU2VydmljZS5lbmRFZGl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3JlY19ieV9pZChyb3dJRCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyB0aGlzLmdldFJvd0RhdGEocm93SUQpIDogcm93SUQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHJlY29yZCBpbiB0aGUgZGF0YSB2aWV3IGJ5IHBrIG9yIC0xIGlmIG5vdCBmb3VuZCBvciBwcmltYXJ5S2V5IGlzIG5vdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGtcbiAgICAgKiBAcGFyYW0gZGF0YUNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0X3JlY19pbmRleF9ieV9pZChwazogc3RyaW5nIHwgbnVtYmVyLCBkYXRhQ29sbGVjdGlvbj86IGFueVtdKTogbnVtYmVyIHtcbiAgICAgICAgZGF0YUNvbGxlY3Rpb24gPSBkYXRhQ29sbGVjdGlvbiB8fCB0aGlzLmdyaWQuZGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gZGF0YUNvbGxlY3Rpb24uZmluZEluZGV4KHJlYyA9PiByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldID09PSBwaykgOiAtMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWxsb3dfZXhwYW5zaW9uX3N0YXRlX2NoYW5nZShyb3dJRCwgZXhwYW5kZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKSAhPT0gZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKHN0YXRlQ29sbGVjdGlvbnM6IEFycmF5PEFycmF5PGFueT4+LCBleHByZXNzaW9uOiBJU29ydGluZ0V4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb24uZGlyID09PSBTb3J0aW5nRGlyZWN0aW9uLk5vbmUpIHtcbiAgICAgICAgICAgIHN0YXRlQ29sbGVjdGlvbnMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUuc3BsaWNlKHN0YXRlLmZpbmRJbmRleCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IGV4cHJlc3Npb24uZmllbGROYW1lKSwgMSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGVzIGluIGVhY2ggY29sbGVjdGlvbiB3aXRoIHNhbWUgZmllbGRzIHBvaW50IHRvIHRoZSBzYW1lIG9iamVjdCByZWZlcmVuY2UuXG4gICAgICAgICAqIElmIHRoZSBkaWZmZXJlbnQgc3RhdGUgY29sbGVjdGlvbnMgcHJvdmlkZWQgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgd2UgbmVlZCB0byBnZXQgdGhlIGxhcmdlc3Qgb25lLlxuICAgICAgICAgKiBUaGF0IHdheSB3ZSBjYW4gZ2V0IHRoZSBzdGF0ZSByZWZlcmVuY2UgZnJvbSB0aGUgbGFyZ2VzdCBvbmUgdGhhdCBoYXMgdGhlIHNhbWUgZmllbGROYW1lIGFzIHRoZSBleHByZXNzaW9uIHRvIHByZXBhcmUuXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgbWF4Q29sbGVjdGlvbiA9IHN0YXRlQ29sbGVjdGlvbnNbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3RhdGVDb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKG1heENvbGxlY3Rpb24ubGVuZ3RoIDwgc3RhdGVDb2xsZWN0aW9uc1tpXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBtYXhDb2xsZWN0aW9uID0gc3RhdGVDb2xsZWN0aW9uc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXhFeHByID0gbWF4Q29sbGVjdGlvbi5maW5kKChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZXhwcmVzc2lvbi5maWVsZE5hbWUpO1xuXG4gICAgICAgIHN0YXRlQ29sbGVjdGlvbnMuZm9yRWFjaChjb2xsZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG15RXhwciA9IGNvbGxlY3Rpb24uZmluZCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IGV4cHJlc3Npb24uZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmICghbXlFeHByICYmICFtYXhFeHByKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiB3aXRoIHRoaXMgZmllbGROYW1lIGlzIG1pc3NpbmcgZnJvbSB0aGUgY3VycmVudCBhbmQgdGhlIG1heCBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaChleHByZXNzaW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIW15RXhwciAmJiBtYXhFeHByKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiB3aXRoIHRoaXMgZmllbGROYW1lIGlzIG1pc3NpbmcgZnJvbSB0aGUgY3VycmVudCBhbmQgYnV0IHRoZSBtYXggY29sbGVjdGlvbiBoYXMuXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKG1heEV4cHIpO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWF4RXhwciwgZXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50IGNvbGxlY3Rpb24gaGFzIHRoZSBleHByZXNzaW9uIHNvIGp1c3QgdXBkYXRlIGl0LlxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obXlFeHByLCBleHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZV9ncm91cGluZ19leHByZXNzaW9uKF9maWVsZE5hbWUpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmlsdGVyRGF0YUJ5RXhwcmVzc2lvbnMoZXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTogYW55W10ge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuZ2V0X2FsbF9kYXRhKCk7XG5cbiAgICAgICAgaWYgKGV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0geyBleHByZXNzaW9uc1RyZWUsIHN0cmF0ZWd5OiB0aGlzLmdyaWQuZmlsdGVyU3RyYXRlZ3kgfTtcbiAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5maWx0ZXIoY2xvbmVBcnJheShkYXRhKSwgc3RhdGUsIHRoaXMuZ3JpZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHJlbGF0ZWQgcm93IG9mIHByb3ZpZGVkIGdyaWQncyBkYXRhIHNvdXJjZSB3aXRoIHByb3ZpZGVkIG5ldyByb3cgdmFsdWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBncmlkIEdyaWQgdG8gdXBkYXRlIGRhdGEgZm9yXG4gICAgICogQHBhcmFtIHJvd0lEIElEIG9mIHRoZSByb3cgdG8gdXBkYXRlXG4gICAgICogQHBhcmFtIHJvd1ZhbHVlSW5EYXRhU291cmNlIEluaXRpYWwgdmFsdWUgb2YgdGhlIHJvdyBhcyBpdCBpcyBpbiBkYXRhIHNvdXJjZVxuICAgICAqIEBwYXJhbSByb3dDdXJyZW50VmFsdWUgQ3VycmVudCB2YWx1ZSBvZiB0aGUgcm93IGFzIGl0IGlzIHdpdGggYXBwbGllZCBwcmV2aW91cyB0cmFuc2FjdGlvbnNcbiAgICAgKiBAcGFyYW0gcm93TmV3VmFsdWUgTmV3IHZhbHVlIG9mIHRoZSByb3dcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlRGF0YShncmlkLCByb3dJRCwgcm93VmFsdWVJbkRhdGFTb3VyY2U6IGFueSwgcm93Q3VycmVudFZhbHVlOiBhbnksIHJvd05ld1ZhbHVlOiB7IFt4OiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICBpZiAoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0ge1xuICAgICAgICAgICAgICAgIGlkOiByb3dJRCxcbiAgICAgICAgICAgICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuVVBEQVRFLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiByb3dOZXdWYWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbiwgcm93Q3VycmVudFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lcmdlT2JqZWN0cyhyb3dWYWx1ZUluRGF0YVNvdXJjZSwgcm93TmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlX3Jvd19pbl9hcnJheSh2YWx1ZTogYW55LCByb3dJRDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGdyaWQuZGF0YVtpbmRleF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0U29ydFN0cmF0ZWd5UGVyQ29sdW1uKGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldF9jb2x1bW5fYnlfbmFtZShmaWVsZE5hbWUpID9cbiAgICAgICAgICAgIHRoaXMuZ2V0X2NvbHVtbl9ieV9uYW1lKGZpZWxkTmFtZSkuc29ydFN0cmF0ZWd5IDogdW5kZWZpbmVkO1xuICAgIH1cblxufVxuIl19
@@ -1,7 +1,7 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { first } from 'rxjs/operators';
3
3
  import { Subject } from 'rxjs';
4
- import { isEqual } from '../../core/utils';
4
+ import { copyDescriptors, isEqual } from '../../core/utils';
5
5
  export class IgxEditRow {
6
6
  constructor(id, index, data, grid) {
7
7
  this.id = id;
@@ -342,7 +342,8 @@ export class IgxRowCrudState extends IgxCellCrudState {
342
342
  const rowInEditMode = grid.gridAPI.crudService.row;
343
343
  row.newData = value !== null && value !== void 0 ? value : rowInEditMode.transactionState;
344
344
  if (rowInEditMode && row.id === rowInEditMode.id) {
345
- row.data = Object.assign(Object.assign({}, row.data), rowInEditMode.transactionState);
345
+ // do not use spread operator here as it will copy everything over an empty object with no descriptors
346
+ row.data = Object.assign(copyDescriptors(row.data), row.data, rowInEditMode.transactionState);
346
347
  // TODO: Workaround for updating a row in edit mode through the API
347
348
  }
348
349
  else if (this.grid.transactions.enabled) {
@@ -557,4 +558,4 @@ export class IgxGridCRUDService extends IgxRowAddCrudState {
557
558
  IgxGridCRUDService.decorators = [
558
559
  { type: Injectable }
559
560
  ];
560
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbW1vbi9jcnVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsTUFBTSxPQUFPLFVBQVU7SUFLbkIsWUFBbUIsRUFBTyxFQUFTLEtBQWEsRUFBUyxJQUFTLEVBQVMsSUFBcUM7UUFBN0YsT0FBRSxHQUFGLEVBQUUsQ0FBSztRQUFTLFVBQUssR0FBTCxLQUFLLENBQVE7UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFLO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBaUM7SUFBSSxDQUFDO0lBRTlHLG1CQUFtQixDQUFDLGVBQWUsR0FBRyxJQUFJLEVBQUUsS0FBYTs7UUFDNUQsTUFBTSxJQUFJLEdBQXVCO1lBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNsQixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDbkIsTUFBTSxFQUFFLEtBQUs7WUFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDaEIsUUFBUSxFQUFFLEtBQUs7WUFDZixLQUFLO1NBQ1IsQ0FBQztRQUNGLElBQUksZUFBZSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBQSxJQUFJLENBQUMsT0FBTyxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJ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QixDQUFDLGFBQWEsQ0FBQztRQUM1RCxJQUFJLEtBQUssSUFBSSxVQUFVLEVBQUU7WUFDckIsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUNoQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3JHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztTQUNuRDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OztZQWpJSixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJR3JpZEVkaXREb25lRXZlbnRBcmdzLCBJR3JpZEVkaXRFdmVudEFyZ3MsIElneEdyaWRCYXNlRGlyZWN0aXZlLCBJUm93RGF0YUV2ZW50QXJncyB9IGZyb20gJy4uL2dyaWQvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hSb3dEaXJlY3RpdmUgfSBmcm9tICcuLi9yb3cuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBJZ3hFZGl0Um93IHtcbiAgICBwdWJsaWMgdHJhbnNhY3Rpb25TdGF0ZTogYW55O1xuICAgIHB1YmxpYyBzdGF0ZTogYW55O1xuICAgIHB1YmxpYyBuZXdEYXRhOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgaWQ6IGFueSwgcHVibGljIGluZGV4OiBudW1iZXIsIHB1YmxpYyBkYXRhOiBhbnksIHB1YmxpYyBncmlkOiBJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyBjcmVhdGVFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSA9IHRydWUsIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBhcmdzOiBJR3JpZEVkaXRFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0RhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGlzQWRkUm93OiBmYWxzZSxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbmNsdWRlTmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGFyZ3MubmV3VmFsdWUgPSB0aGlzLm5ld0RhdGEgPz8gdGhpcy5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEb25lRWRpdEV2ZW50QXJncyhjYWNoZWRSb3dEYXRhOiBhbnksIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgP1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5pZCwgdHJ1ZSkgOiB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRSb3dEYXRhKHRoaXMuaWQpO1xuICAgICAgICBjb25zdCByb3dEYXRhID0gdXBkYXRlZERhdGEgPz8gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0Um93RGF0YSh0aGlzLmlkKTtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93RGF0YSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiBjYWNoZWRSb3dEYXRhLFxuICAgICAgICAgICAgbmV3VmFsdWU6IHVwZGF0ZWREYXRhLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGlzQWRkUm93OiBmYWxzZSxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hBZGRSb3cgZXh0ZW5kcyBJZ3hFZGl0Um93IHtcbiAgICBwdWJsaWMgaXNBZGRSb3cgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGlkOiBhbnksXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgZGF0YTogYW55LFxuICAgICAgICBwdWJsaWMgcmVjb3JkUmVmOiBhbnksXG4gICAgICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlKSB7XG4gICAgICAgIHN1cGVyKGlkLCBpbmRleCwgZGF0YSwgZ3JpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUVkaXRFdmVudEFyZ3MoaW5jbHVkZU5ld1ZhbHVlID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzdXBlci5jcmVhdGVFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSwgZXZlbnQpO1xuICAgICAgICBhcmdzLm9sZFZhbHVlID0gbnVsbDtcbiAgICAgICAgYXJncy5pc0FkZFJvdyA9IHRydWU7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEb25lRWRpdEV2ZW50QXJncyhjYWNoZWRSb3dEYXRhOiBhbnksIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHN1cGVyLmNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKG51bGwsIGV2ZW50KTtcbiAgICAgICAgYXJncy5pc0FkZFJvdyA9IHRydWU7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZ3hBZGRSb3dQYXJlbnQge1xuICAgIHJvd0lEOiBzdHJpbmc7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBhc0NoaWxkOiBib29sZWFuO1xuICAgIGlzUGlubmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgSWd4Q2VsbCB7XG4gICAgcHVibGljIHByaW1hcnlLZXk6IGFueTtcbiAgICBwdWJsaWMgc3RhdGU6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgaWQsXG4gICAgICAgIHB1YmxpYyByb3dJbmRleDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgY29sdW1uLFxuICAgICAgICBwdWJsaWMgdmFsdWU6IGFueSxcbiAgICAgICAgcHVibGljIGVkaXRWYWx1ZTogYW55LFxuICAgICAgICBwdWJsaWMgcm93RGF0YTogYW55LFxuICAgICAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgY2FzdFRvTnVtYmVyKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInICYmICF0aGlzLmNvbHVtbi5pbmxpbmVFZGl0b3JUZW1wbGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuICFpc05hTih2KSAmJiBpc0Zpbml0ZSh2KSA/IHYgOiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRWRpdEV2ZW50QXJncyhpbmNsdWRlTmV3VmFsdWUgPSB0cnVlLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93SUQ6IHRoaXMuaWQucm93SUQsXG4gICAgICAgICAgICBjZWxsSUQ6IHRoaXMuaWQsXG4gICAgICAgICAgICByb3dEYXRhOiB0aGlzLnJvd0RhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2UsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbmNsdWRlTmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGFyZ3MubmV3VmFsdWUgPSB0aGlzLmNhc3RUb051bWJlcih0aGlzLmVkaXRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKHZhbHVlOiBhbnksIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgP1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5pZC5yb3dJRCwgdHJ1ZSkgOiB0aGlzLnJvd0RhdGE7XG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSB1cGRhdGVkRGF0YSA9PT0gbnVsbCA/IHRoaXMuZ3JpZC5ncmlkQVBJLmdldFJvd0RhdGEodGhpcy5pZC5yb3dJRCkgOiB1cGRhdGVkRGF0YTtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmlkLnJvd0lELFxuICAgICAgICAgICAgY2VsbElEOiB0aGlzLmlkLFxuICAgICAgICAgICAgLy8gcm93RGF0YSAtIHNob3VsZCBiZSB0aGUgdXBkYXRlZC9jb21taXR0ZWQgcm93RGF0YSAtIHRoaXMgZWZmZWN0aXZlbHkgc2hvdWxkIGJlIHRoZSBuZXdWYWx1ZVxuICAgICAgICAgICAgLy8gdGhlIG9ubHkgY2FzZSB3ZSB1c2UgdGhpcy5yb3dEYXRhIGRpcmVjdGx5LCBpcyB3aGVuIHRoZXJlIGlzIG5vIHJvd0VkaXRpbmcgb3IgdHJhbnNhY3Rpb25zIGVuYWJsZWRcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4sXG4gICAgICAgICAgICBvd25lcjogdGhpcy5ncmlkLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWd4Q2VsbENydWRTdGF0ZSB7XG4gICAgcHVibGljIGdyaWQ6IElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU7XG4gICAgcHVibGljIGNlbGw6IElneENlbGwgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgcm93OiBJZ3hFZGl0Um93IHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGlzSW5Db21wb3NpdGlvbk1vZGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjcmVhdGVDZWxsKGNlbGwpOiBJZ3hDZWxsIHtcbiAgICAgICAgLy8gY2VsbC5yb3dEYXRhID8/IGNlbGwucm93LmRhdGEgY292ZXJzIHRoZSBjYXNlcywgd2hlcmVcbiAgICAgICAgLy8gMS4gY2VsbCBpcyBhbiBpbnN0YW5jZSBvZyBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAgICAvLyAyLiBjZWxsIGlzIGFuIGluc3RhbmNlIG9mIElneEdyaWRDZWxsXG4gICAgICAgIC8vIE5vdGU6IGlmIGF0IHNvbWUgcG9pbnQgd2UgYXJlIGdvaW5nIHRvIGdldCByaWQgb2YgdXNpbmcgMSksIHRoZW4gc2VlIHRlc3QgJ3Nob3VsZCBhbGxvdyBhZGRpbmcgcm93IHRvIGVtcHR5IGdyaWQnOlxuICAgICAgICAvLyBjZWxsLnJvdy5kYXRhIHdpbGwgcmV0dXJuIGEgeyBkYXRhOyByb3dJRCB9IG9iamVjdCBoZXJlLCBhbmQgdGVzdCB3aWxsIGZhaWxcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbCA9IG5ldyBJZ3hDZWxsKGNlbGwuY2VsbElEIHx8IGNlbGwuaWQsIGNlbGwucm93LmluZGV4LCBjZWxsLmNvbHVtbiwgY2VsbC52YWx1ZSwgY2VsbC52YWx1ZSxcbiAgICAgICAgICAgIGNlbGwucm93RGF0YSA/PyBjZWxsLnJvdy5kYXRhLCBjZWxsLmdyaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVSb3coY2VsbDogSWd4Q2VsbCk6IElneEVkaXRSb3cge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3cgPSBuZXcgSWd4RWRpdFJvdyhjZWxsLmlkLnJvd0lELCBjZWxsLnJvd0luZGV4LCBjZWxsLnJvd0RhdGEsIGNlbGwuZ3JpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNhbWVSb3cocm93SUQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93ICYmIHRoaXMucm93LmlkID09PSByb3dJRDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2FtZUNlbGwoY2VsbDogSWd4Q2VsbCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuY2VsbC5pZC5yb3dJRCA9PT0gY2VsbC5pZC5yb3dJRCAmJlxuICAgICAgICAgICAgdGhpcy5jZWxsLmlkLmNvbHVtbklEID09PSBjZWxsLmlkLmNvbHVtbklEKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNlbGxJbkVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmNlbGw7XG4gICAgfVxuXG4gICAgcHVibGljIGJlZ2luQ2VsbEVkaXQoZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsLmNyZWF0ZUVkaXRFdmVudEFyZ3MoZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLmNlbGxFZGl0RW50ZXIuZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIGNlbGxFZGl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbC5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLmNlbGxFZGl0LmVtaXQoYXJncyk7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDZWxsKGV4aXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBpZiAoIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRvbmVBcmdzO1xuICAgICAgICBpZiAoaXNFcXVhbCh0aGlzLmNlbGwudmFsdWUsIHRoaXMuY2VsbC5lZGl0VmFsdWUpKSB7XG4gICAgICAgICAgICBkb25lQXJncyA9IHRoaXMuZXhpdENlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybiBkb25lQXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmNlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnVwZGF0ZV9jZWxsKHRoaXMuY2VsbCk7XG5cbiAgICAgICAgZG9uZUFyZ3MgPSB0aGlzLmNlbGxFZGl0RG9uZShldmVudCwgZmFsc2UpO1xuICAgICAgICBpZiAoZXhpdCkge1xuICAgICAgICAgICAgZG9uZUFyZ3MgPSB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyAuLi5hcmdzLCAuLi5kb25lQXJncyB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBjZWxsRWRpdERvbmUoZXZlbnQsIGFkZFJvdzogYm9vbGVhbik6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuY2VsbC5jYXN0VG9OdW1iZXIodGhpcy5jZWxsLmVkaXRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGRvbmVBcmdzID0gdGhpcy5jZWxsLmNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKG5ld1ZhbHVlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdERvbmUuZW1pdChkb25lQXJncyk7XG4gICAgICAgIGlmIChhZGRSb3cpIHtcbiAgICAgICAgICAgIGRvbmVBcmdzLnJvd0RhdGEgPSB0aGlzLnJvdy5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb25lQXJncztcbiAgICB9XG5cbiAgICAvKiogRXhpdCBjZWxsIGVkaXQgbW9kZSAqL1xuICAgIHB1YmxpYyBleGl0Q2VsbEVkaXQoZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBpZiAoIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmNlbGwuY2FzdFRvTnVtYmVyKHRoaXMuY2VsbC5lZGl0VmFsdWUpO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsPy5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhuZXdWYWx1ZSwgZXZlbnQpO1xuXG4gICAgICAgIHRoaXMuY2VsbC52YWx1ZSA9IG5ld1ZhbHVlO1xuXG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdEV4aXQuZW1pdChhcmdzKTtcbiAgICAgICAgdGhpcy5lbmRDZWxsRWRpdCgpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIGNlbGwgZWRpdGluZyBzdGF0ZSAqL1xuICAgIHB1YmxpYyBlbmRDZWxsRWRpdCgpIHtcbiAgICAgICAgdGhpcy5jZWxsID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSB0YXJnZXRlZCBjZWxsIGlzIGluIGVkaXQgbW9kZSAqL1xuICAgIHB1YmxpYyB0YXJnZXRJbkVkaXQocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuY2VsbC5jb2x1bW4uaW5kZXggPT09IGNvbHVtbkluZGV4ICYmIHRoaXMuY2VsbC5yb3dJbmRleCA9PT0gcm93SW5kZXg7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIElneFJvd0NydWRTdGF0ZSBleHRlbmRzIElneENlbGxDcnVkU3RhdGUge1xuICAgIHB1YmxpYyByb3c6IElneEVkaXRSb3cgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgY2xvc2VSb3dFZGl0aW5nT3ZlcmxheSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIF9yb3dFZGl0aW5nQmxvY2tlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGdldCBwcmltYXJ5S2V5KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0luRWRpdE1vZGUoKTogSWd4Um93RGlyZWN0aXZlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+IHtcbiAgICAgICAgY29uc3QgZWRpdFJvd1N0YXRlID0gdGhpcy5yb3c7XG4gICAgICAgIHJldHVybiBlZGl0Um93U3RhdGUgIT09IG51bGwgPyB0aGlzLmdyaWQucm93TGlzdC5maW5kKGUgPT4gZS5yb3dJRCA9PT0gZWRpdFJvd1N0YXRlLmlkKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dFZGl0aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0VkaXRhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RWRpdGluZ0Jsb2NrZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dFZGl0aW5nQmxvY2tlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHJvd0VkaXRpbmdCbG9ja2VkKHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yb3dFZGl0aW5nQmxvY2tlZCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKiogRW50ZXJzIHJvdyBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgYmVnaW5Sb3dFZGl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb3dFZGl0YWJsZSAmJiAodGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmdyaWQucHJpbWFyeUtleSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGdyaWQgbXVzdCBoYXZlIGEgYHByaW1hcnlLZXlgIHNwZWNpZmllZCB3aGVuIHVzaW5nIGByb3dFZGl0YWJsZWAhJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucm93IHx8ICEodGhpcy5yb3cuZ2V0Q2xhc3NOYW1lKCkgPT09IElneEVkaXRSb3cubmFtZSkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVJvdyh0aGlzLmNlbGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm93QXJncyA9IHRoaXMucm93LmNyZWF0ZUVkaXRFdmVudEFyZ3MoZmFsc2UsIGV2ZW50KTtcblxuICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRFbnRlci5lbWl0KHJvd0FyZ3MpO1xuICAgICAgICAgICAgaWYgKHJvd0FyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRFZGl0TW9kZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvdy50cmFuc2FjdGlvblN0YXRlID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5yb3cuaWQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5zdGFydFBlbmRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5vcGVuUm93T3ZlcmxheSh0aGlzLnJvdy5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcm93RWRpdChldmVudDogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5yb3cuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0LmVtaXQoYXJncyk7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSb3coY29tbWl0OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQucm93RWRpdGFibGUgfHxcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0aW5nT3ZlcmxheSAmJlxuICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRpbmdPdmVybGF5LmNvbGxhcHNlZCB8fCAhdGhpcy5yb3cpIHtcbiAgICAgICAgICAgIHJldHVybiB7fSBhcyBJR3JpZEVkaXRFdmVudEFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYXJncztcbiAgICAgICAgaWYgKGNvbW1pdCkge1xuICAgICAgICAgICAgdGhpcy5yb3cubmV3RGF0YSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMucm93LmlkLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUm93RWRpdERhdGEodGhpcy5yb3csIHRoaXMucm93Lm5ld0RhdGEpO1xuICAgICAgICAgICAgYXJncyA9IHRoaXMucm93RWRpdChldmVudCk7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yb3cubmV3RGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmNsZWFyKHRoaXMucm93LmlkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MgPSB0aGlzLmVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdCwgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIHRoaXMucm93Lm5ld0RhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLnJvdy5pZCwgdHJ1ZSk7XG4gICAgICAgIGxldCByb3dFZGl0QXJncyA9IHRoaXMucm93LmNyZWF0ZUVkaXRFdmVudEFyZ3ModHJ1ZSwgZXZlbnQpO1xuXG4gICAgICAgIGxldCBub25DYW5jZWxhYmxlQXJncztcbiAgICAgICAgaWYgKCFjb21taXQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yb3cuZ2V0Q2xhc3NOYW1lKCkgPT09IElneEVkaXRSb3cubmFtZSkge1xuICAgICAgICAgICAgcm93RWRpdEFyZ3MgPSB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfcm93KHRoaXMucm93LCB0aGlzLnJvdy5uZXdEYXRhLCBldmVudCk7XG4gICAgICAgICAgICBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMucm93RWRpdERvbmUocm93RWRpdEFyZ3Mub2xkVmFsdWUsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0FkZEFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dBZGQuZW1pdChyb3dBZGRBcmdzKTtcbiAgICAgICAgICAgIGlmIChyb3dBZGRBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByb3dBZGRBcmdzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuZFBlbmRpbmcoZmFsc2UpO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMuZ2V0UGFyZW50Um93SWQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLmFkZFJvd1RvRGF0YSh0aGlzLnJvdy5uZXdEYXRhID8/IHRoaXMucm93LmRhdGEsIHBhcmVudElkKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmlnZ2VyUGlwZXMoKTtcblxuICAgICAgICAgICAgbm9uQ2FuY2VsYWJsZUFyZ3MgPSB0aGlzLnJvd0VkaXREb25lKG51bGwsIGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vbkNhbmNlbGFibGVBcmdzID0gdGhpcy5leGl0Um93RWRpdChyb3dFZGl0QXJncy5vbGRWYWx1ZSwgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybiB7IC4uLm5vbkNhbmNlbGFibGVBcmdzLCAuLi5yb3dFZGl0QXJncyB9O1xuICAgIH1cblxuICAgIHB1YmxpYyByb3dFZGl0RG9uZShjYWNoZWRSb3dEYXRhLCBldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZG9uZUFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhjYWNoZWRSb3dEYXRhLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0RG9uZS5lbWl0KGRvbmVBcmdzKTtcbiAgICAgICAgcmV0dXJuIGRvbmVBcmdzO1xuICAgIH1cblxuXG4gICAgLyoqIEV4aXQgcm93IGVkaXQgbW9kZSAqL1xuICAgIHB1YmxpYyBleGl0Um93RWRpdChjYWNoZWRSb3dEYXRhLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IG5vbkNhbmNlbGFibGVBcmdzID0gdGhpcy5yb3cuY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdEV4aXQuZW1pdChub25DYW5jZWxhYmxlQXJncyk7XG4gICAgICAgIHRoaXMuZ3JpZC5jbG9zZVJvd0VkaXRpbmdPdmVybGF5KCk7XG5cbiAgICAgICAgdGhpcy5lbmRSb3dFZGl0KCk7XG4gICAgICAgIHJldHVybiBub25DYW5jZWxhYmxlQXJncztcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIHJvdyBlZGl0aW5nIHN0YXRlICovXG4gICAgcHVibGljIGVuZFJvd0VkaXQoKSB7XG4gICAgICAgIHRoaXMucm93ID0gbnVsbDtcbiAgICAgICAgdGhpcy5yb3dFZGl0aW5nQmxvY2tlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBDbGVhcnMgY2VsbCBhbmQgcm93IGVkaXRpbmcgc3RhdGUgYW5kIGNsb3NlcyByb3cgZWRpdGluZyB0ZW1wbGF0ZSBpZiBpdCBpcyBvcGVuICovXG4gICAgcHVibGljIGVuZEVkaXRNb2RlKCkge1xuICAgICAgICB0aGlzLmVuZENlbGxFZGl0KCk7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kUm93RWRpdCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNsb3NlUm93RWRpdGluZ092ZXJsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSb3dFZGl0RGF0YShyb3c6IElneEVkaXRSb3csIHZhbHVlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG5cbiAgICAgICAgY29uc3Qgcm93SW5FZGl0TW9kZSA9IGdyaWQuZ3JpZEFQSS5jcnVkU2VydmljZS5yb3c7XG4gICAgICAgIHJvdy5uZXdEYXRhID0gdmFsdWUgPz8gcm93SW5FZGl0TW9kZS50cmFuc2FjdGlvblN0YXRlO1xuXG5cbiAgICAgICAgaWYgKHJvd0luRWRpdE1vZGUgJiYgcm93LmlkID09PSByb3dJbkVkaXRNb2RlLmlkKSB7XG4gICAgICAgICAgICByb3cuZGF0YSA9IHsgLi4ucm93LmRhdGEsIC4uLnJvd0luRWRpdE1vZGUudHJhbnNhY3Rpb25TdGF0ZSB9O1xuICAgICAgICAgICAgLy8gVE9ETzogV29ya2Fyb3VuZCBmb3IgdXBkYXRpbmcgYSByb3cgaW4gZWRpdCBtb2RlIHRocm91Z2ggdGhlIEFQSVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRTdGF0ZShyb3cuaWQpO1xuICAgICAgICAgICAgcm93LmRhdGEgPSBzdGF0ZSA/IE9iamVjdC5hc3NpZ24oe30sIHJvdy5kYXRhLCBzdGF0ZS52YWx1ZSkgOiByb3cuZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQYXJlbnRSb3dJZCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWd4Um93QWRkQ3J1ZFN0YXRlIGV4dGVuZHMgSWd4Um93Q3J1ZFN0YXRlIHtcbiAgICBwdWJsaWMgYWRkUm93UGFyZW50OiBJZ3hBZGRSb3dQYXJlbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlQWRkUm93KHBhcmVudFJvdzogSWd4Um93RGlyZWN0aXZlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+LCBhc0NoaWxkPzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmNyZWF0ZUFkZFJvd1BhcmVudChwYXJlbnRSb3csIGFzQ2hpbGQpO1xuXG4gICAgICAgIGNvbnN0IG5ld1JlYyA9IHRoaXMuZ3JpZC5nZXRFbXB0eVJlY29yZE9iamVjdEZvcihwYXJlbnRSb3cpO1xuICAgICAgICBjb25zdCBhZGRSb3dJbmRleCA9IHRoaXMuYWRkUm93UGFyZW50LmluZGV4ICsgMTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93ID0gbmV3IElneEFkZFJvdyhuZXdSZWMucm93SUQsIGFkZFJvd0luZGV4LCBuZXdSZWMuZGF0YSwgbmV3UmVjLnJlY29yZFJlZiwgdGhpcy5ncmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVBZGRSb3dQYXJlbnQocm93OiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4sIG5ld1Jvd0FzQ2hpbGQ/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93ID8gcm93LmluZGV4IDogLTE7XG4gICAgICAgIGNvbnN0IHJvd0lkID0gcm93ID8gcm93LnJvd0lEIDogbnVsbDtcbiAgICAgICAgY29uc3QgaXNJblBpbm5lZEFyZWEgPSB0aGlzLmdyaWQuaXNSZWNvcmRQaW5uZWRCeVZpZXdJbmRleChyb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IHBpbkluZGV4ID0gdGhpcy5ncmlkLnBpbm5lZFJlY29yZHMuZmluZEluZGV4KHggPT4geFt0aGlzLnByaW1hcnlLZXldID09PSByb3dJZCk7XG4gICAgICAgIGNvbnN0IHVucGluSW5kZXggPSB0aGlzLmdyaWQuZ2V0VW5waW5uZWRJbmRleEJ5SWQocm93SWQpO1xuICAgICAgICB0aGlzLmFkZFJvd1BhcmVudCA9IHtcbiAgICAgICAgICAgIHJvd0lEOiByb3dJZCxcbiAgICAgICAgICAgIGluZGV4OiBpc0luUGlubmVkQXJlYSA/IHBpbkluZGV4IDogdW5waW5JbmRleCxcbiAgICAgICAgICAgIGFzQ2hpbGQ6IG5ld1Jvd0FzQ2hpbGQsXG4gICAgICAgICAgICBpc1Bpbm5lZDogaXNJblBpbm5lZEFyZWFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBlbmRSb3dUcmFuc2FjdGlvbihjb21taXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBpZiAodGhpcy5yb3cgJiYgdGhpcy5yb3cuZ2V0Q2xhc3NOYW1lKCkgPT09IElneEFkZFJvdy5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93QWRkZWQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGFkZFJvd0FyZ3M6IElSb3dEYXRhRXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IGFkZFJvd0FyZ3MuZGF0YTtcbiAgICAgICAgICAgICAgICBjb25zdCBwaW5uZWRJbmRleCA9IHRoaXMuZ3JpZC5waW5uZWRSZWNvcmRzLmZpbmRJbmRleCh4ID0+IHhbdGhpcy5wcmltYXJ5S2V5XSA9PT0gcm93RGF0YVt0aGlzLnByaW1hcnlLZXldKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNoZWNrIHdoZXRoZXIgdGhlIHJvdyBpcyBpbiB0aGUgY3VycmVudCB2aWV3XG4gICAgICAgICAgICAgICAgY29uc3Qgdmlld0luZGV4ID0gcGlubmVkSW5kZXggIT09IC0xID8gcGlubmVkSW5kZXggOiB0aGlzLl9maW5kUmVjb3JkSW5kZXhJblZpZXcocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5maW5kSW5kZXgoZGF0YSA9PiBkYXRhW3RoaXMucHJpbWFyeUtleV0gPT09IHJvd0RhdGFbdGhpcy5wcmltYXJ5S2V5XSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNJblZpZXcgPSB2aWV3SW5kZXggIT09IC0xICYmICF0aGlzLmdyaWQubmF2aWdhdGlvbi5zaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwodmlld0luZGV4LCAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG93SW5kZXggPSBpc0luVmlldyA/IC0xIDogZGF0YUluZGV4O1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zaG93U25hY2tiYXJGb3Ioc2hvd0luZGV4KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHN1cGVyLmVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdCwgZXZlbnQpO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbmRBZGRSb3coKTtcbiAgICAgICAgaWYgKGNvbW1pdCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZGVkTm90aWZpZXIubmV4dCh7IGRhdGE6IGFyZ3MubmV3VmFsdWUgfSk7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93QWRkZWQuZW1pdCh7IGRhdGE6IGFyZ3MubmV3VmFsdWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBlbmRBZGRSb3coKSB7XG4gICAgICAgIHRoaXMuYWRkUm93UGFyZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5ncmlkLnRyaWdnZXJQaXBlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBUT0RPOiBjb25zaWRlciBjaGFuZ2luZyBtb2RpZmllclxuICAgICAqL1xuICAgIHB1YmxpYyBfZmluZFJlY29yZEluZGV4SW5WaWV3KHJlYykge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmRhdGFWaWV3LmZpbmRJbmRleChkYXRhID0+IGRhdGFbdGhpcy5wcmltYXJ5S2V5XSA9PT0gcmVjW3RoaXMucHJpbWFyeUtleV0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQYXJlbnRSb3dJZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkUm93UGFyZW50LmFzQ2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZFJvd1BhcmVudC5hc0NoaWxkID8gdGhpcy5hZGRSb3dQYXJlbnQucm93SUQgOiB1bmRlZmluZWQ7O1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWRkUm93UGFyZW50LnJvd0lEICE9PSBudWxsICYmIHRoaXMuYWRkUm93UGFyZW50LnJvd0lEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYXduZWRGb3JSZWNvcmQgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcmVjX2J5X2lkKHRoaXMuYWRkUm93UGFyZW50LnJvd0lEKTtcbiAgICAgICAgICAgIHJldHVybiBzcGF3bmVkRm9yUmVjb3JkPy5wYXJlbnQ/LnJvd0lEO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZENSVURTZXJ2aWNlIGV4dGVuZHMgSWd4Um93QWRkQ3J1ZFN0YXRlIHtcblxuICAgIHB1YmxpYyBlbnRlckVkaXRNb2RlKGNlbGwsIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbkNvbXBvc2l0aW9uTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2VsbEluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IGNhc2Ugc29sZWx5IGZvciBmMi9lbnRlciBuYXYgdGhhdCB1c2VzIGVudGVyRWRpdE1vZGUgYXMgdG9nZ2xlLiBSZWZhY3Rvci5cbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbGVkID0gdGhpcy5lbmRFZGl0KHRydWUsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKCFjYW5jZWxlZCB8fCAhdGhpcy5jZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDZWxsKGNlbGwpO1xuICAgICAgICAgICAgaWYgKHRoaXMucm93RWRpdGluZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvdyAmJiAhdGhpcy5zYW1lUm93KHRoaXMuY2VsbD8uaWQ/LnJvd0lEKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0VkaXRpbmdCbG9ja2VkID0gdGhpcy5lbmRFZGl0KHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucm93RWRpdGluZ0Jsb2NrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZW50ZXJzIGhlcmUsIEBlbmRFZGl0IGNsZWFycyB0aGUgbmV3IHJlZmVyZW5jZSBvZiB0aGUgY2VsbCBlZGl0LlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUNlbGwoY2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRSb3dFZGl0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgY2FuY2VsZWQgPSB0aGlzLmJlZ2luUm93RWRpdChldmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luQ2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJlZ2luQ2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW50ZXJzIGFkZCByb3cgbW9kZSBieSBjcmVhdGluZyB0ZW1wb3JhcnkgZHVtbXkgc28gdGhlIHVzZXIgY2FuIGZpbGwgaW4gbmV3IHJvdyBjZWxscy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnRSb3cgUGFyZW50IHJvdyBhZnRlciB3aGljaCB0aGUgQWRkIFJvdyBVSSB3aWxsIGJlIHJlbmRlcmVkLlxuICAgICAqICAgICAgICAgICAgICAgICAgSWYgYG51bGxgIHdpbGwgc2hvdyBpdCBhdCB0aGUgYm90dG9tIGFmdGVyIGFsbCByb3dzIChvciB0b3AgaWYgdGhlcmUgYXJlIG5vdCByb3dzKS5cbiAgICAgKiBAcGFyYW0gYXNDaGlsZCBTcGVjaWZpZXMgaWYgdGhlIG5ldyByb3cgc2hvdWxkIGJlIGFkZGVkIGFzIGEgY2hpbGQgdG8gYSB0cmVlIHJvdy5cbiAgICAgKiBAcGFyYW0gZXZlbnQgQmFzZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgYWRkIHJvdyBtb2RlLlxuICAgICAqL1xuICAgIHB1YmxpYyBlbnRlckFkZFJvd01vZGUocGFyZW50Um93OiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4sIGFzQ2hpbGQ/OiBib29sZWFuLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5yb3dFZGl0aW5nICYmICh0aGlzLmdyaWQucHJpbWFyeUtleSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSBudWxsKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgZ3JpZCBtdXN0IHVzZSByb3cgZWRpdCBtb2RlIHRvIHBlcmZvcm0gcm93IGFkZGluZyEgUGxlYXNlIHNldCByb3dFZGl0YWJsZSB0byB0cnVlLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5kRWRpdCh0cnVlLCBldmVudCk7XG5cbiAgICAgICAgaWYgKHBhcmVudFJvdyAhPSBudWxsICYmIHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHBhcmVudFJvdy5yb3dJRCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jb2xsYXBzZVJvdyhwYXJlbnRSb3cucm93SUQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jcmVhdGVBZGRSb3cocGFyZW50Um93LCBhc0NoaWxkKTtcblxuICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLnN0YXJ0UGVuZGluZygpO1xuICAgICAgICBpZiAodGhpcy5hZGRSb3dQYXJlbnQuaXNQaW5uZWQpIHtcbiAgICAgICAgICAgIC8vIElmIHBhcmVudCBpcyBwaW5uZWQsIGFkZCB0aGUgbmV3IHJvdyB0byBwaW5uZWQgcmVjb3Jkc1xuICAgICAgICAgICAgKHRoaXMuZ3JpZCBhcyBhbnkpLl9waW5uZWRSZWNvcmRJRHMuc3BsaWNlKHRoaXMucm93LmluZGV4LCAwLCB0aGlzLnJvdy5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQudHJpZ2dlclBpcGVzKCk7XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0ZVRvKHRoaXMucm93LmluZGV4LCAtMSk7XG4gICAgICAgIC8vIHdoZW4gc2VsZWN0aW5nIHRoZSBkdW1teSByb3cgd2UgbmVlZCB0byBhZGp1c3QgZm9yIHRvcCBwaW5uZWQgcm93c1xuICAgICAgICBjb25zdCBpbmRleEFkanVzdCA9IHRoaXMuZ3JpZC5pc1Jvd1Bpbm5pbmdUb1RvcCAmJiAhdGhpcy5hZGRSb3dQYXJlbnQuaXNQaW5uZWQgPyB0aGlzLmdyaWQucGlubmVkUm93cy5sZW5ndGggOiAwO1xuICAgICAgICBjb25zdCBkdW1teVJvdyA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfYnlfaW5kZXgodGhpcy5yb3cuaW5kZXggKyBpbmRleEFkanVzdCk7XG4gICAgICAgIGR1bW15Um93LnRyaWdnZXJBZGRBbmltYXRpb24oKTtcbiAgICAgICAgZHVtbXlSb3cuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgZHVtbXlSb3cuYWRkQW5pbWF0aW9uRW5kLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBkdW1teVJvdy5jZWxscy5maW5kKGMgPT4gYy5lZGl0YWJsZSk7XG4gICAgICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnVwZGF0ZV9jZWxsKHRoaXMuY2VsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRlckVkaXRNb2RlKGNlbGwsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBjZWxsLmFjdGl2YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmlzaGVzIHRoZSByb3cgdHJhbnNhY3Rpb25zIG9uIHRoZSBjdXJyZW50IHJvdy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgYGNvbW1pdCA9PT0gdHJ1ZWAsIHBhc3NlcyB0aGVtIGZyb20gdGhlIHBlbmRpbmcgc3RhdGUgdG8gdGhlIGRhdGEgKG9yIHRyYW5zYWN0aW9uIHNlcnZpY2UpXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b24gKGNsaWNrKT1cImdyaWQuZW5kRWRpdCh0cnVlKVwiPkNvbW1pdCBSb3c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gY29tbWl0XG4gICAgICovXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXRob2Qgd2l0aG91dCBldnQgZW1pc3Npb24uXG4gICAgcHVibGljIGVuZEVkaXQoY29tbWl0ID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMucm93ICYmICF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhcmdzO1xuICAgICAgICBpZiAoY29tbWl0KSB7XG4gICAgICAgICAgICBhcmdzID0gdGhpcy51cGRhdGVDZWxsKHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChhcmdzICYmIGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5leGl0Q2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncyA9IHRoaXMudXBkYXRlUm93KGNvbW1pdCwgZXZlbnQpO1xuICAgICAgICB0aGlzLnJvd0VkaXRpbmdCbG9ja2VkID0gYXJncy5jYW5jZWw7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3RpdmVDZWxsID0gdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGV2ZW50ICYmIGFjdGl2ZUNlbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gYWN0aXZlQ2VsbC5yb3c7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlQ29sSW5kZXggPSBhY3RpdmVDZWxsLmxheW91dCA/IGFjdGl2ZUNlbGwubGF5b3V0LmNvbHVtblZpc2libGVJbmRleCA6IGFjdGl2ZUNlbGwuY29sdW1uO1xuICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8ocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl19
561
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbW1vbi9jcnVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVELE1BQU0sT0FBTyxVQUFVO0lBS25CLFlBQW1CLEVBQU8sRUFBUyxLQUFhLEVBQVMsSUFBUyxFQUFTLElBQXFDO1FBQTdGLE9BQUUsR0FBRixFQUFFLENBQUs7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUFTLFNBQUksR0FBSixJQUFJLENBQWlDO0lBQUksQ0FBQztJQUU5RyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxFQUFFLEtBQWE7O1FBQzVELE1BQU0sSUFBSSxHQUF1QjtZQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDbEIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ25CLE1BQU0sRUFBRSxLQUFLO1lBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FBSztTQUNSLENBQUM7UUFDRixJQUFJLGVBQWUsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQUEsSUFBSSxDQUFDLE9BQU8sbUNBQUksSUFBSSxDQUFDLElBQUksQ0FBQztTQUM3QztRQUNELE9BQU8sSUFBSSxDQUFDO0lB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TSxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1FBQzVELElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRTtZQUNyQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ2hDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDckcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7O1lBaklKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElHcmlkRWRpdERvbmVFdmVudEFyZ3MsIElHcmlkRWRpdEV2ZW50QXJncywgSWd4R3JpZEJhc2VEaXJlY3RpdmUsIElSb3dEYXRhRXZlbnRBcmdzIH0gZnJvbSAnLi4vZ3JpZC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneFJvd0RpcmVjdGl2ZSB9IGZyb20gJy4uL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvcHlEZXNjcmlwdG9ycywgaXNFcXVhbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgSWd4RWRpdFJvdyB7XG4gICAgcHVibGljIHRyYW5zYWN0aW9uU3RhdGU6IGFueTtcbiAgICBwdWJsaWMgc3RhdGU6IGFueTtcbiAgICBwdWJsaWMgbmV3RGF0YTogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGlkOiBhbnksIHB1YmxpYyBpbmRleDogbnVtYmVyLCBwdWJsaWMgZGF0YTogYW55LCBwdWJsaWMgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRWRpdEV2ZW50QXJncyhpbmNsdWRlTmV3VmFsdWUgPSB0cnVlLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93SUQ6IHRoaXMuaWQsXG4gICAgICAgICAgICByb3dEYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBpc0FkZFJvdzogZmFsc2UsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBhcmdzLm5ld1ZhbHVlID0gdGhpcy5uZXdEYXRhID8/IHRoaXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMuaWQsIHRydWUpIDogdGhpcy5ncmlkLmdyaWRBUEkuZ2V0Um93RGF0YSh0aGlzLmlkKTtcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IHVwZGF0ZWREYXRhID8/IHRoaXMuZ3JpZC5ncmlkQVBJLmdldFJvd0RhdGEodGhpcy5pZCk7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdERvbmVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogY2FjaGVkUm93RGF0YSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB1cGRhdGVkRGF0YSxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBpc0FkZFJvdzogZmFsc2UsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWd4QWRkUm93IGV4dGVuZHMgSWd4RWRpdFJvdyB7XG4gICAgcHVibGljIGlzQWRkUm93ID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpZDogYW55LFxuICAgICAgICBwdWJsaWMgaW5kZXg6IG51bWJlcixcbiAgICAgICAgcHVibGljIGRhdGE6IGFueSxcbiAgICAgICAgcHVibGljIHJlY29yZFJlZjogYW55LFxuICAgICAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZSkge1xuICAgICAgICBzdXBlcihpZCwgaW5kZXgsIGRhdGEsIGdyaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSA9IHRydWUsIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBhcmdzID0gc3VwZXIuY3JlYXRlRWRpdEV2ZW50QXJncyhpbmNsdWRlTmV3VmFsdWUsIGV2ZW50KTtcbiAgICAgICAgYXJncy5vbGRWYWx1ZSA9IG51bGw7XG4gICAgICAgIGFyZ3MuaXNBZGRSb3cgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzdXBlci5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhudWxsLCBldmVudCk7XG4gICAgICAgIGFyZ3MuaXNBZGRSb3cgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWd4QWRkUm93UGFyZW50IHtcbiAgICByb3dJRDogc3RyaW5nO1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgYXNDaGlsZDogYm9vbGVhbjtcbiAgICBpc1Bpbm5lZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIElneENlbGwge1xuICAgIHB1YmxpYyBwcmltYXJ5S2V5OiBhbnk7XG4gICAgcHVibGljIHN0YXRlOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGlkLFxuICAgICAgICBwdWJsaWMgcm93SW5kZXg6IG51bWJlcixcbiAgICAgICAgcHVibGljIGNvbHVtbixcbiAgICAgICAgcHVibGljIHZhbHVlOiBhbnksXG4gICAgICAgIHB1YmxpYyBlZGl0VmFsdWU6IGFueSxcbiAgICAgICAgcHVibGljIHJvd0RhdGE6IGFueSxcbiAgICAgICAgcHVibGljIGdyaWQ6IElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGUpIHsgfVxuXG4gICAgcHVibGljIGNhc3RUb051bWJlcih2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJyAmJiAhdGhpcy5jb2x1bW4uaW5saW5lRWRpdG9yVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiAhaXNOYU4odikgJiYgaXNGaW5pdGUodikgPyB2IDogMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUVkaXRFdmVudEFyZ3MoaW5jbHVkZU5ld1ZhbHVlID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmlkLnJvd0lELFxuICAgICAgICAgICAgY2VsbElEOiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93RGF0YTogdGhpcy5yb3dEYXRhLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBhcmdzLm5ld1ZhbHVlID0gdGhpcy5jYXN0VG9OdW1iZXIodGhpcy5lZGl0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEb25lRWRpdEV2ZW50QXJncyh2YWx1ZTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMuaWQucm93SUQsIHRydWUpIDogdGhpcy5yb3dEYXRhO1xuICAgICAgICBjb25zdCByb3dEYXRhID0gdXBkYXRlZERhdGEgPT09IG51bGwgPyB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRSb3dEYXRhKHRoaXMuaWQucm93SUQpIDogdXBkYXRlZERhdGE7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdERvbmVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZC5yb3dJRCxcbiAgICAgICAgICAgIGNlbGxJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIC8vIHJvd0RhdGEgLSBzaG91bGQgYmUgdGhlIHVwZGF0ZWQvY29tbWl0dGVkIHJvd0RhdGEgLSB0aGlzIGVmZmVjdGl2ZWx5IHNob3VsZCBiZSB0aGUgbmV3VmFsdWVcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGNhc2Ugd2UgdXNlIHRoaXMucm93RGF0YSBkaXJlY3RseSwgaXMgd2hlbiB0aGVyZSBpcyBubyByb3dFZGl0aW5nIG9yIHRyYW5zYWN0aW9ucyBlbmFibGVkXG4gICAgICAgICAgICByb3dEYXRhLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBuZXdWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElneENlbGxDcnVkU3RhdGUge1xuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlO1xuICAgIHB1YmxpYyBjZWxsOiBJZ3hDZWxsIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIHJvdzogSWd4RWRpdFJvdyB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBpc0luQ29tcG9zaXRpb25Nb2RlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY3JlYXRlQ2VsbChjZWxsKTogSWd4Q2VsbCB7XG4gICAgICAgIC8vIGNlbGwucm93RGF0YSA/PyBjZWxsLnJvdy5kYXRhIGNvdmVycyB0aGUgY2FzZXMsIHdoZXJlXG4gICAgICAgIC8vIDEuIGNlbGwgaXMgYW4gaW5zdGFuY2Ugb2cgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgICAgLy8gMi4gY2VsbCBpcyBhbiBpbnN0YW5jZSBvZiBJZ3hHcmlkQ2VsbFxuICAgICAgICAvLyBOb3RlOiBpZiBhdCBzb21lIHBvaW50IHdlIGFyZSBnb2luZyB0byBnZXQgcmlkIG9mIHVzaW5nIDEpLCB0aGVuIHNlZSB0ZXN0ICdzaG91bGQgYWxsb3cgYWRkaW5nIHJvdyB0byBlbXB0eSBncmlkJzpcbiAgICAgICAgLy8gY2VsbC5yb3cuZGF0YSB3aWxsIHJldHVybiBhIHsgZGF0YTsgcm93SUQgfSBvYmplY3QgaGVyZSwgYW5kIHRlc3Qgd2lsbCBmYWlsXG4gICAgICAgIHJldHVybiB0aGlzLmNlbGwgPSBuZXcgSWd4Q2VsbChjZWxsLmNlbGxJRCB8fCBjZWxsLmlkLCBjZWxsLnJvdy5pbmRleCwgY2VsbC5jb2x1bW4sIGNlbGwudmFsdWUsIGNlbGwudmFsdWUsXG4gICAgICAgICAgICBjZWxsLnJvd0RhdGEgPz8gY2VsbC5yb3cuZGF0YSwgY2VsbC5ncmlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUm93KGNlbGw6IElneENlbGwpOiBJZ3hFZGl0Um93IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93ID0gbmV3IElneEVkaXRSb3coY2VsbC5pZC5yb3dJRCwgY2VsbC5yb3dJbmRleCwgY2VsbC5yb3dEYXRhLCBjZWxsLmdyaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYW1lUm93KHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdyAmJiB0aGlzLnJvdy5pZCA9PT0gcm93SUQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNhbWVDZWxsKGNlbGw6IElneENlbGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmNlbGwuaWQucm93SUQgPT09IGNlbGwuaWQucm93SUQgJiZcbiAgICAgICAgICAgIHRoaXMuY2VsbC5pZC5jb2x1bW5JRCA9PT0gY2VsbC5pZC5jb2x1bW5JRCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjZWxsSW5FZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jZWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBiZWdpbkNlbGxFZGl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbC5jcmVhdGVFZGl0RXZlbnRBcmdzKGZhbHNlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdEVudGVyLmVtaXQoYXJncyk7XG5cbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICB0aGlzLmVuZENlbGxFZGl0KCk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHB1YmxpYyBjZWxsRWRpdChldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmNlbGwuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdC5lbWl0KGFyZ3MpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ2VsbChleGl0OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkb25lQXJncztcbiAgICAgICAgaWYgKGlzRXF1YWwodGhpcy5jZWxsLnZhbHVlLCB0aGlzLmNlbGwuZWRpdFZhbHVlKSkge1xuICAgICAgICAgICAgZG9uZUFyZ3MgPSB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsRWRpdChldmVudCk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfY2VsbCh0aGlzLmNlbGwpO1xuXG4gICAgICAgIGRvbmVBcmdzID0gdGhpcy5jZWxsRWRpdERvbmUoZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgaWYgKGV4aXQpIHtcbiAgICAgICAgICAgIGRvbmVBcmdzID0gdGhpcy5leGl0Q2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgLi4uYXJncywgLi4uZG9uZUFyZ3MgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2VsbEVkaXREb25lKGV2ZW50LCBhZGRSb3c6IGJvb2xlYW4pOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmNlbGwuY2FzdFRvTnVtYmVyKHRoaXMuY2VsbC5lZGl0VmFsdWUpO1xuICAgICAgICBjb25zdCBkb25lQXJncyA9IHRoaXMuY2VsbC5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhuZXdWYWx1ZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXREb25lLmVtaXQoZG9uZUFyZ3MpO1xuICAgICAgICBpZiAoYWRkUm93KSB7XG4gICAgICAgICAgICBkb25lQXJncy5yb3dEYXRhID0gdGhpcy5yb3cuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIEV4aXQgY2VsbCBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgZXhpdENlbGxFZGl0KGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5jZWxsLmNhc3RUb051bWJlcih0aGlzLmNlbGwuZWRpdFZhbHVlKTtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbD8uY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MobmV3VmFsdWUsIGV2ZW50KTtcblxuICAgICAgICB0aGlzLmNlbGwudmFsdWUgPSBuZXdWYWx1ZTtcblxuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXRFeGl0LmVtaXQoYXJncyk7XG4gICAgICAgIHRoaXMuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyBjZWxsIGVkaXRpbmcgc3RhdGUgKi9cbiAgICBwdWJsaWMgZW5kQ2VsbEVkaXQoKSB7XG4gICAgICAgIHRoaXMuY2VsbCA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgdGFyZ2V0ZWQgY2VsbCBpcyBpbiBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgdGFyZ2V0SW5FZGl0KHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmNlbGwuY29sdW1uLmluZGV4ID09PSBjb2x1bW5JbmRleCAmJiB0aGlzLmNlbGwucm93SW5kZXggPT09IHJvd0luZGV4O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBJZ3hSb3dDcnVkU3RhdGUgZXh0ZW5kcyBJZ3hDZWxsQ3J1ZFN0YXRlIHtcbiAgICBwdWJsaWMgcm93OiBJZ3hFZGl0Um93IHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGNsb3NlUm93RWRpdGluZ092ZXJsYXkgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSBfcm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBnZXQgcHJpbWFyeUtleSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dJbkVkaXRNb2RlKCk6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiB7XG4gICAgICAgIGNvbnN0IGVkaXRSb3dTdGF0ZSA9IHRoaXMucm93O1xuICAgICAgICByZXR1cm4gZWRpdFJvd1N0YXRlICE9PSBudWxsID8gdGhpcy5ncmlkLnJvd0xpc3QuZmluZChlID0+IGUucm93SUQgPT09IGVkaXRSb3dTdGF0ZS5pZCkgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RWRpdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dFZGl0YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0VkaXRpbmdCbG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93RWRpdGluZ0Jsb2NrZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByb3dFZGl0aW5nQmxvY2tlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcm93RWRpdGluZ0Jsb2NrZWQgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqIEVudGVycyByb3cgZWRpdCBtb2RlICovXG4gICAgcHVibGljIGJlZ2luUm93RWRpdChldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93RWRpdGFibGUgJiYgKHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSB1bmRlZmluZWQgfHwgdGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IG51bGwpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBncmlkIG11c3QgaGF2ZSBhIGBwcmltYXJ5S2V5YCBzcGVjaWZpZWQgd2hlbiB1c2luZyBgcm93RWRpdGFibGVgIScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnJvdyB8fCAhKHRoaXMucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hFZGl0Um93Lm5hbWUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucm93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVSb3codGhpcy5jZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB0aGlzLnJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKGZhbHNlLCBldmVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0RW50ZXIuZW1pdChyb3dBcmdzKTtcbiAgICAgICAgICAgIGlmIChyb3dBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kRWRpdE1vZGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3cudHJhbnNhY3Rpb25TdGF0ZSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMucm93LmlkLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuc3RhcnRQZW5kaW5nKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQub3BlblJvd092ZXJsYXkodGhpcy5yb3cuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJvd0VkaXQoZXZlbnQ6IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMucm93LmNyZWF0ZUVkaXRFdmVudEFyZ3ModHJ1ZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdC5lbWl0KGFyZ3MpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUm93KGNvbW1pdDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnJvd0VkaXRhYmxlIHx8XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93RWRpdGluZ092ZXJsYXkgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0aW5nT3ZlcmxheS5jb2xsYXBzZWQgfHwgIXRoaXMucm93KSB7XG4gICAgICAgICAgICByZXR1cm4ge30gYXMgSUdyaWRFZGl0RXZlbnRBcmdzO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFyZ3M7XG4gICAgICAgIGlmIChjb21taXQpIHtcbiAgICAgICAgICAgIHRoaXMucm93Lm5ld0RhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLnJvdy5pZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd0VkaXREYXRhKHRoaXMucm93LCB0aGlzLnJvdy5uZXdEYXRhKTtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzLnJvd0VkaXQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucm93Lm5ld0RhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5jbGVhcih0aGlzLnJvdy5pZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzID0gdGhpcy5lbmRSb3dUcmFuc2FjdGlvbihjb21taXQsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBlbmRSb3dUcmFuc2FjdGlvbihjb21taXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICB0aGlzLnJvdy5uZXdEYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5yb3cuaWQsIHRydWUpO1xuICAgICAgICBsZXQgcm93RWRpdEFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcblxuICAgICAgICBsZXQgbm9uQ2FuY2VsYWJsZUFyZ3M7XG4gICAgICAgIGlmICghY29tbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuZFBlbmRpbmcoZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hFZGl0Um93Lm5hbWUpIHtcbiAgICAgICAgICAgIHJvd0VkaXRBcmdzID0gdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX3Jvdyh0aGlzLnJvdywgdGhpcy5yb3cubmV3RGF0YSwgZXZlbnQpO1xuICAgICAgICAgICAgbm9uQ2FuY2VsYWJsZUFyZ3MgPSB0aGlzLnJvd0VkaXREb25lKHJvd0VkaXRBcmdzLm9sZFZhbHVlLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByb3dBZGRBcmdzID0gdGhpcy5yb3cuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93QWRkLmVtaXQocm93QWRkQXJncyk7XG4gICAgICAgICAgICBpZiAocm93QWRkQXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93QWRkQXJncztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmRQZW5kaW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudFJvd0lkKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5hZGRSb3dUb0RhdGEodGhpcy5yb3cubmV3RGF0YSA/PyB0aGlzLnJvdy5kYXRhLCBwYXJlbnRJZCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJpZ2dlclBpcGVzKCk7XG5cbiAgICAgICAgICAgIG5vbkNhbmNlbGFibGVBcmdzID0gdGhpcy5yb3dFZGl0RG9uZShudWxsLCBldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMuZXhpdFJvd0VkaXQocm93RWRpdEFyZ3Mub2xkVmFsdWUsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm4geyAuLi5ub25DYW5jZWxhYmxlQXJncywgLi4ucm93RWRpdEFyZ3MgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcm93RWRpdERvbmUoY2FjaGVkUm93RGF0YSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGRvbmVBcmdzID0gdGhpcy5yb3cuY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdERvbmUuZW1pdChkb25lQXJncyk7XG4gICAgICAgIHJldHVybiBkb25lQXJncztcbiAgICB9XG5cblxuICAgIC8qKiBFeGl0IHJvdyBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgZXhpdFJvd0VkaXQoY2FjaGVkUm93RGF0YSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMucm93LmNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKGNhY2hlZFJvd0RhdGEsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRFeGl0LmVtaXQobm9uQ2FuY2VsYWJsZUFyZ3MpO1xuICAgICAgICB0aGlzLmdyaWQuY2xvc2VSb3dFZGl0aW5nT3ZlcmxheSgpO1xuXG4gICAgICAgIHRoaXMuZW5kUm93RWRpdCgpO1xuICAgICAgICByZXR1cm4gbm9uQ2FuY2VsYWJsZUFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyByb3cgZWRpdGluZyBzdGF0ZSAqL1xuICAgIHB1YmxpYyBlbmRSb3dFZGl0KCkge1xuICAgICAgICB0aGlzLnJvdyA9IG51bGw7XG4gICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIGNlbGwgYW5kIHJvdyBlZGl0aW5nIHN0YXRlIGFuZCBjbG9zZXMgcm93IGVkaXRpbmcgdGVtcGxhdGUgaWYgaXQgaXMgb3BlbiAqL1xuICAgIHB1YmxpYyBlbmRFZGl0TW9kZSgpIHtcbiAgICAgICAgdGhpcy5lbmRDZWxsRWRpdCgpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmVuZFJvd0VkaXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jbG9zZVJvd0VkaXRpbmdPdmVybGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUm93RWRpdERhdGEocm93OiBJZ3hFZGl0Um93LCB2YWx1ZT86IGFueSkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuXG4gICAgICAgIGNvbnN0IHJvd0luRWRpdE1vZGUgPSBncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2Uucm93O1xuICAgICAgICByb3cubmV3RGF0YSA9IHZhbHVlID8/IHJvd0luRWRpdE1vZGUudHJhbnNhY3Rpb25TdGF0ZTtcblxuXG4gICAgICAgIGlmIChyb3dJbkVkaXRNb2RlICYmIHJvdy5pZCA9PT0gcm93SW5FZGl0TW9kZS5pZCkge1xuICAgICAgICAgICAgLy8gZG8gbm90IHVzZSBzcHJlYWQgb3BlcmF0b3IgaGVyZSBhcyBpdCB3aWxsIGNvcHkgZXZlcnl0aGluZyBvdmVyIGFuIGVtcHR5IG9iamVjdCB3aXRoIG5vIGRlc2NyaXB0b3JzXG4gICAgICAgICAgICByb3cuZGF0YSA9IE9iamVjdC5hc3NpZ24oY29weURlc2NyaXB0b3JzKHJvdy5kYXRhKSwgcm93LmRhdGEsIHJvd0luRWRpdE1vZGUudHJhbnNhY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAvLyBUT0RPOiBXb3JrYXJvdW5kIGZvciB1cGRhdGluZyBhIHJvdyBpbiBlZGl0IG1vZGUgdGhyb3VnaCB0aGUgQVBJXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvdy5pZCk7XG4gICAgICAgICAgICByb3cuZGF0YSA9IHN0YXRlID8gT2JqZWN0LmFzc2lnbih7fSwgcm93LmRhdGEsIHN0YXRlLnZhbHVlKSA6IHJvdy5kYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFBhcmVudFJvd0lkKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hSb3dBZGRDcnVkU3RhdGUgZXh0ZW5kcyBJZ3hSb3dDcnVkU3RhdGUge1xuICAgIHB1YmxpYyBhZGRSb3dQYXJlbnQ6IElneEFkZFJvd1BhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVBZGRSb3cocGFyZW50Um93OiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4sIGFzQ2hpbGQ/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQWRkUm93UGFyZW50KHBhcmVudFJvdywgYXNDaGlsZCk7XG5cbiAgICAgICAgY29uc3QgbmV3UmVjID0gdGhpcy5ncmlkLmdldEVtcHR5UmVjb3JkT2JqZWN0Rm9yKHBhcmVudFJvdyk7XG4gICAgICAgIGNvbnN0IGFkZFJvd0luZGV4ID0gdGhpcy5hZGRSb3dQYXJlbnQuaW5kZXggKyAxO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3cgPSBuZXcgSWd4QWRkUm93KG5ld1JlYy5yb3dJRCwgYWRkUm93SW5kZXgsIG5ld1JlYy5kYXRhLCBuZXdSZWMucmVjb3JkUmVmLCB0aGlzLmdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUFkZFJvd1BhcmVudChyb3c6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiwgbmV3Um93QXNDaGlsZD86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSByb3cgPyByb3cuaW5kZXggOiAtMTtcbiAgICAgICAgY29uc3Qgcm93SWQgPSByb3cgPyByb3cucm93SUQgOiBudWxsO1xuICAgICAgICBjb25zdCBpc0luUGlubmVkQXJlYSA9IHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZEJ5Vmlld0luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgcGluSW5kZXggPSB0aGlzLmdyaWQucGlubmVkUmVjb3Jkcy5maW5kSW5kZXgoeCA9PiB4W3RoaXMucHJpbWFyeUtleV0gPT09IHJvd0lkKTtcbiAgICAgICAgY29uc3QgdW5waW5JbmRleCA9IHRoaXMuZ3JpZC5nZXRVbnBpbm5lZEluZGV4QnlJZChyb3dJZCk7XG4gICAgICAgIHRoaXMuYWRkUm93UGFyZW50ID0ge1xuICAgICAgICAgICAgcm93SUQ6IHJvd0lkLFxuICAgICAgICAgICAgaW5kZXg6IGlzSW5QaW5uZWRBcmVhID8gcGluSW5kZXggOiB1bnBpbkluZGV4LFxuICAgICAgICAgICAgYXNDaGlsZDogbmV3Um93QXNDaGlsZCxcbiAgICAgICAgICAgIGlzUGlubmVkOiBpc0luUGlubmVkQXJlYVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGlmICh0aGlzLnJvdyAmJiB0aGlzLnJvdy5nZXRDbGFzc05hbWUoKSA9PT0gSWd4QWRkUm93Lm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dBZGRlZC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoYWRkUm93QXJnczogSVJvd0RhdGFFdmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gYWRkUm93QXJncy5kYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpbm5lZEluZGV4ID0gdGhpcy5ncmlkLnBpbm5lZFJlY29yZHMuZmluZEluZGV4KHggPT4geFt0aGlzLnByaW1hcnlLZXldID09PSByb3dEYXRhW3RoaXMucHJpbWFyeUtleV0pO1xuICAgICAgICAgICAgICAgIC8vIEEgY2hlY2sgd2hldGhlciB0aGUgcm93IGlzIGluIHRoZSBjdXJyZW50IHZpZXdcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3SW5kZXggPSBwaW5uZWRJbmRleCAhPT0gLTEgPyBwaW5uZWRJbmRleCA6IHRoaXMuX2ZpbmRSZWNvcmRJbmRleEluVmlldyhyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhSW5kZXggPSB0aGlzLmdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhLmZpbmRJbmRleChkYXRhID0+IGRhdGFbdGhpcy5wcmltYXJ5S2V5XSA9PT0gcm93RGF0YVt0aGlzLnByaW1hcnlLZXldKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0luVmlldyA9IHZpZXdJbmRleCAhPT0gLTEgJiYgIXRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbCh2aWV3SW5kZXgsIDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3dJbmRleCA9IGlzSW5WaWV3ID8gLTEgOiBkYXRhSW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNob3dTbmFja2JhckZvcihzaG93SW5kZXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gc3VwZXIuZW5kUm93VHJhbnNhY3Rpb24oY29tbWl0LCBldmVudCk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVuZEFkZFJvdygpO1xuICAgICAgICBpZiAoY29tbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93QWRkZWROb3RpZmllci5uZXh0KHsgZGF0YTogYXJncy5uZXdWYWx1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dBZGRlZC5lbWl0KHsgZGF0YTogYXJncy5uZXdWYWx1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVuZEFkZFJvdygpIHtcbiAgICAgICAgdGhpcy5hZGRSb3dQYXJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmdyaWQudHJpZ2dlclBpcGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIFRPRE86IGNvbnNpZGVyIGNoYW5naW5nIG1vZGlmaWVyXG4gICAgICovXG4gICAgcHVibGljIF9maW5kUmVjb3JkSW5kZXhJblZpZXcocmVjKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVZpZXcuZmluZEluZGV4KGRhdGEgPT4gZGF0YVt0aGlzLnByaW1hcnlLZXldID09PSByZWNbdGhpcy5wcmltYXJ5S2V5XSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFBhcmVudFJvd0lkKCkge1xuICAgICAgICBpZiAodGhpcy5hZGRSb3dQYXJlbnQuYXNDaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm93UGFyZW50LmFzQ2hpbGQgPyB0aGlzLmFkZFJvd1BhcmVudC5yb3dJRCA6IHVuZGVmaW5lZDs7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hZGRSb3dQYXJlbnQucm93SUQgIT09IG51bGwgJiYgdGhpcy5hZGRSb3dQYXJlbnQucm93SUQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgc3Bhd25lZEZvclJlY29yZCA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yZWNfYnlfaWQodGhpcy5hZGRSb3dQYXJlbnQucm93SUQpO1xuICAgICAgICAgICAgcmV0dXJuIHNwYXduZWRGb3JSZWNvcmQ/LnBhcmVudD8ucm93SUQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkQ1JVRFNlcnZpY2UgZXh0ZW5kcyBJZ3hSb3dBZGRDcnVkU3RhdGUge1xuXG4gICAgcHVibGljIGVudGVyRWRpdE1vZGUoY2VsbCwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0luQ29tcG9zaXRpb25Nb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jZWxsSW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgLy8gVE9ETzogY2FzZSBzb2xlbHkgZm9yIGYyL2VudGVyIG5hdiB0aGF0IHVzZXMgZW50ZXJFZGl0TW9kZSBhcyB0b2dnbGUuIFJlZmFjdG9yLlxuICAgICAgICAgICAgY29uc3QgY2FuY2VsZWQgPSB0aGlzLmVuZEVkaXQodHJ1ZSwgZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoIWNhbmNlbGVkIHx8ICF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNlbGwoY2VsbCk7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dFZGl0aW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucm93ICYmICF0aGlzLnNhbWVSb3codGhpcy5jZWxsPy5pZD8ucm93SUQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSB0aGlzLmVuZEVkaXQodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3dFZGl0aW5nQmxvY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBlbnRlcnMgaGVyZSwgQGVuZEVkaXQgY2xlYXJzIHRoZSBuZXcgcmVmZXJlbmNlIG9mIHRoZSBjZWxsIGVkaXQuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQ2VsbChjZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dFZGl0aW5nQmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFJvd0VkaXQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjYW5jZWxlZCA9IHRoaXMuYmVnaW5Sb3dFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5DZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5DZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbnRlcnMgYWRkIHJvdyBtb2RlIGJ5IGNyZWF0aW5nIHRlbXBvcmFyeSBkdW1teSBzbyB0aGUgdXNlciBjYW4gZmlsbCBpbiBuZXcgcm93IGNlbGxzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudFJvdyBQYXJlbnQgcm93IGFmdGVyIHdoaWNoIHRoZSBBZGQgUm93IFVJIHdpbGwgYmUgcmVuZGVyZWQuXG4gICAgICogICAgICAgICAgICAgICAgICBJZiBgbnVsbGAgd2lsbCBzaG93IGl0IGF0IHRoZSBib3R0b20gYWZ0ZXIgYWxsIHJvd3MgKG9yIHRvcCBpZiB0aGVyZSBhcmUgbm90IHJvd3MpLlxuICAgICAqIEBwYXJhbSBhc0NoaWxkIFNwZWNpZmllcyBpZiB0aGUgbmV3IHJvdyBzaG91bGQgYmUgYWRkZWQgYXMgYSBjaGlsZCB0byBhIHRyZWUgcm93LlxuICAgICAqIEBwYXJhbSBldmVudCBCYXNlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhZGQgcm93IG1vZGUuXG4gICAgICovXG4gICAgcHVibGljIGVudGVyQWRkUm93TW9kZShwYXJlbnRSb3c6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiwgYXNDaGlsZD86IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0VkaXRpbmcgJiYgKHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSB1bmRlZmluZWQgfHwgdGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IG51bGwpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBncmlkIG11c3QgdXNlIHJvdyBlZGl0IG1vZGUgdG8gcGVyZm9ybSByb3cgYWRkaW5nISBQbGVhc2Ugc2V0IHJvd0VkaXRhYmxlIHRvIHRydWUuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmRFZGl0KHRydWUsIGV2ZW50KTtcblxuICAgICAgICBpZiAocGFyZW50Um93ICE9IG51bGwgJiYgdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocGFyZW50Um93LnJvd0lEKSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNvbGxhcHNlUm93KHBhcmVudFJvdy5yb3dJRCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNyZWF0ZUFkZFJvdyhwYXJlbnRSb3csIGFzQ2hpbGQpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuc3RhcnRQZW5kaW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmFkZFJvd1BhcmVudC5pc1Bpbm5lZCkge1xuICAgICAgICAgICAgLy8gSWYgcGFyZW50IGlzIHBpbm5lZCwgYWRkIHRoZSBuZXcgcm93IHRvIHBpbm5lZCByZWNvcmRzXG4gICAgICAgICAgICAodGhpcy5ncmlkIGFzIGFueSkuX3Bpbm5lZFJlY29yZElEcy5zcGxpY2UodGhpcy5yb3cuaW5kZXgsIDAsIHRoaXMucm93LmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC50cmlnZ2VyUGlwZXMoKTtcbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXModHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8odGhpcy5yb3cuaW5kZXgsIC0xKTtcbiAgICAgICAgLy8gd2hlbiBzZWxlY3RpbmcgdGhlIGR1bW15IHJvdyB3ZSBuZWVkIHRvIGFkanVzdCBmb3IgdG9wIHBpbm5lZCByb3dzXG4gICAgICAgIGNvbnN0IGluZGV4QWRqdXN0ID0gdGhpcy5ncmlkLmlzUm93UGlubmluZ1RvVG9wICYmICF0aGlzLmFkZFJvd1BhcmVudC5pc1Bpbm5lZCA/IHRoaXMuZ3JpZC5waW5uZWRSb3dzLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IGR1bW15Um93ID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19ieV9pbmRleCh0aGlzLnJvdy5pbmRleCArIGluZGV4QWRqdXN0KTtcbiAgICAgICAgZHVtbXlSb3cudHJpZ2dlckFkZEFuaW1hdGlvbigpO1xuICAgICAgICBkdW1teVJvdy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBkdW1teVJvdy5hZGRBbmltYXRpb25FbmQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGR1bW15Um93LmNlbGxzLmZpbmQoYyA9PiBjLmVkaXRhYmxlKTtcbiAgICAgICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX2NlbGwodGhpcy5jZWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGVyRWRpdE1vZGUoY2VsbCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIGNlbGwuYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluaXNoZXMgdGhlIHJvdyB0cmFuc2FjdGlvbnMgb24gdGhlIGN1cnJlbnQgcm93LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBgY29tbWl0ID09PSB0cnVlYCwgcGFzc2VzIHRoZW0gZnJvbSB0aGUgcGVuZGluZyBzdGF0ZSB0byB0aGUgZGF0YSAob3IgdHJhbnNhY3Rpb24gc2VydmljZSlcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwiZ3JpZC5lbmRFZGl0KHRydWUpXCI+Q29tbWl0IFJvdzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBjb21taXRcbiAgICAgKi9cbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1ldGhvZCB3aXRob3V0IGV2dCBlbWlzc2lvbi5cbiAgICBwdWJsaWMgZW5kRWRpdChjb21taXQgPSB0cnVlLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5yb3cgJiYgIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFyZ3M7XG4gICAgICAgIGlmIChjb21taXQpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzLnVwZGF0ZUNlbGwodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFyZ3MgJiYgYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncy5jYW5jZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzID0gdGhpcy51cGRhdGVSb3coY29tbWl0LCBldmVudCk7XG4gICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBhcmdzLmNhbmNlbDtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUNlbGwgPSB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZXZlbnQgJiYgYWN0aXZlQ2VsbCkge1xuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBhY3RpdmVDZWxsLnJvdztcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVDb2xJbmRleCA9IGFjdGl2ZUNlbGwubGF5b3V0ID8gYWN0aXZlQ2VsbC5sYXlvdXQuY29sdW1uVmlzaWJsZUluZGV4IDogYWN0aXZlQ2VsbC5jb2x1bW47XG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGVUbyhyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29tbW9uL2dyaWQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJNb2RlIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eSB9IGZyb20gJy4uLy4uL2NvcmUvZGlzcGxheURlbnNpdHknO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElHcmlkUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuL2dyaWQtcmVzb3VyY2VzJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25TZXJ2aWNlLCBUcmFuc2FjdGlvbiwgU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4uL3RyZWUtZ3JpZC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWREYXRhQmluZGFibGUge1xuICAgIGRhdGE6IGFueVtdIHwgbnVsbDtcbiAgICBmaWx0ZXJlZERhdGE6IGFueVtdO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgR3JpZCB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFR5cGUgZXh0ZW5kcyBJR3JpZERhdGFCaW5kYWJsZSB7XG4gICAgZGlzcGxheURlbnNpdHk6IERpc3BsYXlEZW5zaXR5O1xuICAgIGxvY2FsZTogc3RyaW5nO1xuICAgIHJlc291cmNlU3RyaW5nczogSUdyaWRSZXNvdXJjZVN0cmluZ3M7XG4gICAgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcm93RWRpdGFibGU6IGJvb2xlYW47XG4gICAgcm9vdFN1bW1hcmllc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgYWxsb3dGaWx0ZXJpbmc6IGJvb2xlYW47XG4gICAgcm93RHJhZ2dhYmxlOiBib29sZWFuO1xuICAgIHByaW1hcnlLZXk6IGFueTtcbiAgICBpZDogc3RyaW5nO1xuICAgIHJlbmRlcmVkUm93SGVpZ2h0OiBudW1iZXI7XG4gICAgc3VtbWFyeVBpcGVUcmlnZ2VyOiBudW1iZXI7XG4gICAgaGFzQ29sdW1uTGF5b3V0czogYm9vbGVhbjtcblxuICAgIGZpbHRlck1vZGU6IEZpbHRlck1vZGU7XG5cbiAgICBzZWxlY3Rpb25TZXJ2aWNlOiBhbnk7XG4gICAgbmF2aWdhdGlvbjogYW55O1xuICAgIGZpbHRlcmluZ1NlcnZpY2U6IGFueTtcbiAgICBvdXRsZXQ6IGFueTtcbiAgICBoYXNNb3ZhYmxlQ29sdW1uczogYm9vbGVhbjtcbiAgICBpc1Jvd1NlbGVjdGFibGU6IGJvb2xlYW47XG4gICAgc2hvd1Jvd1NlbGVjdG9yczogYm9vbGVhbjtcbiAgICBpc1Bpbm5pbmdUb1N0YXJ0OiBib29sZWFuO1xuICAgIGNvbHVtbkluRHJhZzogYW55O1xuICAgIHBpbm5lZFdpZHRoOiBudW1iZXI7XG4gICAgdW5waW5uZWRXaWR0aDogbnVtYmVyO1xuXG4gICAgZHJhZ0luZGljYXRvckljb25UZW1wbGF0ZTogYW55O1xuICAgIGRyYWdJbmRpY2F0b3JJY29uQmFzZTogYW55O1xuXG4gICAgY2FsY0hlaWdodDogbnVtYmVyO1xuICAgIGRlZmF1bHRIZWFkZXJHcm91cE1pbldpZHRoOiBhbnk7XG4gICAgc2Nyb2xsU2l6ZTogbnVtYmVyO1xuXG4gICAgcGFyZW50VmlydERpcjogYW55O1xuICAgIHRib2R5OiBhbnk7XG4gICAgdmVydGljYWxTY3JvbGxDb250YWluZXI6IGFueTtcbiAgICBkYXRhUm93TGlzdDogYW55O1xuICAgIHJvd0xpc3Q6IGFueTtcbiAgICBjb2x1bW5MaXN0OiBhbnk7XG4gICAgY29sdW1uczogYW55O1xuICAgIHVucGlubmVkQ29sdW1uczogYW55O1xuICAgIHBpbm5lZENvbHVtbnM6IGFueTtcbiAgICBzdW1tYXJpZXNSb3dMaXN0OiBhbnk7XG4gICAgaGVhZGVyQ29udGFpbmVyOiBhbnk7XG4gICAgZGF0YVZpZXc6IGFueVtdO1xuICAgIHRyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25TZXJ2aWNlPFRyYW5zYWN0aW9uLCBTdGF0ZT47XG4gICAgZGVmYXVsdFN1bW1hcnlIZWlnaHQ6IG51bWJlcjtcblxuICAgIHJvd0VkaXRUYWJzOiBhbnk7XG5cbiAgICBmaXJzdEVkaXRhYmxlQ29sdW1uSW5kZXg6IG51bWJlcjtcbiAgICBsYXN0RWRpdGFibGVDb2x1bW5JbmRleDogbnVtYmVyO1xuICAgIGhhc0RldGFpbHM6IGJvb2xlYW47XG5cbiAgICBzb3J0aW5nRXhwcmVzc2lvbnM6IElTb3J0aW5nRXhwcmVzc2lvbltdO1xuICAgIHNvcnRpbmdFeHByZXNzaW9uc0NoYW5nZTogRXZlbnRFbWl0dGVyPElTb3J0aW5nRXhwcmVzc2lvbltdPjtcbiAgICBmaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZT47XG4gICAgYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlPjtcblxuICAgIHRyYWNrQ29sdW1uQ2hhbmdlcyhpbmRleDogbnVtYmVyLCBjb2x1bW46IGFueSk6IGFueTtcbiAgICBoYXNWZXJ0aWNhbFNjcm9sbCgpOiBib29sZWFuO1xuICAgIGdldENvbHVtbkJ5TmFtZShuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgc29ydChleHByZXNzaW9uOiBJU29ydGluZ0V4cHJlc3Npb24gfCBBcnJheTxJU29ydGluZ0V4cHJlc3Npb24+KTogdm9pZDtcbiAgICBjbGVhclNvcnQobmFtZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgaXNDb2x1bW5Hcm91cGVkKGZpZWxkTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBpc0RldGFpbFJlY29yZChyZWM6IGFueSk6IGJvb2xlYW47XG4gICAgaXNHcm91cEJ5UmVjb3JkKHJlYzogYW55KTogYm9vbGVhbjtcbiAgICBub3RpZnlDaGFuZ2VzKHJlcGFpbnQ/OiBib29sZWFuKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBbiBpbnRlcmZhY2UgZGVzY3JpYmluZyBhIEZsYXQgR3JpZCB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxhdEdyaWRUeXBlIGV4dGVuZHMgR3JpZFR5cGUge1xuICAgIGdyb3VwaW5nRXhwYW5zaW9uU3RhdGU6IElHcm91cEJ5RXhwYW5kU3RhdGVbXTtcbiAgICBncm91cGluZ0V4cHJlc3Npb25zOiBJR3JvdXBpbmdFeHByZXNzaW9uW107XG4gICAgZ3JvdXBpbmdFeHByZXNzaW9uc0NoYW5nZTogRXZlbnRFbWl0dGVyPElHcm91cGluZ0V4cHJlc3Npb25bXT47XG5cbiAgICB0b2dnbGVHcm91cChncm91cFJvdzogSUdyb3VwQnlSZWNvcmQpOiB2b2lkO1xuICAgIGNsZWFyR3JvdXBpbmcoZmllbGQ6IHN0cmluZyk6IHZvaWQ7XG4gICAgZ3JvdXBCeShleHByZXNzaW9uOiBJR3JvdXBpbmdFeHByZXNzaW9uIHwgQXJyYXk8SUdyb3VwaW5nRXhwcmVzc2lvbj4pOiB2b2lkO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgVHJlZSBHcmlkIHR5cGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmVlR3JpZFR5cGUgZXh0ZW5kcyBHcmlkVHlwZSB7XG4gICAgcmVjb3JkczogTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPjtcbiAgICBpc1RyZWVSb3cocmVjOiBhbnkpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgSGllcmFyY2hpY2FsIEdyaWQgdHlwZVxuICovXG4gZXhwb3J0IGludGVyZmFjZSBIaWVyYXJjaGljYWxHcmlkVHlwZSBleHRlbmRzIEdyaWRUeXBlIHtcbiAgICBjaGlsZExheW91dEtleXM6IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRTVkdJY29uIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29tbW9uL2dyaWQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJNb2RlIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eSB9IGZyb20gJy4uLy4uL2NvcmUvZGlzcGxheURlbnNpdHknO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElHcmlkUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuL2dyaWQtcmVzb3VyY2VzJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25TZXJ2aWNlLCBUcmFuc2FjdGlvbiwgU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4uL3RyZWUtZ3JpZC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGF0YUNsb25lU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS1jbG9uZS1zdHJhdGVneSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWREYXRhQmluZGFibGUge1xuICAgIGRhdGE6IGFueVtdIHwgbnVsbDtcbiAgICBmaWx0ZXJlZERhdGE6IGFueVtdO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgR3JpZCB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFR5cGUgZXh0ZW5kcyBJR3JpZERhdGFCaW5kYWJsZSB7XG4gICAgZGlzcGxheURlbnNpdHk6IERpc3BsYXlEZW5zaXR5O1xuICAgIGxvY2FsZTogc3RyaW5nO1xuICAgIHJlc291cmNlU3RyaW5nczogSUdyaWRSZXNvdXJjZVN0cmluZ3M7XG4gICAgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcm93RWRpdGFibGU6IGJvb2xlYW47XG4gICAgcm9vdFN1bW1hcmllc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgYWxsb3dGaWx0ZXJpbmc6IGJvb2xlYW47XG4gICAgcm93RHJhZ2dhYmxlOiBib29sZWFuO1xuICAgIHByaW1hcnlLZXk6IGFueTtcbiAgICBpZDogc3RyaW5nO1xuICAgIHJlbmRlcmVkUm93SGVpZ2h0OiBudW1iZXI7XG4gICAgc3VtbWFyeVBpcGVUcmlnZ2VyOiBudW1iZXI7XG4gICAgaGFzQ29sdW1uTGF5b3V0czogYm9vbGVhbjtcblxuICAgIGZpbHRlck1vZGU6IEZpbHRlck1vZGU7XG4gICAgZGF0YUNsb25lU3RyYXRlZ3k6IElEYXRhQ2xvbmVTdHJhdGVneTtcblxuICAgIHNlbGVjdGlvblNlcnZpY2U6IGFueTtcbiAgICBuYXZpZ2F0aW9uOiBhbnk7XG4gICAgZmlsdGVyaW5nU2VydmljZTogYW55O1xuICAgIG91dGxldDogYW55O1xuICAgIGhhc01vdmFibGVDb2x1bW5zOiBib29sZWFuO1xuICAgIGlzUm93U2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBzaG93Um93U2VsZWN0b3JzOiBib29sZWFuO1xuICAgIGlzUGlubmluZ1RvU3RhcnQ6IGJvb2xlYW47XG4gICAgY29sdW1uSW5EcmFnOiBhbnk7XG4gICAgcGlubmVkV2lkdGg6IG51bWJlcjtcbiAgICB1bnBpbm5lZFdpZHRoOiBudW1iZXI7XG5cbiAgICBkcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlOiBhbnk7XG4gICAgZHJhZ0luZGljYXRvckljb25CYXNlOiBhbnk7XG5cbiAgICBjYWxjSGVpZ2h0OiBudW1iZXI7XG4gICAgZGVmYXVsdEhlYWRlckdyb3VwTWluV2lkdGg6IGFueTtcbiAgICBzY3JvbGxTaXplOiBudW1iZXI7XG5cbiAgICBwYXJlbnRWaXJ0RGlyOiBhbnk7XG4gICAgdGJvZHk6IGFueTtcbiAgICB2ZXJ0aWNhbFNjcm9sbENvbnRhaW5lcjogYW55O1xuICAgIGRhdGFSb3dMaXN0OiBhbnk7XG4gICAgcm93TGlzdDogYW55O1xuICAgIGNvbHVtbkxpc3Q6IGFueTtcbiAgICBjb2x1bW5zOiBhbnk7XG4gICAgdW5waW5uZWRDb2x1bW5zOiBhbnk7XG4gICAgcGlubmVkQ29sdW1uczogYW55O1xuICAgIHN1bW1hcmllc1Jvd0xpc3Q6IGFueTtcbiAgICBoZWFkZXJDb250YWluZXI6IGFueTtcbiAgICBkYXRhVmlldzogYW55W107XG4gICAgdHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvblNlcnZpY2U8VHJhbnNhY3Rpb24sIFN0YXRlPjtcbiAgICBkZWZhdWx0U3VtbWFyeUhlaWdodDogbnVtYmVyO1xuXG4gICAgcm93RWRpdFRhYnM6IGFueTtcblxuICAgIGZpcnN0RWRpdGFibGVDb2x1bW5JbmRleDogbnVtYmVyO1xuICAgIGxhc3RFZGl0YWJsZUNvbHVtbkluZGV4OiBudW1iZXI7XG4gICAgaGFzRGV0YWlsczogYm9vbGVhbjtcblxuICAgIHNvcnRpbmdFeHByZXNzaW9uczogSVNvcnRpbmdFeHByZXNzaW9uW107XG4gICAgc29ydGluZ0V4cHJlc3Npb25zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SVNvcnRpbmdFeHByZXNzaW9uW10+O1xuICAgIGZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBmaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlPjtcbiAgICBhZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBhZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZUNoYW5nZTogRXZlbnRFbWl0dGVyPElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU+O1xuXG4gICAgdHJhY2tDb2x1bW5DaGFuZ2VzKGluZGV4OiBudW1iZXIsIGNvbHVtbjogYW55KTogYW55O1xuICAgIGhhc1ZlcnRpY2FsU2Nyb2xsKCk6IGJvb2xlYW47XG4gICAgZ2V0Q29sdW1uQnlOYW1lKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICBzb3J0KGV4cHJlc3Npb246IElTb3J0aW5nRXhwcmVzc2lvbiB8IEFycmF5PElTb3J0aW5nRXhwcmVzc2lvbj4pOiB2b2lkO1xuICAgIGNsZWFyU29ydChuYW1lPzogc3RyaW5nKTogdm9pZDtcbiAgICBpc0NvbHVtbkdyb3VwZWQoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICAgIGlzRGV0YWlsUmVjb3JkKHJlYzogYW55KTogYm9vbGVhbjtcbiAgICBpc0dyb3VwQnlSZWNvcmQocmVjOiBhbnkpOiBib29sZWFuO1xuICAgIG5vdGlmeUNoYW5nZXMocmVwYWludD86IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgRmxhdCBHcmlkIHR5cGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbGF0R3JpZFR5cGUgZXh0ZW5kcyBHcmlkVHlwZSB7XG4gICAgZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZTogSUdyb3VwQnlFeHBhbmRTdGF0ZVtdO1xuICAgIGdyb3VwaW5nRXhwcmVzc2lvbnM6IElHcm91cGluZ0V4cHJlc3Npb25bXTtcbiAgICBncm91cGluZ0V4cHJlc3Npb25zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyb3VwaW5nRXhwcmVzc2lvbltdPjtcblxuICAgIHRvZ2dsZUdyb3VwKGdyb3VwUm93OiBJR3JvdXBCeVJlY29yZCk6IHZvaWQ7XG4gICAgY2xlYXJHcm91cGluZyhmaWVsZDogc3RyaW5nKTogdm9pZDtcbiAgICBncm91cEJ5KGV4cHJlc3Npb246IElHcm91cGluZ0V4cHJlc3Npb24gfCBBcnJheTxJR3JvdXBpbmdFeHByZXNzaW9uPik6IHZvaWQ7XG59XG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIGRlc2NyaWJpbmcgYSBUcmVlIEdyaWQgdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVHcmlkVHlwZSBleHRlbmRzIEdyaWRUeXBlIHtcbiAgICByZWNvcmRzOiBNYXA8YW55LCBJVHJlZUdyaWRSZWNvcmQ+O1xuICAgIGlzVHJlZVJvdyhyZWM6IGFueSk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIGRlc2NyaWJpbmcgYSBIaWVyYXJjaGljYWwgR3JpZCB0eXBlXG4gKi9cbiBleHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoaWNhbEdyaWRUeXBlIGV4dGVuZHMgR3JpZFR5cGUge1xuICAgIGNoaWxkTGF5b3V0S2V5czogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFNWR0ljb24ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xufVxuIl19