@tiba-spark/client-shared-lib 25.3.0-3 → 25.3.0-36

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.
@@ -46,6 +46,6 @@ export const rtEventPermissions = {
46
46
  [RtEventType.EvoucherTransaction]: [PermissionType.CcMain],
47
47
  [RtEventType.ValidationProfile]: [PermissionType.CcMain],
48
48
  [RtEventType.DataOnCloud]: [PermissionType.CcMain],
49
- [RtEventType.DynamicPricingCondition]: [PermissionType.LotConfigurationDynamicPricing, PermissionType.SetActiveRate],
49
+ [RtEventType.DynamicPricingCondition]: [PermissionType.SetActiveRate],
50
50
  };
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnQtZXZlbnQtdHlwZXMtY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9jb25zdGFudHMvcnQtZXZlbnQtdHlwZXMtY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHcEYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWtCO0lBQ2pELFdBQVcsQ0FBQyxJQUFJO0NBQ2pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWtCO0lBQzNDLFdBQVcsQ0FBQyxXQUFXO0lBQ3ZCLFdBQVcsQ0FBQyxZQUFZO0lBQ3hCLFdBQVcsQ0FBQyxjQUFjO0lBQzFCLFdBQVcsQ0FBQyxTQUFTO0lBQ3JCLFdBQVcsQ0FBQyxTQUFTO0lBQ3JCLFdBQVcsQ0FBQyxPQUFPO0lBQ25CLFdBQVcsQ0FBQyxJQUFJO0NBQ2pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBa0I7SUFDckQsV0FBVyxDQUFDLHVCQUF1QjtDQUNwQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWtCO0lBQy9DLFdBQVcsQ0FBQyxLQUFLO0lBQ2pCLFdBQVcsQ0FBQyxVQUFVO0lBQ3RCLFdBQVcsQ0FBQyxXQUFXO0lBQ3ZCLFdBQVcsQ0FBQyxRQUFRO0lBQ3BCLFdBQVcsQ0FBQyxjQUFjO0lBQzFCLFdBQVcsQ0FBQyx1QkFBdUI7Q0FDcEMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFnQztJQUM3RCxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDbkQsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ2hELENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUM5QyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDNUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ2hELENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUNyRCxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDbEQsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ3JELENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUNsRCxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDakQsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQzNDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUMvQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDOUMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ2pELENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUN0RCxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUM1RCxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUM3RCxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUN6RCxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUN2RCxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUN6RCxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUMxRCxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUN4RCxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDbEQsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyw4QkFBOEIsRUFBRSxjQUFjLENBQUMsYUFBYSxDQUFDO0NBQ3JILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQZXJtaXNzaW9uVHlwZSwgUnRFdmVudFR5cGUgfSBmcm9tIFwiLi4vc2VydmljZS1wcm94eS9lZGdlLXNlcnZpY2UtcHJveGllc1wiO1xuaW1wb3J0IHsgTnVtYmVyTWFwIH0gZnJvbSBcIi4uL3V0aWxzL2xhbmcudXRpbFwiO1xuXG5leHBvcnQgY29uc3QgcGFyZW50UGFya0V2ZW50VHlwZXM6IFJ0RXZlbnRUeXBlW10gPSBbXG4gIFJ0RXZlbnRUeXBlLlpvbmVcbl07XG5cbmV4cG9ydCBjb25zdCBwYXJrRXZlbnRUeXBlczogUnRFdmVudFR5cGVbXSA9IFtcbiAgUnRFdmVudFR5cGUuRGV2aWNlRXZlbnQsXG4gIFJ0RXZlbnRUeXBlLkRldmljZVN0YXR1cyxcbiAgUnRFdmVudFR5cGUuTFBSVHJhbnNhY3Rpb24sXG4gIFJ0RXZlbnRUeXBlLk9jY3VwYW5jeSxcbiAgUnRFdmVudFR5cGUuUGFya1N0YXRlLFxuICBSdEV2ZW50VHlwZS5SZXZlbnVlLFxuICBSdEV2ZW50VHlwZS5ab25lLFxuXTtcblxuZXhwb3J0IGNvbnN0IHBhcmVudFBhcmtCYXNlRXZlbnRUeXBlczogUnRFdmVudFR5cGVbXSA9IFtcbiAgUnRFdmVudFR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb24sXG5dO1xuXG5leHBvcnQgY29uc3QgcGFya0Jhc2VFdmVudFR5cGVzOiBSdEV2ZW50VHlwZVtdID0gW1xuICBSdEV2ZW50VHlwZS5BbGVydCxcbiAgUnRFdmVudFR5cGUuTG9zdFRpY2tldCxcbiAgUnRFdmVudFR5cGUuTFBSbWlzbWF0Y2gsXG4gIFJ0RXZlbnRUeXBlLkZhY2lsaXR5LFxuICBSdEV2ZW50VHlwZS5TZXJ2aWNlc1N0YXR1cyxcbiAgUnRFdmVudFR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb24sXG5dO1xuXG5leHBvcnQgY29uc3QgcnRFdmVudFBlcm1pc3Npb25zOiBOdW1iZXJNYXA8UGVybWlzc2lvblR5cGVbXT4gPSB7XG4gIFtSdEV2ZW50VHlwZS5EZXZpY2VTdGF0dXNdOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLk9jY3VwYW5jeV06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuUmV2ZW51ZV06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuQWxlcnRdOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLlBhcmtTdGF0ZV06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuTFBSVHJhbnNhY3Rpb25dOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLkRldmljZUV2ZW50XTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5TZXJ2aWNlc1N0YXR1c106IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuTFBSbWlzbWF0Y2hdOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLkxvc3RUaWNrZXRdOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLlpvbmVdOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLkZhY2lsaXR5XTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5Db21wYW55XTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5TdWJDb21wYW55XTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5GYWNpbGl0eURlbGV0ZWRdOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLk9wZW5UaWNrZXRUcmFuc2FjdGlvbl06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuQ2xvc2VUaWNrZXRUcmFuc2FjdGlvbl06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuTW9udGhseVRyYW5zYWN0aW9uXTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5HdWVzdFRyYW5zYWN0aW9uXTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5QYXltZW50VHJhbnNhY3Rpb25dOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLkV2b3VjaGVyVHJhbnNhY3Rpb25dOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLlZhbGlkYXRpb25Qcm9maWxlXTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5EYXRhT25DbG91ZF06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb25dOiBbUGVybWlzc2lvblR5cGUuTG90Q29uZmlndXJhdGlvbkR5bmFtaWNQcmljaW5nLCBQZXJtaXNzaW9uVHlwZS5TZXRBY3RpdmVSYXRlXSxcbn07Il19
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnQtZXZlbnQtdHlwZXMtY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9jb25zdGFudHMvcnQtZXZlbnQtdHlwZXMtY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHcEYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWtCO0lBQ2pELFdBQVcsQ0FBQyxJQUFJO0NBQ2pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWtCO0lBQzNDLFdBQVcsQ0FBQyxXQUFXO0lBQ3ZCLFdBQVcsQ0FBQyxZQUFZO0lBQ3hCLFdBQVcsQ0FBQyxjQUFjO0lBQzFCLFdBQVcsQ0FBQyxTQUFTO0lBQ3JCLFdBQVcsQ0FBQyxTQUFTO0lBQ3JCLFdBQVcsQ0FBQyxPQUFPO0lBQ25CLFdBQVcsQ0FBQyxJQUFJO0NBQ2pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBa0I7SUFDckQsV0FBVyxDQUFDLHVCQUF1QjtDQUNwQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWtCO0lBQy9DLFdBQVcsQ0FBQyxLQUFLO0lBQ2pCLFdBQVcsQ0FBQyxVQUFVO0lBQ3RCLFdBQVcsQ0FBQyxXQUFXO0lBQ3ZCLFdBQVcsQ0FBQyxRQUFRO0lBQ3BCLFdBQVcsQ0FBQyxjQUFjO0lBQzFCLFdBQVcsQ0FBQyx1QkFBdUI7Q0FDcEMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFnQztJQUM3RCxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDbkQsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ2hELENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUM5QyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDNUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ2hELENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUNyRCxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDbEQsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ3JELENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUNsRCxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDakQsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQzNDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUMvQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDOUMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ2pELENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUN0RCxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUM1RCxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUM3RCxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUN6RCxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUN2RCxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUN6RCxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUMxRCxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUN4RCxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDbEQsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7Q0FDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBlcm1pc3Npb25UeXBlLCBSdEV2ZW50VHlwZSB9IGZyb20gXCIuLi9zZXJ2aWNlLXByb3h5L2VkZ2Utc2VydmljZS1wcm94aWVzXCI7XG5pbXBvcnQgeyBOdW1iZXJNYXAgfSBmcm9tIFwiLi4vdXRpbHMvbGFuZy51dGlsXCI7XG5cbmV4cG9ydCBjb25zdCBwYXJlbnRQYXJrRXZlbnRUeXBlczogUnRFdmVudFR5cGVbXSA9IFtcbiAgUnRFdmVudFR5cGUuWm9uZVxuXTtcblxuZXhwb3J0IGNvbnN0IHBhcmtFdmVudFR5cGVzOiBSdEV2ZW50VHlwZVtdID0gW1xuICBSdEV2ZW50VHlwZS5EZXZpY2VFdmVudCxcbiAgUnRFdmVudFR5cGUuRGV2aWNlU3RhdHVzLFxuICBSdEV2ZW50VHlwZS5MUFJUcmFuc2FjdGlvbixcbiAgUnRFdmVudFR5cGUuT2NjdXBhbmN5LFxuICBSdEV2ZW50VHlwZS5QYXJrU3RhdGUsXG4gIFJ0RXZlbnRUeXBlLlJldmVudWUsXG4gIFJ0RXZlbnRUeXBlLlpvbmUsXG5dO1xuXG5leHBvcnQgY29uc3QgcGFyZW50UGFya0Jhc2VFdmVudFR5cGVzOiBSdEV2ZW50VHlwZVtdID0gW1xuICBSdEV2ZW50VHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbixcbl07XG5cbmV4cG9ydCBjb25zdCBwYXJrQmFzZUV2ZW50VHlwZXM6IFJ0RXZlbnRUeXBlW10gPSBbXG4gIFJ0RXZlbnRUeXBlLkFsZXJ0LFxuICBSdEV2ZW50VHlwZS5Mb3N0VGlja2V0LFxuICBSdEV2ZW50VHlwZS5MUFJtaXNtYXRjaCxcbiAgUnRFdmVudFR5cGUuRmFjaWxpdHksXG4gIFJ0RXZlbnRUeXBlLlNlcnZpY2VzU3RhdHVzLFxuICBSdEV2ZW50VHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbixcbl07XG5cbmV4cG9ydCBjb25zdCBydEV2ZW50UGVybWlzc2lvbnM6IE51bWJlck1hcDxQZXJtaXNzaW9uVHlwZVtdPiA9IHtcbiAgW1J0RXZlbnRUeXBlLkRldmljZVN0YXR1c106IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuT2NjdXBhbmN5XTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5SZXZlbnVlXTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5BbGVydF06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuUGFya1N0YXRlXTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5MUFJUcmFuc2FjdGlvbl06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuRGV2aWNlRXZlbnRdOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLlNlcnZpY2VzU3RhdHVzXTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5MUFJtaXNtYXRjaF06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuTG9zdFRpY2tldF06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuWm9uZV06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuRmFjaWxpdHldOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLkNvbXBhbnldOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLlN1YkNvbXBhbnldOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLkZhY2lsaXR5RGVsZXRlZF06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuT3BlblRpY2tldFRyYW5zYWN0aW9uXTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5DbG9zZVRpY2tldFRyYW5zYWN0aW9uXTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5Nb250aGx5VHJhbnNhY3Rpb25dOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLkd1ZXN0VHJhbnNhY3Rpb25dOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLlBheW1lbnRUcmFuc2FjdGlvbl06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuRXZvdWNoZXJUcmFuc2FjdGlvbl06IFtQZXJtaXNzaW9uVHlwZS5DY01haW5dLFxuICBbUnRFdmVudFR5cGUuVmFsaWRhdGlvblByb2ZpbGVdOiBbUGVybWlzc2lvblR5cGUuQ2NNYWluXSxcbiAgW1J0RXZlbnRUeXBlLkRhdGFPbkNsb3VkXTogW1Blcm1pc3Npb25UeXBlLkNjTWFpbl0sXG4gIFtSdEV2ZW50VHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbl06IFtQZXJtaXNzaW9uVHlwZS5TZXRBY3RpdmVSYXRlXSxcbn07XG4iXX0=
@@ -18,9 +18,10 @@ export const VERSION_10_4_0 = '10.4.0';
18
18
  // New Spark Version Syntax
19
19
  export const VERSION_25_1_0 = '25.1.0';
20
20
  export const VERSION_25_2_0 = '25.2.0';
21
+ export const VERSION_25_2_1 = '25.2.1';
21
22
  /*
22
23
  Api Versions:
23
24
  V1 - 1.0.4 mobile.
24
25
  */
25
26
  export const VERSION_V1 = '1';
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsc0JBQXNCO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsQ0FBQyxzQkFBc0I7QUFDNUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQjtBQUM1RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsc0JBQXNCO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsQ0FBQyxzQkFBc0I7QUFDNUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFFdkMsMkJBQTJCO0FBQzNCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUV2Qzs7O0VBR0U7QUFDRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZFUlNJT05fN180XzAgPSAnNy40LjAnOyAvLyBObyBMb25nZXIgU3VwcG9ydGVkXG5leHBvcnQgY29uc3QgVkVSU0lPTl83XzRfMSA9ICc3LjQuMSc7IC8vIE5vIExvbmdlciBTdXBwb3J0ZWRcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzhfMV8wID0gJzguMS4wJzsgLy8gTm8gTG9uZ2VyIFN1cHBvcnRlZFxuZXhwb3J0IGNvbnN0IFZFUlNJT05fOF8yXzAgPSAnOC4yLjAnOyAvLyBObyBMb25nZXIgU3VwcG9ydGVkXG5leHBvcnQgY29uc3QgVkVSU0lPTl84XzNfMCA9ICc4LjMuMCc7IC8vIE5vIExvbmdlciBTdXBwb3J0ZWRcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzhfNF8wID0gJzguNC4wJztcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzlfMV8wID0gJzkuMS4wJztcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzlfMl8wID0gJzkuMi4wJztcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzlfMl8yID0gJzkuMi4yJztcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzlfM18wID0gJzkuMy4wJztcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzlfNF8wID0gJzkuNC4wJztcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzEwXzFfMCA9ICcxMC4xLjAnO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fMTBfMl8wID0gJzEwLjIuMCc7XG5leHBvcnQgY29uc3QgVkVSU0lPTl8xMF8yXzEgPSAnMTAuMi4xJztcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzEwXzNfMCA9ICcxMC4zLjAnO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fMTBfM185ID0gJzEwLjMuOSc7XG5leHBvcnQgY29uc3QgVkVSU0lPTl8xMF80XzAgPSAnMTAuNC4wJztcblxuLy8gTmV3IFNwYXJrIFZlcnNpb24gU3ludGF4XG5leHBvcnQgY29uc3QgVkVSU0lPTl8yNV8xXzAgPSAnMjUuMS4wJztcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzI1XzJfMCA9ICcyNS4yLjAnO1xuXG4vKlxuQXBpIFZlcnNpb25zOlxuICBWMSAtIDEuMC40IG1vYmlsZS5cbiovXG5leHBvcnQgY29uc3QgVkVSU0lPTl9WMSA9ICcxJztcbiJdfQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsc0JBQXNCO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsQ0FBQyxzQkFBc0I7QUFDNUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQjtBQUM1RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsc0JBQXNCO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsQ0FBQyxzQkFBc0I7QUFDNUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFFdkMsMkJBQTJCO0FBQzNCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBRXZDOzs7RUFHRTtBQUNGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgVkVSU0lPTl83XzRfMCA9ICc3LjQuMCc7IC8vIE5vIExvbmdlciBTdXBwb3J0ZWRcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzdfNF8xID0gJzcuNC4xJzsgLy8gTm8gTG9uZ2VyIFN1cHBvcnRlZFxuZXhwb3J0IGNvbnN0IFZFUlNJT05fOF8xXzAgPSAnOC4xLjAnOyAvLyBObyBMb25nZXIgU3VwcG9ydGVkXG5leHBvcnQgY29uc3QgVkVSU0lPTl84XzJfMCA9ICc4LjIuMCc7IC8vIE5vIExvbmdlciBTdXBwb3J0ZWRcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzhfM18wID0gJzguMy4wJzsgLy8gTm8gTG9uZ2VyIFN1cHBvcnRlZFxuZXhwb3J0IGNvbnN0IFZFUlNJT05fOF80XzAgPSAnOC40LjAnO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fOV8xXzAgPSAnOS4xLjAnO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fOV8yXzAgPSAnOS4yLjAnO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fOV8yXzIgPSAnOS4yLjInO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fOV8zXzAgPSAnOS4zLjAnO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fOV80XzAgPSAnOS40LjAnO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fMTBfMV8wID0gJzEwLjEuMCc7XG5leHBvcnQgY29uc3QgVkVSU0lPTl8xMF8yXzAgPSAnMTAuMi4wJztcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzEwXzJfMSA9ICcxMC4yLjEnO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fMTBfM18wID0gJzEwLjMuMCc7XG5leHBvcnQgY29uc3QgVkVSU0lPTl8xMF8zXzkgPSAnMTAuMy45JztcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzEwXzRfMCA9ICcxMC40LjAnO1xuXG4vLyBOZXcgU3BhcmsgVmVyc2lvbiBTeW50YXhcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzI1XzFfMCA9ICcyNS4xLjAnO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fMjVfMl8wID0gJzI1LjIuMCc7XG5leHBvcnQgY29uc3QgVkVSU0lPTl8yNV8yXzEgPSAnMjUuMi4xJztcblxuLypcbkFwaSBWZXJzaW9uczpcbiAgVjEgLSAxLjAuNCBtb2JpbGUuXG4qL1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fVjEgPSAnMSc7XG4iXX0=
@@ -34,7 +34,7 @@ import * as i9 from "../../services";
34
34
  import * as i10 from "../facility";
