@vality/swag-organizations 1.0.1-cd6cc10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2020/lib/api/api.mjs +10 -0
- package/esm2020/lib/api/invitations.service.mjs +351 -0
- package/esm2020/lib/api/members.service.mjs +396 -0
- package/esm2020/lib/api/orgs.service.mjs +620 -0
- package/esm2020/lib/api/roles.service.mjs +206 -0
- package/esm2020/lib/api.module.mjs +40 -0
- package/esm2020/lib/configuration.mjs +80 -0
- package/esm2020/lib/encoder.mjs +19 -0
- package/esm2020/lib/index.mjs +6 -0
- package/esm2020/lib/model/inline-object-1.mjs +18 -0
- package/esm2020/lib/model/inline-object.mjs +13 -0
- package/esm2020/lib/model/inline-response-400.mjs +18 -0
- package/esm2020/lib/model/inline-response-422-1.mjs +18 -0
- package/esm2020/lib/model/inline-response-422-2.mjs +18 -0
- package/esm2020/lib/model/inline-response-422-3.mjs +18 -0
- package/esm2020/lib/model/inline-response-422.mjs +18 -0
- package/esm2020/lib/model/invitation-accepted-all-of-member.mjs +13 -0
- package/esm2020/lib/model/invitation-accepted-all-of.mjs +2 -0
- package/esm2020/lib/model/invitation-accepted.mjs +2 -0
- package/esm2020/lib/model/invitation-expired.mjs +2 -0
- package/esm2020/lib/model/invitation-list-result.mjs +2 -0
- package/esm2020/lib/model/invitation-pending.mjs +2 -0
- package/esm2020/lib/model/invitation-request.mjs +2 -0
- package/esm2020/lib/model/invitation-revoked-all-of.mjs +13 -0
- package/esm2020/lib/model/invitation-revoked.mjs +2 -0
- package/esm2020/lib/model/invitation-status-name.mjs +18 -0
- package/esm2020/lib/model/invitation.mjs +2 -0
- package/esm2020/lib/model/invitee-contact.mjs +18 -0
- package/esm2020/lib/model/invitee.mjs +2 -0
- package/esm2020/lib/model/member-context.mjs +13 -0
- package/esm2020/lib/model/member-org-list-result.mjs +2 -0
- package/esm2020/lib/model/member-role-scope.mjs +2 -0
- package/esm2020/lib/model/member-role.mjs +2 -0
- package/esm2020/lib/model/member.mjs +2 -0
- package/esm2020/lib/model/models.mjs +35 -0
- package/esm2020/lib/model/organization-join-request.mjs +13 -0
- package/esm2020/lib/model/organization-membership.mjs +2 -0
- package/esm2020/lib/model/organization-search-result.mjs +2 -0
- package/esm2020/lib/model/organization-switch-request.mjs +13 -0
- package/esm2020/lib/model/organization.mjs +13 -0
- package/esm2020/lib/model/resource-scope-id.mjs +15 -0
- package/esm2020/lib/model/role-available-list-result.mjs +2 -0
- package/esm2020/lib/model/role-id.mjs +18 -0
- package/esm2020/lib/model/role.mjs +2 -0
- package/esm2020/lib/variables.mjs +9 -0
- package/esm2020/public-api.mjs +2 -0
- package/esm2020/vality-swag-organizations.mjs +5 -0
- package/fesm2015/vality-swag-organizations.mjs +1876 -0
- package/fesm2015/vality-swag-organizations.mjs.map +1 -0
- package/fesm2020/vality-swag-organizations.mjs +1950 -0
- package/fesm2020/vality-swag-organizations.mjs.map +1 -0
- package/lib/api/api.d.ts +9 -0
- package/lib/api/invitations.service.d.ts +128 -0
- package/lib/api/members.service.d.ts +150 -0
- package/lib/api/orgs.service.d.ts +238 -0
- package/lib/api/roles.service.d.ts +69 -0
- package/lib/api.module.d.ts +11 -0
- package/lib/configuration.d.ts +80 -0
- package/lib/encoder.d.ts +11 -0
- package/lib/index.d.ts +5 -0
- package/lib/model/inline-object-1.d.ts +24 -0
- package/lib/model/inline-object.d.ts +17 -0
- package/lib/model/inline-response-400.d.ts +24 -0
- package/lib/model/inline-response-422-1.d.ts +24 -0
- package/lib/model/inline-response-422-2.d.ts +24 -0
- package/lib/model/inline-response-422-3.d.ts +24 -0
- package/lib/model/inline-response-422.d.ts +24 -0
- package/lib/model/invitation-accepted-all-of-member.d.ts +20 -0
- package/lib/model/invitation-accepted-all-of.d.ts +19 -0
- package/lib/model/invitation-accepted.d.ts +9 -0
- package/lib/model/invitation-expired.d.ts +3 -0
- package/lib/model/invitation-list-result.d.ts +15 -0
- package/lib/model/invitation-pending.d.ts +3 -0
- package/lib/model/invitation-request.d.ts +22 -0
- package/lib/model/invitation-revoked-all-of.d.ts +21 -0
- package/lib/model/invitation-revoked.d.ts +11 -0
- package/lib/model/invitation-status-name.d.ts +18 -0
- package/lib/model/invitation.d.ts +37 -0
- package/lib/model/invitee-contact.d.ts +27 -0
- package/lib/model/invitee.d.ts +23 -0
- package/lib/model/member-context.d.ts +17 -0
- package/lib/model/member-org-list-result.d.ts +15 -0
- package/lib/model/member-role-scope.d.ts +22 -0
- package/lib/model/member-role.d.ts +24 -0
- package/lib/model/member.d.ts +29 -0
- package/lib/model/models.d.ts +34 -0
- package/lib/model/organization-join-request.d.ts +17 -0
- package/lib/model/organization-membership.d.ts +17 -0
- package/lib/model/organization-search-result.d.ts +19 -0
- package/lib/model/organization-switch-request.d.ts +17 -0
- package/lib/model/organization.d.ts +37 -0
- package/lib/model/resource-scope-id.d.ts +18 -0
- package/lib/model/role-available-list-result.d.ts +15 -0
- package/lib/model/role-id.d.ts +21 -0
- package/lib/model/role.d.ts +27 -0
- package/lib/variables.d.ts +8 -0
- package/package.json +36 -0
- package/public-api.d.ts +1 -0
- package/src/lib/README.md +203 -0
- package/vality-swag-organizations.d.ts +5 -0
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# SwagOrganizations
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.0.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project swag-organizations` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project swag-organizations`.
|
|
8
|
+
> Note: Don't forget to add `--project swag-organizations` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build swag-organizations` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build swag-organizations`, go to the dist folder `cd dist/swag-organizations` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test swag-organizations` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './invitations.service';
|
|
2
|
+
import { InvitationsService } from './invitations.service';
|
|
3
|
+
export * from './members.service';
|
|
4
|
+
import { MembersService } from './members.service';
|
|
5
|
+
export * from './orgs.service';
|
|
6
|
+
import { OrgsService } from './orgs.service';
|
|
7
|
+
export * from './roles.service';
|
|
8
|
+
import { RolesService } from './roles.service';
|
|
9
|
+
export const APIS = [InvitationsService, MembersService, OrgsService, RolesService];
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsaXR5L3N3YWctb3JnYW5pemF0aW9ucy9zcmMvbGliL2FwaS9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pbnZpdGF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEludml0YXRpb25zU2VydmljZSB9IGZyb20gJy4vaW52aXRhdGlvbnMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL21lbWJlcnMuc2VydmljZSc7XG5pbXBvcnQgeyBNZW1iZXJzU2VydmljZSB9IGZyb20gJy4vbWVtYmVycy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vb3Jncy5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ3NTZXJ2aWNlIH0gZnJvbSAnLi9vcmdzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9yb2xlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFJvbGVzU2VydmljZSB9IGZyb20gJy4vcm9sZXMuc2VydmljZSc7XG5leHBvcnQgY29uc3QgQVBJUyA9IFtJbnZpdGF0aW9uc1NlcnZpY2UsIE1lbWJlcnNTZXJ2aWNlLCBPcmdzU2VydmljZSwgUm9sZXNTZXJ2aWNlXTtcbiJdfQ==
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RBKmoney Organizations API
|
|
3
|
+
* RBKmoney Organizations API является интерфейсом для управления различными аспектами вашей организации. Все изменения состояния организации, будь то приглашение новых сотрудников, добавление ролей уже существующим сотрудникам или настройка области их ответственности осуществляются с помощью вызовов соответствующих методов API. Любые сторонние приложения, включая ваш личный кабинет, являются внешними приложениями-клиентами. Мы предоставляем REST API поверх HTTP-протокола, схема которого описывается в соответствии со стандартом [OpenAPI 3][OAS3]. Коды возврата описываются соответствующими HTTP-статусами. Платформа принимает и возвращает значения JSON в теле запросов и ответов. [OAS3]: https://swagger.io/specification/ ## Формат содержимого Любой запрос к API должен выполняться в кодировке UTF-8 и с указанием содержимого в формате JSON. ``` Content-Type: application/json; charset=utf-8 ``` ## Запросы Любой вызов методов API обязан предваряться предоставлением уникального для клиента платформы идентификатора запроса. Данный ID передается в соответствующем заголовке каждого HTTP-запроса: ``` X-Request-ID: RQID-Z08G3EFE5DZ429VVO755BM19D51 ``` Мы требуем его, чтобы иметь возможность отследить жизненный цикл любого отдельного запроса в системе, когда того требуют задачи аудита или обращения в техническую поддержку. ### Идемпотентность При совершении некоторых запросов вы можете указать _ключ идемпотентности_ – уникальный набор символов для обеспечения идемпотентной обработки запросов. ``` X-Idempotency-Key: 881D:08BA ``` Даже если платформа получит множество запросов на совершение определённой операции с одним и тем же значением ключа идемпотентности, эта операция будет выполнена _не более чем один_ раз. Таким образом, в случае кратковременных проблем с сетевой доступностью вы можете отправлять запросы повторно и быть уверенными в том, что, например, приглашение новому сотруднику в итоге будет отправлено только один раз.
|
|
4
|
+
*
|
|
5
|
+
* The version of the OpenAPI document: 1.0.0
|
|
6
|
+
* Contact: support@rbk.money
|
|
7
|
+
*
|
|
8
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
9
|
+
* https://openapi-generator.tech
|
|
10
|
+
* Do not edit the class manually.
|
|
11
|
+
*/
|
|
12
|
+
/* tslint:disable:no-unused-variable member-ordering */
|
|
13
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
14
|
+
import { HttpHeaders, HttpParams, HttpContext } from '@angular/common/http';
|
|
15
|
+
import { CustomHttpParameterCodec } from '../encoder';
|
|
16
|
+
// @ts-ignore
|
|
17
|
+
import { BASE_PATH } from '../variables';
|
|
18
|
+
import { Configuration } from '../configuration';
|
|
19
|
+
import * as i0 from "@angular/core";
|
|
20
|
+
import * as i1 from "@angular/common/http";
|
|
21
|
+
import * as i2 from "../configuration";
|
|
22
|
+
export class InvitationsService {
|
|
23
|
+
constructor(httpClient, basePath, configuration) {
|
|
24
|
+
this.httpClient = httpClient;
|
|
25
|
+
this.basePath = 'https://api.rbk.money/org/v1';
|
|
26
|
+
this.defaultHeaders = new HttpHeaders();
|
|
27
|
+
this.configuration = new Configuration();
|
|
28
|
+
if (configuration) {
|
|
29
|
+
this.configuration = configuration;
|
|
30
|
+
}
|
|
31
|
+
if (typeof this.configuration.basePath !== 'string') {
|
|
32
|
+
if (typeof basePath !== 'string') {
|
|
33
|
+
basePath = this.basePath;
|
|
34
|
+
}
|
|
35
|
+
this.configuration.basePath = basePath;
|
|
36
|
+
}
|
|
37
|
+
this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
|
|
38
|
+
}
|
|
39
|
+
addToHttpParams(httpParams, value, key) {
|
|
40
|
+
if (typeof value === "object" && value instanceof Date === false) {
|
|
41
|
+
httpParams = this.addToHttpParamsRecursive(httpParams, value);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
|
|
45
|
+
}
|
|
46
|
+
return httpParams;
|
|
47
|
+
}
|
|
48
|
+
addToHttpParamsRecursive(httpParams, value, key) {
|
|
49
|
+
if (value == null) {
|
|
50
|
+
return httpParams;
|
|
51
|
+
}
|
|
52
|
+
if (typeof value === "object") {
|
|
53
|
+
if (Array.isArray(value)) {
|
|
54
|
+
value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
|
|
55
|
+
}
|
|
56
|
+
else if (value instanceof Date) {
|
|
57
|
+
if (key != null) {
|
|
58
|
+
httpParams = httpParams.append(key, value.toISOString().substr(0, 10));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
throw Error("key may not be null if value is Date");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else if (key != null) {
|
|
69
|
+
httpParams = httpParams.append(key, value);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
throw Error("key may not be null if value is not object or array");
|
|
73
|
+
}
|
|
74
|
+
return httpParams;
|
|
75
|
+
}
|
|
76
|
+
createInvitation(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
77
|
+
const xRequestID = requestParameters.xRequestID;
|
|
78
|
+
if (xRequestID === null || xRequestID === undefined) {
|
|
79
|
+
throw new Error('Required parameter xRequestID was null or undefined when calling createInvitation.');
|
|
80
|
+
}
|
|
81
|
+
const orgId = requestParameters.orgId;
|
|
82
|
+
if (orgId === null || orgId === undefined) {
|
|
83
|
+
throw new Error('Required parameter orgId was null or undefined when calling createInvitation.');
|
|
84
|
+
}
|
|
85
|
+
const invitationRequest = requestParameters.invitationRequest;
|
|
86
|
+
if (invitationRequest === null || invitationRequest === undefined) {
|
|
87
|
+
throw new Error('Required parameter invitationRequest was null or undefined when calling createInvitation.');
|
|
88
|
+
}
|
|
89
|
+
const xIdempotencyKey = requestParameters.xIdempotencyKey;
|
|
90
|
+
let localVarHeaders = this.defaultHeaders;
|
|
91
|
+
if (xRequestID !== undefined && xRequestID !== null) {
|
|
92
|
+
localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
|
|
93
|
+
}
|
|
94
|
+
if (xIdempotencyKey !== undefined && xIdempotencyKey !== null) {
|
|
95
|
+
localVarHeaders = localVarHeaders.set('X-Idempotency-Key', String(xIdempotencyKey));
|
|
96
|
+
}
|
|
97
|
+
let localVarCredential;
|
|
98
|
+
// authentication (bearer) required
|
|
99
|
+
localVarCredential = this.configuration.lookupCredential('bearer');
|
|
100
|
+
if (localVarCredential) {
|
|
101
|
+
localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
|
|
102
|
+
}
|
|
103
|
+
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
104
|
+
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
105
|
+
// to determine the Accept header
|
|
106
|
+
const httpHeaderAccepts = [
|
|
107
|
+
'application/json'
|
|
108
|
+
];
|
|
109
|
+
localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
110
|
+
}
|
|
111
|
+
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
112
|
+
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
113
|
+
}
|
|
114
|
+
let localVarHttpContext = options && options.context;
|
|
115
|
+
if (localVarHttpContext === undefined) {
|
|
116
|
+
localVarHttpContext = new HttpContext();
|
|
117
|
+
}
|
|
118
|
+
// to determine the Content-Type header
|
|
119
|
+
const consumes = [
|
|
120
|
+
'application/json'
|
|
121
|
+
];
|
|
122
|
+
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
123
|
+
if (httpContentTypeSelected !== undefined) {
|
|
124
|
+
localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
|
|
125
|
+
}
|
|
126
|
+
let responseType_ = 'json';
|
|
127
|
+
if (localVarHttpHeaderAcceptSelected) {
|
|
128
|
+
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
129
|
+
responseType_ = 'text';
|
|
130
|
+
}
|
|
131
|
+
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
132
|
+
responseType_ = 'json';
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
responseType_ = 'blob';
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return this.httpClient.post(`${this.configuration.basePath}/orgs/${encodeURIComponent(String(orgId))}/invitations`, invitationRequest, {
|
|
139
|
+
context: localVarHttpContext,
|
|
140
|
+
responseType: responseType_,
|
|
141
|
+
withCredentials: this.configuration.withCredentials,
|
|
142
|
+
headers: localVarHeaders,
|
|
143
|
+
observe: observe,
|
|
144
|
+
reportProgress: reportProgress
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
getInvitation(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
148
|
+
const xRequestID = requestParameters.xRequestID;
|
|
149
|
+
if (xRequestID === null || xRequestID === undefined) {
|
|
150
|
+
throw new Error('Required parameter xRequestID was null or undefined when calling getInvitation.');
|
|
151
|
+
}
|
|
152
|
+
const orgId = requestParameters.orgId;
|
|
153
|
+
if (orgId === null || orgId === undefined) {
|
|
154
|
+
throw new Error('Required parameter orgId was null or undefined when calling getInvitation.');
|
|
155
|
+
}
|
|
156
|
+
const invitationId = requestParameters.invitationId;
|
|
157
|
+
if (invitationId === null || invitationId === undefined) {
|
|
158
|
+
throw new Error('Required parameter invitationId was null or undefined when calling getInvitation.');
|
|
159
|
+
}
|
|
160
|
+
let localVarHeaders = this.defaultHeaders;
|
|
161
|
+
if (xRequestID !== undefined && xRequestID !== null) {
|
|
162
|
+
localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
|
|
163
|
+
}
|
|
164
|
+
let localVarCredential;
|
|
165
|
+
// authentication (bearer) required
|
|
166
|
+
localVarCredential = this.configuration.lookupCredential('bearer');
|
|
167
|
+
if (localVarCredential) {
|
|
168
|
+
localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
|
|
169
|
+
}
|
|
170
|
+
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
171
|
+
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
172
|
+
// to determine the Accept header
|
|
173
|
+
const httpHeaderAccepts = [
|
|
174
|
+
'application/json'
|
|
175
|
+
];
|
|
176
|
+
localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
177
|
+
}
|
|
178
|
+
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
179
|
+
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
180
|
+
}
|
|
181
|
+
let localVarHttpContext = options && options.context;
|
|
182
|
+
if (localVarHttpContext === undefined) {
|
|
183
|
+
localVarHttpContext = new HttpContext();
|
|
184
|
+
}
|
|
185
|
+
let responseType_ = 'json';
|
|
186
|
+
if (localVarHttpHeaderAcceptSelected) {
|
|
187
|
+
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
188
|
+
responseType_ = 'text';
|
|
189
|
+
}
|
|
190
|
+
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
191
|
+
responseType_ = 'json';
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
responseType_ = 'blob';
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return this.httpClient.get(`${this.configuration.basePath}/orgs/${encodeURIComponent(String(orgId))}/invitations/${encodeURIComponent(String(invitationId))}`, {
|
|
198
|
+
context: localVarHttpContext,
|
|
199
|
+
responseType: responseType_,
|
|
200
|
+
withCredentials: this.configuration.withCredentials,
|
|
201
|
+
headers: localVarHeaders,
|
|
202
|
+
observe: observe,
|
|
203
|
+
reportProgress: reportProgress
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
listInvitations(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
207
|
+
const xRequestID = requestParameters.xRequestID;
|
|
208
|
+
if (xRequestID === null || xRequestID === undefined) {
|
|
209
|
+
throw new Error('Required parameter xRequestID was null or undefined when calling listInvitations.');
|
|
210
|
+
}
|
|
211
|
+
const orgId = requestParameters.orgId;
|
|
212
|
+
if (orgId === null || orgId === undefined) {
|
|
213
|
+
throw new Error('Required parameter orgId was null or undefined when calling listInvitations.');
|
|
214
|
+
}
|
|
215
|
+
const status = requestParameters.status;
|
|
216
|
+
let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
|
|
217
|
+
if (status !== undefined && status !== null) {
|
|
218
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, status, 'status');
|
|
219
|
+
}
|
|
220
|
+
let localVarHeaders = this.defaultHeaders;
|
|
221
|
+
if (xRequestID !== undefined && xRequestID !== null) {
|
|
222
|
+
localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
|
|
223
|
+
}
|
|
224
|
+
let localVarCredential;
|
|
225
|
+
// authentication (bearer) required
|
|
226
|
+
localVarCredential = this.configuration.lookupCredential('bearer');
|
|
227
|
+
if (localVarCredential) {
|
|
228
|
+
localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
|
|
229
|
+
}
|
|
230
|
+
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
231
|
+
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
232
|
+
// to determine the Accept header
|
|
233
|
+
const httpHeaderAccepts = [
|
|
234
|
+
'application/json'
|
|
235
|
+
];
|
|
236
|
+
localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
237
|
+
}
|
|
238
|
+
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
239
|
+
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
240
|
+
}
|
|
241
|
+
let localVarHttpContext = options && options.context;
|
|
242
|
+
if (localVarHttpContext === undefined) {
|
|
243
|
+
localVarHttpContext = new HttpContext();
|
|
244
|
+
}
|
|
245
|
+
let responseType_ = 'json';
|
|
246
|
+
if (localVarHttpHeaderAcceptSelected) {
|
|
247
|
+
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
248
|
+
responseType_ = 'text';
|
|
249
|
+
}
|
|
250
|
+
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
251
|
+
responseType_ = 'json';
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
responseType_ = 'blob';
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return this.httpClient.get(`${this.configuration.basePath}/orgs/${encodeURIComponent(String(orgId))}/invitations`, {
|
|
258
|
+
context: localVarHttpContext,
|
|
259
|
+
params: localVarQueryParameters,
|
|
260
|
+
responseType: responseType_,
|
|
261
|
+
withCredentials: this.configuration.withCredentials,
|
|
262
|
+
headers: localVarHeaders,
|
|
263
|
+
observe: observe,
|
|
264
|
+
reportProgress: reportProgress
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
revokeInvitation(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
268
|
+
const xRequestID = requestParameters.xRequestID;
|
|
269
|
+
if (xRequestID === null || xRequestID === undefined) {
|
|
270
|
+
throw new Error('Required parameter xRequestID was null or undefined when calling revokeInvitation.');
|
|
271
|
+
}
|
|
272
|
+
const orgId = requestParameters.orgId;
|
|
273
|
+
if (orgId === null || orgId === undefined) {
|
|
274
|
+
throw new Error('Required parameter orgId was null or undefined when calling revokeInvitation.');
|
|
275
|
+
}
|
|
276
|
+
const invitationId = requestParameters.invitationId;
|
|
277
|
+
if (invitationId === null || invitationId === undefined) {
|
|
278
|
+
throw new Error('Required parameter invitationId was null or undefined when calling revokeInvitation.');
|
|
279
|
+
}
|
|
280
|
+
const inlineObject1 = requestParameters.inlineObject1;
|
|
281
|
+
let localVarHeaders = this.defaultHeaders;
|
|
282
|
+
if (xRequestID !== undefined && xRequestID !== null) {
|
|
283
|
+
localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
|
|
284
|
+
}
|
|
285
|
+
let localVarCredential;
|
|
286
|
+
// authentication (bearer) required
|
|
287
|
+
localVarCredential = this.configuration.lookupCredential('bearer');
|
|
288
|
+
if (localVarCredential) {
|
|
289
|
+
localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
|
|
290
|
+
}
|
|
291
|
+
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
292
|
+
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
293
|
+
// to determine the Accept header
|
|
294
|
+
const httpHeaderAccepts = [
|
|
295
|
+
'application/json'
|
|
296
|
+
];
|
|
297
|
+
localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
298
|
+
}
|
|
299
|
+
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
300
|
+
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
301
|
+
}
|
|
302
|
+
let localVarHttpContext = options && options.context;
|
|
303
|
+
if (localVarHttpContext === undefined) {
|
|
304
|
+
localVarHttpContext = new HttpContext();
|
|
305
|
+
}
|
|
306
|
+
// to determine the Content-Type header
|
|
307
|
+
const consumes = [
|
|
308
|
+
'application/json'
|
|
309
|
+
];
|
|
310
|
+
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
311
|
+
if (httpContentTypeSelected !== undefined) {
|
|
312
|
+
localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
|
|
313
|
+
}
|
|
314
|
+
let responseType_ = 'json';
|
|
315
|
+
if (localVarHttpHeaderAcceptSelected) {
|
|
316
|
+
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
317
|
+
responseType_ = 'text';
|
|
318
|
+
}
|
|
319
|
+
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
320
|
+
responseType_ = 'json';
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
responseType_ = 'blob';
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return this.httpClient.patch(`${this.configuration.basePath}/orgs/${encodeURIComponent(String(orgId))}/invitations/${encodeURIComponent(String(invitationId))}`, inlineObject1, {
|
|
327
|
+
context: localVarHttpContext,
|
|
328
|
+
responseType: responseType_,
|
|
329
|
+
withCredentials: this.configuration.withCredentials,
|
|
330
|
+
headers: localVarHeaders,
|
|
331
|
+
observe: observe,
|
|
332
|
+
reportProgress: reportProgress
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
InvitationsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: InvitationsService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
337
|
+
InvitationsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: InvitationsService, providedIn: 'root' });
|
|
338
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: InvitationsService, decorators: [{
|
|
339
|
+
type: Injectable,
|
|
340
|
+
args: [{
|
|
341
|
+
providedIn: 'root'
|
|
342
|
+
}]
|
|
343
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
344
|
+
type: Optional
|
|
345
|
+
}, {
|
|
346
|
+
type: Inject,
|
|
347
|
+
args: [BASE_PATH]
|
|
348
|
+
}] }, { type: i2.Configuration, decorators: [{
|
|
349
|
+
type: Optional
|
|
350
|
+
}] }]; } });
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52aXRhdGlvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbGl0eS9zd2FnLW9yZ2FuaXphdGlvbnMvc3JjL2xpYi9hcGkvaW52aXRhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUEyQixlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQ1UsV0FBVyxFQUN4RCxNQUFZLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUErQixZQUFZLENBQUM7QUFvQi9FLGFBQWE7QUFDYixPQUFPLEVBQUUsU0FBUyxFQUFzQixNQUEwQixjQUFjLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUEwQyxrQkFBa0IsQ0FBQzs7OztBQThDckYsTUFBTSxPQUFPLGtCQUFrQjtJQU8zQixZQUFzQixVQUFzQixFQUFnQyxRQUFnQixFQUFjLGFBQTRCO1FBQWhILGVBQVUsR0FBVixVQUFVLENBQVk7UUFMbEMsYUFBUSxHQUFHLDhCQUE4QixDQUFDO1FBQzdDLG1CQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNuQyxrQkFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFJdkMsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztTQUN0QztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDakQsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7Z0JBQzlCLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FB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MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUWtELFFBQVE7OzBCQUFHLE1BQU07MkJBQUMsU0FBUzs7MEJBQXFCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJCS21vbmV5IE9yZ2FuaXphdGlvbnMgQVBJXG4gKiBSQkttb25leSBPcmdhbml6YXRpb25zIEFQSSDRj9Cy0LvRj9C10YLRgdGPINC40L3RgtC10YDRhNC10LnRgdC+0Lwg0LTQu9GPINGD0L/RgNCw0LLQu9C10L3QuNGPINGA0LDQt9C70LjRh9C90YvQvNC4INCw0YHQv9C10LrRgtCw0LzQuCDQstCw0YjQtdC5INC+0YDQs9Cw0L3QuNC30LDRhtC40LguINCS0YHQtSDQuNC30LzQtdC90LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC+0YDQs9Cw0L3QuNC30LDRhtC40LgsINCx0YPQtNGMINGC0L4g0L/RgNC40LPQu9Cw0YjQtdC90LjQtSDQvdC+0LLRi9GFINGB0L7RgtGA0YPQtNC90LjQutC+0LIsINC00L7QsdCw0LLQu9C10L3QuNC1INGA0L7Qu9C10Lkg0YPQttC1INGB0YPRidC10YHRgtCy0YPRjtGJ0LjQvCDRgdC+0YLRgNGD0LTQvdC40LrQsNC8INC40LvQuCDQvdCw0YHRgtGA0L7QudC60LAg0L7QsdC70LDRgdGC0Lgg0LjRhSDQvtGC0LLQtdGC0YHRgtCy0LXQvdC90L7RgdGC0Lgg0L7RgdGD0YnQtdGB0YLQstC70Y/RjtGC0YHRjyDRgSDQv9C+0LzQvtGJ0YzRjiDQstGL0LfQvtCy0L7QsiDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40YUg0LzQtdGC0L7QtNC+0LIgQVBJLiDQm9GO0LHRi9C1INGB0YLQvtGA0L7QvdC90LjQtSDQv9GA0LjQu9C+0LbQtdC90LjRjywg0LLQutC70Y7Rh9Cw0Y8g0LLQsNGIINC70LjRh9C90YvQuSDQutCw0LHQuNC90LXRgiwg0Y/QstC70Y/RjtGC0YHRjyDQstC90LXRiNC90LjQvNC4INC/0YDQuNC70L7QttC10L3QuNGP0LzQuC3QutC70LjQtdC90YLQsNC80LguICDQnNGLINC/0YDQtdC00L7RgdGC0LDQstC70Y/QtdC8IFJFU1QgQVBJINC/0L7QstC10YDRhSBIVFRQLdC/0YDQvtGC0L7QutC+0LvQsCwg0YHRhdC10LzQsCDQutC+0YLQvtGA0L7Qs9C+INC+0L/QuNGB0YvQstCw0LXRgtGB0Y8g0LIg0YHQvtC+0YLQstC10YLRgdGC0LLQuNC4INGB0L4g0YHRgtCw0L3QtNCw0YDRgtC+0LwgW09wZW5BUEkgM11bT0FTM10uINCa0L7QtNGLINCy0L7Qt9Cy0YDQsNGC0LAg0L7Qv9C40YHRi9Cy0LDRjtGC0YHRjyDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40LzQuCBIVFRQLdGB0YLQsNGC0YPRgdCw0LzQuC4g0J/Qu9Cw0YLRhNC+0YDQvNCwINC/0YDQuNC90LjQvNCw0LXRgiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDQt9C90LDRh9C10L3QuNGPIEpTT04g0LIg0YLQtdC70LUg0LfQsNC/0YDQvtGB0L7QsiDQuCDQvtGC0LLQtdGC0L7Qsi4gIFtPQVMzXTogaHR0cHM6Ly9zd2FnZ2VyLmlvL3NwZWNpZmljYXRpb24vICAjIyDQpNC+0YDQvNCw0YIg0YHQvtC00LXRgNC20LjQvNC+0LPQviAg0JvRjtCx0L7QuSDQt9Cw0L/RgNC+0YEg0LogQVBJINC00L7Qu9C20LXQvSDQstGL0L/QvtC70L3Rj9GC0YzRgdGPINCyINC60L7QtNC40YDQvtCy0LrQtSBVVEYtOCDQuCDRgSDRg9C60LDQt9Cw0L3QuNC10Lwg0YHQvtC00LXRgNC20LjQvNC+0LPQviDQsiDRhNC+0YDQvNCw0YLQtSBKU09OLiAgYGBgIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCBgYGAgICMjINCX0LDQv9GA0L7RgdGLICDQm9GO0LHQvtC5INCy0YvQt9C+0LIg0LzQtdGC0L7QtNC+0LIgQVBJINC+0LHRj9C30LDQvSDQv9GA0LXQtNCy0LDRgNGP0YLRjNGB0Y8g0L/RgNC10LTQvtGB0YLQsNCy0LvQtdC90LjQtdC8INGD0L3QuNC60LDQu9GM0L3QvtCz0L4g0LTQu9GPINC60LvQuNC10L3RgtCwINC/0LvQsNGC0YTQvtGA0LzRiyDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNCwINC30LDQv9GA0L7RgdCwLiDQlNCw0L3QvdGL0LkgSUQg0L/QtdGA0LXQtNCw0LXRgtGB0Y8g0LIg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQtdC8INC30LDQs9C+0LvQvtCy0LrQtSDQutCw0LbQtNC+0LPQviBIVFRQLdC30LDQv9GA0L7RgdCwOiAgYGBgICAgICBYLVJlcXVlc3QtSUQ6IFJRSUQtWjA4RzNFRkU1RFo0MjlWVk83NTVCTTE5RDUxIGBgYCAg0JzRiyDRgtGA0LXQsdGD0LXQvCDQtdCz0L4sINGH0YLQvtCx0Ysg0LjQvNC10YLRjCDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINC+0YLRgdC70LXQtNC40YLRjCDQttC40LfQvdC10L3QvdGL0Lkg0YbQuNC60Lsg0LvRjtCx0L7Qs9C+INC+0YLQtNC10LvRjNC90L7Qs9C+INC30LDQv9GA0L7RgdCwINCyINGB0LjRgdGC0LXQvNC1LCDQutC+0LPQtNCwINGC0L7Qs9C+INGC0YDQtdCx0YPRjtGCINC30LDQtNCw0YfQuCDQsNGD0LTQuNGC0LAg0LjQu9C4INC+0LHRgNCw0YnQtdC90LjRjyDQsiDRgtC10YXQvdC40YfQtdGB0LrRg9GOINC/0L7QtNC00LXRgNC20LrRgy4gICMjIyDQmNC00LXQvNC/0L7RgtC10L3RgtC90L7RgdGC0YwgINCf0YDQuCDRgdC+0LLQtdGA0YjQtdC90LjQuCDQvdC10LrQvtGC0L7RgNGL0YUg0LfQsNC/0YDQvtGB0L7QsiDQstGLINC80L7QttC10YLQtSDRg9C60LDQt9Cw0YLRjCBf0LrQu9GO0Ycg0LjQtNC10LzQv9C+0YLQtdC90YLQvdC+0YHRgtC4XyDigJMg0YPQvdC40LrQsNC70YzQvdGL0Lkg0L3QsNCx0L7RgCDRgdC40LzQstC+0LvQvtCyINC00LvRjyDQvtCx0LXRgdC/0LXRh9C10L3QuNGPINC40LTQtdC80L/QvtGC0LXQvdGC0L3QvtC5INC+0LHRgNCw0LHQvtGC0LrQuCDQt9Cw0L/RgNC+0YHQvtCyLiAgYGBgICAgICBYLUlkZW1wb3RlbmN5LUtleTogODgxRDowOEJBIGBgYCAg0JTQsNC20LUg0LXRgdC70Lgg0L/Qu9Cw0YLRhNC+0YDQvNCwINC/0L7Qu9GD0YfQuNGCINC80L3QvtC20LXRgdGC0LLQviDQt9Cw0L/RgNC+0YHQvtCyINC90LAg0YHQvtCy0LXRgNGI0LXQvdC40LUg0L7Qv9GA0LXQtNC10LvRkdC90L3QvtC5INC+0L/QtdGA0LDRhtC40Lgg0YEg0L7QtNC90LjQvCDQuCDRgtC10Lwg0LbQtSDQt9C90LDRh9C10L3QuNC10Lwg0LrQu9GO0YfQsCDQuNC00LXQvNC/0L7RgtC10L3RgtC90L7RgdGC0LgsINGN0YLQsCDQvtC/0LXRgNCw0YbQuNGPINCx0YPQtNC10YIg0LLRi9C/0L7Qu9C90LXQvdCwIF/QvdC1INCx0L7Qu9C10LUg0YfQtdC8INC+0LTQuNC9XyDRgNCw0LcuINCi0LDQutC40Lwg0L7QsdGA0LDQt9C+0LwsINCyINGB0LvRg9GH0LDQtSDQutGA0LDRgtC60L7QstGA0LXQvNC10L3QvdGL0YUg0L/RgNC+0LHQu9C10Lwg0YEg0YHQtdGC0LXQstC+0Lkg0LTQvtGB0YLRg9C/0L3QvtGB0YLRjNGOINCy0Ysg0LzQvtC20LXRgtC1INC+0YLQv9GA0LDQstC70Y/RgtGMINC30LDQv9GA0L7RgdGLINC/0L7QstGC0L7RgNC90L4g0Lgg0LHRi9GC0Ywg0YPQstC10YDQtdC90L3Ri9C80Lgg0LIg0YLQvtC8LCDRh9GC0L4sINC90LDQv9GA0LjQvNC10YAsINC/0YDQuNCz0LvQsNGI0LXQvdC40LUg0L3QvtCy0L7QvNGDINGB0L7RgtGA0YPQtNC90LjQutGDINCyINC40YLQvtCz0LUg0LHRg9C00LXRgiDQvtGC0L/RgNCw0LLQu9C10L3QviDRgtC+0LvRjNC60L4g0L7QtNC40L0g0YDQsNC3LiBcbiAqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4wLjBcbiAqIENvbnRhY3Q6IHN1cHBvcnRAcmJrLm1vbmV5XG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtdmFyaWFibGUgbWVtYmVyLW9yZGVyaW5nICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSAgICAgICAgICAgICAgICAgICAgICBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLFxuICAgICAgICAgSHR0cFJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBQYXJhbWV0ZXJDb2RlYywgSHR0cENvbnRleHQgXG4gICAgICAgIH0gICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjIH0gICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2VuY29kZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBJbmxpbmVPYmplY3QxIH0gZnJvbSAnLi4vbW9kZWwvaW5saW5lLW9iamVjdDEnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgSW5saW5lUmVzcG9uc2U0MDAgfSBmcm9tICcuLi9tb2RlbC9pbmxpbmUtcmVzcG9uc2U0MDAnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgSW5saW5lUmVzcG9uc2U0MjIxIH0gZnJvbSAnLi4vbW9kZWwvaW5saW5lLXJlc3BvbnNlNDIyMSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBJbmxpbmVSZXNwb25zZTQyMjMgfSBmcm9tICcuLi9tb2RlbC9pbmxpbmUtcmVzcG9uc2U0MjIzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEludml0YXRpb24gfSBmcm9tICcuLi9tb2RlbC9pbnZpdGF0aW9uJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEludml0YXRpb25MaXN0UmVzdWx0IH0gZnJvbSAnLi4vbW9kZWwvaW52aXRhdGlvbi1saXN0LXJlc3VsdCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBJbnZpdGF0aW9uUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2ludml0YXRpb24tcmVxdWVzdCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBJbnZpdGF0aW9uU3RhdHVzTmFtZSB9IGZyb20gJy4uL21vZGVsL2ludml0YXRpb24tc3RhdHVzLW5hbWUnO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vdmFyaWFibGVzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUludml0YXRpb25SZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiog0KPQvdC40LrQsNC70YzQvdGL0Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LfQsNC/0YDQvtGB0LAg0Log0YHQuNGB0YLQtdC80LUgKi9cbiAgICB4UmVxdWVzdElEOiBzdHJpbmc7XG4gICAgLyoqINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC+0YDQs9Cw0L3QuNC30LDRhtC40LggKi9cbiAgICBvcmdJZDogc3RyaW5nO1xuICAgIC8qKiDQlNCw0L3QvdGL0LUg0L3QvtCy0L7Qs9C+INC/0YDQuNCz0LvQsNGI0LXQvdC40Y8gKi9cbiAgICBpbnZpdGF0aW9uUmVxdWVzdDogSW52aXRhdGlvblJlcXVlc3Q7XG4gICAgLyoqINCj0L3QuNC60LDQu9GM0L3Ri9C5INC60LvRjtGHINC00LvRjyDQvtCx0LXRgdC/0LXRh9C10L3QuNGPINC10LTQuNC90L7RgNCw0LfQvtCy0L7QuSAo0LjQtNC10LzQv9C+0YLQtdC90YLQvdC+0LkpINC+0LHRgNCw0LHQvtGC0LrQuCDQvtC/0LXRgNCw0YbQuNC4LiAgKi9cbiAgICB4SWRlbXBvdGVuY3lLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0SW52aXRhdGlvblJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiDQo9C90LjQutCw0LvRjNC90YvQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQt9Cw0L/RgNC+0YHQsCDQuiDRgdC40YHRgtC10LzQtSAqL1xuICAgIHhSZXF1ZXN0SUQ6IHN0cmluZztcbiAgICAvKiog0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L7RgNCz0LDQvdC40LfQsNGG0LjQuCAqL1xuICAgIG9yZ0lkOiBzdHJpbmc7XG4gICAgLyoqINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC/0YDQuNCz0LvQsNGI0LXQvdC40Y8gKi9cbiAgICBpbnZpdGF0aW9uSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0SW52aXRhdGlvbnNSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiog0KPQvdC40LrQsNC70YzQvdGL0Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LfQsNC/0YDQvtGB0LAg0Log0YHQuNGB0YLQtdC80LUgKi9cbiAgICB4UmVxdWVzdElEOiBzdHJpbmc7XG4gICAgLyoqINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC+0YDQs9Cw0L3QuNC30LDRhtC40LggKi9cbiAgICBvcmdJZDogc3RyaW5nO1xuICAgIC8qKiDQpNC40LvRjNGC0YAg0L/QviDRgdGC0LDRgtGD0YHRgyDQv9GA0LjQs9C70LDRiNC10L3QuNGPICovXG4gICAgc3RhdHVzPzogSW52aXRhdGlvblN0YXR1c05hbWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV2b2tlSW52aXRhdGlvblJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiDQo9C90LjQutCw0LvRjNC90YvQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQt9Cw0L/RgNC+0YHQsCDQuiDRgdC40YHRgtC10LzQtSAqL1xuICAgIHhSZXF1ZXN0SUQ6IHN0cmluZztcbiAgICAvKiog0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L7RgNCz0LDQvdC40LfQsNGG0LjQuCAqL1xuICAgIG9yZ0lkOiBzdHJpbmc7XG4gICAgLyoqINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC/0YDQuNCz0LvQsNGI0LXQvdC40Y8gKi9cbiAgICBpbnZpdGF0aW9uSWQ6IHN0cmluZztcbiAgICBpbmxpbmVPYmplY3QxPzogSW5saW5lT2JqZWN0MTtcbn1cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBJbnZpdGF0aW9uc1NlcnZpY2Uge1xuXG4gICAgcHJvdGVjdGVkIGJhc2VQYXRoID0gJ2h0dHBzOi8vYXBpLnJiay5tb25leS9vcmcvdjEnO1xuICAgIHB1YmxpYyBkZWZhdWx0SGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIHB1YmxpYyBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgICBwdWJsaWMgZW5jb2RlcjogSHR0cFBhcmFtZXRlckNvZGVjO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpQEluamVjdChCQVNFX1BBVEgpIGJhc2VQYXRoOiBzdHJpbmcsIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGJhc2VQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5jb2RlciA9IHRoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVyIHx8IG5ldyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMoKTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlOiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU/OiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55W10pLmZvckVhY2goIGVsZW0gPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIGVsZW0sIGtleSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgKHZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsIDEwKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgRGF0ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKCBrID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcywgdmFsdWVba10sIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIG5vdCBvYmplY3Qgb3IgYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHRhNC+0YDQvNC40YDQvtCy0LDRgtGMINC/0YDQuNCz0LvQsNGI0LXQvdC40LVcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlSW52aXRhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogQ3JlYXRlSW52aXRhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxJbnZpdGF0aW9uPjtcbiAgICBwdWJsaWMgY3JlYXRlSW52aXRhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogQ3JlYXRlSW52aXRhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEludml0YXRpb24+PjtcbiAgICBwdWJsaWMgY3JlYXRlSW52aXRhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogQ3JlYXRlSW52aXRhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxJbnZpdGF0aW9uPj47XG4gICAgcHVibGljIGNyZWF0ZUludml0YXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IENyZWF0ZUludml0YXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0SUQgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdElEO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCA9PT0gbnVsbCB8fCB4UmVxdWVzdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHhSZXF1ZXN0SUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVJbnZpdGF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ0lkID0gcmVxdWVzdFBhcmFtZXRlcnMub3JnSWQ7XG4gICAgICAgIGlmIChvcmdJZCA9PT0gbnVsbCB8fCBvcmdJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBvcmdJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNyZWF0ZUludml0YXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW52aXRhdGlvblJlcXVlc3QgPSByZXF1ZXN0UGFyYW1ldGVycy5pbnZpdGF0aW9uUmVxdWVzdDtcbiAgICAgICAgaWYgKGludml0YXRpb25SZXF1ZXN0ID09PSBudWxsIHx8IGludml0YXRpb25SZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGludml0YXRpb25SZXF1ZXN0IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgY3JlYXRlSW52aXRhdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4SWRlbXBvdGVuY3lLZXkgPSByZXF1ZXN0UGFyYW1ldGVycy54SWRlbXBvdGVuY3lLZXk7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIGlmICh4UmVxdWVzdElEICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3RJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LUlEJywgU3RyaW5nKHhSZXF1ZXN0SUQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeElkZW1wb3RlbmN5S2V5ICE9PSB1bmRlZmluZWQgJiYgeElkZW1wb3RlbmN5S2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLUlkZW1wb3RlbmN5LUtleScsIFN0cmluZyh4SWRlbXBvdGVuY3lLZXkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKGJlYXJlcikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ2JlYXJlcicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxJbnZpdGF0aW9uPihgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9L29yZ3MvJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKG9yZ0lkKSl9L2ludml0YXRpb25zYCxcbiAgICAgICAgICAgIGludml0YXRpb25SZXF1ZXN0LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0L7Qu9GD0YfQuNGC0Ywg0LTQsNC90L3Ri9C1INC/0YDQuNCz0LvQsNGI0LXQvdC40Y9cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW52aXRhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogR2V0SW52aXRhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxJbnZpdGF0aW9uPjtcbiAgICBwdWJsaWMgZ2V0SW52aXRhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogR2V0SW52aXRhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEludml0YXRpb24+PjtcbiAgICBwdWJsaWMgZ2V0SW52aXRhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogR2V0SW52aXRhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxJbnZpdGF0aW9uPj47XG4gICAgcHVibGljIGdldEludml0YXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IEdldEludml0YXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0SUQgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdElEO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCA9PT0gbnVsbCB8fCB4UmVxdWVzdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHhSZXF1ZXN0SUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRJbnZpdGF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ0lkID0gcmVxdWVzdFBhcmFtZXRlcnMub3JnSWQ7XG4gICAgICAgIGlmIChvcmdJZCA9PT0gbnVsbCB8fCBvcmdJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBvcmdJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEludml0YXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW52aXRhdGlvbklkID0gcmVxdWVzdFBhcmFtZXRlcnMuaW52aXRhdGlvbklkO1xuICAgICAgICBpZiAoaW52aXRhdGlvbklkID09PSBudWxsIHx8IGludml0YXRpb25JZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBpbnZpdGF0aW9uSWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRJbnZpdGF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIGlmICh4UmVxdWVzdElEICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3RJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LUlEJywgU3RyaW5nKHhSZXF1ZXN0SUQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKGJlYXJlcikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ2JlYXJlcicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8SW52aXRhdGlvbj4oYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofS9vcmdzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhvcmdJZCkpfS9pbnZpdGF0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoaW52aXRhdGlvbklkKSl9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdGH0LjRgdC70LjRgtGMINC/0YDQuNCz0LvQsNGI0LXQvdC40Y9cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdEludml0YXRpb25zKHJlcXVlc3RQYXJhbWV0ZXJzOiBMaXN0SW52aXRhdGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SW52aXRhdGlvbkxpc3RSZXN1bHQ+O1xuICAgIHB1YmxpYyBsaXN0SW52aXRhdGlvbnMocmVxdWVzdFBhcmFtZXRlcnM6IExpc3RJbnZpdGF0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEludml0YXRpb25MaXN0UmVzdWx0Pj47XG4gICAgcHVibGljIGxpc3RJbnZpdGF0aW9ucyhyZXF1ZXN0UGFyYW1ldGVyczogTGlzdEludml0YXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEludml0YXRpb25MaXN0UmVzdWx0Pj47XG4gICAgcHVibGljIGxpc3RJbnZpdGF0aW9ucyhyZXF1ZXN0UGFyYW1ldGVyczogTGlzdEludml0YXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCB4UmVxdWVzdElEID0gcmVxdWVzdFBhcmFtZXRlcnMueFJlcXVlc3RJRDtcbiAgICAgICAgaWYgKHhSZXF1ZXN0SUQgPT09IG51bGwgfHwgeFJlcXVlc3RJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB4UmVxdWVzdElEIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgbGlzdEludml0YXRpb25zLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ0lkID0gcmVxdWVzdFBhcmFtZXRlcnMub3JnSWQ7XG4gICAgICAgIGlmIChvcmdJZCA9PT0gbnVsbCB8fCBvcmdJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBvcmdJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGxpc3RJbnZpdGF0aW9ucy4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXF1ZXN0UGFyYW1ldGVycy5zdGF0dXM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoc3RhdHVzICE9PSB1bmRlZmluZWQgJiYgc3RhdHVzICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+c3RhdHVzLCAnc3RhdHVzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgaWYgKHhSZXF1ZXN0SUQgIT09IHVuZGVmaW5lZCAmJiB4UmVxdWVzdElEICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLVJlcXVlc3QtSUQnLCBTdHJpbmcoeFJlcXVlc3RJRCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoYmVhcmVyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnYmVhcmVyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxJbnZpdGF0aW9uTGlzdFJlc3VsdD4oYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofS9vcmdzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhvcmdJZCkpfS9pbnZpdGF0aW9uc2AsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0L7Qt9Cy0LDRgtGMINC/0YDQuNCz0LvQsNGI0LXQvdC40LVcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmV2b2tlSW52aXRhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmV2b2tlSW52aXRhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHB1YmxpYyByZXZva2VJbnZpdGF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXZva2VJbnZpdGF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj47XG4gICAgcHVibGljIHJldm9rZUludml0YXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJldm9rZUludml0YXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj47XG4gICAgcHVibGljIHJldm9rZUludml0YXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJldm9rZUludml0YXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0SUQgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdElEO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCA9PT0gbnVsbCB8fCB4UmVxdWVzdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHhSZXF1ZXN0SUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZXZva2VJbnZpdGF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ0lkID0gcmVxdWVzdFBhcmFtZXRlcnMub3JnSWQ7XG4gICAgICAgIGlmIChvcmdJZCA9PT0gbnVsbCB8fCBvcmdJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBvcmdJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHJldm9rZUludml0YXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW52aXRhdGlvbklkID0gcmVxdWVzdFBhcmFtZXRlcnMuaW52aXRhdGlvbklkO1xuICAgICAgICBpZiAoaW52aXRhdGlvbklkID09PSBudWxsIHx8IGludml0YXRpb25JZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBpbnZpdGF0aW9uSWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZXZva2VJbnZpdGF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlubGluZU9iamVjdDEgPSByZXF1ZXN0UGFyYW1ldGVycy5pbmxpbmVPYmplY3QxO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0SUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1JRCcsIFN0cmluZyh4UmVxdWVzdElEKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChiZWFyZXIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdiZWFyZXInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBhdGNoPGFueT4oYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofS9vcmdzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhvcmdJZCkpfS9pbnZpdGF0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoaW52aXRhdGlvbklkKSl9YCxcbiAgICAgICAgICAgIGlubGluZU9iamVjdDEsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iXX0=
|