@ieeesa-npm/groups 0.15.25 → 0.15.26

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.
@@ -16,5 +16,6 @@ export var PermissionType;
16
16
  PermissionType["VIEW_ALL_ROSTERS"] = "VIEW_ALL_ROSTERS";
17
17
  PermissionType["MANAGE_ALL_ROSTERS"] = "MANAGE_ALL_ROSTERS";
18
18
  PermissionType["MANAGE_CUSTOM_INTEREST_QUESTIONS"] = "MANAGE_CUSTOM_INTEREST_QUESTIONS";
19
+ PermissionType["RESTRICT_GROUPS_AND_ROSTERS"] = "RESTRICT_GROUPS_AND_ROSTERS";
19
20
  })(PermissionType || (PermissionType = {}));
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi10eXBlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3JvdXBzL3NyYy9saWIvbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQ0FBbUM7QUFDbkMsTUFBTSxDQUFOLElBQVksY0FnQlg7QUFoQkQsV0FBWSxjQUFjO0lBQ3hCLDZDQUEyQixDQUFBO0lBQzNCLHlEQUF1QyxDQUFBO0lBQ3ZDLHFEQUFtQyxDQUFBO0lBQ25DLDJDQUF5QixDQUFBO0lBQ3pCLCtDQUE2QixDQUFBO0lBQzdCLDZEQUEyQyxDQUFBO0lBQzNDLGlFQUErQyxDQUFBO0lBQy9DLDJEQUF5QyxDQUFBO0lBQ3pDLCtEQUE2QyxDQUFBO0lBQzdDLDZEQUEyQyxDQUFBO0lBQzNDLHFEQUFtQyxDQUFBO0lBQ25DLHlEQUF1QyxDQUFBO0lBQ3ZDLHVEQUFxQyxDQUFBO0lBQ3JDLDJEQUF5QyxDQUFBO0lBQ3pDLHVGQUFxRSxDQUFBO0FBQ3ZFLENBQUMsRUFoQlcsY0FBYyxLQUFkLGNBQWMsUUFnQnpCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuZXhwb3J0IGVudW0gUGVybWlzc2lvblR5cGUge1xyXG4gIFZJRVdfR1JPVVBTID0gJ1ZJRVdfR1JPVVBTJyxcclxuICBDUkVBVEVfUk9PVF9HUk9VUCA9ICdDUkVBVEVfUk9PVF9HUk9VUCcsXHJcbiAgQ1JFQVRFX1NVQkdST1VQID0gJ0NSRUFURV9TVUJHUk9VUCcsXHJcbiAgRURJVF9HUk9VUCA9ICdFRElUX0dST1VQJyxcclxuICBERUxFVEVfR1JPVVAgPSAnREVMRVRFX0dST1VQJyxcclxuICBWSUVXX0dST1VQX09GRklDRVJTID0gJ1ZJRVdfR1JPVVBfT0ZGSUNFUlMnLFxyXG4gIE1BTkFHRV9HUk9VUF9PRkZJQ0VSUyA9ICdNQU5BR0VfR1JPVVBfT0ZGSUNFUlMnLFxyXG4gIFZJRVdfR1JPVVBfTUVNQkVSUyA9ICdWSUVXX0dST1VQX01FTUJFUlMnLFxyXG4gIE1BTkFHRV9HUk9VUF9NRU1CRVJTID0gJ01BTkFHRV9HUk9VUF9NRU1CRVJTJyxcclxuICBNQU5BR0VfU1lTVEVNX1VTRVJTID0gJ01BTkFHRV9TWVNURU1fVVNFUlMnLFxyXG4gIFZJRVdfQUxMX0dST1VQUyA9ICdWSUVXX0FMTF9HUk9VUFMnLFxyXG4gIE1BTkFHRV9BTExfR1JPVVBTID0gJ01BTkFHRV9BTExfR1JPVVBTJyxcclxuICBWSUVXX0FMTF9ST1NURVJTID0gJ1ZJRVdfQUxMX1JPU1RFUlMnLFxyXG4gIE1BTkFHRV9BTExfUk9TVEVSUyA9ICdNQU5BR0VfQUxMX1JPU1RFUlMnLFxyXG4gIE1BTkFHRV9DVVNUT01fSU5URVJFU1RfUVVFU1RJT05TID0gJ01BTkFHRV9DVVNUT01fSU5URVJFU1RfUVVFU1RJT05TJyxcclxufVxyXG4iXX0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi10eXBlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3JvdXBzL3NyYy9saWIvbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQ0FBbUM7QUFDbkMsTUFBTSxDQUFOLElBQVksY0FpQlg7QUFqQkQsV0FBWSxjQUFjO0lBQ3hCLDZDQUEyQixDQUFBO0lBQzNCLHlEQUF1QyxDQUFBO0lBQ3ZDLHFEQUFtQyxDQUFBO0lBQ25DLDJDQUF5QixDQUFBO0lBQ3pCLCtDQUE2QixDQUFBO0lBQzdCLDZEQUEyQyxDQUFBO0lBQzNDLGlFQUErQyxDQUFBO0lBQy9DLDJEQUF5QyxDQUFBO0lBQ3pDLCtEQUE2QyxDQUFBO0lBQzdDLDZEQUEyQyxDQUFBO0lBQzNDLHFEQUFtQyxDQUFBO0lBQ25DLHlEQUF1QyxDQUFBO0lBQ3ZDLHVEQUFxQyxDQUFBO0lBQ3JDLDJEQUF5QyxDQUFBO0lBQ3pDLHVGQUFxRSxDQUFBO0lBQ3JFLDZFQUEyRCxDQUFBO0FBQzdELENBQUMsRUFqQlcsY0FBYyxLQUFkLGNBQWMsUUFpQnpCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuZXhwb3J0IGVudW0gUGVybWlzc2lvblR5cGUge1xyXG4gIFZJRVdfR1JPVVBTID0gJ1ZJRVdfR1JPVVBTJyxcclxuICBDUkVBVEVfUk9PVF9HUk9VUCA9ICdDUkVBVEVfUk9PVF9HUk9VUCcsXHJcbiAgQ1JFQVRFX1NVQkdST1VQID0gJ0NSRUFURV9TVUJHUk9VUCcsXHJcbiAgRURJVF9HUk9VUCA9ICdFRElUX0dST1VQJyxcclxuICBERUxFVEVfR1JPVVAgPSAnREVMRVRFX0dST1VQJyxcclxuICBWSUVXX0dST1VQX09GRklDRVJTID0gJ1ZJRVdfR1JPVVBfT0ZGSUNFUlMnLFxyXG4gIE1BTkFHRV9HUk9VUF9PRkZJQ0VSUyA9ICdNQU5BR0VfR1JPVVBfT0ZGSUNFUlMnLFxyXG4gIFZJRVdfR1JPVVBfTUVNQkVSUyA9ICdWSUVXX0dST1VQX01FTUJFUlMnLFxyXG4gIE1BTkFHRV9HUk9VUF9NRU1CRVJTID0gJ01BTkFHRV9HUk9VUF9NRU1CRVJTJyxcclxuICBNQU5BR0VfU1lTVEVNX1VTRVJTID0gJ01BTkFHRV9TWVNURU1fVVNFUlMnLFxyXG4gIFZJRVdfQUxMX0dST1VQUyA9ICdWSUVXX0FMTF9HUk9VUFMnLFxyXG4gIE1BTkFHRV9BTExfR1JPVVBTID0gJ01BTkFHRV9BTExfR1JPVVBTJyxcclxuICBWSUVXX0FMTF9ST1NURVJTID0gJ1ZJRVdfQUxMX1JPU1RFUlMnLFxyXG4gIE1BTkFHRV9BTExfUk9TVEVSUyA9ICdNQU5BR0VfQUxMX1JPU1RFUlMnLFxyXG4gIE1BTkFHRV9DVVNUT01fSU5URVJFU1RfUVVFU1RJT05TID0gJ01BTkFHRV9DVVNUT01fSU5URVJFU1RfUVVFU1RJT05TJyxcclxuICBSRVNUUklDVF9HUk9VUFNfQU5EX1JPU1RFUlMgPSAnUkVTVFJJQ1RfR1JPVVBTX0FORF9ST1NURVJTJyxcclxufVxyXG4iXX0=
@@ -76,6 +76,11 @@ export class GroupPermissionsMapService {
76
76
  permissionName: 'Manage All Rosters',
77
77
  permissionId: 'PERM_6fec2e8c-1b48-46a9-b394-34d3648d6fe8',
78
78
  },
79
+ {
80
+ permissionType: PermissionType.RESTRICT_GROUPS_AND_ROSTERS,
81
+ permissionName: 'Restrict Manage Groups And Rosters',
82
+ permissionId: 'PERM_RESTRICT_MANAGE_GROUPS_AND_ROSTERS',
83
+ },
79
84
  ];
80
85
  }