35
35
  import * as i11 from "../../service-proxy/edge-service-proxies";
36
36
  let AlertsAndNotificationsState = class AlertsAndNotificationsState {
37
- constructor(appConfig, modalService, translateService, store, alertsAndNotificationsServiceProxy, alertNotificationService, alertsAndNotificationsService, commandNotificationService, facilityCommandsService, facilityService, rateServiceProxy, appConfigService, mobileServiceProxy) {
37
+ constructor(appConfig, modalService, translateService, store, alertsAndNotificationsServiceProxy, alertNotificationService, alertsAndNotificationsService, commandNotificationService, facilityCommandsService, facilityService, facilityServiceProxy, appConfigService, mobileServiceProxy) {
38
38
  this.appConfig = appConfig;
39
39
  this.modalService = modalService;
40
40
  this.translateService = translateService;
@@ -45,7 +45,7 @@ let AlertsAndNotificationsState = class AlertsAndNotificationsState {
45
45
  this.commandNotificationService = commandNotificationService;
46
46
  this.facilityCommandsService = facilityCommandsService;
47
47
  this.facilityService = facilityService;
48
- this.rateServiceProxy = rateServiceProxy;
48
+ this.facilityServiceProxy = facilityServiceProxy;
49
49
  this.appConfigService = appConfigService;
50
50
  this.mobileServiceProxy = mobileServiceProxy;
51
51
  this.pkMatches = (notificationDto, notificationPK) => this.notificationPK(notificationDto, notificationDto.guid) === notificationPK;
@@ -85,27 +85,21 @@ let AlertsAndNotificationsState = class AlertsAndNotificationsState {
85
85
  const alertsAndNotifications$ = this.alertsAndNotificationsServiceProxy.getAlertsAndNotifications(minutesAgo);
86
86
  return alertsAndNotifications$.pipe(tap(async (alertsAndNotifications) => {
87
87
  const populateNotifications = await this.alertsAndNotificationsService.populateAlertsAndNotifications(alertsAndNotifications.data);
88
- const badgeValue = populateNotifications.alerts.length + populateNotifications.notifications.length;
89
88
  ctx.patchState({
90
- aggregatedNotificationSeverity: populateNotifications.aggregatedNotificationSeverity,
91
89
  alerts: populateNotifications.alerts ?? [],
92
90
  notifications: populateNotifications.notifications ?? [],
93
- badgeValue,
94
- displayBadge: badgeValue > 0
95
91
  });
92
+ this.recalculateBadgeAndSeverity(ctx);
96
93
  }));
97
94
  }
98
95
  onLoadMobileNotificationsAction(ctx, { minutesAgo }) {
99
96
  const alertsAndNotifications$ = this.mobileServiceProxy.getMobileAlertsAndNotification(minutesAgo, VERSION_V1);
100
97
  return alertsAndNotifications$.pipe(tap(async (alertsAndNotifications) => {
101
- const badgeValue = alertsAndNotifications.data.alerts.length + alertsAndNotifications.data.notifications.length;
102
98
  ctx.patchState({
103
- aggregatedNotificationSeverity: alertsAndNotifications.data.aggregatedNotificationSeverity,
104
99
  alerts: alertsAndNotifications.data.alerts ?? [],
105
100
  notifications: alertsAndNotifications.data.notifications ?? [],
106
- badgeValue,
107
- displayBadge: badgeValue > 0
108
101
  });
102
+ this.recalculateBadgeAndSeverity(ctx);
109
103
  }));
110
104
  }
111
105
  onClearAlertsAndNotificationsAction(ctx, _) {
@@ -282,9 +276,9 @@ let AlertsAndNotificationsState = class AlertsAndNotificationsState {
282
276
  });
283
277
  this.alertsAndNotificationsServiceProxy.handleDynamicPricingConditionNotification(handlingDynamicPricingConditionDto).subscribe(async (res) => {
284
278
  const dpc = res.data || notification.dynamicPricingCondition;
285
- const rate = await firstValueFrom(this.rateServiceProxy.getRateById(dpc.rateId, dpc.guid));
279
+ const rate = await firstValueFrom(this.facilityServiceProxy.getBaseRateById(dpc.parkingLotId, dpc.rateId, dpc.guid));
286
280
  dpc.rateName = rate?.data?.name;
287
- this.alertsAndNotificationsService.triggerDynamicPricingToastEvent(res.data || notification.dynamicPricingCondition);
281
+ this.alertsAndNotificationsService.triggerDynamicPricingToastEvent(dpc);
288
282
  });
289
283
  }
290
284
  });
@@ -394,7 +388,7 @@ let AlertsAndNotificationsState = class AlertsAndNotificationsState {
394
388
  }
395
389
  async showRateAutomaticSwitchToastMessage(notification) {
396
390
  const dpc = notification.dynamicPricingCondition;
397
- const rate = await firstValueFrom(this.rateServiceProxy.getRateById(dpc.rateId, dpc.guid));
391
+ const rate = await firstValueFrom(this.facilityServiceProxy.getBaseRateById(dpc.parkingLotId, dpc.rateId, dpc.guid));
398
392
  dpc.rateName = rate?.data?.name;
399
393
  const messages = this.facilityCommandsService.getCommandNotificationConfigMessages(FacilityRemoteCommandTypes.SetActiveRate, null, dpc);
400
394
  const config = {
@@ -554,7 +548,9 @@ let AlertsAndNotificationsState = class AlertsAndNotificationsState {
554
548
  // Method that processes and displays the notification based on conditions
555
549
  processAndDisplayNotification(notificationDto, guid, ctx) {
556
550
  // Check if the user has permission
557
- const hasPermission = this.facilityService.hasPermissionTypeByPark(PermissionType.LotConfigurationDynamicPricing, notificationDto.guid, notificationDto.dynamicPricingCondition.parkingLotId);
551
+ const facilityDictionary = this.store.selectSnapshot(FacilityState.facilityDictionary);
552
+ const featurePermissions = facilityDictionary[guid][notificationDto.dynamicPricingCondition.parkingLotId].featurePermissions;
553
+ const hasPermission = featurePermissions?.includes(PermissionType.SetActiveRate);
558
554
  // Check if the app is in mobile mode or if it's in the correct module
559
555
  const isMobileAppMode = this.appConfigService.getConfig().appType === AppType.Mobile;
560
556
  const isCcModule = this.store.selectSnapshot(SidenavState.appModule) === AppModule.Cc;
@@ -605,7 +601,7 @@ let AlertsAndNotificationsState = class AlertsAndNotificationsState {
605
601
  }
606
602
  return isNotificationEnabled;
607
603
  }
608
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AlertsAndNotificationsState, deps: [{ token: i1.AppConfigService }, { token: i2.ModalService }, { token: i3.TranslateService }, { token: i4.Store }, { token: i5.AlertsAndNotificationsServiceProxy }, { token: i6.AlertNotificationService }, { token: i7.AlertsAndNotificationsService }, { token: i8.CommandNotificationService }, { token: i9.BaseFacilityCommandsService }, { token: i10.FacilityService }, { token: i11.RateServiceProxy }, { token: i1.AppConfigService }, { token: i5.MobileServiceProxy }], target: i0.ɵɵFactoryTarget.Injectable }); }
604
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AlertsAndNotificationsState, deps: [{ token: i1.AppConfigService }, { token: i2.ModalService }, { token: i3.TranslateService }, { token: i4.Store }, { token: i5.AlertsAndNotificationsServiceProxy }, { token: i6.AlertNotificationService }, { token: i7.AlertsAndNotificationsService }, { token: i8.CommandNotificationService }, { token: i9.BaseFacilityCommandsService }, { token: i10.FacilityService }, { token: i11.FacilityServiceProxy }, { token: i1.AppConfigService }, { token: i5.MobileServiceProxy }], target: i0.ɵɵFactoryTarget.Injectable }); }
609
605
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AlertsAndNotificationsState }); }
610
606
  };
