tnx-shared 5.3.269 → 5.3.271

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.
@@ -171,6 +171,18 @@ export class TemplateInstanceService extends BaseService {
171
171
  }
172
172
  });
173
173
  }
174
+ fillTemplateByCodeAndPreviewPdf(templateCode, data) {
175
+ const url = `${this.serviceUri}/fillWordByTemplateCode/${templateCode}?isPrint=true`;
176
+ return this._httpClient
177
+ .post(url, data)
178
+ .toPromise().then(res => {
179
+ if (res.data) {
180
+ var file = this.b64toBlob(res.data, 'application/pdf');
181
+ var fileURL = URL.createObjectURL(file);
182
+ window.open(fileURL);
183
+ }
184
+ });
185
+ }
174
186
  /**
175
187
  * Word
176
188
  * @param templateCode
@@ -357,4 +369,4 @@ TemplateInstanceService.ctorParameters = () => [
357
369
  { type: DownloadLinkService },
358
370
  { type: Injector }
359
371
  ];
360
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVpbnN0YW5jZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL3RlbXBsYXRlaW5zdGFuY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBRXhDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBTWpFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7QUFLL0MsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFdBQVc7SUFPcEQsWUFDSSxvQkFBeUMsRUFDakMsV0FBdUIsRUFDdkIsYUFBMkIsRUFDekIsWUFBaUMsRUFDakMsZ0JBQWlDLEVBQ2pDLFlBQXlCLEVBQ3pCLGNBQTZCLEVBQy9CLG9CQUF5QyxFQUNq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QyxFQUFFLENBQUMsQ0FBQztpQkFDOUM7WUFDTCxDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsaURBQWlELENBQUMsQ0FBQztnQkFDckYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pFLE9BQVksUUFBUSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQztLQUFBOzs7O1lBaFdKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBTlEsbUJBQW1CO1lBaEJuQixVQUFVO1lBa0JWLFlBQVk7WUFaWixtQkFBbUI7WUFXbkIsZUFBZTtZQUZmLFdBQVc7WUFEWCxhQUFhO1lBVGIsbUJBQW1CO1lBSlAsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xuXG5pbXBvcnQgeyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9tb2RlbHMvZ2VuZXJhdGUtbGluay1kb3dubG9hZC1kdG8nO1xuaW1wb3J0IHsgRG93bmxvYWRMaW5rU2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9kb3dubG9hZC1saW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZUV4cGxvcmVyU2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVDb25zdGFudCB9IGZyb20gJy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XG5pbXBvcnQgeyBFeHBvcnRNYW55TW9kZWwsIEV4cG9ydE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2V4cG9ydC1maWxlLWluZm8nO1xuaW1wb3J0IHsgRXhwb3J0SXRlbSB9IGZyb20gJy4uL21vZGVscy9leHBvcnQtaXRlbSc7XG5pbXBvcnQgeyBFeHBvcnRXaXRob3V0VGVtcGxhdGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9leHBvcnQtd2l0aG91dC10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuL25vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJpbnRTZXJ2aWNlIH0gZnJvbSAnLi9wcmludC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUluc3RhbmNlU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcblxuICAgIHJlYWRvbmx5IGVudmlyb25tZW50OiBhbnk7XG4gICAgcmVhZG9ubHkgX21vZHVsZUNvbmZpZzogTW9kdWxlQ29uZmlnO1xuICAgIC8vIHJlYWRvbmx5IHNlcnZpY2VVcmk6IHN0cmluZzsgLy9U4bqhbSB0aOG7nWkgayDEkeG7gyByZWFkb25seSDEkeG7gyBjw7MgdGjhu4Mgc3dpdGNoIHNhbmcgdjRcbiAgICBzZXJ2aWNlVXJpOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2h0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgIHByaXZhdGUgX3ByaW50U2VydmljZTogUHJpbnRTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2ZpbGVTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9kb3dubG9hZExpbmtTZXJ2aWNlOiBEb3dubG9hZExpbmtTZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9odHRwQ2xpZW50LCBpbmplY3RvciwgYCR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLmF1dGhvcml6YXRpb25FbmRwb2ludH0vJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9UZW1wbGF0ZUluc3RhbmNlYCk7XG4gICAgICAgIHRoaXMuX21vZHVsZUNvbmZpZyA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50O1xuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgPSBgJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLnRlbXBsYXRlRW5kcG9pbnR9LyR7dGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaVZlcnNpb259L1RlbXBsYXRlSW5zdGFuY2VgO1xuICAgIH1cblxuICAgIHVzZVY0KCkge1xuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgPSBgJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLnRlbXBsYXRlVjRFbmRwb2ludH0vVGVtcGxhdGVgO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cbiAgICAvLyAgICAgICAgICAgICAgICAgIFhV4bqkVCBFWENFTDoga2jDtG5nIGTDuW5nIHNpZ25hbFIsIHThu7EgxJHhu5luZyBsxrB1IHh14buRbmdcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgICAvKipcbiAgICAgKiBYdeG6pXQgbeG7mXQgZmlsZSB0cuG7sWMgdGnhur9wIGtow7RuZywgeG9uZyB0aMOsIHThu7EgbMawdSB4deG7kW5nLlxuICAgICAqIEBwYXJhbSBtb2RlbFxuICAgICAqL1xuICAgIGV4cG9ydEN4RXhjZWxCeUNvZGUobW9kZWw6IEV4cG9ydE1vZGVsKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRXhwb3J0Q3hFeGNlbEJ5Q29kZWA7XG4gICAgICAgIHRoaXMuc2V0RmlsZUluZm8obW9kZWwpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdDxhbnk+KHVybCwgbW9kZWwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgYXMgJ2pzb24nIH0pXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhyZXMsIHRoaXMuZ2V0RnVsbEZpbGVOYW1lKG1vZGVsLmZpbGVOYW1lIHx8IG1vZGVsLmNvZGUpKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGFzeW5jIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgZXJyLmVycm9yLnRleHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcnVkU2VydmljZS5wcm9jZXNzRXJyb3JSZXNwb25zZShKU09OLnBhcnNlKGVycm9yVGV4dCB8fCAnJykpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0RmlsZUluZm8obW9kZWw6IEV4cG9ydE1vZGVsKTogdm9pZCB7XG4gICAgICAgIG1vZGVsLmRhdGEgPSBtb2RlbC5kYXRhID8gbW9kZWwuZGF0YSA6IEpTT04uc3RyaW5naWZ5KG1vZGVsLmRhdGFPYmplY3QpO1xuICAgICAgICBkZWxldGUgbW9kZWwuZGF0YU9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBYdeG6pXQgbmhp4buBdSBmaWxlLCB4b25nIHRow6wgdOG7sSDEkeG7mW5nIHThuqNpIHbhu4EgZm9sZGVyIMSRw6MgbsOpbi5cbiAgICAgKiBAcGFyYW0gbW9kZWxcbiAgICAgKi9cbiAgICBleHBvcnRNYW55Q3hFeGNlbEJ5Q29kZShtb2RlbDogRXhwb3J0TWFueU1vZGVsKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRXhwb3J0TWFueUN4RXhjZWxCeUNvZGVgO1xuICAgICAgICB0aGlzLnNldE1hbnlGaWxlSW5mbyhtb2RlbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIG1vZGVsKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlU2VydmljZS5kb3dubG9hZEZvbGRlcihyZXMuZGF0YS5mb2xkZXJJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcnVkU2VydmljZS5wcm9jZXNzRXJyb3JSZXNwb25zZShyZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmNhdGNoKGFzeW5jIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgZXJyLmVycm9yLnRleHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcnVkU2VydmljZS5wcm9jZXNzRXJyb3JSZXNwb25zZShKU09OLnBhcnNlKGVycm9yVGV4dCB8fCAnJykpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0TWFueUZpbGVJbmZvKG1hbnlNb2RlbDogRXhwb3J0TWFueU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhhc01vZGVsID0gbWFueU1vZGVsICYmIG1hbnlNb2RlbC5sc3RGaWxlSW5mbyAmJiBtYW55TW9kZWwubHN0RmlsZUluZm8ubGVuZ3RoO1xuICAgICAgICBpZiAoIWhhc01vZGVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBtYW55TW9kZWwubHN0RmlsZUluZm8uZm9yRWFjaChmaWxlSW5mbyA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEZpbGVJbmZvKGZpbGVJbmZvKTtcbiAgICAgICAgICAgIGZpbGVJbmZvLmZpbGVOYW1lID0gYCR7ZmlsZUluZm8uZmlsZU5hbWV9XyR7dGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCl9LiR7VGVtcGxhdGVDb25zdGFudC5FWENFTF9FWFRFTlNJT059YDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0RnVsbEZpbGVOYW1lKGZpbGVOYW1lLCBleHRlbnNpb24gPSBUZW1wbGF0ZUNvbnN0YW50LkVYQ0VMX0VYVEVOU0lPTikge1xuICAgICAgICByZXR1cm4gYCR7ZmlsZU5hbWV9JHtleHRlbnNpb259YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBYdeG6pXQgZmlsZSBleGNlbCBraMO0bmcgZMO5bmcgdGVtcGxhdGUsIHThu7EgxJHhu5luZyB04bqjaSB4deG7kW5nLlxuICAgICAqIEBwYXJhbSBtb2RlbFxuICAgICAqL1xuICAgIGV4cG9ydEN4RXhjZWwobW9kZWw6IEV4cG9ydFdpdGhvdXRUZW1wbGF0ZU1vZGVsKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRXhwb3J0Q3hFeGNlbGA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0PGFueT4odXJsLCBtb2RlbCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyBhcyAnanNvbicgfSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKHJlcywgdGhpcy5nZXRGdWxsRmlsZU5hbWUobW9kZWwuZmlsZU5hbWUgfHwgJ0V4cG9ydCcpKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGFzeW5jIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgZXJyLmVycm9yLnRleHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcnVkU2VydmljZS5wcm9jZXNzRXJyb3JSZXNwb25zZShKU09OLnBhcnNlKGVycm9yVGV4dCB8fCAnJykpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFXhuqRUIEVYQ0VMOiBkw7luZyBjaG8gcmVwb3J0IHF1ZXVlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gICAgLyoqXG4gICAgICogUHJvbWlzZSB4deG6pXQgZmlsZSBleGNlbCBkw7luZyBzaWduYWxSLlxuICAgICAqIC0gRGVzY3JpcHRpb246IEV4cG9ydCBz4butIGR1bmcgQ2xvc2VkWG1sLlJlcG9ydCAoQ3gpIHbhu5tpIHNpZ25hbFIsIHPhu60gZOG7pW5nIGNobyBmaWxlIGThu68gbGnhu4d1IGzhu5tuLlxuICAgICAqIC0gUGFyYW06IG1vZGVsIGNo4bupYVxuICAgICAqICAgICAgLSBjb2RlIDogIGNvZGUgY+G7p2EgdGVtcGxhdGUgY+G6pXUgaMOsbmggYsOqbiBRdeG6o24gdHLhu4sgPiBCaeG7g3UgbeG6q3UgPiBCaeG7g3UgbeG6q3UgZXhjZWwuXG4gICAgICogICAgICAtIGRhdGEgOiBvYmplY3QgY2jhu6lhIGThu68gbGnhu4d1IMSRw6MgY2h1eeG7gW4gdGjDoG5oIGThuqFuZyBqc29uLlxuICAgICAqICAgICAgLSBmaWxlTmFtZTogdMOqbiBmaWxlIHNhdSBraGkgZXhwb3J0LlxuICAgICAqICAgICAgLSB0b3BpYzogZ3VpZCBkw7luZyDEkeG7gyBzdWJzY3JpYmUuXG4gICAgICovXG4gICAgYXN5bmMgRXhwb3J0Q3hFeGNlbEJ5Q29kZVdpdGhTaWduYWxSKG1vZGVsOiBFeHBvcnRNb2RlbCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9FeHBvcnRDeEV4Y2VsQnlDb2RlV2l0aFNpZ25hbFJgO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50LnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHVybCwgbW9kZWwpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvbWlzZSB4deG6pXQgZmlsZSBleGNlbCBraMO0bmcgZMO5bmcgc2lnbmFsUi5cbiAgICAgKiBAcGFyYW0gbW9kZWxcbiAgICAgKi9cbiAgICBhc3luYyBleHBvcnRDeEV4Y2VsQnlDb2RlUHJvbWlzZShtb2RlbDogRXhwb3J0TW9kZWwpOiBQcm9taXNlPE9iamVjdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0V4cG9ydEN4RXhjZWxCeUNvZGVgO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh1cmwsIG1vZGVsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIGFzICdqc29uJyB9KVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb21pc2UgeHXhuqV0IGZpbGUgZXhjZWwga2jDtG5nIGTDuW5nIHNpZ25hbFIgdsOgIGtow7RuZyBkw7luZyB0ZW1wbGF0ZS5cbiAgICAgKiBAcGFyYW0gbW9kZWxcbiAgICAgKi9cbiAgICBhc3luYyBleHBvcnRDeEV4Y2VsUHJvbWlzZShtb2RlbDogRXhwb3J0V2l0aG91dFRlbXBsYXRlTW9kZWwpOiBQcm9taXNlPE9iamVjdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0V4cG9ydEN4RXhjZWxgO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh1cmwsIG1vZGVsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIGFzICdqc29uJyB9KVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXb3JkXG4gICAgICogQHBhcmFtIHRlbXBsYXRlQ29kZVxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICovXG4gICAgZmlsbFRlbXBsYXRlQnlDb2RlQW5kR2V0UGRmKHRlbXBsYXRlQ29kZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9maWxsV29yZEJ5VGVtcGxhdGVDb2RlLyR7dGVtcGxhdGVDb2RlfT9pc1ByaW50PXRydWVgO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdDxSZXNwb25zZVJlc3VsdD4odXJsLCBkYXRhKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJpbnRTZXJ2aWNlLnByaW50QmFzZTY0UGRmKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXb3JkXG4gICAgICogQHBhcmFtIHRlbXBsYXRlQ29kZVxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICovXG4gICAgZmlsbFRlbXBsYXRlQnlDb2RlKHRlbXBsYXRlQ29kZTogc3RyaW5nLCBkYXRhOiBhbnksIG5hbWU6IHN0cmluZyA9ICdFeHBvcnQnKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vZmlsbFdvcmRCeVRlbXBsYXRlQ29kZS8ke3RlbXBsYXRlQ29kZX0/aXNQcmludD1mYWxzZWA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0PGFueT4odXJsLCBkYXRhLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIGFzICdqc29uJyB9KVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIEZpbGVTYXZlci5zYXZlQXMocmVzLCB0aGlzLmdldEZ1bGxGaWxlTmFtZShuYW1lIHx8ICdFeHBvcnQnLCBUZW1wbGF0ZUNvbnN0YW50LldPUkRfRVhURU5TSU9OKSk7XG4gICAgICAgICAgICB9KS5jYXRjaChhc3luYyBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IGVyci5lcnJvci50ZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UucHJvY2Vzc0Vycm9yUmVzcG9uc2UoSlNPTi5wYXJzZShlcnJvclRleHQgfHwgJycpKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICBmaWxsVGVtcGxhdGVCeUNvZGVBbmRFeHBvcnRQZGYodGVtcGxhdGVDb2RlOiBzdHJpbmcsIGRhdGE6IGFueSwgbmFtZTogc3RyaW5nID0gJ0V4cG9ydCcpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9maWxsV29yZEJ5VGVtcGxhdGVDb2RlLyR7dGVtcGxhdGVDb2RlfT9pc1ByaW50PXRydWVgO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdDxhbnk+KHVybCwgZGF0YSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gdGhpcy5iNjR0b0Jsb2IocmVzLmRhdGEsICdhcHBsaWNhdGlvbi9wZGYnKTtcbiAgICAgICAgICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsIHRoaXMuZ2V0RnVsbEZpbGVOYW1lKG5hbWUgfHwgJ0V4cG9ydCcsICcucGRmJykpO1xuICAgICAgICAgICAgfSkuY2F0Y2goYXN5bmMgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCBlcnIuZXJyb3IudGV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKEpTT04ucGFyc2UoZXJyb3JUZXh0IHx8ICcnKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBiNjR0b0Jsb2IoYjY0RGF0YSwgY29udGVudFR5cGUgPSAnJywgc2xpY2VTaXplID0gNTEyKSB7XG4gICAgICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiNjREYXRhKTtcbiAgICAgICAgY29uc3QgYnl0ZUFycmF5cyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgb2Zmc2V0ICs9IHNsaWNlU2l6ZSkge1xuICAgICAgICAgICAgY29uc3Qgc2xpY2UgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KHNsaWNlLmxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XG4gICAgICAgICAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihieXRlQXJyYXlzLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pO1xuICAgICAgICByZXR1cm4gYmxvYjtcbiAgICB9XG5cbiAgICBsYVRleFRvQmFzZTY0SW1hZ2UobGFUZXg6IHN0cmluZywgZm9udDogbnVtYmVyID0gNTQpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFwaSA9IGAke3RoaXMuc2VydmljZVVyaX0vTGF0ZXhUb0Jhc2U2NGA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50LnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaSwgeyBsYVRleCwgZm9udCB9KS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBsYVRleFRvSW1hZ2UobGFUZXg6IHN0cmluZywgZm9udDogbnVtYmVyID0gNTQpIHtcbiAgICAgICAgY29uc3QgYXBpID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9MYXRleFRvSW1hZ2VgO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5wb3N0KGFwaSwgeyBsYVRleCwgZm9udCB9LCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIGFzICdqc29uJyB9KS50b1Byb21pc2UoKTtcbiAgICB9XG5cblxuICAgIGFzeW5jIF9leHBvcnQobW9kZWw6IEV4cG9ydEl0ZW0pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vZXhwb3J0YDtcblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHVybCwgbW9kZWwpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwb3J0IGEgdHJlZSBvZiBmb2xkZXJzLCBmaWxlcyB1c2luZyBiYWNrZ3JvdW5kIGpvYi5cbiAgICAgKiBAcGFyYW0gbW9kZWxcbiAgICAgKi9cbiAgICBhc3luYyBleHBvcnQobW9kZWw6IEV4cG9ydEl0ZW0pIHtcbiAgICAgICAgdGhpcy5fZXhwb3J0KG1vZGVsKVxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnVGjDqm0geHXhuqV0IGZpbGUgdGjDoG5oIGPDtG5nIScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UucHJvY2Vzc0Vycm9yUmVzcG9uc2UocnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1RoYW8gdMOhYyBjaMawYSB0aMOgbmggY8O0bmcuIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXUhJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5sb2dJbmZvU2ltcGxlKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBfZXhwb3J0Tm9ybWFsKG1vZGVsOiBFeHBvcnRJdGVtKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L2V4cG9ydE5vcm1hbGA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIG1vZGVsKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cG9ydCBhIHRyZWUgb2YgZm9sZGVycywgZmlsZXMgZGlyZWN0bHkuXG4gICAgICogQHBhcmFtIGRhdGEgcGFyYW0gxJHhu4MgZ2VuIHJhIGZpbGUgZXhjZWxcbiAgICAgKiBAcGFyYW0gaXNWaWV3T25saW5lIGPDsyBkw7luZyBmaWxlIHZpZXdlciDEkeG7gyB2aWV3IGZpbGUgb25saW5lIGtow7RuZ1xuICAgICAqL1xuICAgIGFzeW5jIGV4cG9ydE5vcm1hbChkYXRhOiBFeHBvcnRJdGVtLCBpc1ZpZXdPbmxpbmUgPSBmYWxzZSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9ydE5vcm1hbChkYXRhKVxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RJdGVtID0gcnMuZGF0YSBhcyBFeHBvcnRJdGVtO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWaWV3T25saW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVJZDogcm9vdEl0ZW0uZmlsZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlsZVZlcnNpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiByb290SXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmRvd25sb2FkTGluayhuZXcgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8oe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiByb290SXRlbS5maWxlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXJJZDogcm9vdEl0ZW0uZm9sZGVySWRcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UucHJvY2Vzc0Vycm9yUmVzcG9uc2UocnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1RoYW8gdMOhYyBjaMawYSB0aMOgbmggY8O0bmcuIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXUhJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5sb2dJbmZvU2ltcGxlKGVycik7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFJlc3BvbnNlUmVzdWx0RnJvbUV4Y2VwdGlvbihlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiA8YW55PnJlc3BvbnNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBhc3luYyBfZXhwb3J0TXVsdGlTaGVldChtb2RlbDogRXhwb3J0SXRlbSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9leHBvcnRNdWx0aVNoZWV0YDtcblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHVybCwgbW9kZWwpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHLhuqMgduG7gSBleGNlbCBmaWxlIMSRw6MgZ2VuIHbhu5tpIHRlbXBsYXRlLlxuICAgICAqIEBwYXJhbSBkYXRhIGThu68gbGnhu4d1IMSR4bqndSB2w6BvIMSR4buDIGdlbiB0ZW1wbGF0ZVxuICAgICAqIEBwYXJhbSBpc1ZpZXdPbmxpbmUgY8OzIGTDuW5nIGZpbGUgdmlld2VyIMSR4buDIHZpZXcgZmlsZSBvbmxpbmUga2jDtG5nXG4gICAgICovXG4gICAgYXN5bmMgZXhwb3J0TXVsdGlTaGVldChkYXRhOiBFeHBvcnRJdGVtLCBpc1ZpZXdPbmxpbmUgPSBmYWxzZSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9ydE11bHRpU2hlZXQoZGF0YSlcbiAgICAgICAgICAgIC50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb290SXRlbSA9IHJzLmRhdGEgYXMgRXhwb3J0SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmlld09ubGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlSWQ6IHJvb3RJdGVtLmZpbGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpbGVWZXJzaW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogcm9vdEl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5kb3dubG9hZExpbmsobmV3IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVJZDogcm9vdEl0ZW0uZmlsZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVySWQ6IHJvb3RJdGVtLmZvbGRlcklkXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdUaGFvIHTDoWMgY2jGsGEgdGjDoG5oIGPDtG5nLiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1IScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubG9nSW5mb1NpbXBsZShlcnIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5fY29tbW9uU2VydmljZS5nZXRSZXNwb25zZVJlc3VsdEZyb21FeGNlcHRpb24oZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gPGFueT5yZXNwb25zZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVpbnN0YW5jZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL3RlbXBsYXRlaW5zdGFuY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBRXhDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBTWpFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7QUFLL0MsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFdBQVc7SUFPcEQsWUFDSSxvQkFBeUMsRUFDakMsV0FBdUIsRUFDdkIsYUFBMkIsRUFDekIsWUFBaUMsRUFDakMsZ0JBQWlDLEVBQ2pDLFlBQXlCLEVBQ3pCLGNBQTZCLEVBQy9CLG9CQUF5QyxFQUNqRCxRQUFrQjtRQUVsQixLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMscUJBQXFCLElBQUksb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsbUJBQW1CLENBQUMsQ0FBQztRQVRwTCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUN6QixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUMvQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBSWpELElBQUksQ0FBQyxhQUFhLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFVBQVUsbUJBQW1CLENBQUM7SUFDbkosQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGtCQUFrQixXQUFXLENBQUM7SUFDaEcsQ0FBQztJQUVELGlHQUFpRztJQUNqRyxxRUFBcUU7SUFDckUsaUdBQWlHO0lBRWpHOzs7T0FHRztJQUNILG1CQUFtQixDQUFDLEtBQWtCO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsc0JBQXNCLENBQUM7UUFDckQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QixPQUFPLElBQUksQ0FBQyxXQUFXO2FBQ2xCLElBQUksQ0FBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQWdCLEVBQUUsQ0FBQzthQUN6RCxTQUFTLEVBQUU7YUFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDUixTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQU0sR0FBRyxFQUFDLEVBQUU7WUFDakIsTUFBTSxTQUFTLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFrQjtRQUMxQixLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsdUJBQXVCLENBQUMsS0FBc0I7UUFDMUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSwwQkFBMEIsQ0FBQztRQUN6RCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVCLE9BQU8sSUFBSSxDQUFDLFdBQVc7YUFDbEIsSUFBSSxDQUFpQixHQUFHLEVBQUUsS0FBSyxDQUFDO2FBQ2hDLFNBQVMsRUFBRTthQUNYLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNSLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZEO2lCQUNJO2dCQUNELElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDL0M7UUFDTCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBTSxHQUFHLEVBQUMsRUFBRTtZQUNqQixNQUFNLFNBQVMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQTBCO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3BGLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxPQUFPO1NBQ1Y7UUFFRCxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksZ0JBQWdCLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDakgsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZUFBZSxDQUFDLFFBQVEsRUFBRSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsZUFBZTtRQUNsRSxPQUFPLEdBQUcsUUFBUSxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsS0FBaUM7UUFDM0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxnQkFBZ0IsQ0FBQztRQUUvQyxPQUFPLElBQUksQ0FBQyxXQUFXO2FBQ2xCLElBQUksQ0FBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQWdCLEVBQUUsQ0FBQzthQUN6RCxTQUFTLEVBQUU7YUFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDUixTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBTSxHQUFHLEVBQUMsRUFBRTtZQUNqQixNQUFNLFNBQVMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsaUdBQWlHO0lBQ2pHLGlFQUFpRTtJQUNqRSxpR0FBaUc7SUFFakc7Ozs7Ozs7O09BUUc7SUFDRyw4QkFBOEIsQ0FBQyxLQUFrQjs7WUFDbkQsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxpQ0FBaUMsQ0FBQztZQUVoRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFpQixHQUFHLEVBQUUsS0FBSyxDQUFDO2lCQUNuRCxTQUFTLEVBQUUsQ0FBQztRQUNyQixDQUFDO0tBQUE7SUFFRDs7O09BR0c7SUFDRywwQkFBMEIsQ0FBQyxLQUFrQjs7WUFDL0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxzQkFBc0IsQ0FBQztZQUVyRCxPQUFPLElBQUksQ0FBQyxXQUFXO2lCQUNsQixJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFnQixFQUFFLENBQUM7aUJBQ3BELFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUM7S0FBQTtJQUVEOzs7T0FHRztJQUNHLG9CQUFvQixDQUFDLEtBQWlDOztZQUN4RCxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLGdCQUFnQixDQUFDO1lBRS9DLE9BQU8sSUFBSSxDQUFDLFdBQVc7aUJBQ2xCLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQWdCLEVBQUUsQ0FBQztpQkFDcEQsU0FBUyxFQUFFLENBQUM7UUFDckIsQ0FBQztLQUFBO0lBQ0Q7Ozs7T0FJRztJQUNILDJCQUEyQixDQUFDLFlBQW9CLEVBQUUsSUFBUztRQUN2RCxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLDJCQUEyQixZQUFZLGVBQWUsQ0FBQztRQUVyRixPQUFPLElBQUksQ0FBQyxXQUFXO2FBQ2xCLElBQUksQ0FBaUIsR0FBRyxFQUFFLElBQUksQ0FBQzthQUMvQixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEIsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMvQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELCtCQUErQixDQUFDLFlBQW9CLEVBQUUsSUFBUztRQUMzRCxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLDJCQUEyQixZQUFZLGVBQWUsQ0FBQztRQUVyRixPQUFPLElBQUksQ0FBQyxXQUFXO2FBQ2xCLElBQUksQ0FBaUIsR0FBRyxFQUFFLElBQUksQ0FBQzthQUMvQixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEIsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNWLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3hCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtCQUFrQixDQUFDLFlBQW9CLEVBQUUsSUFBUyxFQUFFLE9BQWUsUUFBUTtRQUN2RSxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLDJCQUEyQixZQUFZLGdCQUFnQixDQUFDO1FBRXRGLE9BQU8sSUFBSSxDQUFDLFdBQVc7YUFDbEIsSUFBSSxDQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBZ0IsRUFBRSxDQUFDO2FBQ3hELFNBQVMsRUFBRTthQUNYLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNSLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ25HLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFNLEdBQUcsRUFBQyxFQUFFO1lBQ2pCLE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCw4QkFBOEIsQ0FBQyxZQUFvQixFQUFFLElBQVMsRUFBRSxPQUFlLFFBQVE7UUFDbkYsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSwyQkFBMkIsWUFBWSxlQUFlLENBQUM7UUFFckYsT0FBTyxJQUFJLENBQUMsV0FBVzthQUNsQixJQUFJLENBQU0sR0FBRyxFQUFFLElBQUksQ0FBQzthQUNwQixTQUFTLEVBQUU7YUFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDUixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUN6RCxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBTSxHQUFHLEVBQUMsRUFBRTtZQUNqQixNQUFNLFNBQVMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQU8sRUFBRSxXQUFXLEdBQUcsRUFBRSxFQUFFLFNBQVMsR0FBRyxHQUFHO1FBQ2hELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFdEIsS0FBSyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLFNBQVMsRUFBRTtZQUN0RSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFFL0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNuQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4QztZQUVELE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDOUI7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBYSxFQUFFLE9BQWUsRUFBRTtRQUMvQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLGdCQUFnQixDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQWlCLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25GLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYSxFQUFFLE9BQWUsRUFBRTtRQUN6QyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLGVBQWUsQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFnQixFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2RyxDQUFDO0lBR0ssT0FBTyxDQUFDLEtBQWlCOztZQUMzQixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLFNBQVMsQ0FBQztZQUV4QyxPQUFPLElBQUksQ0FBQyxXQUFXO2lCQUNsQixJQUFJLENBQWlCLEdBQUcsRUFBRSxLQUFLLENBQUM7aUJBQ2hDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUM7S0FBQTtJQUVEOzs7T0FHRztJQUNHLE1BQU0sQ0FBQyxLQUFpQjs7WUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7aUJBQ2QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNQLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRTtvQkFDWixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLDRCQUE0QixDQUFDLENBQUM7aUJBQ25FO3FCQUNJO29CQUNELElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQzlDO1lBQ0wsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7Z0JBQ3JGLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQztLQUFBO0lBRUssYUFBYSxDQUFDLEtBQWlCOztZQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLGVBQWUsQ0FBQztZQUU5QyxPQUFPLElBQUksQ0FBQyxXQUFXO2lCQUNsQixJQUFJLENBQWlCLEdBQUcsRUFBRSxLQUFLLENBQUM7aUJBQ2hDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDRyxZQUFZLENBQUMsSUFBZ0IsRUFBRSxZQUFZLEdBQUcsS0FBSzs7WUFDckQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztpQkFDMUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNQLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRTtvQkFDWixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsSUFBa0IsQ0FBQztvQkFDdkMsSUFBSSxZQUFZLEVBQUU7d0JBQ2QsT0FBTzs0QkFDSCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07NEJBQ3ZCLGFBQWEsRUFBRSxLQUFLOzRCQUNwQixRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUk7eUJBQzFCLENBQUM7cUJBQ0w7b0JBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxJQUFJLHVCQUF1QixDQUFDO3dCQUMvRCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07d0JBQ3ZCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtxQkFDOUIsQ0FBQyxDQUFDLENBQUM7aUJBQ1A7cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDOUM7WUFDTCxDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsaURBQWlELENBQUMsQ0FBQztnQkFDckYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pFLE9BQVksUUFBUSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQztLQUFBO0lBR0ssaUJBQWlCLENBQUMsS0FBaUI7O1lBQ3JDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsbUJBQW1CLENBQUM7WUFFbEQsT0FBTyxJQUFJLENBQUMsV0FBVztpQkFDbEIsSUFBSSxDQUFpQixHQUFHLEVBQUUsS0FBSyxDQUFDO2lCQUNoQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ0csZ0JBQWdCLENBQUMsSUFBZ0IsRUFBRSxZQUFZLEdBQUcsS0FBSzs7WUFDekQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2lCQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFO29CQUNaLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxJQUFrQixDQUFDO29CQUN2QyxJQUFJLFlBQVksRUFBRTt3QkFDZCxPQUFPOzRCQUNILE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTs0QkFDdkIsYUFBYSxFQUFFLEtBQUs7NEJBQ3BCLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSTt5QkFDMUIsQ0FBQztxQkFDTDtvQkFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLElBQUksdUJBQXVCLENBQUM7d0JBQy9ELE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTt3QkFDdkIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO3FCQUM5QixDQUFDLENBQUMsQ0FBQztpQkFDUDtxQkFDSTtvQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM5QztZQUNMLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO2dCQUNyRixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekUsT0FBWSxRQUFRLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDO0tBQUE7Ozs7WUE5V0osVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFOUSxtQkFBbUI7WUFoQm5CLFVBQVU7WUFrQlYsWUFBWTtZQVpaLG1CQUFtQjtZQVduQixlQUFlO1lBRmYsV0FBVztZQURYLGFBQWE7WUFUYixtQkFBbUI7WUFKUCxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5cbmltcG9ydCB7IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPIH0gZnJvbSAnLi4vY29tcG9uZW50cy9maWxlLWV4cGxvcmVyL21vZGVscy9nZW5lcmF0ZS1saW5rLWRvd25sb2FkLWR0byc7XG5pbXBvcnQgeyBEb3dubG9hZExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2Rvd25sb2FkLWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2ZpbGUtZXhwbG9yZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZUNvbnN0YW50IH0gZnJvbSAnLi4vY29uZmlncy9jb21wb25lbnQtY29udGFudHMnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlncy9tb2R1bGUtY29uZmlnJztcbmltcG9ydCB7IEV4cG9ydE1hbnlNb2RlbCwgRXhwb3J0TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZXhwb3J0LWZpbGUtaW5mbyc7XG5pbXBvcnQgeyBFeHBvcnRJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2V4cG9ydC1pdGVtJztcbmltcG9ydCB7IEV4cG9ydFdpdGhvdXRUZW1wbGF0ZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2V4cG9ydC13aXRob3V0LXRlbXBsYXRlJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4vbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQcmludFNlcnZpY2UgfSBmcm9tICcuL3ByaW50LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xuXG4gICAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IGFueTtcbiAgICByZWFkb25seSBfbW9kdWxlQ29uZmlnOiBNb2R1bGVDb25maWc7XG4gICAgLy8gcmVhZG9ubHkgc2VydmljZVVyaTogc3RyaW5nOyAvL1ThuqFtIHRo4budaSBrIMSR4buDIHJlYWRvbmx5IMSR4buDIGPDsyB0aOG7gyBzd2l0Y2ggc2FuZyB2NFxuICAgIHNlcnZpY2VVcmk6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSBfcHJpbnRTZXJ2aWNlOiBQcmludFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfZmlsZVNlcnZpY2U6IEZpbGVFeHBsb3JlclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2Rvd25sb2FkTGlua1NlcnZpY2U6IERvd25sb2FkTGlua1NlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2h0dHBDbGllbnQsIGluamVjdG9yLCBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uYXV0aG9yaXphdGlvbkVuZHBvaW50fS8ke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaVZlcnNpb259L1RlbXBsYXRlSW5zdGFuY2VgKTtcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQ7XG4gICAgICAgIHRoaXMuc2VydmljZVVyaSA9IGAke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4udGVtcGxhdGVFbmRwb2ludH0vJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vVGVtcGxhdGVJbnN0YW5jZWA7XG4gICAgfVxuXG4gICAgdXNlVjQoKSB7XG4gICAgICAgIHRoaXMuc2VydmljZVVyaSA9IGAke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4udGVtcGxhdGVWNEVuZHBvaW50fS9UZW1wbGF0ZWA7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuICAgIC8vICAgICAgICAgICAgICAgICAgWFXhuqRUIEVYQ0VMOiBraMO0bmcgZMO5bmcgc2lnbmFsUiwgdOG7sSDEkeG7mW5nIGzGsHUgeHXhu5FuZ1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cblxuICAgIC8qKlxuICAgICAqIFh14bqldCBt4buZdCBmaWxlIHRy4buxYyB0aeG6v3Aga2jDtG5nLCB4b25nIHRow6wgdOG7sSBsxrB1IHh14buRbmcuXG4gICAgICogQHBhcmFtIG1vZGVsXG4gICAgICovXG4gICAgZXhwb3J0Q3hFeGNlbEJ5Q29kZShtb2RlbDogRXhwb3J0TW9kZWwpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9FeHBvcnRDeEV4Y2VsQnlDb2RlYDtcbiAgICAgICAgdGhpcy5zZXRGaWxlSW5mbyhtb2RlbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0PGFueT4odXJsLCBtb2RlbCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyBhcyAnanNvbicgfSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKHJlcywgdGhpcy5nZXRGdWxsRmlsZU5hbWUobW9kZWwuZmlsZU5hbWUgfHwgbW9kZWwuY29kZSkpO1xuICAgICAgICAgICAgfSkuY2F0Y2goYXN5bmMgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCBlcnIuZXJyb3IudGV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKEpTT04ucGFyc2UoZXJyb3JUZXh0IHx8ICcnKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRGaWxlSW5mbyhtb2RlbDogRXhwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbW9kZWwuZGF0YSA9IG1vZGVsLmRhdGEgPyBtb2RlbC5kYXRhIDogSlNPTi5zdHJpbmdpZnkobW9kZWwuZGF0YU9iamVjdCk7XG4gICAgICAgIGRlbGV0ZSBtb2RlbC5kYXRhT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFh14bqldCBuaGnhu4F1IGZpbGUsIHhvbmcgdGjDrCB04buxIMSR4buZbmcgdOG6o2kgduG7gSBmb2xkZXIgxJHDoyBuw6luLlxuICAgICAqIEBwYXJhbSBtb2RlbFxuICAgICAqL1xuICAgIGV4cG9ydE1hbnlDeEV4Y2VsQnlDb2RlKG1vZGVsOiBFeHBvcnRNYW55TW9kZWwpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9FeHBvcnRNYW55Q3hFeGNlbEJ5Q29kZWA7XG4gICAgICAgIHRoaXMuc2V0TWFueUZpbGVJbmZvKG1vZGVsKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHVybCwgbW9kZWwpXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVTZXJ2aWNlLmRvd25sb2FkRm9sZGVyKHJlcy5kYXRhLmZvbGRlcklkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuY2F0Y2goYXN5bmMgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCBlcnIuZXJyb3IudGV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKEpTT04ucGFyc2UoZXJyb3JUZXh0IHx8ICcnKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRNYW55RmlsZUluZm8obWFueU1vZGVsOiBFeHBvcnRNYW55TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaGFzTW9kZWwgPSBtYW55TW9kZWwgJiYgbWFueU1vZGVsLmxzdEZpbGVJbmZvICYmIG1hbnlNb2RlbC5sc3RGaWxlSW5mby5sZW5ndGg7XG4gICAgICAgIGlmICghaGFzTW9kZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hbnlNb2RlbC5sc3RGaWxlSW5mby5mb3JFYWNoKGZpbGVJbmZvID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsZUluZm8oZmlsZUluZm8pO1xuICAgICAgICAgICAgZmlsZUluZm8uZmlsZU5hbWUgPSBgJHtmaWxlSW5mby5maWxlTmFtZX1fJHt0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKX0uJHtUZW1wbGF0ZUNvbnN0YW50LkVYQ0VMX0VYVEVOU0lPTn1gO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRGdWxsRmlsZU5hbWUoZmlsZU5hbWUsIGV4dGVuc2lvbiA9IFRlbXBsYXRlQ29uc3RhbnQuRVhDRUxfRVhURU5TSU9OKSB7XG4gICAgICAgIHJldHVybiBgJHtmaWxlTmFtZX0ke2V4dGVuc2lvbn1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFh14bqldCBmaWxlIGV4Y2VsIGtow7RuZyBkw7luZyB0ZW1wbGF0ZSwgdOG7sSDEkeG7mW5nIHThuqNpIHh14buRbmcuXG4gICAgICogQHBhcmFtIG1vZGVsXG4gICAgICovXG4gICAgZXhwb3J0Q3hFeGNlbChtb2RlbDogRXhwb3J0V2l0aG91dFRlbXBsYXRlTW9kZWwpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9FeHBvcnRDeEV4Y2VsYDtcblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3Q8YW55Pih1cmwsIG1vZGVsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIGFzICdqc29uJyB9KVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIEZpbGVTYXZlci5zYXZlQXMocmVzLCB0aGlzLmdldEZ1bGxGaWxlTmFtZShtb2RlbC5maWxlTmFtZSB8fCAnRXhwb3J0JykpO1xuICAgICAgICAgICAgfSkuY2F0Y2goYXN5bmMgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCBlcnIuZXJyb3IudGV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKEpTT04ucGFyc2UoZXJyb3JUZXh0IHx8ICcnKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYVeG6pFQgRVhDRUw6IGTDuW5nIGNobyByZXBvcnQgcXVldWVcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgICAvKipcbiAgICAgKiBQcm9taXNlIHh14bqldCBmaWxlIGV4Y2VsIGTDuW5nIHNpZ25hbFIuXG4gICAgICogLSBEZXNjcmlwdGlvbjogRXhwb3J0IHPhu60gZHVuZyBDbG9zZWRYbWwuUmVwb3J0IChDeCkgduG7m2kgc2lnbmFsUiwgc+G7rSBk4bulbmcgY2hvIGZpbGUgZOG7ryBsaeG7h3UgbOG7m24uXG4gICAgICogLSBQYXJhbTogbW9kZWwgY2jhu6lhXG4gICAgICogICAgICAtIGNvZGUgOiAgY29kZSBj4bunYSB0ZW1wbGF0ZSBj4bqldSBow6xuaCBiw6puIFF14bqjbiB0cuG7iyA+IEJp4buDdSBt4bqrdSA+IEJp4buDdSBt4bqrdSBleGNlbC5cbiAgICAgKiAgICAgIC0gZGF0YSA6IG9iamVjdCBjaOG7qWEgZOG7ryBsaeG7h3UgxJHDoyBjaHV54buBbiB0aMOgbmggZOG6oW5nIGpzb24uXG4gICAgICogICAgICAtIGZpbGVOYW1lOiB0w6puIGZpbGUgc2F1IGtoaSBleHBvcnQuXG4gICAgICogICAgICAtIHRvcGljOiBndWlkIGTDuW5nIMSR4buDIHN1YnNjcmliZS5cbiAgICAgKi9cbiAgICBhc3luYyBFeHBvcnRDeEV4Y2VsQnlDb2RlV2l0aFNpZ25hbFIobW9kZWw6IEV4cG9ydE1vZGVsKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0V4cG9ydEN4RXhjZWxCeUNvZGVXaXRoU2lnbmFsUmA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQucG9zdDxSZXNwb25zZVJlc3VsdD4odXJsLCBtb2RlbClcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9taXNlIHh14bqldCBmaWxlIGV4Y2VsIGtow7RuZyBkw7luZyBzaWduYWxSLlxuICAgICAqIEBwYXJhbSBtb2RlbFxuICAgICAqL1xuICAgIGFzeW5jIGV4cG9ydEN4RXhjZWxCeUNvZGVQcm9taXNlKG1vZGVsOiBFeHBvcnRNb2RlbCk6IFByb21pc2U8T2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRXhwb3J0Q3hFeGNlbEJ5Q29kZWA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHVybCwgbW9kZWwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgYXMgJ2pzb24nIH0pXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvbWlzZSB4deG6pXQgZmlsZSBleGNlbCBraMO0bmcgZMO5bmcgc2lnbmFsUiB2w6Aga2jDtG5nIGTDuW5nIHRlbXBsYXRlLlxuICAgICAqIEBwYXJhbSBtb2RlbFxuICAgICAqL1xuICAgIGFzeW5jIGV4cG9ydEN4RXhjZWxQcm9taXNlKG1vZGVsOiBFeHBvcnRXaXRob3V0VGVtcGxhdGVNb2RlbCk6IFByb21pc2U8T2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRXhwb3J0Q3hFeGNlbGA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHVybCwgbW9kZWwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgYXMgJ2pzb24nIH0pXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdvcmRcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGVDb2RlXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICBmaWxsVGVtcGxhdGVCeUNvZGVBbmRHZXRQZGYodGVtcGxhdGVDb2RlOiBzdHJpbmcsIGRhdGE6IGFueSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L2ZpbGxXb3JkQnlUZW1wbGF0ZUNvZGUvJHt0ZW1wbGF0ZUNvZGV9P2lzUHJpbnQ9dHJ1ZWA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIGRhdGEpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCkudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcmludFNlcnZpY2UucHJpbnRCYXNlNjRQZGYocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZpbGxUZW1wbGF0ZUJ5Q29kZUFuZFByZXZpZXdQZGYodGVtcGxhdGVDb2RlOiBzdHJpbmcsIGRhdGE6IGFueSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L2ZpbGxXb3JkQnlUZW1wbGF0ZUNvZGUvJHt0ZW1wbGF0ZUNvZGV9P2lzUHJpbnQ9dHJ1ZWA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIGRhdGEpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCkudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IHRoaXMuYjY0dG9CbG9iKHJlcy5kYXRhLCAnYXBwbGljYXRpb24vcGRmJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWxlVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4oZmlsZVVSTCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV29yZFxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZUNvZGVcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIGZpbGxUZW1wbGF0ZUJ5Q29kZSh0ZW1wbGF0ZUNvZGU6IHN0cmluZywgZGF0YTogYW55LCBuYW1lOiBzdHJpbmcgPSAnRXhwb3J0Jykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L2ZpbGxXb3JkQnlUZW1wbGF0ZUNvZGUvJHt0ZW1wbGF0ZUNvZGV9P2lzUHJpbnQ9ZmFsc2VgO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdDxhbnk+KHVybCwgZGF0YSwgeyByZXNwb25zZVR5cGU6ICdibG9iJyBhcyAnanNvbicgfSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKHJlcywgdGhpcy5nZXRGdWxsRmlsZU5hbWUobmFtZSB8fCAnRXhwb3J0JywgVGVtcGxhdGVDb25zdGFudC5XT1JEX0VYVEVOU0lPTikpO1xuICAgICAgICAgICAgfSkuY2F0Y2goYXN5bmMgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCBlcnIuZXJyb3IudGV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKEpTT04ucGFyc2UoZXJyb3JUZXh0IHx8ICcnKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgZmlsbFRlbXBsYXRlQnlDb2RlQW5kRXhwb3J0UGRmKHRlbXBsYXRlQ29kZTogc3RyaW5nLCBkYXRhOiBhbnksIG5hbWU6IHN0cmluZyA9ICdFeHBvcnQnKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vZmlsbFdvcmRCeVRlbXBsYXRlQ29kZS8ke3RlbXBsYXRlQ29kZX0/aXNQcmludD10cnVlYDtcblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3Q8YW55Pih1cmwsIGRhdGEpXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IHRoaXMuYjY0dG9CbG9iKHJlcy5kYXRhLCAnYXBwbGljYXRpb24vcGRmJyk7XG4gICAgICAgICAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhibG9iLCB0aGlzLmdldEZ1bGxGaWxlTmFtZShuYW1lIHx8ICdFeHBvcnQnLCAnLnBkZicpKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGFzeW5jIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgZXJyLmVycm9yLnRleHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcnVkU2VydmljZS5wcm9jZXNzRXJyb3JSZXNwb25zZShKU09OLnBhcnNlKGVycm9yVGV4dCB8fCAnJykpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYjY0dG9CbG9iKGI2NERhdGEsIGNvbnRlbnRUeXBlID0gJycsIHNsaWNlU2l6ZSA9IDUxMikge1xuICAgICAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYjY0RGF0YSk7XG4gICAgICAgIGNvbnN0IGJ5dGVBcnJheXMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IG9mZnNldCArPSBzbGljZVNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xuXG4gICAgICAgICAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGljZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoYnl0ZUFycmF5cywgeyB0eXBlOiBjb250ZW50VHlwZSB9KTtcbiAgICAgICAgcmV0dXJuIGJsb2I7XG4gICAgfVxuXG4gICAgbGFUZXhUb0Jhc2U2NEltYWdlKGxhVGV4OiBzdHJpbmcsIGZvbnQ6IG51bWJlciA9IDU0KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBhcGkgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0xhdGV4VG9CYXNlNjRgO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGksIHsgbGFUZXgsIGZvbnQgfSkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgbGFUZXhUb0ltYWdlKGxhVGV4OiBzdHJpbmcsIGZvbnQ6IG51bWJlciA9IDU0KSB7XG4gICAgICAgIGNvbnN0IGFwaSA9IGAke3RoaXMuc2VydmljZVVyaX0vTGF0ZXhUb0ltYWdlYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQucG9zdChhcGksIHsgbGFUZXgsIGZvbnQgfSwgeyByZXNwb25zZVR5cGU6ICdibG9iJyBhcyAnanNvbicgfSkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG5cbiAgICBhc3luYyBfZXhwb3J0KG1vZGVsOiBFeHBvcnRJdGVtKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L2V4cG9ydGA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIG1vZGVsKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cG9ydCBhIHRyZWUgb2YgZm9sZGVycywgZmlsZXMgdXNpbmcgYmFja2dyb3VuZCBqb2IuXG4gICAgICogQHBhcmFtIG1vZGVsXG4gICAgICovXG4gICAgYXN5bmMgZXhwb3J0KG1vZGVsOiBFeHBvcnRJdGVtKSB7XG4gICAgICAgIHRoaXMuX2V4cG9ydChtb2RlbClcbiAgICAgICAgICAgIC50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1Row6ptIHh14bqldCBmaWxlIHRow6BuaCBjw7RuZyEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdUaGFvIHTDoWMgY2jGsGEgdGjDoG5oIGPDtG5nLiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1IScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubG9nSW5mb1NpbXBsZShlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2V4cG9ydE5vcm1hbChtb2RlbDogRXhwb3J0SXRlbSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9leHBvcnROb3JtYWxgO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdDxSZXNwb25zZVJlc3VsdD4odXJsLCBtb2RlbClcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHBvcnQgYSB0cmVlIG9mIGZvbGRlcnMsIGZpbGVzIGRpcmVjdGx5LlxuICAgICAqIEBwYXJhbSBkYXRhIHBhcmFtIMSR4buDIGdlbiByYSBmaWxlIGV4Y2VsXG4gICAgICogQHBhcmFtIGlzVmlld09ubGluZSBjw7MgZMO5bmcgZmlsZSB2aWV3ZXIgxJHhu4MgdmlldyBmaWxlIG9ubGluZSBraMO0bmdcbiAgICAgKi9cbiAgICBhc3luYyBleHBvcnROb3JtYWwoZGF0YTogRXhwb3J0SXRlbSwgaXNWaWV3T25saW5lID0gZmFsc2UpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvcnROb3JtYWwoZGF0YSlcbiAgICAgICAgICAgIC50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb290SXRlbSA9IHJzLmRhdGEgYXMgRXhwb3J0SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmlld09ubGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlSWQ6IHJvb3RJdGVtLmZpbGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpbGVWZXJzaW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogcm9vdEl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5kb3dubG9hZExpbmsobmV3IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVJZDogcm9vdEl0ZW0uZmlsZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVySWQ6IHJvb3RJdGVtLmZvbGRlcklkXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdUaGFvIHTDoWMgY2jGsGEgdGjDoG5oIGPDtG5nLiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1IScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubG9nSW5mb1NpbXBsZShlcnIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5fY29tbW9uU2VydmljZS5nZXRSZXNwb25zZVJlc3VsdEZyb21FeGNlcHRpb24oZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gPGFueT5yZXNwb25zZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgYXN5bmMgX2V4cG9ydE11bHRpU2hlZXQobW9kZWw6IEV4cG9ydEl0ZW0pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vZXhwb3J0TXVsdGlTaGVldGA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIG1vZGVsKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRy4bqjIHbhu4EgZXhjZWwgZmlsZSDEkcOjIGdlbiB24bubaSB0ZW1wbGF0ZS5cbiAgICAgKiBAcGFyYW0gZGF0YSBk4buvIGxp4buHdSDEkeG6p3UgdsOgbyDEkeG7gyBnZW4gdGVtcGxhdGVcbiAgICAgKiBAcGFyYW0gaXNWaWV3T25saW5lIGPDsyBkw7luZyBmaWxlIHZpZXdlciDEkeG7gyB2aWV3IGZpbGUgb25saW5lIGtow7RuZ1xuICAgICAqL1xuICAgIGFzeW5jIGV4cG9ydE11bHRpU2hlZXQoZGF0YTogRXhwb3J0SXRlbSwgaXNWaWV3T25saW5lID0gZmFsc2UpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvcnRNdWx0aVNoZWV0KGRhdGEpXG4gICAgICAgICAgICAudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdEl0ZW0gPSBycy5kYXRhIGFzIEV4cG9ydEl0ZW07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZpZXdPbmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiByb290SXRlbS5maWxlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGaWxlVmVyc2lvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IHJvb3RJdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZG93bmxvYWRMaW5rKG5ldyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlSWQ6IHJvb3RJdGVtLmZpbGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlcklkOiByb290SXRlbS5mb2xkZXJJZFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcnVkU2VydmljZS5wcm9jZXNzRXJyb3JSZXNwb25zZShycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVGhhbyB0w6FjIGNoxrBhIHRow6BuaCBjw7RuZy4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdSEnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmxvZ0luZm9TaW1wbGUoZXJyKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ2V0UmVzcG9uc2VSZXN1bHRGcm9tRXhjZXB0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxhbnk+cmVzcG9uc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -845,6 +845,7 @@ class CrudFormSetting {
845
845
  this.hiddenKySoSimCaNhan = false;
846
846
  this.hiddenKySoUsbCaNhan = false;
847
847
  this.hiddenKySoDonVi = false;
848
+ this.arrFieldMustValidate = [];
848
849
  this.getCustomDataTrinhKy = (rowData) => ({});
849
850
  for (const key in init) {
850
851
  this[key] = init[key];
@@ -8565,6 +8566,18 @@ class TemplateInstanceService extends BaseService {
8565
8566
  }
8566
8567
  });
8567
8568
  }
8569
+ fillTemplateByCodeAndPreviewPdf(templateCode, data) {
8570
+ const url = `${this.serviceUri}/fillWordByTemplateCode/${templateCode}?isPrint=true`;
8571
+ return this._httpClient
8572
+ .post(url, data)
8573
+ .toPromise().then(res => {
8574
+ if (res.data) {
8575
+ var file = this.b64toBlob(res.data, 'application/pdf');
8576
+ var fileURL = URL.createObjectURL(file);
8577
+ window.open(fileURL);
8578
+ }
8579
+ });
8580
+ }
8568
8581
  /**
8569
8582
  * Word
8570
8583
  * @param templateCode
@@ -13645,10 +13658,11 @@ class CrudFormComponent extends ComponentBase {
13645
13658
  return 'string';
13646
13659
  }
13647
13660
  validateForm(setValidateForm = true) {
13661
+ var _a;
13648
13662
  return __awaiter(this, void 0, void 0, function* () {
13649
- if (setValidateForm) {
13663
+ if (setValidateForm || ((_a = this.setting.arrFieldMustValidate) === null || _a === void 0 ? void 0 : _a.length)) {
13650
13664
  this._inValidForm = false;
13651
- yield this.validateModel(this._rootNode);
13665
+ yield this.validateModel(this._rootNode, setValidateForm);
13652
13666
  if (this._inValidForm) {
13653
13667
  setTimeout(() => {
13654
13668
  this.focusToFirstErrorControl();
@@ -13659,9 +13673,16 @@ class CrudFormComponent extends ComponentBase {
13659
13673
  return true;
13660
13674
  });
13661
13675
  }
13662
- validateModel(currentNode) {
13676
+ validateModel(currentNode, setValidateForm = true) {
13677
+ var _a;
13663
13678
  return __awaiter(this, void 0, void 0, function* () {
13664
13679
  for (const childNode of currentNode.childNodes) {
13680
+ if (!setValidateForm && ((_a = this.setting.arrFieldMustValidate) === null || _a === void 0 ? void 0 : _a.length)) {
13681
+ if (!this.setting.arrFieldMustValidate.includes(childNode.field)) {
13682
+ this.removeAllErrorByNodes(childNode);
13683
+ continue;
13684
+ }
13685
+ }
13665
13686
  if (!childNode.control) {
13666
13687
  if (childNode.childNodes == null) {
13667
13688
  continue;
@@ -13978,6 +13999,22 @@ class CrudFormComponent extends ComponentBase {
13978
13999
  this._removeError(field);
13979
14000
  }
13980
14001
  }
14002
+ removeAllErrorByNodes(currentNode) {
14003
+ var _a, _b;
14004
+ currentNode.parentNode.model._errors[currentNode.field] = [];
14005
+ if (!((_a = currentNode.childNodes) === null || _a === void 0 ? void 0 : _a.length)) {
14006
+ return;
14007
+ }
14008
+ for (const childNode of currentNode.childNodes) {
14009
+ if (!((_b = childNode.childNodes) === null || _b === void 0 ? void 0 : _b.length)) {
14010
+ this.removeAllErrorByNodes(childNode);
14011
+ continue;
14012
+ }
14013
+ for (const node of childNode.childNodes) {
14014
+ this.removeAllErrorByNodes(node);
14015
+ }
14016
+ }
14017
+ }
13981
14018
  cacheControlValue(control, value, parentPath) {
13982
14019
  if (control && control.enableCaching) {
13983
14020
  this.cachedValues[parentPath + '.' + control.field] = value;