81
86
  /**
@@ -104,4 +109,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
104
109
  providedIn: 'root',
105
110
  }]
106
111
  }] });
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtcGVybWlzc2lvbnMtbWFwLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9zZXJ2aWNlcy9ncm91cC1wZXJtaXNzaW9ucy1tYXAtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFLakUsTUFBTSxPQUFPLDBCQUEwQjtJQUh2QztRQUlFLHFCQUFnQixHQUFzQjtZQUNwQztnQkFDRSxjQUFjLEVBQUUsY0FBYyxDQUFDLFdBQVc7Z0JBQzFDLGNBQWMsRUFBRSxhQUFhO2dCQUM3QixZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQyxpQkFBaUI7Z0JBQ2hELGNBQWMsRUFBRSxxQkFBcUI7Z0JBQ3JDLFlBQVksRUFBRSwyQ0FBMkM7YUFDMUQ7WUFDRDtnQkFDRSxjQUFjLEVBQUUsY0FBYyxDQUFDLGVBQWU7Z0JBQzlDLGNBQWMsRUFBRSxpQkFBaUI7Z0JBQ2pDLFlBQVksRUFBRSwyQ0FBMkM7YUFDMUQ7WUFDRDtnQkFDRSxjQUFjLEVBQUUsY0FBYyxDQUFDLFlBQVk7Z0JBQzNDLGNBQWMsRUFBRSxjQUFjO2dCQUM5QixZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQyxVQUFVO2dCQUN6QyxjQUFjLEVBQUUsb0JBQW9CO2dCQUNwQyxZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQyxtQkFBbUI7Z0JBQ2xELGNBQWMsRUFBRSxxQkFBcUI7Z0JBQ3JDLFlBQVksRUFBRSwyQ0FBMkM7YUFDMUQ7WUFDRDtnQkFDRSxjQUFjLEVBQUUsY0FBYyxDQUFDLHFCQUFxQjtnQkFDcEQsY0FBYyxFQUFFLHVCQUF1QjtnQkFDdkMsWUFBWSxFQUFFLDJDQUEyQzthQUMxRDtZQUNEO2dCQUNFLGNBQWMsRUFBRSxjQUFjLENBQUMsa0JBQWtCO2dCQUNqRCxjQUFjLEVBQUUsb0JBQW9CO2dCQUNwQyxZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQyxvQkFBb0I7Z0JBQ25ELGNBQWMsRUFBRSxxQkFBcUI7Z0JBQ3JDLFlBQVksRUFBRSwyQ0FBMkM7YUFDMUQ7U0FDRixDQUFDO1FBQ0YsMkJBQXNCLEdBQXNCO1lBQzFDO2dCQUNFLGNBQWMsRUFBRSxjQUFjLENBQUMsbUJBQW1CO2dCQUNsRCxjQUFjLEVBQUUscUJBQXFCO2dCQUNyQyxZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQyxlQUFlO2dCQUM5QyxjQUFjLEVBQUUsd0JBQXdCO2dCQUN4QyxZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQyxpQkFBaUI7Z0JBQ2hELGNBQWMsRUFBRSwwQkFBMEI7Z0JBQzFDLFlBQVksRUFBRSwyQ0FBMkM7YUFDMUQ7WUFDRDtnQkFDRSxjQUFjLEVBQUUsY0FBYyxDQUFDLGdCQUFnQjtnQkFDL0MsY0FBYyxFQUFFLGtCQUFrQjtnQkFDbEMsWUFBWSxFQUFFLDJDQUEyQzthQUMxRDtZQUNEO2dCQUNFLGNBQWMsRUFBRSxjQUFjLENBQUMsa0JBQWtCO2dCQUNqRCxjQUFjLEVBQUUsb0JBQW9CO2dCQUNwQyxZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1NBQ0YsQ0FBQztLQWtCSDtJQWpCQzs7OztPQUlHO0lBQ0gsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILHlCQUF5QjtRQUN2QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDOytHQTNGVSwwQkFBMEI7bUhBQTFCLDBCQUEwQixjQUZ6QixNQUFNOzs0RkFFUCwwQkFBMEI7a0JBSHRDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBHcm91cFBlcm1pc3Npb24gfSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtcGVybWlzc2lvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uLXR5cGUubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyb3VwUGVybWlzc2lvbnNNYXBTZXJ2aWNlIHtcclxuICBncm91cFBlcm1pc3Npb25zOiBHcm91cFBlcm1pc3Npb25bXSA9IFtcclxuICAgIHtcclxuICAgICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLlZJRVdfR1JPVVBTLFxyXG4gICAgICBwZXJtaXNzaW9uTmFtZTogJ1ZpZXcgR3JvdXBzJyxcclxuICAgICAgcGVybWlzc2lvbklkOiAnUEVSTV9jMDVmZjU5Mi03MTc4LTQ2MTQtYjczMC03YTdhODgyODgyNGUnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLkNSRUFURV9ST09UX0dST1VQLFxyXG4gICAgICBwZXJtaXNzaW9uTmFtZTogJ0NyZWF0ZSBQYXJlbnQgR3JvdXAnLFxyXG4gICAgICBwZXJtaXNzaW9uSWQ6ICdQRVJNX2ZjNTIyNzQ4LWUyZDQtNDQwYy1iNmM2LTQxYWFjYTc1YTgwZicsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUuQ1JFQVRFX1NVQkdST1VQLFxyXG4gICAgICBwZXJtaXNzaW9uTmFtZTogJ0NyZWF0ZSBTdWJncm91cCcsXHJcbiAgICAgIHBlcm1pc3Npb25JZDogJ1BFUk1fOGY4YTIwM2UtZDk5Mi00NTU1LTljNDItYWM2OTcwZjJkMzc2JyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZS5ERUxFVEVfR1JPVVAsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnRGVsZXRlIEdyb3VwJyxcclxuICAgICAgcGVybWlzc2lvbklkOiAnUEVSTV8wMDgyMjliZi02YTEyLTQyODEtODhkOC00YTJiYzk1OTc1NzMnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLkVESVRfR1JPVVAsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnRWRpdCBHcm91cCBEZXRhaWxzJyxcclxuICAgICAgcGVybWlzc2lvbklkOiAnUEVSTV9kNjRlMWYwOS1kM2Y3LTRmODYtYTk0Yy00NzgyYTJmNjA1NzEnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLlZJRVdfR1JPVVBfT0ZGSUNFUlMsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnVmlldyBHcm91cCBPZmZpY2VycycsXHJcbiAgICAgIHBlcm1pc3Npb25JZDogJ1BFUk1fZjgwYWM4YTMtNjBiOC00YWU0LWJlZGYtY2UxZDg5YzU0MzU0JyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfT0ZGSUNFUlMsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnTWFuYWdlIEdyb3VwIE9mZmljZXJzJyxcclxuICAgICAgcGVybWlzc2lvbklkOiAnUEVSTV85ZGRkNTFkYi1mNDgxLTQ3ZWEtOTQ2Yi1lODg4MTU5NzNjZmInLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLlZJRVdfR1JPVVBfTUVNQkVSUyxcclxuICAgICAgcGVybWlzc2lvbk5hbWU6ICdWaWV3IEdyb3VwIE1lbWJlcnMnLFxyXG4gICAgICBwZXJtaXNzaW9uSWQ6ICdQRVJNXzVhOGVkYjkxLWExMzItNDY3MC05MGEzLTI1ZmI2OTgyMzA3YScsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX01FTUJFUlMsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnTWFuYWdlIEdyb3VwIE1lbWJlcicsXHJcbiAgICAgIHBlcm1pc3Npb25JZDogJ1BFUk1fMTk2OWZlY2ItNjM4My00NDZlLTkyNzYtYjZhN2I3MjY1Y2I0JyxcclxuICAgIH0sXHJcbiAgXTtcclxuICBnbG9iYWxHcm91cFBlcm1pc3Npb25zOiBHcm91cFBlcm1pc3Npb25bXSA9IFtcclxuICAgIHtcclxuICAgICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLk1BTkFHRV9TWVNURU1fVVNFUlMsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnTWFuYWdlIFN5c3RlbSBVc2VycycsXHJcbiAgICAgIHBlcm1pc3Npb25JZDogJ1BFUk1fZDJjMTAzZTktMjBjNi00ZGQ1LWIzMjAtZjdkNGQwMTdjNTc0JyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZS5WSUVXX0FMTF9HUk9VUFMsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnVmlldyBBbGwgR3JvdXAgRGV0YWlscycsXHJcbiAgICAgIHBlcm1pc3Npb25JZDogJ1BFUk1fNzQxZDc1MDQtNzU5NS00YmVjLTgxMWYtOGQ2MDEzMzNlN2M0JyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQUyxcclxuICAgICAgcGVybWlzc2lvbk5hbWU6ICdNYW5hZ2UgQWxsIEdyb3VwIERldGFpbHMnLFxyXG4gICAgICBwZXJtaXNzaW9uSWQ6ICdQRVJNX2VlYmRlMTA1LTBiNTMtNDRjOC1iYWJjLTA2NmJlOTAzMjI5ZicsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUuVklFV19BTExfUk9TVEVSUyxcclxuICAgICAgcGVybWlzc2lvbk5hbWU6ICdWaWV3IEFsbCBSb3N0ZXJzJyxcclxuICAgICAgcGVybWlzc2lvbklkOiAnUEVSTV8wMTA5ZDdjNy02ZDY0LTQ2NzMtYjYzYi0zYTIzZjMzMjM1MzAnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfUk9TVEVSUyxcclxuICAgICAgcGVybWlzc2lvbk5hbWU6ICdNYW5hZ2UgQWxsIFJvc3RlcnMnLFxyXG4gICAgICBwZXJtaXNzaW9uSWQ6ICdQRVJNXzZmZWMyZThjLTFiNDgtNDZhOS1iMzk0LTM0ZDM2NDhkNmZlOCcsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBncm91cC13aXNlIHBlcm1pc3Npb24gbWFwcGluZ3MuXHJcbiAgICogQHJldHVybiB7R3JvdXBQZXJtaXNzaW9uW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3VwUGVybWlzc2lvbnNNYXBTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBQZXJtaXNzaW9ucygpOiBHcm91cFBlcm1pc3Npb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFBlcm1pc3Npb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGdsb2JhbCBwZXJtaXNzaW9ucyBtYXBwaW5nIGZvciBncm91cHMuXHJcbiAgICogR2xvYmFsIHBlcm1pc3Npb25zIGFyZSBtYWludGFpbmVkIHNlcGFyYXRlbHkgYXMgZ2xvYmFsIHBlcm1pc3Npb25zIGFsc28gaW5jbHVkZSByb2xlIGJhc2VkIGdyb3VwIHdpc2UgcGVybWlzc2lvbnMgaXJyZXNwZWN0aXZlIG9mIHRoZSBhdHRhY2hlZCBncm91cC5cclxuICAgKiBAcmV0dXJuIHtHcm91cFBlcm1pc3Npb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBQZXJtaXNzaW9uc01hcFNlcnZpY2VcclxuICAgKi9cclxuICBnZXRHbG9iYWxHcm91cFBlcm1pc3Npb25zKCk6IEdyb3VwUGVybWlzc2lvbltdIHtcclxuICAgIHJldHVybiB0aGlzLmdsb2JhbEdyb3VwUGVybWlzc2lvbnM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtcGVybWlzc2lvbnMtbWFwLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9zZXJ2aWNlcy9ncm91cC1wZXJtaXNzaW9ucy1tYXAtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFLakUsTUFBTSxPQUFPLDBCQUEwQjtJQUh2QztRQUlFLHFCQUFnQixHQUFzQjtZQUNwQztnQkFDRSxjQUFjLEVBQUUsY0FBYyxDQUFDLFdBQVc7Z0JBQzFDLGNBQWMsRUFBRSxhQUFhO2dCQUM3QixZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQyxpQkFBaUI7Z0JBQ2hELGNBQWMsRUFBRSxxQkFBcUI7Z0JBQ3JDLFlBQVksRUFBRSwyQ0FBMkM7YUFDMUQ7WUFDRDtnQkFDRSxjQUFjLEVBQUUsY0FBYyxDQUFDLGVBQWU7Z0JBQzlDLGNBQWMsRUFBRSxpQkFBaUI7Z0JBQ2pDLFlBQVksRUFBRSwyQ0FBMkM7YUFDMUQ7WUFDRDtnQkFDRSxjQUFjLEVBQUUsY0FBYyxDQUFDLFlBQVk7Z0JBQzNDLGNBQWMsRUFBRSxjQUFjO2dCQUM5QixZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQyxVQUFVO2dCQUN6QyxjQUFjLEVBQUUsb0JBQW9CO2dCQUNwQyxZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQyxtQkFBbUI7Z0JBQ2xELGNBQWMsRUFBRSxxQkFBcUI7Z0JBQ3JDLFlBQVksRUFBRSwyQ0FBMkM7YUFDMUQ7WUFDRDtnQkFDRSxjQUFjLEVBQUUsY0FBYyxDQUFDLHFCQUFxQjtnQkFDcEQsY0FBYyxFQUFFLHVCQUF1QjtnQkFDdkMsWUFBWSxFQUFFLDJDQUEyQzthQUMxRDtZQUNEO2dCQUNFLGNBQWMsRUFBRSxjQUFjLENBQUMsa0JBQWtCO2dCQUNqRCxjQUFjLEVBQUUsb0JBQW9CO2dCQUNwQyxZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQyxvQkFBb0I7Z0JBQ25ELGNBQWMsRUFBRSxxQkFBcUI7Z0JBQ3JDLFlBQVksRUFBRSwyQ0FBMkM7YUFDMUQ7U0FDRixDQUFDO1FBQ0YsMkJBQXNCLEdBQXNCO1lBQzFDO2dCQUNFLGNBQWMsRUFBRSxjQUFjLENBQUMsbUJBQW1CO2dCQUNsRCxjQUFjLEVBQUUscUJBQXFCO2dCQUNyQyxZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQyxlQUFlO2dCQUM5QyxjQUFjLEVBQUUsd0JBQXdCO2dCQUN4QyxZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQyxpQkFBaUI7Z0JBQ2hELGNBQWMsRUFBRSwwQkFBMEI7Z0JBQzFDLFlBQVksRUFBRSwyQ0FBMkM7YUFDMUQ7WUFDRDtnQkFDRSxjQUFjLEVBQUUsY0FBYyxDQUFDLGdCQUFnQjtnQkFDL0MsY0FBYyxFQUFFLGtCQUFrQjtnQkFDbEMsWUFBWSxFQUFFLDJDQUEyQzthQUMxRDtZQUNEO2dCQUNFLGNBQWMsRUFBRSxjQUFjLENBQUMsa0JBQWtCO2dCQUNqRCxjQUFjLEVBQUUsb0JBQW9CO2dCQUNwQyxZQUFZLEVBQUUsMkNBQTJDO2FBQzFEO1lBQ0Q7Z0JBQ0UsY0FBYyxFQUFFLGNBQWMsQ0FBQywyQkFBMkI7Z0JBQzFELGNBQWMsRUFBRSxvQ0FBb0M7Z0JBQ3BELFlBQVksRUFBRSx5Q0FBeUM7YUFDeEQ7U0FDRixDQUFDO0tBa0JIO0lBakJDOzs7O09BSUc7SUFDSCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gseUJBQXlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ3JDLENBQUM7K0dBaEdVLDBCQUEwQjttSEFBMUIsMEJBQTBCLGNBRnpCLE1BQU07OzRGQUVQLDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEdyb3VwUGVybWlzc2lvbiB9IGZyb20gJy4uL21vZGVscy9ncm91cC1wZXJtaXNzaW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBQZXJtaXNzaW9uc01hcFNlcnZpY2Uge1xyXG4gIGdyb3VwUGVybWlzc2lvbnM6IEdyb3VwUGVybWlzc2lvbltdID0gW1xyXG4gICAge1xyXG4gICAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUuVklFV19HUk9VUFMsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnVmlldyBHcm91cHMnLFxyXG4gICAgICBwZXJtaXNzaW9uSWQ6ICdQRVJNX2MwNWZmNTkyLTcxNzgtNDYxNC1iNzMwLTdhN2E4ODI4ODI0ZScsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUuQ1JFQVRFX1JPT1RfR1JPVVAsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnQ3JlYXRlIFBhcmVudCBHcm91cCcsXHJcbiAgICAgIHBlcm1pc3Npb25JZDogJ1BFUk1fZmM1MjI3NDgtZTJkNC00NDBjLWI2YzYtNDFhYWNhNzVhODBmJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZS5DUkVBVEVfU1VCR1JPVVAsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnQ3JlYXRlIFN1Ymdyb3VwJyxcclxuICAgICAgcGVybWlzc2lvbklkOiAnUEVSTV84ZjhhMjAzZS1kOTkyLTQ1NTUtOWM0Mi1hYzY5NzBmMmQzNzYnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLkRFTEVURV9HUk9VUCxcclxuICAgICAgcGVybWlzc2lvbk5hbWU6ICdEZWxldGUgR3JvdXAnLFxyXG4gICAgICBwZXJtaXNzaW9uSWQ6ICdQRVJNXzAwODIyOWJmLTZhMTItNDI4MS04OGQ4LTRhMmJjOTU5NzU3MycsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUuRURJVF9HUk9VUCxcclxuICAgICAgcGVybWlzc2lvbk5hbWU6ICdFZGl0IEdyb3VwIERldGFpbHMnLFxyXG4gICAgICBwZXJtaXNzaW9uSWQ6ICdQRVJNX2Q2NGUxZjA5LWQzZjctNGY4Ni1hOTRjLTQ3ODJhMmY2MDU3MScsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUuVklFV19HUk9VUF9PRkZJQ0VSUyxcclxuICAgICAgcGVybWlzc2lvbk5hbWU6ICdWaWV3IEdyb3VwIE9mZmljZXJzJyxcclxuICAgICAgcGVybWlzc2lvbklkOiAnUEVSTV9mODBhYzhhMy02MGI4LTRhZTQtYmVkZi1jZTFkODljNTQzNTQnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLk1BTkFHRV9HUk9VUF9PRkZJQ0VSUyxcclxuICAgICAgcGVybWlzc2lvbk5hbWU6ICdNYW5hZ2UgR3JvdXAgT2ZmaWNlcnMnLFxyXG4gICAgICBwZXJtaXNzaW9uSWQ6ICdQRVJNXzlkZGQ1MWRiLWY0ODEtNDdlYS05NDZiLWU4ODgxNTk3M2NmYicsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUuVklFV19HUk9VUF9NRU1CRVJTLFxyXG4gICAgICBwZXJtaXNzaW9uTmFtZTogJ1ZpZXcgR3JvdXAgTWVtYmVycycsXHJcbiAgICAgIHBlcm1pc3Npb25JZDogJ1BFUk1fNWE4ZWRiOTEtYTEzMi00NjcwLTkwYTMtMjVmYjY5ODIzMDdhJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfTUVNQkVSUyxcclxuICAgICAgcGVybWlzc2lvbk5hbWU6ICdNYW5hZ2UgR3JvdXAgTWVtYmVyJyxcclxuICAgICAgcGVybWlzc2lvbklkOiAnUEVSTV8xOTY5ZmVjYi02MzgzLTQ0NmUtOTI3Ni1iNmE3YjcyNjVjYjQnLFxyXG4gICAgfSxcclxuICBdO1xyXG4gIGdsb2JhbEdyb3VwUGVybWlzc2lvbnM6IEdyb3VwUGVybWlzc2lvbltdID0gW1xyXG4gICAge1xyXG4gICAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUuTUFOQUdFX1NZU1RFTV9VU0VSUyxcclxuICAgICAgcGVybWlzc2lvbk5hbWU6ICdNYW5hZ2UgU3lzdGVtIFVzZXJzJyxcclxuICAgICAgcGVybWlzc2lvbklkOiAnUEVSTV9kMmMxMDNlOS0yMGM2LTRkZDUtYjMyMC1mN2Q0ZDAxN2M1NzQnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLlZJRVdfQUxMX0dST1VQUyxcclxuICAgICAgcGVybWlzc2lvbk5hbWU6ICdWaWV3IEFsbCBHcm91cCBEZXRhaWxzJyxcclxuICAgICAgcGVybWlzc2lvbklkOiAnUEVSTV83NDFkNzUwNC03NTk1LTRiZWMtODExZi04ZDYwMTMzM2U3YzQnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfR1JPVVBTLFxyXG4gICAgICBwZXJtaXNzaW9uTmFtZTogJ01hbmFnZSBBbGwgR3JvdXAgRGV0YWlscycsXHJcbiAgICAgIHBlcm1pc3Npb25JZDogJ1BFUk1fZWViZGUxMDUtMGI1My00NGM4LWJhYmMtMDY2YmU5MDMyMjlmJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZS5WSUVXX0FMTF9ST1NURVJTLFxyXG4gICAgICBwZXJtaXNzaW9uTmFtZTogJ1ZpZXcgQWxsIFJvc3RlcnMnLFxyXG4gICAgICBwZXJtaXNzaW9uSWQ6ICdQRVJNXzAxMDlkN2M3LTZkNjQtNDY3My1iNjNiLTNhMjNmMzMyMzUzMCcsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9ST1NURVJTLFxyXG4gICAgICBwZXJtaXNzaW9uTmFtZTogJ01hbmFnZSBBbGwgUm9zdGVycycsXHJcbiAgICAgIHBlcm1pc3Npb25JZDogJ1BFUk1fNmZlYzJlOGMtMWI0OC00NmE5LWIzOTQtMzRkMzY0OGQ2ZmU4JyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZS5SRVNUUklDVF9HUk9VUFNfQU5EX1JPU1RFUlMsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnUmVzdHJpY3QgTWFuYWdlIEdyb3VwcyBBbmQgUm9zdGVycycsXHJcbiAgICAgIHBlcm1pc3Npb25JZDogJ1BFUk1fUkVTVFJJQ1RfTUFOQUdFX0dST1VQU19BTkRfUk9TVEVSUycsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBncm91cC13aXNlIHBlcm1pc3Npb24gbWFwcGluZ3MuXHJcbiAgICogQHJldHVybiB7R3JvdXBQZXJtaXNzaW9uW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3VwUGVybWlzc2lvbnNNYXBTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBQZXJtaXNzaW9ucygpOiBHcm91cFBlcm1pc3Npb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFBlcm1pc3Npb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGdsb2JhbCBwZXJtaXNzaW9ucyBtYXBwaW5nIGZvciBncm91cHMuXHJcbiAgICogR2xvYmFsIHBlcm1pc3Npb25zIGFyZSBtYWludGFpbmVkIHNlcGFyYXRlbHkgYXMgZ2xvYmFsIHBlcm1pc3Npb25zIGFsc28gaW5jbHVkZSByb2xlIGJhc2VkIGdyb3VwIHdpc2UgcGVybWlzc2lvbnMgaXJyZXNwZWN0aXZlIG9mIHRoZSBhdHRhY2hlZCBncm91cC5cclxuICAgKiBAcmV0dXJuIHtHcm91cFBlcm1pc3Npb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBQZXJtaXNzaW9uc01hcFNlcnZpY2VcclxuICAgKi9cclxuICBnZXRHbG9iYWxHcm91cFBlcm1pc3Npb25zKCk6IEdyb3VwUGVybWlzc2lvbltdIHtcclxuICAgIHJldHVybiB0aGlzLmdsb2JhbEdyb3VwUGVybWlzc2lvbnM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -411,6 +411,15 @@ export class GroupsService {
411
411
  isAdminUser() {
412
412
  return this.validateAccess(PermissionType.MANAGE_SYSTEM_USERS);
413
413
  }
414
+ /**
415
+ * Returns true when the user holds the negative permission that restricts all
416
+ * group and roster write actions, regardless of any other granted permission.
417
+ * @return {boolean}
418
+ * @memberof GroupsService
419
+ */
420
+ isGroupsAndRostersRestricted() {
421
+ return this.validateAccess(PermissionType.RESTRICT_GROUPS_AND_ROSTERS);
422
+ }
414
423
  /**
415
424
  * Concatenates the group users assigned roles name separated by comma as string and returns the group users in an array.
416
425
  * @param {GetGroupUsersResponse} response
@@ -913,4 +922,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
913
922
  providedIn: 'root',
914
923
  }]
915
924
  }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.UserPermissionsService }, { type: i3.GroupPermissionsMapService }, { type: i1.AlertsService }, { type: i1.StorageService }]; } });
916
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVdwRSxPQUFPLEVBQThCLFdBQVcsRUFBa0IsTUFBTSxxQkFBcUIsQ0FBQztBQUU5RixPQUFPLEtBQUssV0FBVyxNQUFNLDBCQUEwQixDQUFDO0FBa0J4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQW1CeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFDTCxVQUFVLEVBRVYsU0FBUyxHQUVWLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFNOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSWpFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFVckQ7Ozs7O0dBS0c7QUFDSCxNQUFNLG1DQUFtQyxHQUFHLHlCQUF5QixDQUFDO0FBRXRFOzs7R0FHRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBNkJ4Qiw2REFBNkQ7SUFDN0Q7SUFDRSwwQ0FBMEM7SUFDbEMsV0FBd0I7SUFDaEMsMENBQTBDO0lBQ2xDLHNCQUE4QztJQUN0RCwwQ0FBMEM7SUFDbEMsdUJBQW1EO0lBQzNELDBDQUEwQztJQUNuQyxZQUEyQjtJQUNsQywwQ0FBMEM7SUFDbEMsY0FBOEIsQ0FBQyw2Q0FBNkM7O1FBUjVFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRXhCLDJCQUFz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QyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7K0dBNWtDVSxhQUFhO21IQUFiLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwLCBjYXRjaEVycm9yLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBDcmVhdGVHcm91cFBheWxvYWQsXHJcbiAgQ3JlYXRlR3JvdXBSZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvY3JlYXRlLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBCdXNpbmVzc1J1bGUsXHJcbiAgR3JvdXBUeXBlQ29uZmlndXJhdGlvbixcclxuICBHcm91cFR5cGVDb25maWdWYWx1ZSxcclxuICBHcm91cFR5cGVSZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtdHlwZXMubW9kZWwnO1xyXG5pbXBvcnQgeyBBbGVydHNTZXJ2aWNlLCBIdHRwU2VydmljZSwgU3RvcmFnZUtleXMsIFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IEdldEdyb3VwUmVzcG9uc2UsIEdldEdyb3Vwc1BheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvdmlldy1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIHNjcmVlblRleHRzIGZyb20gJy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IERlbGV0ZUdyb3VwUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy9kZWxldGUtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cEluZm8gfSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgU2VhcmNoVXNlcnNQYXlsb2FkLFxyXG4gIEZpbHRlclVzZXJzUGF5bG9hZCxcclxuICBHZXRHcm91cFVzZXJzUmVzcG9uc2UsXHJcbiAgVXNlcixcclxuICBMb2dnZWRJblVzZXJJbmZvLFxyXG59IGZyb20gJy4uL21vZGVscy91c2VyLm1vZGVsJztcclxuaW1wb3J0IHsgUm9sZSB9IGZyb20gJy4uL21vZGVscy9yb2xlLm1vZGVsJztcclxuaW1wb3J0IHsgRWRpdEdyb3VwUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy9lZGl0LWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBBdmFpbGFibGVGb3JlaWduR3JvdXAsXHJcbiAgUmVjaXByb2NhbENyZWRpdENvbmZpZ1JvdyxcclxuICBSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2UsXHJcbiAgU2F2ZVJlY2lwcm9jYWxDcmVkaXRQYXlsb2FkLFxyXG59IGZyb20gJy4uL21vZGVscy9yZWNpcHJvY2FsLWNyZWRpdC5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwRnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2dyb3VwLWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBSb3N0ZXJGdW5jdGlvblR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcm9zdGVyLWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFVzZXJJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL2dyb3VwLXVzZXItaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQWRkT3JFZGl0VXNlclBheWxvYWQsXHJcbiAgQWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlLFxyXG4gIEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCxcclxuICBSZXByZXNlbnRpbmdPcmdhbml6YXRpb24sXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2FkZC1vci1lZGl0LXVzZXItZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBEZWxldGVVc2VyR3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL2RlbGV0ZS11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBHZXRVc2VyRGV0YWlsc1BheWxvYWQsXHJcbiAgU2VhcmNoVXNlckJ5RW1haWxSZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvYWRkLW5ldy11c2VyLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBPcmdhbml6YXRpb25SZXF1ZXN0UGF5bG9hZCxcclxuICBPcmdhbml6YXRpb25SZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvb3JnYW5pemF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQ2xhc3NpZmljYXRpb25SZXNwb25zZSB9IGZyb20gJy4uL21vZGVscy9jbGFzc2lmaWNhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwUm9zdGVyVHlwZSB9IGZyb20gJy4uL21vZGVscy9yb3N0ZXItdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybVN0YXR1cyxcclxuICBDaGVja2JveE9wdGlvbixcclxuICBBbGVydFR5cGUsXHJcbiAgU2VsZWN0T3B0aW9uLFxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL21vZGVscyc7XHJcbmltcG9ydCB7IENPVU5UUllfRElBTF9DT0RFUyB9IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sU3RhdHVzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIEdyb3VwUGVybWlzc2lvbixcclxuICBVc2VyUGVybWlzc2lvbixcclxufSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtcGVybWlzc2lvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBVc2VyUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLXBlcm1pc3Npb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcm91cFBlcm1pc3Npb25zTWFwU2VydmljZSB9IGZyb20gJy4vZ3JvdXAtcGVybWlzc2lvbnMtbWFwLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYXJlbnRHcm91cHNJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL3BhcmVudC1ncm91cHMtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IFJvbGVUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JvbGUtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IENhY2hlZFJlcXVpcmVkUHJvZmlsZUZpZWxkcyB9IGZyb20gJy4uL21vZGVscy9yZXF1aXJlZC1wcm9maWxlLWZpZWxkcy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgR3JvdXBJbnRlcmVzdFJlc3BvbnNlVmlldyxcclxuICBJbnRlcmVzdGVkUm9zdGVyc1JlcXVlc3RQYXlsb2FkLFxyXG4gIEludGVyZXN0ZWRSb3N0ZXJzUmVzcG9uc2UsXHJcbiAgSW50ZXJlc3RGb3JtUmVzcG9uc2UsXHJcbiAgVXBkYXRlTWVtYmVyTGV2ZWxQYXlsb2FkLFxyXG59IGZyb20gJy4uL21vZGVscy9pbnRlcmVzdC1yZXNwb25zZS5tb2RlbCc7XHJcblxyXG4vKipcclxuICogTG9jYWwgc3RvcmFnZSBrZXkgdW5kZXIgd2hpY2ggdGhlIGhvc3RpbmcgYXBwbGljYXRpb24gY2FjaGVzIHRoZSB0ZW5hbnQnc1xyXG4gKiByZXF1aXJlZCBwcm9maWxlIGZpZWxkcyBhdCBsb2dpbiAoc2hhcGU6IGB7IGFwcElkLCByZXF1aXJlZEZpZWxkcyB9YCkuIFRoZVxyXG4gKiBhZGQtdXNlciAvIGVkaXQtdXNlciBmb3JtcyByZWFkIHRoaXMgY2FjaGUgYXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBzbyB0aGV5XHJcbiAqIGFsd2F5cyByZWZsZWN0IHRoZSB0ZW5hbnQgY29uZmlndXJhdGlvbiByZWdhcmRsZXNzIG9mIEBJbnB1dC9yZXNvbHZlciB0aW1pbmcuXHJcbiAqL1xyXG5jb25zdCBSRVFVSVJFRF9QUk9GSUxFX0ZJRUxEU19TVE9SQUdFX0tFWSA9ICdSRVFVSVJFRF9QUk9GSUxFX0ZJRUxEUyc7XHJcblxyXG4vKipcclxuICogR3JvdXBzIHNlcnZpY2UgaXMgYW4gYWJzdHJhY3QgbGF5ZXIgYW5kIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBncm91cHMgUkVTVCBBUEkgY2FsbHMuXHJcbiAqIEBjbGFzcyBHcm91cHNTZXJ2aWNlXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBzU2VydmljZSB7XHJcbiAgZ3JvdXBzVGV4dCA9IHNjcmVlblRleHRzPy5lcnJvcnM7XHJcbiAgYXBpQmFzZVVybCE6IHN0cmluZztcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHVzZXJQZXJtaXNzaW9uOiBhbnk7XHJcbiAgLyoqXHJcbiAgICogVGVuYW50LWxldmVsIHJlcXVpcmVkIHByb2ZpbGUgZmllbGRzIChlLmcuIFsncGhvbmUnLCdhZGRyZXNzJywnZW1wbG95ZXInXSlcclxuICAgKiBzdXBwbGllZCBieSB0aGUgaG9zdCBhcHAgZnJvbSBpdHMgY2FjaGVkIHRlbmFudCBjb25maWd1cmF0aW9uLiBDb25zdW1lZCBieVxyXG4gICAqIHRoZSByb3N0ZXIgaW1wb3J0IHRvIGFwcGVuZCB0ZW5hbnQtbWFuZGF0ZWQgY29sdW1ucyB0byB0aGUgcmVxdWlyZWQtY29sdW1uXHJcbiAgICogbGlzdCBhbmQgdGhlIHNhbXBsZSBmaWxlLiBFbXB0eSB3aGVuIHRoZSB0ZW5hbnQgaGFzIG5vbmUgY29uZmlndXJlZC5cclxuICAgKi9cclxuICByZXF1aXJlZFByb2ZpbGVGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VsZWN0ZWRHcm91cEluZm8hOiBHcm91cEluZm8gfCB1bmRlZmluZWQ7XHJcbiAgZ3JvdXBGdW5jdGlvblR5cGUhOiBHcm91cEZ1bmN0aW9uVHlwZTtcclxuICBzZWxlY3RlZEdyb3VwUGFyZW50SW5mbyE6IEdyb3VwSW5mbyB8IHVuZGVmaW5lZDtcclxuICBvcGVuTW9kYWxOb3RpZmllciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3JvdXBGdW5jdGlvblR5cGU+KFxyXG4gICAgR3JvdXBGdW5jdGlvblR5cGUuVklFV19ST1NURVJcclxuICApO1xyXG4gIGdyb3VwVHlwZVJvbGVzITogQ2hlY2tib3hPcHRpb25bXTtcclxuICBzZWxlY3RlZFVzZXJJbmZvITogR3JvdXBVc2VySW5mbztcclxuICBjYW5TaG93TWVzc2FnZSA9IGZhbHNlO1xyXG4gIHJvc3RlckZ1bmN0aW9uVHlwZSE6IFJvc3RlckZ1bmN0aW9uVHlwZTtcclxuICB1c2VyR3JvdXBQZXJtaXNzaW9ucyE6IEdyb3VwUGVybWlzc2lvbltdO1xyXG4gIGdyb3VwVHlwZXMhOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW107XHJcbiAgaXNQYXJlbnRHcm91cENoYW5nZWQgPSBmYWxzZTtcclxuICB1c2VySW5mbyE6IExvZ2dlZEluVXNlckluZm87XHJcbiAgbWVtYmVyVHlwZXMhOiBSb2xlW107XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICByZXByZXNlbnRpbmdPcmdhbml6YXRpb25zOiBSZXByZXNlbnRpbmdPcmdhbml6YXRpb25bXSA9IFtdO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnNcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdXNlclBlcm1pc3Npb25zU2VydmljZTogVXNlclBlcm1pc3Npb25zU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cFBlcm1pc3Npb25zU2VydmljZTogR3JvdXBQZXJtaXNzaW9uc01hcFNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBhbGVydFNlcnZpY2U6IEFsZXJ0c1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHNldEFwcENvbmZpZyhhcGlCYXNlVXJsOiBzdHJpbmcsIHVzZXJQZXJtaXNzaW9uOiBhbnkpIHtcclxuICAgIHRoaXMuYXBpQmFzZVVybCA9IGFwaUJhc2VVcmw7XHJcbiAgICB0aGlzLnVzZXJQZXJtaXNzaW9uID0gdXNlclBlcm1pc3Npb247XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFN0b3JlcyB0aGUgdGVuYW50LWxldmVsIHJlcXVpcmVkIHByb2ZpbGUgZmllbGRzIHByb3ZpZGVkIGJ5IHRoZSBob3N0IGFwcC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSByZXF1aXJlZFByb2ZpbGVGaWVsZHMgLSBGaWVsZCBrZXlzIChlLmcuICdwaG9uZScpLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0UmVxdWlyZWRQcm9maWxlRmllbGRzKHJlcXVpcmVkUHJvZmlsZUZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWlyZWRQcm9maWxlRmllbGRzID0gcmVxdWlyZWRQcm9maWxlRmllbGRzID8/IFtdO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0ZW5hbnQtbGV2ZWwgcmVxdWlyZWQgcHJvZmlsZSBmaWVsZHMgKG5ldmVyIG51bGwpLlxyXG4gICAqXHJcbiAgICogUmVhZHMgdGhlIGxvY2FsIHN0b3JhZ2UgY2FjaGUgdGhlIGhvc3RpbmcgYXBwbGljYXRpb24gd3JpdGVzIGF0IGxvZ2luIChrZXlcclxuICAgKiBgUkVRVUlSRURfUFJPRklMRV9GSUVMRFNgKSBhcyB0aGUgc291cmNlIG9mIHRydXRoLCBzbyB0aGUgYWRkLXVzZXIgL1xyXG4gICAqIGVkaXQtdXNlciBmb3JtcyBhbHdheXMgcmVmbGVjdCB0aGUgdGVuYW50IGNvbmZpZ3VyYXRpb24gcmVnYXJkbGVzcyBvZiB0aGVcclxuICAgKiBASW5wdXQvcmVzb2x2ZXIgdGltaW5nLlxyXG4gICAqXHJcbiAgICogVGhlIGNhY2hlIGlzIG9ubHkgdHJ1c3RlZCB3aGVuIGl0IGlzIHdlbGwtZm9ybWVkIGZvciB0aGUgYWN0aXZlXHJcbiAgICogYXBwbGljYXRpb246IGl0cyBgYXBwSWRgIG11c3QgbWF0Y2ggdGhlIGN1cnJlbnQgdXNlcidzIGBhcHBJZGAgYW5kIGl0c1xyXG4gICAqIGByZXF1aXJlZEZpZWxkc2AgbXVzdCBiZSBhbiBhcnJheS4gVGhpcyBndWFyZHMgYWdhaW5zdCAoYSkgYSBzdGFsZSBjYWNoZVxyXG4gICAqIGZyb20gYSBwcmV2aW91c2x5IG9wZW5lZCBhcHBsaWNhdGlvbiBhcHBseWluZyBhbm90aGVyIHRlbmFudCdzIGZpZWxkcywgYW5kXHJcbiAgICogKGIpIGEgbWFsZm9ybWVkIGNhY2hlIGNyYXNoaW5nIHRoZSBmb3JtcyB3aGVuIGNhbGxlcnMgcnVuXHJcbiAgICogYHJlcXVpcmVkRmllbGRzLmluY2x1ZGVzKC4uLilgIG9uIGEgbm9uLWFycmF5IHZhbHVlLiBXaGVuIHRoZSBjYWNoZSBpc1xyXG4gICAqIG1pc3NpbmcsIGZvciBhbm90aGVyIGFwcCwgb3IgbWFsZm9ybWVkLCBpdCBmYWxscyBiYWNrIHRvIHRoZSBpbi1tZW1vcnlcclxuICAgKiB2YWx1ZSBzZXQgdmlhIHtAbGluayBzZXRSZXF1aXJlZFByb2ZpbGVGaWVsZHN9ICh0aGUgaG9zdCBASW5wdXQpLCB0aGVuIHRvXHJcbiAgICogYW4gZW1wdHkgbGlzdC5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJlcXVpcmVkUHJvZmlsZUZpZWxkcygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlPy5nZXRWYWx1ZShcclxuICAgICAgUkVRVUlSRURfUFJPRklMRV9GSUVMRFNfU1RPUkFHRV9LRVlcclxuICAgICkgYXMgQ2FjaGVkUmVxdWlyZWRQcm9maWxlRmllbGRzIHwgbnVsbDtcclxuICAgIGNvbnN0IGFjdGl2ZUFwcElkID0gdGhpcy5nZXRVc2VySW5mbygpPy5hcHBJZDtcclxuICAgIGNvbnN0IGlzQ2FjaGVVc2FibGUgPVxyXG4gICAgICAhIWNhY2hlZCAmJlxyXG4gICAgICBBcnJheS5pc0FycmF5KGNhY2hlZC5yZXF1aXJlZEZpZWxkcykgJiZcclxuICAgICAgKCFhY3RpdmVBcHBJZCB8fCBjYWNoZWQuYXBwSWQgPT09IGFjdGl2ZUFwcElkKTtcclxuICAgIGlmIChpc0NhY2hlVXNhYmxlKSByZXR1cm4gY2FjaGVkLnJlcXVpcmVkRmllbGRzO1xyXG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZWRQcm9maWxlRmllbGRzID8/IFtdO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGFwcGxpY2F0aW9uIGdyb3VwIHR5cGVzIGZyb20gQVBJIGFuZCByZXR1cm5zIGl0IGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHcm91cFR5cGVSZXNwb25zZT59IC1JdCByZXR1cm5zIGdyb3VwIHR5cGVzIGlmIHN1Y2Nlc3MgZWxzZSBlcnJvci5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZ2V0R3JvdXBUeXBlcygpOiBPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9jb25maWcvZ3JvdXBUeXBlQ29uZmlnSW5mb2ApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0TG9hZGVkR3JvdXBUeXBlcyhyZXNwb25zZT8uYm9keSk7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWxsb3dlZCBwYXJlbnQgZ3JvdXBzIGZyb20gQVBJIGFuZCByZXR1cm5zIGl0IGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEFsbG93ZWRQYXJlbnRHcm91cHMoZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQYXJlbnRHcm91cHNJbmZvW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2FsbG93ZWRQYXJlbnRHcm91cHMvJHtncm91cElkfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZT8uYm9keTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYWxsIHRoZSBncm91cHMgYmFzZWQgb24gcGFzc2VkIGdyb3VwIElkIGFuZCBncm91cCB0eXBlLlxyXG4gICAqIEBwYXJhbSB7R2V0R3JvdXBzUGF5bG9hZH0gZ2V0R3JvdXBzUGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cHMoZ2V0R3JvdXBzUGF5bG9hZDogR2V0R3JvdXBzUGF5bG9hZCk6IE9ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT4ge1xyXG4gICAgbGV0IHVybCA9ICdyb290R3JvdXBzJztcclxuICAgIGlmIChnZXRHcm91cHNQYXlsb2FkLmdyb3VwSWQpXHJcbiAgICAgIHVybCA9ICdpbW1DaGlsZEdyb3Vwc0J5R3JvdXBJZC8nICsgZ2V0R3JvdXBzUGF5bG9hZC5ncm91cElkO1xyXG4gICAgZWxzZSBpZiAoZ2V0R3JvdXBzUGF5bG9hZC5ncm91cFR5cGVJZClcclxuICAgICAgdXJsID0gJ2dyb3Vwc0J5R3JvdXBUeXBlLycgKyBnZXRHcm91cHNQYXlsb2FkLmdyb3VwVHlwZUlkO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvJHt1cmx9YCkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgZ3JvdXAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uXHJcbiAgICogQHBhcmFtIHtncm91cElkfSBzdHJpbmcgLWdyb3VwSWQgb2YgdGhlIGdyb3VwIHdoaWNoIGlzIHRvIGJlIGRlbGV0ZWRcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn0gLU9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSBncm91cCBkZWxldGlvbiByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkZWxldGVHcm91cChkZWxldGVHcm91cFBheWxvYWQ6IERlbGV0ZUdyb3VwUGF5bG9hZCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9kZWxldGVgLCBkZWxldGVHcm91cFBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBhIHVzZXIgZnJvbSBncm91cCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge2dyb3VwSWR9IHN0cmluZyAtZ3JvdXBJZCBvZiB0aGUgc2VsZWN0ZWQgZ3JvdXAgZnJvbSB3aGVyZSBzZWxlY3RlZCB1c2VyIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICogQHBhcmFtIHt1c2VySWR9IEFycmF5IC11c2VyIGlkcyBvZiBzZWxlY3RlZCB1c2VycyB3aG8gYXJlIGRlbGV0ZWQgZnJvbSB0aGUgc2VsZWN0ZWQgZ3JvdXBcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn0gLU9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSBncm91cCBkZWxldGlvbiByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkZWxldGVVc2Vyc0dyb3VwKFxyXG4gICAgZGVsZXRlVXNlckdyb3VwUGF5bG9hZDogRGVsZXRlVXNlckdyb3VwUGF5bG9hZFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2RlbGV0ZUdyb3VwVXNlcnNgLFxyXG4gICAgICAgIGRlbGV0ZVVzZXJHcm91cFBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3N0cyBjcmVhdGUgZ3JvdXAgZm9ybSBkYXRhIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSBmb3IgY3JlYXRpbmcgbmV3IGdyb3VwLlxyXG4gICAqIEBwYXJhbSB7Q3JlYXRlR3JvdXBQYXlsb2FkfSBjcmVhdGVHcm91cFBheWxvYWQgLWNyZWF0ZSBncm91cCBmb3JtIGRhdGEgd2hpY2ggaW5jbHVkZXMgZ3JvdXAgbmFtZSwgdHlwZSwgc2hvcnQgbmFtZSwgc2NvcGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPn0gLXJldHVybnMgY3JlYXRlIGdyb3VwIEFQSSByZXNwb25zZSAoc3VjY2VzcyBvciBlcnJvcikgYXMgYW4gb2JzZXJ2YWJsZS5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY3JlYXRlR3JvdXAoXHJcbiAgICBjcmVhdGVHcm91cFBheWxvYWQ6IENyZWF0ZUdyb3VwUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Q3JlYXRlR3JvdXBSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2NyZWF0ZWAsIGNyZWF0ZUdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBncm91cCBmb3JtIGRhdGEgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7RWRpdEdyb3VwUGF5bG9hZH0gZWRpdEdyb3VwUGF5bG9hZCAtZWRpdCBncm91cCBmb3JtIGRhdGEgd2hpY2ggaW5jbHVkZXMgZ3JvdXAgbmFtZSwgc2hvcnQgbmFtZSwgc2NvcGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFZGl0R3JvdXBQYXlsb2FkPn0gLXJldHVybnMgZWRpdCBncm91cCBBUEkgcmVzcG9uc2UgKHN1Y2Nlc3Mgb3IgZXJyb3IpIGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBlZGl0R3JvdXAoXHJcbiAgICBlZGl0R3JvdXBQYXlsb2FkOiBFZGl0R3JvdXBQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9lZGl0YCwgZWRpdEdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBwYXJzZSB0aGUgZXJyb3IgY29kZXMgYW5kIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBlcnJvciBtZXNzYWdlIGZvciBlYWNoIGNvZGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gZXJyb3JDb2Rlc1xyXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBlcnJvck1lc3NhZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHBhcnNlRXJyb3JNZXNzYWdlKGVycm9yQ29kZXM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2U6IHN0cmluZ1tdID0gW107XHJcbiAgICBlcnJvckNvZGVzPy5mb3JFYWNoKChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlS2V5ID0gZXJyb3JDb2Rlc1tpbmRleF0gYXMga2V5b2YgdHlwZW9mIHRoaXMuZ3JvdXBzVGV4dDtcclxuICAgICAgZXJyb3JNZXNzYWdlLnB1c2goXHJcbiAgICAgICAgdGhpcy5ncm91cHNUZXh0W2Vycm9yTWVzc2FnZUtleV0gPz8gdGhpcy5ncm91cHNUZXh0Py5kZWZhdWx0XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGN1c3RvbSBBUEkgZXJyb3JzOiBtYXBzIEJFIGVycm9yIGNvZGVzIHRvIG1lc3NhZ2VzIGFuZCBzaG93cyBhblxyXG4gICAqIGFsZXJ0LiBNaXJyb3JzIHRoZSBldmVudHMtYW5kLW1lZXRpbmdzIGVycm9yIGhhbmRsaW5nIHNvIHJlY2lwcm9jYWwtY3JlZGl0XHJcbiAgICogZmFpbHVyZXMgKGUuZy4gTVRHLTAxMSBkdXBsaWNhdGUsIE1URy0wMTIgcGVybWlzc2lvbikgc3VyZmFjZSBjb25zaXN0ZW50bHkuXHJcbiAgICogQHBhcmFtIHsqfSBlcnJvciB0aGUgSHR0cEVycm9yUmVzcG9uc2UgZnJvbSBhIGZhaWxlZCBjYWxsXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2hvd0FsZXJ0PXRydWVdIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgYWxlcnRcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgaGFuZGxlRXJyb3JzKGVycm9yOiBhbnksIHNob3dBbGVydCA9IHRydWUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvckNvZGVzKSAmJiAhZXJyb3I/LmVycm9yPy5zdGF0dXMpIHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5wYXJzZUVycm9yTWVzc2FnZShlcnJvckNvZGVzKTtcclxuICAgICAgaWYgKHNob3dBbGVydCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlPy5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgYWxlcnRUeXBlOiBBbGVydFR5cGUuRVJST1IsXHJcbiAgICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHNlbGVjdGVkIGdyb3VwIGluZm8uXHJcbiAgICogQHBhcmFtIHsoR3JvdXBJbmZvIHwgdW5kZWZpbmVkKX0gc2VsZWN0ZWRHcm91cEluZm8gLXNlbGVjdGVkIGdyb3VwIGluZm8uXHJcbiAgICogQHBhcmFtIHsoR3JvdXBJbmZvIHwgdW5kZWZpbmVkKX0gW3NlbGVjdGVkR3JvdXBQYXJlbnRJbmZvXSAtc2VsZWN0ZWQgcGFyZW50IGdyb3VwIGluZm8uXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRTZWxlY3RlZEdyb3VwSW5mbyhcclxuICAgIHNlbGVjdGVkR3JvdXBJbmZvOiBHcm91cEluZm8gfCB1bmRlZmluZWQsXHJcbiAgICBzZWxlY3RlZEdyb3VwUGFyZW50SW5mbz86IEdyb3VwSW5mbyB8IHVuZGVmaW5lZFxyXG4gICkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwSW5mbyA9IHNlbGVjdGVkR3JvdXBJbmZvO1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGFyZW50SW5mbyA9IHNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgZ3JvdXAgaW5mby5cclxuICAgKiBAcmV0dXJuIHsoR3JvdXBJbmZvIHwgdW5kZWZpbmVkKX0gLWdyb3VwIGluZm8uXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZEdyb3VwSW5mbygpOiBHcm91cEluZm8gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRHcm91cEluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBncm91cCBwYXJlbnQgZ3JvdXAgaW5mby5cclxuICAgKiBAcmV0dXJuIHsoR3JvdXBJbmZvIHwgdW5kZWZpbmVkKX0gLWdyb3VwIGluZm8uXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZEdyb3VwUGFyZW50SW5mbygpOiBHcm91cEluZm8gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRHcm91cFBhcmVudEluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGdyb3VwIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQHBhcmFtIHtHcm91cEZ1bmN0aW9uVHlwZX0gZ3JvdXBGdW5jdGlvblR5cGUgLWdyb3VwIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRHcm91cEZ1bmN0aW9uVHlwZShncm91cEZ1bmN0aW9uVHlwZTogR3JvdXBGdW5jdGlvblR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBGdW5jdGlvblR5cGUgPSBncm91cEZ1bmN0aW9uVHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgZ3JvdXAgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcmV0dXJuIHtHcm91cEZ1bmN0aW9uVHlwZX0gLWdyb3VwIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cEZ1bmN0aW9uVHlwZSgpOiBHcm91cEZ1bmN0aW9uVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5ncm91cEZ1bmN0aW9uVHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGZvciB0aGUgZ2l2ZW4gZ3JvdXAgaWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICBnZXRHcm91cFVzZXJzKFxyXG4gICAgZ3JvdXBJZDogc3RyaW5nLFxyXG4gICAgc29ydENvbHVtbjogc3RyaW5nLFxyXG4gICAgc29ydERpcmVjdGlvbjogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvJHtncm91cElkfT9zb3J0Q29sdW1uPSR7c29ydENvbHVtbn0mYXNjZW5kaW5nT3JkZXI9JHtzb3J0RGlyZWN0aW9ufWBcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBiYXNlZCBvbiB0aGUgZmlsdGVyZWQgcm9sZXMuXHJcbiAgICogQHBhcmFtIHtGaWx0ZXJVc2Vyc1BheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cFVzZXJzQnlSb2xlcyhcclxuICAgIHBheWxvYWQ6IEZpbHRlclVzZXJzUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2dyb3VwVXNlcnNGaWx0ZXJgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBiYXNlZCBvbiBzZWFyY2hlZCBuYW1lIG9yIGVtYWlsXHJcbiAgICogQHBhcmFtIHtTZWFyY2hVc2Vyc1BheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZWFyY2hHcm91cFVzZXJzKFxyXG4gICAgcGF5bG9hZDogU2VhcmNoVXNlcnNQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvZ3JvdXBVc2Vyc1NlYXJjaGAsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHJvbGVzIGJhc2VkIG9uIHRoZSBncm91cCB0eXBlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBncm91cFR5cGVJZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q2hlY2tib3hPcHRpb25bXT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGdldEdyb3VwVHlwZVJvbGVzKGdyb3VwVHlwZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoZWNrYm94T3B0aW9uW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2NvbmZpZy9yb2xlc0J5R3JvdXBUeXBlLyR7Z3JvdXBUeXBlSWR9YFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJvbGVzT3B0aW9uOiBDaGVja2JveE9wdGlvbltdID0gW107XHJcbiAgICAgICAgICBjb25zdCBtZW1iZXJUeXBlczogUm9sZVtdID0gW107XHJcbiAgICAgICAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgocm9sZTogUm9sZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocm9sZT8ucm9sZVR5cGVOYW1lID09PSBSb2xlVHlwZS5NRU1CRVJfTEVWRUwpIHtcclxuICAgICAgICAgICAgICBtZW1iZXJUeXBlcy5wdXNoKHJvbGUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJvbGVzT3B0aW9uLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHJvbGUucm9sZUlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogcm9sZS5yb2xlTmFtZSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuc2V0R3JvdXBUeXBlVXNlclJvbGVzKHJvbGVzT3B0aW9uKTtcclxuICAgICAgICAgIHRoaXMuc2V0TWVtYmVyVHlwZXMobWVtYmVyVHlwZXMpO1xyXG4gICAgICAgICAgcmV0dXJuIHJvbGVzT3B0aW9uO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSBjbGFzc2lmaWNhdGlvbnMgbWFzdGVyIGRhdGEgZnJvbSBjb25maWd1cmF0aW9uIGFuZCByZXR1cm5zLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q2xhc3NpZmljYXRpb25SZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRDbGFzc2lmaWNhdGlvbnMoKTogT2JzZXJ2YWJsZTxDbGFzc2lmaWNhdGlvblJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvY2xhc3NpZmljYXRpb25gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRydWUgaWYgbG9nZ2VkIGluIHVzZXIgaXMgYWRtaW4uXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGlzQWRtaW5Vc2VyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX1NZU1RFTV9VU0VSUyk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENvbmNhdGVuYXRlcyB0aGUgZ3JvdXAgdXNlcnMgYXNzaWduZWQgcm9sZXMgbmFtZSBzZXBhcmF0ZWQgYnkgY29tbWEgYXMgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBncm91cCB1c2VycyBpbiBhbiBhcnJheS5cclxuICAgKiBAcGFyYW0ge0dldEdyb3VwVXNlcnNSZXNwb25zZX0gcmVzcG9uc2VcclxuICAgKiBAcmV0dXJuIHtVc2VyW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICB0cmFuc2Zvcm1Vc2VyUm9sZXNOYW1lQXNTdHJpbmcocmVzcG9uc2U6IEdldEdyb3VwVXNlcnNSZXNwb25zZSk6IFVzZXJbXSB7XHJcbiAgICBjb25zdCB1c2VyczogVXNlcltdID0gW107XHJcbiAgICB0aGlzLnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnMgPSBbXTtcclxuICAgIHJlc3BvbnNlPy5ib2R5Py5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uRGVzYyA9XHJcbiAgICAgICAgaXRlbS5jbGFzc2lmaWNhdGlvbj8uY2xhc3NpZmljYXRpb25OYW1lICtcclxuICAgICAgICAnICgnICtcclxuICAgICAgICBpdGVtLmNsYXNzaWZpY2F0aW9uPy5jbGFzc2lmaWNhdGlvbkRlc2MgK1xyXG4gICAgICAgICcpJztcclxuICAgICAgY29uc3Qgcm9sZXNMaXN0ID0gaXRlbT8ucm9sZXNMaXN0Py5yZWR1Y2UoXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAocm9sZUxpc3Q6IGFueSwgcm9sZTogUm9sZSkgPT4ge1xyXG4gICAgICAgICAgcm9sZUxpc3RbXHJcbiAgICAgICAgICAgIHJvbGUucm9sZVR5cGVOYW1lID09PSBSb2xlVHlwZS5NRU1CRVJfTEVWRUwgPyAnbWVtYmVyVHlwZScgOiAncm9sZXMnXHJcbiAgICAgICAgICBdLnB1c2gocm9sZT8ucm9sZU5hbWUpO1xyXG4gICAgICAgICAgcmV0dXJuIHJvbGVMaXN0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBtZW1iZXJUeXBlOiBbXSwgcm9sZXM6IFtdIH1cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zPy5wdXNoKHtcclxuICAgICAgICB1c2VySWQ6IGl0ZW0/LnVzZXJJZCxcclxuICAgICAgICBvcmdhbml6YXRpb25zOiBpdGVtPy5vcmdhbml6YXRpb25zLFxyXG4gICAgICB9KTtcclxuICAgICAgY29uc3Qgb3JnYW5pemF0aW9ucyA9IGl0ZW0/Lm9yZ2FuaXphdGlvbnNcclxuICAgICAgICA/IGl0ZW0/Lm9yZ2FuaXphdGlvbnM/Lm1hcCgob3JnKSA9PiBvcmc/Lm9yZ05hbWUpLmpvaW4oJzsgJylcclxuICAgICAgICA6IG51bGw7XHJcbiAgICAgIHVzZXJzLnB1c2goe1xyXG4gICAgICAgIHVzZXJJZDogaXRlbS51c2VySWQsXHJcbiAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgIGVtYWlsOiBpdGVtLmVtYWlsLFxyXG4gICAgICAgIHJvbGU6IHJvbGVzTGlzdD8ucm9sZXM/Lmxlbmd0aCA/IHJvbGVzTGlzdD8ucm9sZXM/LmpvaW4oJywgJykgOiBudWxsLFxyXG4gICAgICAgIGNsYXNzaWZpY2F0aW9uOiBpdGVtLmNsYXNzaWZpY2F0aW9uPy5jbGFzc2lmaWNhdGlvbklkXHJcbiAgICAgICAgICA/IGNsYXNzaWZpY2F0aW9uRGVzY1xyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIG1lbWJlclN0YXR1czogcm9sZXNMaXN0Py5tZW1iZXJUeXBlPy5sZW5ndGhcclxuICAgICAgICAgID8gcm9sZXNMaXN0Py5tZW1iZXJUeXBlWzBdXHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgb3JnYW5pemF0aW9uOiBvcmdhbml6YXRpb25zLFxyXG4gICAgICAgIGVtcGxveWVyOiBpdGVtLmVtcGxveWVyPy5vcmdOYW1lID8/IG51bGwsXHJcbiAgICAgICAgcGhvbmVDb3VudHJ5Q29kZTogaXRlbS5waG9uZUNvdW50cnlDb2RlID8/IG51bGwsXHJcbiAgICAgICAgcGhvbmVOdW1iZXI6IGl0ZW0ucGhvbmVOdW1iZXIgPz8gbnVsbCxcclxuICAgICAgICBhZGRyZXNzOiBpdGVtLmFkZHJlc3MgPz8gbnVsbCxcclxuICAgICAgICBjYW5EZWxldGU6ICEoXHJcbiAgICAgICAgICBpdGVtPy51c2VySWQgPT09IHRoaXMudXNlckluZm8/LnVzZXJJZCAmJlxyXG4gICAgICAgICAgdGhpcy5pc0FkbWluVXNlcigpICYmXHJcbiAgICAgICAgICB0aGlzLmdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpPy5pc0FkbWluXHJcbiAgICAgICAgKSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB1c2VycztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBmb3JtYXR0ZWQgZ3JvdXAgdHlwZXMuXHJcbiAgICogQHBhcmFtIHtHcm91cFR5cGVDb25maWd1cmF0aW9uW119IGdyb3VwVHlwZVJlc3BvbnNlXHJcbiAgICogQHJldHVybiB7R3JvdXBUeXBlQ29uZmlnVmFsdWV9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRGb3JtYXR0ZWRHcm91cFR5cGVzKFxyXG4gICAgZ3JvdXBUeXBlUmVzcG9uc2U6IEdyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXVxyXG4gICk6IEdyb3VwVHlwZUNvbmZpZ1ZhbHVlIHtcclxuICAgIGNvbnN0IGdyb3VwVHlwZXM6IEdyb3VwVHlwZUNvbmZpZ1ZhbHVlID0ge307XHJcbiAgICBncm91cFR5cGVSZXNwb25zZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGdyb3VwVHlwZXNbaXRlbS5jb25maWdGaWVsZElkXSA9IGl0ZW0uY29uZmlnRmllbGRWYWx1ZTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGdyb3VwVHlwZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGdyb3VwIHVzZXIgZGV0YWlscyBpZiBlbWFpbCBpcyBmb3VuZCwgZWxzZSB0aHJvd3MgZXJyb3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTZWFyY2hVc2VyQnlFbWFpbFJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFVzZXJCeUVtYWlsKGVtYWlsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlYXJjaFVzZXJCeUVtYWlsUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3VzZXJzL3VzZXJCeUVtYWlsLyR7ZW1haWx9YClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdXNlciBkZXRhaWxzIGZvciB0aGUgc2VsZWN0ZWQgZ3JvdXBcclxuICAgKiBAcGFyYW0ge0dldFVzZXJEZXRhaWxzUGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwVXNlckRldGFpbHMoXHJcbiAgICBwYXlsb2FkOiBHZXRVc2VyRGV0YWlsc1BheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci91c2VyRGV0YWlsc2AsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUG9zdHMgYWRkIG5ldyB1c2VyIGZvcm0gZGF0YSB0byB0aGUgQVBJIGZvciB0aGUgc2VsZWN0ZWQgZ3JvdXAgYW5kIHJldHVybnMgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSByZXNwb25zZS5cclxuICAgKiBAcGFyYW0geyhBZGRPckVkaXRVc2VyUGF5bG9hZFxyXG4gICAqICAgICAgIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkKX0gQWRkT3JFZGl0VXNlclBheWxvYWRcclxuICAgKiBAcGFyYW0ge0dyb3VwUm9zdGVyVHlwZX0gZ3JvdXBSb3N0ZXJUeXBlXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgYWRkTmV3R3JvdXBVc2VyKFxyXG4gICAgQWRkT3JFZGl0VXNlclBheWxvYWQ6XHJcbiAgICAgIHwgQWRkT3JFZGl0VXNlclBheWxvYWRcclxuICAgICAgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9jcmVhdGVHcm91cFVzZXJSb2xlYCxcclxuICAgICAgICBBZGRPckVkaXRVc2VyUGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGxvYWRlZCBncm91cCB0eXBlIHVzZXIgcm9sZXNcclxuICAgKiBAcGFyYW0ge0NoZWNrYm94T3B0aW9uW119IHVzZXJSb2xlc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0R3JvdXBUeXBlVXNlclJvbGVzKHVzZXJSb2xlczogQ2hlY2tib3hPcHRpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFR5cGVSb2xlcyA9IHVzZXJSb2xlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGdyb3VwIHR5cGUgdXNlciByb2xlcy5cclxuICAgKiBAcmV0dXJuIHtDaGVja2JveE9wdGlvbltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBUeXBlVXNlclJvbGVzKCk6IENoZWNrYm94T3B0aW9uW10ge1xyXG4gICAgdGhpcy5ncm91cFR5cGVSb2xlcz8ubWFwKChvcHRpb24pID0+IChvcHRpb24uY2hlY2tlZCA9IGZhbHNlKSk7XHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFR5cGVSb2xlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIHVzZXIgaW5mby5cclxuICAgKiBAcGFyYW0ge0dyb3VwVXNlckluZm99IHVzZXJJbmZvXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRTZWxlY3RlZFVzZXJJbmZvKHVzZXJJbmZvOiBHcm91cFVzZXJJbmZvKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB1c2VySW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgc2VsZWN0ZWQgdXNlciBpbmZvLlxyXG4gICAqIEByZXR1cm4ge0dyb3VwVXNlckluZm99XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZFVzZXJJbmZvKCk6IEdyb3VwVXNlckluZm8ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRVc2VySW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgZ3JvdXAgdXNlciByb2xlcyBhbmQgb3RoZXIgZGV0YWlscyB0byBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHBhcmFtIHsoQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQpfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZWRpdEdyb3Vwc1VzZXJSb2xlKFxyXG4gICAgcGF5bG9hZDogQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2VkaXRHcm91cFVzZXJSb2xlYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyByb3N0ZXIgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcGFyYW0ge1Jvc3RlckZ1bmN0aW9uVHlwZX0gcm9zdGVyRnVuY3Rpb25UeXBlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRSb3N0ZXJGdW5jdGlvblR5cGUocm9zdGVyRnVuY3Rpb25UeXBlOiBSb3N0ZXJGdW5jdGlvblR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMucm9zdGVyRnVuY3Rpb25UeXBlID0gcm9zdGVyRnVuY3Rpb25UeXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyByb3N0ZXIgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcmV0dXJuIHtSb3N0ZXJGdW5jdGlvblR5cGV9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRSb3N0ZXJGdW5jdGlvblR5cGUoKTogUm9zdGVyRnVuY3Rpb25UeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnJvc3RlckZ1bmN0aW9uVHlwZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXBzIGJhc2VkIG9uIHRoZSBzZWFyY2ggYnkgZ3JvdXAgbmFtZSBvciBhY3JvbnltLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ3JvdXBzQnlOYW1lQWNyb255bShcclxuICAgIHNlYXJjaFRlcm06IHN0cmluZyxcclxuICAgIGZpbHRlcmVkR3JvdXBUeXBlPzogbnVtYmVyXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRHcm91cFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBzZWFyY2hHcm91cHNVcmwgPSBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9ncm91cHNCeU5hbWVBY3JvbnltP25hbWU9JHtzZWFyY2hUZXJtfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBmaWx0ZXJlZEdyb3VwVHlwZVxyXG4gICAgICAgICAgPyBzZWFyY2hHcm91cHNVcmwgKyBgJmdyb3VwVHlwZT0ke2ZpbHRlcmVkR3JvdXBUeXBlfWBcclxuICAgICAgICAgIDogc2VhcmNoR3JvdXBzVXJsXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1c2VyIGdyb3VwIHBlcm1pc3Npb25zXHJcbiAgICogQHBhcmFtIHtHcm91cFBlcm1pc3Npb25bXX0gdXNlckdyb3VwUGVybWlzc2lvbnNcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFVzZXJHcm91cFBlcm1pc3Npb25zKHVzZXJHcm91cFBlcm1pc3Npb25zOiBHcm91cFBlcm1pc3Npb25bXSkge1xyXG4gICAgdGhpcy51c2VyR3JvdXBQZXJtaXNzaW9ucyA9IHVzZXJHcm91cFBlcm1pc3Npb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB1c2VyIGdyb3VwIHBlcm1pc3Npb25zXHJcbiAgICogQHJldHVybiB7R3JvdXBQZXJtaXNzaW9uW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRVc2VyR3JvdXBQZXJtaXNzaW9ucygpOiBHcm91cFBlcm1pc3Npb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyR3JvdXBQZXJtaXNzaW9ucztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbG9nZ2VkIEluIHVzZXIgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtMb2dnZWRJblVzZXJJbmZvfSB1c2VySW5mb1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0VXNlckluZm8odXNlckluZm86IExvZ2dlZEluVXNlckluZm8pOiB2b2lkIHtcclxuICAgIHRoaXMudXNlckluZm8gPSB1c2VySW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbG9nZ2VkIGluIHVzZXIgaW5mb3JtYXRpb24uIEZhbGxzIGJhY2sgdG8gdGhlIFVTRVJfSU5GTyBibG9iXHJcbiAgICogdGhlIGhvc3QgYXBwIHBlcnNpc3RzIHRvIGxvY2FsIHN0b3JhZ2Ugd2hlbiB0aGUgdXNlckluZm8gaW5wdXQgaGFzbid0XHJcbiAgICogYmVlbiBzZXQgeWV0IChlLmcuIGhvc3Qgd2lyaW5nIG5vdCBjb21wbGV0ZWQgb3IgdGltaW5nIHJhY2Ugb24gaW5pdCkuXHJcbiAgICogQHJldHVybiB7TG9nZ2VkSW5Vc2VySW5mb31cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFVzZXJJbmZvKCk6IExvZ2dlZEluVXNlckluZm8ge1xyXG4gICAgaWYgKHRoaXMudXNlckluZm8/LmFwcElkKSByZXR1cm4gdGhpcy51c2VySW5mbztcclxuICAgIGNvbnN0IHN0b3JlZFVzZXJJbmZvID0gdGhpcy5zdG9yYWdlU2VydmljZT8uZ2V0VmFsdWUoU3RvcmFnZUtleXMuVVNFUl9JTkZPKTtcclxuICAgIHJldHVybiBzdG9yZWRVc2VySW5mbz8uYXBwSWQgPyBzdG9yZWRVc2VySW5mbyA6IHRoaXMudXNlckluZm87XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyBwZXJtaXNzaW9uIGJhc2VkIGFjY2VzcyBmb3IgcHJvdmlkZWQgZmVhdHVyZS5cclxuICAgKiBDaGVja3MgZm9yIGdyb3VwIGxldmVsIHBlcm1pc3Npb25zLCBhbmQgcHJvdmlkZXMgYWNjZXNzIGJhc2VkIG9uIGluZGl2aWR1YWwgZ3JvdXAgcGVybWlzc2lvbnMuXHJcbiAgICogRm9yIGdsb2JhbCBwZXJtaXNzaW9ucyBwcm92aWRlcyBhY2Nlc3MgYWNyb3NzIHRoZSBpbmRpdmlkdWFsIGdyb3VwcyBvciBTeXN0ZW0gZ3JvdXBzLlxyXG4gICAqIEBwYXJhbSB7UGVybWlzc2lvblR5cGV9IHBlcm1pc3Npb25UeXBlXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlQWNjZXNzKFxyXG4gICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLFxyXG4gICAgcGVybWlzc2lvbnM/OiBVc2VyUGVybWlzc2lvbltdIHwgbnVsbFxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHBlcm1pc3Npb25zKSB7XHJcbiAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9uc1RvR3JvdXAgPVxyXG4gICAgICAgIHRoaXMudXNlclBlcm1pc3Npb25zU2VydmljZS5maWx0ZXJVc2VyR3JvdXBQZXJtaXNzaW9ucyhcclxuICAgICAgICAgIHBlcm1pc3Npb25zLFxyXG4gICAgICAgICAgdGhpcy5ncm91cFBlcm1pc3Npb25zU2VydmljZS5nZXRHcm91cFBlcm1pc3Npb25zKClcclxuICAgICAgICApO1xyXG4gICAgICByZXR1cm4gdGhpcy51c2VyUGVybWlzc2lvbnNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzUGVybWlzc2lvbihcclxuICAgICAgICBwZXJtaXNzaW9uVHlwZSxcclxuICAgICAgICB1c2VyUGVybWlzc2lvbnNUb0dyb3VwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy51c2VyUGVybWlzc2lvbnNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzUGVybWlzc2lvbihcclxuICAgICAgcGVybWlzc2lvblR5cGUsXHJcbiAgICAgIHRoaXMuZ2V0VXNlckdyb3VwUGVybWlzc2lvbnMoKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU3RvcmUgdGhlIGxvYWRlZCBncm91cCB0eXBlcy5cclxuICAgKiBAcGFyYW0ge0dyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXX0gZ3JvdXBUeXBlc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0TG9hZGVkR3JvdXBUeXBlcyhncm91cFR5cGVzOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW10pIHtcclxuICAgIHRoaXMuZ3JvdXBUeXBlcyA9IGdyb3VwVHlwZXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgbG9hZGVkIGdyb3VwIHR5cGVzLlxyXG4gICAqIEByZXR1cm4ge0dyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldExvYWRlZEdyb3VwVHlwZXMoKTogR3JvdXBUeXBlQ29uZmlndXJhdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLmdyb3VwVHlwZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWR9IG9yZ1JlcXVlc3RQYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxPcmdhbml6YXRpb25SZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRPcmdhbml6YXRpb25zKFxyXG4gICAgb3JnUmVxdWVzdFBheWxvYWQ6IE9yZ2FuaXphdGlvblJlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxPcmdhbml6YXRpb25SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9vcmdhbml6YXRpb25zYCxcclxuICAgICAgICBvcmdSZXF1ZXN0UGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgdHlwZSBjb25maWd1cmF0aW9uIEJ1c2luZXNzIHJ1bGUgZm9yIHRoZSBzZWxlY3RlZCBncm91cC5cclxuICAgKiBAcmV0dXJuIHsoQnVzaW5lc3NSdWxlICB8IHVuZGVmaW5lZCl9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRCdXNpbmVzc1J1bGVPZlNlbGVjdGVkR3JvdXAoKTogQnVzaW5lc3NSdWxlIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzUnVsZSA9IHRoaXMuZ2V0TG9hZGVkR3JvdXBUeXBlcygpPy5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwPy5jb25maWdGaWVsZElkID09PSB0aGlzLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwVHlwZVxyXG4gICAgKT8uY29uZmlnRmllbGRWYWx1ZT8uYnVzaW5lc3NSdWxlO1xyXG4gICAgaWYoYnVzaW5lc3NSdWxlPy5yb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuRU5USVRZKVxyXG4gICAgICBidXNpbmVzc1J1bGUucm9zdGVyVHlwZSA9IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMO1xyXG4gICAgcmV0dXJuIGJ1c2luZXNzUnVsZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZm9ybSBzdWJtaXQgYnV0dG9uIGJhc2VkIG9uIHBhc3NlZCBwYXJhbWV0ZXJzLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBSb3N0ZXJUeXBlfSBncm91cFJvc3RlclR5cGVcclxuICAgKiBAcGFyYW0ge0Zvcm1Db250cm9sU3RhdHVzfSBmb3JtU3RhdHVzXHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gc2VsZWN0ZWRVc2VyUm9sZXNcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgaXNTdWJtaXRCdXR0b25EaXNhYmxlZChcclxuICAgIGdyb3VwUm9zdGVyVHlwZTogR3JvdXBSb3N0ZXJUeXBlLFxyXG4gICAgZm9ybVN0YXR1czogRm9ybUNvbnRyb2xTdGF0dXMsXHJcbiAgICBzZWxlY3RlZFVzZXJSb2xlczogc3RyaW5nW11cclxuICApOiBib29sZWFuIHtcclxuICAgIGlmIChncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKVxyXG4gICAgICByZXR1cm4gZm9ybVN0YXR1cyA9PT0gRm9ybVN0YXR1cy5JTlZBTElEO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkVXNlclJvbGVzPy5sZW5ndGggPT09IDAgfHwgZm9ybVN0YXR1cyA9PT0gRm9ybVN0YXR1cy5JTlZBTElEO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBpc1BhcmVudEdyb3VwQ2hhbmdlZCB0cnVlIG9yIGZhbHNlLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQYXJlbnRHcm91cENoYW5nZWRcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFBhcmVudEdyb3VwQ2hhbmdlU3RhdHVzKGlzUGFyZW50R3JvdXBDaGFuZ2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzUGFyZW50R3JvdXBDaGFuZ2VkID0gaXNQYXJlbnRHcm91cENoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGlzUGFyZW50R3JvdXBDaGFuZ2VkIHZhbHVlLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRQYXJlbnRHcm91cENoYW5nZVN0YXR1cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzUGFyZW50R3JvdXBDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbWVtYmVyIHR5cGVzLlxyXG4gICAqIEBwYXJhbSB7Um9sZVtdfSBtZW1iZXJUeXBlc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0TWVtYmVyVHlwZXMobWVtYmVyVHlwZXM6IFJvbGVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5tZW1iZXJUeXBlcyA9IG1lbWJlclR5cGVzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBtZW1iZXIgdHlwZXMuXHJcbiAgICogQHJldHVybiB7Um9sZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0TWVtYmVyVHlwZXMoKTogUm9sZVtdIHtcclxuICAgIHJldHVybiB0aGlzLm1lbWJlclR5cGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIHVuaXF1ZSBjYWxsaW5nIGNvZGVzIGRlcml2ZWQgZnJvbSBwaG9uZSBjb3VudHJ5IG1ldGFkYXRhLiAqL1xyXG4gIGdldENvdW50cnlDYWxsaW5nQ29kZXMoKTogU2VsZWN0T3B0aW9uW10ge1xyXG4gICAgY29uc3QgZGlhbENvZGVzID0gW1xyXG4gICAgICAuLi5uZXcgU2V0KENPVU5UUllfRElBTF9DT0RFUy5tYXAoKGNvdW50cnkpID0+IGNvdW50cnkuZGlhbENvZGUpKSxcclxuICAgIF0uc29ydChcclxuICAgICAgKGZpcnN0LCBzZWNvbmQpID0+XHJcbiAgICAgICAgTnVtYmVyKGZpcnN0LnNsaWNlKDEpKSAtIE51bWJlcihzZWNvbmQuc2xpY2UoMSkpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIGRpYWxDb2Rlcy5tYXAoKGRpYWxDb2RlKSA9PiAoeyBpZDogZGlhbENvZGUsIG5hbWU6IGRpYWxDb2RlIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHN0b3JlZCBpbnRlcmVzdC1mb3JtIHJlc3BvbnNlcyBmb3IgYW4gaW50ZXJlc3QgcmVjb3JkLCBmb3IgdGhlXHJcbiAgICogUm9zdGVyIE1hbmFnZW1lbnQgYWRtaW4gXCJWaWV3IFJlc3BvbnNlc1wiIHZpZXcgKFNQM00tNDI4LCBSOC43KS5cclxuICAgKlxyXG4gICAqIEdFVCB7YXBpQmFzZVVybH0vZ3JvdXBzL2ludGVyZXN0L3tpbnRlcmVzdElkfS9yZXNwb25zZXNcclxuICAgKlxyXG4gICAqIFRoZSBlbmRwb2ludCBpcyBrZXllZCBieSB0aGUgaW50ZXJlc3QgcmVjb3JkIGlkICh7QGNvZGUgR0lOVF9TQUFQUFNfLi4ufSksXHJcbiAgICogTk9UIHRoZSBncm91cCBpZCwgYW5kIGlzIGd1YXJkZWQgc2VydmVyLXNpZGUgYnkgcm9zdGVyLXZpZXcgcGVybWlzc2lvbnNcclxuICAgKiAoVklFV19HUk9VUF9NRU1CRVJTIG9uIHRoZSBncm91cCBvciB0aGUgdGVuYW50LXdpZGUgVklFV19BTExfUk9TVEVSUykuIFRoZVxyXG4gICAqIGJhc2UgVVJMIGFscmVhZHkgY2FycmllcyB0aGUgdmVyc2lvbiBzZWdtZW50IChlLmcuIGAuLi4vdjFgKSwgbWF0Y2hpbmcgZXZlcnlcclxuICAgKiBvdGhlciBHcm91cHNTZXJ2aWNlIGNhbGwgYnVpbHQgYXMgYCR7YXBpQmFzZVVybH0vZ3JvdXBzLy4uLmAsIHNvIHRoZSB2ZXJzaW9uXHJcbiAgICogaXMgbm90IHJlcGVhdGVkLiBUaGUgcmVzcG9uc2UgZW52ZWxvcGUncyBib2R5IGlzIHRoZSBsaXN0IG9mIHJlc3BvbnNlc1xyXG4gICAqIChuZXZlciBudWxsIOKAlCBhbiBlbXB0eSBsaXN0IG1lYW5zIG5vIGFuc3dlcnMgd2VyZSBzdWJtaXR0ZWQpLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnRlcmVzdElkIC0gVGhlIGludGVyZXN0IHJlY29yZCB3aG9zZSByZXNwb25zZXMgYXJlIHJlYWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxJbnRlcmVzdEZvcm1SZXNwb25zZVtdPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEludGVyZXN0UmVzcG9uc2VzKFxyXG4gICAgaW50ZXJlc3RJZDogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxJbnRlcmVzdEZvcm1SZXNwb25zZVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9pbnRlcmVzdC8ke2ludGVyZXN0SWR9L3Jlc3BvbnNlc2ApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IChyZXNwb25zZT8uYm9keSBhcyBJbnRlcmVzdEZvcm1SZXNwb25zZVtdKSA/PyBbXSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBpbnRlcmVzdGVkLXVzZXJzIHJvc3RlciBmb3IgYSBncm91cCDigJQgb25lIHJvdyBwZXIgaW50ZXJlc3RcclxuICAgKiBjYXJyeWluZyB0aGUgdXNlcidzIG5hbWUvZW1haWwsIG9yZ2FuaXphdGlvbiBhZmZpbGlhdGlvbnMsIHN1Ym1pdHRlZFxyXG4gICAqIHRpbWVzdGFtcCwgdGhlIGdyb3VwJ3MgZGVmYXVsdCBtZW1iZXJzaGlwIGxldmVsLCBhbmQgdGhlIGdyb3VwIHR5cGUgaWQg4oCUIHNvXHJcbiAgICogdGhlIFJvc3RlciBNYW5hZ2VtZW50IGFkbWluIFwiSW50ZXJlc3RlZCBSb3N0ZXJzXCIgdGFiIHJlbmRlcnMgdGhlIHdob2xlIGdyb3VwXHJcbiAgICogaW4gYSBzaW5nbGUgY2FsbCAoU1AzTS00MjgsIFI4LjcpLlxyXG4gICAqXHJcbiAgICogUE9TVCB7YXBpQmFzZVVybH0vZ3JvdXBzL2ludGVyZXN0L2dyb3VwL3tncm91cElkfS9yZXNwb25zZXNcclxuICAgKlxyXG4gICAqIFRoZSBzZWFyY2ggdGVybSwgcGFnaW5hdGlvbiBhbmQgc29ydCBvcHRpb25zIGFyZSBzZW50IGluIHRoZSByZXF1ZXN0IGJvZHlcclxuICAgKiAoe0BsaW5rIEludGVyZXN0ZWRSb3N0ZXJzUmVxdWVzdFBheWxvYWR9KSBzbyB0aGUgYmFja2VuZCBjYW4gZmlsdGVyLCBwYWdlXHJcbiAgICogYW5kIHNvcnQgdGhlIHJvc3RlciBzZXJ2ZXItc2lkZS4gR3VhcmRlZCBzZXJ2ZXItc2lkZSBieSByb3N0ZXItdmlld1xyXG4gICAqIHBlcm1pc3Npb25zIChWSUVXX0dST1VQX01FTUJFUlMgb24gdGhlIGdyb3VwIG9yIHRoZSB0ZW5hbnQtd2lkZVxyXG4gICAqIFZJRVdfQUxMX1JPU1RFUlMpLiBUaGUgYmFzZSBVUkwgYWxyZWFkeSBjYXJyaWVzIHRoZSB2ZXJzaW9uIHNlZ21lbnQsXHJcbiAgICogbWF0Y2hpbmcgZXZlcnkgb3RoZXIgR3JvdXBzU2VydmljZSBjYWxsIGJ1aWx0IGFzIGAke2FwaUJhc2VVcmx9L2dyb3Vwcy8uLi5gLFxyXG4gICAqIHNvIHRoZSB2ZXJzaW9uIGlzIG5vdCByZXBlYXRlZC4gVGhlIHJlc3BvbnNlIGVudmVsb3BlJ3MgYm9keSBpcyBhblxyXG4gICAqIHtAbGluayBJbnRlcmVzdGVkUm9zdGVyc1Jlc3BvbnNlfTogdGhlIHJvc3RlciByb3dzIGxpdmUgdW5kZXIgYGRhdGFgIChuZXZlclxyXG4gICAqIG51bGwg4oCUIGFuIGVtcHR5IGxpc3QgbWVhbnMgdGhlIGdyb3VwIGhhcyBubyBpbnRlcmVzdHMpIGFsb25nc2lkZSB0aGUgcGFnaW5nXHJcbiAgICogbWV0YWRhdGEgKGB0b3RhbFJlY29yZHNgLCBgb2Zmc2V0YCwgYHBhZ2VTaXplYCkuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwSWQgLSBUaGUgZ3JvdXAgd2hvc2UgaW50ZXJlc3RlZC11c2VycyByb3N0ZXIgaXMgcmVhZC5cclxuICAgKiBAcGFyYW0ge0ludGVyZXN0ZWRSb3N0ZXJzUmVxdWVzdFBheWxvYWR9IHBheWxvYWQgLSBTZWFyY2gvcGFnaW5hdGlvbi9zb3J0IG9wdGlvbnMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxJbnRlcmVzdGVkUm9zdGVyc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEludGVyZXN0UmVzcG9uc2VzQnlHcm91cChcclxuICAgIGdyb3VwSWQ6IHN0cmluZyxcclxuICAgIHBheWxvYWQ6IEludGVyZXN0ZWRSb3N0ZXJzUmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEludGVyZXN0ZWRSb3N0ZXJzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9pbnRlcmVzdC9ncm91cC8ke2dyb3VwSWR9L3Jlc3BvbnNlc2AsXHJcbiAgICAgICAgcGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZT8uYm9keSBhcyBJbnRlcmVzdGVkUm9zdGVyc1Jlc3BvbnNlIHwgbnVsbDtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGE6IGJvZHk/LmRhdGEgPz8gW10sXHJcbiAgICAgICAgICAgIHRvdGFsUmVjb3JkczogYm9keT8udG90YWxSZWNvcmRzID8/IDAsXHJcbiAgICAgICAgICAgIG9mZnNldDogYm9keT8ub2Zmc2V0ID8/IDAsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiBib2R5Py5wYWdlU2l6ZSA/PyAwLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMvb3ZlcnJpZGVzIHRoZSBtZW1iZXJzaGlwIGxldmVsIGZvciBhbiBpbnRlcmVzdGVkIHVzZXIgZnJvbSB0aGUgUm9zdGVyXHJcbiAgICogTWFuYWdlbWVudCBhZG1pbiBcIkludGVyZXN0ZWQgUm9zdGVyc1wiIHRhYiAoU1AzTS00MjgpLiBDYWxsZWQgd2hlbiB0aGUgYWRtaW5cclxuICAgKiBwaWNrcyBhIHZhbHVlIGluIGEgcm93J3MgTWVtYmVyIExldmVsIGRyb3Bkb3duLlxyXG4gICAqXHJcbiAgICogUFVUIHthcGlCYXNlVXJsfS9ncm91cHMvaW50ZXJlc3QvbWVtYmVyLWxldmVsXHJcbiAgICpcclxuICAgKiBUaGUgZ3JvdXAsIHVzZXIgYW5kIHNlbGVjdGVkIHJvbGUgaWQgYXJlIHNlbnQgaW4gdGhlIHJlcXVlc3QgYm9keVxyXG4gICAqICh7QGxpbmsgVXBkYXRlTWVtYmVyTGV2ZWxQYXlsb2FkfSkuIEd1YXJkZWQgc2VydmVyLXNpZGUgYnkgcm9zdGVyLW1hbmFnZW1lbnRcclxuICAgKiBwZXJtaXNzaW9ucy4gVGhlIGJhc2UgVVJMIGFscmVhZHkgY2FycmllcyB0aGUgdmVyc2lvbiBzZWdtZW50LCBtYXRjaGluZ1xyXG4gICAqIGV2ZXJ5IG90aGVyIEdyb3Vwc1NlcnZpY2UgY2FsbCBidWlsdCBhcyBgJHthcGlCYXNlVXJsfS9ncm91cHMvLi4uYCwgc28gdGhlXHJcbiAgICogdmVyc2lvbiBpcyBub3QgcmVwZWF0ZWQuIFRoZSByZXNwb25zZSBlbnZlbG9wZSdzIGJvZHkgaXMgcmV0dXJuZWQgYXMtaXMuXHJcbiAgICogQHBhcmFtIHtVcGRhdGVNZW1iZXJMZXZlbFBheWxvYWR9IHBheWxvYWQgLSBHcm91cCArIHVzZXIgKyBzZWxlY3RlZCByb2xlIGlkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8dW5rbm93bj59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICB1cGRhdGVJbnRlcmVzdE1lbWJlckxldmVsKFxyXG4gICAgcGF5bG9hZDogVXBkYXRlTWVtYmVyTGV2ZWxQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9pbnRlcmVzdC9tZW1iZXItbGV2ZWxgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZT8uYm9keSA/PyBudWxsKSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIFJlY2lwcm9jYWwgQ3JlZGl0IChTUDNNLTIyKVxyXG4gIC8vIFRoZSByZWNpcHJvY2FsIGNvbnRyb2xsZXIgbGl2ZXMgb24gdGhlIE1FRVRJTkdTIHNlcnZpY2UsIHJlYWNoZWQgdGhyb3VnaCB0aGVcclxuICAvLyBnYXRld2F5LiBhcGlCYXNlVXJsID0gYXBwQ29uZmlnLmJhc2VBcGlVcmwgKGVuZHMgaW4gYC92MWApLCBhbmQgdGhlIGdhdGV3YXlcclxuICAvLyByb3V0ZXMgdGhlIG1lZXRpbmdzIHNlcnZpY2UgdW5kZXIgYCR7YXBpQmFzZVVybH0vbWVldGluZ3NgIChzYW1lIGFzIGV2ZXJ5IG90aGVyXHJcbiAgLy8gbWVldGluZ3MvZXZlbnRzIGNhbGwsIGUuZy4gYCR7YXBpQmFzZVVybH0vbWVldGluZ3MvZXZlbnQvLi4uYCkuXHJcbiAgLy9cclxuICAvLyBUaGUgcmVjaXByb2NhbCBjb250cm9sbGVyIHNpdHMgb24gdGhlIG1lZXRpbmdzIHNlcnZpY2UgdW5kZXIgYGFkbWluL3JlY2lwcm9jYWwtY3JlZGl0YC5cclxuICAvLyBhcGlCYXNlVXJsIGFscmVhZHkgY2FycmllcyB0aGUgdmVyc2lvbiBzZWdtZW50IChgLi4uL3YxYCksIGFuZCB0aGUgZ2F0ZXdheSByb3V0ZXNcclxuICAvLyB0aGUgbWVldGluZ3Mgc2VydmljZSB1bmRlciBgJHthcGlCYXNlVXJsfS9tZWV0aW5nc2AsIHNvIHRoZSB2ZXJzaW9uIGlzIE5PVCByZXBlYXRlZFxyXG4gIC8vIChubyBzZWNvbmQgYC92MWAgb3IgYC9hcGkvdjFgKS4gVGhlIGZ1bGwgcGF0aCBpczpcclxuICAvLyAgIGAke2FwaUJhc2VVcmx9L21lZXRpbmdzL2FkbWluL3JlY2lwcm9jYWwtY3JlZGl0Ly4uLmBcclxuICAvLyAgID0gaHR0cHM6Ly9zYWFwcHNhcGlkZXYuaWVlZS5vcmcvdjEvbWVldGluZ3MvYWRtaW4vcmVjaXByb2NhbC1jcmVkaXQvLi4uXHJcbiAgLy8gRXZlcnkgbWV0aG9kIGJ1aWxkcyBVUkxzIGZyb20gUkVDSVBST0NBTF9CQVNFX1BBVEggYmVsb3cuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKiBQYXRoIHByZWZpeCAocmVsYXRpdmUgdG8gYXBpQmFzZVVybCkgZm9yIHRoZSByZWNpcHJvY2FsLWNyZWRpdCBlbmRwb2ludHMuICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBSRUNJUFJPQ0FMX0JBU0VfUEFUSCA9ICdtZWV0aW5ncy9hZG1pbi9yZWNpcHJvY2FsLWNyZWRpdCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkIGEgcmVjaXByb2NhbC1jcmVkaXQgZW5kcG9pbnQgVVJMIGZyb20gYXBpQmFzZVVybCArIHRoZSBiYXNlIHBhdGgsXHJcbiAgICogZ3VhcmRpbmcgYWdhaW5zdCBhY2NpZGVudGFsIGRvdWJsZSBzbGFzaGVzIGlmIGFwaUJhc2VVcmwgaGFzIGEgdHJhaWxpbmcgc2xhc2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdWZmaXhdIGV4dHJhIHBhdGgvcXVlcnkgYXBwZW5kZWQgYWZ0ZXIgdGhlIGJhc2UgcGF0aC5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidWlsZFJlY2lwcm9jYWxVcmwoc3VmZml4ID0gJycpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYmFzZSA9IHRoaXMuYXBpQmFzZVVybD8ucmVwbGFjZSgvXFwvKyQvLCAnJykgPz8gJyc7XHJcbiAgICByZXR1cm4gYCR7YmFzZX0vJHt0aGlzLlJFQ0lQUk9DQUxfQkFTRV9QQVRIfSR7c3VmZml4fWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaCB0aGUgZm9yZWlnbiBncm91cHMgYXZhaWxhYmxlIGZvciByZWNpcHJvY2FsIGNyZWRpdCBmb3IgYSBob21lIGdyb3VwLlxyXG4gICAqIEdFVCB7YXBpQmFzZVVybH0vbWVldGluZ3MvYWRtaW4vcmVjaXByb2NhbC1jcmVkaXQve2hvbWVHcm91cElkfS9hdmFpbGFibGUtZ3JvdXBzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhvbWVHcm91cElkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8QXZhaWxhYmxlRm9yZWlnbkdyb3VwW10+Pn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEF2YWlsYWJsZVJlY2lwcm9jYWxHcm91cHMoXHJcbiAgICBob21lR3JvdXBJZDogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8QXZhaWxhYmxlRm9yZWlnbkdyb3VwW10+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YSh0aGlzLmJ1aWxkUmVjaXByb2NhbFVybChgLyR7aG9tZUdyb3VwSWR9L2F2YWlsYWJsZS1ncm91cHNgKSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBleGlzdGluZyByZWNpcHJvY2FsLWNyZWRpdCBjb25maWcgcm93cyBmb3IgYSBob21lIGdyb3VwIChlZGl0IHByZWZpbGwpLlxyXG4gICAqIEdFVCB7YXBpQmFzZVVybH0vbWVldGluZ3MvYWRtaW4vcmVjaXByb2NhbC1jcmVkaXQve2hvbWVHcm91cElkfVs/ZXZlbnRJZD0uLi5dXHJcbiAgICogUmV0dXJucyBvbmUgcm93IHBlciBmb3JlaWduIGdyb3VwOyBhbiBlbXB0eSBhcnJheSBtZWFucyByZWNpcHJvY2FsIGNyZWRpdCBpcyBvZmYuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhvbWVHcm91cElkXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudElkXSBvcHRpb25hbCDigJQgZmlsdGVycyB0byBhbiBldmVudC1zY29wZWQgY29uZmlnLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UmVjaXByb2NhbENyZWRpdFJlc3BvbnNlPFJlY2lwcm9jYWxDcmVkaXRDb25maWdSb3dbXT4+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0UmVjaXByb2NhbENvbmZpZyhcclxuICAgIGhvbWVHcm91cElkOiBzdHJpbmcsXHJcbiAgICBldmVudElkPzogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8UmVjaXByb2NhbENyZWRpdENvbmZpZ1Jvd1tdPj4ge1xyXG4gICAgY29uc3QgcXVlcnkgPSBldmVudElkID8gYD9ldmVudElkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGV2ZW50SWQpfWAgOiAnJztcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKHRoaXMuYnVpbGRSZWNpcHJvY2FsVXJsKGAvJHtob21lR3JvdXBJZH0ke3F1ZXJ5fWApKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIGEgcmVjaXByb2NhbC1jcmVkaXQgY29uZmlnIChjcmVhdGVzL3JlYWN0aXZhdGVzIG9uZSByb3cgcGVyIGZvcmVpZ24gZ3JvdXApLlxyXG4gICAqIFBPU1Qge2FwaUJhc2VVcmx9L21lZXRpbmdzL2FkbWluL3JlY2lwcm9jYWwtY3JlZGl0XHJcbiAgICogQHBhcmFtIHtTYXZlUmVjaXByb2NhbENyZWRpdFBheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFJlY2lwcm9jYWxDcmVkaXRSZXNwb25zZTxSZWNpcHJvY2FsQ3JlZGl0Q29uZmlnUm93W10+Pn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNhdmVSZWNpcHJvY2FsQ3JlZGl0KFxyXG4gICAgcGF5bG9hZDogU2F2ZVJlY2lwcm9jYWxDcmVkaXRQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8UmVjaXByb2NhbENyZWRpdENvbmZpZ1Jvd1tdPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKHRoaXMuYnVpbGRSZWNpcHJvY2FsVXJsKCksIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlKSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSAoc29mdCBkZWxldGUpIGEgc2luZ2xlIHJlY2lwcm9jYWwtY3JlZGl0IGNvbmZpZyByb3cgYnkgaXRzIGNvbmZpZ0lkLlxyXG4gICAqIFBPU1Qge2FwaUJhc2VVcmx9L21lZXRpbmdzL2FkbWluL3JlY2lwcm9jYWwtY3JlZGl0L3tjb25maWdJZH0vcmVtb3ZlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZ0lkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8bnVsbD4+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgcmVtb3ZlUmVjaXByb2NhbENvbmZpZyhcclxuICAgIGNvbmZpZ0lkOiBzdHJpbmdcclxuICApOiBPYnNlcnZhYmxlPFJlY2lwcm9jYWxDcmVkaXRSZXNwb25zZTxudWxsPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKHRoaXMuYnVpbGRSZWNpcHJvY2FsVXJsKGAvJHtjb25maWdJZH0vcmVtb3ZlYCksIHt9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
925
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVdwRSxPQUFPLEVBQThCLFdBQVcsRUFBa0IsTUFBTSxxQkFBcUIsQ0FBQztBQUU5RixPQUFPLEtBQUssV0FBVyxNQUFNLDBCQUEwQixDQUFDO0FBa0J4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQW1CeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFDTCxVQUFVLEVBRVYsU0FBUyxHQUVWLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFNOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSWpFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFVckQ7Ozs7O0dBS0c7QUFDSCxNQUFNLG1DQUFtQyxHQUFHLHlCQUF5QixDQUFDO0FBRXRFOzs7R0FHRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBNkJ4Qiw2REFBNkQ7SUFDN0Q7SUFDRSwwQ0FBMEM7SUFDbEMsV0FBd0I7SUFDaEMsMENBQTBDO0lBQ2xDLHNCQUE4QztJQUN0RCwwQ0FBMEM7SUFDbEMsdUJBQW1EO0lBQzNELDBDQUEwQztJQUNuQyxZQUEyQjtJQUNsQywwQ0FBMEM7SUFDbEMsY0FBOEIsQ0FBQyw2Q0FBNkM7O1FBUjVFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRXhCLDJCQUFz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UUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDM0IsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzsrR0FybENVLGFBQWE7bUhBQWIsYUFBYSxjQUZaLE1BQU07OzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIGNhdGNoRXJyb3IsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIENyZWF0ZUdyb3VwUGF5bG9hZCxcclxuICBDcmVhdGVHcm91cFJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9jcmVhdGUtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEJ1c2luZXNzUnVsZSxcclxuICBHcm91cFR5cGVDb25maWd1cmF0aW9uLFxyXG4gIEdyb3VwVHlwZUNvbmZpZ1ZhbHVlLFxyXG4gIEdyb3VwVHlwZVJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9ncm91cC10eXBlcy5tb2RlbCc7XHJcbmltcG9ydCB7IEFsZXJ0c1NlcnZpY2UsIEh0dHBTZXJ2aWNlLCBTdG9yYWdlS2V5cywgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAaWVlZXNhLW5wbS91dGlsaXR5JztcclxuaW1wb3J0IHsgR2V0R3JvdXBSZXNwb25zZSwgR2V0R3JvdXBzUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy92aWV3LWdyb3VwLm1vZGVsJztcclxuaW1wb3J0ICogYXMgc2NyZWVuVGV4dHMgZnJvbSAnLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgRGVsZXRlR3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL2RlbGV0ZS1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwSW5mbyB9IGZyb20gJy4uL21vZGVscy9ncm91cC1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBTZWFyY2hVc2Vyc1BheWxvYWQsXHJcbiAgRmlsdGVyVXNlcnNQYXlsb2FkLFxyXG4gIEdldEdyb3VwVXNlcnNSZXNwb25zZSxcclxuICBVc2VyLFxyXG4gIExvZ2dlZEluVXNlckluZm8sXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3VzZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBSb2xlIH0gZnJvbSAnLi4vbW9kZWxzL3JvbGUubW9kZWwnO1xyXG5pbXBvcnQgeyBFZGl0R3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL2VkaXQtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEF2YWlsYWJsZUZvcmVpZ25Hcm91cCxcclxuICBSZWNpcHJvY2FsQ3JlZGl0Q29uZmlnUm93LFxyXG4gIFJlY2lwcm9jYWxDcmVkaXRSZXNwb25zZSxcclxuICBTYXZlUmVjaXByb2NhbENyZWRpdFBheWxvYWQsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3JlY2lwcm9jYWwtY3JlZGl0Lm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFJvc3RlckZ1bmN0aW9uVHlwZSB9IGZyb20gJy4uL21vZGVscy9yb3N0ZXItZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwVXNlckluZm8gfSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtdXNlci1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBBZGRPckVkaXRVc2VyUGF5bG9hZCxcclxuICBBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2UsXHJcbiAgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkLFxyXG4gIFJlcHJlc2VudGluZ09yZ2FuaXphdGlvbixcclxufSBmcm9tICcuLi9tb2RlbHMvYWRkLW9yLWVkaXQtdXNlci1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IERlbGV0ZVVzZXJHcm91cFBheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvZGVsZXRlLXVzZXItZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEdldFVzZXJEZXRhaWxzUGF5bG9hZCxcclxuICBTZWFyY2hVc2VyQnlFbWFpbFJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9hZGQtbmV3LXVzZXIubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIE9yZ2FuaXphdGlvblJlcXVlc3RQYXlsb2FkLFxyXG4gIE9yZ2FuaXphdGlvblJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9vcmdhbml6YXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBDbGFzc2lmaWNhdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWxzL2NsYXNzaWZpY2F0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBSb3N0ZXJUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3Jvc3Rlci10eXBlLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBGb3JtU3RhdHVzLFxyXG4gIENoZWNrYm94T3B0aW9uLFxyXG4gIEFsZXJ0VHlwZSxcclxuICBTZWxlY3RPcHRpb24sXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vbW9kZWxzJztcclxuaW1wb3J0IHsgQ09VTlRSWV9ESUFMX0NPREVTIH0gZnJvbSAnQGllZWVzYS1ucG0vcHJlc2VudGF0aW9uJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2xTdGF0dXMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgR3JvdXBQZXJtaXNzaW9uLFxyXG4gIFVzZXJQZXJtaXNzaW9uLFxyXG59IGZyb20gJy4uL21vZGVscy9ncm91cC1wZXJtaXNzaW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuL3VzZXItcGVybWlzc2lvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyb3VwUGVybWlzc2lvbnNNYXBTZXJ2aWNlIH0gZnJvbSAnLi9ncm91cC1wZXJtaXNzaW9ucy1tYXAtc2VydmljZSc7XHJcbmltcG9ydCB7IFBhcmVudEdyb3Vwc0luZm8gfSBmcm9tICcuLi9tb2RlbHMvcGFyZW50LWdyb3Vwcy1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHsgUm9sZVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcm9sZS10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgQ2FjaGVkUmVxdWlyZWRQcm9maWxlRmllbGRzIH0gZnJvbSAnLi4vbW9kZWxzL3JlcXVpcmVkLXByb2ZpbGUtZmllbGRzLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBHcm91cEludGVyZXN0UmVzcG9uc2VWaWV3LFxyXG4gIEludGVyZXN0ZWRSb3N0ZXJzUmVxdWVzdFBheWxvYWQsXHJcbiAgSW50ZXJlc3RlZFJvc3RlcnNSZXNwb25zZSxcclxuICBJbnRlcmVzdEZvcm1SZXNwb25zZSxcclxuICBVcGRhdGVNZW1iZXJMZXZlbFBheWxvYWQsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2ludGVyZXN0LXJlc3BvbnNlLm1vZGVsJztcclxuXHJcbi8qKlxyXG4gKiBMb2NhbCBzdG9yYWdlIGtleSB1bmRlciB3aGljaCB0aGUgaG9zdGluZyBhcHBsaWNhdGlvbiBjYWNoZXMgdGhlIHRlbmFudCdzXHJcbiAqIHJlcXVpcmVkIHByb2ZpbGUgZmllbGRzIGF0IGxvZ2luIChzaGFwZTogYHsgYXBwSWQsIHJlcXVpcmVkRmllbGRzIH1gKS4gVGhlXHJcbiAqIGFkZC11c2VyIC8gZWRpdC11c2VyIGZvcm1zIHJlYWQgdGhpcyBjYWNoZSBhcyB0aGUgc291cmNlIG9mIHRydXRoIHNvIHRoZXlcclxuICogYWx3YXlzIHJlZmxlY3QgdGhlIHRlbmFudCBjb25maWd1cmF0aW9uIHJlZ2FyZGxlc3Mgb2YgQElucHV0L3Jlc29sdmVyIHRpbWluZy5cclxuICovXHJcbmNvbnN0IFJFUVVJUkVEX1BST0ZJTEVfRklFTERTX1NUT1JBR0VfS0VZID0gJ1JFUVVJUkVEX1BST0ZJTEVfRklFTERTJztcclxuXHJcbi8qKlxyXG4gKiBHcm91cHMgc2VydmljZSBpcyBhbiBhYnN0cmFjdCBsYXllciBhbmQgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGdyb3VwcyBSRVNUIEFQSSBjYWxscy5cclxuICogQGNsYXNzIEdyb3Vwc1NlcnZpY2VcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cHNTZXJ2aWNlIHtcclxuICBncm91cHNUZXh0ID0gc2NyZWVuVGV4dHM/LmVycm9ycztcclxuICBhcGlCYXNlVXJsITogc3RyaW5nO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgdXNlclBlcm1pc3Npb246IGFueTtcclxuICAvKipcclxuICAgKiBUZW5hbnQtbGV2ZWwgcmVxdWlyZWQgcHJvZmlsZSBmaWVsZHMgKGUuZy4gWydwaG9uZScsJ2FkZHJlc3MnLCdlbXBsb3llciddKVxyXG4gICAqIHN1cHBsaWVkIGJ5IHRoZSBob3N0IGFwcCBmcm9tIGl0cyBjYWNoZWQgdGVuYW50IGNvbmZpZ3VyYXRpb24uIENvbnN1bWVkIGJ5XHJcbiAgICogdGhlIHJvc3RlciBpbXBvcnQgdG8gYXBwZW5kIHRlbmFudC1tYW5kYXRlZCBjb2x1bW5zIHRvIHRoZSByZXF1aXJlZC1jb2x1bW5cclxuICAgKiBsaXN0IGFuZCB0aGUgc2FtcGxlIGZpbGUuIEVtcHR5IHdoZW4gdGhlIHRlbmFudCBoYXMgbm9uZSBjb25maWd1cmVkLlxyXG4gICAqL1xyXG4gIHJlcXVpcmVkUHJvZmlsZUZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBzZWxlY3RlZEdyb3VwSW5mbyE6IEdyb3VwSW5mbyB8IHVuZGVmaW5lZDtcclxuICBncm91cEZ1bmN0aW9uVHlwZSE6IEdyb3VwRnVuY3Rpb25UeXBlO1xyXG4gIHNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvITogR3JvdXBJbmZvIHwgdW5kZWZpbmVkO1xyXG4gIG9wZW5Nb2RhbE5vdGlmaWVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcm91cEZ1bmN0aW9uVHlwZT4oXHJcbiAgICBHcm91cEZ1bmN0aW9uVHlwZS5WSUVXX1JPU1RFUlxyXG4gICk7XHJcbiAgZ3JvdXBUeXBlUm9sZXMhOiBDaGVja2JveE9wdGlvbltdO1xyXG4gIHNlbGVjdGVkVXNlckluZm8hOiBHcm91cFVzZXJJbmZvO1xyXG4gIGNhblNob3dNZXNzYWdlID0gZmFsc2U7XHJcbiAgcm9zdGVyRnVuY3Rpb25UeXBlITogUm9zdGVyRnVuY3Rpb25UeXBlO1xyXG4gIHVzZXJHcm91cFBlcm1pc3Npb25zITogR3JvdXBQZXJtaXNzaW9uW107XHJcbiAgZ3JvdXBUeXBlcyE6IEdyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXTtcclxuICBpc1BhcmVudEdyb3VwQ2hhbmdlZCA9IGZhbHNlO1xyXG4gIHVzZXJJbmZvITogTG9nZ2VkSW5Vc2VySW5mbztcclxuICBtZW1iZXJUeXBlcyE6IFJvbGVbXTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnM6IFJlcHJlc2VudGluZ09yZ2FuaXphdGlvbltdID0gW107XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uLCBuby11bnVzZWQtdmFyc1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSB1c2VyUGVybWlzc2lvbnNTZXJ2aWNlOiBVc2VyUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdyb3VwUGVybWlzc2lvbnNTZXJ2aWNlOiBHcm91cFBlcm1pc3Npb25zTWFwU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGFsZXJ0U2VydmljZTogQWxlcnRzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgc2V0QXBwQ29uZmlnKGFwaUJhc2VVcmw6IHN0cmluZywgdXNlclBlcm1pc3Npb246IGFueSkge1xyXG4gICAgdGhpcy5hcGlCYXNlVXJsID0gYXBpQmFzZVVybDtcclxuICAgIHRoaXMudXNlclBlcm1pc3Npb24gPSB1c2VyUGVybWlzc2lvbjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU3RvcmVzIHRoZSB0ZW5hbnQtbGV2ZWwgcmVxdWlyZWQgcHJvZmlsZSBmaWVsZHMgcHJvdmlkZWQgYnkgdGhlIGhvc3QgYXBwLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHJlcXVpcmVkUHJvZmlsZUZpZWxkcyAtIEZpZWxkIGtleXMgKGUuZy4gJ3Bob25lJykuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRSZXF1aXJlZFByb2ZpbGVGaWVsZHMocmVxdWlyZWRQcm9maWxlRmllbGRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1aXJlZFByb2ZpbGVGaWVsZHMgPSByZXF1aXJlZFByb2ZpbGVGaWVsZHMgPz8gW107XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRlbmFudC1sZXZlbCByZXF1aXJlZCBwcm9maWxlIGZpZWxkcyAobmV2ZXIgbnVsbCkuXHJcbiAgICpcclxuICAgKiBSZWFkcyB0aGUgbG9jYWwgc3RvcmFnZSBjYWNoZSB0aGUgaG9zdGluZyBhcHBsaWNhdGlvbiB3cml0ZXMgYXQgbG9naW4gKGtleVxyXG4gICAqIGBSRVFVSVJFRF9QUk9GSUxFX0ZJRUxEU2ApIGFzIHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIHNvIHRoZSBhZGQtdXNlciAvXHJcbiAgICogZWRpdC11c2VyIGZvcm1zIGFsd2F5cyByZWZsZWN0IHRoZSB0ZW5hbnQgY29uZmlndXJhdGlvbiByZWdhcmRsZXNzIG9mIHRoZVxyXG4gICAqIEBJbnB1dC9yZXNvbHZlciB0aW1pbmcuXHJcbiAgICpcclxuICAgKiBUaGUgY2FjaGUgaXMgb25seSB0cnVzdGVkIHdoZW4gaXQgaXMgd2VsbC1mb3JtZWQgZm9yIHRoZSBhY3RpdmVcclxuICAgKiBhcHBsaWNhdGlvbjogaXRzIGBhcHBJZGAgbXVzdCBtYXRjaCB0aGUgY3VycmVudCB1c2VyJ3MgYGFwcElkYCBhbmQgaXRzXHJcbiAgICogYHJlcXVpcmVkRmllbGRzYCBtdXN0IGJlIGFuIGFycmF5LiBUaGlzIGd1YXJkcyBhZ2FpbnN0IChhKSBhIHN0YWxlIGNhY2hlXHJcbiAgICogZnJvbSBhIHByZXZpb3VzbHkgb3BlbmVkIGFwcGxpY2F0aW9uIGFwcGx5aW5nIGFub3RoZXIgdGVuYW50J3MgZmllbGRzLCBhbmRcclxuICAgKiAoYikgYSBtYWxmb3JtZWQgY2FjaGUgY3Jhc2hpbmcgdGhlIGZvcm1zIHdoZW4gY2FsbGVycyBydW5cclxuICAgKiBgcmVxdWlyZWRGaWVsZHMuaW5jbHVkZXMoLi4uKWAgb24gYSBub24tYXJyYXkgdmFsdWUuIFdoZW4gdGhlIGNhY2hlIGlzXHJcbiAgICogbWlzc2luZywgZm9yIGFub3RoZXIgYXBwLCBvciBtYWxmb3JtZWQsIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGluLW1lbW9yeVxyXG4gICAqIHZhbHVlIHNldCB2aWEge0BsaW5rIHNldFJlcXVpcmVkUHJvZmlsZUZpZWxkc30gKHRoZSBob3N0IEBJbnB1dCksIHRoZW4gdG9cclxuICAgKiBhbiBlbXB0eSBsaXN0LlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0UmVxdWlyZWRQcm9maWxlRmllbGRzKCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc3RvcmFnZVNlcnZpY2U/LmdldFZhbHVlKFxyXG4gICAgICBSRVFVSVJFRF9QUk9GSUxFX0ZJRUxEU19TVE9SQUdFX0tFWVxyXG4gICAgKSBhcyBDYWNoZWRSZXF1aXJlZFByb2ZpbGVGaWVsZHMgfCBudWxsO1xyXG4gICAgY29uc3QgYWN0aXZlQXBwSWQgPSB0aGlzLmdldFVzZXJJbmZvKCk/LmFwcElkO1xyXG4gICAgY29uc3QgaXNDYWNoZVVzYWJsZSA9XHJcbiAgICAgICEhY2FjaGVkICYmXHJcbiAgICAgIEFycmF5LmlzQXJyYXkoY2FjaGVkLnJlcXVpcmVkRmllbGRzKSAmJlxyXG4gICAgICAoIWFjdGl2ZUFwcElkIHx8IGNhY2hlZC5hcHBJZCA9PT0gYWN0aXZlQXBwSWQpO1xyXG4gICAgaWYgKGlzQ2FjaGVVc2FibGUpIHJldHVybiBjYWNoZWQucmVxdWlyZWRGaWVsZHM7XHJcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlZFByb2ZpbGVGaWVsZHMgPz8gW107XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgYXBwbGljYXRpb24gZ3JvdXAgdHlwZXMgZnJvbSBBUEkgYW5kIHJldHVybnMgaXQgYXMgYW4gb2JzZXJ2YWJsZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPn0gLUl0IHJldHVybnMgZ3JvdXAgdHlwZXMgaWYgc3VjY2VzcyBlbHNlIGVycm9yLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXRHcm91cFR5cGVzKCk6IE9ic2VydmFibGU8R3JvdXBUeXBlUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2NvbmZpZy9ncm91cFR5cGVDb25maWdJbmZvYClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRMb2FkZWRHcm91cFR5cGVzKHJlc3BvbnNlPy5ib2R5KTtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbGxvd2VkIHBhcmVudCBncm91cHMgZnJvbSBBUEkgYW5kIHJldHVybnMgaXQgYXMgYW4gb2JzZXJ2YWJsZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXBJZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R3JvdXBUeXBlUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0QWxsb3dlZFBhcmVudEdyb3Vwcyhncm91cElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFBhcmVudEdyb3Vwc0luZm9bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvYWxsb3dlZFBhcmVudEdyb3Vwcy8ke2dyb3VwSWR9YClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlPy5ib2R5O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhbGwgdGhlIGdyb3VwcyBiYXNlZCBvbiBwYXNzZWQgZ3JvdXAgSWQgYW5kIGdyb3VwIHR5cGUuXHJcbiAgICogQHBhcmFtIHtHZXRHcm91cHNQYXlsb2FkfSBnZXRHcm91cHNQYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwcyhnZXRHcm91cHNQYXlsb2FkOiBHZXRHcm91cHNQYXlsb2FkKTogT2JzZXJ2YWJsZTxHZXRHcm91cFJlc3BvbnNlPiB7XHJcbiAgICBsZXQgdXJsID0gJ3Jvb3RHcm91cHMnO1xyXG4gICAgaWYgKGdldEdyb3Vwc1BheWxvYWQuZ3JvdXBJZClcclxuICAgICAgdXJsID0gJ2ltbUNoaWxkR3JvdXBzQnlHcm91cElkLycgKyBnZXRHcm91cHNQYXlsb2FkLmdyb3VwSWQ7XHJcbiAgICBlbHNlIGlmIChnZXRHcm91cHNQYXlsb2FkLmdyb3VwVHlwZUlkKVxyXG4gICAgICB1cmwgPSAnZ3JvdXBzQnlHcm91cFR5cGUvJyArIGdldEdyb3Vwc1BheWxvYWQuZ3JvdXBUeXBlSWQ7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy8ke3VybH1gKS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgYSBncm91cCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge2dyb3VwSWR9IHN0cmluZyAtZ3JvdXBJZCBvZiB0aGUgZ3JvdXAgd2hpY2ggaXMgdG8gYmUgZGVsZXRlZFxyXG4gICAqIEByZXR1cm4geyp9ICB7T2JzZXJ2YWJsZTxhbnk+fSAtT2JzZXJ2YWJsZSByZXByZXNlbnRpbmcgdGhlIGdyb3VwIGRlbGV0aW9uIHJlc3BvbnNlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGRlbGV0ZUdyb3VwKGRlbGV0ZUdyb3VwUGF5bG9hZDogRGVsZXRlR3JvdXBQYXlsb2FkKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wdXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2RlbGV0ZWAsIGRlbGV0ZUdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgdXNlciBmcm9tIGdyb3VwIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvblxyXG4gICAqIEBwYXJhbSB7Z3JvdXBJZH0gc3RyaW5nIC1ncm91cElkIG9mIHRoZSBzZWxlY3RlZCBncm91cCBmcm9tIHdoZXJlIHNlbGVjdGVkIHVzZXIgdG8gYmUgZGVsZXRlZC5cclxuICAgKiBAcGFyYW0ge3VzZXJJZH0gQXJyYXkgLXVzZXIgaWRzIG9mIHNlbGVjdGVkIHVzZXJzIHdobyBhcmUgZGVsZXRlZCBmcm9tIHRoZSBzZWxlY3RlZCBncm91cFxyXG4gICAqIEByZXR1cm4geyp9ICB7T2JzZXJ2YWJsZTxhbnk+fSAtT2JzZXJ2YWJsZSByZXByZXNlbnRpbmcgdGhlIGdyb3VwIGRlbGV0aW9uIHJlc3BvbnNlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGRlbGV0ZVVzZXJzR3JvdXAoXHJcbiAgICBkZWxldGVVc2VyR3JvdXBQYXlsb2FkOiBEZWxldGVVc2VyR3JvdXBQYXlsb2FkXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvZGVsZXRlR3JvdXBVc2Vyc2AsXHJcbiAgICAgICAgZGVsZXRlVXNlckdyb3VwUGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBvc3RzIGNyZWF0ZSBncm91cCBmb3JtIGRhdGEgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlIGZvciBjcmVhdGluZyBuZXcgZ3JvdXAuXHJcbiAgICogQHBhcmFtIHtDcmVhdGVHcm91cFBheWxvYWR9IGNyZWF0ZUdyb3VwUGF5bG9hZCAtY3JlYXRlIGdyb3VwIGZvcm0gZGF0YSB3aGljaCBpbmNsdWRlcyBncm91cCBuYW1lLCB0eXBlLCBzaG9ydCBuYW1lLCBzY29wZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENyZWF0ZUdyb3VwUmVzcG9uc2U+fSAtcmV0dXJucyBjcmVhdGUgZ3JvdXAgQVBJIHJlc3BvbnNlIChzdWNjZXNzIG9yIGVycm9yKSBhcyBhbiBvYnNlcnZhYmxlLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjcmVhdGVHcm91cChcclxuICAgIGNyZWF0ZUdyb3VwUGF5bG9hZDogQ3JlYXRlR3JvdXBQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvY3JlYXRlYCwgY3JlYXRlR3JvdXBQYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGdyb3VwIGZvcm0gZGF0YSB0byBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHBhcmFtIHtFZGl0R3JvdXBQYXlsb2FkfSBlZGl0R3JvdXBQYXlsb2FkIC1lZGl0IGdyb3VwIGZvcm0gZGF0YSB3aGljaCBpbmNsdWRlcyBncm91cCBuYW1lLCBzaG9ydCBuYW1lLCBzY29wZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEVkaXRHcm91cFBheWxvYWQ+fSAtcmV0dXJucyBlZGl0IGdyb3VwIEFQSSByZXNwb25zZSAoc3VjY2VzcyBvciBlcnJvcikgYXMgYW4gb2JzZXJ2YWJsZS5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGVkaXRHcm91cChcclxuICAgIGVkaXRHcm91cFBheWxvYWQ6IEVkaXRHcm91cFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPENyZWF0ZUdyb3VwUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wdXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2VkaXRgLCBlZGl0R3JvdXBQYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIHBhcnNlIHRoZSBlcnJvciBjb2RlcyBhbmQgcmV0dXJuIHRoZSByZXNwZWN0aXZlIGVycm9yIG1lc3NhZ2UgZm9yIGVhY2ggY29kZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBlcnJvckNvZGVzXHJcbiAgICogQHJldHVybiB7c3RyaW5nW119IGVycm9yTWVzc2FnZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgcGFyc2VFcnJvck1lc3NhZ2UoZXJyb3JDb2Rlczogc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IGVycm9yTWVzc2FnZTogc3RyaW5nW10gPSBbXTtcclxuICAgIGVycm9yQ29kZXM/LmZvckVhY2goKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2VLZXkgPSBlcnJvckNvZGVzW2luZGV4XSBhcyBrZXlvZiB0eXBlb2YgdGhpcy5ncm91cHNUZXh0O1xyXG4gICAgICBlcnJvck1lc3NhZ2UucHVzaChcclxuICAgICAgICB0aGlzLmdyb3Vwc1RleHRbZXJyb3JNZXNzYWdlS2V5XSA/PyB0aGlzLmdyb3Vwc1RleHQ/LmRlZmF1bHRcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgY3VzdG9tIEFQSSBlcnJvcnM6IG1hcHMgQkUgZXJyb3IgY29kZXMgdG8gbWVzc2FnZXMgYW5kIHNob3dzIGFuXHJcbiAgICogYWxlcnQuIE1pcnJvcnMgdGhlIGV2ZW50cy1hbmQtbWVldGluZ3MgZXJyb3IgaGFuZGxpbmcgc28gcmVjaXByb2NhbC1jcmVkaXRcclxuICAgKiBmYWlsdXJlcyAoZS5nLiBNVEctMDExIGR1cGxpY2F0ZSwgTVRHLTAxMiBwZXJtaXNzaW9uKSBzdXJmYWNlIGNvbnNpc3RlbnRseS5cclxuICAgKiBAcGFyYW0geyp9IGVycm9yIHRoZSBIdHRwRXJyb3JSZXNwb25zZSBmcm9tIGEgZmFpbGVkIGNhbGxcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG93QWxlcnQ9dHJ1ZV0gd2hldGhlciB0byBkaXNwbGF5IHRoZSBhbGVydFxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBoYW5kbGVFcnJvcnMoZXJyb3I6IGFueSwgc2hvd0FsZXJ0ID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yQ29kZXMpICYmICFlcnJvcj8uZXJyb3I/LnN0YXR1cykge1xyXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0aGlzLnBhcnNlRXJyb3JNZXNzYWdlKGVycm9yQ29kZXMpO1xyXG4gICAgICBpZiAoc2hvd0FsZXJ0KSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2U/LnNob3dNZXNzYWdlKHtcclxuICAgICAgICAgIHN0YXR1czogJ2N1c3RvbScsXHJcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXHJcbiAgICAgICAgICBhbGVydFR5cGU6IEFsZXJ0VHlwZS5FUlJPUixcclxuICAgICAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgc2VsZWN0ZWQgZ3JvdXAgaW5mby5cclxuICAgKiBAcGFyYW0geyhHcm91cEluZm8gfCB1bmRlZmluZWQpfSBzZWxlY3RlZEdyb3VwSW5mbyAtc2VsZWN0ZWQgZ3JvdXAgaW5mby5cclxuICAgKiBAcGFyYW0geyhHcm91cEluZm8gfCB1bmRlZmluZWQpfSBbc2VsZWN0ZWRHcm91cFBhcmVudEluZm9dIC1zZWxlY3RlZCBwYXJlbnQgZ3JvdXAgaW5mby5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFNlbGVjdGVkR3JvdXBJbmZvKFxyXG4gICAgc2VsZWN0ZWRHcm91cEluZm86IEdyb3VwSW5mbyB8IHVuZGVmaW5lZCxcclxuICAgIHNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvPzogR3JvdXBJbmZvIHwgdW5kZWZpbmVkXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBJbmZvID0gc2VsZWN0ZWRHcm91cEluZm87XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvID0gc2VsZWN0ZWRHcm91cFBhcmVudEluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBncm91cCBpbmZvLlxyXG4gICAqIEByZXR1cm4geyhHcm91cEluZm8gfCB1bmRlZmluZWQpfSAtZ3JvdXAgaW5mby5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFNlbGVjdGVkR3JvdXBJbmZvKCk6IEdyb3VwSW5mbyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEdyb3VwSW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHNlbGVjdGVkIGdyb3VwIHBhcmVudCBncm91cCBpbmZvLlxyXG4gICAqIEByZXR1cm4geyhHcm91cEluZm8gfCB1bmRlZmluZWQpfSAtZ3JvdXAgaW5mby5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvKCk6IEdyb3VwSW5mbyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEdyb3VwUGFyZW50SW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgZ3JvdXAgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcGFyYW0ge0dyb3VwRnVuY3Rpb25UeXBlfSBncm91cEZ1bmN0aW9uVHlwZSAtZ3JvdXAgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldEdyb3VwRnVuY3Rpb25UeXBlKGdyb3VwRnVuY3Rpb25UeXBlOiBHcm91cEZ1bmN0aW9uVHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cEZ1bmN0aW9uVHlwZSA9IGdyb3VwRnVuY3Rpb25UeXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBncm91cCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEByZXR1cm4ge0dyb3VwRnVuY3Rpb25UeXBlfSAtZ3JvdXAgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwRnVuY3Rpb25UeXBlKCk6IEdyb3VwRnVuY3Rpb25UeXBlIHtcclxuICAgIHJldHVybiB0aGlzLmdyb3VwRnVuY3Rpb25UeXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgdXNlcnMgZm9yIHRoZSBnaXZlbiBncm91cCBpZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXBJZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gIGdldEdyb3VwVXNlcnMoXHJcbiAgICBncm91cElkOiBzdHJpbmcsXHJcbiAgICBzb3J0Q29sdW1uOiBzdHJpbmcsXHJcbiAgICBzb3J0RGlyZWN0aW9uOiBib29sZWFuXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci8ke2dyb3VwSWR9P3NvcnRDb2x1bW49JHtzb3J0Q29sdW1ufSZhc2NlbmRpbmdPcmRlcj0ke3NvcnREaXJlY3Rpb259YFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGJhc2VkIG9uIHRoZSBmaWx0ZXJlZCByb2xlcy5cclxuICAgKiBAcGFyYW0ge0ZpbHRlclVzZXJzUGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwVXNlcnNCeVJvbGVzKFxyXG4gICAgcGF5bG9hZDogRmlsdGVyVXNlcnNQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvZ3JvdXBVc2Vyc0ZpbHRlcmAsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGJhc2VkIG9uIHNlYXJjaGVkIG5hbWUgb3IgZW1haWxcclxuICAgKiBAcGFyYW0ge1NlYXJjaFVzZXJzUGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNlYXJjaEdyb3VwVXNlcnMoXHJcbiAgICBwYXlsb2FkOiBTZWFyY2hVc2Vyc1BheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9ncm91cFVzZXJzU2VhcmNoYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgcm9sZXMgYmFzZWQgb24gdGhlIGdyb3VwIHR5cGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwVHlwZUlkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDaGVja2JveE9wdGlvbltdPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgZ2V0R3JvdXBUeXBlUm9sZXMoZ3JvdXBUeXBlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hlY2tib3hPcHRpb25bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvY29uZmlnL3JvbGVzQnlHcm91cFR5cGUvJHtncm91cFR5cGVJZH1gXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgcm9sZXNPcHRpb246IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICAgICAgICAgIGNvbnN0IG1lbWJlclR5cGVzOiBSb2xlW10gPSBbXTtcclxuICAgICAgICAgIHJlc3BvbnNlPy5ib2R5Py5mb3JFYWNoKChyb2xlOiBSb2xlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyb2xlPy5yb2xlVHlwZU5hbWUgPT09IFJvbGVUeXBlLk1FTUJFUl9MRVZFTCkge1xyXG4gICAgICAgICAgICAgIG1lbWJlclR5cGVzLnB1c2gocm9sZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcm9sZXNPcHRpb24ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogcm9sZS5yb2xlSWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiByb2xlLnJvbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5zZXRHcm91cFR5cGVVc2VyUm9sZXMocm9sZXNPcHRpb24pO1xyXG4gICAgICAgICAgdGhpcy5zZXRNZW1iZXJUeXBlcyhtZW1iZXJUeXBlcyk7XHJcbiAgICAgICAgICByZXR1cm4gcm9sZXNPcHRpb247XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIGNsYXNzaWZpY2F0aW9ucyBtYXN0ZXIgZGF0YSBmcm9tIGNvbmZpZ3VyYXRpb24gYW5kIHJldHVybnMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDbGFzc2lmaWNhdGlvblJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldENsYXNzaWZpY2F0aW9ucygpOiBPYnNlcnZhYmxlPENsYXNzaWZpY2F0aW9uUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9jbGFzc2lmaWNhdGlvbmApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdHJ1ZSBpZiBsb2dnZWQgaW4gdXNlciBpcyBhZG1pbi5cclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgaXNBZG1pblVzZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFjY2VzcyhQZXJtaXNzaW9uVHlwZS5NQU5BR0VfU1lTVEVNX1VTRVJTKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHVzZXIgaG9sZHMgdGhlIG5lZ2F0aXZlIHBlcm1pc3Npb24gdGhhdCByZXN0cmljdHMgYWxsXHJcbiAgICogZ3JvdXAgYW5kIHJvc3RlciB3cml0ZSBhY3Rpb25zLCByZWdhcmRsZXNzIG9mIGFueSBvdGhlciBncmFudGVkIHBlcm1pc3Npb24uXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGlzR3JvdXBzQW5kUm9zdGVyc1Jlc3RyaWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFjY2VzcyhQZXJtaXNzaW9uVHlwZS5SRVNUUklDVF9HUk9VUFNfQU5EX1JPU1RFUlMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDb25jYXRlbmF0ZXMgdGhlIGdyb3VwIHVzZXJzIGFzc2lnbmVkIHJvbGVzIG5hbWUgc2VwYXJhdGVkIGJ5IGNvbW1hIGFzIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgZ3JvdXAgdXNlcnMgaW4gYW4gYXJyYXkuXHJcbiAgICogQHBhcmFtIHtHZXRHcm91cFVzZXJzUmVzcG9uc2V9IHJlc3BvbnNlXHJcbiAgICogQHJldHVybiB7VXNlcltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgdHJhbnNmb3JtVXNlclJvbGVzTmFtZUFzU3RyaW5nKHJlc3BvbnNlOiBHZXRHcm91cFVzZXJzUmVzcG9uc2UpOiBVc2VyW10ge1xyXG4gICAgY29uc3QgdXNlcnM6IFVzZXJbXSA9IFtdO1xyXG4gICAgdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zID0gW107XHJcbiAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBjbGFzc2lmaWNhdGlvbkRlc2MgPVxyXG4gICAgICAgIGl0ZW0uY2xhc3NpZmljYXRpb24/LmNsYXNzaWZpY2F0aW9uTmFtZSArXHJcbiAgICAgICAgJyAoJyArXHJcbiAgICAgICAgaXRlbS5jbGFzc2lmaWNhdGlvbj8uY2xhc3NpZmljYXRpb25EZXNjICtcclxuICAgICAgICAnKSc7XHJcbiAgICAgIGNvbnN0IHJvbGVzTGlzdCA9IGl0ZW0/LnJvbGVzTGlzdD8ucmVkdWNlKFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgKHJvbGVMaXN0OiBhbnksIHJvbGU6IFJvbGUpID0+IHtcclxuICAgICAgICAgIHJvbGVMaXN0W1xyXG4gICAgICAgICAgICByb2xlLnJvbGVUeXBlTmFtZSA9PT0gUm9sZVR5cGUuTUVNQkVSX0xFVkVMID8gJ21lbWJlclR5cGUnIDogJ3JvbGVzJ1xyXG4gICAgICAgICAgXS5wdXNoKHJvbGU/LnJvbGVOYW1lKTtcclxuICAgICAgICAgIHJldHVybiByb2xlTGlzdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgbWVtYmVyVHlwZTogW10sIHJvbGVzOiBbXSB9XHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucmVwcmVzZW50aW5nT3JnYW5pemF0aW9ucz8ucHVzaCh7XHJcbiAgICAgICAgdXNlcklkOiBpdGVtPy51c2VySWQsXHJcbiAgICAgICAgb3JnYW5pemF0aW9uczogaXRlbT8ub3JnYW5pemF0aW9ucyxcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IG9yZ2FuaXphdGlvbnMgPSBpdGVtPy5vcmdhbml6YXRpb25zXHJcbiAgICAgICAgPyBpdGVtPy5vcmdhbml6YXRpb25zPy5tYXAoKG9yZykgPT4gb3JnPy5vcmdOYW1lKS5qb2luKCc7ICcpXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgICB1c2Vycy5wdXNoKHtcclxuICAgICAgICB1c2VySWQ6IGl0ZW0udXNlcklkLFxyXG4gICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICBlbWFpbDogaXRlbS5lbWFpbCxcclxuICAgICAgICByb2xlOiByb2xlc0xpc3Q/LnJvbGVzPy5sZW5ndGggPyByb2xlc0xpc3Q/LnJvbGVzPy5qb2luKCcsICcpIDogbnVsbCxcclxuICAgICAgICBjbGFzc2lmaWNhdGlvbjogaXRlbS5jbGFzc2lmaWNhdGlvbj8uY2xhc3NpZmljYXRpb25JZFxyXG4gICAgICAgICAgPyBjbGFzc2lmaWNhdGlvbkRlc2NcclxuICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICBtZW1iZXJTdGF0dXM6IHJvbGVzTGlzdD8ubWVtYmVyVHlwZT8ubGVuZ3RoXHJcbiAgICAgICAgICA/IHJvbGVzTGlzdD8ubWVtYmVyVHlwZVswXVxyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIG9yZ2FuaXphdGlvbjogb3JnYW5pemF0aW9ucyxcclxuICAgICAgICBlbXBsb3llcjogaXRlbS5lbXBsb3llcj8ub3JnTmFtZSA/PyBudWxsLFxyXG4gICAgICAgIHBob25lQ291bnRyeUNvZGU6IGl0ZW0ucGhvbmVDb3VudHJ5Q29kZSA/PyBudWxsLFxyXG4gICAgICAgIHBob25lTnVtYmVyOiBpdGVtLnBob25lTnVtYmVyID8/IG51bGwsXHJcbiAgICAgICAgYWRkcmVzczogaXRlbS5hZGRyZXNzID8/IG51bGwsXHJcbiAgICAgICAgY2FuRGVsZXRlOiAhKFxyXG4gICAgICAgICAgaXRlbT8udXNlcklkID09PSB0aGlzLnVzZXJJbmZvPy51c2VySWQgJiZcclxuICAgICAgICAgIHRoaXMuaXNBZG1pblVzZXIoKSAmJlxyXG4gICAgICAgICAgdGhpcy5nZXRCdXNpbmVzc1J1bGVPZlNlbGVjdGVkR3JvdXAoKT8uaXNBZG1pblxyXG4gICAgICAgICksXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdXNlcnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgZm9ybWF0dGVkIGdyb3VwIHR5cGVzLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBUeXBlQ29uZmlndXJhdGlvbltdfSBncm91cFR5cGVSZXNwb25zZVxyXG4gICAqIEByZXR1cm4ge0dyb3VwVHlwZUNvbmZpZ1ZhbHVlfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Rm9ybWF0dGVkR3JvdXBUeXBlcyhcclxuICAgIGdyb3VwVHlwZVJlc3BvbnNlOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW11cclxuICApOiBHcm91cFR5cGVDb25maWdWYWx1ZSB7XHJcbiAgICBjb25zdCBncm91cFR5cGVzOiBHcm91cFR5cGVDb25maWdWYWx1ZSA9IHt9O1xyXG4gICAgZ3JvdXBUeXBlUmVzcG9uc2UuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBncm91cFR5cGVzW2l0ZW0uY29uZmlnRmllbGRJZF0gPSBpdGVtLmNvbmZpZ0ZpZWxkVmFsdWU7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncm91cFR5cGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBncm91cCB1c2VyIGRldGFpbHMgaWYgZW1haWwgaXMgZm91bmQsIGVsc2UgdGhyb3dzIGVycm9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U2VhcmNoVXNlckJ5RW1haWxSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRVc2VyQnlFbWFpbChlbWFpbDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWFyY2hVc2VyQnlFbWFpbFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy91c2Vycy91c2VyQnlFbWFpbC8ke2VtYWlsfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVzZXIgZGV0YWlscyBmb3IgdGhlIHNlbGVjdGVkIGdyb3VwXHJcbiAgICogQHBhcmFtIHtHZXRVc2VyRGV0YWlsc1BheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cFVzZXJEZXRhaWxzKFxyXG4gICAgcGF5bG9hZDogR2V0VXNlckRldGFpbHNQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvdXNlckRldGFpbHNgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFBvc3RzIGFkZCBuZXcgdXNlciBmb3JtIGRhdGEgdG8gdGhlIEFQSSBmb3IgdGhlIHNlbGVjdGVkIGdyb3VwIGFuZCByZXR1cm5zIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgcmVzcG9uc2UuXHJcbiAgICogQHBhcmFtIHsoQWRkT3JFZGl0VXNlclBheWxvYWRcclxuICAgKiAgICAgICB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCl9IEFkZE9yRWRpdFVzZXJQYXlsb2FkXHJcbiAgICogQHBhcmFtIHtHcm91cFJvc3RlclR5cGV9IGdyb3VwUm9zdGVyVHlwZVxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGFkZE5ld0dyb3VwVXNlcihcclxuICAgIEFkZE9yRWRpdFVzZXJQYXlsb2FkOlxyXG4gICAgICB8IEFkZE9yRWRpdFVzZXJQYXlsb2FkXHJcbiAgICAgIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvY3JlYXRlR3JvdXBVc2VyUm9sZWAsXHJcbiAgICAgICAgQWRkT3JFZGl0VXNlclBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBsb2FkZWQgZ3JvdXAgdHlwZSB1c2VyIHJvbGVzXHJcbiAgICogQHBhcmFtIHtDaGVja2JveE9wdGlvbltdfSB1c2VyUm9sZXNcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldEdyb3VwVHlwZVVzZXJSb2xlcyh1c2VyUm9sZXM6IENoZWNrYm94T3B0aW9uW10pOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBUeXBlUm9sZXMgPSB1c2VyUm9sZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBncm91cCB0eXBlIHVzZXIgcm9sZXMuXHJcbiAgICogQHJldHVybiB7Q2hlY2tib3hPcHRpb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwVHlwZVVzZXJSb2xlcygpOiBDaGVja2JveE9wdGlvbltdIHtcclxuICAgIHRoaXMuZ3JvdXBUeXBlUm9sZXM/Lm1hcCgob3B0aW9uKSA9PiAob3B0aW9uLmNoZWNrZWQgPSBmYWxzZSkpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBUeXBlUm9sZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCB1c2VyIGluZm8uXHJcbiAgICogQHBhcmFtIHtHcm91cFVzZXJJbmZvfSB1c2VySW5mb1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0U2VsZWN0ZWRVc2VySW5mbyh1c2VySW5mbzogR3JvdXBVc2VySW5mbyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdXNlckluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHNlbGVjdGVkIHVzZXIgaW5mby5cclxuICAgKiBAcmV0dXJuIHtHcm91cFVzZXJJbmZvfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRVc2VySW5mbygpOiBHcm91cFVzZXJJbmZvIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVXNlckluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGdyb3VwIHVzZXIgcm9sZXMgYW5kIG90aGVyIGRldGFpbHMgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7KEFkZE9yRWRpdFVzZXJQYXlsb2FkIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkKX0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGVkaXRHcm91cHNVc2VyUm9sZShcclxuICAgIHBheWxvYWQ6IEFkZE9yRWRpdFVzZXJQYXlsb2FkIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wdXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9lZGl0R3JvdXBVc2VyUm9sZWAsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgcm9zdGVyIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQHBhcmFtIHtSb3N0ZXJGdW5jdGlvblR5cGV9IHJvc3RlckZ1bmN0aW9uVHlwZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0Um9zdGVyRnVuY3Rpb25UeXBlKHJvc3RlckZ1bmN0aW9uVHlwZTogUm9zdGVyRnVuY3Rpb25UeXBlKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvc3RlckZ1bmN0aW9uVHlwZSA9IHJvc3RlckZ1bmN0aW9uVHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgcm9zdGVyIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQHJldHVybiB7Um9zdGVyRnVuY3Rpb25UeXBlfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Um9zdGVyRnVuY3Rpb25UeXBlKCk6IFJvc3RlckZ1bmN0aW9uVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3N0ZXJGdW5jdGlvblR5cGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwcyBiYXNlZCBvbiB0aGUgc2VhcmNoIGJ5IGdyb3VwIG5hbWUgb3IgYWNyb255bS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybVxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdyb3Vwc0J5TmFtZUFjcm9ueW0oXHJcbiAgICBzZWFyY2hUZXJtOiBzdHJpbmcsXHJcbiAgICBmaWx0ZXJlZEdyb3VwVHlwZT86IG51bWJlclxyXG4gICk6IE9ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT4ge1xyXG4gICAgY29uc3Qgc2VhcmNoR3JvdXBzVXJsID0gYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvZ3JvdXBzQnlOYW1lQWNyb255bT9uYW1lPSR7c2VhcmNoVGVybX1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoXHJcbiAgICAgICAgZmlsdGVyZWRHcm91cFR5cGVcclxuICAgICAgICAgID8gc2VhcmNoR3JvdXBzVXJsICsgYCZncm91cFR5cGU9JHtmaWx0ZXJlZEdyb3VwVHlwZX1gXHJcbiAgICAgICAgICA6IHNlYXJjaEdyb3Vwc1VybFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdXNlciBncm91cCBwZXJtaXNzaW9uc1xyXG4gICAqIEBwYXJhbSB7R3JvdXBQZXJtaXNzaW9uW119IHVzZXJHcm91cFBlcm1pc3Npb25zXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRVc2VyR3JvdXBQZXJtaXNzaW9ucyh1c2VyR3JvdXBQZXJtaXNzaW9uczogR3JvdXBQZXJtaXNzaW9uW10pIHtcclxuICAgIHRoaXMudXNlckdyb3VwUGVybWlzc2lvbnMgPSB1c2VyR3JvdXBQZXJtaXNzaW9ucztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdXNlciBncm91cCBwZXJtaXNzaW9uc1xyXG4gICAqIEByZXR1cm4ge0dyb3VwUGVybWlzc2lvbltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0VXNlckdyb3VwUGVybWlzc2lvbnMoKTogR3JvdXBQZXJtaXNzaW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlckdyb3VwUGVybWlzc2lvbnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGxvZ2dlZCBJbiB1c2VyIGluZm9ybWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7TG9nZ2VkSW5Vc2VySW5mb30gdXNlckluZm9cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFVzZXJJbmZvKHVzZXJJbmZvOiBMb2dnZWRJblVzZXJJbmZvKTogdm9pZCB7XHJcbiAgICB0aGlzLnVzZXJJbmZvID0gdXNlckluZm87XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGxvZ2dlZCBpbiB1c2VyIGluZm9ybWF0aW9uLiBGYWxscyBiYWNrIHRvIHRoZSBVU0VSX0lORk8gYmxvYlxyXG4gICAqIHRoZSBob3N0IGFwcCBwZXJzaXN0cyB0byBsb2NhbCBzdG9yYWdlIHdoZW4gdGhlIHVzZXJJbmZvIGlucHV0IGhhc24ndFxyXG4gICAqIGJlZW4gc2V0IHlldCAoZS5nLiBob3N0IHdpcmluZyBub3QgY29tcGxldGVkIG9yIHRpbWluZyByYWNlIG9uIGluaXQpLlxyXG4gICAqIEByZXR1cm4ge0xvZ2dlZEluVXNlckluZm99XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRVc2VySW5mbygpOiBMb2dnZWRJblVzZXJJbmZvIHtcclxuICAgIGlmICh0aGlzLnVzZXJJbmZvPy5hcHBJZCkgcmV0dXJuIHRoaXMudXNlckluZm87XHJcbiAgICBjb25zdCBzdG9yZWRVc2VySW5mbyA9IHRoaXMuc3RvcmFnZVNlcnZpY2U/LmdldFZhbHVlKFN0b3JhZ2VLZXlzLlVTRVJfSU5GTyk7XHJcbiAgICByZXR1cm4gc3RvcmVkVXNlckluZm8/LmFwcElkID8gc3RvcmVkVXNlckluZm8gOiB0aGlzLnVzZXJJbmZvO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgcGVybWlzc2lvbiBiYXNlZCBhY2Nlc3MgZm9yIHByb3ZpZGVkIGZlYXR1cmUuXHJcbiAgICogQ2hlY2tzIGZvciBncm91cCBsZXZlbCBwZXJtaXNzaW9ucywgYW5kIHByb3ZpZGVzIGFjY2VzcyBiYXNlZCBvbiBpbmRpdmlkdWFsIGdyb3VwIHBlcm1pc3Npb25zLlxyXG4gICAqIEZvciBnbG9iYWwgcGVybWlzc2lvbnMgcHJvdmlkZXMgYWNjZXNzIGFjcm9zcyB0aGUgaW5kaXZpZHVhbCBncm91cHMgb3IgU3lzdGVtIGdyb3Vwcy5cclxuICAgKiBAcGFyYW0ge1Blcm1pc3Npb25UeXBlfSBwZXJtaXNzaW9uVHlwZVxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICB2YWxpZGF0ZUFjY2VzcyhcclxuICAgIHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZSxcclxuICAgIHBlcm1pc3Npb25zPzogVXNlclBlcm1pc3Npb25bXSB8IG51bGxcclxuICApOiBib29sZWFuIHtcclxuICAgIGlmIChwZXJtaXNzaW9ucykge1xyXG4gICAgICBjb25zdCB1c2VyUGVybWlzc2lvbnNUb0dyb3VwID1cclxuICAgICAgICB0aGlzLnVzZXJQZXJtaXNzaW9uc1NlcnZpY2UuZmlsdGVyVXNlckdyb3VwUGVybWlzc2lvbnMoXHJcbiAgICAgICAgICBwZXJtaXNzaW9ucyxcclxuICAgICAgICAgIHRoaXMuZ3JvdXBQZXJtaXNzaW9uc1NlcnZpY2UuZ2V0R3JvdXBQZXJtaXNzaW9ucygpXHJcbiAgICAgICAgKTtcclxuICAgICAgcmV0dXJuIHRoaXMudXNlclBlcm1pc3Npb25zU2VydmljZS52YWxpZGF0ZUFjY2Vzc1Blcm1pc3Npb24oXHJcbiAgICAgICAgcGVybWlzc2lvblR5cGUsXHJcbiAgICAgICAgdXNlclBlcm1pc3Npb25zVG9Hcm91cFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudXNlclBlcm1pc3Npb25zU2VydmljZS52YWxpZGF0ZUFjY2Vzc1Blcm1pc3Npb24oXHJcbiAgICAgIHBlcm1pc3Npb25UeXBlLFxyXG4gICAgICB0aGlzLmdldFVzZXJHcm91cFBlcm1pc3Npb25zKClcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIHRoZSBsb2FkZWQgZ3JvdXAgdHlwZXMuXHJcbiAgICogQHBhcmFtIHtHcm91cFR5cGVDb25maWd1cmF0aW9uW119IGdyb3VwVHlwZXNcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldExvYWRlZEdyb3VwVHlwZXMoZ3JvdXBUeXBlczogR3JvdXBUeXBlQ29uZmlndXJhdGlvbltdKSB7XHJcbiAgICB0aGlzLmdyb3VwVHlwZXMgPSBncm91cFR5cGVzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGxvYWRlZCBncm91cCB0eXBlcy5cclxuICAgKiBAcmV0dXJuIHtHcm91cFR5cGVDb25maWd1cmF0aW9uW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRMb2FkZWRHcm91cFR5cGVzKCk6IEdyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFR5cGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09yZ2FuaXphdGlvblJlcXVlc3RQYXlsb2FkfSBvcmdSZXF1ZXN0UGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8T3JnYW5pemF0aW9uUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0T3JnYW5pemF0aW9ucyhcclxuICAgIG9yZ1JlcXVlc3RQYXlsb2FkOiBPcmdhbml6YXRpb25SZXF1ZXN0UGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8T3JnYW5pemF0aW9uUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvb3JnYW5pemF0aW9uc2AsXHJcbiAgICAgICAgb3JnUmVxdWVzdFBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGdyb3VwIHR5cGUgY29uZmlndXJhdGlvbiBCdXNpbmVzcyBydWxlIGZvciB0aGUgc2VsZWN0ZWQgZ3JvdXAuXHJcbiAgICogQHJldHVybiB7KEJ1c2luZXNzUnVsZSAgfCB1bmRlZmluZWQpfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0QnVzaW5lc3NSdWxlT2ZTZWxlY3RlZEdyb3VwKCk6IEJ1c2luZXNzUnVsZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBidXNpbmVzc1J1bGUgPSB0aGlzLmdldExvYWRlZEdyb3VwVHlwZXMoKT8uZmluZChcclxuICAgICAgKGdyb3VwKSA9PiBncm91cD8uY29uZmlnRmllbGRJZCA9PT0gdGhpcy5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cFR5cGVcclxuICAgICk/LmNvbmZpZ0ZpZWxkVmFsdWU/LmJ1c2luZXNzUnVsZTtcclxuICAgIGlmKGJ1c2luZXNzUnVsZT8ucm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLkVOVElUWSlcclxuICAgICAgYnVzaW5lc3NSdWxlLnJvc3RlclR5cGUgPSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTDtcclxuICAgIHJldHVybiBidXNpbmVzc1J1bGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGZvcm0gc3VibWl0IGJ1dHRvbiBiYXNlZCBvbiBwYXNzZWQgcGFyYW1ldGVycy5cclxuICAgKiBAcGFyYW0ge0dyb3VwUm9zdGVyVHlwZX0gZ3JvdXBSb3N0ZXJUeXBlXHJcbiAgICogQHBhcmFtIHtGb3JtQ29udHJvbFN0YXR1c30gZm9ybVN0YXR1c1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHNlbGVjdGVkVXNlclJvbGVzXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGlzU3VibWl0QnV0dG9uRGlzYWJsZWQoXHJcbiAgICBncm91cFJvc3RlclR5cGU6IEdyb3VwUm9zdGVyVHlwZSxcclxuICAgIGZvcm1TdGF0dXM6IEZvcm1Db250cm9sU3RhdHVzLFxyXG4gICAgc2VsZWN0ZWRVc2VyUm9sZXM6IHN0cmluZ1tdXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTClcclxuICAgICAgcmV0dXJuIGZvcm1TdGF0dXMgPT09IEZvcm1TdGF0dXMuSU5WQUxJRDtcclxuICAgIHJldHVybiBzZWxlY3RlZFVzZXJSb2xlcz8ubGVuZ3RoID09PSAwIHx8IGZvcm1TdGF0dXMgPT09IEZvcm1TdGF0dXMuSU5WQUxJRDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgaXNQYXJlbnRHcm91cENoYW5nZWQgdHJ1ZSBvciBmYWxzZS5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUGFyZW50R3JvdXBDaGFuZ2VkXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRQYXJlbnRHcm91cENoYW5nZVN0YXR1cyhpc1BhcmVudEdyb3VwQ2hhbmdlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc1BhcmVudEdyb3VwQ2hhbmdlZCA9IGlzUGFyZW50R3JvdXBDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBpc1BhcmVudEdyb3VwQ2hhbmdlZCB2YWx1ZS5cclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0UGFyZW50R3JvdXBDaGFuZ2VTdGF0dXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc1BhcmVudEdyb3VwQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIG1lbWJlciB0eXBlcy5cclxuICAgKiBAcGFyYW0ge1JvbGVbXX0gbWVtYmVyVHlwZXNcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldE1lbWJlclR5cGVzKG1lbWJlclR5cGVzOiBSb2xlW10pOiB2b2lkIHtcclxuICAgIHRoaXMubWVtYmVyVHlwZXMgPSBtZW1iZXJUeXBlcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbWVtYmVyIHR5cGVzLlxyXG4gICAqIEByZXR1cm4ge1JvbGVbXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldE1lbWJlclR5cGVzKCk6IFJvbGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZW1iZXJUeXBlcztcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm5zIHRoZSB1bmlxdWUgY2FsbGluZyBjb2RlcyBkZXJpdmVkIGZyb20gcGhvbmUgY291bnRyeSBtZXRhZGF0YS4gKi9cclxuICBnZXRDb3VudHJ5Q2FsbGluZ0NvZGVzKCk6IFNlbGVjdE9wdGlvbltdIHtcclxuICAgIGNvbnN0IGRpYWxDb2RlcyA9IFtcclxuICAgICAgLi4ubmV3IFNldChDT1VOVFJZX0RJQUxfQ09ERVMubWFwKChjb3VudHJ5KSA9PiBjb3VudHJ5LmRpYWxDb2RlKSksXHJcbiAgICBdLnNvcnQoXHJcbiAgICAgIChmaXJzdCwgc2Vjb25kKSA9PlxyXG4gICAgICAgIE51bWJlcihmaXJzdC5zbGljZSgxKSkgLSBOdW1iZXIoc2Vjb25kLnNsaWNlKDEpKVxyXG4gICAgKTtcclxuICAgIHJldHVybiBkaWFsQ29kZXMubWFwKChkaWFsQ29kZSkgPT4gKHsgaWQ6IGRpYWxDb2RlLCBuYW1lOiBkaWFsQ29kZSB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzdG9yZWQgaW50ZXJlc3QtZm9ybSByZXNwb25zZXMgZm9yIGFuIGludGVyZXN0IHJlY29yZCwgZm9yIHRoZVxyXG4gICAqIFJvc3RlciBNYW5hZ2VtZW50IGFkbWluIFwiVmlldyBSZXNwb25zZXNcIiB2aWV3IChTUDNNLTQyOCwgUjguNykuXHJcbiAgICpcclxuICAgKiBHRVQge2FwaUJhc2VVcmx9L2dyb3Vwcy9pbnRlcmVzdC97aW50ZXJlc3RJZH0vcmVzcG9uc2VzXHJcbiAgICpcclxuICAgKiBUaGUgZW5kcG9pbnQgaXMga2V5ZWQgYnkgdGhlIGludGVyZXN0IHJlY29yZCBpZCAoe0Bjb2RlIEdJTlRfU0FBUFBTXy4uLn0pLFxyXG4gICAqIE5PVCB0aGUgZ3JvdXAgaWQsIGFuZCBpcyBndWFyZGVkIHNlcnZlci1zaWRlIGJ5IHJvc3Rlci12aWV3IHBlcm1pc3Npb25zXHJcbiAgICogKFZJRVdfR1JPVVBfTUVNQkVSUyBvbiB0aGUgZ3JvdXAgb3IgdGhlIHRlbmFudC13aWRlIFZJRVdfQUxMX1JPU1RFUlMpLiBUaGVcclxuICAgKiBiYXNlIFVSTCBhbHJlYWR5IGNhcnJpZXMgdGhlIHZlcnNpb24gc2VnbWVudCAoZS5nLiBgLi4uL3YxYCksIG1hdGNoaW5nIGV2ZXJ5XHJcbiAgICogb3RoZXIgR3JvdXBzU2VydmljZSBjYWxsIGJ1aWx0IGFzIGAke2FwaUJhc2VVcmx9L2dyb3Vwcy8uLi5gLCBzbyB0aGUgdmVyc2lvblxyXG4gICAqIGlzIG5vdCByZXBlYXRlZC4gVGhlIHJlc3BvbnNlIGVudmVsb3BlJ3MgYm9keSBpcyB0aGUgbGlzdCBvZiByZXNwb25zZXNcclxuICAgKiAobmV2ZXIgbnVsbCDigJQgYW4gZW1wdHkgbGlzdCBtZWFucyBubyBhbnN3ZXJzIHdlcmUgc3VibWl0dGVkKS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW50ZXJlc3RJZCAtIFRoZSBpbnRlcmVzdCByZWNvcmQgd2hvc2UgcmVzcG9uc2VzIGFyZSByZWFkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8SW50ZXJlc3RGb3JtUmVzcG9uc2VbXT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRJbnRlcmVzdFJlc3BvbnNlcyhcclxuICAgIGludGVyZXN0SWQ6IHN0cmluZ1xyXG4gICk6IE9ic2VydmFibGU8SW50ZXJlc3RGb3JtUmVzcG9uc2VbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvaW50ZXJlc3QvJHtpbnRlcmVzdElkfS9yZXNwb25zZXNgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiAocmVzcG9uc2U/LmJvZHkgYXMgSW50ZXJlc3RGb3JtUmVzcG9uc2VbXSkgPz8gW10pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgaW50ZXJlc3RlZC11c2VycyByb3N0ZXIgZm9yIGEgZ3JvdXAg4oCUIG9uZSByb3cgcGVyIGludGVyZXN0XHJcbiAgICogY2FycnlpbmcgdGhlIHVzZXIncyBuYW1lL2VtYWlsLCBvcmdhbml6YXRpb24gYWZmaWxpYXRpb25zLCBzdWJtaXR0ZWRcclxuICAgKiB0aW1lc3RhbXAsIHRoZSBncm91cCdzIGRlZmF1bHQgbWVtYmVyc2hpcCBsZXZlbCwgYW5kIHRoZSBncm91cCB0eXBlIGlkIOKAlCBzb1xyXG4gICAqIHRoZSBSb3N0ZXIgTWFuYWdlbWVudCBhZG1pbiBcIkludGVyZXN0ZWQgUm9zdGVyc1wiIHRhYiByZW5kZXJzIHRoZSB3aG9sZSBncm91cFxyXG4gICAqIGluIGEgc2luZ2xlIGNhbGwgKFNQM00tNDI4LCBSOC43KS5cclxuICAgKlxyXG4gICAqIFBPU1Qge2FwaUJhc2VVcmx9L2dyb3Vwcy9pbnRlcmVzdC9ncm91cC97Z3JvdXBJZH0vcmVzcG9uc2VzXHJcbiAgICpcclxuICAgKiBUaGUgc2VhcmNoIHRlcm0sIHBhZ2luYXRpb24gYW5kIHNvcnQgb3B0aW9ucyBhcmUgc2VudCBpbiB0aGUgcmVxdWVzdCBib2R5XHJcbiAgICogKHtAbGluayBJbnRlcmVzdGVkUm9zdGVyc1JlcXVlc3RQYXlsb2FkfSkgc28gdGhlIGJhY2tlbmQgY2FuIGZpbHRlciwgcGFnZVxyXG4gICAqIGFuZCBzb3J0IHRoZSByb3N0ZXIgc2VydmVyLXNpZGUuIEd1YXJkZWQgc2VydmVyLXNpZGUgYnkgcm9zdGVyLXZpZXdcclxuICAgKiBwZXJtaXNzaW9ucyAoVklFV19HUk9VUF9NRU1CRVJTIG9uIHRoZSBncm91cCBvciB0aGUgdGVuYW50LXdpZGVcclxuICAgKiBWSUVXX0FMTF9ST1NURVJTKS4gVGhlIGJhc2UgVVJMIGFscmVhZHkgY2FycmllcyB0aGUgdmVyc2lvbiBzZWdtZW50LFxyXG4gICAqIG1hdGNoaW5nIGV2ZXJ5IG90aGVyIEdyb3Vwc1NlcnZpY2UgY2FsbCBidWlsdCBhcyBgJHthcGlCYXNlVXJsfS9ncm91cHMvLi4uYCxcclxuICAgKiBzbyB0aGUgdmVyc2lvbiBpcyBub3QgcmVwZWF0ZWQuIFRoZSByZXNwb25zZSBlbnZlbG9wZSdzIGJvZHkgaXMgYW5cclxuICAgKiB7QGxpbmsgSW50ZXJlc3RlZFJvc3RlcnNSZXNwb25zZX06IHRoZSByb3N0ZXIgcm93cyBsaXZlIHVuZGVyIGBkYXRhYCAobmV2ZXJcclxuICAgKiBudWxsIOKAlCBhbiBlbXB0eSBsaXN0IG1lYW5zIHRoZSBncm91cCBoYXMgbm8gaW50ZXJlc3RzKSBhbG9uZ3NpZGUgdGhlIHBhZ2luZ1xyXG4gICAqIG1ldGFkYXRhIChgdG90YWxSZWNvcmRzYCwgYG9mZnNldGAsIGBwYWdlU2l6ZWApLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBncm91cElkIC0gVGhlIGdyb3VwIHdob3NlIGludGVyZXN0ZWQtdXNlcnMgcm9zdGVyIGlzIHJlYWQuXHJcbiAgICogQHBhcmFtIHtJbnRlcmVzdGVkUm9zdGVyc1JlcXVlc3RQYXlsb2FkfSBwYXlsb2FkIC0gU2VhcmNoL3BhZ2luYXRpb24vc29ydCBvcHRpb25zLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8SW50ZXJlc3RlZFJvc3RlcnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRJbnRlcmVzdFJlc3BvbnNlc0J5R3JvdXAoXHJcbiAgICBncm91cElkOiBzdHJpbmcsXHJcbiAgICBwYXlsb2FkOiBJbnRlcmVzdGVkUm9zdGVyc1JlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxJbnRlcmVzdGVkUm9zdGVyc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvaW50ZXJlc3QvZ3JvdXAvJHtncm91cElkfS9yZXNwb25zZXNgLFxyXG4gICAgICAgIHBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBib2R5ID0gcmVzcG9uc2U/LmJvZHkgYXMgSW50ZXJlc3RlZFJvc3RlcnNSZXNwb25zZSB8IG51bGw7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkYXRhOiBib2R5Py5kYXRhID8/IFtdLFxyXG4gICAgICAgICAgICB0b3RhbFJlY29yZHM6IGJvZHk/LnRvdGFsUmVjb3JkcyA/PyAwLFxyXG4gICAgICAgICAgICBvZmZzZXQ6IGJvZHk/Lm9mZnNldCA/PyAwLFxyXG4gICAgICAgICAgICBwYWdlU2l6ZTogYm9keT8ucGFnZVNpemUgPz8gMCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzL292ZXJyaWRlcyB0aGUgbWVtYmVyc2hpcCBsZXZlbCBmb3IgYW4gaW50ZXJlc3RlZCB1c2VyIGZyb20gdGhlIFJvc3RlclxyXG4gICAqIE1hbmFnZW1lbnQgYWRtaW4gXCJJbnRlcmVzdGVkIFJvc3RlcnNcIiB0YWIgKFNQM00tNDI4KS4gQ2FsbGVkIHdoZW4gdGhlIGFkbWluXHJcbiAgICogcGlja3MgYSB2YWx1ZSBpbiBhIHJvdydzIE1lbWJlciBMZXZlbCBkcm9wZG93bi5cclxuICAgKlxyXG4gICAqIFBVVCB7YXBpQmFzZVVybH0vZ3JvdXBzL2ludGVyZXN0L21lbWJlci1sZXZlbFxyXG4gICAqXHJcbiAgICogVGhlIGdyb3VwLCB1c2VyIGFuZCBzZWxlY3RlZCByb2xlIGlkIGFyZSBzZW50IGluIHRoZSByZXF1ZXN0IGJvZHlcclxuICAgKiAoe0BsaW5rIFVwZGF0ZU1lbWJlckxldmVsUGF5bG9hZH0pLiBHdWFyZGVkIHNlcnZlci1zaWRlIGJ5IHJvc3Rlci1tYW5hZ2VtZW50XHJcbiAgICogcGVybWlzc2lvbnMuIFRoZSBiYXNlIFVSTCBhbHJlYWR5IGNhcnJpZXMgdGhlIHZlcnNpb24gc2VnbWVudCwgbWF0Y2hpbmdcclxuICAgKiBldmVyeSBvdGhlciBHcm91cHNTZXJ2aWNlIGNhbGwgYnVpbHQgYXMgYCR7YXBpQmFzZVVybH0vZ3JvdXBzLy4uLmAsIHNvIHRoZVxyXG4gICAqIHZlcnNpb24gaXMgbm90IHJlcGVhdGVkLiBUaGUgcmVzcG9uc2UgZW52ZWxvcGUncyBib2R5IGlzIHJldHVybmVkIGFzLWlzLlxyXG4gICAqIEBwYXJhbSB7VXBkYXRlTWVtYmVyTGV2ZWxQYXlsb2FkfSBwYXlsb2FkIC0gR3JvdXAgKyB1c2VyICsgc2VsZWN0ZWQgcm9sZSBpZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPHVua25vd24+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgdXBkYXRlSW50ZXJlc3RNZW1iZXJMZXZlbChcclxuICAgIHBheWxvYWQ6IFVwZGF0ZU1lbWJlckxldmVsUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvaW50ZXJlc3QvbWVtYmVyLWxldmVsYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2U/LmJvZHkgPz8gbnVsbCksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBSZWNpcHJvY2FsIENyZWRpdCAoU1AzTS0yMilcclxuICAvLyBUaGUgcmVjaXByb2NhbCBjb250cm9sbGVyIGxpdmVzIG9uIHRoZSBNRUVUSU5HUyBzZXJ2aWNlLCByZWFjaGVkIHRocm91Z2ggdGhlXHJcbiAgLy8gZ2F0ZXdheS4gYXBpQmFzZVVybCA9IGFwcENvbmZpZy5iYXNlQXBpVXJsIChlbmRzIGluIGAvdjFgKSwgYW5kIHRoZSBnYXRld2F5XHJcbiAgLy8gcm91dGVzIHRoZSBtZWV0aW5ncyBzZXJ2aWNlIHVuZGVyIGAke2FwaUJhc2VVcmx9L21lZXRpbmdzYCAoc2FtZSBhcyBldmVyeSBvdGhlclxyXG4gIC8vIG1lZXRpbmdzL2V2ZW50cyBjYWxsLCBlLmcuIGAke2FwaUJhc2VVcmx9L21lZXRpbmdzL2V2ZW50Ly4uLmApLlxyXG4gIC8vXHJcbiAgLy8gVGhlIHJlY2lwcm9jYWwgY29udHJvbGxlciBzaXRzIG9uIHRoZSBtZWV0aW5ncyBzZXJ2aWNlIHVuZGVyIGBhZG1pbi9yZWNpcHJvY2FsLWNyZWRpdGAuXHJcbiAgLy8gYXBpQmFzZVVybCBhbHJlYWR5IGNhcnJpZXMgdGhlIHZlcnNpb24gc2VnbWVudCAoYC4uLi92MWApLCBhbmQgdGhlIGdhdGV3YXkgcm91dGVzXHJcbiAgLy8gdGhlIG1lZXRpbmdzIHNlcnZpY2UgdW5kZXIgYCR7YXBpQmFzZVVybH0vbWVldGluZ3NgLCBzbyB0aGUgdmVyc2lvbiBpcyBOT1QgcmVwZWF0ZWRcclxuICAvLyAobm8gc2Vjb25kIGAvdjFgIG9yIGAvYXBpL3YxYCkuIFRoZSBmdWxsIHBhdGggaXM6XHJcbiAgLy8gICBgJHthcGlCYXNlVXJsfS9tZWV0aW5ncy9hZG1pbi9yZWNpcHJvY2FsLWNyZWRpdC8uLi5gXHJcbiAgLy8gICA9IGh0dHBzOi8vc2FhcHBzYXBpZGV2LmllZWUub3JnL3YxL21lZXRpbmdzL2FkbWluL3JlY2lwcm9jYWwtY3JlZGl0Ly4uLlxyXG4gIC8vIEV2ZXJ5IG1ldGhvZCBidWlsZHMgVVJMcyBmcm9tIFJFQ0lQUk9DQUxfQkFTRV9QQVRIIGJlbG93LlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvKiogUGF0aCBwcmVmaXggKHJlbGF0aXZlIHRvIGFwaUJhc2VVcmwpIGZvciB0aGUgcmVjaXByb2NhbC1jcmVkaXQgZW5kcG9pbnRzLiAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgUkVDSVBST0NBTF9CQVNFX1BBVEggPSAnbWVldGluZ3MvYWRtaW4vcmVjaXByb2NhbC1jcmVkaXQnO1xyXG5cclxuICAvKipcclxuICAgKiBCdWlsZCBhIHJlY2lwcm9jYWwtY3JlZGl0IGVuZHBvaW50IFVSTCBmcm9tIGFwaUJhc2VVcmwgKyB0aGUgYmFzZSBwYXRoLFxyXG4gICAqIGd1YXJkaW5nIGFnYWluc3QgYWNjaWRlbnRhbCBkb3VibGUgc2xhc2hlcyBpZiBhcGlCYXNlVXJsIGhhcyBhIHRyYWlsaW5nIHNsYXNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3VmZml4XSBleHRyYSBwYXRoL3F1ZXJ5IGFwcGVuZGVkIGFmdGVyIHRoZSBiYXNlIHBhdGguXHJcbiAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYnVpbGRSZWNpcHJvY2FsVXJsKHN1ZmZpeCA9ICcnKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmFwaUJhc2VVcmw/LnJlcGxhY2UoL1xcLyskLywgJycpID8/ICcnO1xyXG4gICAgcmV0dXJuIGAke2Jhc2V9LyR7dGhpcy5SRUNJUFJPQ0FMX0JBU0VfUEFUSH0ke3N1ZmZpeH1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2ggdGhlIGZvcmVpZ24gZ3JvdXBzIGF2YWlsYWJsZSBmb3IgcmVjaXByb2NhbCBjcmVkaXQgZm9yIGEgaG9tZSBncm91cC5cclxuICAgKiBHRVQge2FwaUJhc2VVcmx9L21lZXRpbmdzL2FkbWluL3JlY2lwcm9jYWwtY3JlZGl0L3tob21lR3JvdXBJZH0vYXZhaWxhYmxlLWdyb3Vwc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBob21lR3JvdXBJZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UmVjaXByb2NhbENyZWRpdFJlc3BvbnNlPEF2YWlsYWJsZUZvcmVpZ25Hcm91cFtdPj59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRBdmFpbGFibGVSZWNpcHJvY2FsR3JvdXBzKFxyXG4gICAgaG9tZUdyb3VwSWQ6IHN0cmluZ1xyXG4gICk6IE9ic2VydmFibGU8UmVjaXByb2NhbENyZWRpdFJlc3BvbnNlPEF2YWlsYWJsZUZvcmVpZ25Hcm91cFtdPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEodGhpcy5idWlsZFJlY2lwcm9jYWxVcmwoYC8ke2hvbWVHcm91cElkfS9hdmFpbGFibGUtZ3JvdXBzYCkpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlKSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWQgZXhpc3RpbmcgcmVjaXByb2NhbC1jcmVkaXQgY29uZmlnIHJvd3MgZm9yIGEgaG9tZSBncm91cCAoZWRpdCBwcmVmaWxsKS5cclxuICAgKiBHRVQge2FwaUJhc2VVcmx9L21lZXRpbmdzL2FkbWluL3JlY2lwcm9jYWwtY3JlZGl0L3tob21lR3JvdXBJZH1bP2V2ZW50SWQ9Li4uXVxyXG4gICAqIFJldHVybnMgb25lIHJvdyBwZXIgZm9yZWlnbiBncm91cDsgYW4gZW1wdHkgYXJyYXkgbWVhbnMgcmVjaXByb2NhbCBjcmVkaXQgaXMgb2ZmLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBob21lR3JvdXBJZFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXZlbnRJZF0gb3B0aW9uYWwg4oCUIGZpbHRlcnMgdG8gYW4gZXZlbnQtc2NvcGVkIGNvbmZpZy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFJlY2lwcm9jYWxDcmVkaXRSZXNwb25zZTxSZWNpcHJvY2FsQ3JlZGl0Q29uZmlnUm93W10+Pn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJlY2lwcm9jYWxDb25maWcoXHJcbiAgICBob21lR3JvdXBJZDogc3RyaW5nLFxyXG4gICAgZXZlbnRJZD86IHN0cmluZ1xyXG4gICk6IE9ic2VydmFibGU8UmVjaXByb2NhbENyZWRpdFJlc3BvbnNlPFJlY2lwcm9jYWxDcmVkaXRDb25maWdSb3dbXT4+IHtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gZXZlbnRJZCA/IGA/ZXZlbnRJZD0ke2VuY29kZVVSSUNvbXBvbmVudChldmVudElkKX1gIDogJyc7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YSh0aGlzLmJ1aWxkUmVjaXByb2NhbFVybChgLyR7aG9tZUdyb3VwSWR9JHtxdWVyeX1gKSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBhIHJlY2lwcm9jYWwtY3JlZGl0IGNvbmZpZyAoY3JlYXRlcy9yZWFjdGl2YXRlcyBvbmUgcm93IHBlciBmb3JlaWduIGdyb3VwKS5cclxuICAgKiBQT1NUIHthcGlCYXNlVXJsfS9tZWV0aW5ncy9hZG1pbi9yZWNpcHJvY2FsLWNyZWRpdFxyXG4gICAqIEBwYXJhbSB7U2F2ZVJlY2lwcm9jYWxDcmVkaXRQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8UmVjaXByb2NhbENyZWRpdENvbmZpZ1Jvd1tdPj59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzYXZlUmVjaXByb2NhbENyZWRpdChcclxuICAgIHBheWxvYWQ6IFNhdmVSZWNpcHJvY2FsQ3JlZGl0UGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8UmVjaXByb2NhbENyZWRpdFJlc3BvbnNlPFJlY2lwcm9jYWxDcmVkaXRDb25maWdSb3dbXT4+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YSh0aGlzLmJ1aWxkUmVjaXByb2NhbFVybCgpLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgKHNvZnQgZGVsZXRlKSBhIHNpbmdsZSByZWNpcHJvY2FsLWNyZWRpdCBjb25maWcgcm93IGJ5IGl0cyBjb25maWdJZC5cclxuICAgKiBQT1NUIHthcGlCYXNlVXJsfS9tZWV0aW5ncy9hZG1pbi9yZWNpcHJvY2FsLWNyZWRpdC97Y29uZmlnSWR9L3JlbW92ZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWdJZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UmVjaXByb2NhbENyZWRpdFJlc3BvbnNlPG51bGw+Pn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHJlbW92ZVJlY2lwcm9jYWxDb25maWcoXHJcbiAgICBjb25maWdJZDogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNpcHJvY2FsQ3JlZGl0UmVzcG9uc2U8bnVsbD4+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YSh0aGlzLmJ1aWxkUmVjaXByb2NhbFVybChgLyR7Y29uZmlnSWR9L3JlbW92ZWApLCB7fSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=