@sumaris-net/ngx-components 0.13.12 → 0.13.13
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/bundles/ngx-sumaris-components.umd.js +63 -31
- package/bundles/ngx-sumaris-components.umd.js.map +1 -1
- package/bundles/ngx-sumaris-components.umd.min.js +1 -1
- package/bundles/ngx-sumaris-components.umd.min.js.map +1 -1
- package/esm2015/src/app/core/services/base-entity-service.class.js +24 -1
- package/fesm2015/ngx-sumaris-components.js +23 -0
- package/fesm2015/ngx-sumaris-components.js.map +1 -1
- package/ngx-sumaris-components.metadata.json +1 -1
- package/package.json +1 -1
- package/src/app/core/services/base-entity-service.class.d.ts +2 -0
|
@@ -151,6 +151,29 @@ export class BaseEntityService extends BaseGraphqlService {
|
|
|
151
151
|
return res;
|
|
152
152
|
});
|
|
153
153
|
}
|
|
154
|
+
countAll(filter, opts) {
|
|
155
|
+
var _a;
|
|
156
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
157
|
+
// If no countAll query
|
|
158
|
+
if (!this.queries.countAll) {
|
|
159
|
+
// Fail if no loadAll (cannot count)
|
|
160
|
+
if (!this.queries.loadAllWithTotal)
|
|
161
|
+
throw new Error('Not implemented');
|
|
162
|
+
// Use loadAll query, with size = 0;
|
|
163
|
+
return ((_a = (yield this.loadAll(0, 1, null, null, filter, { withTotal: true }))) === null || _a === void 0 ? void 0 : _a.total) || 0;
|
|
164
|
+
}
|
|
165
|
+
filter = this.asFilter(filter);
|
|
166
|
+
const res = yield this.graphql.query({
|
|
167
|
+
query: this.queries.countAll,
|
|
168
|
+
variables: {
|
|
169
|
+
filter: filter && filter.asPodObject()
|
|
170
|
+
},
|
|
171
|
+
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
|
|
172
|
+
fetchPolicy: opts && opts.fetchPolicy || 'network-only'
|
|
173
|
+
});
|
|
174
|
+
return res.total;
|
|
175
|
+
});
|
|
176
|
+
}
|
|
154
177
|
saveAll(entities, opts) {
|
|
155
178
|
return __awaiter(this, void 0, void 0, function* () {
|
|
156
179
|
if (isEmptyArray(entities))
|
|
@@ -420,4 +443,4 @@ BaseEntityService.ctorParameters = () => [
|
|
|
420
443
|
{ type: Function },
|
|
421
444
|
{ type: undefined }
|
|
422
445
|
];
|
|
423
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1lbnRpdHktc2VydmljZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9iYXNlLWVudGl0eS1zZXJ2aWNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUt0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQWlDLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQWdCLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUEyQ3ZFLFdBQVc7QUFFWCxrRUFBa0U7QUFDbEUsTUFBTSxPQUFnQixpQkFTcEIsU0FBUSxrQkFBNEI7SUFrQnBDLFlBQ1ksT0FBdUIsRUFDdkIsUUFBeUIsRUFDekIsUUFBb0IsRUFDcEIsVUFBc0IsRUFDaEMsT0FBaUQ7UUFFakQsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQU5sQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtR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QUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRVMsNEJBQTRCLENBQUMsSUFBd0I7UUFDN0QsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFNUQsaURBQWlEO1FBQ2pELElBQUksSUFBSSxDQUFDLHdCQUF3QixLQUFLLGlCQUFpQjtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRTFFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPLFNBQVMsQ0FBQyxDQUFDLGdCQUFnQjtRQUV2RCxzQ0FBc0M7UUFDdEMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFUyxjQUFjO1FBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7OztZQTVlRixTQUFTOzs7WUFwREQsY0FBYztZQUNkLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFcnJvckNvZGVzIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQgeyBGZXRjaFBvbGljeSwgSW50ZXJuYWxSZWZldGNoUXVlcmllc0luY2x1ZGUsIE11dGF0aW9uVXBkYXRlckZuIH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5cbmltcG9ydCB7IEJhc2VHcmFwaHFsU2VydmljZSB9IGZyb20gJy4vYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zLCBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsIElFbnRpdGllc1NlcnZpY2UsIElFbnRpdHlTZXJ2aWNlLCBMb2FkUmVzdWx0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEdyYXBocWxTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi9wbGF0Zm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5QXNPYmplY3RPcHRpb25zLCBFbnRpdHlVdGlscyB9IGZyb20gJy4vbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IGNoYWluUHJvbWlzZXMgfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3ROaWwsIHJlbW92ZUVuZCB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGZXRjaFJlc3VsdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2xpbmsvY29yZSc7XG5pbXBvcnQgeyBFbnRpdHlGaWx0ZXIsIEVudGl0eUZpbHRlclV0aWxzIH0gZnJvbSAnLi9tb2RlbC9maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHsgRG9jdW1lbnROb2RlIH0gZnJvbSAnZ3JhcGhxbCc7XG5cbmV4cG9ydCB0eXBlIE11dGFibGVXYXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgPSAndXBkYXRlLWNhY2hlJyB8ICdyZWZldGNoLXF1ZXJpZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFbnRpdHlHcmFwaHFsUXVlcmllcyB7XG4gIGxvYWQ/OiBhbnk7XG4gIGxvYWRBbGw6IGFueTtcbiAgbG9hZEFsbFdpdGhUb3RhbD86IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnMge1xuICBzYXZlPzogYW55O1xuICBkZWxldGU/OiBhbnk7XG4gIHNhdmVBbGw/OiBhbnk7XG4gIGRlbGV0ZUFsbD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlRW50aXR5R3JhcGhxbFN1YnNjcmlwdGlvbnMge1xuICBsaXN0ZW5DaGFuZ2VzPzogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBCYXNlRW50aXR5U2VydmljZU9wdGlvbnM8XG4gIFQgZXh0ZW5kcyBFbnRpdHk8YW55LCBJRD4sXG4gIElEID0gbnVtYmVyLFxuICBRIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxRdWVyaWVzID0gQmFzZUVudGl0eUdyYXBocWxRdWVyaWVzLFxuICBNIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnMgPSBCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucyxcbiAgUyBleHRlbmRzIEJhc2VFbnRpdHlHcmFwaHFsU3Vic2NyaXB0aW9ucyA9IEJhc2VFbnRpdHlHcmFwaHFsU3Vic2NyaXB0aW9ucz4ge1xuICBxdWVyaWVzOiBRO1xuICBtdXRhdGlvbnM/OiBQYXJ0aWFsPE0+O1xuICBzdWJzY3JpcHRpb25zPzogUGFydGlhbDxTPjtcbiAgZXF1YWxzRm4/OiAoZTE6IFQsIGUyOiBUKSA9PiBib29sZWFuO1xuICBpc05ld0ZuPzogKGU6IFQpID0+IGJvb2xlYW47XG4gIGRlZmF1bHRTb3J0Qnk/OiBrZXlvZiBUO1xuICBkZWZhdWx0U29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb247XG4gIHdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeT86IE11dGFibGVXYXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3k7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5U2F2ZU9wdGlvbnMge1xuICByZWZldGNoUXVlcmllcz86ICgocmVzdWx0OiBGZXRjaFJlc3VsdDx7ZGF0YTogYW55fT4pID0+IEludGVybmFsUmVmZXRjaFF1ZXJpZXNJbmNsdWRlKSB8IEludGVybmFsUmVmZXRjaFF1ZXJpZXNJbmNsdWRlO1xuICBhd2FpdFJlZmV0Y2hRdWVyaWVzPzogYm9vbGVhbjtcbiAgdXBkYXRlPzogTXV0YXRpb25VcGRhdGVyRm48eyBkYXRhOiBhbnk7IH0+O1xufVxuXG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VFbnRpdHlTZXJ2aWNlPFxuICBUIGV4dGVuZHMgRW50aXR5PFQsIElEPixcbiAgRiBleHRlbmRzIEVudGl0eUZpbHRlcjxGLCBULCBJRD4sXG4gIElEID0gbnVtYmVyLFxuICBXTyBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyA9IEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyxcbiAgTE8gZXh0ZW5kcyBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMgPSBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsXG4gIFEgZXh0ZW5kcyBCYXNlRW50aXR5R3JhcGhxbFF1ZXJpZXMgPSBCYXNlRW50aXR5R3JhcGhxbFF1ZXJpZXMsXG4gIE0gZXh0ZW5kcyBCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucyA9IEJhc2VFbnRpdHlHcmFwaHFsTXV0YXRpb25zLFxuICBTIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxTdWJzY3JpcHRpb25zID0gQmFzZUVudGl0eUdyYXBocWxTdWJzY3JpcHRpb25zPlxuICBleHRlbmRzIEJhc2VHcmFwaHFsU2VydmljZTxULCBGLCBJRD5cbiAgaW1wbGVtZW50c1xuICAgIElFbnRpdGllc1NlcnZpY2U8VCwgRiwgV08+LFxuICAgIElFbnRpdHlTZXJ2aWNlPFQsIElELCBMTz4ge1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBfdHlwZW5hbWU6IHN0cmluZztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9sb2dUeXBlTmFtZTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyaWVzOiBRO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbXV0YXRpb25zOiBQYXJ0aWFsPE0+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3Vic2NyaXB0aW9uczogUGFydGlhbDxTPjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVxdWFsc0ZuOiAoZTE6IFQsIGUyOiBUKSA9PiBib29sZWFuO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNOZXdGbjogKGU6IFQpID0+IGJvb2xlYW47XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRTb3J0Qnk6IGtleW9mIFQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0U29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeTogTXV0YWJsZVdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGdyYXBocWw6IEdyYXBocWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBkYXRhVHlwZTogbmV3KCkgPT4gVCxcbiAgICBwcm90ZWN0ZWQgZmlsdGVyVHlwZTogbmV3KCkgPT4gRixcbiAgICBvcHRpb25zOiBCYXNlRW50aXR5U2VydmljZU9wdGlvbnM8VCwgSUQsIFEsIE0sIFM+XG4gICkge1xuICAgIHN1cGVyKGdyYXBocWwsIGVudmlyb25tZW50KTtcbiAgICB0aGlzLnF1ZXJpZXMgPSBvcHRpb25zLnF1ZXJpZXM7XG4gICAgdGhpcy5tdXRhdGlvbnMgPSBvcHRpb25zLm11dGF0aW9ucyB8fCA8UGFydGlhbDxNPj57fTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBvcHRpb25zLnN1YnNjcmlwdGlvbnMgfHwgPFBhcnRpYWw8Uz4+e307XG4gICAgdGhpcy5lcXVhbHNGbiA9IG9wdGlvbnMuZXF1YWxzRm4gfHwgKChlMSwgZTIpID0+IEVudGl0eVV0aWxzLmVxdWFscyhlMSwgZTIsICdpZCcpKTtcbiAgICB0aGlzLmlzTmV3Rm4gPSBvcHRpb25zLmlzTmV3Rm4gfHwgKChlKSA9PiBFbnRpdHlVdGlscy5pc05vdEVtcHR5KGUsICdpZCcpKTtcbiAgICB0aGlzLmRlZmF1bHRTb3J0QnkgPSBvcHRpb25zLmRlZmF1bHRTb3J0QnkgfHwgJ2lkJztcbiAgICB0aGlzLmRlZmF1bHRTb3J0RGlyZWN0aW9uID0gb3B0aW9ucy5kZWZhdWx0U29ydERpcmVjdGlvbiB8fCAnYXNjJztcbiAgICB0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9IG9wdGlvbnMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5IHx8ICd1cGRhdGUtY2FjaGUnO1xuXG4gICAgcGxhdGZvcm0ucmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgIC8vIE5vIGxpbWl0IGZvciB1cGRhdGFibGUgd2F0Y2ggcXVlcmllcywgaWYgZGVza3RvcFxuICAgICAgaWYgKCFwbGF0Zm9ybS5tb2JpbGUpIHtcbiAgICAgICAgdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllc01heENvdW50ID0gLTE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBvYmogPSBuZXcgZGF0YVR5cGUoKTtcbiAgICB0aGlzLl90eXBlbmFtZSA9IG9iai5fX3R5cGVuYW1lIHx8ICdVbmtub3duVk8nO1xuICAgIHRoaXMuX2xvZ1R5cGVOYW1lID0gcmVtb3ZlRW5kKHRoaXMuX3R5cGVuYW1lLCAnVk8nKTtcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICB3YXRjaChpZDogbnVtYmVyLCBvcHRzPzogV08gJiB7IHF1ZXJ5PzogYW55IH0pOiBPYnNlcnZhYmxlPFQ+IHtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgV2F0Y2hpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0geyR7aWR9fS4uLmApO1xuXG4gICAgY29uc3QgcXVlcnkgPSBvcHRzICYmIG9wdHMucXVlcnkgfHwgdGhpcy5xdWVyaWVzLmxvYWQ7XG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC53YXRjaFF1ZXJ5PHtkYXRhOiBhbnl9Pih7XG4gICAgICBxdWVyeSxcbiAgICAgIHZhcmlhYmxlczogeyBpZCB9LFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdHMgJiYgKG9wdHMuZmV0Y2hQb2xpY3kgYXMgRmV0Y2hQb2xpY3kpIHx8IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiB7Y29kZTogRXJyb3JDb2Rlcy5MT0FEX0RBVEFfRVJST1IsIG1lc3NhZ2U6ICdSRUZFUkVOVElBTC5FUlJPUi5MT0FEX0RBVEFfRVJST1InfVxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7ZGF0YX0pID0+ICghb3B0cyB8fCBvcHRzLnRvRW50aXR5ICE9PSBmYWxzZSlcbiAgICAgICAgICAgID8gKGRhdGEgJiYgdGhpcy5mcm9tT2JqZWN0KGRhdGEpKVxuICAgICAgICAgICAgOiAoZGF0YSBhcyBUKSlcbiAgICAgICk7XG4gIH1cblxuICBhc3luYyBsb2FkKGlkOiBJRCwgb3B0cz86IExPICYgeyBxdWVyeT86IGFueSB9KTogUHJvbWlzZTxUPiB7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYExvYWRpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0geyR7aWR9fS4uLmApO1xuICAgIGNvbnN0IHF1ZXJ5ID0gb3B0cyAmJiBvcHRzLnF1ZXJ5IHx8IHRoaXMucXVlcmllcy5sb2FkO1xuXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8e2RhdGE6IGFueX0+KHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7IGlkIH0sXG4gICAgICBmZXRjaFBvbGljeTogb3B0cyAmJiAob3B0cy5mZXRjaFBvbGljeSBhcyBGZXRjaFBvbGljeSkgfHwgdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IHtjb2RlOiBFcnJvckNvZGVzLkxPQURfREFUQV9FUlJPUiwgbWVzc2FnZTogJ1JFRkVSRU5USUFMLkVSUk9SLkxPQURfREFUQV9FUlJPUid9XG4gICAgfSk7XG5cbiAgICAvLyBDb252ZXJ0IHRvIGVudGl0eVxuICAgIHJldHVybiAoIW9wdHMgfHwgb3B0cy50b0VudGl0eSAhPT0gZmFsc2UpXG4gICAgICA/IChkYXRhICYmIHRoaXMuZnJvbU9iamVjdChkYXRhKSlcbiAgICAgIDogKGRhdGEgYXMgVCk7XG4gIH1cblxuICB3YXRjaEFsbChvZmZzZXQ6IG51bWJlcixcbiAgICAgICAgICAgc2l6ZTogbnVtYmVyLFxuICAgICAgICAgICBzb3J0Qnk/OiBzdHJpbmcsXG4gICAgICAgICAgIHNvcnREaXJlY3Rpb24/OiBTb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICBmaWx0ZXI/OiBGLFxuICAgICAgICAgICBvcHRzPzogV08gJiB7IHF1ZXJ5PzogYW55IH1cbiAgKTogT2JzZXJ2YWJsZTxMb2FkUmVzdWx0PFQ+PiB7XG5cbiAgICBmaWx0ZXIgPSB0aGlzLmFzRmlsdGVyKGZpbHRlcik7XG5cbiAgICBjb25zdCB2YXJpYWJsZXM6IGFueSA9IHtcbiAgICAgIG9mZnNldDogb2Zmc2V0IHx8IDAsXG4gICAgICBzaXplOiBzaXplIHx8IDEwMCxcbiAgICAgIHNvcnRCeTogc29ydEJ5IHx8IHRoaXMuZGVmYXVsdFNvcnRCeSxcbiAgICAgIHNvcnREaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gfHwgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbixcbiAgICAgIGZpbHRlcjogZmlsdGVyICYmIGZpbHRlci5hc1BvZE9iamVjdCgpXG4gICAgfTtcblxuICAgIGxldCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgV2F0Y2hpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0uLi5gLCB2YXJpYWJsZXMpO1xuXG4gICAgY29uc3Qgd2l0aFRvdGFsID0gKCFvcHRzIHx8IG9wdHMud2l0aFRvdGFsICE9PSBmYWxzZSkgJiYgdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoVG90YWwgJiYgdHJ1ZTtcbiAgICBjb25zdCBxdWVyeSA9IChvcHRzICYmIG9wdHMucXVlcnkpIC8vIHVzZSBnaXZlbiBxdWVyeVxuICAgICAgLy8gT3IgZ2V0IGxvYWRBbGwgb3IgbG9hZEFsbFdpdGhUb3RhbCBxdWVyeVxuICAgICAgfHwgKHdpdGhUb3RhbCA/IHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aFRvdGFsICA6IHRoaXMucXVlcmllcy5sb2FkQWxsKTtcbiAgICByZXR1cm4gdGhpcy5tdXRhYmxlV2F0Y2hRdWVyeTxMb2FkUmVzdWx0PGFueT4+KHtcbiAgICAgIHF1ZXJ5TmFtZTogd2l0aFRvdGFsID8gJ0xvYWRBbGxXaXRoVG90YWwnIDogJ0xvYWRBbGwnLFxuICAgICAgcXVlcnksXG4gICAgICBhcnJheUZpZWxkTmFtZTogJ2RhdGEnLFxuICAgICAgdG90YWxGaWVsZE5hbWU6IHdpdGhUb3RhbCA/ICd0b3RhbCcgOiB1bmRlZmluZWQsXG4gICAgICBpbnNlcnRGaWx0ZXJGbjogZmlsdGVyICYmIGZpbHRlci5hc0ZpbHRlckZuKCksXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICBlcnJvcjoge2NvZGU6IEVycm9yQ29kZXMuTE9BRF9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnUkVGRVJFTlRJQUwuRVJST1IuTE9BRF9EQVRBX0VSUk9SJ30sXG4gICAgICBmZXRjaFBvbGljeTogb3B0cyAmJiBvcHRzLmZldGNoUG9saWN5IHx8IHVuZGVmaW5lZFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7ZGF0YSwgdG90YWx9KSA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBlbnRpdHkgKGlmIG5lZWQpXG4gICAgICAgICAgY29uc3QgZW50aXRpZXMgPSAoIW9wdHMgfHwgb3B0cy50b0VudGl0eSAhPT0gZmFsc2UpXG4gICAgICAgICAgICA/IChkYXRhIHx8IFtdKS5tYXAoanNvbiA9PiB0aGlzLmZyb21PYmplY3QoanNvbikpXG4gICAgICAgICAgICA6IChkYXRhIHx8IFtdKSBhcyBUW107XG5cbiAgICAgICAgICBpZiAobm93KSB7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGAke3RoaXMuX2xvZ1R5cGVOYW1lfSBsb2FkZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCwgZW50aXRpZXMpO1xuICAgICAgICAgICAgbm93ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtkYXRhOiBlbnRpdGllcywgdG90YWx9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRBbGwob2Zmc2V0OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgc2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgIHNvcnRCeT86IHN0cmluZyxcbiAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbixcbiAgICAgICAgICAgICAgICBmaWx0ZXI/OiBQYXJ0aWFsPEY+LFxuICAgICAgICAgICAgICAgIG9wdHM/OiBMTyAmIHtcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5PzogYW55O1xuICAgICAgICAgICAgICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgd2l0aFRvdGFsPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICB9XG4gICk6IFByb21pc2U8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgY29uc3QgZGVidWcgPSB0aGlzLl9kZWJ1ZyAmJiAoIW9wdHMgfHwgb3B0cy5kZWJ1ZyAhPT0gZmFsc2UpO1xuXG4gICAgZmlsdGVyID0gdGhpcy5hc0ZpbHRlcihmaWx0ZXIpO1xuXG4gICAgY29uc3QgdmFyaWFibGVzOiBhbnkgPSB7XG4gICAgICBvZmZzZXQ6IG9mZnNldCB8fCAwLFxuICAgICAgc2l6ZTogc2l6ZSB8fCAxMDAsXG4gICAgICBzb3J0Qnk6IHNvcnRCeSB8fCAnaWQnLFxuICAgICAgc29ydERpcmVjdGlvbjogc29ydERpcmVjdGlvbiB8fCAnYXNjJyxcbiAgICAgIGZpbHRlcjogZmlsdGVyICYmIGZpbHRlci5hc1BvZE9iamVjdCgpXG4gICAgfTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgaWYgKGRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBMb2FkaW5nICR7dGhpcy5fbG9nVHlwZU5hbWV9Li4uYCwgdmFyaWFibGVzKTtcblxuICAgIGNvbnN0IHdpdGhUb3RhbCA9ICghb3B0cyB8fCBvcHRzLndpdGhUb3RhbCAhPT0gZmFsc2UpICYmIHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aFRvdGFsICYmIHRydWU7XG4gICAgY29uc3QgcXVlcnkgPSAob3B0cyAmJiBvcHRzLnF1ZXJ5KSAvLyB1c2UgZ2l2ZW4gcXVlcnlcbiAgICAgIC8vIE9yIGdldCBsb2FkQWxsIG9yIGxvYWRBbGxXaXRoVG90YWwgcXVlcnlcbiAgICAgIHx8ICh3aXRoVG90YWwgPyB0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhUb3RhbCAgOiB0aGlzLnF1ZXJpZXMubG9hZEFsbCk7XG4gICAgY29uc3Qge2RhdGEsIHRvdGFsfSA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTxMb2FkUmVzdWx0PGFueT4+KHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgdmFyaWFibGVzLFxuICAgICAgZXJyb3I6IHtjb2RlOiBFcnJvckNvZGVzLkxPQURfREFUQV9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfREFUQV9FUlJPUid9LFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdHMgJiYgb3B0cy5mZXRjaFBvbGljeSB8fCAnbmV0d29yay1vbmx5J1xuICAgIH0pO1xuICAgIGNvbnN0IGVudGl0aWVzID0gKCFvcHRzIHx8IG9wdHMudG9FbnRpdHkgIT09IGZhbHNlKSA/XG4gICAgICAoZGF0YSB8fCBbXSkubWFwKGpzb24gPT4gdGhpcy5mcm9tT2JqZWN0KGpzb24pKSA6XG4gICAgICAoZGF0YSB8fCBbXSkgYXMgVFtdO1xuICAgIGlmIChkZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgJHt0aGlzLl9sb2dUeXBlTmFtZX0gaXRlbXMgbG9hZGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgY29uc3QgcmVzOiBMb2FkUmVzdWx0PFQ+ID0ge1xuICAgICAgZGF0YTogZW50aXRpZXMsXG4gICAgICB0b3RhbFxuICAgIH07XG5cbiAgICAvLyBBZGQgZmV0Y2ggbW9yZSBjYXBhYmlsaXR5LCBpZiB0b3RhbCB3YXMgZmV0Y2hlZFxuICAgIGlmICh3aXRoVG90YWwpIHtcbiAgICAgIGNvbnN0IG5leHRPZmZzZXQgPSBvZmZzZXQgKyBlbnRpdGllcy5sZW5ndGg7XG4gICAgICBpZiAobmV4dE9mZnNldCA8IHJlcy50b3RhbCkge1xuICAgICAgICByZXMuZmV0Y2hNb3JlID0gKCkgPT4gdGhpcy5sb2FkQWxsKG5leHRPZmZzZXQsIHNpemUsIHNvcnRCeSwgc29ydERpcmVjdGlvbiwgZmlsdGVyLCBvcHRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cblxuICBhc3luYyBzYXZlQWxsKGVudGl0aWVzOiBUW10sIG9wdHM/OiBFbnRpdHlTYXZlT3B0aW9ucyk6IFByb21pc2U8VFtdPiB7XG4gICAgaWYgKGlzRW1wdHlBcnJheShlbnRpdGllcykpIHJldHVybiBlbnRpdGllczsgLy8gTm90aGluZyB0byBzYXZlOiBza2lwXG5cbiAgICBpZiAoIXRoaXMubXV0YXRpb25zLnNhdmVBbGwpIHtcbiAgICAgIGlmICghdGhpcy5tdXRhdGlvbnMuc2F2ZSkgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgIC8vIFNhdmUgb25lIGJ5IG9uZVxuICAgICAgcmV0dXJuIGNoYWluUHJvbWlzZXMoKGVudGl0aWVzIHx8IFtdKVxuICAgICAgICAubWFwKGVudGl0eSA9PiAoKCkgPT4gdGhpcy5zYXZlKGVudGl0eSwgb3B0cykpKSk7XG4gICAgfVxuXG4gICAgbGV0IGhhc05ld0VudGl0aWVzID0gZmFsc2U7XG4gICAgY29uc3QganNvbiA9IGVudGl0aWVzLm1hcChlbnRpdHkgPT4ge1xuICAgICAgaGFzTmV3RW50aXRpZXMgPSBoYXNOZXdFbnRpdGllcyB8fCB0aGlzLmlzTmV3Rm4oZW50aXR5KTtcbiAgICAgIHRoaXMuZmlsbERlZmF1bHRQcm9wZXJ0aWVzKGVudGl0eSk7XG4gICAgICByZXR1cm4gdGhpcy5hc09iamVjdChlbnRpdHkpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYFNhdmluZyBhbGwgJHt0aGlzLl9sb2dUeXBlTmFtZX0uLi5gLCBqc29uKTtcblxuICAgIGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8TG9hZFJlc3VsdDxhbnk+Pih7XG4gICAgICBtdXRhdGlvbjogdGhpcy5tdXRhdGlvbnMuc2F2ZUFsbCxcbiAgICAgIHJlZmV0Y2hRdWVyaWVzOiB0aGlzLmdldFJlZmV0Y2hRdWVyaWVzRm9yTXV0YXRpb24ob3B0cyksXG4gICAgICBhd2FpdFJlZmV0Y2hRdWVyaWVzOiBvcHRzICYmIG9wdHMuYXdhaXRSZWZldGNoUXVlcmllcyxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBkYXRhOiBqc29uXG4gICAgICB9LFxuICAgICAgZXJyb3I6IHtjb2RlOiBFcnJvckNvZGVzLlNBVkVfREFUQV9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLlNBVkVfREFUQV9FUlJPUid9LFxuICAgICAgdXBkYXRlOiAocHJveHksIHtkYXRhfSkgPT4ge1xuICAgICAgICBjb25zdCBzYXZlZEVudGl0aWVzID0gZGF0YSAmJiBkYXRhLmRhdGE7XG4gICAgICAgIGlmIChzYXZlZEVudGl0aWVzKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIGVudGl0aWVzIChpZCBhbmQgdXBkYXRlIGRhdGUpXG4gICAgICAgICAgZW50aXRpZXMuZm9yRWFjaChlbnRpdHkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2F2ZWRFbnRpdHkgPSBzYXZlZEVudGl0aWVzLmZpbmQoZSA9PiB0aGlzLmVxdWFsc0ZuKGUsIGVudGl0eSkpO1xuICAgICAgICAgICAgdGhpcy5jb3B5SWRBbmRVcGRhdGVEYXRlKHNhdmVkRW50aXR5LCBlbnRpdHkpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKGhhc05ld0VudGl0aWVzICYmIHRoaXMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5ID09PSAndXBkYXRlLWNhY2hlJykge1xuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBjYWNoZVxuICAgICAgICAgICAgdGhpcy5pbnNlcnRJbnRvTXV0YWJsZUNhY2hlZFF1ZXJpZXMocHJveHksIHtcbiAgICAgICAgICAgICAgcXVlcmllczogdGhpcy5nZXRMb2FkUXVlcmllcygpLFxuICAgICAgICAgICAgICBkYXRhOiBzYXZlZEVudGl0aWVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKHByb3h5LCB7ZGF0YX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1R5cGVOYW1lfSBzYXZlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgLCBlbnRpdGllcyk7XG5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbnRpdGllcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGEgcmVmZXJlbnRpYWwgZW50aXR5XG4gICAqXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIHNhdmUoZW50aXR5OiBULCBvcHRzPzogRW50aXR5U2F2ZU9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXRoaXMubXV0YXRpb25zLnNhdmUpIHtcbiAgICAgIGlmICghdGhpcy5tdXRhdGlvbnMuc2F2ZUFsbCkgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnNhdmVBbGwoW2VudGl0eV0sIG9wdHMpO1xuICAgICAgcmV0dXJuIGRhdGEgJiYgZGF0YVswXTtcbiAgICB9XG5cbiAgICAvLyBGaWxsIGRlZmF1bHQgcHJvcGVydGllc1xuICAgIHRoaXMuZmlsbERlZmF1bHRQcm9wZXJ0aWVzKGVudGl0eSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gaW50byBqc29uXG4gICAgY29uc3QganNvbiA9IHRoaXMuYXNPYmplY3QoZW50aXR5KTtcblxuICAgIGNvbnN0IGlzTmV3ID0gdGhpcy5pc05ld0ZuKGpzb24pO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYFNhdmluZyAke3RoaXMuX2xvZ1R5cGVOYW1lfS4uLmAsIGpzb24pO1xuXG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7ZGF0YTogYW55fT4oe1xuICAgICAgbXV0YXRpb246IHRoaXMubXV0YXRpb25zLnNhdmUsXG4gICAgICByZWZldGNoUXVlcmllczogdGhpcy5nZXRSZWZldGNoUXVlcmllc0Zvck11dGF0aW9uKG9wdHMpLFxuICAgICAgYXdhaXRSZWZldGNoUXVlcmllczogb3B0cyAmJiBvcHRzLmF3YWl0UmVmZXRjaFF1ZXJpZXMsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZGF0YToganNvblxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7Y29kZTogRXJyb3JDb2Rlcy5TQVZFX0RBVEFfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX0RBVEFfRVJST1InfSxcbiAgICAgIHVwZGF0ZTogKGNhY2hlLCB7ZGF0YX0pID0+IHtcbiAgICAgICAgLy8gVXBkYXRlIGVudGl0eVxuICAgICAgICBjb25zdCBzYXZlZEVudGl0eSA9IGRhdGEgJiYgZGF0YS5kYXRhO1xuICAgICAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGUoc2F2ZWRFbnRpdHksIGVudGl0eSk7XG5cbiAgICAgICAgLy8gSW5zZXJ0IGludG8gdGhlIGNhY2hlXG4gICAgICAgIGlmIChpc05ldyAmJiB0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9PT0gJ3VwZGF0ZS1jYWNoZScpIHtcbiAgICAgICAgICB0aGlzLmluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcmllcyhjYWNoZSwge1xuICAgICAgICAgICAgcXVlcmllczogdGhpcy5nZXRMb2FkUXVlcmllcygpLFxuICAgICAgICAgICAgZGF0YTogc2F2ZWRFbnRpdHlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMudXBkYXRlKSB7XG4gICAgICAgICAgb3B0cy51cGRhdGUoY2FjaGUsIHtkYXRhfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYCR7ZW50aXR5Ll9fdHlwZW5hbWV9IHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2AsIGVudGl0eSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSByZWZlcmVudGlhbCBlbnRpdGllc1xuICAgKi9cbiAgYXN5bmMgZGVsZXRlQWxsKGVudGl0aWVzOiBUW10sIG9wdHM/OiBQYXJ0aWFsPHtcbiAgICB1cGRhdGU6IE11dGF0aW9uVXBkYXRlckZuPGFueT47XG4gIH0+IHwgYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMubXV0YXRpb25zLmRlbGV0ZUFsbCkge1xuICAgICAgaWYgKCF0aGlzLm11dGF0aW9ucy5kZWxldGUpIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgICAvLyBEZWxldGUgb25lIGJ5IG9uZVxuICAgICAgcmV0dXJuIGNoYWluUHJvbWlzZXMoKGVudGl0aWVzIHx8IFtdKVxuICAgICAgICAubWFwKGVudGl0eSA9PiAoKCkgPT4gdGhpcy5kZWxldGUoZW50aXR5LCBvcHRzKSkpKTtcbiAgICB9XG5cbiAgICAvLyBGaWx0ZXIgc2F2ZWQgZW50aXRpZXNcbiAgICBlbnRpdGllcyA9IGVudGl0aWVzICYmIGVudGl0aWVzLmZpbHRlcihlID0+IGlzTm90TmlsKGUuaWQpKTtcblxuICAgIC8vIE5vdGhpbmcgdG8gc2F2ZTogc2tpcFxuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpKSByZXR1cm47XG5cbiAgICBjb25zdCBpZHMgPSBlbnRpdGllcy5tYXAodCA9PiB0LmlkKTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgRGVsZXRpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0uLi5gLCBpZHMpO1xuXG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTxhbnk+KHtcbiAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9ucy5kZWxldGVBbGwsXG4gICAgICByZWZldGNoUXVlcmllczogdGhpcy5nZXRSZWZldGNoUXVlcmllc0Zvck11dGF0aW9uKG9wdHMpLFxuICAgICAgYXdhaXRSZWZldGNoUXVlcmllczogb3B0cyAmJiBvcHRzLmF3YWl0UmVmZXRjaFF1ZXJpZXMsXG4gICAgICB2YXJpYWJsZXM6IHsgaWRzIH0sXG4gICAgICBlcnJvcjoge2NvZGU6IEVycm9yQ29kZXMuREVMRVRFX0RBVEFfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5ERUxFVEVfREFUQV9FUlJPUid9LFxuICAgICAgdXBkYXRlOiAoY2FjaGUsIHJlcykgPT4ge1xuXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGNhY2hlXG4gICAgICAgIGlmICh0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9PT0gJ3VwZGF0ZS1jYWNoZScpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21NdXRhYmxlQ2FjaGVkUXVlcmllc0J5SWRzKGNhY2hlLCB7XG4gICAgICAgICAgICBxdWVyaWVzOiB0aGlzLmdldExvYWRRdWVyaWVzKCksXG4gICAgICAgICAgICBpZHNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMudXBkYXRlKSB7XG4gICAgICAgICAgb3B0cy51cGRhdGUoY2FjaGUsIHJlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYCR7dGhpcy5fbG9nVHlwZU5hbWV9IGRlbGV0ZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGEgcmVmZXJlbnRpYWwgZW50aXR5XG4gICAqL1xuICBhc3luYyBkZWxldGUoZW50aXR5OiBULCBvcHRzPzogRW50aXR5U2F2ZU9wdGlvbnMgfCBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGhpcy5tdXRhdGlvbnMuZGVsZXRlKSB7XG4gICAgICBpZiAoIXRoaXMubXV0YXRpb25zLmRlbGV0ZUFsbCkgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRlbGV0ZUFsbChbZW50aXR5XSwgb3B0cyk7XG4gICAgICByZXR1cm4gZGF0YSAmJiBkYXRhWzBdO1xuICAgIH1cblxuICAgIC8vIE5vdGhpbmcgdG8gc2F2ZTogc2tpcFxuICAgIGlmICghZW50aXR5IHx8IGlzTmlsKGVudGl0eS5pZCkpIHJldHVybjtcblxuICAgIGNvbnN0IGlkID0gZW50aXR5LmlkO1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBEZWxldGluZyAke3RoaXMuX2xvZ1R5cGVOYW1lfSB7JHtpZH19Li4uYCk7XG5cbiAgICBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPGFueT4oe1xuICAgICAgbXV0YXRpb246IHRoaXMubXV0YXRpb25zLmRlbGV0ZSxcbiAgICAgIHJlZmV0Y2hRdWVyaWVzOiB0aGlzLmdldFJlZmV0Y2hRdWVyaWVzRm9yTXV0YXRpb24ob3B0cyksXG4gICAgICBhd2FpdFJlZmV0Y2hRdWVyaWVzOiBvcHRzICYmIG9wdHMuYXdhaXRSZWZldGNoUXVlcmllcyxcbiAgICAgIHZhcmlhYmxlczogeyBpZCB9LFxuICAgICAgZXJyb3I6IHtjb2RlOiBFcnJvckNvZGVzLkRFTEVURV9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuREVMRVRFX0RBVEFfRVJST1InfSxcbiAgICAgIHVwZGF0ZTogKHByb3h5LCByZXMpID0+IHtcblxuICAgICAgICAvLyBSZW1vdmUgZnJvbSBjYWNoZVxuICAgICAgICBpZiAodGhpcy53YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgPT09ICd1cGRhdGUtY2FjaGUnKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGcm9tTXV0YWJsZUNhY2hlZFF1ZXJpZXNCeUlkcyhwcm94eSwge1xuICAgICAgICAgICAgcXVlcmllczogdGhpcy5nZXRMb2FkUXVlcmllcygpLFxuICAgICAgICAgICAgaWRzOiBbaWRdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKHByb3h5LCByZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGAke3RoaXMuX2xvZ1R5cGVOYW1lfSBkZWxldGVkIGluICR7bmV3IERhdGUoKS5nZXRUaW1lKCkgLSBub3cuZ2V0VGltZSgpfW1zYCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsaXN0ZW5DaGFuZ2VzKGlkOiBJRCwgb3B0cz86IHtcbiAgICBxdWVyeT86IGFueTtcbiAgICB2YXJpYWJsZXM/OiBhbnk7XG4gICAgaW50ZXJ2YWw/OiBudW1iZXI7XG4gICAgdG9FbnRpdHk/OiBib29sZWFuO1xuICB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgaWYgKGlzTmlsKGlkKSkgdGhyb3cgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwnaWRcXCcgJyk7XG4gICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnMubGlzdGVuQ2hhbmdlcykgdGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCEnKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlcyA9IG9wdHMgJiYgb3B0cy52YXJpYWJsZXMgfHwge1xuICAgICAgaWQsXG4gICAgICBpbnRlcnZhbDogb3B0cyAmJiBvcHRzLmludGVydmFsIHx8IDEwIC8vIHNlY29uZHNcbiAgICB9O1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgW1dTXSBMaXN0ZW5pbmcgZm9yIGNoYW5nZXMgb24gJHt0aGlzLl9sb2dUeXBlTmFtZX0geyR7aWR9fS4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC5zdWJzY3JpYmU8e2RhdGE6IGFueX0+KHtcbiAgICAgIHF1ZXJ5OiBvcHRzICYmIG9wdHMucXVlcnkgfHwgdGhpcy5zdWJzY3JpcHRpb25zLmxpc3RlbkNoYW5nZXMsXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNVQlNDUklCRV9EQVRBX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnRVJST1IuU1VCU0NSSUJFX0RBVEFfRVJST1InXG4gICAgICB9XG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHtkYXRhfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9ICghb3B0cyB8fCBvcHRzLnRvRW50aXR5ICE9PSBmYWxzZSkgPyBkYXRhICYmIHRoaXMuZnJvbU9iamVjdChkYXRhKSA6IGRhdGE7XG4gICAgICAgICAgaWYgKGVudGl0eSAmJiB0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgW1dTXSBSZWNlaXZlZCBjaGFuZ2VzIG9uICR7dGhpcy5fbG9nVHlwZU5hbWV9IHske2lkfX1gLCBlbnRpdHkpO1xuXG4gICAgICAgICAgLy8gVE9ETzogbWlzc2luZyA9IGRlbGV0ZWQgP1xuICAgICAgICAgIGlmICghZW50aXR5KSBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgYFtXU10gUmVjZWl2ZWQgZGVsZXRpb24gb24gJHt0aGlzLl9sb2dUeXBlTmFtZX0geyR7aWR9fSAtIFRPRE8gY2hlY2sgaW1wbGVtZW50YXRpb25gKTtcblxuICAgICAgICAgIHJldHVybiBlbnRpdHk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgY29weUlkQW5kVXBkYXRlRGF0ZShzb3VyY2U6IFQsIHRhcmdldDogVCkge1xuICAgIGlmICghc291cmNlKSByZXR1cm47XG5cbiAgICAvLyBVcGRhdGUgKGlkIGFuZCB1cGRhdGVEYXRlKVxuICAgIEVudGl0eVV0aWxzLmNvcHlJZEFuZFVwZGF0ZURhdGUoc291cmNlLCB0YXJnZXQpO1xuICB9XG5cblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55KTogVCB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybiBzb3VyY2U7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICB0YXJnZXQuZnJvbU9iamVjdChzb3VyY2UpO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBhc0ZpbHRlcihzb3VyY2U6IGFueSk6IEYge1xuICAgIHJldHVybiBFbnRpdHlGaWx0ZXJVdGlscy5mcm9tT2JqZWN0KHNvdXJjZSwgdGhpcy5maWx0ZXJUeXBlKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgZmlsbERlZmF1bHRQcm9wZXJ0aWVzKHNvdXJjZTogVCkge1xuICAgIC8vIENhbiBiZSBvdmVycmlkZSBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXNPYmplY3QoZW50aXR5OiBULCBvcHRzPzogRW50aXR5QXNPYmplY3RPcHRpb25zKTogYW55IHtcbiAgICAvLyBDYW4gYmUgb3ZlcnJpZGUgYnkgc3ViY2xhc3Nlc1xuICAgIHJldHVybiBlbnRpdHkuYXNPYmplY3Qob3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UmVmZXRjaFF1ZXJpZXNGb3JNdXRhdGlvbihvcHRzPzogRW50aXR5U2F2ZU9wdGlvbnMpOiAoKHJlc3VsdDogRmV0Y2hSZXN1bHQ8e2RhdGE6IGFueX0+KSA9PiBJbnRlcm5hbFJlZmV0Y2hRdWVyaWVzSW5jbHVkZSkgfCBJbnRlcm5hbFJlZmV0Y2hRdWVyaWVzSW5jbHVkZSB7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5yZWZldGNoUXVlcmllcykgcmV0dXJuIG9wdHMucmVmZXRjaFF1ZXJpZXM7XG5cbiAgICAvLyBTa2lwIGlmIHVwZGF0ZSBwb2xpY3kgbm90IHVzZWQgcmVmZWN0aCBxdWVyaWVzXG4gICAgaWYgKHRoaXMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5ICE9PSAncmVmZXRjaC1xdWVyaWVzJykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHF1ZXJpZXMgPSB0aGlzLmdldExvYWRRdWVyaWVzKCk7XG4gICAgaWYgKCFxdWVyaWVzLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gU2tpcCBpZiBlbXB0eVxuXG4gICAgLy8gRmluZCB0aGUgcmVmZXRjaCBxdWVyaWVzIGRlZmluaXRpb25cbiAgICByZXR1cm4gdGhpcy5maW5kUmVmZXRjaFF1ZXJpZXMoe3F1ZXJpZXN9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMb2FkUXVlcmllcygpOiBEb2N1bWVudE5vZGVbXSB7XG4gICAgcmV0dXJuIFt0aGlzLnF1ZXJpZXMubG9hZEFsbCwgdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoVG90YWxdLmZpbHRlcihpc05vdE5pbCk7XG4gIH1cblxufVxuIl19
|
|
446
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1lbnRpdHktc2VydmljZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9iYXNlLWVudGl0eS1zZXJ2aWNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUt0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQWlDLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQWdCLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUE0Q3ZFLFdBQVc7QUFFWCxrRUFBa0U7QUFDbEUsTUFBTSxPQUFnQixpQkFTcEIsU0FBUSxrQkFBNEI7SUFrQnBDLFlBQ1ksT0FBdUIsRUFDdkIsUUFBeUIsRUFDekIsUUFBb0IsRUFDcEIsVUFBc0IsRUFDaEMsT0FBaUQ7UUFFakQsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQU5sQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtR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RCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsS0FBSyxpQkFBaUI7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUUxRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxnQkFBZ0I7UUFFdkQsc0NBQXNDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRVMsY0FBYztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRixDQUFDOzs7WUFuZ0JGLFNBQVM7OztZQXJERCxjQUFjO1lBQ2QsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVycm9yQ29kZXMgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7IEZldGNoUG9saWN5LCBJbnRlcm5hbFJlZmV0Y2hRdWVyaWVzSW5jbHVkZSwgTXV0YXRpb25VcGRhdGVyRm4gfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcblxuaW1wb3J0IHsgQmFzZUdyYXBocWxTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLWdyYXBocWwtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBFbnRpdGllc1NlcnZpY2VXYXRjaE9wdGlvbnMsIEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucywgSUVudGl0aWVzU2VydmljZSwgSUVudGl0eVNlcnZpY2UsIExvYWRSZXN1bHQgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgR3JhcGhxbFNlcnZpY2UgfSBmcm9tICcuLi9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICcuL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRW50aXR5LCBFbnRpdHlBc09iamVjdE9wdGlvbnMsIEVudGl0eVV0aWxzIH0gZnJvbSAnLi9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgY2hhaW5Qcm9taXNlcyB9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdE5pbCwgcmVtb3ZlRW5kIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZldGNoUmVzdWx0IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvbGluay9jb3JlJztcbmltcG9ydCB7IEVudGl0eUZpbHRlciwgRW50aXR5RmlsdGVyVXRpbHMgfSBmcm9tICcuL21vZGVsL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGUgfSBmcm9tICdncmFwaHFsJztcblxuZXhwb3J0IHR5cGUgTXV0YWJsZVdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9ICd1cGRhdGUtY2FjaGUnIHwgJ3JlZmV0Y2gtcXVlcmllcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUVudGl0eUdyYXBocWxRdWVyaWVzIHtcbiAgbG9hZD86IGFueTtcbiAgbG9hZEFsbDogYW55O1xuICBsb2FkQWxsV2l0aFRvdGFsPzogYW55O1xuICBjb3VudEFsbD86IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnMge1xuICBzYXZlPzogYW55O1xuICBkZWxldGU/OiBhbnk7XG4gIHNhdmVBbGw/OiBhbnk7XG4gIGRlbGV0ZUFsbD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlRW50aXR5R3JhcGhxbFN1YnNjcmlwdGlvbnMge1xuICBsaXN0ZW5DaGFuZ2VzPzogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBCYXNlRW50aXR5U2VydmljZU9wdGlvbnM8XG4gIFQgZXh0ZW5kcyBFbnRpdHk8YW55LCBJRD4sXG4gIElEID0gbnVtYmVyLFxuICBRIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxRdWVyaWVzID0gQmFzZUVudGl0eUdyYXBocWxRdWVyaWVzLFxuICBNIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnMgPSBCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucyxcbiAgUyBleHRlbmRzIEJhc2VFbnRpdHlHcmFwaHFsU3Vic2NyaXB0aW9ucyA9IEJhc2VFbnRpdHlHcmFwaHFsU3Vic2NyaXB0aW9ucz4ge1xuICBxdWVyaWVzOiBRO1xuICBtdXRhdGlvbnM/OiBQYXJ0aWFsPE0+O1xuICBzdWJzY3JpcHRpb25zPzogUGFydGlhbDxTPjtcbiAgZXF1YWxzRm4/OiAoZTE6IFQsIGUyOiBUKSA9PiBib29sZWFuO1xuICBpc05ld0ZuPzogKGU6IFQpID0+IGJvb2xlYW47XG4gIGRlZmF1bHRTb3J0Qnk/OiBrZXlvZiBUO1xuICBkZWZhdWx0U29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb247XG4gIHdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeT86IE11dGFibGVXYXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3k7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5U2F2ZU9wdGlvbnMge1xuICByZWZldGNoUXVlcmllcz86ICgocmVzdWx0OiBGZXRjaFJlc3VsdDx7ZGF0YTogYW55fT4pID0+IEludGVybmFsUmVmZXRjaFF1ZXJpZXNJbmNsdWRlKSB8IEludGVybmFsUmVmZXRjaFF1ZXJpZXNJbmNsdWRlO1xuICBhd2FpdFJlZmV0Y2hRdWVyaWVzPzogYm9vbGVhbjtcbiAgdXBkYXRlPzogTXV0YXRpb25VcGRhdGVyRm48eyBkYXRhOiBhbnk7IH0+O1xufVxuXG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VFbnRpdHlTZXJ2aWNlPFxuICBUIGV4dGVuZHMgRW50aXR5PFQsIElEPixcbiAgRiBleHRlbmRzIEVudGl0eUZpbHRlcjxGLCBULCBJRD4sXG4gIElEID0gbnVtYmVyLFxuICBXTyBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyA9IEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyxcbiAgTE8gZXh0ZW5kcyBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMgPSBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsXG4gIFEgZXh0ZW5kcyBCYXNlRW50aXR5R3JhcGhxbFF1ZXJpZXMgPSBCYXNlRW50aXR5R3JhcGhxbFF1ZXJpZXMsXG4gIE0gZXh0ZW5kcyBCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucyA9IEJhc2VFbnRpdHlHcmFwaHFsTXV0YXRpb25zLFxuICBTIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxTdWJzY3JpcHRpb25zID0gQmFzZUVudGl0eUdyYXBocWxTdWJzY3JpcHRpb25zPlxuICBleHRlbmRzIEJhc2VHcmFwaHFsU2VydmljZTxULCBGLCBJRD5cbiAgaW1wbGVtZW50c1xuICAgIElFbnRpdGllc1NlcnZpY2U8VCwgRiwgV08+LFxuICAgIElFbnRpdHlTZXJ2aWNlPFQsIElELCBMTz4ge1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBfdHlwZW5hbWU6IHN0cmluZztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9sb2dUeXBlTmFtZTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyaWVzOiBRO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbXV0YXRpb25zOiBQYXJ0aWFsPE0+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3Vic2NyaXB0aW9uczogUGFydGlhbDxTPjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVxdWFsc0ZuOiAoZTE6IFQsIGUyOiBUKSA9PiBib29sZWFuO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNOZXdGbjogKGU6IFQpID0+IGJvb2xlYW47XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRTb3J0Qnk6IGtleW9mIFQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0U29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeTogTXV0YWJsZVdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGdyYXBocWw6IEdyYXBocWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBkYXRhVHlwZTogbmV3KCkgPT4gVCxcbiAgICBwcm90ZWN0ZWQgZmlsdGVyVHlwZTogbmV3KCkgPT4gRixcbiAgICBvcHRpb25zOiBCYXNlRW50aXR5U2VydmljZU9wdGlvbnM8VCwgSUQsIFEsIE0sIFM+XG4gICkge1xuICAgIHN1cGVyKGdyYXBocWwsIGVudmlyb25tZW50KTtcbiAgICB0aGlzLnF1ZXJpZXMgPSBvcHRpb25zLnF1ZXJpZXM7XG4gICAgdGhpcy5tdXRhdGlvbnMgPSBvcHRpb25zLm11dGF0aW9ucyB8fCA8UGFydGlhbDxNPj57fTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBvcHRpb25zLnN1YnNjcmlwdGlvbnMgfHwgPFBhcnRpYWw8Uz4+e307XG4gICAgdGhpcy5lcXVhbHNGbiA9IG9wdGlvbnMuZXF1YWxzRm4gfHwgKChlMSwgZTIpID0+IEVudGl0eVV0aWxzLmVxdWFscyhlMSwgZTIsICdpZCcpKTtcbiAgICB0aGlzLmlzTmV3Rm4gPSBvcHRpb25zLmlzTmV3Rm4gfHwgKChlKSA9PiBFbnRpdHlVdGlscy5pc05vdEVtcHR5KGUsICdpZCcpKTtcbiAgICB0aGlzLmRlZmF1bHRTb3J0QnkgPSBvcHRpb25zLmRlZmF1bHRTb3J0QnkgfHwgJ2lkJztcbiAgICB0aGlzLmRlZmF1bHRTb3J0RGlyZWN0aW9uID0gb3B0aW9ucy5kZWZhdWx0U29ydERpcmVjdGlvbiB8fCAnYXNjJztcbiAgICB0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9IG9wdGlvbnMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5IHx8ICd1cGRhdGUtY2FjaGUnO1xuXG4gICAgcGxhdGZvcm0ucmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgIC8vIE5vIGxpbWl0IGZvciB1cGRhdGFibGUgd2F0Y2ggcXVlcmllcywgaWYgZGVza3RvcFxuICAgICAgaWYgKCFwbGF0Zm9ybS5tb2JpbGUpIHtcbiAgICAgICAgdGhpcy5fbXV0YWJsZVdhdGNoUXVlcmllc01heENvdW50ID0gLTE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBvYmogPSBuZXcgZGF0YVR5cGUoKTtcbiAgICB0aGlzLl90eXBlbmFtZSA9IG9iai5fX3R5cGVuYW1lIHx8ICdVbmtub3duVk8nO1xuICAgIHRoaXMuX2xvZ1R5cGVOYW1lID0gcmVtb3ZlRW5kKHRoaXMuX3R5cGVuYW1lLCAnVk8nKTtcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICB3YXRjaChpZDogbnVtYmVyLCBvcHRzPzogV08gJiB7IHF1ZXJ5PzogYW55IH0pOiBPYnNlcnZhYmxlPFQ+IHtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgV2F0Y2hpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0geyR7aWR9fS4uLmApO1xuXG4gICAgY29uc3QgcXVlcnkgPSBvcHRzICYmIG9wdHMucXVlcnkgfHwgdGhpcy5xdWVyaWVzLmxvYWQ7XG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC53YXRjaFF1ZXJ5PHtkYXRhOiBhbnl9Pih7XG4gICAgICBxdWVyeSxcbiAgICAgIHZhcmlhYmxlczogeyBpZCB9LFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdHMgJiYgKG9wdHMuZmV0Y2hQb2xpY3kgYXMgRmV0Y2hQb2xpY3kpIHx8IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiB7Y29kZTogRXJyb3JDb2Rlcy5MT0FEX0RBVEFfRVJST1IsIG1lc3NhZ2U6ICdSRUZFUkVOVElBTC5FUlJPUi5MT0FEX0RBVEFfRVJST1InfVxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7ZGF0YX0pID0+ICghb3B0cyB8fCBvcHRzLnRvRW50aXR5ICE9PSBmYWxzZSlcbiAgICAgICAgICAgID8gKGRhdGEgJiYgdGhpcy5mcm9tT2JqZWN0KGRhdGEpKVxuICAgICAgICAgICAgOiAoZGF0YSBhcyBUKSlcbiAgICAgICk7XG4gIH1cblxuICBhc3luYyBsb2FkKGlkOiBJRCwgb3B0cz86IExPICYgeyBxdWVyeT86IGFueSB9KTogUHJvbWlzZTxUPiB7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYExvYWRpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0geyR7aWR9fS4uLmApO1xuICAgIGNvbnN0IHF1ZXJ5ID0gb3B0cyAmJiBvcHRzLnF1ZXJ5IHx8IHRoaXMucXVlcmllcy5sb2FkO1xuXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8e2RhdGE6IGFueX0+KHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7IGlkIH0sXG4gICAgICBmZXRjaFBvbGljeTogb3B0cyAmJiAob3B0cy5mZXRjaFBvbGljeSBhcyBGZXRjaFBvbGljeSkgfHwgdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IHtjb2RlOiBFcnJvckNvZGVzLkxPQURfREFUQV9FUlJPUiwgbWVzc2FnZTogJ1JFRkVSRU5USUFMLkVSUk9SLkxPQURfREFUQV9FUlJPUid9XG4gICAgfSk7XG5cbiAgICAvLyBDb252ZXJ0IHRvIGVudGl0eVxuICAgIHJldHVybiAoIW9wdHMgfHwgb3B0cy50b0VudGl0eSAhPT0gZmFsc2UpXG4gICAgICA/IChkYXRhICYmIHRoaXMuZnJvbU9iamVjdChkYXRhKSlcbiAgICAgIDogKGRhdGEgYXMgVCk7XG4gIH1cblxuICB3YXRjaEFsbChvZmZzZXQ6IG51bWJlcixcbiAgICAgICAgICAgc2l6ZTogbnVtYmVyLFxuICAgICAgICAgICBzb3J0Qnk/OiBzdHJpbmcsXG4gICAgICAgICAgIHNvcnREaXJlY3Rpb24/OiBTb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICBmaWx0ZXI/OiBGLFxuICAgICAgICAgICBvcHRzPzogV08gJiB7IHF1ZXJ5PzogYW55IH1cbiAgKTogT2JzZXJ2YWJsZTxMb2FkUmVzdWx0PFQ+PiB7XG5cbiAgICBmaWx0ZXIgPSB0aGlzLmFzRmlsdGVyKGZpbHRlcik7XG5cbiAgICBjb25zdCB2YXJpYWJsZXM6IGFueSA9IHtcbiAgICAgIG9mZnNldDogb2Zmc2V0IHx8IDAsXG4gICAgICBzaXplOiBzaXplIHx8IDEwMCxcbiAgICAgIHNvcnRCeTogc29ydEJ5IHx8IHRoaXMuZGVmYXVsdFNvcnRCeSxcbiAgICAgIHNvcnREaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gfHwgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbixcbiAgICAgIGZpbHRlcjogZmlsdGVyICYmIGZpbHRlci5hc1BvZE9iamVjdCgpXG4gICAgfTtcblxuICAgIGxldCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgV2F0Y2hpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0uLi5gLCB2YXJpYWJsZXMpO1xuXG4gICAgY29uc3Qgd2l0aFRvdGFsID0gKCFvcHRzIHx8IG9wdHMud2l0aFRvdGFsICE9PSBmYWxzZSkgJiYgdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoVG90YWwgJiYgdHJ1ZTtcbiAgICBjb25zdCBxdWVyeSA9IChvcHRzICYmIG9wdHMucXVlcnkpIC8vIHVzZSBnaXZlbiBxdWVyeVxuICAgICAgLy8gT3IgZ2V0IGxvYWRBbGwgb3IgbG9hZEFsbFdpdGhUb3RhbCBxdWVyeVxuICAgICAgfHwgKHdpdGhUb3RhbCA/IHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aFRvdGFsICA6IHRoaXMucXVlcmllcy5sb2FkQWxsKTtcbiAgICByZXR1cm4gdGhpcy5tdXRhYmxlV2F0Y2hRdWVyeTxMb2FkUmVzdWx0PGFueT4+KHtcbiAgICAgIHF1ZXJ5TmFtZTogd2l0aFRvdGFsID8gJ0xvYWRBbGxXaXRoVG90YWwnIDogJ0xvYWRBbGwnLFxuICAgICAgcXVlcnksXG4gICAgICBhcnJheUZpZWxkTmFtZTogJ2RhdGEnLFxuICAgICAgdG90YWxGaWVsZE5hbWU6IHdpdGhUb3RhbCA/ICd0b3RhbCcgOiB1bmRlZmluZWQsXG4gICAgICBpbnNlcnRGaWx0ZXJGbjogZmlsdGVyICYmIGZpbHRlci5hc0ZpbHRlckZuKCksXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICBlcnJvcjoge2NvZGU6IEVycm9yQ29kZXMuTE9BRF9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnUkVGRVJFTlRJQUwuRVJST1IuTE9BRF9EQVRBX0VSUk9SJ30sXG4gICAgICBmZXRjaFBvbGljeTogb3B0cyAmJiBvcHRzLmZldGNoUG9saWN5IHx8IHVuZGVmaW5lZFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7ZGF0YSwgdG90YWx9KSA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBlbnRpdHkgKGlmIG5lZWQpXG4gICAgICAgICAgY29uc3QgZW50aXRpZXMgPSAoIW9wdHMgfHwgb3B0cy50b0VudGl0eSAhPT0gZmFsc2UpXG4gICAgICAgICAgICA/IChkYXRhIHx8IFtdKS5tYXAoanNvbiA9PiB0aGlzLmZyb21PYmplY3QoanNvbikpXG4gICAgICAgICAgICA6IChkYXRhIHx8IFtdKSBhcyBUW107XG5cbiAgICAgICAgICBpZiAobm93KSB7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGAke3RoaXMuX2xvZ1R5cGVOYW1lfSBsb2FkZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCwgZW50aXRpZXMpO1xuICAgICAgICAgICAgbm93ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtkYXRhOiBlbnRpdGllcywgdG90YWx9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRBbGwob2Zmc2V0OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgc2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgIHNvcnRCeT86IHN0cmluZyxcbiAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbixcbiAgICAgICAgICAgICAgICBmaWx0ZXI/OiBQYXJ0aWFsPEY+LFxuICAgICAgICAgICAgICAgIG9wdHM/OiBMTyAmIHtcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5PzogYW55O1xuICAgICAgICAgICAgICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgd2l0aFRvdGFsPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICB9XG4gICk6IFByb21pc2U8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgY29uc3QgZGVidWcgPSB0aGlzLl9kZWJ1ZyAmJiAoIW9wdHMgfHwgb3B0cy5kZWJ1ZyAhPT0gZmFsc2UpO1xuXG4gICAgZmlsdGVyID0gdGhpcy5hc0ZpbHRlcihmaWx0ZXIpO1xuXG4gICAgY29uc3QgdmFyaWFibGVzOiBhbnkgPSB7XG4gICAgICBvZmZzZXQ6IG9mZnNldCB8fCAwLFxuICAgICAgc2l6ZTogc2l6ZSB8fCAxMDAsXG4gICAgICBzb3J0Qnk6IHNvcnRCeSB8fCAnaWQnLFxuICAgICAgc29ydERpcmVjdGlvbjogc29ydERpcmVjdGlvbiB8fCAnYXNjJyxcbiAgICAgIGZpbHRlcjogZmlsdGVyICYmIGZpbHRlci5hc1BvZE9iamVjdCgpXG4gICAgfTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgaWYgKGRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBMb2FkaW5nICR7dGhpcy5fbG9nVHlwZU5hbWV9Li4uYCwgdmFyaWFibGVzKTtcblxuICAgIGNvbnN0IHdpdGhUb3RhbCA9ICghb3B0cyB8fCBvcHRzLndpdGhUb3RhbCAhPT0gZmFsc2UpICYmIHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aFRvdGFsICYmIHRydWU7XG4gICAgY29uc3QgcXVlcnkgPSAob3B0cyAmJiBvcHRzLnF1ZXJ5KSAvLyB1c2UgZ2l2ZW4gcXVlcnlcbiAgICAgIC8vIE9yIGdldCBsb2FkQWxsIG9yIGxvYWRBbGxXaXRoVG90YWwgcXVlcnlcbiAgICAgIHx8ICh3aXRoVG90YWwgPyB0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhUb3RhbCAgOiB0aGlzLnF1ZXJpZXMubG9hZEFsbCk7XG4gICAgY29uc3Qge2RhdGEsIHRvdGFsfSA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTxMb2FkUmVzdWx0PGFueT4+KHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgdmFyaWFibGVzLFxuICAgICAgZXJyb3I6IHtjb2RlOiBFcnJvckNvZGVzLkxPQURfREFUQV9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfREFUQV9FUlJPUid9LFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdHMgJiYgb3B0cy5mZXRjaFBvbGljeSB8fCAnbmV0d29yay1vbmx5J1xuICAgIH0pO1xuICAgIGNvbnN0IGVudGl0aWVzID0gKCFvcHRzIHx8IG9wdHMudG9FbnRpdHkgIT09IGZhbHNlKSA/XG4gICAgICAoZGF0YSB8fCBbXSkubWFwKGpzb24gPT4gdGhpcy5mcm9tT2JqZWN0KGpzb24pKSA6XG4gICAgICAoZGF0YSB8fCBbXSkgYXMgVFtdO1xuICAgIGlmIChkZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgJHt0aGlzLl9sb2dUeXBlTmFtZX0gaXRlbXMgbG9hZGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgY29uc3QgcmVzOiBMb2FkUmVzdWx0PFQ+ID0ge1xuICAgICAgZGF0YTogZW50aXRpZXMsXG4gICAgICB0b3RhbFxuICAgIH07XG5cbiAgICAvLyBBZGQgZmV0Y2ggbW9yZSBjYXBhYmlsaXR5LCBpZiB0b3RhbCB3YXMgZmV0Y2hlZFxuICAgIGlmICh3aXRoVG90YWwpIHtcbiAgICAgIGNvbnN0IG5leHRPZmZzZXQgPSBvZmZzZXQgKyBlbnRpdGllcy5sZW5ndGg7XG4gICAgICBpZiAobmV4dE9mZnNldCA8IHJlcy50b3RhbCkge1xuICAgICAgICByZXMuZmV0Y2hNb3JlID0gKCkgPT4gdGhpcy5sb2FkQWxsKG5leHRPZmZzZXQsIHNpemUsIHNvcnRCeSwgc29ydERpcmVjdGlvbiwgZmlsdGVyLCBvcHRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgYXN5bmMgY291bnRBbGwoZmlsdGVyPzogUGFydGlhbDxGPiwgb3B0cz86IExPKSB7XG4gICAgLy8gSWYgbm8gY291bnRBbGwgcXVlcnlcbiAgICBpZiAoIXRoaXMucXVlcmllcy5jb3VudEFsbCkge1xuICAgICAgLy8gRmFpbCBpZiBubyBsb2FkQWxsIChjYW5ub3QgY291bnQpXG4gICAgICBpZiAoIXRoaXMucXVlcmllcy5sb2FkQWxsV2l0aFRvdGFsKSB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuXG4gICAgICAvLyBVc2UgbG9hZEFsbCBxdWVyeSwgd2l0aCBzaXplID0gMDtcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5sb2FkQWxsKDAsIDEsIG51bGwsIG51bGwsIGZpbHRlcixcbiAgICAgICAgPExPICYgeyB3aXRoVG90YWw6IGJvb2xlYW47IH0+e3dpdGhUb3RhbDogdHJ1ZX0pKT8udG90YWwgfHwgMDtcbiAgICB9XG5cbiAgICBmaWx0ZXIgPSB0aGlzLmFzRmlsdGVyKGZpbHRlcik7XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyB0b3RhbDogbnVtYmVyO30+KHtcbiAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXMuY291bnRBbGwsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIgJiYgZmlsdGVyLmFzUG9kT2JqZWN0KClcbiAgICAgIH0sXG4gICAgICBlcnJvcjoge2NvZGU6IEVycm9yQ29kZXMuTE9BRF9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuQ09VTlRfREFUQV9FUlJPUid9LFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdHMgJiYgb3B0cy5mZXRjaFBvbGljeSB8fCAnbmV0d29yay1vbmx5J1xuICAgIH0pO1xuICAgIHJldHVybiByZXMudG90YWw7XG4gIH1cblxuICBhc3luYyBzYXZlQWxsKGVudGl0aWVzOiBUW10sIG9wdHM/OiBFbnRpdHlTYXZlT3B0aW9ucyk6IFByb21pc2U8VFtdPiB7XG4gICAgaWYgKGlzRW1wdHlBcnJheShlbnRpdGllcykpIHJldHVybiBlbnRpdGllczsgLy8gTm90aGluZyB0byBzYXZlOiBza2lwXG5cbiAgICBpZiAoIXRoaXMubXV0YXRpb25zLnNhdmVBbGwpIHtcbiAgICAgIGlmICghdGhpcy5tdXRhdGlvbnMuc2F2ZSkgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgIC8vIFNhdmUgb25lIGJ5IG9uZVxuICAgICAgcmV0dXJuIGNoYWluUHJvbWlzZXMoKGVudGl0aWVzIHx8IFtdKVxuICAgICAgICAubWFwKGVudGl0eSA9PiAoKCkgPT4gdGhpcy5zYXZlKGVudGl0eSwgb3B0cykpKSk7XG4gICAgfVxuXG4gICAgbGV0IGhhc05ld0VudGl0aWVzID0gZmFsc2U7XG4gICAgY29uc3QganNvbiA9IGVudGl0aWVzLm1hcChlbnRpdHkgPT4ge1xuICAgICAgaGFzTmV3RW50aXRpZXMgPSBoYXNOZXdFbnRpdGllcyB8fCB0aGlzLmlzTmV3Rm4oZW50aXR5KTtcbiAgICAgIHRoaXMuZmlsbERlZmF1bHRQcm9wZXJ0aWVzKGVudGl0eSk7XG4gICAgICByZXR1cm4gdGhpcy5hc09iamVjdChlbnRpdHkpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYFNhdmluZyBhbGwgJHt0aGlzLl9sb2dUeXBlTmFtZX0uLi5gLCBqc29uKTtcblxuICAgIGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8TG9hZFJlc3VsdDxhbnk+Pih7XG4gICAgICBtdXRhdGlvbjogdGhpcy5tdXRhdGlvbnMuc2F2ZUFsbCxcbiAgICAgIHJlZmV0Y2hRdWVyaWVzOiB0aGlzLmdldFJlZmV0Y2hRdWVyaWVzRm9yTXV0YXRpb24ob3B0cyksXG4gICAgICBhd2FpdFJlZmV0Y2hRdWVyaWVzOiBvcHRzICYmIG9wdHMuYXdhaXRSZWZldGNoUXVlcmllcyxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBkYXRhOiBqc29uXG4gICAgICB9LFxuICAgICAgZXJyb3I6IHtjb2RlOiBFcnJvckNvZGVzLlNBVkVfREFUQV9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLlNBVkVfREFUQV9FUlJPUid9LFxuICAgICAgdXBkYXRlOiAocHJveHksIHtkYXRhfSkgPT4ge1xuICAgICAgICBjb25zdCBzYXZlZEVudGl0aWVzID0gZGF0YSAmJiBkYXRhLmRhdGE7XG4gICAgICAgIGlmIChzYXZlZEVudGl0aWVzKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIGVudGl0aWVzIChpZCBhbmQgdXBkYXRlIGRhdGUpXG4gICAgICAgICAgZW50aXRpZXMuZm9yRWFjaChlbnRpdHkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2F2ZWRFbnRpdHkgPSBzYXZlZEVudGl0aWVzLmZpbmQoZSA9PiB0aGlzLmVxdWFsc0ZuKGUsIGVudGl0eSkpO1xuICAgICAgICAgICAgdGhpcy5jb3B5SWRBbmRVcGRhdGVEYXRlKHNhdmVkRW50aXR5LCBlbnRpdHkpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKGhhc05ld0VudGl0aWVzICYmIHRoaXMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5ID09PSAndXBkYXRlLWNhY2hlJykge1xuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBjYWNoZVxuICAgICAgICAgICAgdGhpcy5pbnNlcnRJbnRvTXV0YWJsZUNhY2hlZFF1ZXJpZXMocHJveHksIHtcbiAgICAgICAgICAgICAgcXVlcmllczogdGhpcy5nZXRMb2FkUXVlcmllcygpLFxuICAgICAgICAgICAgICBkYXRhOiBzYXZlZEVudGl0aWVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKHByb3h5LCB7ZGF0YX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1R5cGVOYW1lfSBzYXZlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgLCBlbnRpdGllcyk7XG5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbnRpdGllcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGEgcmVmZXJlbnRpYWwgZW50aXR5XG4gICAqXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIHNhdmUoZW50aXR5OiBULCBvcHRzPzogRW50aXR5U2F2ZU9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXRoaXMubXV0YXRpb25zLnNhdmUpIHtcbiAgICAgIGlmICghdGhpcy5tdXRhdGlvbnMuc2F2ZUFsbCkgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnNhdmVBbGwoW2VudGl0eV0sIG9wdHMpO1xuICAgICAgcmV0dXJuIGRhdGEgJiYgZGF0YVswXTtcbiAgICB9XG5cbiAgICAvLyBGaWxsIGRlZmF1bHQgcHJvcGVydGllc1xuICAgIHRoaXMuZmlsbERlZmF1bHRQcm9wZXJ0aWVzKGVudGl0eSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gaW50byBqc29uXG4gICAgY29uc3QganNvbiA9IHRoaXMuYXNPYmplY3QoZW50aXR5KTtcblxuICAgIGNvbnN0IGlzTmV3ID0gdGhpcy5pc05ld0ZuKGpzb24pO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYFNhdmluZyAke3RoaXMuX2xvZ1R5cGVOYW1lfS4uLmAsIGpzb24pO1xuXG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7ZGF0YTogYW55fT4oe1xuICAgICAgbXV0YXRpb246IHRoaXMubXV0YXRpb25zLnNhdmUsXG4gICAgICByZWZldGNoUXVlcmllczogdGhpcy5nZXRSZWZldGNoUXVlcmllc0Zvck11dGF0aW9uKG9wdHMpLFxuICAgICAgYXdhaXRSZWZldGNoUXVlcmllczogb3B0cyAmJiBvcHRzLmF3YWl0UmVmZXRjaFF1ZXJpZXMsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZGF0YToganNvblxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7Y29kZTogRXJyb3JDb2Rlcy5TQVZFX0RBVEFfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX0RBVEFfRVJST1InfSxcbiAgICAgIHVwZGF0ZTogKGNhY2hlLCB7ZGF0YX0pID0+IHtcbiAgICAgICAgLy8gVXBkYXRlIGVudGl0eVxuICAgICAgICBjb25zdCBzYXZlZEVudGl0eSA9IGRhdGEgJiYgZGF0YS5kYXRhO1xuICAgICAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGUoc2F2ZWRFbnRpdHksIGVudGl0eSk7XG5cbiAgICAgICAgLy8gSW5zZXJ0IGludG8gdGhlIGNhY2hlXG4gICAgICAgIGlmIChpc05ldyAmJiB0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9PT0gJ3VwZGF0ZS1jYWNoZScpIHtcbiAgICAgICAgICB0aGlzLmluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcmllcyhjYWNoZSwge1xuICAgICAgICAgICAgcXVlcmllczogdGhpcy5nZXRMb2FkUXVlcmllcygpLFxuICAgICAgICAgICAgZGF0YTogc2F2ZWRFbnRpdHlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMudXBkYXRlKSB7XG4gICAgICAgICAgb3B0cy51cGRhdGUoY2FjaGUsIHtkYXRhfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYCR7ZW50aXR5Ll9fdHlwZW5hbWV9IHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2AsIGVudGl0eSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSByZWZlcmVudGlhbCBlbnRpdGllc1xuICAgKi9cbiAgYXN5bmMgZGVsZXRlQWxsKGVudGl0aWVzOiBUW10sIG9wdHM/OiBQYXJ0aWFsPHtcbiAgICB1cGRhdGU6IE11dGF0aW9uVXBkYXRlckZuPGFueT47XG4gIH0+IHwgYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMubXV0YXRpb25zLmRlbGV0ZUFsbCkge1xuICAgICAgaWYgKCF0aGlzLm11dGF0aW9ucy5kZWxldGUpIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgICAvLyBEZWxldGUgb25lIGJ5IG9uZVxuICAgICAgcmV0dXJuIGNoYWluUHJvbWlzZXMoKGVudGl0aWVzIHx8IFtdKVxuICAgICAgICAubWFwKGVudGl0eSA9PiAoKCkgPT4gdGhpcy5kZWxldGUoZW50aXR5LCBvcHRzKSkpKTtcbiAgICB9XG5cbiAgICAvLyBGaWx0ZXIgc2F2ZWQgZW50aXRpZXNcbiAgICBlbnRpdGllcyA9IGVudGl0aWVzICYmIGVudGl0aWVzLmZpbHRlcihlID0+IGlzTm90TmlsKGUuaWQpKTtcblxuICAgIC8vIE5vdGhpbmcgdG8gc2F2ZTogc2tpcFxuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpKSByZXR1cm47XG5cbiAgICBjb25zdCBpZHMgPSBlbnRpdGllcy5tYXAodCA9PiB0LmlkKTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgRGVsZXRpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0uLi5gLCBpZHMpO1xuXG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTxhbnk+KHtcbiAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9ucy5kZWxldGVBbGwsXG4gICAgICByZWZldGNoUXVlcmllczogdGhpcy5nZXRSZWZldGNoUXVlcmllc0Zvck11dGF0aW9uKG9wdHMpLFxuICAgICAgYXdhaXRSZWZldGNoUXVlcmllczogb3B0cyAmJiBvcHRzLmF3YWl0UmVmZXRjaFF1ZXJpZXMsXG4gICAgICB2YXJpYWJsZXM6IHsgaWRzIH0sXG4gICAgICBlcnJvcjoge2NvZGU6IEVycm9yQ29kZXMuREVMRVRFX0RBVEFfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5ERUxFVEVfREFUQV9FUlJPUid9LFxuICAgICAgdXBkYXRlOiAoY2FjaGUsIHJlcykgPT4ge1xuXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGNhY2hlXG4gICAgICAgIGlmICh0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9PT0gJ3VwZGF0ZS1jYWNoZScpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21NdXRhYmxlQ2FjaGVkUXVlcmllc0J5SWRzKGNhY2hlLCB7XG4gICAgICAgICAgICBxdWVyaWVzOiB0aGlzLmdldExvYWRRdWVyaWVzKCksXG4gICAgICAgICAgICBpZHNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMudXBkYXRlKSB7XG4gICAgICAgICAgb3B0cy51cGRhdGUoY2FjaGUsIHJlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYCR7dGhpcy5fbG9nVHlwZU5hbWV9IGRlbGV0ZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGEgcmVmZXJlbnRpYWwgZW50aXR5XG4gICAqL1xuICBhc3luYyBkZWxldGUoZW50aXR5OiBULCBvcHRzPzogRW50aXR5U2F2ZU9wdGlvbnMgfCBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGhpcy5tdXRhdGlvbnMuZGVsZXRlKSB7XG4gICAgICBpZiAoIXRoaXMubXV0YXRpb25zLmRlbGV0ZUFsbCkgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRlbGV0ZUFsbChbZW50aXR5XSwgb3B0cyk7XG4gICAgICByZXR1cm4gZGF0YSAmJiBkYXRhWzBdO1xuICAgIH1cblxuICAgIC8vIE5vdGhpbmcgdG8gc2F2ZTogc2tpcFxuICAgIGlmICghZW50aXR5IHx8IGlzTmlsKGVudGl0eS5pZCkpIHJldHVybjtcblxuICAgIGNvbnN0IGlkID0gZW50aXR5LmlkO1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBEZWxldGluZyAke3RoaXMuX2xvZ1R5cGVOYW1lfSB7JHtpZH19Li4uYCk7XG5cbiAgICBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPGFueT4oe1xuICAgICAgbXV0YXRpb246IHRoaXMubXV0YXRpb25zLmRlbGV0ZSxcbiAgICAgIHJlZmV0Y2hRdWVyaWVzOiB0aGlzLmdldFJlZmV0Y2hRdWVyaWVzRm9yTXV0YXRpb24ob3B0cyksXG4gICAgICBhd2FpdFJlZmV0Y2hRdWVyaWVzOiBvcHRzICYmIG9wdHMuYXdhaXRSZWZldGNoUXVlcmllcyxcbiAgICAgIHZhcmlhYmxlczogeyBpZCB9LFxuICAgICAgZXJyb3I6IHtjb2RlOiBFcnJvckNvZGVzLkRFTEVURV9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuREVMRVRFX0RBVEFfRVJST1InfSxcbiAgICAgIHVwZGF0ZTogKHByb3h5LCByZXMpID0+IHtcblxuICAgICAgICAvLyBSZW1vdmUgZnJvbSBjYWNoZVxuICAgICAgICBpZiAodGhpcy53YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgPT09ICd1cGRhdGUtY2FjaGUnKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGcm9tTXV0YWJsZUNhY2hlZFF1ZXJpZXNCeUlkcyhwcm94eSwge1xuICAgICAgICAgICAgcXVlcmllczogdGhpcy5nZXRMb2FkUXVlcmllcygpLFxuICAgICAgICAgICAgaWRzOiBbaWRdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKHByb3h5LCByZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGAke3RoaXMuX2xvZ1R5cGVOYW1lfSBkZWxldGVkIGluICR7bmV3IERhdGUoKS5nZXRUaW1lKCkgLSBub3cuZ2V0VGltZSgpfW1zYCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsaXN0ZW5DaGFuZ2VzKGlkOiBJRCwgb3B0cz86IHtcbiAgICBxdWVyeT86IGFueTtcbiAgICB2YXJpYWJsZXM/OiBhbnk7XG4gICAgaW50ZXJ2YWw/OiBudW1iZXI7XG4gICAgdG9FbnRpdHk/OiBib29sZWFuO1xuICB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgaWYgKGlzTmlsKGlkKSkgdGhyb3cgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwnaWRcXCcgJyk7XG4gICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnMubGlzdGVuQ2hhbmdlcykgdGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCEnKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlcyA9IG9wdHMgJiYgb3B0cy52YXJpYWJsZXMgfHwge1xuICAgICAgaWQsXG4gICAgICBpbnRlcnZhbDogb3B0cyAmJiBvcHRzLmludGVydmFsIHx8IDEwIC8vIHNlY29uZHNcbiAgICB9O1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgW1dTXSBMaXN0ZW5pbmcgZm9yIGNoYW5nZXMgb24gJHt0aGlzLl9sb2dUeXBlTmFtZX0geyR7aWR9fS4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC5zdWJzY3JpYmU8e2RhdGE6IGFueX0+KHtcbiAgICAgIHF1ZXJ5OiBvcHRzICYmIG9wdHMucXVlcnkgfHwgdGhpcy5zdWJzY3JpcHRpb25zLmxpc3RlbkNoYW5nZXMsXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNVQlNDUklCRV9EQVRBX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnRVJST1IuU1VCU0NSSUJFX0RBVEFfRVJST1InXG4gICAgICB9XG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHtkYXRhfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9ICghb3B0cyB8fCBvcHRzLnRvRW50aXR5ICE9PSBmYWxzZSkgPyBkYXRhICYmIHRoaXMuZnJvbU9iamVjdChkYXRhKSA6IGRhdGE7XG4gICAgICAgICAgaWYgKGVudGl0eSAmJiB0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgW1dTXSBSZWNlaXZlZCBjaGFuZ2VzIG9uICR7dGhpcy5fbG9nVHlwZU5hbWV9IHske2lkfX1gLCBlbnRpdHkpO1xuXG4gICAgICAgICAgLy8gVE9ETzogbWlzc2luZyA9IGRlbGV0ZWQgP1xuICAgICAgICAgIGlmICghZW50aXR5KSBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgYFtXU10gUmVjZWl2ZWQgZGVsZXRpb24gb24gJHt0aGlzLl9sb2dUeXBlTmFtZX0geyR7aWR9fSAtIFRPRE8gY2hlY2sgaW1wbGVtZW50YXRpb25gKTtcblxuICAgICAgICAgIHJldHVybiBlbnRpdHk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgY29weUlkQW5kVXBkYXRlRGF0ZShzb3VyY2U6IFQsIHRhcmdldDogVCkge1xuICAgIGlmICghc291cmNlKSByZXR1cm47XG5cbiAgICAvLyBVcGRhdGUgKGlkIGFuZCB1cGRhdGVEYXRlKVxuICAgIEVudGl0eVV0aWxzLmNvcHlJZEFuZFVwZGF0ZURhdGUoc291cmNlLCB0YXJnZXQpO1xuICB9XG5cblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55KTogVCB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybiBzb3VyY2U7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICB0YXJnZXQuZnJvbU9iamVjdChzb3VyY2UpO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBhc0ZpbHRlcihzb3VyY2U6IGFueSk6IEYge1xuICAgIHJldHVybiBFbnRpdHlGaWx0ZXJVdGlscy5mcm9tT2JqZWN0KHNvdXJjZSwgdGhpcy5maWx0ZXJUeXBlKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgZmlsbERlZmF1bHRQcm9wZXJ0aWVzKHNvdXJjZTogVCkge1xuICAgIC8vIENhbiBiZSBvdmVycmlkZSBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXNPYmplY3QoZW50aXR5OiBULCBvcHRzPzogRW50aXR5QXNPYmplY3RPcHRpb25zKTogYW55IHtcbiAgICAvLyBDYW4gYmUgb3ZlcnJpZGUgYnkgc3ViY2xhc3Nlc1xuICAgIHJldHVybiBlbnRpdHkuYXNPYmplY3Qob3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UmVmZXRjaFF1ZXJpZXNGb3JNdXRhdGlvbihvcHRzPzogRW50aXR5U2F2ZU9wdGlvbnMpOiAoKHJlc3VsdDogRmV0Y2hSZXN1bHQ8e2RhdGE6IGFueX0+KSA9PiBJbnRlcm5hbFJlZmV0Y2hRdWVyaWVzSW5jbHVkZSkgfCBJbnRlcm5hbFJlZmV0Y2hRdWVyaWVzSW5jbHVkZSB7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5yZWZldGNoUXVlcmllcykgcmV0dXJuIG9wdHMucmVmZXRjaFF1ZXJpZXM7XG5cbiAgICAvLyBTa2lwIGlmIHVwZGF0ZSBwb2xpY3kgbm90IHVzZWQgcmVmZWN0aCBxdWVyaWVzXG4gICAgaWYgKHRoaXMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5ICE9PSAncmVmZXRjaC1xdWVyaWVzJykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHF1ZXJpZXMgPSB0aGlzLmdldExvYWRRdWVyaWVzKCk7XG4gICAgaWYgKCFxdWVyaWVzLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gU2tpcCBpZiBlbXB0eVxuXG4gICAgLy8gRmluZCB0aGUgcmVmZXRjaCBxdWVyaWVzIGRlZmluaXRpb25cbiAgICByZXR1cm4gdGhpcy5maW5kUmVmZXRjaFF1ZXJpZXMoe3F1ZXJpZXN9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMb2FkUXVlcmllcygpOiBEb2N1bWVudE5vZGVbXSB7XG4gICAgcmV0dXJuIFt0aGlzLnF1ZXJpZXMubG9hZEFsbCwgdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoVG90YWxdLmZpbHRlcihpc05vdE5pbCk7XG4gIH1cblxufVxuIl19
|
|
@@ -19012,6 +19012,29 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19012
19012
|
return res;
|
|
19013
19013
|
});
|
|
19014
19014
|
}
|
|
19015
|
+
countAll(filter, opts) {
|
|
19016
|
+
var _a;
|
|
19017
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
19018
|
+
// If no countAll query
|
|
19019
|
+
if (!this.queries.countAll) {
|
|
19020
|
+
// Fail if no loadAll (cannot count)
|
|
19021
|
+
if (!this.queries.loadAllWithTotal)
|
|
19022
|
+
throw new Error('Not implemented');
|
|
19023
|
+
// Use loadAll query, with size = 0;
|
|
19024
|
+
return ((_a = (yield this.loadAll(0, 1, null, null, filter, { withTotal: true }))) === null || _a === void 0 ? void 0 : _a.total) || 0;
|
|
19025
|
+
}
|
|
19026
|
+
filter = this.asFilter(filter);
|
|
19027
|
+
const res = yield this.graphql.query({
|
|
19028
|
+
query: this.queries.countAll,
|
|
19029
|
+
variables: {
|
|
19030
|
+
filter: filter && filter.asPodObject()
|
|
19031
|
+
},
|
|
19032
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
|
|
19033
|
+
fetchPolicy: opts && opts.fetchPolicy || 'network-only'
|
|
19034
|
+
});
|
|
19035
|
+
return res.total;
|
|
19036
|
+
});
|
|
19037
|
+
}
|
|
19015
19038
|
saveAll(entities, opts) {
|
|
19016
19039
|
return __awaiter(this, void 0, void 0, function* () {
|
|
19017
19040
|
if (isEmptyArray(entities))
|