611
607
  __decorate([
@@ -672,5 +668,5 @@ AlertsAndNotificationsState = __decorate([
672
668
  export { AlertsAndNotificationsState };
673
669
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AlertsAndNotificationsState, decorators: [{
674
670
  type: Injectable
675
- }], ctorParameters: function () { return [{ type: i1.AppConfigService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i4.Store }, { type: i5.AlertsAndNotificationsServiceProxy }, { type: i6.AlertNotificationService }, { type: i7.AlertsAndNotificationsService }, { type: i8.CommandNotificationService }, { type: i9.BaseFacilityCommandsService }, { type: i10.FacilityService }, { type: i11.RateServiceProxy }, { type: i1.AppConfigService }, { type: i5.MobileServiceProxy }]; }, propDecorators: { onUpdateUserAlertsPreferencesAction: [], onUpdateUserNotificaitonsPreferencesAction: [], onLoadAlertsAndNotificationsAction: [], onLoadMobileNotificationsAction: [], onClearAlertsAndNotificationsAction: [], onRemoveExpiredAlertsAndNotificationsAction: [], onAlertChangedAction: [], onNotificationChangeAction: [], onHandledNotificationAction: [], onHandleNotificationAction: [], onHandleAlertsAction: [] } });
676
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9tb2R1bGVzL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBRW5ILE9BQU8sRUFBRSw4QkFBOEIsRUFBNkIsdUJBQXVCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUNwTCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtRkFBbUYsQ0FBQztBQUVqSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN0SSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JB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UUFDbEMsSUFBSSxFQUFFLHdCQUF3QjtRQUM5QixRQUFRLEVBQUU7WUFDUixNQUFNLEVBQUUsRUFBRTtZQUNWLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLDhCQUE4QixFQUFFLG9CQUFvQixDQUFDLEdBQUc7WUFDeEQsVUFBVSxFQUFFLENBQUM7WUFDYixZQUFZLEVBQUUsS0FBSztZQUNuQixnQkFBZ0IsRUFBRSxFQUFFO1NBQ3JCO0tBQ0YsQ0FBQztHQUVXLDJCQUEyQixDQXdzQnZDO1NBeHNCWSwyQkFBMkI7NEZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVTsyZ0JBNkNULG1DQUFtQyxNQVVuQywwQ0FBMEMsTUFVMUMsa0NBQWtDLE1Ba0JsQywrQkFBK0IsTUFnQi9CLG1DQUFtQyxNQVluQywyQ0FBMkMsTUFhM0Msb0JBQW9CLE1BaUNwQiwwQkFBMEIsTUFlMUIsMkJBQTJCLE1BMEIzQiwwQkFBMEIsTUFxQjFCLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENsb3VkQ29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY2xvdWQtY29uZmlybS1kaWFsb2cvY2xvdWQtY29uZmlybS1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2FsZXJ0LW5vdGlmaWNhdGlvbi9hbGVydC1ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uQm9yZGVyQ2xhc3MsIENvbW1hbmROb3RpZmljYXRpb25Db25maWcsIENvbW1hbmROb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24tY29uZmlnJztcbmltcG9ydCB7IENvbW1hbmROb3RpZmljYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNsYXNzLCBOb3RpZmljYXRpb25IUG9zaXRpb25zLCBOb3RpZmljYXRpb25WUG9zaXRpb25zIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcbmltcG9ydCB7IFZFUlNJT05fOV8yXzAsIFZFUlNJT05fVjEgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdmVyc2lvbi1jb25zdGFudHMnO1xuaW1wb3J0IHsgRGV2aWNlVHlwZXNBbGVydHNNYXBwaW5nIH0gZnJvbSAnLi4vLi4vZW51bXMvYWxlcnRzLWRldmljZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgQXBwVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2FwcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uIH0gZnJvbSAnLi4vLi4vZW51bXMvbG9jYWxpemF0aW9uLmVudW0nO1xuaW1wb3J0IHsgQ2xvdWRDb25maXJtRGlhbG9nRGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2xvdWQtY29uZmlybS1kaWFsb2ctZGF0YS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQWxlcnREdG8sIEFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0bywgQWxlcnRzQW5kTm90aWZpY2F0aW9uc0R0bywgQWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eSwgQWxlcnRzRGV2aWNlVHlwZSwgQXBwTW9kdWxlLCBEZXZpY2VUeXBlLCBEeW5hbWljUHJpY2luZ1RyaWdnZXJBY3Rpb24sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLCBIYW5kbGluZ0FsZXJ0RHRvLCBIYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvLCBNb2JpbGVTZXJ2aWNlUHJveHksIE5vdGlmaWNhdGlvbkR0bywgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNTZXR0aW5nc0R0bywgTm90aWZpY2F0aW9uU2V2ZXJpdHksIE5vdGlmaWNhdGlvblR5cGUsIFBlcmlwaGVyYWxFcXVpcG1lbnRFcnJvciwgUGVybWlzc2lvblR5cGUsIFNldHRpbmdzQ2F0ZWdvcnksIFNwYXJrU2V0dGluZ3NEdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBSYXRlU2VydmljZVByb3h5IH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9lZGdlLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBCYXNlRmFjaWxpdHlDb21tYW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTnVtYmVyTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy9zdXBwb3J0LXZlcnNpb24udXRpbCc7XG5pbXBvcnQgeyBTZXNzaW9uU3RhdGUgfSBmcm9tICcuLi9hdXRoL3Nlc3Npb24uc3RhdGUnO1xuaW1wb3J0IHsgRmFjaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vZmFjaWxpdHknO1xuaW1wb3J0IHsgRmFjaWxpdHlTdGF0ZSB9IGZyb20gJy4uL2ZhY2lsaXR5L2ZhY2lsaXR5LnN0YXRlJztcbmltcG9ydCB7IFBhcmtNYW5hZ2VyU3RhdGUgfSBmcm9tICcuLi9wYXJrLW1hbmFnZXIvcGFyay1tYW5hZ2VyLnN0YXRlJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBVcGRhdGVVc2VyU2V0dGluZ3NBY3Rpb24gfSBmcm9tICcuLi91c2VyLXNldHRpbmdzL3VzZXItc2V0dGluZ3MuYWN0aW9ucyc7XG5pbXBvcnQge1xuICBBbGVydENoYW5nZWRBY3Rpb24sXG4gIENsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbiwgSGFuZGxlQWxlcnRzQWN0aW9uLCBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uLCBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24sXG4gIExvYWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uLFxuICBMb2FkTW9iaWxlTm90aWZpY2F0aW9uc0FjdGlvbixcbiAgTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbixcbiAgUmVtb3ZlRXhwaXJlZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24sIFVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvbixcbiAgVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvblxufSBmcm9tICcuL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy5hY3Rpb25zJztcbmltcG9ydCB7IEFsZXJ0c1ByZWZlcmVuY2VzTWFwLCBBbGVydFR5cGVQcmVmZXJlbmNlc01hcCwgRmFjaWxpdHlQcmVmZXJlbmNlc01hcCB9IGZyb20gJy4vYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJy4vYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCB7XG4gIGFsZXJ0czogQWxlcnREdG9bXTtcbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uRHRvW107XG4gIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eTogTm90aWZpY2F0aW9uU2V2ZXJpdHk7XG4gIGJhZGdlVmFsdWU6IG51bWJlcixcbiAgZGlzcGxheUJhZGdlOiBib29sZWFuLFxuICBub3RpZmljYXRpb25zTWFwOiBOdW1iZXJNYXA8bnVtYmVyPjtcbn1cblxuQFN0YXRlPEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4oe1xuICBuYW1lOiAnYWxlcnRzQW5kTm90aWZpY2F0aW9ucycsXG4gIGRlZmF1bHRzOiB7XG4gICAgYWxlcnRzOiBbXSxcbiAgICBub3RpZmljYXRpb25zOiBbXSxcbiAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkxvdyxcbiAgICBiYWRnZVZhbHVlOiAwLFxuICAgIGRpc3BsYXlCYWRnZTogZmFsc2UsXG4gICAgbm90aWZpY2F0aW9uc01hcDoge30sXG4gIH0sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTdGF0ZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBhbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5OiBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlOiBBbGVydE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tYW5kTm90aWZpY2F0aW9uU2VydmljZTogQ29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eUNvbW1hbmRzU2VydmljZTogQmFzZUZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlOiBGYWNpbGl0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByYXRlU2VydmljZVByb3h5OiBSYXRlU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIG1vYmlsZVNlcnZpY2VQcm94eTogTW9iaWxlU2VydmljZVByb3h5KSB7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgYWxlcnRzKHN0YXRlOiBBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWwpOiBBbGVydER0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuYWxlcnRzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIG5vdGlmaWNhdGlvbnMoc3RhdGU6IEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCk6IE5vdGlmaWNhdGlvbkR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUubm90aWZpY2F0aW9ucztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHkoc3RhdGU6IEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCk6IE5vdGlmaWNhdGlvblNldmVyaXR5IHtcbiAgICByZXR1cm4gc3RhdGUuYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGJhZGdlVmFsdWUoc3RhdGU6IEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0YXRlLmJhZGdlVmFsdWU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZGlzcGxheUJhZGdlKHN0YXRlOiBBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuZGlzcGxheUJhZGdlO1xuICB9XG5cbiAgQEFjdGlvbihVcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24pXG4gIG9uVXBkYXRlVXNlckFsZXJ0c1ByZWZlcmVuY2VzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFjdGlvbjogVXBkYXRlVXNlckFsZXJ0c1ByZWZlcmVuY2VzQWN0aW9uKSB7XG4gICAgY29uc3Qgc2V0dGluZzogU3BhcmtTZXR0aW5nc0R0byA9IG5ldyBTcGFya1NldHRpbmdzRHRvKHtcbiAgICAgIGNhdGVnb3J5OiBTZXR0aW5nc0NhdGVnb3J5LkFsZXJ0c1ByZWZlcmVuY2VzLFxuICAgICAgc2V0dGluZ3NKc29uOiBKU09OLnN0cmluZ2lmeShhY3Rpb24udXNlck5vdGlmaWNhdGlvbnNQcmVmZXJlbmNlcyksXG4gICAgfSk7XG5cbiAgICBjdHguZGlzcGF0Y2gobmV3IFVwZGF0ZVVzZXJTZXR0aW5nc0FjdGlvbihzZXR0aW5nKSk7XG4gIH1cblxuICBAQWN0aW9uKFVwZGF0ZVVzZXJOb3RpZmljYWl0b25zUHJlZmVyZW5jZXNBY3Rpb24pXG4gIG9uVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBhY3Rpb246IFVwZGF0ZVVzZXJOb3RpZmljYWl0b25zUHJlZmVyZW5jZXNBY3Rpb24pIHtcbiAgICBjb25zdCBzZXR0aW5nOiBTcGFya1NldHRpbmdzRHRvID0gbmV3IFNwYXJrU2V0dGluZ3NEdG8oe1xuICAgICAgY2F0ZWdvcnk6IFNldHRpbmdzQ2F0ZWdvcnkuTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMsXG4gICAgICBzZXR0aW5nc0pzb246IEpTT04uc3RyaW5naWZ5KGFjdGlvbi51c2VyTm90aWZpY2F0aW9uc1ByZWZlcmVuY2VzKSxcbiAgICB9KTtcblxuICAgIGN0eC5kaXNwYXRjaChuZXcgVXBkYXRlVXNlclNldHRpbmdzQWN0aW9uKHNldHRpbmcpKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24pXG4gIG9uTG9hZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBtaW51dGVzQWdvIH06IExvYWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKSB7XG4gICAgY29uc3QgYWxlcnRzQW5kTm90aWZpY2F0aW9ucyQgPSB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlUHJveHkuZ2V0QWxlcnRzQW5kTm90aWZpY2F0aW9ucyhtaW51dGVzQWdvKTtcblxuICAgIHJldHVybiBhbGVydHNBbmROb3RpZmljYXRpb25zJC5waXBlKHRhcChhc3luYyBhbGVydHNBbmROb3RpZmljYXRpb25zID0+IHtcbiAgICAgIGNvbnN0IHBvcHVsYXRlTm90aWZpY2F0aW9uczogQWxlcnRzQW5kTm90aWZpY2F0aW9uc0R0byA9IGF3YWl0IHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UucG9wdWxhdGVBbGVydHNBbmROb3RpZmljYXRpb25zKGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMuZGF0YSk7XG5cbiAgICAgIGNvbnN0IGJhZGdlVmFsdWUgPSBwb3B1bGF0ZU5vdGlmaWNhdGlvbnMuYWxlcnRzLmxlbmd0aCArIHBvcHVsYXRlTm90aWZpY2F0aW9ucy5ub3RpZmljYXRpb25zLmxlbmd0aDtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5OiBwb3B1bGF0ZU5vdGlmaWNhdGlvbnMuYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5LFxuICAgICAgICBhbGVydHM6IHBvcHVsYXRlTm90aWZpY2F0aW9ucy5hbGVydHMgPz8gW10sXG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IHBvcHVsYXRlTm90aWZpY2F0aW9ucy5ub3RpZmljYXRpb25zID8/IFtdLFxuICAgICAgICBiYWRnZVZhbHVlLFxuICAgICAgICBkaXNwbGF5QmFkZ2U6IGJhZGdlVmFsdWUgPiAwXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRNb2JpbGVOb3RpZmljYXRpb25zQWN0aW9uKVxuICBvbkxvYWRNb2JpbGVOb3RpZmljYXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbWludXRlc0FnbyB9OiBMb2FkTW9iaWxlTm90aWZpY2F0aW9uc0FjdGlvbikge1xuICAgIGNvbnN0IGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMkID0gdGhpcy5tb2JpbGVTZXJ2aWNlUHJveHkuZ2V0TW9iaWxlQWxlcnRzQW5kTm90aWZpY2F0aW9uKG1pbnV0ZXNBZ28sIFZFUlNJT05fVjEpO1xuXG4gICAgcmV0dXJuIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMkLnBpcGUodGFwKGFzeW5jIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMgPT4ge1xuICAgICAgY29uc3QgYmFkZ2VWYWx1ZSA9IGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMuZGF0YS5hbGVydHMubGVuZ3RoICsgYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhLm5vdGlmaWNhdGlvbnMubGVuZ3RoO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMuZGF0YS5hZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHksXG4gICAgICAgIGFsZXJ0czogYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhLmFsZXJ0cyA/PyBbXSxcbiAgICAgICAgbm90aWZpY2F0aW9uczogYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhLm5vdGlmaWNhdGlvbnMgPz8gW10sXG4gICAgICAgIGJhZGdlVmFsdWUsXG4gICAgICAgIGRpc3BsYXlCYWRnZTogYmFkZ2VWYWx1ZSA+IDBcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKVxuICBvbkNsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBfOiBDbGVhckFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBhbGVydHM6IFtdLFxuICAgICAgbm90aWZpY2F0aW9uczogW10sXG4gICAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkxvdyxcbiAgICAgIGJhZGdlVmFsdWU6IDAsXG4gICAgICBkaXNwbGF5QmFkZ2U6IGZhbHNlLFxuICAgICAgbm90aWZpY2F0aW9uc01hcDoge31cbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oUmVtb3ZlRXhwaXJlZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24pXG4gIG9uUmVtb3ZlRXhwaXJlZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBSZW1vdmVFeHBpcmVkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbikge1xuICAgIGNvbnN0IG5vd1V0YyA9IG1vbWVudC51dGMoKTsgLy8gQ3VycmVudCBVVEMgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kc1xuICAgIGNvbnN0IG1pbnV0ZXNBZ28gPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hY3RpdmVOb3RpZmljYXRpb25zLm1pbnV0ZXNBZ287XG4gICAgY29uc3QgYWxlcnRzID0gY3R4LmdldFN0YXRlKCkuYWxlcnRzLmZpbHRlcihhbGVydCA9PiBtb21lbnQudXRjKGFsZXJ0LmNsb3VkRXZlbnREYXRlVGltZSkuYWRkKG1pbnV0ZXNBZ28sICdtaW51dGVzJykuaXNBZnRlcihub3dVdGMpKTtcblxuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGFsZXJ0c1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcbiAgfVxuXG4gIEBBY3Rpb24oQWxlcnRDaGFuZ2VkQWN0aW9uKVxuICBvbkFsZXJ0Q2hhbmdlZEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCB7IGFsZXJ0LCBndWlkIH06IEFsZXJ0Q2hhbmdlZEFjdGlvbikge1xuICAgIGlmIChhbGVydCAmJiB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlLmlzQWxlcnRUeXBlRGVmaW5lZChhbGVydC5ldmVudERlc2NyaXB0aW9uKSkge1xuICAgICAgdGhpcy5oYW5kbGVBbGVydEZvckNsb3NpbmcoY3R4LCBhbGVydCwgZ3VpZCk7XG5cbiAgICAgIGlmIChhbGVydC5ldmVudFN0YXRlICYmIHRoaXMuaXNBbGVydEVuYWJsZWRGb3JVc2VyKGFsZXJ0LCBndWlkKSkge1xuXG4gICAgICAgIGlmICghYWxlcnQuZGV2aWNlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IHBhcmtEZXZpY2VzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChQYXJrTWFuYWdlclN0YXRlLmRldmljZXMpO1xuICAgICAgICAgIGFsZXJ0LmRldmljZU5hbWUgPSBwYXJrRGV2aWNlcz8uZmluZChkID0+IGQuaWQgPT09IGFsZXJ0LmRldmljZUlEKT8ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWxlcnQucGFya05hbWUpIHtcbiAgICAgICAgICBjb25zdCBsb3RzTWFwID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSlbZ3VpZF07XG4gICAgICAgICAgaWYgKGxvdHNNYXApIHtcbiAgICAgICAgICAgIGFsZXJ0LnBhcmtOYW1lID0gbG90c01hcFthbGVydC5wYXJrSWRdPy5uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvY2Vzc0FuZERpc3BsYXlBbGVydChjdHgsIGFsZXJ0LCBndWlkKTtcblxuICAgICAgICAvLyBQdXNoIHRoZSBuZXcgYWxlcnQgdG8gdGhlIGFycmF5IGFuZCBzYXZlIGluIHN0YXRlXG4gICAgICAgIGNvbnN0IGFsZXJ0cyA9IGN0eC5nZXRTdGF0ZSgpLmFsZXJ0cztcbiAgICAgICAgYWxlcnRzLnVuc2hpZnQoYWxlcnQpO1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgYWxlcnRzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihOb3RpZmljYXRpb25DaGFuZ2VkQWN0aW9uKVxuICBvbk5vdGlmaWNhdGlvbkNoYW5nZUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCB7IG5vdGlmaWNhdGlvbiwgZ3VpZCB9OiBOb3RpZmljYXRpb25DaGFuZ2VkQWN0aW9uKSB7XG4gICAgc3dpdGNoIChub3RpZmljYXRpb24udHlwZSkge1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uOlxuICAgICAgICBpZiAodGhpcy5pc05vdGlmaWNhdGlvbkVuYWJsZWRGb3JVc2VyKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmNsb3VkUGFya0lkKSkge1xuICAgICAgICAgIHRoaXMub25EeW5hbWljUHJpY2luZ0NvbmRpdGlvbkNoYW5nZShjdHgsIG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUubG9nKFwidW5zdXBwb3J0ZWQgbm90aWZpY2F0aW9uIHR5cGVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbilcbiAgb25IYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbm90aWZpY2F0aW9uRHRvLCBndWlkIH06IEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24pIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG5cbiAgICAvLyBXaGV0aGVyIHdlIHdhbnQgdG8gY2xvc2Ugb3IgaGF2ZSBhIGR1cGxpY2F0ZSBhbGVydFxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbkV4aXN0cyA9IG5vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24gPT4gdGhpcy5wa01hdGNoZXMobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb25QSykpO1xuICAgIGlmIChub3RpZmljYXRpb25FeGlzdHMpIHtcbiAgICAgIGNvbnN0IHRvYXN0SWQgPSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcbiAgICAgIHRoaXMuYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLmNsZWFyVG9hc3RzKHRvYXN0SWQpO1xuICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuXG4gICAgICBjb25zdCBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMgPSBub3RpZmljYXRpb25zLmZpbHRlcihub3RpZmljYXRpb24gPT5cbiAgICAgICAgISh0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmd1aWQpID09PSBub3RpZmljYXRpb25QSykpO1xuXG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IGZpbHRlcmVkTm90aWZpY2F0aW9ucyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xuICAgICAgdGhpcy5jbG9zZU5vdGlmaWNhdGlvbkRpYWxvZ3Mobm90aWZpY2F0aW9uUEspO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uKVxuICBvbkhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCB7IG5vdGlmaWNhdGlvbkR0bywgZ3VpZCB9OiBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24pIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBndWlkKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgbm90aWZpY2F0aW9uIHdpdGggdGhlIGhhbmRsZSB1c2VyIC0gYW5kIHNhdmUgaW4gc3RhdGVcbiAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbkR0by50eXBlKSB7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XG4gICAgICAgIHRoaXMudXBkYXRlSGFuZGxlZFVzZXJGb3JEeW5hbWljUHJpY2luZ05vdGlmaWNhdGlvbihjdHgsIG5vdGlmaWNhdGlvbnMsIG5vdGlmaWNhdGlvbkR0bywgbm90aWZpY2F0aW9uUEspO1xuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgZHluYW1pYy1wcmljaW5nLWNvbmZpcm1hdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bnN1cHBvcnRlZCBub3RpZmljYXRpb24gdHlwZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgY3JpdGljYWwgYWxlcnQgbW9kYWxcbiAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gIH1cblxuICBAQWN0aW9uKEhhbmRsZUFsZXJ0c0FjdGlvbilcbiAgb25IYW5kbGVBbGVydHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBhbGVydER0bywgZ3VpZCB9OiBIYW5kbGVBbGVydHNBY3Rpb24pIHtcbiAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0RHRvLCBndWlkKTtcbiAgICBjb25zdCBhbGVydHMgPSBjdHguZ2V0U3RhdGUoKS5hbGVydHM7XG4gICAgY29uc3QgZXhpc3RBbGVydEluZGV4ID0gYWxlcnRzLmZpbmRJbmRleChhbGVydCA9PiB0aGlzLmFsZXJ0UEsoYWxlcnQsIGd1aWQpID09PSBhbGVydFBLICYmXG4gICAgICB0aGlzLnN0YXRlTWF0Y2hlcyhhbGVydCwgYWxlcnREdG8uZXZlbnRTdGF0ZSkpO1xuXG4gICAgaWYgKGV4aXN0QWxlcnRJbmRleCAhPT0gLTEpIHtcbiAgICAgIGFsZXJ0c1tleGlzdEFsZXJ0SW5kZXhdLmhhbmRsaW5nQnlVc2VyID0gYWxlcnREdG8uaGFuZGxpbmdCeVVzZXI7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGFsZXJ0cyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VBbGVydERpYWxvZ3MoYWxlcnRQSyk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Dcml0aWNhbEFsZXJ0RGlhbG9nKGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYWxlcnRUeXBlTmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFBlcmlwaGVyYWxFcXVpcG1lbnRFcnJvclthbGVydC5ldmVudERlc2NyaXB0aW9uXSk7XG4gICAgY29uc3QgY2xvdWRDb25maXJtRGlhbG9nRGF0YTogQ2xvdWRDb25maXJtRGlhbG9nRGF0YSA9IHtcbiAgICAgIGNvbmZpcm1NZXNzYWdlczogW3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5jcml0aWNhbF9hbGVydF9tZXNzYWdlLCB7XG4gICAgICAgIGFsZXJ0VHlwZU5hbWVcbiAgICAgIH0pXSxcbiAgICAgIGNvbmZpcm1UaXRsZTogYWxlcnRUeXBlTmFtZSxcbiAgICAgIG9rVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnllcyksXG4gICAgICBjYW5jZWxUZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FuY2VsKSxcbiAgICAgIGRldmljZToge1xuICAgICAgICBjb21tSWQ6IGFsZXJ0LnJlYWRlcklELnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWU6IGFsZXJ0LmRldmljZU5hbWVcbiAgICAgIH0sXG4gICAgICBwYXJrTmFtZTogYWxlcnQucGFya05hbWUsXG4gICAgICB6b25lTmFtZTogYWxlcnQucGFya1pvbmVOYW1lLFxuICAgICAgbm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkNyaXRpY2FsLFxuICAgICAgbm90aWZpY2F0aW9uU2V2ZXJpdHlJbnZlcnQ6IHRydWUsXG4gICAgICBkZXNjcmlwdGlvbjogYWxlcnQuZGVzY3JpcHRpb24sXG4gICAgICBjYXJQbGF0ZTogYWxlcnQuY2FyUGxhdGUsXG4gICAgfTtcblxuICAgIGNvbnN0IGFsZXJ0UEsgPSB0aGlzLmFsZXJ0UEsoYWxlcnQsIGd1aWQpO1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW48Ym9vbGVhbj4oQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBwYW5lbENsYXNzOiBgdGItY3JpdGljYWwtbW9kYWwtJHthbGVydFBLfWAsXG4gICAgICBkYXRhOiBjbG91ZENvbmZpcm1EaWFsb2dEYXRhLFxuICAgICAgaWQ6IGBub3RpZmljYXRpb24tbW9kYWwtJHthbGVydFBLfWAsXG4gICAgICBlbmFibGVkTWluaW1pemVkOiB0cnVlLFxuICAgIH0pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnVzZXJJbmZvKTtcbiAgICAgICAgY29uc3QgaGFuZGxlQWxlcnQ6IEhhbmRsaW5nQWxlcnREdG8gPSBuZXcgSGFuZGxpbmdBbGVydER0byh7XG4gICAgICAgICAgZ3VpZDogZ3VpZCxcbiAgICAgICAgICBwYXJrSWQ6IGFsZXJ0LnBhcmtJZCxcbiAgICAgICAgICBwYXJrTmFtZTogYWxlcnQucGFya05hbWUsXG4gICAgICAgICAgZGV2aWNlSWQ6IGFsZXJ0LmRldmljZUlELFxuICAgICAgICAgIGV2ZW50RGVzY3JpcHRpb246IGFsZXJ0LmV2ZW50RGVzY3JpcHRpb24sXG4gICAgICAgICAgdXNlckZ1bGxOYW1lOiB1c2VySW5mby5kaXNwbGF5TmFtZSxcbiAgICAgICAgICBpZDogYWxlcnQuaWQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlUHJveHkuaGFuZGxlQWxlcnROb3RpZmljYXRpb24oaGFuZGxlQWxlcnQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UudHJpZ2dlckFsZXJ0VG9hc3RFdmVudChyZXMuZGF0YSB8fCBhbGVydCwgZ3VpZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb25EaWFsb2cobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNsb3VkQ29uZmlybURpYWxvZ0RhdGE6IENsb3VkQ29uZmlybURpYWxvZ0RhdGEgPSB7XG4gICAgICBjb25maXJtTWVzc2FnZXM6IFt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZHluYW1pY19wcmljaW5nX2FsZXJ0X21lc3NhZ2UpXSxcbiAgICAgIGNvbmZpcm1UaXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19hbGVydF90aXRsZSksXG4gICAgICBjb25maXJtU3ViVGl0bGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfYWxlcnRfc3ViX3RpdGxlLCB7IGNvbmRpdGlvbk5hbWU6IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5jb25kaXRpb25OYW1lIH0pLFxuICAgICAgcGFya05hbWU6IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5wYXJraW5nTG90TmFtZSxcbiAgICAgIHpvbmVOYW1lOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uem9uZT8ubmFtZSxcbiAgICAgIG9rVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnllcyksXG4gICAgICBjYW5jZWxUZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FuY2VsKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbjxib29sZWFuPihDbG91ZENvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHBhbmVsQ2xhc3M6IGB0Yi1keW5hbWljLXByaWNpbmctY29uZGl0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uLmlkfWAsXG4gICAgICBkYXRhOiBjbG91ZENvbmZpcm1EaWFsb2dEYXRhLFxuICAgICAgaWQ6IGBub3RpZmljYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gLFxuICAgICAgZW5hYmxlZE1pbmltaXplZDogdHJ1ZSxcbiAgICB9KS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgY29uc3QgdXNlckluZm8gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS51c2VySW5mbyk7XG4gICAgICAgIGNvbnN0IGhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG86IEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8gPSBuZXcgSGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0byh7XG4gICAgICAgICAgY2xvdWRQYXJrSWQ6IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5jbG91ZFBhcmtJZCxcbiAgICAgICAgICB1c2VyRnVsbE5hbWU6IHVzZXJJbmZvLmRpc3BsYXlOYW1lLFxuICAgICAgICAgIGlkOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uaWQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlUHJveHkuaGFuZGxlRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb24oaGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bykuc3Vic2NyaWJlKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgY29uc3QgZHBjID0gcmVzLmRhdGEgfHwgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xuICAgICAgICAgIGNvbnN0IHJhdGUgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnJhdGVTZXJ2aWNlUHJveHkuZ2V0UmF0ZUJ5SWQoZHBjLnJhdGVJZCwgZHBjLmd1aWQpKTtcbiAgICAgICAgICBkcGMucmF0ZU5hbWUgPSByYXRlPy5kYXRhPy5uYW1lO1xuICAgICAgICAgIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UudHJpZ2dlckR5bmFtaWNQcmljaW5nVG9hc3RFdmVudChyZXMuZGF0YSB8fCBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGxheUFsZXJ0KGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuZGlzcGxheUFsZXJ0KGFsZXJ0LCBndWlkKTtcbiAgICBpZiAobm90aWZpY2F0aW9uKSB7XG4gICAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKTtcbiAgICAgIG5vdGlmaWNhdGlvbnNNYXBbYWxlcnRQS10gPSBub3RpZmljYXRpb24udG9hc3RJZDtcblxuICAgICAgbm90aWZpY2F0aW9uLm9uVGFwLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS50cmlnZ2VyQWxlcnRUb2FzdEV2ZW50KGFsZXJ0LCBndWlkKTtcbiAgICAgIH0pO1xuXG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRGlhbG9ncyhkaWFsb2dJZHM6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuZ2V0T3BlbkRpYWxvZ3MoKT8uZm9yRWFjaChkaWFsb2cgPT4ge1xuICAgICAgaWYgKGRpYWxvZ0lkcy5oYXMoZGlhbG9nLmlkKSkge1xuICAgICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VEaWFsb2dCeUlkKGRpYWxvZ0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvcGVuRGlhbG9ncyA9IHRoaXMubW9kYWxTZXJ2aWNlLmdldE9wZW5EaWFsb2dzKCk7XG4gICAgY29uc3QgZGlhbG9nID0gb3BlbkRpYWxvZ3MuZmluZChkaWFsb2cgPT4gZGlhbG9nLmlkID09PSBkaWFsb2dJZCk7XG5cbiAgICBpZiAoZGlhbG9nKSB7XG4gICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQWxlcnREaWFsb2dzKGFsZXJ0UEs6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGFsS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgICBgbm90aWZpY2F0aW9uLW1vZGFsLSR7YWxlcnRQS31gLFxuICAgICAgYGxwci1taXNtYXRjaC1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICAgIGBsb3N0LXRpY2tldC1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICBdKTtcblxuICAgIHRoaXMuY2xvc2VEaWFsb2dzKG1vZGFsS2V5cyk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlTm90aWZpY2F0aW9uRGlhbG9ncyhub3RpZmljYXRpb25QSzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbW9kYWxLZXlzID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgICAgIGBub3RpZmljYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gLFxuICAgICAgYGR5bmFtaWMtcHJpY2luZy1jb25maXJtYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gLFxuICAgIF0pO1xuXG4gICAgdGhpcy5jbG9zZURpYWxvZ3MobW9kYWxLZXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWxlcnRGb3JDbG9zaW5nKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFsZXJ0RHRvOiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYWxlcnRzID0gY3R4LmdldFN0YXRlKCkuYWxlcnRzO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcbiAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0RHRvLCBndWlkKTtcblxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XG4gICAgY29uc3QgYWxlcnRFeGlzdHMgPSBhbGVydHMuZmluZChhbGVydCA9PlxuICAgICAgdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKSA9PT0gYWxlcnRQSyAmJiB0aGlzLnN0YXRlTWF0Y2hlcyhhbGVydCwgYWxlcnREdG8uZXZlbnRTdGF0ZSlcbiAgICApO1xuXG4gICAgaWYgKCFhbGVydER0by5ldmVudFN0YXRlIHx8IGFsZXJ0RXhpc3RzKSB7XG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFthbGVydFBLXTtcbiAgICAgIHRoaXMuYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLmNsZWFyVG9hc3RzKHRvYXN0SWQpO1xuICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbYWxlcnRQS107XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkQWxlcnRzID0gYWxlcnRzLmZpbHRlcihhbGVydCA9PiB0aGlzLmFsZXJ0UEsoYWxlcnQsIGd1aWQpICE9PSBhbGVydFBLKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgICAgYWxlcnRzOiBmaWx0ZXJlZEFsZXJ0c1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XG4gICAgICB0aGlzLmNsb3NlQWxlcnREaWFsb2dzKGFsZXJ0UEspO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVHJpZ2dlcmVkRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBjdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBndWlkKTtcblxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSk7XG4gICAgaWYgKG5vdGlmaWNhdGlvbkV4aXN0cykge1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkV4aXN0cywgZ3VpZCk7XG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG4gICAgICB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5jbGVhclRvYXN0cyh0b2FzdElkKTtcbiAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcblxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+XG4gICAgICAgICEodGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5ndWlkKSA9PT0gbm90aWZpY2F0aW9uUEspKTtcblxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxuICAgICAgICBub3RpZmljYXRpb25zOiBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcbiAgICAgIHRoaXMuY2xvc2VOb3RpZmljYXRpb25EaWFsb2dzKG5vdGlmaWNhdGlvblBLKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlVHJpZ2dlcmVkRHluYW1pY1ByaWNpbmdDb25kaXRpb25zKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgY29uc3QgcGFya0lkID0gbm90aWZpY2F0aW9uRHRvPy5keW5hbWljUHJpY2luZ0NvbmRpdGlvbj8ucGFya0lkO1xuXG4gICAgLy8gZmluZCBhbGwgdGhlIGR5bmFtaWMgcHJpY2luZyB0cmlnZ2VyZWQgY29uZGl0aW9ucyBvZiBzYW1lIGd1aWQgYW5kIHBhcmtJZCB0byBiZSBjbG9zZVxuICAgIGNvbnN0IGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+ICEhbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uICYmXG4gICAgICBub3RpZmljYXRpb24uZ3VpZCA9PT0gZ3VpZCAmJiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya0lkID09PSBwYXJrSWQpO1xuXG4gICAgaWYgKGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZHAgb2YgZHluYW1pY1ByaWNpbmdOb3RpZmljYXRpb25FeGlzdHMpIHtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKGRwLCBndWlkKTtcbiAgICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuXG4gICAgICAgIHRoaXMuY2xvc2VOb3RpZmljYXRpb25EaWFsb2dzKG5vdGlmaWNhdGlvblBLKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+ICFub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24gfHwgIShub3RpZmljYXRpb24uZ3VpZCA9PT0gZ3VpZCAmJiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya0lkID09PSBwYXJrSWQpKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgICAgbm90aWZpY2F0aW9uczogZmlsdGVyZWROb3RpZmljYXRpb25zLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd1JhdGVBdXRvbWF0aWNTd2l0Y2hUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8pIHtcbiAgICBjb25zdCBkcGMgPSBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb247XG4gICAgY29uc3QgcmF0ZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucmF0ZVNlcnZpY2VQcm94eS5nZXRSYXRlQnlJZChkcGMucmF0ZUlkLCBkcGMuZ3VpZCkpO1xuICAgIGRwYy5yYXRlTmFtZSA9IHJhdGU/LmRhdGE/Lm5hbWU7XG4gICAgY29uc3QgbWVzc2FnZXMgPSB0aGlzLmZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlLmdldENvbW1hbmROb3RpZmljYXRpb25Db25maWdNZXNzYWdlcyhGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5TZXRBY3RpdmVSYXRlLCBudWxsLCBkcGMpO1xuICAgIGNvbnN0IGNvbmZpZzogQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZyA9IHtcbiAgICAgIG1lc3NhZ2VzLFxuICAgICAgY29tbWFuZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmZhY2lsaXR5X3JlbW90ZV9jb21tYW5kX3NldF9hY3RpdmVfcmF0ZSksXG4gICAgICBoUG9zaXRpb246IE5vdGlmaWNhdGlvbkhQb3NpdGlvbnMuUmlnaHQsXG4gICAgICB2UG9zaXRpb246IE5vdGlmaWNhdGlvblZQb3NpdGlvbnMuQm90dG9tLFxuICAgICAgZHVyYXRpb246IDcgKiBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUyxcbiAgICAgIGNsYXNzOiBDb21tYW5kTm90aWZpY2F0aW9uQm9yZGVyQ2xhc3MuU3VjY2VzcyxcbiAgICAgIHR5cGU6IENvbW1hbmROb3RpZmljYXRpb25UeXBlLlN1Y2Nlc3NcbiAgICB9O1xuXG4gICAgdGhpcy5jb21tYW5kTm90aWZpY2F0aW9uU2VydmljZS5zaG93KGNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbXBvbmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dSYXRlRmFsbGVuQmFja1RvRGVmYXVsdFJhdGVUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8pIHtcbiAgICBjb25zdCBkcGMgPSBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb247XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZHluYW1pY19wcmljaW5nX3JldmVydGVkX3RvX2RlZmF1bHRfcmF0ZSk7XG4gICAgY29uc3Qgc3ViVGl0bGUgPSBgJHtkcGMucGFya2luZ0xvdE5hbWV9JHtkcGMuem9uZT8ubmFtZSA/ICcgfCAnICsgZHBjLnpvbmU/Lm5hbWUgOiAnJ31gO1xuICAgIGNvbnN0IGNvbmZpZzogQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZyA9IHtcbiAgICAgIG1lc3NhZ2VzOiBbe1xuICAgICAgICB2YWx1ZTogdGl0bGUsXG4gICAgICAgIGNsYXNzOiBOb3RpZmljYXRpb25DbGFzcy50aXRsZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBzdWJUaXRsZSxcbiAgICAgICAgY2xhc3M6IE5vdGlmaWNhdGlvbkNsYXNzLnN1YlRpdGxlLFxuICAgICAgfV0sXG4gICAgICBjb21tYW5kOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZmFjaWxpdHlfcmVtb3RlX2NvbW1hbmRfc2V0X2FjdGl2ZV9yYXRlKSxcbiAgICAgIGhQb3NpdGlvbjogTm90aWZpY2F0aW9uSFBvc2l0aW9ucy5SaWdodCxcbiAgICAgIHZQb3NpdGlvbjogTm90aWZpY2F0aW9uVlBvc2l0aW9ucy5Cb3R0b20sXG4gICAgICBkdXJhdGlvbjogNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgY2xhc3M6IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcy5TdWNjZXNzLFxuICAgICAgdHlwZTogQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xuICAgIH07XG5cbiAgICB0aGlzLmNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLnNob3coY29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uQ29tcG9uZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBbGVydEVuYWJsZWRGb3JVc2VyKGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IGlzQWxlcnRFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVzZXJTZXR0aW5ncyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLm1hcHBlZFVzZXJTZXR0aW5ncyk7XG4gICAgY29uc3QgdXNlckFsZXJ0c1ByZWZlcmVuY2VzOiBBbGVydFByZWZlcmVuY2VzU2V0dGluZ3NEdG8gPSB1c2VyU2V0dGluZ3MuZ2V0KFNldHRpbmdzQ2F0ZWdvcnkuQWxlcnRzUHJlZmVyZW5jZXMpO1xuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gdXNlckFsZXJ0c1ByZWZlcmVuY2VzIHdlIGRvbid0IGZpbHRlciBhdCBhbGxcbiAgICBpZiAoISF1c2VyQWxlcnRzUHJlZmVyZW5jZXMpIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIGVuYWJsZWQgdGhlIG5vdGlmaWNhdGlvbnNcbiAgICAgIC8vIEVsc2UgdGhlIHVzZXIgZGlzYWJsZWQgYWxsIHRoZSBub3RpZmljYXRpb25zXG4gICAgICBpZiAodXNlckFsZXJ0c1ByZWZlcmVuY2VzLmlzRW5hYmxlZCkge1xuICAgICAgICBjb25zdCBzcGFya1ZlcnNpb24gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KCh7IHNtYXJ0cGFyazogeyB2ZXJzaW9ucyB9IH0pID0+IHZlcnNpb25zW2d1aWRdKTtcbiAgICAgICAgY29uc3QgaXNBbGVydEZpbHRlclZlcnNpb25TdXBwb3J0ZWQgPSBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgVkVSU0lPTl85XzJfMCk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHZlcnNpb24gaXMgOS4xLjAgb3IgYmVsb3csIGFsbCBub3RpZmljYXRpb25zIGFyZSBlbmFibGVkXG4gICAgICAgIC8vIElmIHRoZSB2ZXJzaW9uIGlzIDkuMi4wIGFuZCBhYm92ZSwgd2UgZmlsdGVyIGJ5IHRoZSBwcmVmZXJlbmNlc1xuICAgICAgICBpc0FsZXJ0RW5hYmxlZCA9ICFpc0FsZXJ0RmlsdGVyVmVyc2lvblN1cHBvcnRlZCB8fCB0aGlzLmlzQWxlcnRFbmFibGVkSW5QcmVmZXJlbmNlcyhhbGVydCwgZ3VpZCwgdXNlckFsZXJ0c1ByZWZlcmVuY2VzLnByZWZlcmVuY2VzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzQWxlcnRFbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQWxlcnRFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FsZXJ0RW5hYmxlZEluUHJlZmVyZW5jZXMoYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcsIHVzZXJBbGVydFR5cGVQcmVmZXJlbmNlc01hcDogQWxlcnRzUHJlZmVyZW5jZXNNYXApIHtcbiAgICBsZXQgaXNBbGVydEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBhbnkgZmFjaWxpdHkgc2VsZWN0ZWQsIHdlIGNvbnRpbnVlIHRvIGNoZWNrXG4gICAgLy8gRWxzZSB3ZSBhbGxvdyBhbGwgdG8gcGFzcyBhcyB0aGUgdXNlciBkaWRuJ3Qgc2V0IHByZWZlcmVuY2VzIHlldFxuICAgIGlmIChPYmplY3Qua2V5cyh1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXApLmxlbmd0aCkge1xuICAgICAgaXNBbGVydEVuYWJsZWQgPSBmYWxzZTtcblxuICAgICAgLy8gR2V0cyB0aGUgdHJlZUlkIG9mIHRoZSB0ZW5hbnQgLSBJbiBjYXNlIHRoZSB1c2VyIHNlbGVjdGVkIFwiQWxsIFRlbmFudCBQYXJraW5nIExvdHNcIlxuICAgICAgY29uc3QgdGVuYW50VHJlZUlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudGVuYW50SW5mbyk/LnRyZWVJZDtcblxuICAgICAgLy8gR2V0cyB0aGUgdHJlZSBwYXJrIElkIG9mIHRoZSBhbGVydFxuICAgICAgY29uc3QgYWxlcnRUcmVlUGFya0lkID0gdGhpcy5nZXRDbG91ZFBhcmtJZChhbGVydCwgZ3VpZCk7XG5cbiAgICAgIC8vIFdlIEdldCB0aGUgc2V0dGluZyBvZiB0aGUgUGFyaywgUGFyZW50UGFyayBvciBQYXJrc1RyZWVSb290XG4gICAgICBjb25zdCBmYWNpbGl0eVByZWZlcmVuY2VzTWFwOiBGYWNpbGl0eVByZWZlcmVuY2VzTWFwID0gdXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwW2FsZXJ0VHJlZVBhcmtJZF0gfHwgdXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwW3RlbmFudFRyZWVJZF07XG5cbiAgICAgIC8vIFdlIGNoZWNrIGlmIHRoZSBmYWNpbGl0eSB3YXMgc2VsZWN0ZWRcbiAgICAgIGlmIChmYWNpbGl0eVByZWZlcmVuY2VzTWFwKSB7XG4gICAgICAgIGNvbnN0IGFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwOiBBbGVydFR5cGVQcmVmZXJlbmNlc01hcCA9IGZhY2lsaXR5UHJlZmVyZW5jZXNNYXBbYWxlcnQuZXZlbnREZXNjcmlwdGlvbl07XG5cbiAgICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGFsZXJ0IHR5cGUgd2FzIHNlbGVjdGVkXG4gICAgICAgIGlmIChhbGVydFR5cGVQcmVmZXJlbmNlc01hcCkge1xuICAgICAgICAgIGNvbnN0IGFsZXJ0RGV2aWNlVHlwZTogQWxlcnRzRGV2aWNlVHlwZSA9IHRoaXMuZ2V0QWxlcnRzRGV2aWNlVHlwZShhbGVydCk7XG5cbiAgICAgICAgICAvLyBXZSBjaGVjayB0aGUgaWYgdGhlIGRldmljZSB0eXBlIHdhcyBzZWxlY3RlZFxuICAgICAgICAgIGlzQWxlcnRFbmFibGVkID0gYWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbYWxlcnREZXZpY2VUeXBlXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc0FsZXJ0RW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxlcnRzRGV2aWNlVHlwZShhbGVydDogQWxlcnREdG8pOiBBbGVydHNEZXZpY2VUeXBlIHtcbiAgICBsZXQgYWxlcnREZXZpY2VUeXBlOiBBbGVydHNEZXZpY2VUeXBlO1xuICAgIGNvbnN0IGFsZXJ0c0RldmljZVR5cGU6IEFsZXJ0c0RldmljZVR5cGVbXSA9IERldmljZVR5cGVzQWxlcnRzTWFwcGluZy5nZXQoYWxlcnQuZGV2aWNlVHlwZSk7XG5cbiAgICBzd2l0Y2ggKGFsZXJ0LmRldmljZVR5cGUpIHtcbiAgICAgIGNhc2UgRGV2aWNlVHlwZS5DYXNoOlxuICAgICAgICBhbGVydERldmljZVR5cGUgPSBhbGVydC5yZWFkZXJJRCA9PT0gMCA/IEFsZXJ0c0RldmljZVR5cGUuTWFzdGVyIDogQWxlcnRzRGV2aWNlVHlwZS5DYXNoUmVnaXN0ZXI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYWxlcnREZXZpY2VUeXBlID0gYWxlcnRzRGV2aWNlVHlwZT8uWzBdO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gYWxlcnREZXZpY2VUeXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uQ2hhbmdlKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9uSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbihjdHgsIHsgbm90aWZpY2F0aW9uRHRvLCBndWlkIH0pO1xuXG4gICAgdGhpcy5oYW5kbGVUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbihjdHgsIG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG5cbiAgICBpZiAobm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlzVHJpZ2dlcmVkKSB7XG4gICAgICB0aGlzLnByb2Nlc3NBbmREaXNwbGF5Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCwgY3R4KTtcbiAgICB9IGVsc2UgaWYgKG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5pc0FjdGl2YXRlZCkge1xuICAgICAgLy8gaGFuZGxlIG5vdGlmaWNhdGlvbiBpbmRpY2F0aW5nIHRoZSByYXRlIGhhcyBmYWxsZW4gYmFjayB0byB0aGUgZGVmYXVsdCByYXRlXG4gICAgICB0aGlzLnNob3dSYXRlRmFsbGVuQmFja1RvRGVmYXVsdFJhdGVUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uRHRvKS50aGVuKCk7XG4gICAgfSBlbHNlIGlmIChub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24udHJpZ2dlckFjdGlvbiA9PT0gRHluYW1pY1ByaWNpbmdUcmlnZ2VyQWN0aW9uLkF1dG9tYXRpY1N3aXRjaFJhdGUpIHtcbiAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb24gaW5kaWNhdGluZyB0aGUgcmF0ZSBoYXMgYXV0b21hdGljIHN3aXRjaFxuICAgICAgdGhpcy5zaG93UmF0ZUF1dG9tYXRpY1N3aXRjaFRvYXN0TWVzc2FnZShub3RpZmljYXRpb25EdG8pLnRoZW4oKTtcbiAgICAgIHRoaXMuY2xvc2VUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbnMoY3R4LCBub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xvdWRQYXJrSWQoYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGFsZXJ0UGFya0lkID0gYWxlcnQubXVsdGlQYXJrUGFyZW50SWQgPiAwID8gYWxlcnQubXVsdGlQYXJrUGFyZW50SWQgOiBhbGVydC5wYXJrSWQ7XG4gICAgY29uc3QgbG90c01hcCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mYWNpbGl0eURpY3Rpb25hcnkpW2d1aWRdO1xuICAgIHJldHVybiBsb3RzTWFwW2FsZXJ0UGFya0lkXT8uY2xvdWRJZDtcbiAgfVxuXG4gIHByaXZhdGUgcGtNYXRjaGVzID0gKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBub3RpZmljYXRpb25QSzogc3RyaW5nKSA9PiB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkR0bywgbm90aWZpY2F0aW9uRHRvLmd1aWQpID09PSBub3RpZmljYXRpb25QSztcbiAgcHJpdmF0ZSBzdGF0ZU1hdGNoZXMgPSAoYWxlcnREdG86IEFsZXJ0RHRvLCBldmVudFN0YXRlOiBib29sZWFuKSA9PiBhbGVydER0by5ldmVudFN0YXRlID09PSBldmVudFN0YXRlO1xuICBwcml2YXRlIGFsZXJ0UEsgPSAoYWxlcnREdG86IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgYCR7Z3VpZH1fJHthbGVydER0by5wYXJrSWR9XyR7YWxlcnREdG8ucmVhZGVySUR9XyR7YWxlcnREdG8uZGV2aWNlSUR9XyR7YWxlcnREdG8uZXZlbnREZXNjcmlwdGlvbn1gO1xuICBwcml2YXRlIG5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBsZXQga2V5OiBzdHJpbmcgPSAnJztcbiAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbkR0by50eXBlKSB7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XG4gICAgICAgIGNvbnN0IHsgaWQsIHpvbmUgfSA9IG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICAgICAga2V5ID0gem9uZSA/IGAke2d1aWR9XyR7aWR9XyR7em9uZS5pZH1gIDogYCR7Z3VpZH1fJHtpZH1gO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bnN1cHBvcnRlZCBub3RpZmljYXRpb24gdHlwZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4pOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IGN0eC5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGFsZXJ0cyA9IHN0YXRlLmFsZXJ0cztcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gc3RhdGUubm90aWZpY2F0aW9ucztcblxuICAgIGNvbnN0IGJhZGdlVmFsdWUgPSBhbGVydHMubGVuZ3RoICsgbm90aWZpY2F0aW9ucy5sZW5ndGg7XG4gICAgY29uc3QgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5ID0gdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS5nZXRBZ2dyZWdhdGVkTm90aWZpY2F0aW9uVHlwZShhbGVydHMsIG5vdGlmaWNhdGlvbnMpO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgYmFkZ2VWYWx1ZSxcbiAgICAgIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eSxcbiAgICAgIGRpc3BsYXlCYWRnZTogYmFkZ2VWYWx1ZSA+IDBcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0aGF0IHByb2Nlc3NlcyBhbmQgZGlzcGxheXMgdGhlIGFsZXJ0IGJhc2VkIG9uIGNvbmRpdGlvbnNcbiAgcHJpdmF0ZSBwcm9jZXNzQW5kRGlzcGxheUFsZXJ0KGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgIGNvbnN0IGlzQ2NNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2M7XG5cbiAgICBpZiAoIWlzTW9iaWxlQXBwTW9kZSAmJiBpc0NjTW9kdWxlKSB7XG4gICAgICBzd2l0Y2ggKGFsZXJ0LmV2ZW50RGVzY3JpcHRpb24pIHtcbiAgICAgICAgY2FzZSBQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3IuTE9TVF9USUNLRVQ6XG4gICAgICAgIGNhc2UgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLkxSUF9OT1RfTUFUQ0g6XG4gICAgICAgICAgdGhpcy5vcGVuQ3JpdGljYWxBbGVydERpYWxvZyhhbGVydCwgZ3VpZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5kaXNwbGF5QWxlcnQoY3R4LCBhbGVydCwgZ3VpZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTWV0aG9kIHRoYXQgcHJvY2Vzc2VzIGFuZCBkaXNwbGF5cyB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGNvbmRpdGlvbnNcbiAgcHJpdmF0ZSBwcm9jZXNzQW5kRGlzcGxheU5vdGlmaWNhdGlvbihub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nLCBjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+KTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIHBlcm1pc3Npb25cbiAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gdGhpcy5mYWNpbGl0eVNlcnZpY2UuaGFzUGVybWlzc2lvblR5cGVCeVBhcmsoXG4gICAgICBQZXJtaXNzaW9uVHlwZS5Mb3RDb25maWd1cmF0aW9uRHluYW1pY1ByaWNpbmcsIG5vdGlmaWNhdGlvbkR0by5ndWlkLCBub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya2luZ0xvdElkXG4gICAgKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSBhcHAgaXMgaW4gbW9iaWxlIG1vZGUgb3IgaWYgaXQncyBpbiB0aGUgY29ycmVjdCBtb2R1bGVcbiAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgY29uc3QgaXNDY01vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSkgPT09IEFwcE1vZHVsZS5DYztcblxuICAgIC8vIFByb2NlZWQgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIG1ldFxuICAgIGlmICghaXNNb2JpbGVBcHBNb2RlICYmIGlzQ2NNb2R1bGUgJiYgaGFzUGVybWlzc2lvbikge1xuICAgICAgdGhpcy5vcGVuRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb25EaWFsb2cobm90aWZpY2F0aW9uRHRvLCBndWlkKTtcblxuICAgICAgLy8gUHVzaCB0aGUgbmV3IG5vdGlmaWNhdGlvbiB0byB0aGUgYXJyYXkgYW5kIHNhdmUgaW4gc3RhdGVcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBjdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zO1xuICAgICAgbm90aWZpY2F0aW9ucy51bnNoaWZ0KG5vdGlmaWNhdGlvbkR0byk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnMsXG4gICAgICB9KTtcblxuICAgICAgLy8gUmVjYWxjdWxhdGUgYmFkZ2UgYW5kIHNldmVyaXR5XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSGFuZGxlZFVzZXJGb3JEeW5hbWljUHJpY2luZ05vdGlmaWNhdGlvbihcbiAgICBjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LFxuICAgIG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbkR0b1tdLFxuICAgIG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLFxuICAgIG5vdGlmaWNhdGlvblBLOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgIGNvbnN0IGV4aXN0Tm90aWZpY2F0aW9uSW5kZXggPSBub3RpZmljYXRpb25zLmZpbmRJbmRleChub3RpZmljYXRpb24gPT4gdGhpcy5wa01hdGNoZXMobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb25QSykpO1xuXG4gICAgICBpZiAoZXhpc3ROb3RpZmljYXRpb25JbmRleCAhPT0gLTEgJiYgbm90aWZpY2F0aW9uc1tleGlzdE5vdGlmaWNhdGlvbkluZGV4XS5keW5hbWljUHJpY2luZ0NvbmRpdGlvbikge1xuICAgICAgICBub3RpZmljYXRpb25zW2V4aXN0Tm90aWZpY2F0aW9uSW5kZXhdLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmhhbmRsaW5nQnlVc2VyID1cbiAgICAgICAgICBub3RpZmljYXRpb25EdG8/LmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uPy5oYW5kbGluZ0J5VXNlcjtcblxuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7IG5vdGlmaWNhdGlvbnMgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc05vdGlmaWNhdGlvbkVuYWJsZWRGb3JVc2VyKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvLCBmYWNpbGl0eUlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBsZXQgaXNOb3RpZmljYXRpb25FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdCB1c2VyU2V0dGluZ3MgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS5tYXBwZWRVc2VyU2V0dGluZ3MpO1xuICAgIGNvbnN0IHVzZXJOb3RpZmljYXRpb25QcmVmZXJlbmNlczogTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNTZXR0aW5nc0R0byA9IHVzZXJTZXR0aW5ncy5nZXQoU2V0dGluZ3NDYXRlZ29yeS5Ob3RpZmljYXRpb25QcmVmZXJlbmNlcyk7XG5cbiAgICBpZiAodXNlck5vdGlmaWNhdGlvblByZWZlcmVuY2VzPy5pc0VuYWJsZWQpIHtcbiAgICAgIC8vIEdldHMgdGhlIGdyb3VwIGZhY2lsaXR5IElkIG9mIHRoZSB0ZW5hbnQgLSBJbiBjYXNlIHRoZSB1c2VyIHNlbGVjdGVkIFwiQWxsIFRlbmFudCBQYXJraW5nIExvdHNcIlxuICAgICAgY29uc3QgdGVuYW50RmFjaWxpdHlJZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnRlbmFudEluZm8pPy50cmVlSWQ7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyh1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMucHJlZmVyZW5jZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBIYW5kbGUgbmV3IHVzZXJzOiBlbXB0eSBwcmVmZXJlbmNlcyBtZWFucyBkZWZhdWx0IGFjY2VzcyB0byBhbGwgbm90aWZpY2F0aW9uc1xuICAgICAgICAvLyBUaGlzIGFsbG93cyBuZXcgdXNlcnMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zIHVudGlsIHRoZXkgZXhwbGljaXRseSBjb25maWd1cmUgdGhlaXIgcHJlZmVyZW5jZXNcbiAgICAgICAgaXNOb3RpZmljYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciB1c2VycyB3aXRoIGNvbmZpZ3VyZWQgcHJlZmVyZW5jZXMsIGNoZWNrIGlmIHRoZSBzcGVjaWZpYyBmYWNpbGl0eSBhbmQgbm90aWZpY2F0aW9uIHR5cGUgYXJlIGVuYWJsZWRcbiAgICAgICAgLy8gVXNlIHRlbmFudCBmYWNpbGl0eSBwcmVmZXJlbmNlcyBmaXJzdCwgZmFsbGJhY2sgdG8gc3BlY2lmaWMgZmFjaWxpdHkgcHJlZmVyZW5jZXNcbiAgICAgICAgY29uc3QgZmFjaWxpdHlQcmVmZXJlbmNlcyA9IHVzZXJOb3RpZmljYXRpb25QcmVmZXJlbmNlcy5wcmVmZXJlbmNlc1t0ZW5hbnRGYWNpbGl0eUlkXSA/P1xuICAgICAgICAgIHVzZXJOb3RpZmljYXRpb25QcmVmZXJlbmNlcy5wcmVmZXJlbmNlc1tmYWNpbGl0eUlkXTtcblxuICAgICAgICBpZiAoZmFjaWxpdHlQcmVmZXJlbmNlcz8uW25vdGlmaWNhdGlvbi50eXBlXSkge1xuICAgICAgICAgIGlzTm90aWZpY2F0aW9uRW5hYmxlZCA9IGZhY2lsaXR5UHJlZmVyZW5jZXNbbm90aWZpY2F0aW9uLnR5cGVdLmVuYWJsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc05vdGlmaWNhdGlvbkVuYWJsZWQ7XG4gIH1cbn1cbiJdfQ==
671
+ }], ctorParameters: function () { return [{ type: i1.AppConfigService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i4.Store }, { type: i5.AlertsAndNotificationsServiceProxy }, { type: i6.AlertNotificationService }, { type: i7.AlertsAndNotificationsService }, { type: i8.CommandNotificationService }, { type: i9.BaseFacilityCommandsService }, { type: i10.FacilityService }, { type: i11.FacilityServiceProxy }, { type: i1.AppConfigService }, { type: i5.MobileServiceProxy }]; }, propDecorators: { onUpdateUserAlertsPreferencesAction: [], onUpdateUserNotificaitonsPreferencesAction: [], onLoadAlertsAndNotificationsAction: [], onLoadMobileNotificationsAction: [], onClearAlertsAndNotificationsAction: [], onRemoveExpiredAlertsAndNotificationsAction: [], onAlertChangedAction: [], onNotificationChangeAction: [], onHandledNotificationAction: [], onHandleNotificationAction: [], onHandleAlertsAction: [] } });
672
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9tb2R1bGVzL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBRW5ILE9BQU8sRUFBRSw4QkFBOEIsRUFBNkIsdUJBQXVCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUNwTCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtRkFBbUYsQ0FBQztBQUVqSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN0SSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JB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WUFDbkIsZ0JBQWdCLEVBQUUsRUFBRTtTQUNyQjtLQUNGLENBQUM7R0FFVywyQkFBMkIsQ0Ftc0J2QztTQW5zQlksMkJBQTJCOzRGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVU7K2dCQTZDVCxtQ0FBbUMsTUFVbkMsMENBQTBDLE1BVTFDLGtDQUFrQyxNQWVsQywrQkFBK0IsTUFjL0IsbUNBQW1DLE1BWW5DLDJDQUEyQyxNQWEzQyxvQkFBb0IsTUFpQ3BCLDBCQUEwQixNQWUxQiwyQkFBMkIsTUEwQjNCLDBCQUEwQixNQXFCMUIsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jbG91ZC1jb25maXJtLWRpYWxvZy9jbG91ZC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxlcnROb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vYWxlcnQtbm90aWZpY2F0aW9uL2FsZXJ0LW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcywgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi1jb25maWcnO1xuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2xhc3MsIE5vdGlmaWNhdGlvbkhQb3NpdGlvbnMsIE5vdGlmaWNhdGlvblZQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24tY29uZmlnJztcbmltcG9ydCB7IE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xuaW1wb3J0IHsgVkVSU0lPTl85XzJfMCwgVkVSU0lPTl9WMSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBEZXZpY2VUeXBlc0FsZXJ0c01hcHBpbmcgfSBmcm9tICcuLi8uLi9lbnVtcy9hbGVydHMtZGV2aWNlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy9sb2NhbGl6YXRpb24uZW51bSc7XG5pbXBvcnQgeyBDbG91ZENvbmZpcm1EaWFsb2dEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jbG91ZC1jb25maXJtLWRpYWxvZy1kYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbGVydER0bywgQWxlcnRQcmVmZXJlbmNlc1NldHRpbmdzRHRvLCBBbGVydHNBbmROb3RpZmljYXRpb25zRHRvLCBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LCBBbGVydHNEZXZpY2VUeXBlLCBBcHBNb2R1bGUsIERldmljZVR5cGUsIER5bmFtaWNQcmljaW5nVHJpZ2dlckFjdGlvbiwgRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMsIEhhbmRsaW5nQWxlcnREdG8sIEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8sIE1vYmlsZVNlcnZpY2VQcm94eSwgTm90aWZpY2F0aW9uRHRvLCBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1NldHRpbmdzRHRvLCBOb3RpZmljYXRpb25TZXZlcml0eSwgTm90aWZpY2F0aW9uVHlwZSwgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLCBQZXJtaXNzaW9uVHlwZSwgU2V0dGluZ3NDYXRlZ29yeSwgU3BhcmtTZXR0aW5nc0R0byB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEZhY2lsaXR5U2VydmljZVByb3h5IH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9lZGdlLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBCYXNlRmFjaWxpdHlDb21tYW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTnVtYmVyTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy9zdXBwb3J0LXZlcnNpb24udXRpbCc7XG5pbXBvcnQgeyBTZXNzaW9uU3RhdGUgfSBmcm9tICcuLi9hdXRoL3Nlc3Npb24uc3RhdGUnO1xuaW1wb3J0IHsgRmFjaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vZmFjaWxpdHknO1xuaW1wb3J0IHsgRmFjaWxpdHlTdGF0ZSB9IGZyb20gJy4uL2ZhY2lsaXR5L2ZhY2lsaXR5LnN0YXRlJztcbmltcG9ydCB7IFBhcmtNYW5hZ2VyU3RhdGUgfSBmcm9tICcuLi9wYXJrLW1hbmFnZXIvcGFyay1tYW5hZ2VyLnN0YXRlJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBVcGRhdGVVc2VyU2V0dGluZ3NBY3Rpb24gfSBmcm9tICcuLi91c2VyLXNldHRpbmdzL3VzZXItc2V0dGluZ3MuYWN0aW9ucyc7XG5pbXBvcnQge1xuICBBbGVydENoYW5nZWRBY3Rpb24sXG4gIENsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbiwgSGFuZGxlQWxlcnRzQWN0aW9uLCBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uLCBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24sXG4gIExvYWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uLFxuICBMb2FkTW9iaWxlTm90aWZpY2F0aW9uc0FjdGlvbixcbiAgTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbixcbiAgUmVtb3ZlRXhwaXJlZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24sIFVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvbixcbiAgVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvblxufSBmcm9tICcuL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy5hY3Rpb25zJztcbmltcG9ydCB7IEFsZXJ0c1ByZWZlcmVuY2VzTWFwLCBBbGVydFR5cGVQcmVmZXJlbmNlc01hcCwgRmFjaWxpdHlQcmVmZXJlbmNlc01hcCB9IGZyb20gJy4vYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJy4vYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCB7XG4gIGFsZXJ0czogQWxlcnREdG9bXTtcbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uRHRvW107XG4gIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eTogTm90aWZpY2F0aW9uU2V2ZXJpdHk7XG4gIGJhZGdlVmFsdWU6IG51bWJlcixcbiAgZGlzcGxheUJhZGdlOiBib29sZWFuLFxuICBub3RpZmljYXRpb25zTWFwOiBOdW1iZXJNYXA8bnVtYmVyPjtcbn1cblxuQFN0YXRlPEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4oe1xuICBuYW1lOiAnYWxlcnRzQW5kTm90aWZpY2F0aW9ucycsXG4gIGRlZmF1bHRzOiB7XG4gICAgYWxlcnRzOiBbXSxcbiAgICBub3RpZmljYXRpb25zOiBbXSxcbiAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkxvdyxcbiAgICBiYWRnZVZhbHVlOiAwLFxuICAgIGRpc3BsYXlCYWRnZTogZmFsc2UsXG4gICAgbm90aWZpY2F0aW9uc01hcDoge30sXG4gIH0sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTdGF0ZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBhbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5OiBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlOiBBbGVydE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tYW5kTm90aWZpY2F0aW9uU2VydmljZTogQ29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eUNvbW1hbmRzU2VydmljZTogQmFzZUZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlOiBGYWNpbGl0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eVNlcnZpY2VQcm94eTogRmFjaWxpdHlTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9iaWxlU2VydmljZVByb3h5OiBNb2JpbGVTZXJ2aWNlUHJveHkpIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBhbGVydHMoc3RhdGU6IEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCk6IEFsZXJ0RHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5hbGVydHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgbm90aWZpY2F0aW9ucyhzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogTm90aWZpY2F0aW9uRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5ub3RpZmljYXRpb25zO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eShzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogTm90aWZpY2F0aW9uU2V2ZXJpdHkge1xuICAgIHJldHVybiBzdGF0ZS5hZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgYmFkZ2VWYWx1ZShzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RhdGUuYmFkZ2VWYWx1ZTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBkaXNwbGF5QmFkZ2Uoc3RhdGU6IEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5kaXNwbGF5QmFkZ2U7XG4gIH1cblxuICBAQWN0aW9uKFVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvbilcbiAgb25VcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBVcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24pIHtcbiAgICBjb25zdCBzZXR0aW5nOiBTcGFya1NldHRpbmdzRHRvID0gbmV3IFNwYXJrU2V0dGluZ3NEdG8oe1xuICAgICAgY2F0ZWdvcnk6IFNldHRpbmdzQ2F0ZWdvcnkuQWxlcnRzUHJlZmVyZW5jZXMsXG4gICAgICBzZXR0aW5nc0pzb246IEpTT04uc3RyaW5naWZ5KGFjdGlvbi51c2VyTm90aWZpY2F0aW9uc1ByZWZlcmVuY2VzKSxcbiAgICB9KTtcblxuICAgIGN0eC5kaXNwYXRjaChuZXcgVXBkYXRlVXNlclNldHRpbmdzQWN0aW9uKHNldHRpbmcpKTtcbiAgfVxuXG4gIEBBY3Rpb24oVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvbilcbiAgb25VcGRhdGVVc2VyTm90aWZpY2FpdG9uc1ByZWZlcmVuY2VzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFjdGlvbjogVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvbikge1xuICAgIGNvbnN0IHNldHRpbmc6IFNwYXJrU2V0dGluZ3NEdG8gPSBuZXcgU3BhcmtTZXR0aW5nc0R0byh7XG4gICAgICBjYXRlZ29yeTogU2V0dGluZ3NDYXRlZ29yeS5Ob3RpZmljYXRpb25QcmVmZXJlbmNlcyxcbiAgICAgIHNldHRpbmdzSnNvbjogSlNPTi5zdHJpbmdpZnkoYWN0aW9uLnVzZXJOb3RpZmljYXRpb25zUHJlZmVyZW5jZXMpLFxuICAgIH0pO1xuXG4gICAgY3R4LmRpc3BhdGNoKG5ldyBVcGRhdGVVc2VyU2V0dGluZ3NBY3Rpb24oc2V0dGluZykpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbilcbiAgb25Mb2FkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCB7IG1pbnV0ZXNBZ28gfTogTG9hZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24pIHtcbiAgICBjb25zdCBhbGVydHNBbmROb3RpZmljYXRpb25zJCA9IHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eS5nZXRBbGVydHNBbmROb3RpZmljYXRpb25zKG1pbnV0ZXNBZ28pO1xuXG4gICAgcmV0dXJuIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMkLnBpcGUodGFwKGFzeW5jIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMgPT4ge1xuICAgICAgY29uc3QgcG9wdWxhdGVOb3RpZmljYXRpb25zOiBBbGVydHNBbmROb3RpZmljYXRpb25zRHRvID0gYXdhaXQgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS5wb3B1bGF0ZUFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMoYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgYWxlcnRzOiBwb3B1bGF0ZU5vdGlmaWNhdGlvbnMuYWxlcnRzID8/IFtdLFxuICAgICAgICBub3RpZmljYXRpb25zOiBwb3B1bGF0ZU5vdGlmaWNhdGlvbnMubm90aWZpY2F0aW9ucyA/PyBbXSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZE1vYmlsZU5vdGlmaWNhdGlvbnNBY3Rpb24pXG4gIG9uTG9hZE1vYmlsZU5vdGlmaWNhdGlvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBtaW51dGVzQWdvIH06IExvYWRNb2JpbGVOb3RpZmljYXRpb25zQWN0aW9uKSB7XG4gICAgY29uc3QgYWxlcnRzQW5kTm90aWZpY2F0aW9ucyQgPSB0aGlzLm1vYmlsZVNlcnZpY2VQcm94eS5nZXRNb2JpbGVBbGVydHNBbmROb3RpZmljYXRpb24obWludXRlc0FnbywgVkVSU0lPTl9WMSk7XG5cbiAgICByZXR1cm4gYWxlcnRzQW5kTm90aWZpY2F0aW9ucyQucGlwZSh0YXAoYXN5bmMgYWxlcnRzQW5kTm90aWZpY2F0aW9ucyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGFsZXJ0czogYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhLmFsZXJ0cyA/PyBbXSxcbiAgICAgICAgbm90aWZpY2F0aW9uczogYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhLm5vdGlmaWNhdGlvbnMgPz8gW10sXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbilcbiAgb25DbGVhckFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgXzogQ2xlYXJBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgYWxlcnRzOiBbXSxcbiAgICAgIG5vdGlmaWNhdGlvbnM6IFtdLFxuICAgICAgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5OiBOb3RpZmljYXRpb25TZXZlcml0eS5Mb3csXG4gICAgICBiYWRnZVZhbHVlOiAwLFxuICAgICAgZGlzcGxheUJhZGdlOiBmYWxzZSxcbiAgICAgIG5vdGlmaWNhdGlvbnNNYXA6IHt9XG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFJlbW92ZUV4cGlyZWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKVxuICBvblJlbW92ZUV4cGlyZWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFjdGlvbjogUmVtb3ZlRXhwaXJlZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24pIHtcbiAgICBjb25zdCBub3dVdGMgPSBtb21lbnQudXRjKCk7IC8vIEN1cnJlbnQgVVRDIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcbiAgICBjb25zdCBtaW51dGVzQWdvID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYWN0aXZlTm90aWZpY2F0aW9ucy5taW51dGVzQWdvO1xuICAgIGNvbnN0IGFsZXJ0cyA9IGN0eC5nZXRTdGF0ZSgpLmFsZXJ0cy5maWx0ZXIoYWxlcnQgPT4gbW9tZW50LnV0YyhhbGVydC5jbG91ZEV2ZW50RGF0ZVRpbWUpLmFkZChtaW51dGVzQWdvLCAnbWludXRlcycpLmlzQWZ0ZXIobm93VXRjKSk7XG5cbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBhbGVydHNcbiAgICB9KTtcblxuICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XG4gIH1cblxuICBAQWN0aW9uKEFsZXJ0Q2hhbmdlZEFjdGlvbilcbiAgb25BbGVydENoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBhbGVydCwgZ3VpZCB9OiBBbGVydENoYW5nZWRBY3Rpb24pIHtcbiAgICBpZiAoYWxlcnQgJiYgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS5pc0FsZXJ0VHlwZURlZmluZWQoYWxlcnQuZXZlbnREZXNjcmlwdGlvbikpIHtcbiAgICAgIHRoaXMuaGFuZGxlQWxlcnRGb3JDbG9zaW5nKGN0eCwgYWxlcnQsIGd1aWQpO1xuXG4gICAgICBpZiAoYWxlcnQuZXZlbnRTdGF0ZSAmJiB0aGlzLmlzQWxlcnRFbmFibGVkRm9yVXNlcihhbGVydCwgZ3VpZCkpIHtcblxuICAgICAgICBpZiAoIWFsZXJ0LmRldmljZU5hbWUpIHtcbiAgICAgICAgICBjb25zdCBwYXJrRGV2aWNlcyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoUGFya01hbmFnZXJTdGF0ZS5kZXZpY2VzKTtcbiAgICAgICAgICBhbGVydC5kZXZpY2VOYW1lID0gcGFya0RldmljZXM/LmZpbmQoZCA9PiBkLmlkID09PSBhbGVydC5kZXZpY2VJRCk/Lm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFsZXJ0LnBhcmtOYW1lKSB7XG4gICAgICAgICAgY29uc3QgbG90c01hcCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mYWNpbGl0eURpY3Rpb25hcnkpW2d1aWRdO1xuICAgICAgICAgIGlmIChsb3RzTWFwKSB7XG4gICAgICAgICAgICBhbGVydC5wYXJrTmFtZSA9IGxvdHNNYXBbYWxlcnQucGFya0lkXT8ubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2Nlc3NBbmREaXNwbGF5QWxlcnQoY3R4LCBhbGVydCwgZ3VpZCk7XG5cbiAgICAgICAgLy8gUHVzaCB0aGUgbmV3IGFsZXJ0IHRvIHRoZSBhcnJheSBhbmQgc2F2ZSBpbiBzdGF0ZVxuICAgICAgICBjb25zdCBhbGVydHMgPSBjdHguZ2V0U3RhdGUoKS5hbGVydHM7XG4gICAgICAgIGFsZXJ0cy51bnNoaWZ0KGFsZXJ0KTtcbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgIGFsZXJ0c1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbilcbiAgb25Ob3RpZmljYXRpb25DaGFuZ2VBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBub3RpZmljYXRpb24sIGd1aWQgfTogTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbikge1xuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjpcbiAgICAgICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25FbmFibGVkRm9yVXNlcihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5jbG91ZFBhcmtJZCkpIHtcbiAgICAgICAgICB0aGlzLm9uRHluYW1pY1ByaWNpbmdDb25kaXRpb25DaGFuZ2UoY3R4LCBub3RpZmljYXRpb24sIGd1aWQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmxvZyhcInVuc3VwcG9ydGVkIG5vdGlmaWNhdGlvbiB0eXBlXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24pXG4gIG9uSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCB7IG5vdGlmaWNhdGlvbkR0bywgZ3VpZCB9OiBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IGN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuXG4gICAgLy8gV2hldGhlciB3ZSB3YW50IHRvIGNsb3NlIG9yIGhhdmUgYSBkdXBsaWNhdGUgYWxlcnRcbiAgICBjb25zdCBub3RpZmljYXRpb25FeGlzdHMgPSBub3RpZmljYXRpb25zLmZpbmQobm90aWZpY2F0aW9uID0+IHRoaXMucGtNYXRjaGVzKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uUEspKTtcbiAgICBpZiAobm90aWZpY2F0aW9uRXhpc3RzKSB7XG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG4gICAgICB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5jbGVhclRvYXN0cyh0b2FzdElkKTtcbiAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcblxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+XG4gICAgICAgICEodGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5ndWlkKSA9PT0gbm90aWZpY2F0aW9uUEspKTtcblxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxuICAgICAgICBub3RpZmljYXRpb25zOiBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcbiAgICAgIHRoaXMuY2xvc2VOb3RpZmljYXRpb25EaWFsb2dzKG5vdGlmaWNhdGlvblBLKTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKEhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbilcbiAgb25IYW5kbGVOb3RpZmljYXRpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBub3RpZmljYXRpb25EdG8sIGd1aWQgfTogSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IGN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSBoYW5kbGUgdXNlciAtIGFuZCBzYXZlIGluIHN0YXRlXG4gICAgc3dpdGNoIChub3RpZmljYXRpb25EdG8udHlwZSkge1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uOlxuICAgICAgICB0aGlzLnVwZGF0ZUhhbmRsZWRVc2VyRm9yRHluYW1pY1ByaWNpbmdOb3RpZmljYXRpb24oY3R4LCBub3RpZmljYXRpb25zLCBub3RpZmljYXRpb25EdG8sIG5vdGlmaWNhdGlvblBLKTtcbiAgICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGR5bmFtaWMtcHJpY2luZy1jb25maXJtYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUubG9nKFwidW5zdXBwb3J0ZWQgbm90aWZpY2F0aW9uIHR5cGVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIENsb3NlIGNyaXRpY2FsIGFsZXJ0IG1vZGFsXG4gICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYG5vdGlmaWNhdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICB9XG5cbiAgQEFjdGlvbihIYW5kbGVBbGVydHNBY3Rpb24pXG4gIG9uSGFuZGxlQWxlcnRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgYWxlcnREdG8sIGd1aWQgfTogSGFuZGxlQWxlcnRzQWN0aW9uKSB7XG4gICAgY29uc3QgYWxlcnRQSyA9IHRoaXMuYWxlcnRQSyhhbGVydER0bywgZ3VpZCk7XG4gICAgY29uc3QgYWxlcnRzID0gY3R4LmdldFN0YXRlKCkuYWxlcnRzO1xuICAgIGNvbnN0IGV4aXN0QWxlcnRJbmRleCA9IGFsZXJ0cy5maW5kSW5kZXgoYWxlcnQgPT4gdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKSA9PT0gYWxlcnRQSyAmJlxuICAgICAgdGhpcy5zdGF0ZU1hdGNoZXMoYWxlcnQsIGFsZXJ0RHRvLmV2ZW50U3RhdGUpKTtcblxuICAgIGlmIChleGlzdEFsZXJ0SW5kZXggIT09IC0xKSB7XG4gICAgICBhbGVydHNbZXhpc3RBbGVydEluZGV4XS5oYW5kbGluZ0J5VXNlciA9IGFsZXJ0RHRvLmhhbmRsaW5nQnlVc2VyO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBhbGVydHMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlQWxlcnREaWFsb2dzKGFsZXJ0UEspO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQ3JpdGljYWxBbGVydERpYWxvZyhhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFsZXJ0VHlwZU5hbWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3JbYWxlcnQuZXZlbnREZXNjcmlwdGlvbl0pO1xuICAgIGNvbnN0IGNsb3VkQ29uZmlybURpYWxvZ0RhdGE6IENsb3VkQ29uZmlybURpYWxvZ0RhdGEgPSB7XG4gICAgICBjb25maXJtTWVzc2FnZXM6IFt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY3JpdGljYWxfYWxlcnRfbWVzc2FnZSwge1xuICAgICAgICBhbGVydFR5cGVOYW1lXG4gICAgICB9KV0sXG4gICAgICBjb25maXJtVGl0bGU6IGFsZXJ0VHlwZU5hbWUsXG4gICAgICBva1RleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi55ZXMpLFxuICAgICAgY2FuY2VsVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhbmNlbCksXG4gICAgICBkZXZpY2U6IHtcbiAgICAgICAgY29tbUlkOiBhbGVydC5yZWFkZXJJRC50b1N0cmluZygpLFxuICAgICAgICBuYW1lOiBhbGVydC5kZXZpY2VOYW1lXG4gICAgICB9LFxuICAgICAgcGFya05hbWU6IGFsZXJ0LnBhcmtOYW1lLFxuICAgICAgem9uZU5hbWU6IGFsZXJ0LnBhcmtab25lTmFtZSxcbiAgICAgIG5vdGlmaWNhdGlvblNldmVyaXR5OiBOb3RpZmljYXRpb25TZXZlcml0eS5Dcml0aWNhbCxcbiAgICAgIG5vdGlmaWNhdGlvblNldmVyaXR5SW52ZXJ0OiB0cnVlLFxuICAgICAgZGVzY3JpcHRpb246IGFsZXJ0LmRlc2NyaXB0aW9uLFxuICAgICAgY2FyUGxhdGU6IGFsZXJ0LmNhclBsYXRlLFxuICAgIH07XG5cbiAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKTtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuPGJvb2xlYW4+KENsb3VkQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgcGFuZWxDbGFzczogYHRiLWNyaXRpY2FsLW1vZGFsLSR7YWxlcnRQS31gLFxuICAgICAgZGF0YTogY2xvdWRDb25maXJtRGlhbG9nRGF0YSxcbiAgICAgIGlkOiBgbm90aWZpY2F0aW9uLW1vZGFsLSR7YWxlcnRQS31gLFxuICAgICAgZW5hYmxlZE1pbmltaXplZDogdHJ1ZSxcbiAgICB9KS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgY29uc3QgdXNlckluZm8gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS51c2VySW5mbyk7XG4gICAgICAgIGNvbnN0IGhhbmRsZUFsZXJ0OiBIYW5kbGluZ0FsZXJ0RHRvID0gbmV3IEhhbmRsaW5nQWxlcnREdG8oe1xuICAgICAgICAgIGd1aWQ6IGd1aWQsXG4gICAgICAgICAgcGFya0lkOiBhbGVydC5wYXJrSWQsXG4gICAgICAgICAgcGFya05hbWU6IGFsZXJ0LnBhcmtOYW1lLFxuICAgICAgICAgIGRldmljZUlkOiBhbGVydC5kZXZpY2VJRCxcbiAgICAgICAgICBldmVudERlc2NyaXB0aW9uOiBhbGVydC5ldmVudERlc2NyaXB0aW9uLFxuICAgICAgICAgIHVzZXJGdWxsTmFtZTogdXNlckluZm8uZGlzcGxheU5hbWUsXG4gICAgICAgICAgaWQ6IGFsZXJ0LmlkLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LmhhbmRsZUFsZXJ0Tm90aWZpY2F0aW9uKGhhbmRsZUFsZXJ0KS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlLnRyaWdnZXJBbGVydFRvYXN0RXZlbnQocmVzLmRhdGEgfHwgYWxlcnQsIGd1aWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uRGlhbG9nKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjbG91ZENvbmZpcm1EaWFsb2dEYXRhOiBDbG91ZENvbmZpcm1EaWFsb2dEYXRhID0ge1xuICAgICAgY29uZmlybU1lc3NhZ2VzOiBbdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19hbGVydF9tZXNzYWdlKV0sXG4gICAgICBjb25maXJtVGl0bGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfYWxlcnRfdGl0bGUpLFxuICAgICAgY29uZmlybVN1YlRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZHluYW1pY19wcmljaW5nX2FsZXJ0X3N1Yl90aXRsZSwgeyBjb25kaXRpb25OYW1lOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uY29uZGl0aW9uTmFtZSB9KSxcbiAgICAgIHBhcmtOYW1lOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya2luZ0xvdE5hbWUsXG4gICAgICB6b25lTmFtZTogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnpvbmU/Lm5hbWUsXG4gICAgICBva1RleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi55ZXMpLFxuICAgICAgY2FuY2VsVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhbmNlbCksXG4gICAgfTtcblxuICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIGd1aWQpO1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW48Ym9vbGVhbj4oQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBwYW5lbENsYXNzOiBgdGItZHluYW1pYy1wcmljaW5nLWNvbmRpdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvbi5pZH1gLFxuICAgICAgZGF0YTogY2xvdWRDb25maXJtRGlhbG9nRGF0YSxcbiAgICAgIGlkOiBgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCxcbiAgICAgIGVuYWJsZWRNaW5pbWl6ZWQ6IHRydWUsXG4gICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudXNlckluZm8pO1xuICAgICAgICBjb25zdCBoYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvOiBIYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvID0gbmV3IEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8oe1xuICAgICAgICAgIGNsb3VkUGFya0lkOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uY2xvdWRQYXJrSWQsXG4gICAgICAgICAgdXNlckZ1bGxOYW1lOiB1c2VySW5mby5kaXNwbGF5TmFtZSxcbiAgICAgICAgICBpZDogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlkLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LmhhbmRsZUR5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uKGhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8pLnN1YnNjcmliZShhc3luYyByZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGRwYyA9IHJlcy5kYXRhIHx8IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICAgICAgICBjb25zdCByYXRlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRCYXNlUmF0ZUJ5SWQoZHBjLnBhcmtpbmdMb3RJZCwgZHBjLnJhdGVJZCwgZHBjLmd1aWQpKTtcbiAgICAgICAgICBkcGMucmF0ZU5hbWUgPSByYXRlPy5kYXRhPy5uYW1lO1xuICAgICAgICAgIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UudHJpZ2dlckR5bmFtaWNQcmljaW5nVG9hc3RFdmVudChkcGMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGxheUFsZXJ0KGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuZGlzcGxheUFsZXJ0KGFsZXJ0LCBndWlkKTtcbiAgICBpZiAobm90aWZpY2F0aW9uKSB7XG4gICAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKTtcbiAgICAgIG5vdGlmaWNhdGlvbnNNYXBbYWxlcnRQS10gPSBub3RpZmljYXRpb24udG9hc3RJZDtcblxuICAgICAgbm90aWZpY2F0aW9uLm9uVGFwLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS50cmlnZ2VyQWxlcnRUb2FzdEV2ZW50KGFsZXJ0LCBndWlkKTtcbiAgICAgIH0pO1xuXG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRGlhbG9ncyhkaWFsb2dJZHM6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuZ2V0T3BlbkRpYWxvZ3MoKT8uZm9yRWFjaChkaWFsb2cgPT4ge1xuICAgICAgaWYgKGRpYWxvZ0lkcy5oYXMoZGlhbG9nLmlkKSkge1xuICAgICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VEaWFsb2dCeUlkKGRpYWxvZ0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvcGVuRGlhbG9ncyA9IHRoaXMubW9kYWxTZXJ2aWNlLmdldE9wZW5EaWFsb2dzKCk7XG4gICAgY29uc3QgZGlhbG9nID0gb3BlbkRpYWxvZ3MuZmluZChkaWFsb2cgPT4gZGlhbG9nLmlkID09PSBkaWFsb2dJZCk7XG5cbiAgICBpZiAoZGlhbG9nKSB7XG4gICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQWxlcnREaWFsb2dzKGFsZXJ0UEs6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGFsS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgICBgbm90aWZpY2F0aW9uLW1vZGFsLSR7YWxlcnRQS31gLFxuICAgICAgYGxwci1taXNtYXRjaC1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICAgIGBsb3N0LXRpY2tldC1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICBdKTtcblxuICAgIHRoaXMuY2xvc2VEaWFsb2dzKG1vZGFsS2V5cyk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlTm90aWZpY2F0aW9uRGlhbG9ncyhub3RpZmljYXRpb25QSzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbW9kYWxLZXlzID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgICAgIGBub3RpZmljYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gLFxuICAgICAgYGR5bmFtaWMtcHJpY2luZy1jb25maXJtYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gLFxuICAgIF0pO1xuXG4gICAgdGhpcy5jbG9zZURpYWxvZ3MobW9kYWxLZXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWxlcnRGb3JDbG9zaW5nKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFsZXJ0RHRvOiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYWxlcnRzID0gY3R4LmdldFN0YXRlKCkuYWxlcnRzO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcbiAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0RHRvLCBndWlkKTtcblxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XG4gICAgY29uc3QgYWxlcnRFeGlzdHMgPSBhbGVydHMuZmluZChhbGVydCA9PlxuICAgICAgdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKSA9PT0gYWxlcnRQSyAmJiB0aGlzLnN0YXRlTWF0Y2hlcyhhbGVydCwgYWxlcnREdG8uZXZlbnRTdGF0ZSlcbiAgICApO1xuXG4gICAgaWYgKCFhbGVydER0by5ldmVudFN0YXRlIHx8IGFsZXJ0RXhpc3RzKSB7XG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFthbGVydFBLXTtcbiAgICAgIHRoaXMuYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLmNsZWFyVG9hc3RzKHRvYXN0SWQpO1xuICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbYWxlcnRQS107XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkQWxlcnRzID0gYWxlcnRzLmZpbHRlcihhbGVydCA9PiB0aGlzLmFsZXJ0UEsoYWxlcnQsIGd1aWQpICE9PSBhbGVydFBLKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgICAgYWxlcnRzOiBmaWx0ZXJlZEFsZXJ0c1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XG4gICAgICB0aGlzLmNsb3NlQWxlcnREaWFsb2dzKGFsZXJ0UEspO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVHJpZ2dlcmVkRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBjdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBndWlkKTtcblxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSk7XG4gICAgaWYgKG5vdGlmaWNhdGlvbkV4aXN0cykge1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkV4aXN0cywgZ3VpZCk7XG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG4gICAgICB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5jbGVhclRvYXN0cyh0b2FzdElkKTtcbiAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcblxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+XG4gICAgICAgICEodGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5ndWlkKSA9PT0gbm90aWZpY2F0aW9uUEspKTtcblxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxuICAgICAgICBub3RpZmljYXRpb25zOiBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcbiAgICAgIHRoaXMuY2xvc2VOb3RpZmljYXRpb25EaWFsb2dzKG5vdGlmaWNhdGlvblBLKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlVHJpZ2dlcmVkRHluYW1pY1ByaWNpbmdDb25kaXRpb25zKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgY29uc3QgcGFya0lkID0gbm90aWZpY2F0aW9uRHRvPy5keW5hbWljUHJpY2luZ0NvbmRpdGlvbj8ucGFya0lkO1xuXG4gICAgLy8gZmluZCBhbGwgdGhlIGR5bmFtaWMgcHJpY2luZyB0cmlnZ2VyZWQgY29uZGl0aW9ucyBvZiBzYW1lIGd1aWQgYW5kIHBhcmtJZCB0byBiZSBjbG9zZVxuICAgIGNvbnN0IGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+ICEhbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uICYmXG4gICAgICBub3RpZmljYXRpb24uZ3VpZCA9PT0gZ3VpZCAmJiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya0lkID09PSBwYXJrSWQpO1xuXG4gICAgaWYgKGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZHAgb2YgZHluYW1pY1ByaWNpbmdOb3RpZmljYXRpb25FeGlzdHMpIHtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKGRwLCBndWlkKTtcbiAgICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuXG4gICAgICAgIHRoaXMuY2xvc2VOb3RpZmljYXRpb25EaWFsb2dzKG5vdGlmaWNhdGlvblBLKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+ICFub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24gfHwgIShub3RpZmljYXRpb24uZ3VpZCA9PT0gZ3VpZCAmJiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya0lkID09PSBwYXJrSWQpKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgICAgbm90aWZpY2F0aW9uczogZmlsdGVyZWROb3RpZmljYXRpb25zLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd1JhdGVBdXRvbWF0aWNTd2l0Y2hUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8pIHtcbiAgICBjb25zdCBkcGMgPSBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb247XG4gICAgY29uc3QgcmF0ZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0QmFzZVJhdGVCeUlkKGRwYy5wYXJraW5nTG90SWQsIGRwYy5yYXRlSWQsIGRwYy5ndWlkKSk7XG4gICAgZHBjLnJhdGVOYW1lID0gcmF0ZT8uZGF0YT8ubmFtZTtcbiAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuZmFjaWxpdHlDb21tYW5kc1NlcnZpY2UuZ2V0Q29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZ01lc3NhZ2VzKEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUsIG51bGwsIGRwYyk7XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXMsXG4gICAgICBjb21tYW5kOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZmFjaWxpdHlfcmVtb3RlX2NvbW1hbmRfc2V0X2FjdGl2ZV9yYXRlKSxcbiAgICAgIGhQb3NpdGlvbjogTm90aWZpY2F0aW9uSFBvc2l0aW9ucy5SaWdodCxcbiAgICAgIHZQb3NpdGlvbjogTm90aWZpY2F0aW9uVlBvc2l0aW9ucy5Cb3R0b20sXG4gICAgICBkdXJhdGlvbjogNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgY2xhc3M6IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcy5TdWNjZXNzLFxuICAgICAgdHlwZTogQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xuICAgIH07XG5cbiAgICB0aGlzLmNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLnNob3coY29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uQ29tcG9uZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd1JhdGVGYWxsZW5CYWNrVG9EZWZhdWx0UmF0ZVRvYXN0TWVzc2FnZShub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bykge1xuICAgIGNvbnN0IGRwYyA9IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfcmV2ZXJ0ZWRfdG9fZGVmYXVsdF9yYXRlKTtcbiAgICBjb25zdCBzdWJUaXRsZSA9IGAke2RwYy5wYXJraW5nTG90TmFtZX0ke2RwYy56b25lPy5uYW1lID8gJyB8ICcgKyBkcGMuem9uZT8ubmFtZSA6ICcnfWA7XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXM6IFt7XG4gICAgICAgIHZhbHVlOiB0aXRsZSxcbiAgICAgICAgY2xhc3M6IE5vdGlmaWNhdGlvbkNsYXNzLnRpdGxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHN1YlRpdGxlLFxuICAgICAgICBjbGFzczogTm90aWZpY2F0aW9uQ2xhc3Muc3ViVGl0bGUsXG4gICAgICB9XSxcbiAgICAgIGNvbW1hbmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5mYWNpbGl0eV9yZW1vdGVfY29tbWFuZF9zZXRfYWN0aXZlX3JhdGUpLFxuICAgICAgaFBvc2l0aW9uOiBOb3RpZmljYXRpb25IUG9zaXRpb25zLlJpZ2h0LFxuICAgICAgdlBvc2l0aW9uOiBOb3RpZmljYXRpb25WUG9zaXRpb25zLkJvdHRvbSxcbiAgICAgIGR1cmF0aW9uOiA3ICogT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICBjbGFzczogQ29tbWFuZE5vdGlmaWNhdGlvbkJvcmRlckNsYXNzLlN1Y2Nlc3MsXG4gICAgICB0eXBlOiBDb21tYW5kTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXG4gICAgfTtcblxuICAgIHRoaXMuY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvdyhjb25maWcsIENvbW1hbmROb3RpZmljYXRpb25Db21wb25lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FsZXJ0RW5hYmxlZEZvclVzZXIoYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgaXNBbGVydEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgY29uc3QgdXNlclNldHRpbmdzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUubWFwcGVkVXNlclNldHRpbmdzKTtcbiAgICBjb25zdCB1c2VyQWxlcnRzUHJlZmVyZW5jZXM6IEFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0byA9IHVzZXJTZXR0aW5ncy5nZXQoU2V0dGluZ3NDYXRlZ29yeS5BbGVydHNQcmVmZXJlbmNlcyk7XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBubyB1c2VyQWxlcnRzUHJlZmVyZW5jZXMgd2UgZG9uJ3QgZmlsdGVyIGF0IGFsbFxuICAgIGlmICghIXVzZXJBbGVydHNQcmVmZXJlbmNlcykge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgZW5hYmxlZCB0aGUgbm90aWZpY2F0aW9uc1xuICAgICAgLy8gRWxzZSB0aGUgdXNlciBkaXNhYmxlZCBhbGwgdGhlIG5vdGlmaWNhdGlvbnNcbiAgICAgIGlmICh1c2VyQWxlcnRzUHJlZmVyZW5jZXMuaXNFbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuICAgICAgICBjb25zdCBpc0FsZXJ0RmlsdGVyVmVyc2lvblN1cHBvcnRlZCA9IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBWRVJTSU9OXzlfMl8wKTtcblxuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyA5LjEuMCBvciBiZWxvdywgYWxsIG5vdGlmaWNhdGlvbnMgYXJlIGVuYWJsZWRcbiAgICAgICAgLy8gSWYgdGhlIHZlcnNpb24gaXMgOS4yLjAgYW5kIGFib3ZlLCB3ZSBmaWx0ZXIgYnkgdGhlIHByZWZlcmVuY2VzXG4gICAgICAgIGlzQWxlcnRFbmFibGVkID0gIWlzQWxlcnRGaWx0ZXJWZXJzaW9uU3VwcG9ydGVkIHx8IHRoaXMuaXNBbGVydEVuYWJsZWRJblByZWZlcmVuY2VzKGFsZXJ0LCBndWlkLCB1c2VyQWxlcnRzUHJlZmVyZW5jZXMucHJlZmVyZW5jZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNBbGVydEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNBbGVydEVuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzQWxlcnRFbmFibGVkSW5QcmVmZXJlbmNlcyhhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZywgdXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwOiBBbGVydHNQcmVmZXJlbmNlc01hcCkge1xuICAgIGxldCBpc0FsZXJ0RW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvLyBJZiB3ZSBoYXZlIGFueSBmYWNpbGl0eSBzZWxlY3RlZCwgd2UgY29udGludWUgdG8gY2hlY2tcbiAgICAvLyBFbHNlIHdlIGFsbG93IGFsbCB0byBwYXNzIGFzIHRoZSB1c2VyIGRpZG4ndCBzZXQgcHJlZmVyZW5jZXMgeWV0XG4gICAgaWYgKE9iamVjdC5rZXlzKHVzZXJBbGVydFR5cGVQcmVmZXJlbmNlc01hcCkubGVuZ3RoKSB7XG4gICAgICBpc0FsZXJ0RW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgICAvLyBHZXRzIHRoZSB0cmVlSWQgb2YgdGhlIHRlbmFudCAtIEluIGNhc2UgdGhlIHVzZXIgc2VsZWN0ZWQgXCJBbGwgVGVuYW50IFBhcmtpbmcgTG90c1wiXG4gICAgICBjb25zdCB0ZW5hbnRUcmVlSWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKT8udHJlZUlkO1xuXG4gICAgICAvLyBHZXRzIHRoZSB0cmVlIHBhcmsgSWQgb2YgdGhlIGFsZXJ0XG4gICAgICBjb25zdCBhbGVydFRyZWVQYXJrSWQgPSB0aGlzLmdldENsb3VkUGFya0lkKGFsZXJ0LCBndWlkKTtcblxuICAgICAgLy8gV2UgR2V0IHRoZSBzZXR0aW5nIG9mIHRoZSBQYXJrLCBQYXJlbnRQYXJrIG9yIFBhcmtzVHJlZVJvb3RcbiAgICAgIGNvbnN0IGZhY2lsaXR5UHJlZmVyZW5jZXNNYXA6IEZhY2lsaXR5UHJlZmVyZW5jZXNNYXAgPSB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbYWxlcnRUcmVlUGFya0lkXSB8fCB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbdGVuYW50VHJlZUlkXTtcblxuICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGZhY2lsaXR5IHdhcyBzZWxlY3RlZFxuICAgICAgaWYgKGZhY2lsaXR5UHJlZmVyZW5jZXNNYXApIHtcbiAgICAgICAgY29uc3QgYWxlcnRUeXBlUHJlZmVyZW5jZXNNYXA6IEFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwID0gZmFjaWxpdHlQcmVmZXJlbmNlc01hcFthbGVydC5ldmVudERlc2NyaXB0aW9uXTtcblxuICAgICAgICAvLyBXZSBjaGVjayBpZiB0aGUgYWxlcnQgdHlwZSB3YXMgc2VsZWN0ZWRcbiAgICAgICAgaWYgKGFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwKSB7XG4gICAgICAgICAgY29uc3QgYWxlcnREZXZpY2VUeXBlOiBBbGVydHNEZXZpY2VUeXBlID0gdGhpcy5nZXRBbGVydHNEZXZpY2VUeXBlKGFsZXJ0KTtcblxuICAgICAgICAgIC8vIFdlIGNoZWNrIHRoZSBpZiB0aGUgZGV2aWNlIHR5cGUgd2FzIHNlbGVjdGVkXG4gICAgICAgICAgaXNBbGVydEVuYWJsZWQgPSBhbGVydFR5cGVQcmVmZXJlbmNlc01hcFthbGVydERldmljZVR5cGVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQWxlcnRFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGVydHNEZXZpY2VUeXBlKGFsZXJ0OiBBbGVydER0byk6IEFsZXJ0c0RldmljZVR5cGUge1xuICAgIGxldCBhbGVydERldmljZVR5cGU6IEFsZXJ0c0RldmljZVR5cGU7XG4gICAgY29uc3QgYWxlcnRzRGV2aWNlVHlwZTogQWxlcnRzRGV2aWNlVHlwZVtdID0gRGV2aWNlVHlwZXNBbGVydHNNYXBwaW5nLmdldChhbGVydC5kZXZpY2VUeXBlKTtcblxuICAgIHN3aXRjaCAoYWxlcnQuZGV2aWNlVHlwZSkge1xuICAgICAgY2FzZSBEZXZpY2VUeXBlLkNhc2g6XG4gICAgICAgIGFsZXJ0RGV2aWNlVHlwZSA9IGFsZXJ0LnJlYWRlcklEID09PSAwID8gQWxlcnRzRGV2aWNlVHlwZS5NYXN0ZXIgOiBBbGVydHNEZXZpY2VUeXBlLkNhc2hSZWdpc3RlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhbGVydERldmljZVR5cGUgPSBhbGVydHNEZXZpY2VUeXBlPy5bMF07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBhbGVydERldmljZVR5cGU7XG4gIH1cblxuICBwcml2YXRlIG9uRHluYW1pY1ByaWNpbmdDb25kaXRpb25DaGFuZ2UoY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIHRoaXMub25IYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKGN0eCwgeyBub3RpZmljYXRpb25EdG8sIGd1aWQgfSk7XG5cbiAgICB0aGlzLmhhbmRsZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uKGN0eCwgbm90aWZpY2F0aW9uRHRvLCBndWlkKTtcblxuICAgIGlmIChub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uaXNUcmlnZ2VyZWQpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0FuZERpc3BsYXlOb3RpZmljYXRpb24obm90aWZpY2F0aW9uRHRvLCBndWlkLCBjdHgpO1xuICAgIH0gZWxzZSBpZiAobm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlzQWN0aXZhdGVkKSB7XG4gICAgICAvLyBoYW5kbGUgbm90aWZpY2F0aW9uIGluZGljYXRpbmcgdGhlIHJhdGUgaGFzIGZhbGxlbiBiYWNrIHRvIHRoZSBkZWZhdWx0IHJhdGVcbiAgICAgIHRoaXMuc2hvd1JhdGVGYWxsZW5CYWNrVG9EZWZhdWx0UmF0ZVRvYXN0TWVzc2FnZShub3RpZmljYXRpb25EdG8pLnRoZW4oKTtcbiAgICB9IGVsc2UgaWYgKG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi50cmlnZ2VyQWN0aW9uID09PSBEeW5hbWljUHJpY2luZ1RyaWdnZXJBY3Rpb24uQXV0b21hdGljU3dpdGNoUmF0ZSkge1xuICAgICAgLy8gaGFuZGxlIG5vdGlmaWNhdGlvbiBpbmRpY2F0aW5nIHRoZSByYXRlIGhhcyBhdXRvbWF0aWMgc3dpdGNoXG4gICAgICB0aGlzLnNob3dSYXRlQXV0b21hdGljU3dpdGNoVG9hc3RNZXNzYWdlKG5vdGlmaWNhdGlvbkR0bykudGhlbigpO1xuICAgICAgdGhpcy5jbG9zZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9ucyhjdHgsIG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbG91ZFBhcmtJZChhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgYWxlcnRQYXJrSWQgPSBhbGVydC5tdWx0aVBhcmtQYXJlbnRJZCA+IDAgPyBhbGVydC5tdWx0aVBhcmtQYXJlbnRJZCA6IGFsZXJ0LnBhcmtJZDtcbiAgICBjb25zdCBsb3RzTWFwID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSlbZ3VpZF07XG4gICAgcmV0dXJuIGxvdHNNYXBbYWxlcnRQYXJrSWRdPy5jbG91ZElkO1xuICB9XG5cbiAgcHJpdmF0ZSBwa01hdGNoZXMgPSAobm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIG5vdGlmaWNhdGlvblBLOiBzdHJpbmcpID0+IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBub3RpZmljYXRpb25EdG8uZ3VpZCkgPT09IG5vdGlmaWNhdGlvblBLO1xuICBwcml2YXRlIHN0YXRlTWF0Y2hlcyA9IChhbGVydER0bzogQWxlcnREdG8sIGV2ZW50U3RhdGU6IGJvb2xlYW4pID0+IGFsZXJ0RHRvLmV2ZW50U3RhdGUgPT09IGV2ZW50U3RhdGU7XG4gIHByaXZhdGUgYWxlcnRQSyA9IChhbGVydER0bzogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBgJHtndWlkfV8ke2FsZXJ0RHRvLnBhcmtJZH1fJHthbGVydER0by5yZWFkZXJJRH1fJHthbGVydER0by5kZXZpY2VJRH1fJHthbGVydER0by5ldmVudERlc2NyaXB0aW9ufWA7XG4gIHByaXZhdGUgbm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGxldCBrZXk6IHN0cmluZyA9ICcnO1xuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uRHRvLnR5cGUpIHtcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjpcbiAgICAgICAgY29uc3QgeyBpZCwgem9uZSB9ID0gbm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xuICAgICAgICBrZXkgPSB6b25lID8gYCR7Z3VpZH1fJHtpZH1fJHt6b25lLmlkfWAgOiBgJHtndWlkfV8ke2lkfWA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmxvZyhcInVuc3VwcG9ydGVkIG5vdGlmaWNhdGlvbiB0eXBlXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPik6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gY3R4LmdldFN0YXRlKCk7XG4gICAgY29uc3QgYWxlcnRzID0gc3RhdGUuYWxlcnRzO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBzdGF0ZS5ub3RpZmljYXRpb25zO1xuXG4gICAgY29uc3QgYmFkZ2VWYWx1ZSA9IGFsZXJ0cy5sZW5ndGggKyBub3RpZmljYXRpb25zLmxlbmd0aDtcbiAgICBjb25zdCBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHkgPSB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZWROb3RpZmljYXRpb25UeXBlKGFsZXJ0cywgbm90aWZpY2F0aW9ucyk7XG5cbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBiYWRnZVZhbHVlLFxuICAgICAgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5LFxuICAgICAgZGlzcGxheUJhZGdlOiBiYWRnZVZhbHVlID4gMFxuICAgIH0pO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRoYXQgcHJvY2Vzc2VzIGFuZCBkaXNwbGF5cyB0aGUgYWxlcnQgYmFzZWQgb24gY29uZGl0aW9uc1xuICBwcml2YXRlIHByb2Nlc3NBbmREaXNwbGF5QWxlcnQoY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgY29uc3QgaXNDY01vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSkgPT09IEFwcE1vZHVsZS5DYztcblxuICAgIGlmICghaXNNb2JpbGVBcHBNb2RlICYmIGlzQ2NNb2R1bGUpIHtcbiAgICAgIHN3aXRjaCAoYWxlcnQuZXZlbnREZXNjcmlwdGlvbikge1xuICAgICAgICBjYXNlIFBlcmlwaGVyYWxFcXVpcG1lbnRFcnJvci5MT1NUX1RJQ0tFVDpcbiAgICAgICAgY2FzZSBQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3IuTFJQX05PVF9NQVRDSDpcbiAgICAgICAgICB0aGlzLm9wZW5Dcml0aWNhbEFsZXJ0RGlhbG9nKGFsZXJ0LCBndWlkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aGlzLmRpc3BsYXlBbGVydChjdHgsIGFsZXJ0LCBndWlkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNZXRob2QgdGhhdCBwcm9jZXNzZXMgYW5kIGRpc3BsYXlzIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gY29uZGl0aW9uc1xuICBwcml2YXRlIHByb2Nlc3NBbmREaXNwbGF5Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcsIGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4pOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBoYXMgcGVybWlzc2lvblxuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgIGNvbnN0IGZlYXR1cmVQZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya2luZ0xvdElkXS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGZlYXR1cmVQZXJtaXNzaW9ucz8uaW5jbHVkZXMoUGVybWlzc2lvblR5cGUuU2V0QWN0aXZlUmF0ZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgYXBwIGlzIGluIG1vYmlsZSBtb2RlIG9yIGlmIGl0J3MgaW4gdGhlIGNvcnJlY3QgbW9kdWxlXG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgIGNvbnN0IGlzQ2NNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2M7XG5cbiAgICAvLyBQcm9jZWVkIGlmIHRoZSBjb25kaXRpb25zIGFyZSBtZXRcbiAgICBpZiAoIWlzTW9iaWxlQXBwTW9kZSAmJiBpc0NjTW9kdWxlICYmIGhhc1Blcm1pc3Npb24pIHtcbiAgICAgIHRoaXMub3BlbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uRGlhbG9nKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG5cbiAgICAgIC8vIFB1c2ggdGhlIG5ldyBub3RpZmljYXRpb24gdG8gdGhlIGFycmF5IGFuZCBzYXZlIGluIHN0YXRlXG4gICAgICBjb25zdCBub3RpZmljYXRpb25zID0gY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9ucztcbiAgICAgIG5vdGlmaWNhdGlvbnMudW5zaGlmdChub3RpZmljYXRpb25EdG8pO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlY2FsY3VsYXRlIGJhZGdlIGFuZCBzZXZlcml0eVxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUhhbmRsZWRVc2VyRm9yRHluYW1pY1ByaWNpbmdOb3RpZmljYXRpb24oXG4gICAgY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPixcbiAgICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25EdG9bXSxcbiAgICBub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0byxcbiAgICBub3RpZmljYXRpb25QSzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICBjb25zdCBleGlzdE5vdGlmaWNhdGlvbkluZGV4ID0gbm90aWZpY2F0aW9ucy5maW5kSW5kZXgobm90aWZpY2F0aW9uID0+IHRoaXMucGtNYXRjaGVzKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uUEspKTtcblxuICAgICAgaWYgKGV4aXN0Tm90aWZpY2F0aW9uSW5kZXggIT09IC0xICYmIG5vdGlmaWNhdGlvbnNbZXhpc3ROb3RpZmljYXRpb25JbmRleF0uZHluYW1pY1ByaWNpbmdDb25kaXRpb24pIHtcbiAgICAgICAgbm90aWZpY2F0aW9uc1tleGlzdE5vdGlmaWNhdGlvbkluZGV4XS5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5oYW5kbGluZ0J5VXNlciA9XG4gICAgICAgICAgbm90aWZpY2F0aW9uRHRvPy5keW5hbWljUHJpY2luZ0NvbmRpdGlvbj8uaGFuZGxpbmdCeVVzZXI7XG5cbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoeyBub3RpZmljYXRpb25zIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNOb3RpZmljYXRpb25FbmFibGVkRm9yVXNlcihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bywgZmFjaWxpdHlJZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgbGV0IGlzTm90aWZpY2F0aW9uRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3QgdXNlclNldHRpbmdzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUubWFwcGVkVXNlclNldHRpbmdzKTtcbiAgICBjb25zdCB1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXM6IE5vdGlmaWNhdGlvblByZWZlcmVuY2VzU2V0dGluZ3NEdG8gPSB1c2VyU2V0dGluZ3MuZ2V0KFNldHRpbmdzQ2F0ZWdvcnkuTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMpO1xuXG4gICAgaWYgKHVzZXJOb3RpZmljYXRpb25QcmVmZXJlbmNlcz8uaXNFbmFibGVkKSB7XG4gICAgICAvLyBHZXRzIHRoZSBncm91cCBmYWNpbGl0eSBJZCBvZiB0aGUgdGVuYW50IC0gSW4gY2FzZSB0aGUgdXNlciBzZWxlY3RlZCBcIkFsbCBUZW5hbnQgUGFya2luZyBMb3RzXCJcbiAgICAgIGNvbnN0IHRlbmFudEZhY2lsaXR5SWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKT8udHJlZUlkO1xuXG4gICAgICBpZiAoT2JqZWN0LmtleXModXNlck5vdGlmaWNhdGlvblByZWZlcmVuY2VzLnByZWZlcmVuY2VzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gSGFuZGxlIG5ldyB1c2VyczogZW1wdHkgcHJlZmVyZW5jZXMgbWVhbnMgZGVmYXVsdCBhY2Nlc3MgdG8gYWxsIG5vdGlmaWNhdGlvbnNcbiAgICAgICAgLy8gVGhpcyBhbGxvd3MgbmV3IHVzZXJzIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucyB1bnRpbCB0aGV5IGV4cGxpY2l0bHkgY29uZmlndXJlIHRoZWlyIHByZWZlcmVuY2VzXG4gICAgICAgIGlzTm90aWZpY2F0aW9uRW5hYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3IgdXNlcnMgd2l0aCBjb25maWd1cmVkIHByZWZlcmVuY2VzLCBjaGVjayBpZiB0aGUgc3BlY2lmaWMgZmFjaWxpdHkgYW5kIG5vdGlmaWNhdGlvbiB0eXBlIGFyZSBlbmFibGVkXG4gICAgICAgIC8vIFVzZSB0ZW5hbnQgZmFjaWxpdHkgcHJlZmVyZW5jZXMgZmlyc3QsIGZhbGxiYWNrIHRvIHNwZWNpZmljIGZhY2lsaXR5IHByZWZlcmVuY2VzXG4gICAgICAgIGNvbnN0IGZhY2lsaXR5UHJlZmVyZW5jZXMgPSB1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMucHJlZmVyZW5jZXNbdGVuYW50RmFjaWxpdHlJZF0gPz9cbiAgICAgICAgICB1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMucHJlZmVyZW5jZXNbZmFjaWxpdHlJZF07XG5cbiAgICAgICAgaWYgKGZhY2lsaXR5UHJlZmVyZW5jZXM/Lltub3RpZmljYXRpb24udHlwZV0pIHtcbiAgICAgICAgICBpc05vdGlmaWNhdGlvbkVuYWJsZWQgPSBmYWNpbGl0eVByZWZlcmVuY2VzW25vdGlmaWNhdGlvbi50eXBlXS5lbmFibGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNOb3RpZmljYXRpb25FbmFibGVkO1xuICB9XG59XG4iXX0=